Overview

Request 5455 (accepted)

- Update to version 27.1.3:
* libobs: Update version to 27.1.2
* Revert "libobs: Don't return/set 0 mixers for non-audio sources"
* libobs: Update to version 27.1.2
* Revert "UI: Disable hotkeys when a user is expected to type text"
* libobs: Don't return/set 0 mixers for non-audio sources
* UI: Fix tab stop order for Draw safe areas
* UI: Do not disable AutoConf bandwidth test for YouTube
* libobs: Remove DrawSrgbDecompressPremultiplied
* UI: Fix Twitch bandwidth test checkbox
* UI: Remove thread from YouTube auto config
* obs-browser: Filter textures in linear space
* UI: Adjust minimum size of source toolbars smaller
* libobs/util: Add type test in darray macros for GCC
* libobs/util: Add a cast for da_push_back_array argument
* libobs: Fix const qualifier mismatch on DARRAY
* libobs: Add casts to da_push_back_array arguments
* libobs: DrawSrgbDecompress for default_rect.effect
* libobs: Simplify util_mul_div64 for x64 on Windows
* win-capture: Update graphics hook version to 1.7.1
* libobs: Update version to 27.1.1
* UI: Add missing Auth::Load() when duplicating/creating profile
* linux-capture: Fail when libdrm missing
* obs-browser: Update translations from Crowdin
* obs-browser: Update version to 2.16.2
* Update translations from Crowdin
* libobs: Update version to 27.1.0
* linux-capture: Add libdrm dependency check (#5326)
* Revert "UI: Update volume controls by callback"
* libobs: Make portal inhibitor asynchronous

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

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,327 @@
2
 -------------------------------------------------------------------
3
+Tue Oct 05 02:03:33 UTC 2021 - Jimmy Berry <jimmy@boombatower.com>
4
+
5
+- Update to version 27.1.3:
6
+  * libobs: Update version to 27.1.2
7
+  * Revert "libobs: Don't return/set 0 mixers for non-audio sources"
8
+  * libobs: Update to version 27.1.2
9
+  * Revert "UI: Disable hotkeys when a user is expected to type text"
10
+  * libobs: Don't return/set 0 mixers for non-audio sources
11
+  * UI: Fix tab stop order for Draw safe areas
12
+  * UI: Do not disable AutoConf bandwidth test for YouTube
13
+  * libobs: Remove DrawSrgbDecompressPremultiplied
14
+  * UI: Fix Twitch bandwidth test checkbox
15
+  * UI: Remove thread from YouTube auto config
16
+  * obs-browser: Filter textures in linear space
17
+  * UI: Adjust minimum size of source toolbars smaller
18
+  * libobs/util: Add type test in darray macros for GCC
19
+  * libobs/util: Add a cast for da_push_back_array argument
20
+  * libobs: Fix const qualifier mismatch on DARRAY
21
+  * libobs: Add casts to da_push_back_array arguments
22
+  * libobs: DrawSrgbDecompress for default_rect.effect
23
+  * libobs: Simplify util_mul_div64 for x64 on Windows
24
+  * win-capture: Update graphics hook version to 1.7.1
25
+  * libobs: Update version to 27.1.1
26
+  * UI: Add missing Auth::Load() when duplicating/creating profile
27
+  * linux-capture: Fail when libdrm missing
28
+  * obs-browser: Update translations from Crowdin
29
+  * obs-browser: Update version to 2.16.2
30
+  * Update translations from Crowdin
31
+  * libobs: Update version to 27.1.0
32
+  * linux-capture: Add libdrm dependency check (#5326)
33
+  * Revert "UI: Update volume controls by callback"
34
+  * libobs: Make portal inhibitor asynchronous
35
+  * UI: Prevent Restream OAuth disconnection
36
+  * linux-capture: Omit implicit modifier token when creating texture
37
+  * libobs-opengl: Load EGL via Glad on Wayland platform
38
+  * docs: Add transition duration changed event
39
+  * win-dshow: Don't buffer Elgato Facecam device by default
40
+  * UI: Fix enter/esc when hotkeys are disabled in focus
41
+  * linux-capture: Lookup session handle without typechecks
42
+  * CI: Fix double zip by uploading build folders
43
+  * UI: Use STL random as fallback
44
+  * UI: Fix AuthListener error HTTP response body
45
+  * UI: Abort YouTube login on cancel or listener fail
46
+  * UI: Force minimum reconnect delay of 1 second
47
+  * UI: Remove test YouTube QSS from Dark theme
48
+  * libobs-d3d11: Fix present skip comment
49
+  * UI: Add label/widget buddying to YouTube dialog
50
+  * UI: Use secure RNG for generating YouTube state parameter
51
+  * UI: Properly verify state parameter for YouTube auth
52
+  * libobs-d3d11: Use waitable object to avoid stalls
53
+  * libobs-d3d11: Simplify DXGI factory creation
54
+  * libobs-d3d11: Prefer ComPtr Clear() over Release()
55
+  * libobs: Support move for mismatched ComPtr
56
+  * UI: Update Acri theme styling
57
+  * UI: Update dark theme button styling
58
+  * UI: Fix loading auto start/stop setting in YT dialog
59
+  * cmake: Add Qt JPEG/GIF plugins to Windows libraries
60
+  * UI: Add thumbnail option to YouTube broadcast setup
61
+  * UI: Add postDataSize option to GetRemoteText
62
+  * UI: Fix used source for SetCurrentScene during undo
63
+  * UI: Remove unused RemoveSelectedSceneItem slot
64
+  * libobs: Block sceneitem create if item source is removed
65
+  * UI/updater: Remove dependency on psapi.lib
66
+  * win-capture: Remove dependency on psapi.lib
67
+  * libobs: Remove dependency on psapi.lib
68
+  * UI: Check selected broadcast when re-opening YT dialog
69
+  * UI: Change YouTube Broadcast Dialog title
70
+  * UI: Add remember settings checkbox to YT broadcast setup
71
+  * UI: Rework YouTube broadcast setup flow
72
+  * deps/media-playback: Handle discontinuities to fix video stalls
73
+  * libobs: Actually fix ungroup deadlock
74
+  * Revert "libobs: Avoid request graphics lock after full_lock(scene)."
75
+  * libobs: Restrict emmintrin.h to x86(_64) platform
76
+  * UI: Add -DNOMINMAX to CMake on MSVC
77
+  * libobs: Fix near and far redefinition on MSVC
78
+  * libobs: Fix connect() redefinition on MSVC
79
+  * obs-outputs: Add WIN32_LEAN_AND_MEAN to avoid symbol clash
80
+  * libobs: Avoid request graphics lock after full_lock(scene).
81
+  * libobs: Add profiler section for send_packet
82
+  * libobs-winrt: Require Windows 10 SDK 20348
83
+  * cmake: Require Windows 10 SDK 20348
84
+  * libobs-d3d11: Use ALLOW_TEARING if supported
85
+  * libobs-d3d11: Use FLIP_DISCARD on Windows 11
86
+  * libobs/util: Const-correct win_version_compare
87
+  * UI: Disable reconnect for bandwidth test
88
+  * UI: Enable AutoConfig bandwidth test for YT integration
89
+  * UI: Fix Qt6-incompatible operator usage
90
+  * UI: Fix Qt6-incompatible call to QLocale::setDefault
91
+  * UI: Update volume controls by callback
92
+  * rtmp-services: Add Disciple Media
93
+  * libobs: FIx missing noexcept warnings
94
+  * libobs/graphics: Fix gs_generalize_format warning
95
+  * UI: Fix YT chat being shown when selecting private event
96
+  * UI: Only start YT check thread if auto-start is disabled
97
+  * UI: Disable hotkeys when a user is expected to type text
98
+  * UI: Remove obsolete/unused struct members
99
+  * UI: Restore auth reset when switching services
100
+  * UI: Remove unused struct
101
+  * UI: Fix vertical stretching in audio settings pane
102
+  * obs-outputs: Disable Windows socket loop when using RTMPS
103
+  * UI: Use OBS locale for YouTube categories API
104
+  * libobs/util: Improve SetThreadDescription usage
105
+  * UI: Fix missing broadcast state reset on force-stop
106
+  * UI: Start YouTube check thread after output starts
107
+  * UI: Actually set AutoConfig bitrate max to 51 Mbps
108
+  * UI: Change YouTube description input to QPlainTextEdit
109
+  * UI: Bump AutoConfig bitrate maximum to 51 Mbps
110
+  * UI: Add missing properties to ResetBroadcast
111
+  * UI: Fix crash when output source 0 is null
112
+  * win-capture: Clear stale pointers for game capture
113
+  * libobs/util: Remove old ifdefs
114
+  * UI: Fix disabled auto-start/stop checkboxes
115
+  * rtmp-services: Remove 17LIVE
116
+  * UI: Update png to svg in ui files
117
+  * docs: Clarify only DMA-BUFs with a single modifier are supported
118
+  * pipewire: Create textures from multiplanar DMA-BUF
119
+  * UI: Remove "Fullscreen Interface" menu on macOS
120
+  * UI: Fix source toolbar shifting when nothing is selected
121
+  * UI: Adjust minimum size of source toolbars
122
+  * UI: Allow overriding keyframe interval if smaller
123
+  * UI: Cache YouTube channel name
124
+  * libobs: Add missing util.hpp to CMakeLists.txt
125
+  * obs-filters: Fix NvAFX mutex leak
126
+  * libobs: Fix pthread mutex leaks
127
+  * libobs/util: Fix pthread mutex leaks
128
+  * libobs/media-io: Fix leaks and error handling
129
+  * libobs/callback: Fix pthread mutex leaks
130
+  * deps/obs-scripting: Fix pthread mutex leaks
131
+  * libobs/util: pthread_mutex_init_recursive helper
132
+  * UI: Adjustments to YouTube integration strings
133
+  * obs-browser: Disable Qt tooltip on old Qt versions
134
+  * obs-browser: Update version to 2.16.0
135
+  * UI: Add YouTube Chat Dock
136
+  * libobs: Defer reconfiguring encoders to the encode threads
137
+  * Revert "obs-ffmpeg, obs-qsv11: Disable dynamic bitrate support"
138
+  * UI: Fix incorrect OBSTheme definition for highlighted text color
139
+  * UI: Use Palette in all default themes
140
+  * UI: Load theme palette before loading theme
141
+  * image-source: Fix gif not working in studio mode
142
+  * UI: Add styling for YouTube integration
143
+  * cmake: Copy correct file for Qt imageformat plugin
144
+  * UI: Use inline const for shared vector
145
+  * decklink: Cleanup hide/show code
146
+  * UI: Hide auto-start/auto-stop options in YouTube dialog
147
+  * UI: Replace bad YouTube link with popup helper
148
+  * decklink: Fix deactivate when not showing
149
+  * UI: Fix minor leak
150
+  * UI: Add option to draw safe areas in preview
151
+  * obs-ffmpeg, obs-qsv11: Disable dynamic bitrate support
152
+  * UI: Add required links when using YouTube
153
+  * libobs-winrt: Replace casts with data access
154
+  * libobs-winrt: Improve error logging code
155
+  * decklink-output-ui: Don't update UI during shutdown
156
+  * win-dshow: Avoid redundant string conversions
157
+  * win-dshow: Use constant references for resolution check
158
+  * UI: Fix redo recreating sources in the wrong scene
159
+  * UI: Show source icon in context bar
160
+  * UI: Add menu bar item to show missing files dialog
161
+  * UI: Fix missing #if for autostart warning
162
+  * UI: Add "Don't show again" checkbox to YT auto start warning
163
+  * UI: Show loading indicator while fetching YouTube Events
164
+  * UI: Fix YouTube event selection, API usage, stream resumption
165
+  * UI: Improve YouTube (error) translatability
166
+  * UI: Show error if Google account has no channels
167
+  * UI: Improve YouTube API HTTP error handling
168
+  * UI: Add fail_on_error parameter to GetRemoteFile
169
+  * win-capture: Fix D3D12 third party overlay capture
170
+  * UI: Dim hidden source items in source tree
171
+  * mac-virtualcam: Move DAL plugin to plugin data directory
172
+  * Revert "UI: Remove macOS-Default Full Screen Menu Item"
173
+  * UI: Remove macOS-Default Full Screen Menu Item
174
+  * UI: Show name of scene item in Transform window title
175
+  * UI: Fix media controls toolbar default size and styling
176
+  * UI: Change the Source Toolbar to not be fixed size
177
+  * UI: Change QWidgets to QFrame so Qt Creator doesn't hide these entries
178
+  * UI: Apply QSS to generic hotkey settings label
179
+  * cmake: Remove local files for checking threading support
180
+  * UI: Clean up Update form markup
181
+  * UI: Clean up Remux form markup
182
+  * UI: Clean up Missing Files form markup
183
+  * UI: Clean up Importer form markup
184
+  * UI: Clean up Custom Browser Docks form markup
185
+  * UI: Clean up Transform form markup
186
+  * UI: Clean up Interact form markup
187
+  * UI: Clean up Filters form markup
188
+  * UI: Clean up About form markup
189
+  * UI: Clean up AutoConfig form markup
190
+  * UI: Clean up toolbar form markup
191
+  * UI: Clean up Settings form markup
192
+  * UI: Query rtmp-services for stream key link URLs
193
+  * rtmp-services: Add stream key link URLs
194
+  * rtmp-services: Change "stream key link" key to "stream_key_link"
195
+  * UI,obs-transitions: Enable missing files dialog for stinger transition
196
+  * rtmp-services: Add BoxCast
197
+  * Revert "mac-virtualcam: Move DAL plugin to plugin data directory"
198
+  * mac-virtualcam: Move DAL plugin to plugin data directory
199
+  * graphics-hook: Fix D3D11On12 usages
200
+  * deps/media-playback: Fix trailing whitespace
201
+  * UI: Fix compiler error
202
+  * UI: Fix frontend API cleanup/exit event order
203
+  * deps/media-playback: Fix bug about audio without best_effort_timestamp
204
+  * frontend-tools: Fix crash on shutdown
205
+  * UI: Create YouTube LiveStream objects as non-reusable
206
+  * UI: Force Wayland usage under Wayland session
207
+  * obs-outputs: Fix binding to IPv6 addresses on *nix
208
+  * linux-capture: Load XSHM capture on EGL/X11
209
+  * deps/media-playback: Less accurate sleep
210
+  * libobs-d3d11: Avoid vector usage
211
+  * libobs: Avoid recycling async frames
212
+  * libobs/graphics: Avoid darray recycle
213
+  * UI: Trim custom server string
214
+  * UI: Add functions to open properties and filters
215
+  * obs-frontend-api: Send OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP
216
+  * obs-transitions: Fix desync of stinger track matte
217
+  * rtmp-services: Fix comparison mismatch warning
218
+  * UI: Fix unused variable outside of #if
219
+  * rtmp-services: Fix typo'd "recommended" key for various services
220
+  * Revert "UI: Initialize Studio mode after loading scenes"
221
+  * rtmp-services: Add 17LIVE service
222
+  * rtmp-services: Add Volume.com
223
+  * libobs/util: Fix reading memory usage on Linux
224
+  * obs-transitions: Add "Mask only" track matte option
225
+  * obs-transitions: Fix missing newline at end of file
226
+  * UI: Replace '&&' with 'and' in YT integration
227
+  * UI: Show autoremux progress bar
228
+  * UI: Autoremux Replay Buffer
229
+  * Revert "docs: Rename Code of Conduct to fix GitHub detection"
230
+  * docs: Rename Code of Conduct to fix GitHub detection
231
+  * UI: Add YouTube integration
232
+  * docs: Add link to CoC to contributing guidelines
233
+  * obs-filters: Correct log prefix for noise suppression filter
234
+  * obs-filters: Use correct NVIDIA capitalization
235
+  * UI: Fix da_push_back taking a wrong type of item
236
+  * libobs: Fix da_push_back taking a wrong type of item
237
+  * rtmp-services: Add "Lovecast"
238
+  * UI: Fix undo delete scene that is used as source
239
+  * Add Code of Conduct
240
+  * obs-ffmpeg: Translate VAAPI property names
241
+  * obs-filters: Sample mask/blend texture linearly
242
+  * Revert "UI: Disable drag/drop on Linux scenes/sources (for now)"
243
+  * obs-browser: Update version to 2.15.0
244
+  * UI: Add support for external browser OAuth
245
+  * UI: Specify exact service to auth login callbacks
246
+  * UI: Add request type param to GetRemoteText
247
+  * UI: Set Qt locale to current OBS locale
248
+  * UI: Include QtNetwork as a direct dependency
249
+  * win-capture: Fix formatting
250
+  * obs-filters: Minor NVAFX cleanup
251
+  * UI: Simplify expressions in GetMonitorName
252
+  * win-capture: Use better defaults in thread_is_suspended
253
+  * win-capture: Move NT functions to shared file
254
+  * UI: Handle prefixes when using paths in recording format
255
+  * libobs: Add stop_audio function, change shutdown order
256
+  * UI: Initialize Studio mode after loading scenes
257
+  * decklink: Add destructor for OBSVideoFrame, initialize flags
258
+  * UI: Use larger buffer for scene collection filename
259
+  * decklink: Fix truncation warnings
260
+  * libobs: Round up chroma sizes for odd resolutions
261
+  * libobs: Fix stack buffer overflow in build_current_order_info
262
+  * UI: Fix ambiguous conversion error
263
+  * UI: Fix formatting on window-basic-settings.cpp
264
+  * UI: Add "18 Scenes" multiview option
265
+  * flatpak: Remove D-Bus permissions to talk to session managers
266
+  * libobs: Add portal inhibitor
267
+  * decklink: Don't show incompatible formats
268
+  * libobs-winrt, win-capture: Linear SRGB support
269
+  * libobs-opengl: Fix GS_R10G10B10A2 format
270
+  * libobs-d3d11: Relax texture format copy check
271
+  * libobs-d3d11: Use typeless texture for duplicator
272
+  * libobs: Plumb texcoord hint to reduce GPU cost
273
+  * libobs: Add gs_generalize_format helper
274
+  * libobs: Add DrawSrgbDecompress default technique
275
+  * libobs: DrawSrgbDecompressPremultiplied technique
276
+  * UI: Fix displayed autoremux file name
277
+  * UI: Add obs-frontend-api functions to create/delete profiles
278
+  * UI: Add startup flag to disable missing files window
279
+  * UI: Add obs_frontend_get_current_profile_path()
280
+  * libobs: Add `obs_enum_all_sources()`
281
+  * libobs, UI: Add support for button properties as links
282
+  * libobs/nix: List Flatpak search paths
283
+  * rtmp-services: add bilibili live
284
+  * pipewire: Properly pass sizes to gs_draw_sprite_subregion
285
+  * obs-filters: Fix comparison type mismatch
286
+  * obs-ffmpeg: Fix comparison type mismatch
287
+  * libobs: Fix warnings
288
+  * text-freetype2: Add alpha channel property
289
+  * mac-syphon: Use DrawOpaque as necessary
290
+  * libobs: Add DrawOpaque for rect effect
291
+  * libobs: Fix memory overrun if libobs version mismatches
292
+  * UI: Log Show/Hide transitions on scene collection load
293
+  * cmake: Enable full optimizations for RelWithDebInfo MSVC builds
294
+  * UI: Fix audio mixer UI not updating from threads
295
+  * libobs/callback: Fix signal_handler_disconnect_global
296
+  * rtmp-services: Fix implicit function declaration
297
+  * rtmp-services: Update Facebook recommended settings
298
+  * rtmp-services: Implement bitrate matrix
299
+  * UI: Check if recording is paused when trying to pause
300
+  * mac-capture: Update display names
301
+  * linux-capture: Use portal's D-Bus on PipeWire captures
302
+  * linux-capture: Add getters for portal's D-Bus connection and proxy
303
+  * linux-capture: Conditionally register PipeWire captures
304
+  * obs-qsv11: Update Intel Media SDK to 2021 R1
305
+  * UI: Handle HTTP errors for fetching remote files
306
+  * UI: Handle & log HTTP errors for RemoteTextThread
307
+  * win-capture: Return early in property callbacks if param is null
308
+  * win-capture: Check for WGC support on plugin load
309
+  * win-capture: Determine D3D11 usage once per run
310
+  * UI: Remove fractional scaling ifdefs
311
+  * UI: Make projector display resolutions DPI-aware
312
+  * libobs-winrt: Use better Windows SDK version check
313
+  * obs-ffmpeg: Don't purge packets when there are none
314
+  * pipewire: Properly account for cursor hotspot
315
+  * UI: Fix win uninstall not deleting desktop shortcut
316
+  * UI: Fix code indentation for Edit Undo/Redo
317
+  * UI/installer: Silently install Visual C++ Redist
318
+  * win-capture: Bump graphics hook version to 1.7.0
319
+  * win-capture: Remove custom function hooking
320
+  * graphics-hook: Use Detours for function hooking
321
+  * graphics-hook: Remove unused header
322
+  * UI: Delete log viewer when closing it
323
+  * UI: Simplify log viewer on launch code
324
+
325
+-------------------------------------------------------------------
326
 Fri Jul 30 07:19:35 UTC 2021 - Guillaume G. <guillaume@opensuse.org>
327
 
328
 - Build on aarch64 as well
329
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        27.0.1
4
+Version:        27.1.3
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/27.0.1</param>
6
+    <param name="revision">refs/tags/27.1.3</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">cd5873e9bcfaf9cc2614939ddb3264bea919be4a</param>
6
+    <param name="changesrevision">3c14e4ece250a862a5fa62aa7e85f476f7545ca4</param>
7
   </service>
8
 </servicedata>
9
obs-studio-27.0.1.tar.xz/UI/data/locale/en-PT.ini Deleted
340
 
1
@@ -1,338 +0,0 @@
2
-Language="Pirate English"
3
-OK="Arr"
4
-Apply="Yay"
5
-Cancel="Narr"
6
-Save="Finish Manglin'"
7
-Discard="Scrap"
8
-Yes="Aye"
9
-No="Nay"
10
-Remove="Toss Overboard"
11
-Rename="Describe Bett'r"
12
-MoveDown="Move Below"
13
-Settings="Settin's"
14
-Name="Ye name"
15
-Exit="Abandon Ship"
16
-Mixer="Ye Olde Sound Mixer"
17
-Browse="Check yer maps"
18
-ResizeProjectorWindowToContent="Fit window t' content"
19
-Clear="Plunder"
20
-Hide="Bury"
21
-UnhideAll="Unbury All"
22
-DisableOSXVSync="Disable hackOS V-Sync"
23
-ResetOSXVSyncOnExit="Reset hackOS V-Sync on Exit"
24
-HighResourceUsage="Encodin' o'erloaded! Consider turnin' down video settin's or usin' a faster encodin' preset."
25
-FadeToBlack="Fade t' Black"
26
-Left="Portward"
27
-Right="Starboard"
28
-Bottom="Oceanpit"
29
-RemuxRecordings="Remux Recordin's"
30
-Next="Onward"
31
-HideMixer="Bury in Mixer"
32
-TransitionOverride="Transition O'erride"
33
-DoNotShowAgain="Do nah show again"
34
-Default="(Normals)"
35
-Calculating="Calculatin‘..."
36
-Fullscreen="Full mast"
37
-Windowed="Porthole"
38
-Percent="Par'cent"
39
-RefreshBrowser="Bring about again"
40
-AspectRatio="Aspect Rrratio <b>%1:%2</b>"
41
-LockVolume="Chain up dem Sounds"
42
-LogViewer="Find yer mighty Issue"
43
-ShowOnStartup="Show on starrrtup"
44
-OpenFile="Partake of loot"
45
-AddValue="Add up yer %1"
46
-AlreadyRunning.Title="OBS be already runnin'"
47
-AlreadyRunning.Text="OBS be already runnin'! Unless ye meant t' do this, shut down any existin' instances o' OBS afore tryin' t' run a new instance. If ye 'ave OBS set t' minimize t' th' system tray, check t' see if 'tis still runnin' thar."
48
-AlreadyRunning.LaunchAnyway="Steer through the storm"
49
-ChromeOS.Title="Yer ship be unsupported"
50
-ChromeOS.Text="OBS appears to be runnin' on a ChromeOS ship. Yer ship be unsupported"
51
-DockCloseWarning.Title="Closin' Dockable Window"
52
-DockCloseWarning.Text="Ye jus' closed a dockable window. If ye'd like t' show it again, use th' View → Docks menu on th' menu bar."
53
-ExtraBrowsers="Ye Original Display of Ye Mighty Oceans"
54
-ExtraBrowsers.Info="Add docks by givin' them a name 'n URL, then jab Apply or Close t' open th' docks. Ye can add or scuttle docks at any time."
55
-ExtraBrowsers.DockName="Ye Ship's Arrival Name"
56
-Auth.Authing.Title="Authenticatin’..."
57
-Auth.Authing.Text="Authenticatin' wit' %1, wait..."
58
-Auth.AuthFailure.Text="Failed t' authenticate wit' %1:\n\n%2: %3"
59
-Auth.InvalidScope.Text="Th' authentication requirements fer %1 'ave changed. Some features may nah be available."
60
-Auth.LoadingChannel.Title="Loadin' channel information..."
61
-Auth.LoadingChannel.Text="Loadin' channel information fer %1, wait..."
62
-Auth.ChannelFailure.Title="Failed t' load channel"
63
-Auth.ChannelFailure.Text="Failed t' load channel information fer %1\n\n%2: %3"
64
-TwitchAuth.TwoFactorFail.Title="Could nah query stream key"
65
-TwitchAuth.TwoFactorFail.Text="OBS was unable t' connect t' yer Twitch account. make sure two-factor authentication be set up in yer <a href='https://www.twitch.tv/settings/security'>Twitch security settings</a> as 'tis required t' stream."
66
-RestreamAuth.Channels="Seas of the Restream"
67
-Paste.Filters="Turn over yer mighty filters"
68
-BrowserPanelInit.Title="Settin' sail..."
69
-BrowserPanelInit.Text="Initializin' browser, wait..."
70
-BandwidthTest.Region="Where yer from"
71
-BandwidthTest.Region.US="New World"
72
-BandwidthTest.Region.EU="Old World"
73
-BandwidthTest.Region.Asia="The Orient"
74
-BandwidthTest.Region.Other="Otha'"
75
-Basic.AutoConfig="Set up your ship, matey"
76
-Basic.AutoConfig.ApplySettings="Apply Settin's"
77
-Basic.AutoConfig.StartPage="Usage of yer Treasure"
78
-Basic.AutoConfig.StartPage.SubTitle="Specify wha' ye wants t' use th' program fer"
79
-Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimize fer streamin', loggin' be secondary"
80
-Basic.AutoConfig.StartPage.PrioritizeRecording="Optimize jus' fer loggin', I shall nah be streamin'"
81
-Basic.AutoConfig.StartPage.PrioritizeVirtualCam="I shall only be usin' th' virtual camera"
82
-Basic.AutoConfig.VideoPage="Visual settin's"
83
-Basic.AutoConfig.VideoPage.SubTitle="Specify th' video settin's ye would like t' use"
84
-Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Use yer mighty size (%1x%2)"
85
-Basic.AutoConfig.VideoPage.BaseResolution.Display="Yer Beauty %1 (%2x%3)"
86
-Basic.AutoConfig.VideoPage.FPS.UseCurrent="Use yer mighty size (%1)"
87
-Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Betwix 60 and 30, but yer prefer 60 should the seas allow"
88
-Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Betwix 60 and 30, an' provide yer largest view"
89
-Basic.AutoConfig.VideoPage.CanvasExplanation="Note: Th' canvas (base) resolution ain't necessarily th' same as th' resolution ye will stream or log wit'. Yer actual stream/loggin' resolution may be scaled down from th' canvas resolution t' reduce resource usage or bitrate requirements."
90
-Basic.AutoConfig.StreamPage="Information about yer speedy currents"
91
-Basic.AutoConfig.StreamPage.SubTitle="Board yer stream information"
92
-Basic.AutoConfig.StreamPage.ConnectAccount="Hand over yer treasures (recommended)"
93
-Basic.AutoConfig.StreamPage.DisconnectAccount="End yer conquests"
94
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="End yer conquests?"
95
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="This change will apply immediately. Are ye sure ye wants t' disconnect yer account?"
96
-Basic.AutoConfig.StreamPage.GetStreamKey="Key to thar booty"
97
-Basic.AutoConfig.StreamPage.MoreInfo="Mar Info"
98
-Basic.AutoConfig.StreamPage.UseStreamKey="Open thar booty"
99
-Basic.AutoConfig.StreamPage.Service="Sea to Voyage Upon"
100
-Basic.AutoConfig.StreamPage.Service.ShowAll="Revealin' All..."
101
-Basic.AutoConfig.StreamPage.Service.Custom="Yer duly original..."
102
-Basic.AutoConfig.StreamPage.Server="Coordinates"
103
-Basic.AutoConfig.StreamPage.StreamKey="Th' captain's order"
104
-Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimate bitrate wit' bandwidth test (may loot a few minutes)"
105
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prefer hardware encodin'"
106
-Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware Encodin' eliminates most CPU usage, but may require more bitrate t' obtain th' same level o' quality."
107
-Basic.AutoConfig.StreamPage.StreamWarning.Title="Stream warnin'"
108
-Basic.AutoConfig.StreamPage.StreamWarning.Text="Th' bandwidth test be about t' stream randomized video data without audio t' yer channel. If ye're able, 'tis recommended t' temporarily turn off savin' videos o' streams 'n set th' stream t' private 'til aft th' test has completed. Continue?"
109
-Basic.AutoConfig.TestPage="Yer voyage's results"
110
-Basic.AutoConfig.TestPage.SubTitle.Testing="Th' program be now executin' a set o' tests t' estimate th' most ideal settin's"
111
-Basic.AutoConfig.TestPage.SubTitle.Complete="Testin' finished"
112
-Basic.AutoConfig.TestPage.TestingBandwidth="Performin' bandwidth test, this may loot a few minutes..."
113
-Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Beginning yer travels to: %1..."
114
-Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="No treasure across yer Atlantic was found, repair your ship and set sail once again."
115
-Basic.AutoConfig.TestPage.TestingBandwidth.Server="Predicting yer currents for: %1"
116
-Basic.AutoConfig.TestPage.TestingStreamEncoder="Evaluating yer mighty ship, they may take a knot or two..."
117
-Basic.AutoConfig.TestPage.TestingRecordingEncoder="Evaluating yer treasures, they may take a knot or two..."
118
-Basic.AutoConfig.TestPage.TestingRes="Evaluating yer view of yer oceans, this may take a few knots..."
119
-Basic.AutoConfig.TestPage.TestingRes.Fail="Yer journey was doomed"
120
-Basic.AutoConfig.TestPage.TestingRes.Resolution="Yer ship be running at %1x%2 %3 knots..."
121
-Basic.AutoConfig.TestPage.Result.StreamingEncoder="Ship for yer Voyage"
122
-Basic.AutoConfig.TestPage.Result.RecordingEncoder="Yer ship did not make it out of port"
123
-Basic.AutoConfig.TestPage.Result.Header="My crewmates found yer best choices for treasure:"
124
-Basic.AutoConfig.TestPage.Result.Footer="T' use these settin's, jab Apply Settin's. T' reconfigure th' wizard 'n try again, jab Back. T' manually configure settin's yourself, jab Cancel 'n open Settin's."
125
-Basic.AutoConfig.Info="Yer treasure will be found on the current speed and size of yer ship."
126
-Basic.AutoConfig.RunAnytime="Yer treasure may be found at any time by going to the Tools section of yer ship."
127
-Basic.Stats="Yer ship's status"
128
-Basic.Stats.CPUUsage="Wheel Usage"
129
-Basic.Stats.HDDSpaceAvailable="Yer ship's load it can taketh"
130
-Basic.Stats.MemoryUsage="Usage of yer brig"
131
-Basic.Stats.AverageTimeToRender="Speed which yer ship crosses ye mighty oceans"
132
-Basic.Stats.SkippedFrames="Abandoned voyages due to too slow a ship"
133
-Basic.Stats.MissedFrames="Crewmates abandoned as too far behind"
134
-Basic.Stats.Output.Stream="Yer voyage"
135
-Basic.Stats.Output.Recording="Yer docking"
136
-Basic.Stats.Status="Yer position"
137
-Basic.Stats.Status.Recording="Docking"
138
-Basic.Stats.Status.Live="Conquesting"
139
-Basic.Stats.Status.Reconnecting="Tryin' to board again"
140
-Basic.Stats.Status.Inactive="Docked at port"
141
-Basic.Stats.Status.Active="On voyage"
142
-ResetUIWarning.Title="Are ye sure ye wants t' reset th' UI?"
143
-Updater.Title="Th' newest ship model be available"
144
-Updater.Text="Thar be a new update available:"
145
-Updater.Skip="Skip Ship Model"
146
-Updater.Running.Title="Program currently aboard"
147
-Updater.Running.Text="Outputs are currently active, shut down any active outputs afore attemptin' t' update"
148
-Updater.NoUpdatesAvailable.Title="Ye already got th' latest ship model"
149
-Updater.NoUpdatesAvailable.Text="Ye currently got th' latest ship model"
150
-Updater.GameCaptureActive.Title="Ship inspector active"
151
-Updater.GameCaptureActive.Text="Game capture hook library be currently in use. Close any games/programs bein' captured (or restart Windows) 'n try again."
152
-QuickTransitions.SwapScenes="Swap Preview/Output Scenes Aft Transitionin'"
153
-QuickTransitions.SwapScenesTT="Swaps th' preview 'n output scenes aft transitionin' (if th' output's original scene still exists).\nThis will nah undo any changes that may 'ave been made t' th' output's original scene."
154
-QuickTransitions.DuplicateSceneTT="When editin' th' same scene, allows editin' transform/visibility o' sources without modifyin' th' output.\nTo edit properties o' sources without modifyin' th' output, enable 'Duplicate Sources'.\nChangin' this value will reset th' current output scene (if it still exists)."
155
-QuickTransitions.EditPropertiesTT="When editin' th' same scene, allows editin' properties o' sources without modifyin' th' output.\nThis can only be used if 'Duplicate Scene' be enabled.\nCertain sources (such as capture or media sources) do nah support this 'n cannot be edited separately.\nChangin' this value will reset th' current output scene (if it still exists).\n\nWarnin': 'Cause sources will be duplicated, this may require extra system or video resources."
156
-TransitionNameDlg.Text="Board th' name o' th' transition"
157
-TitleBar.Profile="Yer ships"
158
-TitleBar.Scenes="Yer ocean"
159
-NameExists.Text="The name is already in owned."
160
-NoNameEntered.Title="Board a valid name"
161
-NoNameEntered.Text="Ye cannot use empty names."
162
-ConfirmStart.Title="Set sail?"
163
-ConfirmStart.Text="Are ye sure ye wants t' start th' stream?"
164
-ConfirmStop.Title="Stop Streamin'"
165
-ConfirmStop.Text="Are ye sure ye wants t' stop th' stream?"
166
-ConfirmStopRecord.Title="Drop anchor?"
167
-ConfirmStopRecord.Text="Are ye sure ye wants t' drop th' anchor?"
168
-ConfirmBWTest.Text="Ye 'ave OBS configured in bandwidth test mode. This mode allows fer network testin' without yer channel goin' live. Once ye be done testin', ye will needs t' disable it in order fer viewers t' be able t' see yer stream.\n\nDo ye wants t' continue?"
169
-ConfirmExit.Title="Walk OBS's plank?"
170
-ConfirmExit.Text="OBS be currently active. All streams/recordin's will be shut down. Are ye sure ye wish t' exit?"
171
-ConfirmRemove.Text="Be ye sure ye wish to make '$1' walk the plank?"
172
-ConfirmRemove.TextMultiple="Are ye sure ye wish t' scuttle %1 items?"
173
-Output.StartStreamFailed="Failed t' start streamin'"
174
-Output.StartRecordingFailed="Failed to start recordin"
175
-Output.StartReplayFailed="Failed t' start replay buffer"
176
-Output.StartFailedGeneric="Startin' th' output failed. check th' log fer details.\n\nNote: If ye be usin' th' NVENC or AMD encoders, make sure yer video drivers are up t' date."
177
-Output.ReplayBuffer.PauseWarning.Text="Warnin': Replays cannot be saved while loggin' be paused."
178
-Output.ConnectFail.Title="Failed t' connect"
179
-Output.ConnectFail.BadPath="Invalid Path or Connection URL. check yer settin's t' confirm that they be valid."
180
-Output.ConnectFail.ConnectFailed="Failed t' connect t' server"
181
-Output.ConnectFail.InvalidStream="Could nah access th' specified channel or stream key, double-check yer stream key. If 'tis correct, thar may be a problem connectin' t' th' server."
182
-Output.ConnectFail.Error="An unexpected error occurred when tryin' to connect to th' ship. More information in th' log file."
183
-Output.StreamEncodeError.Title="Encodin' error"
184
-Output.StreamEncodeError.Msg="An encoder error occurred while streamin'."
185
-Output.RecordFail.Title="Failed to start recordin'"
186
-Output.RecordFail.Unsupported="Th' output format be either unsupported or does not support more than one audio track. Please check ye settin's 'n give a go' again."
187
-Output.RecordNoSpace.Title="Ye have insufficient disk space"
188
-Output.RecordNoSpace.Msg="Thar be not sufficient disk space to continue recordin'."
189
-Output.RecordError.Title="Thar be a recordin' error"
190
-Output.RecordError.Msg="An unspecified error occurred while recordin'."
191
-Output.RecordError.EncodeErrorMsg="An encoder error occurred while loggin'."
192
-Output.BadPath.Text="Th' configured file output path be invalid. Please check ye settin's to confirm that a valid file path has be set."
193
-LogReturnDialog.Description="Yer log file has been uploaded. Ye can now share th' URL fer debuggin' or support purposes."
194
-LogReturnDialog.Description.Crash="Yer ship report has been uploaded. Ye can now share th' URL fer debuggin' purposes."
195
-LogReturnDialog.ErrorUploadingLog="Error uploadin' log file"
196
-Remux.SourceFile="OBS Recordin'"
197
-Remux.Stop="Stop Remuxin'"
198
-Remux.OBSRecording="OBS Recordin'"
199
-Basic.Main.AddSceneDlg.Text="Please enter th' moniker 'o th' scene"
200
-Basic.Main.AddSceneCollection.Text="Board th' name o' th' scene collection"
201
-Basic.Main.RenameSceneCollection.Title="Rename Ocean Collection"
202
-AddProfile.Title="Add Ship"
203
-AddProfile.Text="Board th' name o' th' ship"
204
-Basic.Main.MixerRename.Text="Board th' name o' th' audio source"
205
-Basic.Main.PreviewDisabled="Telescope be disabled"
206
-Basic.SourceSelect="Create/Select Dock"
207
-Basic.SourceSelect.CreateNew="Start anew"
208
-Basic.Main.Sources.VisibilityDescription="Controls th' visibility o' '%1' in th' canvas"
209
-Basic.PropertiesWindow.SelectColor="Choose color"
210
-Basic.PropertiesWindow.SelectFont="Choose handwriting"
211
-Basic.PropertiesWindow.Confirm="Thar are unsaved changes. Do ye wants t' keep them?"
212
-Basic.StatusBar.ReconnectSuccessful="Found 'em again"
213
-Basic.Filters.AddFilter.Text="Specify th' name o' th' filter"
214
-Basic.TransformWindow.Size="Vastness"
215
-Basic.TransformWindow.BoundsAlignment="Alignment in yer Boundin' Box"
216
-Basic.TransformWindow.Bounds="Yer Boundin' Box Size"
217
-Basic.TransformWindow.BoundsType.ScaleInner="Scale t' inner bounds"
218
-Basic.TransformWindow.BoundsType.ScaleOuter="Scale t' outer bounds"
219
-Basic.TransformWindow.BoundsType.ScaleToWidth="Scale t' width o' bounds"
220
-Basic.TransformWindow.BoundsType.ScaleToHeight="Scale t' height o' bounds"
221
-Basic.TransformWindow.BoundsType.Stretch="Stretch t' bounds"
222
-Basic.Main.AddSourceHelp.Title="Avast! Ye source could not be added"
223
-Basic.Main.AddSourceHelp.Text="Ye must have but 1 scene to add a source."
224
-Basic.Main.Scenes="View-ports"
225
-Basic.Main.Sources="Things to see"
226
-Basic.Main.Controls="Ships helm"
227
-Basic.Main.Connecting="Makin' contact..."
228
-Basic.Main.StartRecording="Start Loggin'"
229
-Basic.Main.StartStreaming="Set sail"
230
-Basic.Main.StopRecording="Drop anchor"
231
-Basic.Main.PauseRecording="Pause Loggin'"
232
-Basic.Main.UnpauseRecording="Unpause Loggin'"
233
-Basic.Main.StoppingRecording="Stoppin' Loggin'..."
234
-Basic.Main.StoppingReplayBuffer="Stoppin' Replay Buffer..."
235
-Basic.Main.StopStreaming="Stop Streamin'"
236
-Basic.Main.StoppingStreaming="Stoppin' Stream..."
237
-Basic.Main.ForceStopStreaming="Abandon ship (toss delay overboard)"
238
-Basic.MainMenu.File="The Captain (&F)"
239
-Basic.MainMenu.File.Remux="Re&mux Recordin's"
240
-Basic.MainMenu.File.Exit="E&xit and Abandon Ship"
241
-Basic.MainMenu.Profile="Shi&p"
242
-Basic.MainMenu.SceneCollection.Import="Import Map Collection"
243
-Basic.MainMenu.SceneCollection.Export="Export Map Collection"
244
-Basic.MainMenu.Profile.Exists="Thar ship already exists"
245
-Basic.MainMenu.SceneCollection.Exists="Thar map collection already exists"
246
-Basic.MainMenu.Help="Assist me, maties (&H)"
247
-Basic.MainMenu.Help.Logs.ShowLogs="&Show Loggin' Files"
248
-Basic.MainMenu.Help.Logs.UploadCurrentLog="Upload &Current Loggin' File"
249
-Basic.MainMenu.Help.CheckForUpdates="Check Fer Newest Ship Model"
250
-Basic.MainMenu.Help.CrashLogs="C&rashed Ships"
251
-Basic.MainMenu.Help.CrashLogs.ShowLogs="&Show Crashed Ships"
252
-Basic.Settings.ProgramRestart="Th' program must be restarted fer these settin's t' take effect."
253
-Basic.Settings.Confirm="Ye 'ave unsaved changes. Save changes?"
254
-Basic.Settings.General.EnableAutoUpdates="Automatically check fer updates on startup"
255
-Basic.Settings.General.WarnBeforeStartingStream="Show confirmation dialog when startin' streams"
256
-Basic.Settings.General.WarnBeforeStoppingStream="Show confirmation dialog when stoppin' streams"
257
-Basic.Settings.General.WarnBeforeStoppingRecord="Show confirmation dialog when stoppin' loggin'"
258
-Basic.Settings.General.HideProjectorCursor="Hide cursor o'er projectors"
259
-Basic.Settings.General.Snapping="Source Alignment Snappin'"
260
-Basic.Settings.General.ScreenSnapping="Snap Thar Sources to edge o' screen"
261
-Basic.Settings.General.CenterSnapping="Snap Sources t' horizontal 'n vertical center"
262
-Basic.Settings.General.SourceSnapping="Snap Sources t' other sources"
263
-Basic.Settings.General.RecordWhenStreaming="Automatically log when streamin'"
264
-Basic.Settings.General.KeepRecordingWhenStreamStops="Keep loggin' when stream stops"
265
-Basic.Settings.General.ReplayBufferWhileStreaming="Automatically start replay buffer when streamin'"
266
-Basic.Settings.General.SysTray="Ships Bilge"
267
-Basic.Settings.General.SysTrayWhenStarted="Minimize t' system tray when started"
268
-Basic.Settings.General.SystemTrayHideMinimize="Always minimize t' ships bilge instead o' main deck"
269
-Basic.Settings.General.OverflowHidden="Hide o'erflow"
270
-Basic.Settings.General.OverflowAlwaysVisible="O'erflow always visible"
271
-Basic.Settings.General.OverflowSelectionHidden="Show o'erflow even when source be invisible"
272
-Basic.Settings.General.AutomaticCollectionSearch="Search known locations fer map collections when importin'"
273
-Basic.Settings.General.SwitchOnDoubleClick="Transition t' scene when double-skewered"
274
-Basic.Settings.General.Multiview.MouseSwitch="Click t' switch between maps"
275
-Basic.Settings.General.Multiview.DrawSourceNames="Show map names"
276
-Basic.Settings.Stream.Custom.Username="Captain"
277
-Basic.Settings.Stream.BandwidthTestMode="Enable Bandwidth Testin' Mode"
278
-Basic.Settings.Stream.TTVAddon.Both="BetterTTV n' FrankerFaceZ"
279
-Basic.Settings.Stream.MissingSettingAlert="Missin' Stream Setup"
280
-Basic.Settings.Stream.StreamSettingsWarning="Open Settin's"
281
-Basic.Settings.Stream.MissingUrlAndApiKey="URL 'n Stream Key are missin'.\n\nOpen settin's t' board th' URL 'n Stream Key in th' 'stream' tab."
282
-Basic.Settings.Stream.MissingUrl="Stream URL be missin'.\n\nOpen settin's t' board th' URL in th' 'Stream' tab."
283
-Basic.Settings.Stream.MissingStreamKey="Stream key be missin'.\n\nOpen settin's t' board th' stream key in th' 'Stream' tab."
284
-Basic.Settings.Stream.IgnoreRecommended="Ignore streamin' service settin' recommendations"
285
-Basic.Settings.Stream.IgnoreRecommended.Warn.Title="O'erride Recommended Settin's"
286
-Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Warnin': Ignorin' th' service's limitations may result in degraded stream quality or prevent ye from streamin'.\n\nContinue?"
287
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Warnin': Th' streamin' video bitrate will be set t' %1, which be th' upper limit fer th' current streamin' service."
288
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Warnin': Th' streamin' audio bitrate will be set t' %1, which be th' upper limit fer th' current streamin' service."
289
-Basic.Settings.Output.Simple.Warn.CannotPause="Warnin': Recordin's cannot be paused if th' loggin' quality be set t' \"Same as stream\"."
290
-Basic.Settings.Output.Simple.Warn.Encoder="Warnin': Loggin' wit' a software encoder at a different quality than th' stream will require extra CPU usage if ye stream 'n log at th' same time."
291
-Basic.Settings.Output.Simple.Warn.Lossless="Warnin': Lossless quality generates tremendously large file sizes! Lossless quality can use upward o' 7 gigabytes o' disk space per minute at high resolutions 'n framerates. Lossless ain't recommended fer long recordin's unless ye 'ave a mighty large amount o' disk space available."
292
-Basic.Settings.Output.Simple.Warn.Lossless.Msg="Are ye sure ye wants t' use lossless quality?"
293
-Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless quality warnin'!"
294
-Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="This streamin' service does nah support yer current output resolution 'n/or framerate. They will be changed t' th' closest compatible value:\n\n%1\n\nDo ye wants t' continue?"
295
-Basic.Settings.Output.Reconnect="Automatically Sail"
296
-Basic.Settings.Output.Advanced="Enable Advanced Encoder Settin's"
297
-Basic.Settings.Output.CustomEncoderSettings="Custom Encoder Settin's"
298
-Basic.Settings.Output.CustomMuxerSettings="Custom Muxer Settin's"
299
-Basic.Settings.Output.NoSpaceFileName="Generate File Name witout Space"
300
-Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Common loggin' formats"
301
-Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoder Settin's (if any)"
302
-Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer Settin's (if any)"
303
-Basic.Settings.Video="Movin' portraits"
304
-Basic.Settings.Video.Adapter="Movin' Portraits Adapter:"
305
-Basic.Settings.Video.FPS="FPS:"
306
-Basic.Settings.Audio.MultiChannelWarning.Enabled="WARNING: Surround sound audio be enabled."
307
-Basic.Settings.Audio.MultichannelWarning="If streamin', check t' see if yer streamin' service supports both surround sound ingest 'n surround sound playback. Facebook 360 Live be one example where surround sound be fully supported. Although Facebook Live 'n YouTube Live both accept surround ingest, Facebook Live downmixes t' stereo, 'n YouTube Live plays only two channels.\n\nOBS audio filters are compatible wit' surround sound, though VST plugin support ain't guaranteed."
308
-Basic.Settings.Audio.MultichannelWarning.Confirm="Are ye sure ye wants t' enable surround sound audio?"
309
-Basic.Settings.Audio.UnknownAudioDevice="[Device nah connected or nah available]"
310
-Basic.Settings.Advanced.FormatWarning="Warnin': Color formats other than NV12 are primarily intended fer loggin', 'n are nah recommended when streamin'. Streamin' may incur increased CPU usage due t' color format conversion."
311
-Basic.Settings.Advanced.StreamDelay="Delay thar journey"
312
-Basic.Settings.Advanced.StreamDelay.Preserve="Preserve cutoff point (increase delay) when reconnectin'"
313
-Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Disable hotkeys when main window be in focus"
314
-Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Disable hotkeys when main window ain't in focus"
315
-Basic.Settings.Advanced.AutoRemux="Automatically remux t' mp4"
316
-Basic.Settings.Advanced.AutoRemux.MP4="(log as mkv)"
317
-Basic.Settings.Hotkeys.Pair="Key combinations shared wit' '%1' act as toggles"
318
-OutputWarnings.NoTracksSelected="Ye must select at least one track"
319
-OutputWarnings.MP4Recording="Warnin': Recordin's saved t' MP4/MOV will be unrecoverable if th' file cannot be finalized (e.g. as a result o' BSODs, power losses, etc.). If ye wants t' log multiple audio tracks consider usin' MKV 'n remux th' loggin' t' MP4/MOV aft 'tis finished (File → Remux Recordin's)"
320
-OutputWarnings.CannotPause="Warnin': Recordin's cannot be paused if th' loggin' encoder be set t' \"(Use stream encoder)\""
321
-FinalScene.Title="Failed to delete thar map"
322
-FinalScene.Text="Thar needs t' be at least one scene."
323
-NoSources.Text="It looks like ye haven't added any video sources yet, so ye will only be outputtin' a blank screen. Are ye sure ye wants t' do this?"
324
-NoSources.Text.AddSource="Ye can add sources by skewerin' th' + icon under th' Sources box in th' main window at any time."
325
-NoSources.Label="Ye don't 'ave any sources.\nClick th' + button below,\nor right jab here t' add one."
326
-About="'Bout"
327
-About.Info="OBS Studio be a free 'n open source video loggin' 'n live streamin' software."
328
-About.Donate="Be sharin' yer gold doubloons"
329
-About.Contribute="Toss a coin t' ye olde OBS"
330
-ResizeOutputSizeOfSource.Text="Th' base 'n output resolutions will be resized t' th' size o' th' current source."
331
-ResizeOutputSizeOfSource.Continue="Do ye wants t' continue?"
332
-Importer="Map Collection Importer"
333
-Importer.SelectCollection="Select a Map Collection"
334
-Importer.Collection="Map Collection"
335
-Importer.HelpText="Add files t' this window t' import collections from OBS or other supported programs."
336
-Importer.AutomaticCollectionPrompt="Automatically Search fer Scene Collections"
337
-Importer.AutomaticCollectionText="OBS can automatically find importable scene collections from supported third-party programs. Would ye like OBS t' automatically find collections fer ye?\n\nYou can change this later in Settin's > General > Importers."
338
-Restart="Yar ship needs a lookover"
339
-NeedsRestart="OBS Studio be needin' a sail back. Do ye want t' sail back now?"
340
obs-studio-27.0.1.tar.xz/UI/data/locale/ig-NG.ini Deleted
9
 
1
@@ -1,7 +0,0 @@
2
-Language="Igbo"
3
-Close="Mechie"
4
-Yes="Ee"
5
-No="Mba"
6
-Rename="Nyegharịa aha"
7
-Properties="Akọrọngwa gasị"
8
-Name="Aha"
9
obs-studio-27.0.1.tar.xz/cmake/Modules/CheckForPthreads.c Deleted
40
 
1
@@ -1,38 +0,0 @@
2
-#include <stdio.h>
3
-#include <pthread.h>
4
-#include <unistd.h>
5
-
6
-void* runner(void*);
7
-
8
-int res = 0;
9
-#ifdef __CLASSIC_C__
10
-int main(){
11
-  int ac;
12
-  char*av[];
13
-#else
14
-int main(int ac, char*av[]){
15
-#endif
16
-  pthread_t tid[2];
17
-  pthread_create(&tid[0], 0, runner, (void*)1);
18
-  pthread_create(&tid[1], 0, runner, (void*)2);
19
-
20
-#if defined(__BEOS__) && !defined(__ZETA__) // (no usleep on BeOS 5.)
21
-  usleep(1); // for strange behavior on single-processor sun
22
-#endif
23
-
24
-  pthread_join(tid[0], 0);
25
-  pthread_join(tid[1], 0);
26
-  if(ac > 1000){return *av[0];}
27
-  return res;
28
-}
29
-
30
-void* runner(void* args)
31
-{
32
-  int cc;
33
-  for ( cc = 0; cc < 10; cc ++ )
34
-    {
35
-    printf("%d CC: %d\n", (int)args, cc);
36
-    }
37
-  res ++;
38
-  return 0;
39
-}
40
obs-studio-27.0.1.tar.xz/cmake/Modules/FindThreads.cmake Deleted
204
 
1
@@ -1,202 +0,0 @@
2
-#.rst:
3
-# FindThreads
4
-# -----------
5
-#
6
-# This module determines the thread library of the system.
7
-#
8
-# The following import target is created
9
-#
10
-# ::
11
-#
12
-#   CMake::Threads
13
-#
14
-# The following variables are set
15
-#
16
-# ::
17
-#
18
-#   THREADS_FOUND
19
-#   THREADS_LIBRARIES
20
-#   THREADS_DEFINITIONS
21
-#
22
-# Legacy variables
23
-#
24
-# ::
25
-#
26
-#   CMAKE_THREAD_LIBS_INIT     - the thread library
27
-#   CMAKE_THREAD_DEFS_INIT     - the thread compile definitions
28
-#   CMAKE_USE_SPROC_INIT       - are we using sproc?
29
-#   CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads?
30
-#   CMAKE_USE_PTHREADS_INIT    - are we using pthreads
31
-#   CMAKE_HP_PTHREADS_INIT     - are we using hp pthreads
32
-#
33
-# For systems with multiple thread libraries, caller can set
34
-#
35
-# ::
36
-#
37
-#   CMAKE_THREAD_PREFER_PTHREAD
38
-
39
-#=============================================================================
40
-# Copyright 2002-2014 Kitware, Inc.
41
-#
42
-# Distributed under the OSI-approved BSD License (the "License");
43
-# see accompanying file Copyright.txt for details.
44
-#
45
-# This software is distributed WITHOUT ANY WARRANTY; without even the
46
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
47
-# See the License for more information.
48
-#=============================================================================
49
-# (To distribute this file outside of CMake, substitute the full
50
-#  License text for the above reference.)
51
-
52
-include(CheckIncludeFiles)
53
-include(CheckLibraryExists)
54
-include(CheckSymbolExists)
55
-set(Threads_FOUND FALSE)
56
-set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
57
-set(CMAKE_REQUIRED_QUIET ${Threads_FIND_QUIETLY})
58
-
59
-# Do we have sproc?
60
-if(CMAKE_SYSTEM_NAME MATCHES IRIX AND NOT CMAKE_THREAD_PREFER_PTHREAD)
61
-  check_include_files("sys/types.h;sys/prctl.h"  CMAKE_HAVE_SPROC_H)
62
-endif()
63
-
64
-if(CMAKE_HAVE_SPROC_H AND NOT CMAKE_THREAD_PREFER_PTHREAD)
65
-  # We have sproc
66
-  set(CMAKE_USE_SPROC_INIT 1)
67
-else()
68
-  # Do we have pthreads?
69
-  check_include_files("pthread.h" CMAKE_HAVE_PTHREAD_H)
70
-
71
-  if(CMAKE_HAVE_PTHREAD_H)
72
-
73
-    #
74
-    # We have pthread.h
75
-    # Let's check for the library now.
76
-    #
77
-
78
-    set(CMAKE_HAVE_THREADS_LIBRARY)
79
-
80
-    # Check if pthread functions are in normal C library
81
-    check_symbol_exists(pthread_create pthread.h CMAKE_HAVE_LIBC_CREATE)
82
-    if(CMAKE_HAVE_LIBC_CREATE)
83
-      set(CMAKE_THREAD_LIBS_INIT "")
84
-      set(CMAKE_HAVE_THREADS_LIBRARY 1)
85
-      set(Threads_FOUND TRUE)
86
-    endif()
87
-
88
-    if(NOT Threads_FOUND AND NOT THREADS_HAVE_PTHREAD_ARG)
89
-      message(STATUS "Check if compiler accepts -pthread")
90
-      try_run(THREADS_PTHREAD_ARG THREADS_HAVE_PTHREAD_ARG
91
-        ${CMAKE_BINARY_DIR}
92
-        ${CMAKE_CURRENT_LIST_DIR}/CheckForPthreads.c
93
-        COMPILE_DEFINITIONS -pthread
94
-        CMAKE_FLAGS -DLINK_LIBRARIES:STRING=-pthread
95
-        COMPILE_OUTPUT_VARIABLE OUTPUT)
96
-
97
-      if(THREADS_HAVE_PTHREAD_ARG)
98
-        if(THREADS_PTHREAD_ARG STREQUAL "2")
99
-          message(STATUS "Check if compiler accepts -pthread - yes")
100
-        else()
101
-          message(STATUS "Check if compiler accepts -pthread - no")
102
-          file(APPEND
103
-            ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
104
-            "Determining if compiler accepts -pthread returned ${THREADS_PTHREAD_ARG} instead of 2. The compiler had the following output:\n${OUTPUT}\n\n")
105
-          set(THREADS_HAVE_PTHREAD_ARG)
106
-        endif()
107
-      else()
108
-        message(STATUS "Check if compiler accepts -pthread - no")
109
-        file(APPEND
110
-          ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
111
-          "Determining if compiler accepts -pthread failed with the following output:\n${OUTPUT}\n\n")
112
-      endif()
113
-    endif()
114
-
115
-    if(NOT Threads_FOUND AND THREADS_HAVE_PTHREAD_ARG)
116
-      set(Threads_FOUND TRUE)
117
-      set(CMAKE_THREAD_LIBS_INIT "-pthread")
118
-      set(CMAKE_THREAD_DEFS_INIT "-pthread")
119
-    endif()
120
-
121
-    if(NOT Threads_FOUND)
122
-      if(NOT CMAKE_HAVE_THREADS_LIBRARY)
123
-        # Do we have -lpthreads
124
-        check_library_exists(pthreads pthread_create "" CMAKE_HAVE_PTHREADS_CREATE)
125
-        if(CMAKE_HAVE_PTHREADS_CREATE)
126
-          set(CMAKE_THREAD_LIBS_INIT "-lpthreads")
127
-          set(CMAKE_HAVE_THREADS_LIBRARY 1)
128
-          set(Threads_FOUND TRUE)
129
-        endif()
130
-
131
-        # Ok, how about -lpthread
132
-        check_library_exists(pthread pthread_create "" CMAKE_HAVE_PTHREAD_CREATE)
133
-        if(CMAKE_HAVE_PTHREAD_CREATE)
134
-          set(CMAKE_THREAD_LIBS_INIT "-lpthread")
135
-          set(CMAKE_HAVE_THREADS_LIBRARY 1)
136
-          set(Threads_FOUND TRUE)
137
-        endif()
138
-
139
-        if(CMAKE_SYSTEM MATCHES "SunOS.*")
140
-          # On sun also check for -lthread
141
-          check_library_exists(thread thr_create "" CMAKE_HAVE_THR_CREATE)
142
-          if(CMAKE_HAVE_THR_CREATE)
143
-            set(CMAKE_THREAD_LIBS_INIT "-lthread")
144
-            set(CMAKE_HAVE_THREADS_LIBRARY 1)
145
-            set(Threads_FOUND TRUE)
146
-          endif()
147
-        endif()
148
-      endif()
149
-    endif()
150
-
151
-  endif()
152
-endif()
153
-
154
-if(CMAKE_THREAD_LIBS_INIT OR CMAKE_HAVE_LIBC_CREATE)
155
-  set(CMAKE_USE_PTHREADS_INIT 1)
156
-  set(Threads_FOUND TRUE)
157
-endif()
158
-
159
-if(CMAKE_SYSTEM_NAME MATCHES "Windows")
160
-  set(CMAKE_USE_WIN32_THREADS_INIT 1)
161
-  set(Threads_FOUND TRUE)
162
-endif()
163
-
164
-if(CMAKE_USE_PTHREADS_INIT)
165
-  if(CMAKE_SYSTEM_NAME MATCHES "HP-UX")
166
-    # Use libcma if it exists and can be used.  It provides more
167
-    # symbols than the plain pthread library.  CMA threads
168
-    # have actually been deprecated:
169
-    #   http://docs.hp.com/en/B3920-90091/ch12s03.html#d0e11395
170
-    #   http://docs.hp.com/en/947/d8.html
171
-    # but we need to maintain compatibility here.
172
-    # The CMAKE_HP_PTHREADS setting actually indicates whether CMA threads
173
-    # are available.
174
-    check_library_exists(cma pthread_attr_create "" CMAKE_HAVE_HP_CMA)
175
-    if(CMAKE_HAVE_HP_CMA)
176
-      set(CMAKE_THREAD_LIBS_INIT "-lcma")
177
-      set(CMAKE_HP_PTHREADS_INIT 1)
178
-      set(Threads_FOUND TRUE)
179
-    endif()
180
-    set(CMAKE_USE_PTHREADS_INIT 1)
181
-  endif()
182
-
183
-  if(CMAKE_SYSTEM MATCHES "OSF1-V")
184
-    set(CMAKE_USE_PTHREADS_INIT 0)
185
-    set(CMAKE_THREAD_LIBS_INIT )
186
-  endif()
187
-
188
-  if(CMAKE_SYSTEM MATCHES "CYGWIN_NT")
189
-    set(CMAKE_USE_PTHREADS_INIT 1)
190
-    set(Threads_FOUND TRUE)
191
-    set(CMAKE_THREAD_LIBS_INIT )
192
-    set(CMAKE_USE_WIN32_THREADS_INIT 0)
193
-  endif()
194
-endif()
195
-
196
-set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
197
-include(FindPackageHandleStandardArgs)
198
-find_package_handle_standard_args(Threads DEFAULT_MSG Threads_FOUND)
199
-
200
-if(THREADS_FOUND)
201
-  set(THREADS_LIBRARIES "${CMAKE_THREAD_LIBS_INIT}")
202
-  set(THREADS_DEFINITIONS "${CMAKE_THREAD_DEFS_INIT}")
203
-endif()
204
obs-studio-27.0.1.tar.xz/plugins/decklink/data/locale/en-PT.ini Deleted
4
 
1
@@ -1,2 +0,0 @@
2
-Buffering="Use Bufferin'"
3
-DeactivateWhenNotShowing="Deactivate when nah showin'"
4
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/en-PT.ini Deleted
7
 
1
@@ -1,5 +0,0 @@
2
-UnloadWhenNotShowing="Unload image when nah showin'"
3
-SlideShow.PlaybackBehavior.StopRestart="Stop when nah visible, restart when visible"
4
-SlideShow.PlaybackBehavior.PauseUnpause="Pause when nah visible, unpause when visible"
5
-SlideShow.PlaybackBehavior.AlwaysPlay="Always play even when nah visible"
6
-SlideShow.HideWhenDone="Hide when slideshow be done"
7
obs-studio-27.0.1.tar.xz/plugins/linux-alsa/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Device="Ship"
3
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/en-PT.ini Deleted
4
 
1
@@ -1,2 +0,0 @@
2
-AdvancedSettings="Advanced Settin's"
3
-LockX="Lock X server when capturin'"
4
obs-studio-27.0.1.tar.xz/plugins/linux-pulseaudio/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Device="Ship"
3
obs-studio-27.0.1.tar.xz/plugins/linux-v4l2/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Device="Ship"
3
obs-studio-27.0.1.tar.xz/plugins/mac-avcapture/data/locale/en-PT.ini Deleted
4
 
1
@@ -1,2 +0,0 @@
2
-Device="Ship"
3
-Buffering="Use Bufferin'"
4
obs-studio-27.0.1.tar.xz/plugins/mac-capture/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-CoreAudio.Device="Ship"
3
obs-studio-27.0.1.tar.xz/plugins/mac-vth264/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Profile="Yer ships / Ship"
3
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/en-GB.ini Deleted
16
 
1
@@ -1,14 +0,0 @@
2
-LocalFile="Local file"
3
-URL="URL"
4
-Width="Width"
5
-Height="Height"
6
-FPS="FPS"
7
-CSS="Custom CSS"
8
-ShutdownSourceNotVisible="Shutdown source when not visible"
9
-RefreshBrowserActive="Refresh browser when scene becomes active"
10
-RefreshNoCache="Refresh cache of current page"
11
-RestartCEF="Restart CEF"
12
-BrowserSource="Browser"
13
-CustomFrameRate="Use custom frame rate"
14
-RerouteAudio="Control audio via OBS"
15
-
16
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/en-PT.ini Deleted
5
 
1
@@ -1,3 +0,0 @@
2
-Profile="Yer ships / Ship"
3
-HardwareDecode="Use hardware decodin' when available"
4
-CloseFileWhenInactive.ToolTip="Closes th' file when th' source ain't bein' displayed on th' stream or\nrecordin'. This allows th' file t' be changed when th' source ain't active,\nbut thar may be some startup delay when th' source reactivates."
5
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-UndistortCenter="Undistort center o' image when scalin' from ultrawide"
3
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/data/locale/en-PT.ini Deleted
10
 
1
@@ -1,8 +0,0 @@
2
-ConnectionTimedOut="Th' connection timed out. Make sure ye've configured a valid streamin' service 'n no firewall be blockin' th' connection."
3
-PermissionDenied="Th' connection was blocked. Check yer firewall / anti-virus settin's t' make sure OBS be allowed full internet access."
4
-ConnectionAborted="Th' connection was aborted. This usually indicates internet connection problems between ye 'n th' streamin' service."
5
-ConnectionReset="Th' connection was reset by th' peer. This usually indicates internet connection problems between ye 'n th' streamin' service."
6
-HostNotFound="Hostname nah found. Make sure ye boarded a valid streamin' server 'n yer internet connection / DNS are workin' correctly."
7
-NoData="Hostname found, but no data o' th' requested type. This can occur if ye 'ave bound t' an IPv6 address 'n yer streamin' service only has IPv4 addresses (see Settin's → Advanced)."
8
-AddressNotAvailable="Address nah available. Ye may 'ave tried t' bind t' an invalid IP address (see Settin's → Advanced)."
9
-SSLCertVerifyFailed="Th' RTMP server sent ah invalid SSL certificate."
10
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Profile="Yer ships / Ship"
3
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-AudioFadeStyle.FadeOutFadeIn="Fade out t' transition point then fade in"
3
obs-studio-27.0.1.tar.xz/plugins/obs-vst/data/locale/en-GB.ini Deleted
6
 
1
@@ -1,4 +0,0 @@
2
-OpenPluginInterface="Open Plug-in Interface"
3
-ClosePluginInterface="Close Plug-in Interface"
4
-VstPlugin="VST 2.x Plug-in"
5
-OpenInterfaceWhenActive="Open interface when active"
6
obs-studio-27.0.1.tar.xz/plugins/obs-x264/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Profile="Yer ships / Ship"
3
obs-studio-27.0.1.tar.xz/plugins/rtmp-services/data/locale/en-PT.ini Deleted
6
 
1
@@ -1,4 +0,0 @@
2
-StreamingServices="Streamin' Services"
3
-CustomStreamingServer="Custom Streamin' Server"
4
-StreamKey="Booty's key"
5
-Username="Captain"
6
obs-studio-27.0.1.tar.xz/plugins/sndio/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Device="Ship"
3
obs-studio-27.0.1.tar.xz/plugins/vlc-video/data/locale/en-PT.ini Deleted
5
 
1
@@ -1,3 +0,0 @@
2
-PlaybackBehavior.StopRestart="Stop when nah visible, restart when visible"
3
-PlaybackBehavior.PauseUnpause="Pause when nah visible, unpause when visible"
4
-PlaybackBehavior.AlwaysPlay="Always play even when nah visible"
5
obs-studio-27.0.1.tar.xz/plugins/win-capture/data/locale/en-PT.ini Deleted
6
 
1
@@ -1,4 +0,0 @@
2
-WindowCapture.Priority.Class="Match title, otherwise find window o' same type"
3
-WindowCapture.Priority.Exe="Match title, otherwise find window o' same executable"
4
-GameCapture.UseHotkey="Capture foreground window wit' hotkey"
5
-GameCapture.AntiCheatHook="Use anti-hornswaggle compatibility hook"
6
obs-studio-27.0.1.tar.xz/plugins/win-capture/funchook.c Deleted
287
 
1
@@ -1,285 +0,0 @@
2
-#include <windows.h>
3
-#include <stdlib.h>
4
-#include "funchook.h"
5
-
6
-#define JMP_64_SIZE 14
7
-#define JMP_32_SIZE 5
8
-
9
-#define X86_NOP 0x90
10
-#define X86_JMP_NEG_5 0xF9EB
11
-
12
-static inline void fix_permissions(void *addr, size_t size)
13
-{
14
-   DWORD protect_val;
15
-   VirtualProtect(addr, size, PAGE_EXECUTE_READWRITE, &protect_val);
16
-}
17
-
18
-void hook_init(struct func_hook *hook, void *func_addr, void *hook_addr,
19
-          const char *name)
20
-{
21
-   memset(hook, 0, sizeof(*hook));
22
-
23
-   hook->func_addr = (uintptr_t)func_addr;
24
-   hook->hook_addr = (uintptr_t)hook_addr;
25
-   hook->name = name;
26
-
27
-   fix_permissions((void *)(hook->func_addr - JMP_32_SIZE),
28
-           JMP_64_SIZE + JMP_32_SIZE);
29
-
30
-   memcpy(hook->unhook_data, func_addr, JMP_64_SIZE);
31
-}
32
-
33
-static inline size_t patch_size(struct func_hook *hook)
34
-{
35
-   return hook->is_64bit_jump ? JMP_64_SIZE : JMP_32_SIZE;
36
-}
37
-
38
-static const uint8_t longjmp64[6] = {0xFF, 0x25, 0x00, 0x00, 0x00, 0x00};
39
-
40
-static inline void rehook64(struct func_hook *hook)
41
-{
42
-   uint8_t data[JMP_64_SIZE];
43
-   uintptr_t *ptr_loc = (uintptr_t *)((uint8_t *)data + sizeof(longjmp64));
44
-
45
-   fix_permissions((void *)hook->func_addr, JMP_64_SIZE);
46
-
47
-   memcpy(data, (void *)hook->func_addr, JMP_64_SIZE);
48
-   memcpy(data, longjmp64, sizeof(longjmp64));
49
-   *ptr_loc = hook->hook_addr;
50
-
51
-   hook->call_addr = (void *)hook->func_addr;
52
-   hook->type = HOOKTYPE_FORWARD_OVERWRITE;
53
-   hook->hooked = true;
54
-
55
-   memcpy((void *)hook->func_addr, data, JMP_64_SIZE);
56
-}
57
-
58
-static inline void hook_reverse_new(struct func_hook *hook, uint8_t *p)
59
-{
60
-   hook->call_addr = (void *)(hook->func_addr + 2);
61
-   hook->type = HOOKTYPE_REVERSE_CHAIN;
62
-   hook->hooked = true;
63
-
64
-   p[0] = 0xE9;
65
-   *((uint32_t *)&p[1]) = (uint32_t)(hook->hook_addr - hook->func_addr);
66
-   *((uint16_t *)&p[5]) = X86_JMP_NEG_5;
67
-}
68
-
69
-static inline void hook_reverse_chain(struct func_hook *hook, uint8_t *p)
70
-{
71
-   if (hook->type != HOOKTYPE_FORWARD_OVERWRITE)
72
-       return;
73
-
74
-   hook->call_addr = (void *)(hook->func_addr + *((int32_t *)&p[1]));
75
-   hook->type = HOOKTYPE_REVERSE_CHAIN;
76
-   hook->hooked = true;
77
-
78
-   *((uint32_t *)&p[1]) = (uint32_t)(hook->hook_addr - hook->func_addr);
79
-}
80
-
81
-static inline void hook_forward_chain(struct func_hook *hook, uint8_t *p,
82
-                     intptr_t offset)
83
-{
84
-   int32_t cur_offset = *(int32_t *)&p[6];
85
-
86
-   if (hook->type != HOOKTYPE_FORWARD_OVERWRITE)
87
-       return;
88
-
89
-   hook->call_addr = (void *)(hook->func_addr + JMP_32_SIZE + cur_offset);
90
-   hook->type = HOOKTYPE_FORWARD_CHAIN;
91
-   hook->hooked = true;
92
-
93
-   *((int32_t *)&p[6]) = (int32_t)offset;
94
-}
95
-
96
-static inline void hook_forward_overwrite(struct func_hook *hook,
97
-                     intptr_t offset)
98
-{
99
-   uint8_t *ptr = (uint8_t *)hook->func_addr;
100
-
101
-   hook->call_addr = (void *)hook->func_addr;
102
-   hook->type = HOOKTYPE_FORWARD_OVERWRITE;
103
-   hook->hooked = true;
104
-
105
-   *(ptr++) = 0xE9;
106
-   *((int32_t *)ptr) = (int32_t)offset;
107
-}
108
-
109
-static inline void rehook32(struct func_hook *hook, bool force, intptr_t offset)
110
-{
111
-   fix_permissions((void *)(hook->func_addr - JMP_32_SIZE),
112
-           JMP_32_SIZE * 2);
113
-
114
-   if (force || !hook->started) {
115
-       uint8_t *p = (uint8_t *)hook->func_addr - JMP_32_SIZE;
116
-       size_t nop_count = 0;
117
-
118
-       /* check for reverse chain hook availability */
119
-       for (size_t i = 0; i < JMP_32_SIZE; i++) {
120
-           if (p[i] == X86_NOP)
121
-               nop_count++;
122
-       }
123
-
124
-       if (nop_count == JMP_32_SIZE && p[5] == 0x8B && p[6] == 0xFF) {
125
-           hook_reverse_new(hook, p);
126
-
127
-       } else if (p[0] == 0xE9 &&
128
-              *(uint16_t *)&p[5] == X86_JMP_NEG_5) {
129
-           hook_reverse_chain(hook, p);
130
-
131
-       } else if (p[5] == 0xE9) {
132
-           hook_forward_chain(hook, p, offset);
133
-
134
-       } else if (hook->type != HOOKTYPE_FORWARD_OVERWRITE) {
135
-           hook->type = HOOKTYPE_FORWARD_OVERWRITE;
136
-       }
137
-
138
-       hook->started = true;
139
-   }
140
-
141
-   if (hook->type == HOOKTYPE_FORWARD_OVERWRITE) {
142
-       hook_forward_overwrite(hook, offset);
143
-   }
144
-}
145
-
146
-/*
147
- * Creates memory close to the target function, used to force the actual hook
148
- * to use a 32bit jump instead of a 64bit jump, thus preventing the chance of
149
- * overwriting adjacent functions, which can cause a crash.  (by R1CH)
150
- */
151
-static void setup_64bit_bounce(struct func_hook *hook, intptr_t *offset)
152
-{
153
-   MEMORY_BASIC_INFORMATION mbi;
154
-   uintptr_t address;
155
-   uintptr_t newdiff;
156
-   SYSTEM_INFO si;
157
-   bool success;
158
-   int pagesize;
159
-   int i;
160
-
161
-   success = VirtualQueryEx(GetCurrentProcess(),
162
-                (const void *)hook->func_addr, &mbi,
163
-                sizeof(mbi));
164
-   if (!success)
165
-       return;
166
-
167
-   GetSystemInfo(&si);
168
-   pagesize = (int)si.dwAllocationGranularity;
169
-
170
-   address = (uintptr_t)mbi.AllocationBase - pagesize;
171
-   for (i = 0; i < 256; i++, address -= pagesize) {
172
-       hook->bounce_addr = VirtualAlloc((LPVOID)address, pagesize,
173
-                        MEM_RESERVE | MEM_COMMIT,
174
-                        PAGE_EXECUTE_READWRITE);
175
-       if (hook->bounce_addr)
176
-           break;
177
-   }
178
-
179
-   if (!hook->bounce_addr) {
180
-       address = (uintptr_t)mbi.AllocationBase + mbi.RegionSize +
181
-             pagesize;
182
-       for (i = 0; i < 256; i++, address += pagesize) {
183
-           hook->bounce_addr =
184
-               VirtualAlloc((LPVOID)address, pagesize,
185
-                        MEM_RESERVE | MEM_COMMIT,
186
-                        PAGE_EXECUTE_READWRITE);
187
-           if (hook->bounce_addr)
188
-               break;
189
-       }
190
-   }
191
-
192
-   if (!hook->bounce_addr)
193
-       return;
194
-
195
-   if ((hook->func_addr + 5) > (uintptr_t)hook->bounce_addr)
196
-       newdiff = hook->func_addr + 5 - (uintptr_t)hook->bounce_addr;
197
-   else
198
-       newdiff = (uintptr_t)hook->bounce_addr - hook->func_addr + 5;
199
-
200
-   if (newdiff <= 0x7ffffff0) {
201
-       uint8_t *addr = (uint8_t *)hook->bounce_addr;
202
-
203
-       FillMemory(hook->bounce_addr, pagesize, 0xCC);
204
-
205
-       *(addr++) = 0xFF;
206
-       *(addr++) = 0x25;
207
-       *((uint32_t *)addr) = 0;
208
-       *((uint64_t *)(addr + 4)) = hook->hook_addr;
209
-
210
-       hook->hook_addr = (uint64_t)hook->bounce_addr;
211
-       *offset = hook->hook_addr - hook->func_addr - JMP_32_SIZE;
212
-       hook->is_64bit_jump = false;
213
-   }
214
-}
215
-
216
-void do_hook(struct func_hook *hook, bool force)
217
-{
218
-   intptr_t offset;
219
-
220
-   if (!force && hook->hooked)
221
-       return;
222
-
223
-   /* copy back the memory that was previously encountered to preserve
224
-    * the current hook and any newer hooks on top */
225
-   if (hook->started && !force) {
226
-       uintptr_t addr;
227
-       size_t size;
228
-
229
-       if (hook->type == HOOKTYPE_REVERSE_CHAIN) {
230
-           addr = hook->func_addr - JMP_32_SIZE;
231
-           size = JMP_32_SIZE;
232
-       } else {
233
-           addr = hook->func_addr;
234
-           size = patch_size(hook);
235
-       }
236
-
237
-       memcpy((void *)addr, hook->rehook_data, size);
238
-       hook->hooked = true;
239
-       return;
240
-   }
241
-
242
-   offset = hook->hook_addr - hook->func_addr - JMP_32_SIZE;
243
-
244
-#ifdef _WIN64
245
-   hook->is_64bit_jump = (llabs(offset) >= 0x7fffffff);
246
-
247
-   if (hook->is_64bit_jump) {
248
-       if (!hook->attempted_bounce) {
249
-           hook->attempted_bounce = true;
250
-           setup_64bit_bounce(hook, &offset);
251
-       }
252
-
253
-       if (hook->is_64bit_jump) {
254
-           rehook64(hook);
255
-           return;
256
-       }
257
-   }
258
-#endif
259
-
260
-   rehook32(hook, force, offset);
261
-}
262
-
263
-void unhook(struct func_hook *hook)
264
-{
265
-   uintptr_t addr;
266
-   size_t size;
267
-
268
-   if (!hook->hooked)
269
-       return;
270
-
271
-   if (hook->type == HOOKTYPE_REVERSE_CHAIN) {
272
-       size = JMP_32_SIZE;
273
-       addr = (hook->func_addr - JMP_32_SIZE);
274
-   } else {
275
-       size = patch_size(hook);
276
-       addr = hook->func_addr;
277
-   }
278
-
279
-   fix_permissions((void *)addr, size);
280
-   memcpy(hook->rehook_data, (void *)addr, size);
281
-
282
-   if (hook->type == HOOKTYPE_FORWARD_OVERWRITE)
283
-       memcpy((void *)hook->func_addr, hook->unhook_data, size);
284
-
285
-   hook->hooked = false;
286
-}
287
obs-studio-27.0.1.tar.xz/plugins/win-capture/funchook.h Deleted
56
 
1
@@ -1,54 +0,0 @@
2
-#pragma once
3
-
4
-#include <stdbool.h>
5
-#include <stdint.h>
6
-
7
-#ifdef __cplusplus
8
-extern "C" {
9
-#else
10
-#if defined(_MSC_VER) && !defined(inline)
11
-#define inline __inline
12
-#endif
13
-#endif
14
-
15
-enum hook_type {
16
-   HOOKTYPE_FORWARD_OVERWRITE,
17
-   HOOKTYPE_FORWARD_CHAIN,
18
-   HOOKTYPE_REVERSE_CHAIN
19
-};
20
-
21
-struct func_hook {
22
-   void *call_addr;
23
-
24
-   uintptr_t func_addr; /* function being hooked to */
25
-   uintptr_t hook_addr; /* hook function itself */
26
-   void *bounce_addr;
27
-   const char *name;
28
-   enum hook_type type;
29
-   bool is_64bit_jump;
30
-   bool hooked;
31
-   bool started;
32
-   bool attempted_bounce;
33
-   uint8_t unhook_data[14];
34
-   uint8_t rehook_data[14];
35
-};
36
-
37
-extern void hook_init(struct func_hook *hook, void *func_addr, void *hook_addr,
38
-             const char *name);
39
-extern void hook_start(struct func_hook *hook);
40
-extern void do_hook(struct func_hook *hook, bool force);
41
-extern void unhook(struct func_hook *hook);
42
-
43
-static inline void rehook(struct func_hook *hook)
44
-{
45
-   do_hook(hook, false);
46
-}
47
-
48
-static inline void force_rehook(struct func_hook *hook)
49
-{
50
-   do_hook(hook, true);
51
-}
52
-
53
-#ifdef __cplusplus
54
-}
55
-#endif
56
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/en-PT.ini Deleted
5
 
1
@@ -1,3 +0,0 @@
2
-Device="Ship"
3
-Buffering.ToolTip="When enabled, buffers video/audio data t' ensure th' smoothest 'n most\naccurate playback possible, but at th' cost o' increased latency. When usin'\nbufferin' wit' a video capture card, 'tis recommended t' set th' card 'n th'\nprogram t' th' same framerate fer best results.\n\nWhen disabled, ensures lowest latency playback, but at th' cost o' frame\nplayback accuracy. 'tis ideal fer face cameras, or when ye wants t' use th'\nprogram's preview window t' play a console.\n\nAuto-detect (default) sets it t' enabled if th' device has delay, 'n disabled\nif it has no delay."
4
-DeactivateWhenNotShowing="Deactivate when nah showin'"
5
obs-studio-27.0.1.tar.xz/plugins/win-mf/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-MF.H264.Profile="Yer ships / Ship"
3
obs-studio-27.0.1.tar.xz/plugins/win-wasapi/data/locale/en-PT.ini Deleted
3
 
1
@@ -1,1 +0,0 @@
2
-Device="Ship"
3
obs-studio-27.0.1.tar.xz/.github/workflows/main.yml -> obs-studio-27.1.3.tar.xz/.github/workflows/main.yml Changed
73
 
1
@@ -22,6 +22,10 @@
2
   TWITCH_HASH: ${{ secrets.TWITCH_HASH }}
3
   RESTREAM_CLIENTID: ${{ secrets.RESTREAM_CLIENTID }}
4
   RESTREAM_HASH: ${{ secrets.RESTREAM_HASH }}
5
+  YOUTUBE_CLIENTID: ${{ secrets.YOUTUBE_CLIENTID }}
6
+  YOUTUBE_CLIENTID_HASH: ${{ secrets.YOUTUBE_CLIENTID_HASH }}
7
+  YOUTUBE_SECRET: ${{ secrets.YOUTUBE_SECRET }}
8
+  YOUTUBE_SECRET_HASH: ${{ secrets.YOUTUBE_SECRET_HASH }}
9
 
10
 jobs:
11
   macos64:
12
@@ -252,14 +256,6 @@
13
 
14
           mv ./libobs-opengl/libobs-opengl.so ./OBS.app/Contents/Frameworks
15
 
16
-          cp -R /tmp/obsdeps/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
17
-          chmod -R +w ./OBS.app/Contents/Frameworks/QtNetwork.framework
18
-          rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Headers
19
-          rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Headers/
20
-          chmod 644 ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Resources/Info.plist
21
-          install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
22
-          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
23
-
24
           cp -R "${{ github.workspace }}/cmbuild/cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64/Release/Chromium Embedded Framework.framework" ./OBS.app/Contents/Frameworks/
25
           chown -R $(whoami) ./OBS.app/Contents/Frameworks/
26
 
27
@@ -296,7 +292,7 @@
28
             codesign --force --options runtime --entitlements "../CI/scripts/macos/helpers/helper-renderer-entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep "./OBS.app/Contents/Frameworks/OBS Helper (Renderer).app"
29
           fi
30
 
31
-          codesign --force --options runtime --deep --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Resources/data/obs-mac-virtualcam.plugin"
32
+          codesign --force --options runtime --deep --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Resources/data/obs-plugins/mac-virtualcam/obs-mac-virtualcam.plugin"
33
 
34
           codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep ./OBS.app
35
 
36
@@ -575,16 +571,16 @@
37
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
38
         run: |
39
           $env:FILE_DATE=(Get-Date -UFormat "%F")
40
-          $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win64.zip"
41
+          $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win64"
42
           echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
43
           robocopy .\build64\rundir\RelWithDebInfo .\build\ /E /XF .gitignore
44
-          7z a ${env:FILE_NAME} .\build\*
45
+          7z
46
       - name: 'Publish'
47
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
48
         uses: actions/upload-artifact@v2.2.0
49
         with:
50
           name: '${{ env.FILE_NAME }}'
51
-          path: '*-win64.zip'
52
+          path: build/*
53
   win32:
54
     name: 'Windows 32-bit'
55
     runs-on: [windows-latest]
56
@@ -684,13 +680,13 @@
57
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
58
         run: |
59
           $env:FILE_DATE=(Get-Date -UFormat "%F")
60
-          $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win32.zip"
61
+          $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win32"
62
           echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
63
           robocopy .\build32\rundir\RelWithDebInfo .\build\ /E /XF .gitignore
64
-          7z a ${env:FILE_NAME} .\build\*
65
+          7z
66
       - name: 'Publish'
67
         if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
68
         uses: actions/upload-artifact@v2.2.0
69
         with:
70
           name: '${{ env.FILE_NAME }}'
71
-          path: '*-win32.zip'
72
+          path: build/*
73
obs-studio-27.1.3.tar.xz/.gitignore Added
103
 
1
@@ -0,0 +1,101 @@
2
+#binaries
3
+*.exe
4
+*.dll
5
+*.dylib
6
+*.so
7
+
8
+#cmake
9
+/cmbuild/
10
+/build/
11
+/build32/
12
+/build64/
13
+/release/
14
+/release32/
15
+/release64/
16
+/debug/
17
+/debug32/
18
+/debug64/
19
+/builds/
20
+.vs/
21
+*.o.d
22
+*.ninja
23
+.ninja*
24
+.dirstamp
25
+
26
+#xcode
27
+*.xcodeproj/
28
+
29
+#clion
30
+.idea/
31
+cmake-build-debug/
32
+
33
+#other stuff (windows stuff, qt moc stuff, etc)
34
+Release_MD/
35
+Release/
36
+Debug/
37
+x64/
38
+ipch/
39
+GeneratedFiles/
40
+.moc/
41
+/UI/obs.rc
42
+.vscode/
43
+
44
+
45
+
46
+/other/
47
+
48
+#make stuff
49
+configure
50
+depcomp
51
+install-sh
52
+Makefile.in
53
+Makefile
54
+
55
+#python
56
+__pycache__
57
+
58
+#sphinx
59
+/docs/sphinx/_build/*
60
+!/docs/sphinx/_build/.gitignore
61
+!/docs/sphinx/Makefile
62
+
63
+#random useless file stuff
64
+*.dmg
65
+*.app
66
+.directory
67
+.hg
68
+.depend
69
+tags
70
+*.trace
71
+*.vsp
72
+*.psess
73
+*.swp
74
+*.dat
75
+*.clbin
76
+*.log
77
+*.tlog
78
+*.sdf
79
+*.opensdf
80
+*.xml
81
+*.ipch
82
+*.css
83
+*.xslt
84
+*.aps
85
+*.suo
86
+*.ncb
87
+*.user
88
+*.lo
89
+*.ilk
90
+*.la
91
+*.o
92
+*.obj
93
+*.pdb
94
+*.res
95
+*.dep
96
+*.zip
97
+*.lnk
98
+*.chm
99
+*~
100
+.DS_Store
101
+*/.DS_Store
102
+*/**/.DS_Store
103
obs-studio-27.0.1.tar.xz/AUTHORS -> obs-studio-27.1.3.tar.xz/AUTHORS Changed
1104
 
1
@@ -6,8 +6,8 @@
2
  Jim
3
  Palana
4
  jpark37
5
- cg2121
6
  R1CH
7
+ cg2121
8
  fryshorts
9
  DDRBoxman
10
  Gol-D-Ace
11
@@ -19,45 +19,46 @@
12
  Michael Fabian 'Xaymar' Dirks
13
  Kurt Kartaltepe
14
  pkv
15
+ Georges Basile Stavracas Neto
16
  Rodney
17
  Zachary Lund
18
- Georges Basile Stavracas Neto
19
  VodBox
20
  PatTheMav
21
- SuslikV
22
  Exeldro
23
+ SuslikV
24
  Reboot
25
  Martell Malone
26
  Ford Smith
27
  dodgepong
28
  HomeWorld
29
- Alex Anderson
30
  Joel Bethke
31
+ Alex Anderson
32
  SCG82
33
  brittneysclark
34
  Dmitry-Me
35
- juvester
36
  Sebastian Beckmann
37
+ juvester
38
  Ed Maste
39
  JohannMG
40
  craftwar
41
  sorayuki
42
  Dead133
43
  Maya Venkatraman
44
+ tt2468
45
  Radzaquiel
46
  Socapex
47
+ Vainock
48
  mntone
49
  Cephas Reis
50
  Eric Lindvall
51
  Hector Martin
52
  Jimi Huotari
53
  Scratch
54
- Vainock
55
  Luke Yelavich
56
  Stéphane Lepin
57
  Marvin Scholz
58
+ Rat
59
  Skyler Lipthay
60
- tt2468
61
  Arkkis
62
  GoaLitiuM
63
  Hunter L. Allen
64
@@ -67,7 +68,6 @@
65
  Manuel Kroeber
66
  Michel
67
  Quinn Damerell
68
- Rat
69
  Anton Bershanskiy
70
  Bennik2000
71
  Chris Angelico
72
@@ -78,6 +78,7 @@
73
  Palakis
74
  Tristan Matthews
75
  Warchamp7
76
+ Yuriy Chumak
77
  tytan652
78
  Alexandre Vicenzi
79
  Anthony Torres
80
@@ -86,7 +87,6 @@
81
  SoftArch
82
  Theodore Dubois
83
  Tjienta Vara
84
- Translation
85
  wangshaohui
86
  Aaron Boxer
87
  Anry
88
@@ -98,6 +98,7 @@
89
  Ioan Loosley
90
  Ján Mlynek
91
  MaZderMind
92
+ Norihiro Kamae
93
  Wahaj Dar
94
  bl
95
  makise-homura
96
@@ -234,6 +235,7 @@
97
  Benjamin Schubert
98
  Bernd Buschinski
99
  Biswapriyo Nath
100
+ Bruce Zhang
101
  Byoungchan Lee
102
  C. Daniel Sanchez R
103
  Caitlin Potter
104
@@ -258,8 +260,10 @@
105
  David Baker
106
  David Edmundson
107
  David McMackins II
108
+ Delta
109
  Derrick Lambert
110
  Developer
111
+ Developer-Ecosystem-Engineering
112
  Devin Neal
113
  Dmitry Odintsov
114
  Dmitry Vovk
115
@@ -316,6 +320,7 @@
116
  LiamCoal
117
  Linnun
118
  Lioncash
119
+ Lovecast Neil
120
  Lqlsoftware
121
  Lukas Monka
122
  Luke Granger-Brown
123
@@ -382,6 +387,7 @@
124
  Tom Peeters
125
  Tom Pichler
126
  TotalCaesar659
127
+ Translation
128
  Uro
129
  Weikardzaena
130
  Will Jamieson
131
@@ -422,6 +428,7 @@
132
  jeremiah
133
  ka’imi
134
  lemmi
135
+ liu.haibin
136
  lorskun
137
  luz.paz
138
  mape
139
@@ -466,12 +473,13 @@
140
  yalpul
141
  yoho
142
  张昆
143
-
144
+ 
145
 Translators:
146
  Afrikaans:
147
   Rory Townsend (f3emarketing)
148
   Samuel Nthoroane (Samuel_Nthoroane)
149
   speedytechdev
150
+  sadam2002 sadam4 (sadam2002sadam4)
151
   Vainock
152
   Gol D. Ace (goldace)
153
  Albanian:
154
@@ -480,14 +488,16 @@
155
   Begi Ganellari (begiganellari1997)
156
   avnidj
157
   unknowndomain
158
+  Vainock
159
   Gol D. Ace (goldace)
160
  Arabic:
161
   ZILZAL
162
   Abdullah AL-Qahtani (Za7ef_SA)
163
-  majdcomp
164
   Tareq Almutairi (Tareq_s)
165
+  majdcomp
166
   Fady Adal (fadyadal)
167
   aaakjt
168
+  yngams (younessmouhid)
169
   AiAF (7MR)
170
   ibrahim younis (gr33v)
171
   E3saR (e3sa_r)
172
@@ -495,6 +505,7 @@
173
   Mohamed Zain (Thecheeseman)
174
   Vainock
175
   Gol D. Ace (goldace)
176
+  omar al_hasasneh (omar.alhasasneh)
177
   Saleh oukiki (salehoukiki)
178
   Ahmad Alkurbi (DontPlay)
179
   Tensai
180
@@ -512,24 +523,31 @@
181
   Yhea Ahmad (yhea.ahmad7741)
182
   unknowndomain
183
   Ahmed Hawam (Hawam)
184
-  Malaz Gold Edition (Malo7zz)
185
+  Mhd (thelord9200)
186
   Hosein Hallavi (habibot81)
187
   Mnsor The-Ghost (mnsor1722011)
188
+  Malaz Gold Edition (Malo7zz)
189
+  sadam2002 sadam4 (sadam2002sadam4)
190
   dodgepong
191
   chaironeko
192
   Hadi Gamer (hadigamer3131)
193
  Aragonese:
194
   juanpabl
195
+  Vainock
196
  Azerbaijani:
197
   ShahinF27 (Khan27)
198
+  Mirsahin Mirserifov (mirsahin.mirsarifov)
199
+  Sədi Məmmədov (sedi9816)
200
   Javid-An
201
   unknowndomain
202
+  Vainock
203
   Kənan Axundov (kenanaxundov2)
204
  Bashkir:
205
   Әлмәт Ак Арыслан (19082004amir)
206
   Bashquart (RadMir2)
207
   Synbulat Biishev (Syjalo)
208
   unknowndomain
209
+  Vainock
210
  Basque:
211
   Alexander Gabilondo (alexgabi)
212
   Xabier Aramendi (azpidatziak)
213
@@ -539,18 +557,20 @@
214
   Gol D. Ace (goldace)
215
   EG Gamer (eggamer131)
216
   txaro
217
+  Galder L (315galder)
218
   etxondoko
219
   unknowndomain
220
-  Galder L (315galder)
221
   Fiwi1265
222
   dodgepong
223
  Bemba:
224
   P White (phiaramulima)
225
+  Vainock
226
  Bengali:
227
   Roktim Ibne Hasan (roktimih)
228
   shamuntohamd
229
   Saptarshi Mondal (gitSaptarshi)
230
   Vainock
231
+  C559 Raiyan :D (purebangali)
232
   Rudro Rasel (rdrrsl)
233
   Morshedul Alam (morshedintouch)
234
   Oymate
235
@@ -582,6 +602,7 @@
236
   dodgepong
237
  Burmese:
238
   linwinthu
239
+  Vainock
240
  Catalan:
241
   Jaime Muñoz Martín (jmmartin_5)
242
   Benet R. i Camps (BennyBeat) (BennyBeat)
243
@@ -602,8 +623,8 @@
244
  Chinese Simplified:
245
   Bob Liu (Akagi201)
246
   AlexGuo1998
247
-  wwj402_github
248
   fangzheng
249
+  wwj402_github
250
   Origami
251
   Hexcolyte
252
   AthlonHD
253
@@ -624,7 +645,7 @@
254
   Inku Xuan (inkuxuan)
255
   Yi-Jyun Pan (pan93412)
256
   yunluzhang
257
-  lovelycandyowo (candysweetplayzmc)
258
+  Candyyyyy (candysweetplayzmc)
259
   copyliu
260
   Boyuan Yang (073plan)
261
   Richard Stanway (r1ch)
262
@@ -632,11 +653,12 @@
263
   Bing Feng (fengbing123)
264
   jyc001
265
   科技小白堂 (lipeng0820)
266
-  pangbin
267
   WeiYuanStudio
268
+  pangbin
269
   unknowndomain
270
-  WaterOtaku
271
+  Vince Black (vincejudge00)
272
   sorayuki
273
+  WaterOtaku
274
   dodgepong
275
   Haoran Du (bingchuanjuzi)
276
   OYYZ
277
@@ -690,8 +712,8 @@
278
   chaironeko
279
  Croatian:
280
   medicmomcilo
281
-  srdjan_m
282
   milotype
283
+  srdjan_m
284
   Fran Kelava (fkelava)
285
   schwabengeiz
286
   Runicar (dajtisina)
287
@@ -744,30 +766,31 @@
288
   Hero (HeroGamers)
289
   Christian Henriksen (cnhenriksen)
290
   unknowndomain
291
-  Nicolai Skødt Holmgaard (Nicolai9852)
292
   Daniel Aundal (aundal)
293
+  Lukas Wiinholt (LukasW1337)
294
   dodgepong
295
  Dutch:
296
   Eric Bataille (ThoNohT)
297
   A. Voogt (atvoogt)
298
+  Harm van den Hoek (harm27)
299
   Michel Snippe (michelsnippe)
300
   Greendweller
301
   exeldro
302
   Albakham (albakham)
303
-  Harm van den Hoek (harm27)
304
   Lars Acou (lars.acou)
305
-  Coen (Trigstur)
306
+  Trigstur
307
   Danny (Dkamps18)
308
   Richard Stanway (r1ch)
309
   Nicole (Dutchess_Nicole)
310
   robbert0891 (robbertoorschot38)
311
-  Gol D. Ace (goldace)
312
   Kjetil Verstrepen (kjetilv)
313
+  Gol D. Ace (goldace)
314
   Jasper J (JassieJ)
315
   Vainock
316
   b__dm
317
   Lars van Wijk (lhjvanwijk98)
318
   Chunlu chunnyluny (Chunnyluny)
319
+  Issa1553
320
   Bond-009
321
   LiveDuivenVelp
322
   markpc
323
@@ -793,18 +816,21 @@
324
   unknowndomain
325
   matwey
326
   Vainock
327
+  Seb King (spud)
328
+  Issa1553
329
   Amy (amyipdev)
330
   Noah Husby (noahhusby)
331
   rooban23
332
   Ed L (Rexogamer)
333
   Endysis
334
-  'lisong (Balisong)
335
-  Issa1553
336
+  Endo (Balisong)
337
   Roktim Ibne Hasan (roktimih)
338
   Pete Russell (pete.russell.photos)
339
  Esperanto:
340
   Matt Aaldenberg (MattAalden)
341
+  zer0ne (Rezoni)
342
   webklaas
343
+  siamano
344
   Vainock
345
  Estonian:
346
   MartinEwing
347
@@ -837,6 +863,7 @@
348
   Arkkis (j)
349
   supersingularisogeny
350
   Jarska
351
+  Jiri Grönroos (spammemoreplease)
352
   dodgepong
353
   Tero Keso (tero.keso)
354
   Gol D. Ace (goldace)
355
@@ -858,8 +885,8 @@
356
   Stéphane Lepin (Palakis)
357
   ArsTechnis
358
   Tocram2 (tocram2)
359
-  Benjamin Cambour (lesinfox)
360
   Guillaume Turchini (orion78fr)
361
+  Benjamin Cambour (lesinfox)
362
   Yberion
363
   Léo (leeo97one)
364
   RisedSky
365
@@ -890,10 +917,10 @@
366
   🌠 DarK | #Hello 🌠 (DarKTV_FR)
367
   Mathieu Hautebas (matteyeux)
368
   leluk
369
+  Gabriel Dugny (Dugab)
370
   tytan652
371
   Yolopix
372
   tburette
373
-  Gabriel Dugny (Gabigabigo)
374
   Adrien “GameZone Tv” de Decker (redcraft007)
375
   Richard Stanway (r1ch)
376
   Zalki
377
@@ -907,14 +934,14 @@
378
   Wizi_89
379
   Arzugar
380
   Dredd47
381
-  Albakham (albakham)
382
-  HistoriCode97
383
   Mathieu Goossens (matgoossens)
384
-  SkylixX
385
-  Nicolas Richard (YoungFrog)
386
+  HistoriCode97
387
+  Albakham (albakham)
388
   Warchamp7
389
-  chaironeko
390
+  Nicolas Richard (YoungFrog)
391
+  SkylixX
392
   Lucas Juif (trycarnage)
393
+  chaironeko
394
  Galician:
395
   mbouzada
396
   Xesús M. Mosquera Carregal (xesusmosquera)
397
@@ -937,8 +964,8 @@
398
   Gol D. Ace (goldace)
399
   Michael Fabian Dirks (Xaymar)
400
   Sven Kirschbaum (fallobst22) (fallobst22)
401
-  Gregor Bigalke (gregtcltk)
402
   Dennis Giebert (Isegrim) (isegrimderwolf)
403
+  Gregor Bigalke (gregtcltk)
404
   dodgepong
405
   Manuel (ElectronicWar)
406
   Tim (robske_110) (robske110)
407
@@ -949,22 +976,25 @@
408
   cryxgio
409
   Jonas Otto (jottosmail)
410
   WurstOnAir
411
+  Holger Sinn (Holger-Sinn)
412
+  gxalpha
413
   The_Legend_of_xD
414
+  Luchx
415
   Richard Stanway (r1ch)
416
   Palana
417
   Jonathan (macburgerjunior)
418
   Achampnator
419
   Enderdrache LP (enderdrachelp)
420
   Prince_of_Raop
421
-  unknowndomain
422
-  Robin Hielscher (Jack0r)
423
   Patrick Frings (Ragnos)
424
+  Robin Hielscher (Jack0r)
425
+  unknowndomain
426
   css
427
   AndreLeonardo (andreleonardoyt)
428
   Lord Aidan (BadSideofBright)
429
   BoJustus
430
-  hakuchi
431
   degra78 (degra789)
432
+  hakuchi
433
   Tiim
434
   Hadi Gamer (hadigamer3131)
435
  Greek:
436
@@ -977,6 +1007,7 @@
437
   Tasos Sahanidis (tatokis)
438
   George T. (tzikas97)
439
   Nikolaos Peltekis (nikpelgr)
440
+  Greek Transliterator (greektransliterator)
441
   Vainock
442
   Qufy
443
   Alex Kalles (alexakis1997)
444
@@ -987,16 +1018,17 @@
445
   iosifidis
446
   Giorgos (Bald)
447
   Themis T. (Deminho)
448
-  Jason_M
449
   unknowndomain
450
-  dodgepong
451
+  Jason_M
452
+  Antwnhs M. (AntwnhsM.)
453
   Christis Andreou (ch.andreou)
454
+  dodgepong
455
   chaironeko
456
  Hebrew:
457
   amirsher
458
   Omer I.S. (omeritzics)
459
-  lonelywolf11
460
   djsavta
461
+  lonelywolf11
462
   idanbo27
463
   עידו דנה (idodana01)
464
   nachmanpop
465
@@ -1023,18 +1055,20 @@
466
   Tal Machani (talmachani)
467
  Hindi:
468
   Bashishtha Narayan Singh (bashishtha)
469
+  Creeper (ThisIsACreeper0101)
470
   Saswata Banerjee (azure.saswata)
471
   Ravindra Pednekar (raviped)
472
   Rahul Dhangar (rahuldhangar)
473
   SneakyFish5
474
   shamuntohamd
475
+  Vainock
476
   Sid-Shanker
477
   unknowndomain
478
-  Vainock
479
   Gol D. Ace (goldace)
480
  Hungarian:
481
   Gige
482
   Balázs Meskó (mesko.balazs)
483
+  Balázs Meskó (meskobalazs)
484
   Gol D. Ace (goldace)
485
   Sárga Pulcsis (SargaPulcsis)
486
   zolikonta
487
@@ -1042,25 +1076,26 @@
488
   Vainock
489
   Dániel P. (Daniii_)
490
   Isti (eisti)
491
-  Balázs Meskó (meskobalazs)
492
   TOM005
493
   Adam Liszkai (adamos42)
494
+  IrepY
495
   vargag159
496
   Biró Bence (birobence19)
497
   unknowndomain
498
   abydosan (abydoshun)
499
   dodgepong
500
- Igbo:
501
-  EzigboOmenana
502
  Indonesian:
503
   M Akmal (akmalcakep59)
504
   Anbiya Shafaat (Anfia)
505
   Rafy Shafryan (NexaForX)
506
+  heydootdoot
507
   Rendi (rendiazmi)
508
   Lieba Natur Brilian (naturbrilian)
509
   ziasukmana
510
   Vainock
511
   GudankGaming GG (GudankGaming)
512
+  Agustine Carolina (agustinecarolina483)
513
+  Rahman Yusri Aftian (aftian)
514
   dnpxs (Dnoxs)
515
   Deraidos
516
   doplank
517
@@ -1073,16 +1108,17 @@
518
   tiwi90
519
   imcesca
520
   smart2128
521
+  StarFang208
522
   Sergio Beneduce (sbeneduce)
523
   Michele (ScrappyCocco)
524
   Albakham (albakham)
525
-  StarFang208
526
+  ROBERTO BORIOTTI (bovirus)
527
   dodgepong
528
   Marco Ciampa (ciampix)
529
   Alessandro Sarto (alesarto03)
530
   Tommaso Cammelli (tomganguz) (tomganguz)
531
   Vainock
532
-  Christian Mazzola (_Alpha06)
533
+  Christian Mazzola (Alphaaa)
534
   Martazza
535
   mauriziopersi
536
   ScemEnzo
537
@@ -1098,29 +1134,29 @@
538
   Giulia (GhostyJade)
539
   Fisherozzo
540
   DomenicoDD
541
-  Androide Umano (androide012340)
542
   icovada
543
+  Androide Umano (androide012340)
544
   Alessio Ilardi (alantheandroid)
545
-  ROBERTO BORIOTTI (bovirus)
546
   SkyLion
547
-  Cristian Alfano (cal332)
548
   Ruggero Tomaselli (ruggi99)
549
+  Cristian Alfano (cal332)
550
+  Lucia Spinello (Freya89)
551
   Benedetto Mazza (benedetto.mazza99)
552
   unknowndomain
553
   Owly
554
   Federico Tensi (habby1337)
555
   NightMat
556
-  Alessandro Iepure (alessandro_iepure)
557
-  Daniele02_777
558
   Flavio Rinaldi (flaviorinaldi)
559
+  Daniele02_777
560
+  Alessandro Iepure (alessandro_iepure)
561
  Japanese:
562
   shousa
563
   Kenta Takumi (ClaraStyle)
564
   Bhanu Victor DiCara (SplatRT)
565
+  青柳和宏 (sherlock1891holmes)
566
   saygo1125
567
   dodgepong
568
   森の子リスのミーコの大冒険 (Phroneris)
569
-  青柳和宏 (sherlock1891holmes)
570
   CKK COBALT (CKKCOBALT)
571
   Vainock
572
   kotobato
573
@@ -1129,11 +1165,14 @@
574
   ato lash (hal_shu_sato)
575
   unknowndomain
576
   神成フィルム (kami00nari)
577
+  GO Channel (georgestv.0129)
578
   ? (a2y4)
579
   Bob Liu (Akagi201)
580
-  Alex Shafer (enzanki-ars)
581
-  chaironeko
582
+  Diogo Ramos (dr03ramos)
583
   Yuki Yu (Yukiyu)
584
+  chaironeko
585
+  Alex Shafer (enzanki-ars)
586
+  ushu kura (kuraushu)
587
  Kabyle:
588
   Yacine Bouklif (YacineBouklif)
589
   ZiriSut
590
@@ -1149,8 +1188,9 @@
591
   ynetwork
592
   Alex Lee (alex01763)
593
   임세훈 (shlim)
594
-  Vainock
595
   AlexKoala (alexkoala)
596
+  영구땡 (wonkyupark)
597
+  Vainock
598
   Gol D. Ace (goldace)
599
   RedditRook
600
   DNSE (dnse)
601
@@ -1159,11 +1199,11 @@
602
   무아MUA (moajikyeongtv1048)
603
   rldbs3411
604
   hykdem kim (hykdem)
605
-  Russell (crimeroyal)
606
   unknowndomain
607
+  Russell (crimeroyal)
608
   Charles Wallis (charlestw127)
609
-  Tristar Corp (Charleslee)
610
   antome
611
+  Tristar Corp (Charleslee)
612
   bluestar8
613
   swatzniker (dimitrisrtg324)
614
   김동현 (ehehguu)
615
@@ -1175,12 +1215,21 @@
616
   Vainock
617
   RanjdarAbdulrazzaq
618
   Aga Mangure (agaesmaeel)
619
+  ronee
620
+ Kurmanji (Kurdish):
621
+  cehnemdark
622
+  Cyax (Cyaxares)
623
+  Vainock
624
  Lao:
625
   nirankoon.singpraseuth (nirankoon)
626
+  Vainock
627
+ Latvian:
628
+  oskars
629
  Lithuanian:
630
   Justas Vilimas (tyntas)
631
   xNaii (lyrikas5)
632
   TitasK (titukas1572)
633
+  MarioDesigns
634
   Rolic
635
   Nikita Podvinskij (PODWINSKi)
636
   dnew (dbot)
637
@@ -1209,18 +1258,19 @@
638
  Norwegian Bokmal:
639
   Imre Kristoffer Eilertsen (DandelionSprout)
640
   Taesh (magnusmbratteng)
641
+  flaeri
642
   Patrick Williamson (wpatrick59)
643
   Oddbjørn Grytdal (Fooshi)
644
   Mats Edvin Aarø (matsedvin)
645
   dodgepong
646
   LandyLERThERmfLOpi
647
   areedw
648
-  flaeri
649
+  TrymSan
650
   mgKaiztra
651
   Tommy (nwgat)
652
   Vainock
653
   Jordan Stutzmann (J-Stutzmann)
654
-  Syver Stensholt (sssandum)
655
+  Syver Stensholt (7RST1)
656
   Alex Thomassen (Decicus)
657
   Sander Skjegstad (r530er)
658
   Gol D. Ace (goldace)
659
@@ -1228,10 +1278,12 @@
660
   OsteHovel
661
   Lauren (hobtan)
662
   Legend27
663
+  Pederva
664
   unknowndomain
665
   chaironeko
666
   Mats Andreassen (MatsA)
667
  Norwegian Nynorsk:
668
+  Bjørn I. (bjorni)
669
   Imre Kristoffer Eilertsen (DandelionSprout)
670
   Eiliv
671
   morden
672
@@ -1239,8 +1291,10 @@
673
   unknowndomain
674
   Yngve Spjeld Landro (yslandro)
675
   Gol D. Ace (goldace)
676
+  Vainock
677
  Occitan:
678
   Diluns
679
+  Vainock
680
  Persian:
681
   Johnny Warner (johhnywarner)
682
   koper
683
@@ -1258,30 +1312,9 @@
684
   unknowndomain
685
   alefvanoon
686
   nohaxjustoof
687
+  XubeIR
688
   Navid Sadeghieh (nsadeghieh)
689
   Amirhossein yousefi (amir.sara)
690
- Pirate English:
691
-  NLBartley1
692
-  Matt Gajownik (WizardCM)
693
-  ljcool2006
694
-  Matthew Hatcher (MatthewSH)
695
-  Amy (amyipdev)
696
-  Uaiquqjwnsns
697
-  Isabel L (isabel_)
698
-  Vainock
699
-  jkcoaster
700
-  Héctor Ochoa Ortiz (Robot8A)
701
-  Coen (Trigstur)
702
-  Charlie W. (wallichc)
703
-  unknowndomain
704
-  Emu-Phoenix
705
-  WaterWater32
706
-  Gol D. Ace (goldace)
707
-  iltrof
708
-  Berrely
709
-  Lol Wut (OldGrandmaFarts)
710
-  chaironeko
711
-  ncb
712
  Polish:
713
   Tomasz 'grocal' Grodzki (grocal)
714
   Albakham (albakham)
715
@@ -1295,25 +1328,28 @@
716
   sebek1pan
717
   Mateusz (Silesianek)
718
   Gol D. Ace (goldace)
719
+  Hexandcube (hexandcube)
720
   opl
721
+  _kaktus_
722
   Popke
723
   Skajdrovski
724
-  Hexandcube (hexandcube)
725
   Michal (progamesmicrok)
726
   unknowndomain
727
   Piteriuz
728
   mjluszko
729
+  Hubert Degler (Hubertoos)
730
+  adamek2314
731
   dodgepong
732
   Julia Drewniak (ewagsi)
733
-  Patryk Kunda (ner.i.ol)
734
-  Michał Lewczak (michal200507)
735
   Maciej Błędkowski (mble)
736
+  Patryk Kunda (ner.i.ol)
737
   Nojterone
738
+  Michał Lewczak (michal200507)
739
  Portuguese:
740
   Pedro Albuquerque (pmra)
741
   Ev1lbl0w
742
   joaofvieira
743
-  polystation4
744
+  batatasmor
745
   Manuela Silva (mansil)
746
   André Biscaia (LazP)
747
   Tomás Antunes (tomasantunes)
748
@@ -1337,12 +1373,12 @@
749
  Portuguese, Brazilian:
750
   Shaolin (admshao)
751
   Diogo Ramos (dr03ramos)
752
+  Skellingtor
753
   Ramon Mendes (rbrgameplays)
754
   Fabio Madia (Shaolin)
755
   Burkes
756
   Emanoel Lopes (emanoelopes)
757
   Pedro Ricardo (Pedro270707)
758
-  Skellingtor
759
   Guilherme Dias (Darkaiser)
760
   Lincoln H. (LincolnH)
761
   TFSThiagoBR98
762
@@ -1362,25 +1398,27 @@
763
   Diego Ramos (Maneschy)
764
   DanielTaqueto
765
   lakitoo
766
+  ghklug
767
   DevilLorde
768
   João (fror)
769
   unknowndomain
770
   Esdras Tarsis (esdrastarsis)
771
   Ramon Gonzalez (ramon200000)
772
-  Miguel Balbo Victor (miguelbalbovictor)
773
   Guilherme Cruz (gcrz)
774
-  Eduardo Addad de Oliveira - Eduaddad (eduardoaddad)
775
+  Miguel Balbo Victor (miguelbalbovictor)
776
   dodgepong
777
-  Finhawk
778
-  ghklug
779
+  Eduardo Addad de Oliveira - Eduaddad (eduardoaddad)
780
+  park (TheBugMeNot)
781
   dlageBR
782
+  Finhawk
783
   andre.krdoso
784
-  park (TheBugMeNot)
785
+  Guimaverick
786
   Tiago Danin (TiagoDanin)
787
  Punjabi:
788
   manjotsingh0202
789
   unknowndomain
790
   Sheikh Ahmed (sheikhahmed)
791
+  Vainock
792
  Romanian:
793
   Cristian Silaghi (sno_w)
794
   Kele Ion Ion (krovyoll)
795
@@ -1394,6 +1432,7 @@
796
   Mihai G (babasghenciu)
797
   Vainock
798
   Gol D. Ace (goldace)
799
+  Doru Stoica (dorusto)
800
   Melonoone
801
   LupusMechanicus
802
   Voie Tudor (tudorvoie2008)
803
@@ -1411,13 +1450,14 @@
804
   Pavel (Shevalie)
805
   VNGXR
806
   Bugo
807
+  Әлмәт Ак Арыслан (19082004amir)
808
   MaximGribanov
809
   dodgepong
810
   Vainock
811
+  Fitik
812
   Gol D. Ace (goldace)
813
-  Әлмәт Ак Арыслан (19082004amir)
814
-  Runoff Screen (glebpozbnakov62)
815
   Artem4ik
816
+  GP (legionerri)
817
   Yaroslav (MrYadro)
818
   css
819
   fromgate
820
@@ -1425,18 +1465,21 @@
821
   Synbulat Biishev (Syjalo)
822
   Sirboys
823
   Антон Илясов (Vewa9907)
824
-  Andy (anry025)
825
+  WoWnik (wownik98)
826
   VikHill
827
   er123rin (se123rin)
828
-  WoWnik (wownik98)
829
+  Andy (anry025)
830
+  Виктор (ViktorOn)
831
   Nemesis (Nemesis07)
832
+  NEO FEED (srdsafdsfsdfsdfsdgdfh)
833
+  Просто Взут (JustVzyt)
834
   Blueberry (Blueberryy)
835
   Zonega
836
   bxkr
837
   Serge Sklyarov (sergesklyarov)
838
+  Anton Bershanskiy (bershanskiy)
839
   Utoog (rivus)
840
   Андрей Курдюков (sandrix)
841
-  Anton Bershanskiy (bershanskiy)
842
   Makatavin # (makatavin0)
843
   HSD Channel (kvdbve34)
844
   Mr Misha (MrMisha)
845
@@ -1445,46 +1488,48 @@
846
   ExZo
847
   Vlad (KoTmaxHo)
848
   Vladimir (jeffors)
849
-  Artjom Jemeljanov (artjom3729)
850
-  RaspingMango (RaspingMango637)
851
   Myasko
852
+  RaspingMango (RaspingMango637)
853
   Mikhail Paulyshka (Mixaill)
854
-  Виктор (ViktorOn)
855
   Super 2004 (pe86ki)
856
   Иван Геймеров (hronos-2t)
857
+  Дима Исаев (dima.isaev2005)
858
   Nikita Bibanaev (nicky18013)
859
   Sergei Fug1t1v3 (fug)
860
+  pavuma
861
   Максим Куренков (kuplay)
862
   Цезарь Ролл (CeaserRoll)
863
   Walt Gee (vovanych)
864
-  Илья Кузнецов (ilyavj)
865
   zy9c 1337 (zy9c228)
866
+  Илья Кузнецов (ilyavj)
867
   unknowndomain
868
-  Ninja Hacker3000 (ninjahacker3875)
869
   allan walpy (AndreyLysenkov)
870
+  Ninja Hacker3000 (ninjahacker3875)
871
   Drahonn
872
-  Mr. Games (oohskofgs)
873
+  SandoBY
874
   Yuri Mihaqlov (yurijmi)
875
-  Meldone (meldone)
876
   BeDubber
877
-  SandoBY
878
-  Alex Pavliuk (TheDustyy)
879
+  Meldone (meldone)
880
+  Mr. Games (oohskofgs)
881
   Anatoly (Atsupak)
882
-  Leika098
883
+  Alex Pavliuk (TheDustyy)
884
+  Nezila Nez (Nezila)
885
   Kcurett TM (thekcurett)
886
+  Leika098
887
+  mchg _ (mchg)
888
   Sigge Stjärnholm (Kladdy)
889
   TR1D
890
-  mchg _ (mchg)
891
   Evgeny Bogdanov (vtrifonov548)
892
   TOWUK (towuk)
893
   iLefty
894
-  MeoWStraY
895
   Kuji Kitamura (KujiKita)
896
+  MeoWStraY
897
   Kirill Arkhipov (dokl957)
898
   MUHADDIS MEDIA (muhaddismedia)
899
  Scottish Gaelic:
900
   GunChleoc
901
   Vainock
902
+  Endo (Balisong)
903
   unknowndomain
904
   Gol D. Ace (goldace)
905
  Serbian (Cyrillic):
906
@@ -1511,9 +1556,12 @@
907
   unknowndomain
908
   dodgepong
909
   scienceangel
910
+ Silesian:
911
+  Psioczek
912
  Sinhala:
913
   rpu ysam (rpuyasi)
914
   Store (HelaBasa)
915
+  Vainock
916
  Slovak:
917
   Lukáš Čeremeta (luki1412)
918
   Erik Bročko (ericek111)
919
@@ -1522,7 +1570,7 @@
920
   Anton Lokaj (anlo)
921
   Vainock
922
   Dániel P. (Daniii_)
923
-  Vladimír Krajč (mickkymouse)
924
+  Vladimír Krajč (mkkyy)
925
   TheWolfiKK
926
   Gol D. Ace (goldace)
927
   Miroslav Machala (Miroslav_Machala)
928
@@ -1553,12 +1601,15 @@
929
   Alex E. D. B. (alexedb)
930
   EG Gamer (eggamer131)
931
   Pilar G. (TheMadnessLady)
932
+  MarioMey
933
   Gol D. Ace (goldace)
934
   Manuel Matías (manuel.matias)
935
-  MarioMey
936
   Lluís R (LluisR98)
937
   Vainock
938
   Maximiliano Schtroumpftech Pena-Roig (som2tokmynam)
939
+  Adolfo Jayme (fitoschido)
940
+  716gjesu
941
+  JaviermbPlays (JavierMB)
942
   Carlos Plata (carlosesgenial33)
943
   eemiroj
944
   henrycontreras
945
@@ -1566,26 +1617,26 @@
946
   Marcos Vidal (markitos.maki22)
947
   Ruben Deig Ramos (rdeigramos)
948
   Roriita
949
-  Ray (Ipsumry)
950
+  1 (Ipsumry)
951
   makiza1 (micosil_2)
952
   Santiago Pereyra (SannttVIII)
953
   jan (test83318)
954
-  Adolfo Jayme (fitoschido)
955
   David Sonico (davidsubsonico)
956
   Jokeestd
957
   AndMe (accomigt)
958
   Eleazar (MtrElee3)
959
   amssusgameplays (willifake052)
960
-  Stephen Q (qstephen73)
961
   D E B (D_E_B)
962
+  Stephen Q (qstephen73)
963
   Jaire (corpi.98)
964
-  unknowndomain
965
   Sigge Stjärnholm (Kladdy)
966
+  unknowndomain
967
   Amy (amyipdev)
968
   jiseokss
969
   Rodrigo Ipince (ipince)
970
   dodgepong
971
   Juan Esteban (Juanskeree)
972
+  Hector meneses (hector.meneses)
973
   chaironeko
974
   Gloriana Cocozza (gcocozza)
975
   Mogabie's Nation (Mogabie)
976
@@ -1597,17 +1648,18 @@
977
   Laccy IEST (Laccy)
978
   Bjorn Astrom (beeanyew)
979
   0x9fff00
980
+  LinusW
981
   Gustav Ekner (ekner)
982
   Vainock
983
   Victor Ahlin (VSwede)
984
   Mats Karlsson (matska)
985
   ArvidTheSwe
986
-  LinusW
987
   hentor5
988
   Olle Dahström (odahlstrom)
989
+  nahkampf
990
   Gol D. Ace (goldace)
991
-  unknowndomain
992
   Henrik Mattsson-Mårn (rchk)
993
+  unknowndomain
994
   Axel Aminoff (axel.aminoff)
995
   chaironeko
996
   Jonas Svensson (jonassanojj99)
997
@@ -1635,6 +1687,7 @@
998
   Balamurugan Thayalan (balamurugan.th)
999
   unknowndomain
1000
  Thai:
1001
+  Yarika Sutthiwong (ammaneena)
1002
   Slow Life (SlowLife)
1003
   Nawin Somprasong (thaipirch98)
1004
   zero0200
1005
@@ -1643,8 +1696,9 @@
1006
   SurachaiJUI
1007
   Sakia Normal Human (arcanaarcana5)
1008
   PolaX3
1009
-  nongnoobjung (kitcharuk_4)
1010
   盛凤阁 (execzero)
1011
+  nongnoobjung (kitcharuk_4)
1012
+  Worawut Weerawan (nero.exe)
1013
   Rathchaarnon Threeanjuleethaan (rathchaarnon)
1014
   unknowndomain
1015
   แมน ทศพร (lovemanna456)
1016
@@ -1661,34 +1715,36 @@
1017
   Savas Tokmak (Laserist)
1018
   Vainock
1019
   Umut kılıç (kilic190787)
1020
-  furkanbicici
1021
+  Burak Eker (mburakeker)
1022
   BreezeQS
1023
+  furkanbicici
1024
   keke_ea
1025
+  MeskaX
1026
   Murat Karagöz (anemon_1994)
1027
+  Görkem Akova (gorkemakova)
1028
   Bilgehan Demirel (bilgehandemirel)
1029
   Gol D. Ace (goldace)
1030
-  Alperen Yıldız (Sparrow34)
1031
   berkcan uçan (ibnehayati)
1032
+  Alperen Yıldız (Sparrow34)
1033
   Solusyon2
1034
   gecebekcisi1
1035
   Emin Can OGUZ (emincanoguz11)
1036
   Furkan Korhan (furkankorhan)
1037
-  Ege Ölge (ekto)
1038
+  tinci
1039
   Tarık Coşkun (tarikcoskun)
1040
   BedirhanGltkn (bedirhangltkn)
1041
   Ege Uzun (kise5478)
1042
   bkzspam
1043
   Onur Yılmaz (Makaron3422)
1044
-  Baran Moroğan (okunamayanad)
1045
   TahaCelik
1046
+  Baran Moroğan (okunamayanad)
1047
   mustafaa
1048
-  keremkt_
1049
   Richard Stanway (r1ch)
1050
   TimurOzcan
1051
   Ömer (upp4r)
1052
   Yıldırım Mehmet Nur (MehmetNY)
1053
   Khedi
1054
-  atamerco23
1055
+  Ata Çağan Atamer (atamerco23)
1056
   Hydroboost
1057
   unknowndomain
1058
   Mustafa Arslan (mstfaa)
1059
@@ -1718,13 +1774,14 @@
1060
   បងមាន តែអូន (cheaiphone267)
1061
   geimfis
1062
   L1Q
1063
-  Sergii Raboshchuk (Fallenbard)
1064
   powerdef
1065
+  Sergii Raboshchuk (Fallenbard)
1066
   unknowndomain
1067
   Andrii Khronenko (hran)
1068
   skuu
1069
-  Alex Pavliuk (TheDustyy)
1070
   Maksym Tymoshyk (maximillian_)
1071
+  Alex Pavliuk (TheDustyy)
1072
+  Володимир Родич (vrodych)
1073
   dodgepong
1074
  Urdu (Pakistan):
1075
   Sheikh Ahmed (sheikhahmed)
1076
@@ -1733,10 +1790,11 @@
1077
   shamuntohamd
1078
   unknowndomain
1079
   Gol D. Ace (goldace)
1080
+  Vainock
1081
  Vietnamese:
1082
+  IoeCmcomc (ioecmcomc)
1083
   Johnny “max20091” Utah (boostyourprogram)
1084
   Quang Nguyen (quangnguyen.25)
1085
-  IoeCmcomc (ioecmcomc)
1086
   Hưng Nguyễn (hoyostudio)
1087
   ngoisaosang
1088
   Dũng Nguyễn (CDzungx)
1089
@@ -1749,12 +1807,12 @@
1090
   Bùi Xuân Hải (real.xuanhai)
1091
   HUYwx (vodoanhuy301)
1092
   Vainock
1093
-  Shinoge
1094
   rezarria
1095
+  Shinoge
1096
   unknowndomain
1097
   Vũ Hải Tây (tayngungo1999)
1098
   oranz21
1099
-  V4Ki3t_VN
1100
   Dawkin Nguyen (dawkinit)
1101
+  V4Ki3t_VN
1102
   dodgepong
1103
   NCAA
1104
obs-studio-27.0.1.tar.xz/CI/flatpak/com.obsproject.Studio.json -> obs-studio-27.1.3.tar.xz/CI/flatpak/com.obsproject.Studio.json Changed
13
 
1
@@ -15,11 +15,7 @@
2
     "--filesystem=host",
3
     "--talk-name=org.kde.StatusNotifierWatcher",
4
     "--talk-name=org.freedesktop.Flatpak",
5
-    "--talk-name=org.freedesktop.ScreenSaver",
6
-    "--talk-name=org.freedesktop.PowerManagement.Inhibit",
7
     "--talk-name=org.freedesktop.Notifications",
8
-    "--talk-name=org.mate.SessionManager",
9
-    "--talk-name=org.gnome.SessionManager",
10
     "--own-name=org.kde.StatusNotifierItem-2-2",
11
     "--system-talk-name=org.freedesktop.Avahi"
12
   ],
13
obs-studio-27.0.1.tar.xz/CI/full-build-macos.sh -> obs-studio-27.1.3.tar.xz/CI/full-build-macos.sh Changed
26
 
1
@@ -351,15 +351,6 @@
2
     else
3
         /bin/cp ./libobs-opengl/${BUILD_CONFIG}/libobs-opengl.so ./OBS.app/Contents/Frameworks
4
     fi
5
-
6
-    step "Copy QtNetwork for plugin support"
7
-    /bin/cp -R /tmp/obsdeps/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
8
-    /bin/chmod -R +w ./OBS.app/Contents/Frameworks/QtNetwork.framework
9
-    /bin/rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Headers
10
-    /bin/rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Headers/
11
-    /bin/chmod 644 ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Resources/Info.plist
12
-    install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
13
-    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
14
 }
15
 
16
 install_frameworks() {
17
@@ -542,7 +533,7 @@
18
 
19
     step "Code-sign DAL Plugin..."
20
     /bin/echo -n "${COLOR_ORANGE}"
21
-    /usr/bin/codesign --force --options runtime --deep --sign "${CODESIGN_IDENT}" "./OBS.app/Contents/Resources/data/obs-mac-virtualcam.plugin"
22
+    /usr/bin/codesign --force --options runtime --deep --sign "${CODESIGN_IDENT}" "./OBS.app/Contents/Resources/data/obs-plugins/mac-virtualcam/obs-mac-virtualcam.plugin"
23
     /bin/echo -n "${COLOR_RESET}"
24
 
25
     step "Code-sign OBS code..."
26
obs-studio-27.0.1.tar.xz/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/CMakeLists.txt Changed
73
 
1
@@ -14,8 +14,8 @@
2
 if(WIN32)
3
    cmake_minimum_required(VERSION 3.16)
4
 
5
-   # Check for Win SDK version 10.0.19041 or above
6
-   if(MSVC AND MSVC_VERSION LESS 1920)
7
+   # Check for Win SDK version 10.0.20348 or above
8
+   if(MSVC)
9
        message(STATUS "Windows API version is ${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
10
        string(REPLACE "." ";" WINAPI_VER "${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}")
11
 
12
@@ -26,7 +26,7 @@
13
        set(WINAPI_COMPATIBLE FALSE)
14
        if(WINAPI_VER_MAJOR EQUAL 10)
15
            if (WINAPI_VER_MINOR EQUAL 0)
16
-               if (WINAPI_VER_BUILD GREATER_EQUAL 19041)
17
+               if (WINAPI_VER_BUILD GREATER_EQUAL 20348)
18
                    set(WINAPI_COMPATIBLE TRUE)
19
                endif()
20
            else()
21
@@ -37,7 +37,7 @@
22
        endif()
23
 
24
        if(NOT WINAPI_COMPATIBLE)
25
-           message(FATAL_ERROR "OBS requires Windows 10 SDK version 10.0.19041.0 and above to compile.\nPlease download the most recent Windows 10 SDK in order to compile (or update to Visual Studio 2019).")
26
+           message(FATAL_ERROR "OBS requires Windows 10 SDK version 10.0.20348.0 and above to compile.\nPlease download the most recent Windows 10 SDK in order to compile.")
27
        endif()
28
    endif()
29
 
30
@@ -175,6 +175,10 @@
31
    set(CMAKE_C_FLAGS_DEBUG "/DDEBUG=1 /D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
32
    set(CMAKE_CXX_FLAGS_DEBUG "/DDEBUG=1 /D_DEBUG=1 ${CMAKE_C_FLAGS_DEBUG}")
33
 
34
+   # https://gitlab.kitware.com/cmake/cmake/-/issues/20812
35
+   set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /Ob2")
36
+   set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Ob2")
37
+
38
    if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
39
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
40
        set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
41
@@ -184,7 +188,7 @@
42
    foreach(t EXE SHARED MODULE)
43
        set(CMAKE_${t}_LINKER_FLAGS "${CMAKE_${t}_LINKER_FLAGS} /OPT:REF")
44
        set(CMAKE_${t}_LINKER_FLAGS_DEBUG "${CMAKE_${t}_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO")
45
-       set(CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO")
46
+       set(CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_${t}_LINKER_FLAGS_RELWITHDEBINFO} /INCREMENTAL:NO /OPT:ICF")
47
    endforeach()
48
 else()
49
    if(MINGW)
50
@@ -203,6 +207,11 @@
51
 elseif(UNIX)
52
    option(USE_XDG "Utilize XDG Base Directory Specification" ON)
53
    option(ENABLE_WAYLAND "Build support for Wayland" ON)
54
+   if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
55
+       option(ENABLE_DARRAY_TYPE_TEST "Test types of darray argument" ON)
56
+   else()
57
+       option(ENABLE_DARRAY_TYPE_TEST "Test types of darray argument" OFF)
58
+   endif()
59
 
60
    if(USE_XDG)
61
        add_definitions(-DUSE_XDG)
62
@@ -211,6 +220,10 @@
63
    if(NOT UNIX_STRUCTURE)
64
        list(APPEND CMAKE_INSTALL_RPATH "$ORIGIN")
65
    endif()
66
+
67
+   if(ENABLE_DARRAY_TYPE_TEST)
68
+       add_definitions(-DENABLE_DARRAY_TYPE_TEST)
69
+   endif()
70
 endif()
71
 
72
 if(LOWERCASE_CMAKE_SYSTEM_PROCESSOR MATCHES "e2k")
73
obs-studio-27.1.3.tar.xz/COC.rst Added
155
 
1
@@ -0,0 +1,153 @@
2
+Code of Conduct
3
+===============
4
+
5
+Preamble
6
+--------
7
+
8
+OBS is made up of many people from all over the world, with different
9
+backgrounds and experiences that they bring to the project. In order to
10
+continue letting the community grow, feel safe, and to encourage good
11
+communication, we are adopting the following Code of Conduct. This
12
+document—or any subsequent version—will be enforced from July 31st, 2021
13
+onwards.
14
+
15
+Scope
16
+-----
17
+
18
+This Code of Conduct applies to anyone who contributes—or wishes to
19
+contribute—to the project directly, is taking part in community
20
+discussion in official channels, or are in a position where they’ll be
21
+seen as a representative of the project, regardless of whether they
22
+intend to speak for the project or not.
23
+
24
+A person is considered to be representing the project if they’re
25
+speaking as a code contributor, support volunteer, member involved with
26
+the project, or if they have some kind of visible role in an official
27
+channel for OBS. This does not include roles for Sponsors or Patrons.
28
+
29
+Official channels for OBS include the Discord server, the forum, any
30
+GitHub repositories within the OBS Project organization, any social
31
+media accounts for OBS Project, any public events where OBS Project has
32
+a presence, any presentations given on behalf of OBS Project, or any
33
+other situation that can be reasonably interpreted as being hosted,
34
+attended or communicated by the OBS Project.
35
+
36
+This Code of Conduct is subject to change, and any changes will have a 2
37
+week notice period before taking immediate effect. Changes will not be
38
+enforced retroactively unless it directly affects the security, safety
39
+or well-being of another individual, or other exceptional circumstances.
40
+
41
+Guidelines
42
+----------
43
+
44
+General
45
+~~~~~~~
46
+
47
+-  We are committed to providing a friendly, safe and welcoming
48
+   environment for all, regardless of level of experience, gender
49
+   identity and expression, sexual orientation, disability, personal
50
+   appearance, body size, race, ethnicity, age, religion, nationality,
51
+   or other similar characteristic.
52
+-  Please avoid using overtly sexual aliases or other nicknames that
53
+   might detract from a friendly, safe and welcoming environment for
54
+   all.
55
+-  Please be kind and courteous. There’s no need to be mean or rude.
56
+-  Respect that people will have differences of opinion.
57
+-  We will exclude you from interaction if you insult, demean or harass
58
+   anyone. That is not welcome behavior. The definition of harassment is
59
+   provided in the section on Unacceptable Behavior. In particular, we
60
+   don’t tolerate behavior that excludes people in socially marginalized
61
+   groups. This includes private harassment.
62
+-  Likewise any spamming, trolling, flaming, baiting or other
63
+   attention-stealing behavior is not welcome.
64
+-  Being a recognized Contributor, Support Volunteer, Sponsor or Patron
65
+   does not give you special right to avoid following these guidelines
66
+   when taking part in community discussions.
67
+
68
+Code Contributors
69
+~~~~~~~~~~~~~~~~~
70
+
71
+-  Respect that every design or implementation choice carries a
72
+   trade-off and numerous costs. There is seldom a right answer.
73
+-  Please keep unstructured critique to a minimum. If you have solid
74
+   ideas you want to experiment with, make a fork and see how it works.
75
+-  Do not post negative or inflammatory comments on code submissions. If
76
+   you believe that a code submission has problems, provide constructive
77
+   or actionable feedback, or a reason for why a submission is being
78
+   rejected. Where it is possible, provide explanations that someone can
79
+   use to fix things.
80
+
81
+Support Volunteers
82
+~~~~~~~~~~~~~~~~~~
83
+
84
+-  There are many users of differing skill levels or abilities. This is
85
+   never a reason to refuse support for someone, as long as it’s within
86
+   the scope of OBS support, and the user is willing to cooperate.
87
+-  Just because something seems obvious to you, doesn’t mean it’s
88
+   actually obvious. If someone is having difficulty understanding how
89
+   to use OBS, it should never be treated as their fault.
90
+-  Bad advice is often worse than no advice. If you don’t know how to
91
+   address someone’s issue, then get ahold of someone who’ll be able to
92
+   provide them help. We can only expect so much patience from a user
93
+   asking for support, and helping without understanding the problem
94
+   only results in using up that patience.
95
+
96
+Unacceptable Behavior
97
+---------------------
98
+
99
+The following behaviors are considered harassment and are unacceptable
100
+within our community:
101
+
102
+-  Violence, threats of violence or violent language directed against
103
+   another person.
104
+-  Sexist, racist, homophobic, transphobic, ableist or otherwise
105
+   discriminatory jokes and language.
106
+-  Posting or displaying sexually explicit or violent material.
107
+-  Posting or threatening to post other people’s personally identifying
108
+   information ("doxing").
109
+-  Personal insults.
110
+-  Unwelcome sexual attention. This includes, sexualized comments or
111
+   jokes, and unwelcome sexual advances.
112
+-  Deliberate intimidation, stalking or following.
113
+-  Advocating for, or encouraging, any of the above behavior.
114
+
115
+Enforcement
116
+-----------
117
+
118
+Instances of unacceptable behavior may be reported by contacting an
119
+enforcement team member at one of the following addresses:
120
+coc@obsproject.com. All complaints will be reviewed and investigated,
121
+and will result in a response that is deemed necessary and appropriate
122
+to the circumstances. The project team is obligated to maintain
123
+confidentiality with regard to the reporter of an incident. Further
124
+details of specific enforcement policies may be posted separately.
125
+
126
+In other cases where behavior is against the general guidelines set out
127
+in this Code of Conduct, this may be brought up with a moderator through
128
+either a Discord DM, or through an email to an enforcement member. In
129
+these cases, it is always assumed in the first instance that a person
130
+means well, and action will only be taken in the case of repeated
131
+failure to follow the guidelines.
132
+
133
+Feedback
134
+--------
135
+
136
+Suggestions for changes can be made by submitting a pull request on the
137
+`obsproject/obs-studio <https://github.com/obsproject/obs-studio>`__
138
+repo, or if you wish to privately discuss your concerns, you can instead
139
+email coc@obsproject.com.
140
+
141
+Attribution
142
+-----------
143
+
144
+This Code of Conduct is adapted in part from the Contributor Covenant,
145
+version 1.4, in part from the Citizen Code of Conduct (used under
146
+CC-BY-SA 3.0), and in part from the Rust Code of Conduct.
147
+
148
+This Code of Conduct is released and licensed under a Creative Commons
149
+Attribution-ShareAlike 3.0 License.
150
+
151
+Version History
152
+---------------
153
+
154
+V1.0 - First Iteration - July 31st, 2021
155
obs-studio-27.0.1.tar.xz/CONTRIBUTING.rst -> obs-studio-27.1.3.tar.xz/CONTRIBUTING.rst Changed
10
 
1
@@ -67,3 +67,8 @@
2
   Note: When modifying cmake modules, just prefix with "cmake".
3
 
4
 - If you still need examples, please view the commit history.
5
+
6
+Conduct Guidelines
7
+------------------
8
+
9
+- Contributors to the OBS Project are expected to abide by the OBS Project Code of Conduct: https://github.com/obsproject/obs-studio/blob/master/COC.rst
10
obs-studio-27.0.1.tar.xz/UI/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/UI/CMakeLists.txt Changed
128
 
1
@@ -39,6 +39,28 @@
2
    set(RESTREAM_ENABLED TRUE)
3
 endif()
4
 
5
+if(DEFINED ENV{YOUTUBE_CLIENTID} AND NOT DEFINED YOUTUBE_CLIENTID)
6
+   set(YOUTUBE_CLIENTID "$ENV{YOUTUBE_CLIENTID}")
7
+endif()
8
+if(DEFINED ENV{YOUTUBE_CLIENTID_HASH} AND NOT DEFINED YOUTUBE_CLIENTID_HASH)
9
+   set(YOUTUBE_CLIENTID_HASH "$ENV{YOUTUBE_CLIENTID_HASH}")
10
+endif()
11
+if(DEFINED ENV{YOUTUBE_SECRET} AND NOT DEFINED YOUTUBE_SECRET)
12
+   set(YOUTUBE_SECRET "$ENV{YOUTUBE_SECRET}")
13
+endif()
14
+if(DEFINED ENV{YOUTUBE_SECRET_HASH} AND NOT DEFINED YOUTUBE_SECRET_HASH)
15
+   set(YOUTUBE_SECRET_HASH "$ENV{YOUTUBE_SECRET_HASH}")
16
+endif()
17
+
18
+if(NOT DEFINED YOUTUBE_CLIENTID OR "${YOUTUBE_CLIENTID}" STREQUAL "" OR
19
+   NOT DEFINED YOUTUBE_SECRET OR "${YOUTUBE_SECRET}" STREQUAL "" OR
20
+   NOT DEFINED YOUTUBE_CLIENTID_HASH OR "${YOUTUBE_CLIENTID_HASH}" STREQUAL "" OR
21
+   NOT DEFINED YOUTUBE_SECRET_HASH OR "${YOUTUBE_SECRET_HASH}" STREQUAL "")
22
+   set(YOUTUBE_ENABLED FALSE)
23
+else()
24
+   set(YOUTUBE_ENABLED TRUE)
25
+endif()
26
+
27
 configure_file(
28
    "${CMAKE_CURRENT_SOURCE_DIR}/ui-config.h.in"
29
    "${CMAKE_CURRENT_BINARY_DIR}/ui-config.h")
30
@@ -46,6 +68,9 @@
31
 set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
32
 set(CMAKE_AUTOMOC TRUE)
33
 
34
+find_package(Threads REQUIRED)
35
+
36
+find_package(Qt5Network ${FIND_MODE})
37
 find_package(Qt5Widgets ${FIND_MODE})
38
 find_package(Qt5Svg ${FIND_MODE})
39
 find_package(Qt5Xml ${FIND_MODE})
40
@@ -77,6 +102,8 @@
41
 add_definitions(${LIBCURL_DEFINITIONS})
42
 
43
 if(WIN32)
44
+   add_definitions(-DNOMINMAX)
45
+
46
    include_directories(${BLAKE2_INCLUDE_DIR})
47
 
48
    set(obs_PLATFORM_SOURCES
49
@@ -140,13 +167,11 @@
50
 if(BROWSER_AVAILABLE_INTERNAL)
51
    list(APPEND obs_PLATFORM_SOURCES
52
        obf.c
53
-       auth-oauth.cpp
54
        window-dock-browser.cpp
55
        window-extra-browsers.cpp
56
        )
57
    list(APPEND obs_PLATFORM_HEADERS
58
        obf.h
59
-       auth-oauth.hpp
60
        window-dock-browser.hpp
61
        window-extra-browsers.hpp
62
        )
63
@@ -168,6 +193,18 @@
64
            auth-restream.hpp
65
            )
66
    endif()
67
+
68
+endif()
69
+
70
+if(YOUTUBE_ENABLED)
71
+   list(APPEND obs_PLATFORM_SOURCES
72
+       auth-youtube.cpp
73
+       youtube-api-wrappers.cpp
74
+       )
75
+   list(APPEND obs_PLATFORM_HEADERS
76
+       auth-youtube.hpp
77
+       youtube-api-wrappers.hpp
78
+       )
79
 endif()
80
 
81
 set(obs_libffutil_SOURCES
82
@@ -225,6 +262,8 @@
83
    window-remux.cpp
84
    window-missing-files.cpp
85
    auth-base.cpp
86
+   auth-oauth.cpp
87
+   auth-listener.cpp
88
    source-tree.cpp
89
    scene-tree.cpp
90
    properties-view.cpp
91
@@ -289,6 +328,8 @@
92
    window-remux.hpp
93
    window-missing-files.hpp
94
    auth-base.hpp
95
+   auth-oauth.hpp
96
+   auth-listener.hpp
97
    source-tree.hpp
98
    scene-tree.hpp
99
    properties-view.hpp
100
@@ -374,6 +415,18 @@
101
 set(obs_QRC
102
    forms/obs.qrc)
103
 
104
+if(YOUTUBE_ENABLED)
105
+   list(APPEND obs_SOURCES
106
+       window-youtube-actions.cpp
107
+       )
108
+   list(APPEND obs_HEADERS
109
+       window-youtube-actions.hpp
110
+       )
111
+   list(APPEND obs_UI
112
+       forms/OBSYoutubeActions.ui
113
+       )
114
+endif()
115
+
116
 qt5_wrap_ui(obs_UI_HEADERS ${obs_UI})
117
 qt5_add_resources(obs_QRC_SOURCES ${obs_QRC})
118
 
119
@@ -400,6 +453,8 @@
120
 
121
 target_link_libraries(obs
122
    libobs
123
+   Threads::Threads
124
+   Qt5::Network
125
    Qt5::Widgets
126
    Qt5::Svg
127
    Qt5::Xml
128
obs-studio-27.0.1.tar.xz/UI/api-interface.cpp -> obs-studio-27.1.3.tar.xz/UI/api-interface.cpp Changed
84
 
1
@@ -117,8 +117,8 @@
2
        struct obs_frontend_source_list *sources) override
3
    {
4
        for (int i = 0; i < main->ui->transitions->count(); i++) {
5
-           OBSSource tr = main->ui->transitions->itemData(i)
6
-                          .value<OBSSource>();
7
+           obs_source_t *tr = main->ui->transitions->itemData(i)
8
+                          .value<OBSSource>();
9
 
10
            if (!tr)
11
                continue;
12
@@ -238,6 +238,16 @@
13
        return bstrdup(name);
14
    }
15
 
16
+   char *obs_frontend_get_current_profile_path(void) override
17
+   {
18
+       char profilePath[512];
19
+       int ret = GetProfilePath(profilePath, sizeof(profilePath), "");
20
+       if (ret <= 0)
21
+           return nullptr;
22
+
23
+       return bstrdup(profilePath);
24
+   }
25
+
26
    void obs_frontend_set_current_profile(const char *profile) override
27
    {
28
        QList<QAction *> menuActions = main->ui->profileMenu->actions();
29
@@ -256,6 +266,24 @@
30
        }
31
    }
32
 
33
+   void obs_frontend_create_profile(const char *name) override
34
+   {
35
+       QMetaObject::invokeMethod(main, "NewProfile",
36
+                     Q_ARG(QString, name));
37
+   }
38
+
39
+   void obs_frontend_duplicate_profile(const char *name) override
40
+   {
41
+       QMetaObject::invokeMethod(main, "DuplicateProfile",
42
+                     Q_ARG(QString, name));
43
+   }
44
+
45
+   void obs_frontend_delete_profile(const char *profile) override
46
+   {
47
+       QMetaObject::invokeMethod(main, "DeleteProfile",
48
+                     Q_ARG(QString, profile));
49
+   }
50
+
51
    void obs_frontend_streaming_start(void) override
52
    {
53
        QMetaObject::invokeMethod(main, "StartStreaming");
54
@@ -578,6 +606,18 @@
55
 
56
    void obs_frontend_reset_video(void) override { main->ResetVideo(); }
57
 
58
+   void obs_frontend_open_source_properties(obs_source_t *source) override
59
+   {
60
+       QMetaObject::invokeMethod(main, "OpenProperties",
61
+                     Q_ARG(OBSSource, OBSSource(source)));
62
+   }
63
+
64
+   void obs_frontend_open_source_filters(obs_source_t *source) override
65
+   {
66
+       QMetaObject::invokeMethod(main, "OpenFilters",
67
+                     Q_ARG(OBSSource, OBSSource(source)));
68
+   }
69
+
70
    void on_load(obs_data_t *settings) override
71
    {
72
        for (size_t i = saveCallbacks.size(); i > 0; i--) {
73
@@ -604,7 +644,9 @@
74
 
75
    void on_event(enum obs_frontend_event event) override
76
    {
77
-       if (main->disableSaving)
78
+       if (main->disableSaving &&
79
+           event != OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP &&
80
+           event != OBS_FRONTEND_EVENT_EXIT)
81
            return;
82
 
83
        for (size_t i = callbacks.size(); i > 0; i--) {
84
obs-studio-27.0.1.tar.xz/UI/auth-base.cpp -> obs-studio-27.1.3.tar.xz/UI/auth-base.cpp Changed
31
 
1
@@ -39,6 +39,17 @@
2
    return Type::None;
3
 }
4
 
5
+bool Auth::External(const std::string &service)
6
+{
7
+   for (auto &a : authDefs) {
8
+       if (service.find(a.def.service) != std::string::npos) {
9
+           return a.def.externalOAuth;
10
+       }
11
+   }
12
+
13
+   return false;
14
+}
15
+
16
 void Auth::Load()
17
 {
18
    OBSBasic *main = OBSBasic::Get();
19
@@ -50,7 +61,11 @@
20
    if (main->auth) {
21
        if (main->auth->LoadInternal()) {
22
            main->auth->LoadUI();
23
+           main->SetBroadcastFlowEnabled(
24
+               main->auth->broadcastFlow());
25
        }
26
+   } else {
27
+       main->SetBroadcastFlowEnabled(false);
28
    }
29
 }
30
 
31
obs-studio-27.0.1.tar.xz/UI/auth-base.hpp -> obs-studio-27.1.3.tar.xz/UI/auth-base.hpp Changed
33
 
1
@@ -27,11 +27,14 @@
2
    enum class Type {
3
        None,
4
        OAuth_StreamKey,
5
+       OAuth_LinkedAccount,
6
    };
7
 
8
    struct Def {
9
        std::string service;
10
        Type type;
11
+       bool externalOAuth;
12
+       bool usesBroadcastFlow;
13
    };
14
 
15
    typedef std::function<std::shared_ptr<Auth>()> create_cb;
16
@@ -41,6 +44,8 @@
17
 
18
    inline Type type() const { return def.type; }
19
    inline const char *service() const { return def.service.c_str(); }
20
+   inline bool external() const { return def.externalOAuth; }
21
+   inline bool broadcastFlow() const { return def.usesBroadcastFlow; }
22
 
23
    virtual void LoadUI() {}
24
 
25
@@ -48,6 +53,7 @@
26
 
27
    static std::shared_ptr<Auth> Create(const std::string &service);
28
    static Type AuthType(const std::string &service);
29
+   static bool External(const std::string &service);
30
    static void Load();
31
    static void Save();
32
 
33
obs-studio-27.1.3.tar.xz/UI/auth-listener.cpp Added
116
 
1
@@ -0,0 +1,114 @@
2
+#include <auth-listener.hpp>
3
+
4
+#include <QRegularExpression>
5
+#include <QRegularExpressionMatch>
6
+#include <QString>
7
+#include <QtNetwork/QTcpSocket>
8
+
9
+#include "obs-app.hpp"
10
+#include "qt-wrappers.hpp"
11
+
12
+#define LOGO_URL "https://obsproject.com/assets/images/new_icon_small-r.png"
13
+
14
+static const QString serverResponseHeader =
15
+   QStringLiteral("HTTP/1.0 200 OK\n"
16
+              "Connection: close\n"
17
+              "Content-Type: text/html; charset=UTF-8\n"
18
+              "Server: OBS Studio\n"
19
+              "\n"
20
+              "<html><head><title>OBS Studio"
21
+              "</title></head>");
22
+
23
+static const QString responseTemplate =
24
+   "<center>"
25
+   "<img src=\"" LOGO_URL
26
+   "\" alt=\"OBS\" class=\"center\"  height=\"60\" width=\"60\">"
27
+   "</center>"
28
+   "<center><p style=\"font-family:verdana; font-size:13pt\">%1</p></center>";
29
+
30
+AuthListener::AuthListener(QObject *parent) : QObject(parent)
31
+{
32
+   server = new QTcpServer(this);
33
+   connect(server, &QTcpServer::newConnection, this,
34
+       &AuthListener::NewConnection);
35
+   if (!server->listen(QHostAddress::LocalHost, 0)) {
36
+       blog(LOG_DEBUG, "Server could not start");
37
+       emit fail();
38
+   } else {
39
+       blog(LOG_DEBUG, "Server started at port %d",
40
+            server->serverPort());
41
+   }
42
+}
43
+
44
+quint16 AuthListener::GetPort()
45
+{
46
+   return server ? server->serverPort() : 0;
47
+}
48
+
49
+void AuthListener::SetState(QString state)
50
+{
51
+   this->state = state;
52
+}
53
+
54
+void AuthListener::NewConnection()
55
+{
56
+   QTcpSocket *socket = server->nextPendingConnection();
57
+   if (socket) {
58
+       connect(socket, &QTcpSocket::disconnected, socket,
59
+           &QTcpSocket::deleteLater);
60
+       connect(socket, &QTcpSocket::readyRead, socket, [&, socket]() {
61
+           QByteArray buffer;
62
+           while (socket->bytesAvailable() > 0) {
63
+               buffer.append(socket->readAll());
64
+           }
65
+           socket->write(QT_TO_UTF8(serverResponseHeader));
66
+           QString redirect = QString::fromLatin1(buffer);
67
+           blog(LOG_DEBUG, "redirect: %s", QT_TO_UTF8(redirect));
68
+
69
+           QRegularExpression re_state(
70
+               "(&|\\?)state=(?<state>[^&]+)");
71
+           QRegularExpression re_code(
72
+               "(&|\\?)code=(?<code>[^&]+)");
73
+
74
+           QRegularExpressionMatch match =
75
+               re_state.match(redirect);
76
+
77
+           QString code;
78
+
79
+           if (match.hasMatch()) {
80
+               if (state == match.captured("state")) {
81
+                   match = re_code.match(redirect);
82
+                   if (!match.hasMatch())
83
+                       blog(LOG_DEBUG, "no 'code' "
84
+                               "in server "
85
+                               "redirect");
86
+
87
+                   code = match.captured("code");
88
+               } else {
89
+                   blog(LOG_WARNING, "state mismatch "
90
+                             "while handling "
91
+                             "redirect");
92
+               }
93
+           } else {
94
+               blog(LOG_DEBUG, "no 'state' in "
95
+                       "server redirect");
96
+           }
97
+
98
+           if (code.isEmpty()) {
99
+               auto data = responseTemplate.arg(
100
+                   QTStr("YouTube.Auth.NoCode"));
101
+               socket->write(QT_TO_UTF8(data));
102
+               emit fail();
103
+           } else {
104
+               auto data = responseTemplate.arg(
105
+                   QTStr("YouTube.Auth.Ok"));
106
+               socket->write(QT_TO_UTF8(data));
107
+               emit ok(code);
108
+           }
109
+           socket->flush();
110
+           socket->close();
111
+       });
112
+   } else {
113
+       emit fail();
114
+   }
115
+}
116
obs-studio-27.1.3.tar.xz/UI/auth-listener.hpp Added
25
 
1
@@ -0,0 +1,23 @@
2
+#pragma once
3
+
4
+#include <QObject>
5
+#include <QtNetwork/QTcpServer>
6
+
7
+class AuthListener : public QObject {
8
+   Q_OBJECT
9
+
10
+   QTcpServer *server;
11
+   QString state;
12
+
13
+signals:
14
+   void ok(const QString &code);
15
+   void fail();
16
+
17
+protected:
18
+   void NewConnection();
19
+
20
+public:
21
+   explicit AuthListener(QObject *parent = 0);
22
+   quint16 GetPort();
23
+   void SetState(QString state);
24
+};
25
obs-studio-27.0.1.tar.xz/UI/auth-oauth.cpp -> obs-studio-27.1.3.tar.xz/UI/auth-oauth.cpp Changed
103
 
1
@@ -16,15 +16,18 @@
2
 
3
 using namespace json11;
4
 
5
+#ifdef BROWSER_AVAILABLE
6
 #include <browser-panel.hpp>
7
 extern QCef *cef;
8
 extern QCefCookieManager *panel_cookies;
9
+#endif
10
 
11
 /* ------------------------------------------------------------------------- */
12
 
13
 OAuthLogin::OAuthLogin(QWidget *parent, const std::string &url, bool token)
14
    : QDialog(parent), get_token(token)
15
 {
16
+#ifdef BROWSER_AVAILABLE
17
    if (!cef) {
18
        return;
19
    }
20
@@ -61,19 +64,23 @@
21
    QVBoxLayout *topLayout = new QVBoxLayout(this);
22
    topLayout->addWidget(cefWidget);
23
    topLayout->addLayout(bottomLayout);
24
+#endif
25
 }
26
 
27
 OAuthLogin::~OAuthLogin()
28
 {
29
+#ifdef BROWSER_AVAILABLE
30
    delete cefWidget;
31
+#endif
32
 }
33
 
34
 int OAuthLogin::exec()
35
 {
36
+#ifdef BROWSER_AVAILABLE
37
    if (cefWidget) {
38
        return QDialog::exec();
39
    }
40
-
41
+#endif
42
    return QDialog::Rejected;
43
 }
44
 
45
@@ -120,7 +127,7 @@
46
 {
47
    for (auto &a : loginCBs) {
48
        if (service.find(a.def.service) != std::string::npos) {
49
-           return a.login(parent);
50
+           return a.login(parent, service);
51
        }
52
    }
53
 
54
@@ -174,7 +181,24 @@
55
 }
56
 
57
 bool OAuth::GetToken(const char *url, const std::string &client_id,
58
+            const std::string &secret, const std::string &redirect_uri,
59
+            int scope_ver, const std::string &auth_code, bool retry)
60
+{
61
+   return GetTokenInternal(url, client_id, secret, redirect_uri, scope_ver,
62
+               auth_code, retry);
63
+}
64
+
65
+bool OAuth::GetToken(const char *url, const std::string &client_id,
66
             int scope_ver, const std::string &auth_code, bool retry)
67
+{
68
+   return GetTokenInternal(url, client_id, {}, {}, scope_ver, auth_code,
69
+               retry);
70
+}
71
+
72
+bool OAuth::GetTokenInternal(const char *url, const std::string &client_id,
73
+                const std::string &secret,
74
+                const std::string &redirect_uri, int scope_ver,
75
+                const std::string &auth_code, bool retry)
76
 try {
77
    std::string output;
78
    std::string error;
79
@@ -199,6 +223,14 @@
80
    std::string post_data;
81
    post_data += "action=redirect&client_id=";
82
    post_data += client_id;
83
+   if (!secret.empty()) {
84
+       post_data += "&client_secret=";
85
+       post_data += secret;
86
+   }
87
+   if (!redirect_uri.empty()) {
88
+       post_data += "&redirect_uri=";
89
+       post_data += redirect_uri;
90
+   }
91
 
92
    if (!auth_code.empty()) {
93
        post_data += "&grant_type=authorization_code&code=";
94
@@ -212,7 +244,7 @@
95
 
96
    auto func = [&]() {
97
        success = GetRemoteFile(url, output, error, nullptr,
98
-                   "application/x-www-form-urlencoded",
99
+                   "application/x-www-form-urlencoded", "",
100
                    post_data.c_str(),
101
                    std::vector<std::string>(), nullptr, 5);
102
    };
103
obs-studio-27.0.1.tar.xz/UI/auth-oauth.hpp -> obs-studio-27.1.3.tar.xz/UI/auth-oauth.hpp Changed
29
 
1
@@ -35,7 +35,9 @@
2
 public:
3
    inline OAuth(const Def &d) : Auth(d) {}
4
 
5
-   typedef std::function<std::shared_ptr<Auth>(QWidget *)> login_cb;
6
+   typedef std::function<std::shared_ptr<Auth>(
7
+       QWidget *, const std::string &service_name)>
8
+       login_cb;
9
    typedef std::function<void()> delete_cookies_cb;
10
 
11
    static std::shared_ptr<Auth> Login(QWidget *parent,
12
@@ -62,6 +64,16 @@
13
              int scope_ver,
14
              const std::string &auth_code = std::string(),
15
              bool retry = false);
16
+   bool GetToken(const char *url, const std::string &client_id,
17
+             const std::string &secret,
18
+             const std::string &redirect_uri, int scope_ver,
19
+             const std::string &auth_code, bool retry);
20
+
21
+private:
22
+   bool GetTokenInternal(const char *url, const std::string &client_id,
23
+                 const std::string &secret,
24
+                 const std::string &redirect_uri, int scope_ver,
25
+                 const std::string &auth_code, bool retry);
26
 };
27
 
28
 class OAuthStreamKey : public OAuth {
29
obs-studio-27.0.1.tar.xz/UI/auth-restream.cpp -> obs-studio-27.1.3.tar.xz/UI/auth-restream.cpp Changed
21
 
1
@@ -58,8 +58,8 @@
2
 
3
    auto func = [&]() {
4
        success = GetRemoteFile(RESTREAM_STREAMKEY_URL, output, error,
5
-                   nullptr, "application/json", nullptr,
6
-                   headers, nullptr, 5);
7
+                   nullptr, "application/json", "",
8
+                   nullptr, headers, nullptr, 5);
9
    };
10
 
11
    ExecThreadedWithoutBlocking(
12
@@ -225,7 +225,7 @@
13
            QT_TO_UTF8(login.GetCode()), true);
14
 }
15
 
16
-std::shared_ptr<Auth> RestreamAuth::Login(QWidget *parent)
17
+std::shared_ptr<Auth> RestreamAuth::Login(QWidget *parent, const std::string &)
18
 {
19
    OAuthLogin login(parent, RESTREAM_AUTH_URL, false);
20
    cef->add_popup_whitelist_url("about:blank", &login);
21
obs-studio-27.0.1.tar.xz/UI/auth-restream.hpp -> obs-studio-27.1.3.tar.xz/UI/auth-restream.hpp Changed
9
 
1
@@ -29,5 +29,6 @@
2
 public:
3
    RestreamAuth(const Def &d);
4
 
5
-   static std::shared_ptr<Auth> Login(QWidget *parent);
6
+   static std::shared_ptr<Auth> Login(QWidget *parent,
7
+                      const std::string &service_name);
8
 };
9
obs-studio-27.0.1.tar.xz/UI/auth-twitch.cpp -> obs-studio-27.1.3.tar.xz/UI/auth-twitch.cpp Changed
21
 
1
@@ -78,8 +78,8 @@
2
    auto func = [&]() {
3
        success = GetRemoteFile("https://api.twitch.tv/kraken/channel",
4
                    output, error, &error_code,
5
-                   "application/json", nullptr, headers,
6
-                   nullptr, 5);
7
+                   "application/json", "", nullptr,
8
+                   headers, nullptr, 5);
9
    };
10
 
11
    ExecThreadedWithoutBlocking(
12
@@ -423,7 +423,7 @@
13
            QT_TO_UTF8(login.GetCode()), true);
14
 }
15
 
16
-std::shared_ptr<Auth> TwitchAuth::Login(QWidget *parent)
17
+std::shared_ptr<Auth> TwitchAuth::Login(QWidget *parent, const std::string &)
18
 {
19
    OAuthLogin login(parent, TWITCH_AUTH_URL, false);
20
    if (login.exec() == QDialog::Rejected) {
21
obs-studio-27.0.1.tar.xz/UI/auth-twitch.hpp -> obs-studio-27.1.3.tar.xz/UI/auth-twitch.hpp Changed
11
 
1
@@ -38,7 +38,8 @@
2
 public:
3
    TwitchAuth(const Def &d);
4
 
5
-   static std::shared_ptr<Auth> Login(QWidget *parent);
6
+   static std::shared_ptr<Auth> Login(QWidget *parent,
7
+                      const std::string &service_name);
8
 
9
    QTimer uiLoadTimer;
10
 
11
obs-studio-27.1.3.tar.xz/UI/auth-youtube.cpp Added
324
 
1
@@ -0,0 +1,322 @@
2
+#include "auth-youtube.hpp"
3
+
4
+#include <iostream>
5
+#include <QMessageBox>
6
+#include <QThread>
7
+#include <vector>
8
+#include <QDesktopServices>
9
+#include <QHBoxLayout>
10
+#include <QUrl>
11
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
12
+#include <QRandomGenerator>
13
+#endif
14
+
15
+#ifdef WIN32
16
+#include <windows.h>
17
+#include <shellapi.h>
18
+
19
+#pragma comment(lib, "shell32")
20
+#endif
21
+
22
+#include "auth-listener.hpp"
23
+#include "obs-app.hpp"
24
+#include "qt-wrappers.hpp"
25
+#include "ui-config.h"
26
+#include "youtube-api-wrappers.hpp"
27
+#include "window-basic-main.hpp"
28
+#include "obf.h"
29
+
30
+#ifdef BROWSER_AVAILABLE
31
+#include "window-dock-browser.hpp"
32
+#endif
33
+
34
+using namespace json11;
35
+
36
+/* ------------------------------------------------------------------------- */
37
+#define YOUTUBE_AUTH_URL "https://accounts.google.com/o/oauth2/v2/auth"
38
+#define YOUTUBE_TOKEN_URL "https://www.googleapis.com/oauth2/v4/token"
39
+#define YOUTUBE_SCOPE_VERSION 1
40
+#define YOUTUBE_API_STATE_LENGTH 32
41
+#define SECTION_NAME "YouTube"
42
+
43
+#define YOUTUBE_CHAT_PLACEHOLDER_URL \
44
+   "https://obsproject.com/placeholders/youtube-chat"
45
+#define YOUTUBE_CHAT_POPOUT_URL \
46
+   "https://www.youtube.com/live_chat?is_popout=1&dark_theme=1&v=%1"
47
+
48
+static const char allowedChars[] =
49
+   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
50
+static const int allowedCount = static_cast<int>(sizeof(allowedChars) - 1);
51
+/* ------------------------------------------------------------------------- */
52
+
53
+static inline void OpenBrowser(const QString auth_uri)
54
+{
55
+   QUrl url(auth_uri, QUrl::StrictMode);
56
+   QDesktopServices::openUrl(url);
57
+}
58
+
59
+void RegisterYoutubeAuth()
60
+{
61
+   for (auto &service : youtubeServices) {
62
+       OAuth::RegisterOAuth(
63
+           service,
64
+           [service]() {
65
+               return std::make_shared<YoutubeApiWrappers>(
66
+                   service);
67
+           },
68
+           YoutubeAuth::Login, []() { return; });
69
+   }
70
+}
71
+
72
+YoutubeAuth::YoutubeAuth(const Def &d)
73
+   : OAuthStreamKey(d), section(SECTION_NAME)
74
+{
75
+}
76
+
77
+bool YoutubeAuth::RetryLogin()
78
+{
79
+   return true;
80
+}
81
+
82
+void YoutubeAuth::SaveInternal()
83
+{
84
+   OBSBasic *main = OBSBasic::Get();
85
+   config_set_string(main->Config(), service(), "DockState",
86
+             main->saveState().toBase64().constData());
87
+
88
+   const char *section_name = section.c_str();
89
+   config_set_string(main->Config(), section_name, "RefreshToken",
90
+             refresh_token.c_str());
91
+   config_set_string(main->Config(), section_name, "Token", token.c_str());
92
+   config_set_uint(main->Config(), section_name, "ExpireTime",
93
+           expire_time);
94
+   config_set_int(main->Config(), section_name, "ScopeVer",
95
+              currentScopeVer);
96
+}
97
+
98
+static inline std::string get_config_str(OBSBasic *main, const char *section,
99
+                    const char *name)
100
+{
101
+   const char *val = config_get_string(main->Config(), section, name);
102
+   return val ? val : "";
103
+}
104
+
105
+bool YoutubeAuth::LoadInternal()
106
+{
107
+   OBSBasic *main = OBSBasic::Get();
108
+
109
+   const char *section_name = section.c_str();
110
+   refresh_token = get_config_str(main, section_name, "RefreshToken");
111
+   token = get_config_str(main, section_name, "Token");
112
+   expire_time =
113
+       config_get_uint(main->Config(), section_name, "ExpireTime");
114
+   currentScopeVer =
115
+       (int)config_get_int(main->Config(), section_name, "ScopeVer");
116
+   firstLoad = false;
117
+   return implicit ? !token.empty() : !refresh_token.empty();
118
+}
119
+
120
+#ifdef BROWSER_AVAILABLE
121
+static const char *ytchat_script = "\
122
+const obsCSS = document.createElement('style');\
123
+obsCSS.innerHTML = \"#panel-pages.yt-live-chat-renderer {display: none;}\
124
+yt-live-chat-viewer-engagement-message-renderer {display: none;}\";\
125
+document.querySelector('head').appendChild(obsCSS);";
126
+#endif
127
+
128
+void YoutubeAuth::LoadUI()
129
+{
130
+   if (uiLoaded)
131
+       return;
132
+
133
+#ifdef BROWSER_AVAILABLE
134
+   if (!cef)
135
+       return;
136
+
137
+   OBSBasic::InitBrowserPanelSafeBlock();
138
+   OBSBasic *main = OBSBasic::Get();
139
+
140
+   QCefWidget *browser;
141
+
142
+   QSize size = main->frameSize();
143
+   QPoint pos = main->pos();
144
+
145
+   chat.reset(new BrowserDock());
146
+   chat->setObjectName("ytChat");
147
+   chat->resize(300, 600);
148
+   chat->setMinimumSize(200, 300);
149
+   chat->setWindowTitle(QTStr("Auth.Chat"));
150
+   chat->setAllowedAreas(Qt::AllDockWidgetAreas);
151
+
152
+   browser = cef->create_widget(nullptr, YOUTUBE_CHAT_PLACEHOLDER_URL,
153
+                    panel_cookies);
154
+   browser->setStartupScript(ytchat_script);
155
+
156
+   chat->SetWidget(browser);
157
+   main->addDockWidget(Qt::RightDockWidgetArea, chat.data());
158
+   chatMenu.reset(main->AddDockWidget(chat.data()));
159
+
160
+   chat->setFloating(true);
161
+   chat->move(pos.x() + size.width() - chat->width() - 50, pos.y() + 50);
162
+
163
+   if (firstLoad) {
164
+       chat->setVisible(true);
165
+   } else {
166
+       const char *dockStateStr = config_get_string(
167
+           main->Config(), service(), "DockState");
168
+       QByteArray dockState =
169
+           QByteArray::fromBase64(QByteArray(dockStateStr));
170
+       main->restoreState(dockState);
171
+   }
172
+#endif
173
+
174
+   uiLoaded = true;
175
+}
176
+
177
+void YoutubeAuth::SetChatId(QString &chat_id)
178
+{
179
+#ifdef BROWSER_AVAILABLE
180
+   QString chat_url = QString(YOUTUBE_CHAT_POPOUT_URL).arg(chat_id);
181
+
182
+   if (chat && chat->cefWidget) {
183
+       chat->cefWidget->setURL(chat_url.toStdString());
184
+   }
185
+#endif
186
+}
187
+
188
+void YoutubeAuth::ResetChat()
189
+{
190
+#ifdef BROWSER_AVAILABLE
191
+   if (chat && chat->cefWidget) {
192
+       chat->cefWidget->setURL(YOUTUBE_CHAT_PLACEHOLDER_URL);
193
+   }
194
+#endif
195
+}
196
+
197
+QString YoutubeAuth::GenerateState()
198
+{
199
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 10, 0))
200
+   char state[YOUTUBE_API_STATE_LENGTH + 1];
201
+   QRandomGenerator *rng = QRandomGenerator::system();
202
+   int i;
203
+
204
+   for (i = 0; i < YOUTUBE_API_STATE_LENGTH; i++)
205
+       state[i] = allowedChars[rng->bounded(0, allowedCount)];
206
+   state[i] = 0;
207
+
208
+   return state;
209
+#else
210
+   std::uniform_int_distribution<> distr(0, allowedCount);
211
+   std::string result;
212
+   result.reserve(YOUTUBE_API_STATE_LENGTH);
213
+   std::generate_n(std::back_inserter(result), YOUTUBE_API_STATE_LENGTH,
214
+           [&] {
215
+               return static_cast<char>(
216
+                   allowedChars[distr(randomSeed)]);
217
+           });
218
+   return result.c_str();
219
+#endif
220
+}
221
+
222
+// Static.
223
+std::shared_ptr<Auth> YoutubeAuth::Login(QWidget *owner,
224
+                    const std::string &service)
225
+{
226
+   QString auth_code;
227
+   AuthListener server;
228
+
229
+   auto it = std::find_if(youtubeServices.begin(), youtubeServices.end(),
230
+                  [service](auto &item) {
231
+                      return service == item.service;
232
+                  });
233
+   if (it == youtubeServices.end()) {
234
+       return nullptr;
235
+   }
236
+   const auto auth = std::make_shared<YoutubeApiWrappers>(*it);
237
+
238
+   QString redirect_uri =
239
+       QString("http://127.0.0.1:%1").arg(server.GetPort());
240
+
241
+   QMessageBox dlg(owner);
242
+   dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowCloseButtonHint);
243
+   dlg.setWindowTitle(QTStr("YouTube.Auth.WaitingAuth.Title"));
244
+
245
+   std::string clientid = YOUTUBE_CLIENTID;
246
+   std::string secret = YOUTUBE_SECRET;
247
+   deobfuscate_str(&clientid[0], YOUTUBE_CLIENTID_HASH);
248
+   deobfuscate_str(&secret[0], YOUTUBE_SECRET_HASH);
249
+
250
+   QString state;
251
+   state = auth->GenerateState();
252
+   server.SetState(state);
253
+
254
+   QString url_template;
255
+   url_template += "%1";
256
+   url_template += "?response_type=code";
257
+   url_template += "&client_id=%2";
258
+   url_template += "&redirect_uri=%3";
259
+   url_template += "&state=%4";
260
+   url_template += "&scope=https://www.googleapis.com/auth/youtube";
261
+   QString url = url_template.arg(YOUTUBE_AUTH_URL, clientid.c_str(),
262
+                      redirect_uri, state);
263
+
264
+   QString text = QTStr("YouTube.Auth.WaitingAuth.Text");
265
+   text = text.arg(
266
+       QString("<a href='%1'>Google OAuth Service</a>").arg(url));
267
+
268
+   dlg.setText(text);
269
+   dlg.setTextFormat(Qt::RichText);
270
+   dlg.setStandardButtons(QMessageBox::StandardButton::Cancel);
271
+
272
+   connect(&dlg, &QMessageBox::buttonClicked, &dlg,
273
+       [&](QAbstractButton *) {
274
+#ifdef _DEBUG
275
+           blog(LOG_DEBUG, "Action Cancelled.");
276
+#endif
277
+           // TODO: Stop server.
278
+           dlg.reject();
279
+       });
280
+
281
+   // Async Login.
282
+   connect(&server, &AuthListener::ok, &dlg,
283
+       [&dlg, &auth_code](QString code) {
284
+#ifdef _DEBUG
285
+           blog(LOG_DEBUG, "Got youtube redirected answer: %s",
286
+                QT_TO_UTF8(code));
287
+#endif
288
+           auth_code = code;
289
+           dlg.accept();
290
+       });
291
+   connect(&server, &AuthListener::fail, &dlg, [&dlg]() {
292
+#ifdef _DEBUG
293
+       blog(LOG_DEBUG, "No access granted");
294
+#endif
295
+       dlg.reject();
296
+   });
297
+
298
+   auto open_external_browser = [url]() { OpenBrowser(url); };
299
+   QScopedPointer<QThread> thread(CreateQThread(open_external_browser));
300
+   thread->start();
301
+
302
+   dlg.exec();
303
+   if (dlg.result() == QMessageBox::Cancel ||
304
+       dlg.result() == QDialog::Rejected)
305
+       return nullptr;
306
+
307
+   if (!auth->GetToken(YOUTUBE_TOKEN_URL, clientid, secret,
308
+               QT_TO_UTF8(redirect_uri), YOUTUBE_SCOPE_VERSION,
309
+               QT_TO_UTF8(auth_code), true)) {
310
+       return nullptr;
311
+   }
312
+
313
+   config_t *config = OBSBasic::Get()->Config();
314
+   config_remove_value(config, "YouTube", "ChannelName");
315
+
316
+   ChannelDescription cd;
317
+   if (auth->GetChannelDescription(cd))
318
+       config_set_string(config, "YouTube", "ChannelName",
319
+                 QT_TO_UTF8(cd.title));
320
+
321
+   config_save_safe(config, "tmp", nullptr);
322
+   return auth;
323
+}
324
obs-studio-27.1.3.tar.xz/UI/auth-youtube.hpp Added
48
 
1
@@ -0,0 +1,46 @@
2
+#pragma once
3
+
4
+#include <QObject>
5
+#include <QString>
6
+#include <random>
7
+#include <string>
8
+
9
+#include "auth-oauth.hpp"
10
+
11
+#ifdef BROWSER_AVAILABLE
12
+class BrowserDock;
13
+#endif
14
+
15
+inline const std::vector<Auth::Def> youtubeServices = {
16
+   {"YouTube - RTMP", Auth::Type::OAuth_LinkedAccount, true, true},
17
+   {"YouTube - RTMPS", Auth::Type::OAuth_LinkedAccount, true, true},
18
+   {"YouTube - HLS", Auth::Type::OAuth_LinkedAccount, true, true}};
19
+
20
+class YoutubeAuth : public OAuthStreamKey {
21
+   Q_OBJECT
22
+
23
+   bool uiLoaded = false;
24
+   std::mt19937 randomSeed;
25
+   std::string section;
26
+
27
+#ifdef BROWSER_AVAILABLE
28
+   QSharedPointer<BrowserDock> chat;
29
+   QSharedPointer<QAction> chatMenu;
30
+#endif
31
+
32
+   virtual bool RetryLogin() override;
33
+   virtual void SaveInternal() override;
34
+   virtual bool LoadInternal() override;
35
+   virtual void LoadUI() override;
36
+
37
+   QString GenerateState();
38
+
39
+public:
40
+   YoutubeAuth(const Def &d);
41
+
42
+   void SetChatId(QString &chat_id);
43
+   void ResetChat();
44
+
45
+   static std::shared_ptr<Auth> Login(QWidget *parent,
46
+                      const std::string &service);
47
+};
48
obs-studio-27.0.1.tar.xz/UI/context-bar-controls.cpp -> obs-studio-27.1.3.tar.xz/UI/context-bar-controls.cpp Changed
9
 
1
@@ -421,7 +421,6 @@
2
    bool is_window = (mode == "window");
3
    ui->windowLabel->setVisible(is_window);
4
    ui->window->setVisible(is_window);
5
-   ui->empty->setVisible(!is_window);
6
 }
7
 
8
 void GameCaptureToolbar::on_mode_currentIndexChanged(int idx)
9
obs-studio-27.0.1.tar.xz/UI/data/locale.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale.ini Changed
296
 
1
@@ -1,23 +1,17 @@
2
-[en-US]
3
-Name=English
4
-
5
-[ru-RU]
6
-Name=Русский
7
-
8
-[fi-FI]
9
-Name=Suomi
10
+[an-ES]
11
+Name=Aragonés
12
 
13
-[it-IT]
14
-Name=Italiano
15
+[ar-SA]
16
+Name=العربية
17
 
18
-[ja-JP]
19
-Name=日本語
20
+[bg-BG]
21
+Name=български
22
 
23
-[de-DE]
24
-Name=Deutsch
25
+[bn-BD]
26
+Name=বাংলা
27
 
28
-[ar-SA]
29
-Name=العربية
30
+[ca-ES]
31
+Name=Català
32
 
33
 [cs-CZ]
34
 Name=Čeština
35
@@ -25,176 +19,134 @@
36
 [da-DK]
37
 Name=Dansk
38
 
39
-[es-ES]
40
-Name=Español
41
-
42
-[fr-FR]
43
-Name=Français
44
-
45
-[hu-HU]
46
-Name=Magyar
47
-
48
-[ko-KR]
49
-Name=한국어
50
-
51
-[nb-NO]
52
-Name=Norsk bokmål
53
-
54
-[nl-NL]
55
-Name=Nederlands
56
-
57
-[pl-PL]
58
-Name=Polski
59
+[de-DE]
60
+Name=Deutsch
61
 
62
-[pt-BR]
63
-Name=Português do Brasil
64
+[el-GR]
65
+Name=Ελληνικά
66
 
67
-[pt-PT]
68
-Name=Português
69
+[en-GB]
70
+Name=English (UK)
71
 
72
-[ro-RO]
73
-Name=Română
74
+[en-US]
75
+Name=English
76
 
77
-[sl-SI]
78
-Name=Slovenščina
79
+[es-ES]
80
+Name=Español
81
 
82
-[sv-SE]
83
-Name=Svenska
84
+[et-EE]
85
+Name=Eesti
86
 
87
-[tr-TR]
88
-Name=Türkçe
89
+[eu-ES]
90
+Name=Euskara
91
 
92
-[zh-CN]
93
-Name=简体中文
94
+[fa-IR]
95
+Name=فارسی
96
 
97
-[zh-TW]
98
-Name=繁體中文
99
+[fi-FI]
100
+Name=suomi
101
 
102
-[bg-BG]
103
-Name=Български
104
+[fil-PH]
105
+Name=Filipino
106
 
107
-[ca-ES]
108
-Name=Català
109
+[fr-FR]
110
+Name=Français
111
 
112
-[eu-ES]
113
-Name=Euskara
114
+[gd-GB]
115
+Name=Gàidhlig
116
 
117
 [gl-ES]
118
 Name=Galego
119
 
120
-[hr-HR]
121
-Name=Hrvatski
122
-
123
 [he-IL]
124
 Name=עברית
125
 
126
-[sr-CS]
127
-Name=Srpski
128
-
129
-[sr-SP]
130
-Name=српски
131
-
132
-[th-TH]
133
-Name=ไทย
134
-
135
-[uk-UA]
136
-Name=Українська
137
-
138
-[el-GR]
139
-Name=ελληνικά
140
-
141
-[sk-SK]
142
-Name=slovenčina
143
-
144
-[ms-MY]
145
-Name=Bahasa Melayu
146
-
147
-[vi-VN]
148
-Name=Tiếng Việt
149
-
150
-[ta-IN]
151
-Name=தமிழ்
152
-
153
-[lt-LT]
154
-Name=Lietuvių kalba
155
+[hi-IN]
156
+Name=हिन्दी
157
 
158
-[et-EE]
159
-Name=eesti keel
160
+[hr-HR]
161
+Name=hrvatski
162
 
163
-[bn-BD]
164
-Name=বাংলা ভাষা
165
+[hu-HU]
166
+Name=Magyar
167
 
168
-[hi-IN]
169
-Name=हिन्दी
170
+[id-ID]
171
+Name=Bahasa Indonesia
172
 
173
-[ur-PK]
174
-Name=اردو
175
+[it-IT]
176
+Name=Italiano
177
 
178
-[af-ZA]
179
-Name=Afrikaanse
180
+[ja-JP]
181
+Name=日本語
182
 
183
 [ka-GE]
184
 Name=ქართული
185
 
186
-[nn-NO]
187
-Name=Norsk Nynorsk
188
+[kab-KAB]
189
+Name=Taqbaylit
190
 
191
-[fil-PH]
192
-Name=Wikang Filipino
193
+[kmr-TR]
194
+Name=Kurmancî
195
 
196
-[sq-AL]
197
-Name=gjuha shqipe
198
+[ko-KR]
199
+Name=한국어
200
 
201
-[tl-PH]
202
-Name=Wikang Tagalog
203
+[ms-MY]
204
+Name=Bahasa Melayu
205
 
206
-[fa-IR]
207
-Name=فارسی
208
+[nb-NO]
209
+Name=Norsk bokmål
210
 
211
-[gd-GB]
212
-Name=Gàidhlig
213
+[nl-NL]
214
+Name=Nederlands
215
 
216
-[mn-MN]
217
-Name=монгол хэл
218
+[pl-PL]
219
+Name=polski
220
 
221
-[ku-TR]
222
-Name=کوردی
223
+[pt-BR]
224
+Name=Português brasileiro
225
 
226
-[pa-IN]
227
-Name=ਪੰਜਾਬੀ
228
+[pt-PT]
229
+Name=Português
230
 
231
-[az-Az]
232
-Name=Azərbaycanca
233
+[ro-RO]
234
+Name=Română
235
 
236
-[ba-RU]
237
-Name=башҡорт теле
238
+[ru-RU]
239
+Name=Русский
240
 
241
-[en-GB]
242
-Name=English (GB)
243
+[sk-SK]
244
+Name=Slovenčina
245
 
246
-[id-ID]
247
-Name=Bahasa Indonesia
248
+[sl-SI]
249
+Name=Slovenščina
250
 
251
-[eo-UY]
252
-Name=Esperanto
253
+[sr-CS]
254
+Name=srpski
255
 
256
-[kab-KAB]
257
-Name=Taqbaylit
258
+[sr-SP]
259
+Name=српски
260
 
261
-[an-ES]
262
-Name=Aragonés
263
+[sv-SE]
264
+Name=Svenska
265
 
266
-[bem-ZM]
267
-Name=Bemba
268
+[ta-IN]
269
+Name=தமிழ்
270
 
271
-[km-KH]
272
-Name=ភាសាខ្មែរ
273
+[tl-PH]
274
+Name=Tagalog
275
 
276
-[lo-LA]
277
-Name=ພາສາລາວ
278
+[tr-TR]
279
+Name=Türkçe
280
 
281
-[my-MM]
282
-Name=မြန်မာဘာသာ
283
+[uk-UA]
284
+Name=Українська
285
+
286
+[vi-VN]
287
+Name=Tiếng Việt
288
 
289
-[oc-FR]
290
-Name=Occitan
291
+[zh-CN]
292
+Name=简体中文
293
+
294
+[zh-TW]
295
+Name=繁體中文
296
obs-studio-27.0.1.tar.xz/UI/data/locale/af-ZA.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/af-ZA.ini Changed
21
 
1
@@ -1,4 +1,4 @@
2
-Language="Engels"
3
+Language="Afrikaans"
4
 OK="Ok"
5
 Cancel="Kanseleer"
6
 Close="Maak toe"
7
@@ -20,10 +20,10 @@
8
 Exit="Verlaat"
9
 Mixer="OudioMenger"
10
 Browse="Blaai"
11
-StudioProgramProjector="Volskerem Projektor ( Program)"
12
-PreviewProjector="Volskerem Projektor ( Voorshou)"
13
+StudioProgramProjector="Volskerem Projektor (Program)"
14
+PreviewProjector="Volskerem Projektor (Voorshou)"
15
 SceneProjector="Volskerem Projektor (Toneel)"
16
-SourceProjector="Volskerem Projektor ( Bron)"
17
+SourceProjector="Volskerem Projektor (Bron)"
18
 StudioProgramWindow="Gevensterde Projektor (Program)"
19
 PreviewWindow="Gevensterde Projektor (Voorshou)"
20
 SceneWindow="Gevensterde Projektor (Toneel)"
21
obs-studio-27.0.1.tar.xz/UI/data/locale/an-ES.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/an-ES.ini Changed
366
 
1
@@ -71,6 +71,8 @@
2
 Defaults="Per defecto"
3
 HideMixer="Amagar en o mesclador"
4
 TransitionOverride="Anulación d'a transición"
5
+ShowTransition="Transición Amostrar"
6
+HideTransition="Transición Amagar"
7
 None="Garra"
8
 StudioMode.Preview="Vista Previa"
9
 StudioMode.Program="Programa"
10
@@ -108,6 +110,7 @@
11
 Auth.InvalidScope.Text="Los requisitos d'autenticación pa %1 han cambiau. Qualques caracteristicas pueden no estar disponibles."
12
 Auth.LoadingChannel.Title="Cargando información d'a canal..."
13
 Auth.LoadingChannel.Text="Cargando información d'a canal pa %1, per favor aspere..."
14
+Auth.LoadingChannel.Error="No s'ha puesto obtener la información d'a canal"
15
 Auth.ChannelFailure.Title="Error en cargar canal"
16
 Auth.ChannelFailure.Text="Error en cargar la información d'a canal pa %1\n\n%2: %3"
17
 Auth.StreamInfo="Información de Stream"
18
@@ -130,7 +133,7 @@
19
 Basic.AutoConfig.StartPage.SubTitle="Especifique pa que quiere usar lo programa"
20
 Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimizar pa transmisions, la gravación ye secundaria"
21
 Basic.AutoConfig.StartPage.PrioritizeRecording="Optimizar nomás pa gravación, no voi a fer una transmisión"
22
-Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Nomás faré servir la camera virtual"
23
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Nomás faré servir la camara virtual"
24
 Basic.AutoConfig.VideoPage="Achustes de video"
25
 Basic.AutoConfig.VideoPage.SubTitle="Especifique la configuración de video que le fería goyo usar"
26
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Usar Actual (%1x%2)"
27
@@ -148,12 +151,15 @@
28
 Basic.AutoConfig.StreamPage.GetStreamKey="Obtener clau de transmisión"
29
 Basic.AutoConfig.StreamPage.MoreInfo="Mas información"
30
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar clau d'emisión"
31
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Usar una clau de retransmisión (abanzau)"
32
 Basic.AutoConfig.StreamPage.Service="Servicio"
33
 Basic.AutoConfig.StreamPage.Service.ShowAll="Amostrar-lo tot..."
34
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizau..."
35
 Basic.AutoConfig.StreamPage.Server="Servidor"
36
 Basic.AutoConfig.StreamPage.StreamKey="Clau de retransmisión"
37
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Vinclo)"
38
+Basic.AutoConfig.StreamPage.EncoderKey="Clau d'o codificador"
39
+Basic.AutoConfig.StreamPage.ConnectedAccount="Cuenta connectada"
40
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimar taxa de bits con una preba d'amplura de banda (puede tardar bell minuto)"
41
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificación per hardware"
42
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="La codificación per hardware elimina la mayoría de l'uso d'a CPU, pero puede requerir mas taxa de bits pa obtener lo mesmo nivel de calidat."
43
@@ -224,6 +230,52 @@
44
 Basic.SceneTransitions="Transicions de scena"
45
 Basic.TransitionDuration="Duración"
46
 Basic.TogglePreviewProgramMode="Modo Estudeyo"
47
+Undo.Undo="Desfer"
48
+Undo.Redo="Refer"
49
+Undo.Add="Anyadir '%1'"
50
+Undo.Delete="Borrar '%1'"
51
+Undo.Rename="Renombrar '%1'"
52
+Undo.SceneCollection.Switch="Pasara a '%1'"
53
+Undo.Item.Undo="Desfer '%1'"
54
+Undo.Item.Redo="Refer '%1'"
55
+Undo.Sources.Multi="Borrar %1 fuents"
56
+Undo.Filters="Filtrar los cambios en '%1'"
57
+Undo.Filters.Paste.Single="Apegar lo filtro '%1' a '%2'"
58
+Undo.Filters.Paste.Multiple="Copiar filtros de '%1' a '%2'"
59
+Undo.Transform="Transformar las fuents a '%1'"
60
+Undo.Transform.Paste="Apegar transformación en '%1'"
61
+Undo.Transform.Rotate="Rotación en '%1'"
62
+Undo.Transform.Reset="Reinicio d'a transformación en '%1'"
63
+Undo.Transform.HFlip="Chira horizontalment en '%1'"
64
+Undo.Transform.VFlip="Chira verticalment en '%1'"
65
+Undo.Transform.FitToScreen="Achustar a la pantalla en '%1'"
66
+Undo.Transform.StretchToScreen="Estirar a la pantalla en '%1'"
67
+Undo.Transform.Center="Centrar en a pantalla en '%1'"
68
+Undo.Transform.VCenter="Centrar verticalment en a pantalla en '%1'"
69
+Undo.Transform.HCenter="Centrar horizontalment en a pantalla en '%1'"
70
+Undo.Volume.Change="Cambio de volumen en '%1'"
71
+Undo.Volume.Mute="Silenciar '%1'"
72
+Undo.Volume.Unmute="No silenciar '%1'"
73
+Undo.Balance.Change="Cambio de balanz d'audio en '%1'"
74
+Undo.SyncOffset.Change="Cambio de compensación de sincronización d'audio en '%1'"
75
+Undo.MonitoringType.Change="Cambiar monitorización d'audio en '%1'"
76
+Undo.Mixers.Change="Cambiar los mescladors d'audio en '%1'"
77
+Undo.ForceMono.On="Habilitar forzar mono en '%1'"
78
+Undo.ForceMono.Off="Deshabilitar forzar mono en '%1'"
79
+Undo.Properties="Cambio de propiedat en '%1'"
80
+Undo.Scene.Duplicate="Duplicar scena '%1'"
81
+Undo.ShowTransition="Transición Amostrar en '%1'"
82
+Undo.HideTransition="Transición Amagar en '%1'"
83
+Undo.ShowSceneItem="Amostrar '%1' en '%2'"
84
+Undo.HideSceneItem="Amagar '%1' en '%2"
85
+Undo.ReorderSources="Reubrir fuents en '%1'"
86
+Undo.MoveUp="Mover «%1» entalto en «%2»"
87
+Undo.MoveDown="Mover «%1» enta baixo en «%2»"
88
+Undo.MoveToTop="Mover «%1» ta l'inicio en «%2»"
89
+Undo.MoveToBottom="Mover «%1» ta la fin en «%2»"
90
+Undo.PasteSource="Apegar fuent(s) en '%1'"
91
+Undo.PasteSourceRef="Apegar referencia(s) de fuent(s) en '%1'"
92
+Undo.GroupItems="Agrupar elementos en '%1'"
93
 TransitionNameDlg.Text="Per favor, introduzca lo nombre d'a transición"
94
 TransitionNameDlg.Title="Nombre d'a transición"
95
 TitleBar.Profile="Perfil"
96
@@ -307,6 +359,8 @@
97
 MissingFiles.Found="Trobau"
98
 MissingFiles.AutoSearch="Trobadas coincidencias de fichers adicionals"
99
 MissingFiles.AutoSearchText="OBS ha trobau coincidencias adicionals pa fichers perdius en ixe directorio. Quiers anyadir-los?"
100
+MissingFiles.NoMissing.Title="Comprebación d'os fichers que faltan"
101
+MissingFiles.NoMissing.Text="No pareix que falte garra fichero"
102
 UpdateAvailable="Nueva actualización disponible"
103
 UpdateAvailable.Text="Versión %1.%2.%3 disponible. <a href='%4'> Faiga clic aquí pa descargar-la</a>"
104
 Basic.DesktopDevice1="Audio d'o escritorio"
105
@@ -335,7 +389,7 @@
106
 Basic.Main.AddSceneDlg.Title="Anyadir scena"
107
 Basic.Main.AddSceneDlg.Text="Per favor, introduzca lo nombre d'a scena"
108
 Basic.Main.DefaultSceneName.Text="Scena %1"
109
-Basic.Main.AddSceneCollection.Title="Adhibir colección de scenas"
110
+Basic.Main.AddSceneCollection.Title="Colección de &scenas"
111
 Basic.Main.AddSceneCollection.Text="Per favor escriba lo nombre d'a colección de scenas"
112
 Basic.Main.RenameSceneCollection.Title="Cambiar lo nombre de colección de scenas"
113
 AddProfile.Title="Anyadir perfil"
114
@@ -370,6 +424,8 @@
115
 Basic.PropertiesView.FPS.Simple="Valors FPS simples"
116
 Basic.PropertiesView.FPS.Rational="Valors raciones de FPS"
117
 Basic.PropertiesView.FPS.ValidFPSRanges="Rangos valius de FPS:"
118
+Basic.PropertiesView.UrlButton.Text="Quiers ubrir este vinclo en o tuyo navegador per defecto?"
119
+Basic.PropertiesView.UrlButton.OpenUrl="Ubrir URL"
120
 Basic.InteractionWindow="Interactuando con '%1'"
121
 Basic.StatusBar.Reconnecting="Desconnectau, reconexión en %2 segundo(s) (tentativa%1)"
122
 Basic.StatusBar.AttemptingReconnect="Intentando tornar a connectar... (intento %1)"
123
@@ -378,6 +434,10 @@
124
 Basic.StatusBar.DelayStartingIn="Retardo (encomenzando en %1 s)"
125
 Basic.StatusBar.DelayStoppingIn="Retardo (aturando en %1 sec)"
126
 Basic.StatusBar.DelayStartingStoppingIn="Retardo (aturando en %1 s, encomentando en %2 s)"
127
+Basic.StatusBar.RecordingSavedTo="S'ha alzau la gravación en '%1'"
128
+Basic.StatusBar.ReplayBufferSavedTo="S'ha alzau la memoria intermedia de reproducción en '%1'"
129
+Basic.StatusBar.ScreenshotSavedTo="S'ha alzau lo pantallazo en '%1'"
130
+Basic.StatusBar.AutoRemuxedTo="S'ha convertiu automaticament la gravación en '%1'"
131
 Basic.Filters="Filtros"
132
 Basic.Filters.AsyncFilters="Filtros d'audio/video"
133
 Basic.Filters.AudioFilters="Filtros d'audio"
134
@@ -387,20 +447,30 @@
135
 Basic.Filters.AddFilter.Text="Per favor especifique lo nombre d'o filtro"
136
 Basic.TransformWindow="Achustes de scena"
137
 Basic.TransformWindow.Position="Posición"
138
+Basic.TransformWindow.PositionX="Posición X"
139
+Basic.TransformWindow.PositionY="Posición Y"
140
 Basic.TransformWindow.Rotation="Rotación"
141
 Basic.TransformWindow.Size="Grandaria"
142
+Basic.TransformWindow.Width="Amplaria"
143
+Basic.TransformWindow.Height="Altaria"
144
 Basic.TransformWindow.Alignment="Aliniamiento posicional"
145
 Basic.TransformWindow.BoundsType="Tipo de quadro delimitador"
146
 Basic.TransformWindow.BoundsAlignment="Aliniamiento en o quadro delimitador"
147
 Basic.TransformWindow.Bounds="Grandaria de quadro delimitador"
148
+Basic.TransformWindow.BoundsWidth="Amplaria d'o quadro delimitador"
149
+Basic.TransformWindow.BoundsHeight="Altaria d'o quadro delimitador"
150
 Basic.TransformWindow.Crop="Retalle"
151
-Basic.TransformWindow.Alignment.TopLeft="Parte superior cucha"
152
+Basic.TransformWindow.CropLeft="Retallar per la zurda"
153
+Basic.TransformWindow.CropRight="Retallar per la dreita"
154
+Basic.TransformWindow.CropTop="Retallar per alto"
155
+Basic.TransformWindow.CropBottom="Retallar per abaixo"
156
+Basic.TransformWindow.Alignment.TopLeft="Parte superior zurda"
157
 Basic.TransformWindow.Alignment.TopCenter="Parte superior central"
158
 Basic.TransformWindow.Alignment.TopRight="Parte superior dreita"
159
-Basic.TransformWindow.Alignment.CenterLeft="Parte central cucha"
160
+Basic.TransformWindow.Alignment.CenterLeft="Parte central zurda"
161
 Basic.TransformWindow.Alignment.Center="Centrau"
162
 Basic.TransformWindow.Alignment.CenterRight="Parte central dreita"
163
-Basic.TransformWindow.Alignment.BottomLeft="Parte inferior cucha"
164
+Basic.TransformWindow.Alignment.BottomLeft="Parte inferior zurda"
165
 Basic.TransformWindow.Alignment.BottomCenter="Parte central inferior"
166
 Basic.TransformWindow.Alignment.BottomRight="Parte inferior dreita"
167
 Basic.TransformWindow.BoundsType.None="Sin limites"
168
@@ -410,6 +480,8 @@
169
 Basic.TransformWindow.BoundsType.ScaleToWidth="La escala a l'amplaria de limites"
170
 Basic.TransformWindow.BoundsType.ScaleToHeight="La escala a l'altura de limites"
171
 Basic.TransformWindow.BoundsType.Stretch="Extender dica los limites"
172
+Basic.TransformWindow.Title="Editar la transformación pa '%1'"
173
+Basic.TransformWindow.NoSelectedSource="No s'ha triau garra fuent"
174
 Basic.Main.AddSourceHelp.Title="No se puede adhibir la fuent"
175
 Basic.Main.AddSourceHelp.Text="Has de tener a lo menos 1 scena pa adhibir una fuent."
176
 Basic.Main.Scenes="Scenas"
177
@@ -420,6 +492,7 @@
178
 Basic.Main.StartReplayBuffer="Iniciar la reproducción d'a memoria intermedia"
179
 Basic.Main.SaveReplay="Alzar repetición"
180
 Basic.Main.StartStreaming="Iniciar la transmisión"
181
+Basic.Main.StartBroadcast="Emitir en directo"
182
 Basic.Main.StartVirtualCam="Iniciar la camara virtual"
183
 Basic.Main.StopRecording="Aturar gravación"
184
 Basic.Main.PauseRecording="Pausar la gravación"
185
@@ -428,6 +501,7 @@
186
 Basic.Main.StopReplayBuffer="Aturar la reproducción d'a memoria intermedia"
187
 Basic.Main.StoppingReplayBuffer="Aturando la reproducción d'a memoria intermedia..."
188
 Basic.Main.StopStreaming="Aturar Transmisión"
189
+Basic.Main.StopBroadcast="Finalizar la emisión"
190
 Basic.Main.StoppingStreaming="Aturando la transmisión..."
191
 Basic.Main.ForceStopStreaming="Aturar Transmisión (descartar retardo)"
192
 Basic.Main.ShowContextBar="Amostrar barra de ferramientas de fuent"
193
@@ -438,23 +512,24 @@
194
 Basic.Main.Ungroup="Desagrupar"
195
 Basic.Main.GridMode="Modo Quadricula"
196
 Basic.Main.ListMode="Modo Lista"
197
-Basic.MainMenu.File="Fichero (&F)"
198
+Basic.MainMenu.File="&Fichero"
199
 Basic.MainMenu.File.Export="&Exportar"
200
 Basic.MainMenu.File.Import="&Importar"
201
-Basic.MainMenu.File.ShowRecordings="Amostrar G&rabaciones"
202
-Basic.MainMenu.File.Remux="Convertir Gravacions (&M)"
203
-Basic.MainMenu.File.Settings="Configuración (&S)"
204
+Basic.MainMenu.File.ShowRecordings="Amostrar G&ravacions"
205
+Basic.MainMenu.File.Remux="Con&vertir Gravacions"
206
+Basic.MainMenu.File.Settings="&Configuración"
207
 Basic.MainMenu.File.ShowSettingsFolder="Amostrar carpeta de configuración"
208
 Basic.MainMenu.File.ShowProfileFolder="Amostrar carpeta de perfils"
209
-Basic.MainMenu.AlwaysOnTop="Siempre &a lo frent"
210
-Basic.MainMenu.File.Exit="Salir (&X)"
211
+Basic.MainMenu.File.ShowMissingFiles="Comprebar si i faltan fichers"
212
+Basic.MainMenu.AlwaysOnTop="Siempre deb&ant"
213
+Basic.MainMenu.File.Exit="&Salir"
214
 Basic.MainMenu.Edit="&Editar"
215
-Basic.MainMenu.Edit.Undo="Desfer (&U)"
216
+Basic.MainMenu.Edit.Undo="&Desfer"
217
 Basic.MainMenu.Edit.Redo="&Refer"
218
-Basic.MainMenu.Edit.UndoAction="Desfer $1 (&U)"
219
+Basic.MainMenu.Edit.UndoAction="&Desfer $1"
220
 Basic.MainMenu.Edit.RedoAction="&Refer $1"
221
-Basic.MainMenu.Edit.LockPreview="B&loquear vista previa"
222
-Basic.MainMenu.Edit.Scale="Veyié&sta previa y escala"
223
+Basic.MainMenu.Edit.LockPreview="B&locar vista previa"
224
+Basic.MainMenu.Edit.Scale="Vi&sta previa y escala"
225
 Basic.MainMenu.Edit.Scale.Window="Achustar a la finestra"
226
 Basic.MainMenu.Edit.Scale.Canvas="Lienzo (%1x%2)"
227
 Basic.MainMenu.Edit.Scale.Output="Salida (%1x%2)"
228
@@ -469,18 +544,18 @@
229
 Basic.MainMenu.Edit.Transform.FlipHorizontal="Rotar &horizontalment"
230
 Basic.MainMenu.Edit.Transform.FlipVertical="Rotar &verticalment"
231
 Basic.MainMenu.Edit.Transform.FitToScreen="Achustar a la pantalla (&F)"
232
-Basic.MainMenu.Edit.Transform.StretchToScreen="Y&stirar a la pantalla"
233
+Basic.MainMenu.Edit.Transform.StretchToScreen="E&stirar la pantalla"
234
 Basic.MainMenu.Edit.Transform.CenterToScreen="&Centrar en a pantalla"
235
 Basic.MainMenu.Edit.Transform.VerticalCenter="Centrar Verticalment"
236
 Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrar Horizontalment"
237
 Basic.MainMenu.Edit.Order="&Ordenar"
238
-Basic.MainMenu.Edit.Order.MoveUp="Mover alto (&U)"
239
-Basic.MainMenu.Edit.Order.MoveDown="Mover abaixo (&D)"
240
-Basic.MainMenu.Edit.Order.MoveToTop="Mover a la cima (&T)"
241
-Basic.MainMenu.Edit.Order.MoveToBottom="Mover a lo fondo (&B)"
242
-Basic.MainMenu.Edit.AdvAudio="Propiedatz de &Audio abanzadas"
243
+Basic.MainMenu.Edit.Order.MoveUp="Mover entalto (&U)"
244
+Basic.MainMenu.Edit.Order.MoveDown="Mover enta abaixo (&D)"
245
+Basic.MainMenu.Edit.Order.MoveToTop="Mover a l'inicio (&T)"
246
+Basic.MainMenu.Edit.Order.MoveToBottom="Mover a la fin (&B)"
247
+Basic.MainMenu.Edit.AdvAudio="Propiedatz d'&audio abanzadas"
248
 Basic.MainMenu.View="&Vista"
249
-Basic.MainMenu.View.Toolbars="Barra de Herramien&tas"
250
+Basic.MainMenu.View.Toolbars="Barra de Ferramien&tas"
251
 Basic.MainMenu.View.Docks="Panels"
252
 Basic.MainMenu.View.Docks.ResetUI="Restablir Interficie d'Usuario"
253
 Basic.MainMenu.View.Docks.LockUI="Blocar Interficie d'Usuario"
254
@@ -489,9 +564,9 @@
255
 Basic.MainMenu.View.ContextBar="Barra de ferramientas de fuent"
256
 Basic.MainMenu.View.SceneTransitions="Transi&ción de Scenas"
257
 Basic.MainMenu.View.SourceIcons="&Iconos de fuents"
258
-Basic.MainMenu.View.StatusBar="Barra de Y&stado"
259
+Basic.MainMenu.View.StatusBar="Barra d'E&stau"
260
 Basic.MainMenu.View.Fullscreen.Interface="Pantalla completa"
261
-Basic.MainMenu.SceneCollection="Colección de Y&scenas"
262
+Basic.MainMenu.SceneCollection="Colección de &scenas"
263
 Basic.MainMenu.Profile="&Perfil"
264
 Basic.MainMenu.Profile.Import="Importar perfil"
265
 Basic.MainMenu.Profile.Export="Exportar perfil"
266
@@ -499,21 +574,21 @@
267
 Basic.MainMenu.SceneCollection.Export="Exportar colección de scenas"
268
 Basic.MainMenu.Profile.Exists="Lo perfil ya existe"
269
 Basic.MainMenu.SceneCollection.Exists="La colección de scenas ya existe"
270
-Basic.MainMenu.Tools="Herramien&tas"
271
-Basic.MainMenu.Help="Aduya (&H)"
272
-Basic.MainMenu.Help.HelpPortal="Aduya (&P)"
273
+Basic.MainMenu.Tools="Ferramien&tas"
274
+Basic.MainMenu.Help="&Aduya"
275
+Basic.MainMenu.Help.HelpPortal="&Portal d'aduya"
276
 Basic.MainMenu.Help.Website="Visitar Puesto &Web"
277
 Basic.MainMenu.Help.Discord="Unir-se a lo servidor de &Discord"
278
 Basic.MainMenu.Help.Logs="Fichers de rechistro (&L)"
279
-Basic.MainMenu.Help.Logs.ShowLogs="Amostrar fichero&s de rechistro"
280
-Basic.MainMenu.Help.Logs.UploadCurrentLog="&Carga de fichero de rechistro actual"
281
-Basic.MainMenu.Help.Logs.UploadLastLog="Carga de&l zaguer fichero de rechistro"
282
+Basic.MainMenu.Help.Logs.ShowLogs="Amostrar ficher&s de rechistro"
283
+Basic.MainMenu.Help.Logs.UploadCurrentLog="&Carga d'o fichero de rechistro actual"
284
+Basic.MainMenu.Help.Logs.UploadLastLog="Carga d'o &zaguer fichero de rechistro"
285
 Basic.MainMenu.Help.Logs.ViewCurrentLog="&Veyer rechistro actual"
286
 Basic.MainMenu.Help.CheckForUpdates="Comprebar Actualizacions"
287
-Basic.MainMenu.Help.CrashLogs="Informes de y&rror"
288
-Basic.MainMenu.Help.CrashLogs.ShowLogs="Mo&strar informes d'error"
289
-Basic.MainMenu.Help.CrashLogs.UploadLastLog="Puyar y&l zaguer informe d'error"
290
-Basic.MainMenu.Help.About="&Sobre"
291
+Basic.MainMenu.Help.CrashLogs="Informes d'e&rror"
292
+Basic.MainMenu.Help.CrashLogs.ShowLogs="Amo&strar informes d'error"
293
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Cargar &lo zaguer informe d'error"
294
+Basic.MainMenu.Help.About="&Alredor de"
295
 Basic.Settings.ProgramRestart="Lo programa ha de reiniciar-se pa que esta configuración surta efecto."
296
 Basic.Settings.ConfirmTitle="Confirmar cambios"
297
 Basic.Settings.Confirm="I hai cambios sin alzar. Alzar los cambios?"
298
@@ -559,6 +634,7 @@
299
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, Abaixo (8 Scenas)"
300
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, Zurda (8 Scenas)"
301
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertial, Dreita (8 Scenas)"
302
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, Alto (18 Scenas)"
303
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, Alto (24 Scenas)"
304
 Basic.Settings.Stream="Emisión"
305
 Basic.Settings.Stream.StreamType="Tipo d'Emisión"
306
@@ -816,7 +892,7 @@
307
 OutputWarnings.MP4Recording="Alvertencia: Las gravacions alzadas en MP4/MOV serán irrecuperables si lo fichero no puede finalizar-se (y.g. como resultau de BSODs, cortes electricos, etc.). Si quiers gravar multiples pistas d'audio considera usar MKV y convierte la gravación a MP4/MOV dimpués de finalizar (Fichero → Convertir Gravacions)"
308
 OutputWarnings.CannotPause="Alvertencia: Las gravacions no se pueden pausar si lo codificador de gravación s'estableix en \"(Usar codificador de transmisión)\""
309
 FinalScene.Title="Eliminar scena"
310
-FinalScene.Text="Ha d'haber a lo menos una scena."
311
+FinalScene.Text="Cal que i haiga a lo menos una scena."
312
 NoSources.Title="Sin recursos"
313
 NoSources.Text="Pareixe que no has anyadiu garra recurso de video encara, asinas que serás emitindo una pantalla en blanco. Yes seguro que quiers fer esto?"
314
 NoSources.Text.AddSource="Puetz anyadir recursos fendo clic en l'icono de \"+\" debaixo d'o menú Recursos en a finestra prencipal en qualsequier momento."
315
@@ -858,3 +934,50 @@
316
 ContextBar.MediaControls.PlaylistPrevious="Anterior en a lista de reproducción"
317
 ContextBar.MediaControls.MediaProperties="Propiedatz d'o conteniu"
318
 ContextBar.MediaControls.BlindSeek="Widget Barra de reproducción"
319
+YouTube.Auth.Ok="S'ha autorizau correctament.\nYa puetz zarrar esta pachina."
320
+YouTube.Auth.NoCode="Lo proceso d'autorización no s'ha rematau."
321
+YouTube.Auth.NoChannels="No i hai garra canal disponible en a cuenta triada"
322
+YouTube.Auth.WaitingAuth.Title="Autorización d'usuario de Youtube"
323
+YouTube.Auth.WaitingAuth.Text="Remata lo proceso d'autorización en o tuyo navegador externo.<br>Si lo navegador no s'ubre, sigue este vinclo y finaliza l'autorización:<br>%1"
324
+YouTube.AuthError.Text="Error en obtener la información d'a canal: %1."
325
+YouTube.Actions.Title="Titol*"
326
+YouTube.Actions.MyBroadcast="La mía emisión"
327
+YouTube.Actions.Description="Descripción"
328
+YouTube.Actions.Privacy="Privacidat*"
329
+YouTube.Actions.Privacy.Private="Privau"
330
+YouTube.Actions.Privacy.Public="Publico"
331
+YouTube.Actions.Privacy.Unlisted="Amagau"
332
+YouTube.Actions.Category="Categoría"
333
+YouTube.Actions.MadeForKids="Este video ye feito pa zagals?*"
334
+YouTube.Actions.MadeForKids.Yes="Sí, ye feito pa zagals"
335
+YouTube.Actions.MadeForKids.No="No, no ye feito pa zagals"
336
+YouTube.Actions.AdditionalSettings="Achustes adicionals:"
337
+YouTube.Actions.Latency="Latencia"
338
+YouTube.Actions.Latency.Low="Baixa"
339
+YouTube.Actions.Latency.UltraLow="Ultra baixa"
340
+YouTube.Actions.EnableAutoStart="Activar l'inicio automatico"
341
+YouTube.Actions.EnableAutoStop="Activar l'aturada automatica"
342
+YouTube.Actions.AutoStartStop.TT="Indica si este emisión programada s'ha d'iniciar automaticament"
343
+YouTube.Actions.EnableDVR="Activar DVR"
344
+YouTube.Actions.360Video="Video 360"
345
+YouTube.Actions.ScheduleForLater="Programar pa dimpuesas"
346
+YouTube.Actions.Error.Title="Error en crear la transmisión"
347
+YouTube.Actions.Error.Text="Error d'acceso a YouTube '%1'.<br/>Se puet trobar una descripción mas detallada en <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
348
+YouTube.Actions.Error.General="Error d'acceso a YouTube. Verifica la connexión u lo servidor d'acceso a YouTube."
349
+YouTube.Actions.Error.NoBroadcastCreated="Error de creación de retransmisión '%1'.<br/>Se puet trobar una descripción mas detallada en <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
350
+YouTube.Actions.Error.NoStreamCreated="No s'ha creau garra emisión. Torna a vincular la cuenta."
351
+YouTube.Actions.Error.YouTubeApi="Error de l'API de YouTube. Consulta lo fichero de rechistro pa obtener-ne mas información."
352
+YouTube.Actions.Error.BroadcastNotFound="No s'ha trobau la emisión triada."
353
+YouTube.Actions.EventsLoading="Se ye cargando la lista d'eventos..."
354
+YouTube.Actions.EventCreated.Title="S'ha creau lo esdevenimiento"
355
+YouTube.Actions.EventCreated.Text="S'ha creau correctament l'esdevenimiento."
356
+YouTube.Actions.Stream="Retransmisión"
357
+YouTube.Actions.Stream.ScheduledFor="Programau pa %1"
358
+YouTube.Actions.Stream.Resume="Reanudar la transmisión interrompida"
359
+YouTube.Actions.Stream.YTStudio="Creada automaticament per YouTube Studio"
360
+YouTube.Actions.Notify.CreatingBroadcast="Se ye creando una nueva retransmisión, aguarda un momento..."
361
+YouTube.Actions.AutoStartStreamingWarning.Title="Cal iniciar manualment"
362
+YouTube.Actions.AutoStartStreamingWarning="L'inicio automatico ye desactivau pa este evento. Fe clic en \"Emitir en directo\" pa iniciar la transmisión."
363
+YouTube.Actions.AutoStopStreamingWarning="No podrás tornar a connectar.<br>La tuya emisión s'aturará y deixarás d'estar en directo."
364
+YouTube.Errors.liveStreamingNotEnabled="La transmisión en directo no ye activada en a canal de YouTube triada. <br/><br/>Consulta <a href='https://www.youtube.com/features'>youtube.com/features</a> pa tener-ne mas información."
365
+YouTube.Errors.livePermissionBlocked="La reproducción en directe no ye disponible en a canal de YouTube seleccionada.<br/>Tiene en cuenta que puede pasar dica 24 horas pa que la transmisión en directo sía disponible dimpués d'haber-la activada en a configuración d'a canal. <br/><br/>Consulta <a href='https://www.youtube.com/features'>youtube.com/features</a> pa tener-ne mas información."
366
obs-studio-27.0.1.tar.xz/UI/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ar-SA.ini Changed
116
 
1
@@ -112,6 +112,7 @@
2
 Auth.InvalidScope.Text="متطلبات المصادقة ل %1 تغيرت. قد لا تعمل بعض الميزات."
3
 Auth.LoadingChannel.Title="جارٍ تحميل معلومات القناة..."
4
 Auth.LoadingChannel.Text="جارٍ تحميل معلومات القناة من%1, الرجاء الانتظار..."
5
+Auth.LoadingChannel.Error="تعذر الحصول على معلومات القناة."
6
 Auth.ChannelFailure.Title="فشل تحميل معلومات القناة"
7
 Auth.ChannelFailure.Text="فشل في تحميل معلومات القناة %1\n\n%2: %3"
8
 Auth.Chat="الدردشة"
9
@@ -359,6 +360,8 @@
10
 MissingFiles.Found="وجدت"
11
 MissingFiles.AutoSearch="تم العثور على ملفات إضافية مطابقة"
12
 MissingFiles.AutoSearchText="وجد OBS تطابقات إضافية للملفات المفقودة في هذا المجلد. هل ترغب في إضافتهم؟"
13
+MissingFiles.NoMissing.Title="التحقق من الملفات المفقودة"
14
+MissingFiles.NoMissing.Text="لا يبدو أن أي ملفات مفقودة."
15
 UpdateAvailable="تحديث جديد متوفر"
16
 UpdateAvailable.Text="الإصدار %1.%2.%3 متوفر الآن. <a href='%4'>انقر هنا للتتحميل</a>"
17
 Basic.DesktopDevice1="صوت سطح المكتب"
18
@@ -424,6 +427,9 @@
19
 Basic.PropertiesView.FPS.Simple="صيغ مبسطة لعدد الإطارات/ث"
20
 Basic.PropertiesView.FPS.Rational="قيمة FPS كسرية"
21
 Basic.PropertiesView.FPS.ValidFPSRanges="مقاييس FPS صحيحة:"
22
+Basic.PropertiesView.UrlButton.Text="فتح هذا الرابط في متصفحك الافتراضي ؟"
23
+Basic.PropertiesView.UrlButton.Text.Url="الرابط: %1"
24
+Basic.PropertiesView.UrlButton.OpenUrl="فتح الرابط"
25
 Basic.InteractionWindow="التفاعل مع '%1'"
26
 Basic.StatusBar.Reconnecting="قطع الاتصال، إعادة الاتصال في %2 ثانية(ثوان) (محاولة %1)"
27
 Basic.StatusBar.AttemptingReconnect="محاولة إعادة الاتصال... (محاولة %1)"
28
@@ -478,6 +484,7 @@
29
 Basic.TransformWindow.BoundsType.ScaleToWidth="مقياس لعرض الحدود"
30
 Basic.TransformWindow.BoundsType.ScaleToHeight="مقياس للارتفاع الحدود"
31
 Basic.TransformWindow.BoundsType.Stretch="تمتد إلى الحدود"
32
+Basic.TransformWindow.NoSelectedSource="لم يتم تحديد مصدر"
33
 Basic.Main.AddSourceHelp.Title="لا يمكن إضافة المصدر"
34
 Basic.Main.AddSourceHelp.Text="تحتاج إلى أن يكون على الأقل مشهد واحد لإضافة مصدر."
35
 Basic.Main.Scenes="المشاهد"
36
@@ -497,6 +504,7 @@
37
 Basic.Main.StopReplayBuffer="إيقاف الخزن المؤقت لإعادة العرض"
38
 Basic.Main.StoppingReplayBuffer="يتم ايقاف الخزن المؤقت..."
39
 Basic.Main.StopStreaming="ايقاف البث"
40
+Basic.Main.StopBroadcast="إنهاء البث"
41
 Basic.Main.StoppingStreaming="إيقاف البث..."
42
 Basic.Main.ForceStopStreaming="إيقاف البث (تجاهل التأخير)"
43
 Basic.Main.ShowContextBar="إظهار شريط أدوات المصدر"
44
@@ -515,6 +523,7 @@
45
 Basic.MainMenu.File.Settings="الإعدادات (&S)"
46
 Basic.MainMenu.File.ShowSettingsFolder="إظهار مجلد الإعدادات"
47
 Basic.MainMenu.File.ShowProfileFolder="إظهار مجلد الملف الشخصي"
48
+Basic.MainMenu.File.ShowMissingFiles="التحقق من الملفات المفقودة"
49
 Basic.MainMenu.AlwaysOnTop="دائماً في القمة (&A)"
50
 Basic.MainMenu.File.Exit="خروج (&X)"
51
 Basic.MainMenu.Edit="تعديل (&E)"
52
@@ -661,6 +670,7 @@
53
 Basic.Settings.Output.Mode.Simple="بسيط"
54
 Basic.Settings.Output.Mode.Adv="متقدم"
55
 Basic.Settings.Output.Mode.FFmpeg="مخرج FFmpeg"
56
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="الحد الأقصى للذاكرة (ميغابايت)"
57
 Basic.Settings.Output.ReplayBuffer.Suffix="اللاحق"
58
 Basic.Settings.Output.Simple.SavePath="مسار التسجيل"
59
 Basic.Settings.Output.Simple.RecordingQuality="جودة التسجيل"
60
@@ -784,12 +794,15 @@
61
 Basic.Settings.Advanced.General.ProcessPriority.Normal="عادي"
62
 Basic.Settings.Advanced.General.ProcessPriority.Idle="خامل"
63
 Basic.Settings.Advanced.Video.ColorFormat="تنسيق اللون"
64
+Basic.Settings.Advanced.Video.ColorRange="نظاق اللون"
65
 Basic.Settings.Advanced.Video.ColorRange.Partial="جزئي"
66
 Basic.Settings.Advanced.Video.ColorRange.Full="كامل"
67
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="الإفتراضي"
68
 Basic.Settings.Advanced.StreamDelay.Duration="مدة الانتقال"
69
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="استخدام الذاكرة المقدر: %1 ميغابايت"
70
 Basic.Settings.Advanced.Network="الشبكة"
71
+Basic.Settings.Advanced.AutoRemux.MP4="(تسجيل كـ mkv)"
72
+Basic.AdvAudio="خصائص الصوت المتقدمة"
73
 Basic.AdvAudio.ActiveOnly="المصادر الفعّالة فقط"
74
 Basic.AdvAudio.Name="الاسم"
75
 Basic.AdvAudio.Volume="مستوى الصوت"
76
@@ -813,6 +826,7 @@
77
 Basic.SystemTray.Hide="اخفاء"
78
 Hotkeys.Insert="إدراج"
79
 Hotkeys.Delete="حذف"
80
+Hotkeys.Home="الصفحة الرئيسية"
81
 Hotkeys.End="النهاية"
82
 Hotkeys.PageUp="صفحة لأعلى"
83
 Hotkeys.PageDown="صفحة لأسفل"
84
@@ -859,6 +873,7 @@
85
 ChangeBG="تعيين لون"
86
 CustomColor="لون مخصص"
87
 About="حول البرنامج"
88
+About.Info="استوديو OBS هو برنامج مجاني ومفتوح المصدر لتسجيل الفيديو وبرنامج بث مباشر."
89
 About.Donate="المساهمة"
90
 About.Authors="المؤلفون"
91
 About.License="الترخيص"
92
@@ -884,3 +899,23 @@
93
 ContextBar.MediaControls.PlaylistPrevious="السابق في قائمة التشغيل"
94
 ContextBar.MediaControls.MediaProperties="خصائص الوسائط"
95
 ContextBar.MediaControls.BlindSeek="أداة البحث عن الوسائط"
96
+YouTube.Auth.NoChannels="لا توجد قناة (قنوات) متاحة في الحساب المحدد"
97
+YouTube.AuthError.Text="فشل في الحصول على معلومات القناة: %1."
98
+YouTube.Actions.Latency="تأخير"
99
+YouTube.Actions.Latency.Normal="عادي"
100
+YouTube.Actions.Latency.Low="منخفض"
101
+YouTube.Actions.Latency.UltraLow="منخفض جدا"
102
+YouTube.Actions.EnableAutoStart="تمكين التشغيل التلقائي"
103
+YouTube.Actions.EnableAutoStop="تمكين الإيقاف التلقائي"
104
+YouTube.Actions.360Video="فيديو 360"
105
+YouTube.Actions.Error.BroadcastNotFound="لم يتم العثور على البث المحدد."
106
+YouTube.Actions.EventsLoading="تحميل قائمة الأحداث..."
107
+YouTube.Actions.EventCreated.Text="تم إنشاء الحدث بنجاح"
108
+YouTube.Actions.Stream="بث"
109
+YouTube.Actions.Stream.ScheduledFor="مجدولة ل %1"
110
+YouTube.Actions.Stream.Resume="استئناف البث المتقطع"
111
+YouTube.Actions.Stream.YTStudio="تم إنشاؤها تلقائياً بواسطة استوديو يوتيوب"
112
+YouTube.Actions.Notify.CreatingBroadcast="جاري إنشاء بث مباشر جديد ، يرجى الانتظار ..."
113
+YouTube.Actions.AutoStartStreamingWarning.Title="البدء اليدوي مطلوب"
114
+YouTube.Errors.liveStreamingNotEnabled="لم يتم تمكين البث المباشر على قناة يوتيوب المحددة.<br/><br/>راجع <a href='https://www.youtube.com/features'>youtube.com/feat</a> لمزيد من المعلومات."
115
+YouTube.Errors.livePermissionBlocked="البث المباشر غير متوفر على قناة يوتيوب المختارة.<br/>يرجى ملاحظة أنه قد يستغرق ما يصل إلى 24 ساعة لكي يصبح البث المباشر متاحا بعد تمكينه في إعدادات القناة الخاصة بك.<br/><br/>راجع <a href='https://www.youtube.com/features'>youtube.com/features</a> للحصول على التفاصيل."
116
obs-studio-27.0.1.tar.xz/UI/data/locale/az-AZ.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/az-AZ.ini Changed
153
 
1
@@ -71,6 +71,8 @@
2
 Defaults="İlkin"
3
 HideMixer="Mikserdə gizlət"
4
 TransitionOverride="Keçidə əhəmiyyət vermə"
5
+ShowTransition="Keçidi göstər"
6
+HideTransition="Keçidi gizlət"
7
 None="Heç biri"
8
 StudioMode.Preview="Önbaxış"
9
 StudioMode.Program="Proqram"
10
@@ -98,6 +100,8 @@
11
 DockCloseWarning.Title="Qoşulan pəncərəni bağla"
12
 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."
13
 ExtraBrowsers="Özəl Səyyah Yuvaları"
14
+ExtraBrowsers.Info="Onlara ad və URL verərək dok əlavə edin,sonra dokları açmaq üçün Tətbiq et və ya Bağlaya vurun.İstədiyiniz zaman dok əlavə edə və ya silə bilərsiniz."
15
+ExtraBrowsers.DockName="Dok adı"
16
 Auth.Authing.Title="Kimlik təsdiqlənir..."
17
 Auth.Authing.Text="%1 ilə təsdiqlənir, zəhmət olmasa gözləyin..."
18
 Auth.AuthFailure.Title="Kimlik Təsdiqləməsi Uğursuz Oldu"
19
@@ -106,6 +110,7 @@
20
 Auth.InvalidScope.Text="%1 üçün kimlik təsdiqləməsi tələbləri dəyişdirildi. Bəzi özəlliklər əlçatmaz ola bilər."
21
 Auth.LoadingChannel.Title="Kanal məlumatları yüklənir..."
22
 Auth.LoadingChannel.Text="%1 üçün kanal məlumatları yüklənir, zəhmət olmasa gözləyin..."
23
+Auth.LoadingChannel.Error="Kanal məlumatları əldə edilə bilmir."
24
 Auth.ChannelFailure.Title="Kanal yüklənmədi"
25
 Auth.ChannelFailure.Text="%1 üçün kanal məlumatı yüklənmədi\n\n%2: %3"
26
 Auth.Chat="Söhbət"
27
@@ -113,6 +118,7 @@
28
 TwitchAuth.Stats="Twitch Statistikaları"
29
 TwitchAuth.Feed="Twitch Fəaliyyət Axını"
30
 TwitchAuth.TwoFactorFail.Title="Yayım açarı sorğulana bilmədi"
31
+TwitchAuth.TwoFactorFail.Text="OBS,Twitch hesabınıza qoşula bilmədi.Zəhmət olmasa,hesaba qoşulmaq üçün <a href='https://www.twitch.tv/settings/security'> Twitch təhlükəsizlik parametrlərində </a> iki faktorlu identifikasiyanın qurulduğundan əmin olun."
32
 RestreamAuth.Channels="Restream Kanalları"
33
 Copy.Filters="Filtrləri Kopyala"
34
 Paste.Filters="Filtrləri Yapışdır"
35
@@ -126,23 +132,65 @@
36
 Basic.AutoConfig="Avto Konfiqurasiya Sehrbazı"
37
 Basic.AutoConfig.ApplySettings="Tənzimləmələri Tətbiq et"
38
 Basic.AutoConfig.StartPage="İstifadə Məlumatı"
39
+Basic.AutoConfig.StartPage.SubTitle="Proqramı nə üçün istifadə edəcəyinizi seçin"
40
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Canlı yayım üçün optimallaşdır,ekran qeydi ikincidir"
41
+Basic.AutoConfig.StartPage.PrioritizeRecording="Sadəcə ekran qeydi və video üçün optimallaşdır,yayım etməyəcəyəm"
42
 Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Mən yalnız virtual kamera işlədəcəyəm"
43
 Basic.AutoConfig.VideoPage="Video Tənzimləmələri"
44
+Basic.AutoConfig.VideoPage.SubTitle="İstifadə etmək istədiyiniz video parametrlərini göstərin"
45
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="İndikini İstifadə et (%1x%2)"
46
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Göstər %1 (%2x%3)"
47
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="İndikini İşlət (%1)"
48
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 vəya 30,amma mümkün olan hallarda 60"
49
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 vəya 30,amma yüksək görüntü keyfiyyətinə üstünlük verin"
50
+Basic.AutoConfig.VideoPage.CanvasExplanation="Qeyd: Çərçivənin (əsas) görüntü ölçüsü,sizin ekran qeydinin vəya yayımın ölçüsü ilə bərabər olmaya bilər.Ekran qeydi/yayımın ölçüsü,resurs istifadəsi vəya bit istifadəsi tələblərini azaltmaq üçün,çərçivə ölçüsündən azaldıla bilər."
51
+Basic.AutoConfig.StreamPage="Yayım məlumatı"
52
+Basic.AutoConfig.StreamPage.SubTitle="Zəhmət olmasa yayım məlumatlarınızı daxil edin"
53
+Basic.AutoConfig.StreamPage.ConnectAccount="Hesaba qoşul (Tövsiyə olunan)"
54
+Basic.AutoConfig.StreamPage.DisconnectAccount="Hesabdan çıx"
55
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Hesabdan çıxılsın?"
56
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Bu dəyişiklik dərhal tətbiq olunacaq.Siz hesabdan çıxmaq istədiyinizə əminsiniz ?"
57
+Basic.AutoConfig.StreamPage.GetStreamKey="Yayım kodunu əldə et"
58
+Basic.AutoConfig.StreamPage.MoreInfo="Daha çox məlumat"
59
+Basic.AutoConfig.StreamPage.UseStreamKey="Yayım kodundan istifadə et"
60
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Yayım kodundan istifadə et (qabaqcıl)"
61
 Basic.AutoConfig.StreamPage.Service="Xidmət"
62
 Basic.AutoConfig.StreamPage.Service.ShowAll="Hamısını Göstər..."
63
 Basic.AutoConfig.StreamPage.Service.Custom="Fərdi..."
64
 Basic.AutoConfig.StreamPage.StreamKey="Yayım Açarı"
65
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Bağlantı)"
66
+Basic.AutoConfig.StreamPage.EncoderKey="Kodlayıcı açar kodu"
67
+Basic.AutoConfig.StreamPage.ConnectedAccount="Hesaba qoşuldu"
68
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bant genişliyi ilə bit sürətini təxmin et (Bir neçə dəqiqə çəkə bilər)"
69
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Donanım kodlamasına üstünlük ver"
70
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Donanım kodlaması artıq CPU istifadəsini aradan qaldırır,lakin eyni keyfiyyət səviyyəsini əldə etmək üçün daha çox bit sürəti tələb oluna bilər."
71
 Basic.AutoConfig.StreamPage.StreamWarning.Title="Yayım xəbərdarlığı"
72
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Bant genişliyi testi kanalınızda səssiz təsadüfi video məlumatlarını yayımlamaq üzrədir.Mümkünsə,yayım qeydini müvəqqəti olaraq söndürməyiniz və test bitənə qədər yayını xüsusi vəziyyətə gətirməyiniz tövsiyə olunur.Davam edilsin?"
73
 Basic.AutoConfig.TestPage="Final Nəticələri"
74
+Basic.AutoConfig.TestPage.SubTitle.Testing="Proqram ən uyğun parametrləri təxmin etmək üçün bir neçə test edir"
75
 Basic.AutoConfig.TestPage.SubTitle.Complete="Test tamamlandı"
76
+Basic.AutoConfig.TestPage.TestingBandwidth="Bant genişliyi testi aparılır,bu bir neçə dəqiqə ala bilər..."
77
 Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Bağlantı qurulur: %1..."
78
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Serverə qoşulmaq mümkün olmadı,zəhmət olmasa internet bağlantınızı yoxlayın və yenidən cəhd edin."
79
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Bant genişliyi testi aparılır: %1"
80
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Yayım kodlayıcı test edilir,bir neçə dəqiqə çəkə bilər..."
81
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Yayım kodlayıcı test edilir,bir neçə dəqiqə çəkə bilər..."
82
+Basic.AutoConfig.TestPage.TestingRes="Görüntü ölçüləri test edilir,bu bir neçə dəqiqə çəkə bilər..."
83
+Basic.AutoConfig.TestPage.TestingRes.Fail="Kodlayıcı işə salına bilmədi"
84
+Basic.AutoConfig.TestPage.TestingRes.Resolution="%1x%2%3 FPS test edilir..."
85
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Yayım Kodlayıcı"
86
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Ekran Qeydi Kodlayıcı"
87
+Basic.AutoConfig.TestPage.Result.Header="Proqram bu parametrlərin sizə uyğun olduğunu müəyyənləşdirdi:"
88
+Basic.AutoConfig.TestPage.Result.Footer="Bu parametrləri istifadə etmək üçün,Parametrləri Tətbiq et klikləyin.Sehirbazı yenidən konfiqurasiya etmək və yenidən cəhd etmək üçün Geri klikləyin."
89
+Basic.AutoConfig.Info="Avtomatik konfiqurasiya sehirbazı,kompüter xüsusiyyətlərinizə və internet sürətinizə uyğun ən yaxşı qərarı verəcək."
90
+Basic.AutoConfig.RunAnytime="Bu alətlər menyusuna gedilərək,hər zaman işə salına bilər."
91
 Basic.Stats="Statistikalar"
92
+Basic.Stats.CPUUsage="CPU istifadəsi"
93
 Basic.Stats.HDDSpaceAvailable="Mövcud disk sahəsi"
94
 Basic.Stats.MemoryUsage="Yaddaş İstifadəsi"
95
+Basic.Stats.AverageTimeToRender="Çərçivə yaratmaq üçün orta müddət"
96
+Basic.Stats.SkippedFrames="Kodlama gecikməsi səbəbilə atlanan çərçivələr"
97
+Basic.Stats.MissedFrames="Gecikmə səbəbilə buraxılmış çərçivələr"
98
 Basic.Stats.Output.Stream="Yayım"
99
 Basic.Stats.Output.Recording="Səsyazma"
100
 Basic.Stats.Status="Vəziyyət"
101
@@ -150,10 +198,12 @@
102
 Basic.Stats.Status.Live="CANLI"
103
 Basic.Stats.Status.Reconnecting="Bağlantı yenidən qurulur"
104
 Basic.Stats.Status.Inactive="Aktiv deyil"
105
+Basic.Stats.Status.Active="Aktiv"
106
 Basic.Stats.DroppedFrames="Buraxılmış Kadrlar (Şəbəkə)"
107
 Basic.Stats.MegabytesSent="Yekun Verilənlər Çıxışı"
108
 Basic.Stats.Bitrate="Bit sürəti"
109
 Basic.Stats.DiskFullIn="Disk dolur (təxmini)"
110
+Basic.Stats.ResetStats="Statistikaları sıfırla"
111
 ResetUIWarning.Title="İstifadəçi interfeysini sıfırlamaq istədiyinizə əminsiniz?"
112
 Updater.Title="Yeniləmə mövcuddur"
113
 Updater.Text="Yeniləmə mövcuddur:"
114
@@ -168,6 +218,20 @@
115
 QuickTransitions.DuplicateScene="Səhnəni Çoxalt"
116
 Basic.TransitionDuration="Müddət"
117
 Basic.TogglePreviewProgramMode="Studiya Rejimi"
118
+Undo.Undo="Geri"
119
+Undo.Redo="İreli"
120
+Undo.Add="%1 əlavə et'"
121
+Undo.HideSceneItem="%2 içində %1 gizlət"
122
+Undo.ReorderSources="%1 içində resursları yenidən sırala"
123
+Undo.MoveUp="%2 içindəki %1 yuxarı daşı"
124
+Undo.MoveDown="%2 içindəki %1 aşağı daşı"
125
+Undo.MoveToTop="%2 içindəki %1 ən yuxarı daşı"
126
+Undo.MoveToBottom="%2 içindəki %1 ən alta daşı"
127
+Undo.PasteSource="%1 içindəki resursları yapışdırmaq"
128
+Undo.PasteSourceRef="Mənbə İstinadlarını %1 içərisinə yapışdırın"
129
+Undo.GroupItems="maddələri %1 içinə qrupla"
130
+TransitionNameDlg.Text="Zəhmət olmasa keçid adını qeyd edin"
131
+TransitionNameDlg.Title="Keçid adı"
132
 TitleBar.Profile="Profil"
133
 TitleBar.Scenes="Səhnələr"
134
 NameExists.Title="Ad artıq var"
135
@@ -180,9 +244,17 @@
136
 ConfirmStop.Text="Yayımı dayandırmaq istədiyinizə əminsiniz?"
137
 ConfirmStopRecord.Title="Səsyazma Dayandırılsın?"
138
 ConfirmStopRecord.Text="Səsyazmanı dayandırmaq istədiyinizə əminsiniz?"
139
+ConfirmBWTest.Title="Bant genişliyi testi başlasın?"
140
+ConfirmBWTest.Text="OBS-i bant genişliyi test rejimində konfiqurasiya etdiniz.Bu rejim kanalınız yayımlanmadan şəbəkə testinə imkan verir.Testi bitirdikdən sonra izləyicilərin yayımı görə bilməsi üçün onu deaktiv etməlisiniz.\n\nDavam etmək istəyirsiniz?"
141
+ConfirmExit.Title="OBS-dən çıxılsın?"
142
+ConfirmExit.Text="OBS hal-hazırda işlək vəziyyətdədir.Bütün yayımlar və qeydlər dayandırılacaq.Çıxmaq istədiyinizdən əminsiniz?"
143
 ConfirmRemove.Title="Çıxarılmanı Təsdiqlə"
144
+ConfirmRemove.Text="$1 silmək istədiyinə əminsiniz?"
145
+ConfirmRemove.TextMultiple="%1 silmək istədiyinizdən əminsiniz?"
146
 LogReturnDialog.CopyURL="URL-ni Kopyala"
147
+LogReturnDialog.AnalyzeURL="Təhlil et"
148
 Remux.TargetFile="Hədəf Fayl"
149
+Remux.Stop="Remuxu dayandır"
150
 Remux.ClearAll="Bütün Elementləri Təmizlə"
151
 Remux.SelectTarget="Hədəf faylı seç..."
152
 Remux.FileExistsTitle="Hədəf fayllar var"
153
obs-studio-27.0.1.tar.xz/UI/data/locale/bem-ZM.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/bem-ZM.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-Language="Bemba"
3
+Language="ChiBemba"
4
 OK="Oke"
5
 Apply="Bomfya"
6
 Cancel="Kansula"
7
obs-studio-27.0.1.tar.xz/UI/data/locale/bn-BD.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/bn-BD.ini Changed
88
 
1
@@ -112,6 +112,7 @@
2
 Auth.InvalidScope.Text="%1 এর জন্য প্রমাণীকরণের প্রয়োজনীয়তা পরিবর্তন হয়েছে। কিছু বৈশিষ্ট্য উপলব্ধ নাও হতে পারে।"
3
 Auth.LoadingChannel.Title="চ্যানেলের তথ্য লোড হচ্ছে..."
4
 Auth.LoadingChannel.Text="%1 চ্যানেলের তথ্য লোড হচ্ছে, অনুগ্রহপূর্বক অপেক্ষা করুন..."
5
+Auth.LoadingChannel.Error="চ্যানেলের তথ্য পাওয়া যাচ্ছে না।"
6
 Auth.ChannelFailure.Title="চ্যানেল লোড করতে ব্যর্থ"
7
 Auth.ChannelFailure.Text="%1\n\n%2: %3 এর চ্যানেল তথ্য লোড করতে ব্যর্থ"
8
 Auth.Chat="চ্যাট"
9
@@ -154,6 +155,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="স্ট্রিম কী পান"
11
 Basic.AutoConfig.StreamPage.MoreInfo="আরো তথ্য"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="ষ্টীম কী ব্যাবহার করুন"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="স্ট্রিম কী ব্যবহার করুন (উন্নত)"
14
 Basic.AutoConfig.StreamPage.Service="সেবা"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="সব দেখান..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="কাস্টম..."
17
@@ -161,6 +163,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="ষ্টীম কী"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(লিংক)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="এনকোডার কী"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="সংযুক্ত অ্যাকাউন্টে"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="ব্যান্ডউইথ পরীক্ষার মাধ্যমে বিটরেটের নির্ধারণ করুন (কয়েক মিনিট সময় লাগতে পারে)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="হার্ডওয়্যার এনকোডিং বেশি পছন্দ করব"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="হার্ডওয়্যার এনকোডিং বেশিরভাগ সিপিইউ ব্যবহার বাদ দেয় তবে একই স্তরের মানের অর্জনের জন্য আরও বিটরেটের প্রয়োজন হতে পারে।"
25
@@ -349,6 +352,7 @@
26
 MissingFiles.Found="প্রাপ্ত"
27
 MissingFiles.AutoSearch="অতিরিক্ত ফাইল মিল খুঁজে পাওয়া গেছে"
28
 MissingFiles.AutoSearchText="OBS সেই ডিরেক্টরিতে হারিয়ে যাওয়া ফাইলগুলির জন্য অতিরিক্ত মিল খুঁজে পেয়েছে। আপনি কি তাদের যুক্ত করতে চান?"
29
+MissingFiles.NoMissing.Text="কোনো ফাইলস অখোজ পাওয়া যায়নি।"
30
 UpdateAvailable="নতুন হালনাগাদ উপলব্ধ"
31
 UpdateAvailable.Text="সংস্করণ %1.%2.%3 উপলব্ধ। <a href='%4'> ডাউনলোড করতে এখানে ক্লিক করুন।</a>"
32
 Basic.DesktopDevice1="ডেস্কটপ অডিও"
33
@@ -415,6 +419,7 @@
34
 Basic.PropertiesView.FPS.Simple="FPS সাধারণ মানসমূহ"
35
 Basic.PropertiesView.FPS.Rational="যৌক্তিক FPS মান"
36
 Basic.PropertiesView.FPS.ValidFPSRanges="বৈধ FPS রেঞ্জ:"
37
+Basic.PropertiesView.UrlButton.Text="এই লিংক কি আপনার ডিফল্ট ওয়েব ব্রাউজার দিয়ে খুলবেন?"
38
 Basic.InteractionWindow="%1 সাথে মিথস্ক্রিয়া"
39
 Basic.StatusBar.Reconnecting="সংযোগ বিচ্ছিন্ন করে %2 (s) (%1 চেষ্টা) ইভেন্টটি পুনরায় সংযোগ করা হচ্ছে"
40
 Basic.StatusBar.AttemptingReconnect="পুনঃসংযোগের জন্য চেষ্টা করছে... (%1 প্রয়াস)"
41
@@ -469,6 +474,7 @@
42
 Basic.TransformWindow.BoundsType.ScaleToWidth="পাতার প্রস্থের মধ্যে সীমা আকার পরিবর্তন করো"
43
 Basic.TransformWindow.BoundsType.ScaleToHeight="সীমা উচ্চতা আকার পরিবর্তন করো"
44
 Basic.TransformWindow.BoundsType.Stretch="প্রসারিত করার সীমা"
45
+Basic.TransformWindow.NoSelectedSource="উৎস বাছাই হয়নি"
46
 Basic.Main.AddSourceHelp.Title="উৎস যোগ করা যাচ্ছে না"
47
 Basic.Main.AddSourceHelp.Text="আপনি সূত্র যোগ করার নূন্যতম ১ দৃশ্য থাকতে হবে."
48
 Basic.Main.Scenes="দৃশ্য"
49
@@ -480,6 +486,7 @@
50
 Basic.Main.StartReplayBuffer="রিপ্লে বাফার শুরু"
51
 Basic.Main.SaveReplay="রিপ্লে সংরক্ষণ করুন"
52
 Basic.Main.StartStreaming="স্ট্রিমিং-এর শুরু"
53
+Basic.Main.StartBroadcast="সরাসরি যান।"
54
 Basic.Main.StartVirtualCam="ভার্চুয়াল ক্যামেরা শুরু করুন"
55
 Basic.Main.StopRecording="রেকর্ডিং বন্ধ করুন"
56
 Basic.Main.PauseRecording="রেকর্ডিং বিরতি"
57
@@ -488,6 +495,7 @@
58
 Basic.Main.StopReplayBuffer="রিপ্লে বাফার বন্ধ"
59
 Basic.Main.StoppingReplayBuffer="রিপ্লে বাফার বন্ধ করা হচ্ছে..."
60
 Basic.Main.StopStreaming="স্ট্রিমিং বন্ধের"
61
+Basic.Main.StopBroadcast="সরাসরি শেষ করুন"
62
 Basic.Main.StoppingStreaming="স্রোত বন্ধ হয়ে যাওয়ার..."
63
 Basic.Main.ForceStopStreaming="(অবকাশ বাতিল) Streaming বন্ধ"
64
 Basic.Main.ShowContextBar="উৎস সরঞ্জামদণ্ড প্রদর্শন করুন"
65
@@ -506,6 +514,7 @@
66
 Basic.MainMenu.File.Settings="&সেটিংস (&S)"
67
 Basic.MainMenu.File.ShowSettingsFolder="বৈশিষ্ট্য ফোল্ডার প্রদর্শন করা হবে"
68
 Basic.MainMenu.File.ShowProfileFolder="প্রোফাইল ফোল্ডার প্রদর্শন করা হবে"
69
+Basic.MainMenu.File.ShowMissingFiles="খোজ ফাইল খুঁজুন"
70
 Basic.MainMenu.AlwaysOnTop="সবসময় চালু শীর্ষে (&A)"
71
 Basic.MainMenu.File.Exit="প্রস্থান (&X)"
72
 Basic.MainMenu.Edit="সম্পাদনা করুন (&E)"
73
@@ -928,3 +937,14 @@
74
 ContextBar.MediaControls.PlaylistPrevious="প্লেলিস্টে পূর্ববর্তী"
75
 ContextBar.MediaControls.MediaProperties="মিডিয়া বৈশিষ্ট্য"
76
 ContextBar.MediaControls.BlindSeek="মিডিয়া সিক উইজেট"
77
+YouTube.Auth.Ok="অনুমোদন সপূর্ণ।\nএই পেজ টি বন্ধ করতে পারেন।"
78
+YouTube.Auth.NoCode="অনুমোদন এর প্রক্রিয়া শেষ হয়নি।"
79
+YouTube.Auth.NoChannels="বাছাই অ্যাকাউন্টে এ কোনো চ্যানেল পাওয়া যায়নি"
80
+YouTube.AuthError.Text="চ্যানেল এর তথ্য পাওয়া যায়নি: %1."
81
+YouTube.Actions.MadeForKids="এই ভিডিও কি শিশুদের জন্য তৈরি?*"
82
+YouTube.Actions.MadeForKids.Yes="হ্যা, এটি শিশুদের জন্যে তৈরি"
83
+YouTube.Actions.MadeForKids.No="না, এটি শিশু দের জন্যে তৈরি নয়"
84
+YouTube.Actions.Latency.Normal="সাধারণ"
85
+YouTube.Actions.Latency.Low="কম"
86
+YouTube.Actions.Latency.UltraLow="অনেক বেশি কম"
87
+YouTube.Actions.Notify.CreatingBroadcast="সরাসরি সম্প্রচার তৈরি হচ্ছে, অপেক্ষা করুন।"
88
obs-studio-27.0.1.tar.xz/UI/data/locale/ca-ES.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ca-ES.ini Changed
165
 
1
@@ -110,6 +110,7 @@
2
 Auth.InvalidScope.Text="Han canviat els requisits d'autenticació per %1. Potser algunes funcions no estaran disponibles."
3
 Auth.LoadingChannel.Title="S'està carregant la informació del canal..."
4
 Auth.LoadingChannel.Text="S'està carregant la informació del canal a %1, espereu..."
5
+Auth.LoadingChannel.Error="No s'ha pogut obtenir la informació del canal."
6
 Auth.ChannelFailure.Title="S'ha produït un error en carregar el canal"
7
 Auth.ChannelFailure.Text="No s'ha pogut carregar la informació del canal per a %1\n\n%2: %3"
8
 Auth.Chat="Xat"
9
@@ -152,6 +153,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Obté una clau"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Més informació"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Utilitza una clau de transmissió"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Utilitza una clau de retransmissió (avançat)"
14
 Basic.AutoConfig.StreamPage.Service="Servei"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostra-ho tot..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Personalitzat..."
17
@@ -159,6 +161,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Clau de la transmissió"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Enllaç)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Clau del codificador"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Compte connectat"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estima la tassa de bits amb una prova d'ample de banda (pot trigar uns minuts)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prefereix la codificació per maquinari"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="La codificació per maquinari elimina la majoria de l'ús de la CPU, però pot requerir una tassa de bits superior per obtenir el mateix nivell de qualitat."
25
@@ -319,6 +322,8 @@
26
 Output.RecordError.EncodeErrorMsg="S'ha produït un error del codificador durant la gravació."
27
 Output.BadPath.Title="Ruta de l'arxiu incorrecta"
28
 Output.BadPath.Text="La ruta configurada pel fitxer de sortida no és vàlida. Si us plau, comproveu la configuració per confirmar que s'ha creat una ruta de fitxer vàlida."
29
+Output.NoBroadcast.Title="Cap emissió configurada"
30
+Output.NoBroadcast.Text="Heu de configurar primer una emissió abans de poder emetre."
31
 LogReturnDialog="Registre carregat amb èxit"
32
 LogReturnDialog.Description="S'ha carregat el fitxer de registre. Ara podeu compartir l'URL amb finalitats de depuració o assistència."
33
 LogReturnDialog.Description.Crash="S'ha carregat el vostre informe de fallada. Ara podeu compartir l'URL amb finalitats de depuració."
34
@@ -358,6 +363,8 @@
35
 MissingFiles.Found="Trobat"
36
 MissingFiles.AutoSearch="S'han trobat coincidències de fitxers addicionals"
37
 MissingFiles.AutoSearchText="L'OBS ha trobat coincidències addicionals per als fitxers que falten en aquest directori. Voleu afegir-los?"
38
+MissingFiles.NoMissing.Title="Comprovació de fitxers que falten"
39
+MissingFiles.NoMissing.Text="Sembla que no falten fitxers."
40
 UpdateAvailable="Hi ha disponible una actualització"
41
 UpdateAvailable.Text="La versió %1.%2.%3 està disponible. <a href='%4'> feu clic aquí per a baixar-la</a>"
42
 Basic.DesktopDevice1="Àudio de l'escriptori"
43
@@ -421,6 +428,8 @@
44
 Basic.PropertiesView.FPS.Simple="Valors FPS simples"
45
 Basic.PropertiesView.FPS.Rational="Valors FPS racionals"
46
 Basic.PropertiesView.FPS.ValidFPSRanges="Rangs de FPS vàlids:"
47
+Basic.PropertiesView.UrlButton.Text="Voleu obrir aquest enllaç al navegador per defecte?"
48
+Basic.PropertiesView.UrlButton.OpenUrl="Obre l'URL"
49
 Basic.InteractionWindow="Interacció amb '%1'"
50
 Basic.StatusBar.Reconnecting="Desconnectat, tornant a connectar en %2 segon(s) (intent %1)"
51
 Basic.StatusBar.AttemptingReconnect="Intentant reconnectar... (intent %1)"
52
@@ -475,6 +484,8 @@
53
 Basic.TransformWindow.BoundsType.ScaleToWidth="Escala a l'amplada dels límits"
54
 Basic.TransformWindow.BoundsType.ScaleToHeight="Escala a l'alçada dels límits"
55
 Basic.TransformWindow.BoundsType.Stretch="Estirar als límits"
56
+Basic.TransformWindow.Title="Edita la transformació per a '%1'"
57
+Basic.TransformWindow.NoSelectedSource="No s'ha seleccionat cap font"
58
 Basic.Main.AddSourceHelp.Title="No es pot afegir la font"
59
 Basic.Main.AddSourceHelp.Text="Cal tenir com a mínim 1 escena per afegir una font."
60
 Basic.Main.Scenes="Escenes"
61
@@ -485,6 +496,7 @@
62
 Basic.Main.StartReplayBuffer="Inicia la reproducció de la memòria intermèdia"
63
 Basic.Main.SaveReplay="Desa la repetició"
64
 Basic.Main.StartStreaming="Inicia la transmissió"
65
+Basic.Main.StartBroadcast="Emet en directe"
66
 Basic.Main.StartVirtualCam="Inicia la càmera virtual"
67
 Basic.Main.StopRecording="Atura l'enregistrament"
68
 Basic.Main.PauseRecording="Pausa la gravació"
69
@@ -492,7 +504,10 @@
70
 Basic.Main.StoppingRecording="Aturant l'enregistrament..."
71
 Basic.Main.StopReplayBuffer="Atura la reproducció de la memòria intermèdia"
72
 Basic.Main.StoppingReplayBuffer="S'està aturant la reproducció de la memòria intermèdia..."
73
+Basic.Main.SetupBroadcast="Administrador de retransmissions"
74
 Basic.Main.StopStreaming="Atura la transmissió"
75
+Basic.Main.StopBroadcast="Finalitza l'emissió"
76
+Basic.Main.AutoStopEnabled="(Aturada automàtica)"
77
 Basic.Main.StoppingStreaming="Aturant la transmissió..."
78
 Basic.Main.ForceStopStreaming="Atura l'enregistrament (descarta el retard)"
79
 Basic.Main.ShowContextBar="Mostra la barra d'eines d'origen"
80
@@ -511,6 +526,7 @@
81
 Basic.MainMenu.File.Settings="Configuració (&S)"
82
 Basic.MainMenu.File.ShowSettingsFolder="Mostrar carpeta de configuració"
83
 Basic.MainMenu.File.ShowProfileFolder="Mostra la carpeta del perfil"
84
+Basic.MainMenu.File.ShowMissingFiles="Comprova si hi falten fitxers"
85
 Basic.MainMenu.AlwaysOnTop="Sempre &al davant"
86
 Basic.MainMenu.File.Exit="Surt (&X)"
87
 Basic.MainMenu.Edit="&Edita"
88
@@ -622,6 +638,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horitzontal, part inferior (8 escenes)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, esquerra (8 escenes)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, dreta (8 escenes)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horitzontal, part superior (18 escenes)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horitzontal, part superior (24 escenes)"
94
 Basic.Settings.Stream="Directe"
95
 Basic.Settings.Stream.StreamType="Tipus de directe"
96
@@ -927,3 +944,68 @@
97
 ContextBar.MediaControls.PlaylistPrevious="Anterior a la llista de reproducció"
98
 ContextBar.MediaControls.MediaProperties="Propietats del contingut"
99
 ContextBar.MediaControls.BlindSeek="Giny de recerca de mitjans"
100
+YouTube.Auth.Ok="L'autorització s'ha completat correctament.\nAra podeu tancar aquesta pàgina."
101
+YouTube.Auth.NoCode="El procés d'autorització no s'ha completat."
102
+YouTube.Auth.NoChannels="No hi ha cap canal disponible al compte seleccionat"
103
+YouTube.Auth.WaitingAuth.Title="Autorització d'usuari a Youtube"
104
+YouTube.Auth.WaitingAuth.Text="Finalitzeu l'autorització al vostre navegador.<br>Si no s'obre una finestra del navegador, feu clic en aquest enllaç per completar l'autorització:<br>%1"
105
+YouTube.AuthError.Text="No s'ha pogut obtenir la informació del canal: %1."
106
+YouTube.Actions.WindowTitle="Configuració d'emissió al YouTube - Canal: %1"
107
+YouTube.Actions.CreateNewEvent="Crea una emissió nova"
108
+YouTube.Actions.ChooseEvent="Selecciona una emissió existent"
109
+YouTube.Actions.Title="Títol*"
110
+YouTube.Actions.MyBroadcast="La meva emissió"
111
+YouTube.Actions.Description="Descripció"
112
+YouTube.Actions.Privacy="Privadesa*"
113
+YouTube.Actions.Privacy.Private="Privat"
114
+YouTube.Actions.Privacy.Public="Públic"
115
+YouTube.Actions.Privacy.Unlisted="No llistat"
116
+YouTube.Actions.Category="Categoria"
117
+YouTube.Actions.Thumbnail="Miniatura"
118
+YouTube.Actions.Thumbnail.SelectFile="Trieu un fitxer..."
119
+YouTube.Actions.Thumbnail.NoFileSelected="Cap fitxer seleccionat"
120
+YouTube.Actions.Thumbnail.ClearFile="Neteja"
121
+YouTube.Actions.MadeForKids="Aquest vídeo és adequat per a menors?*"
122
+YouTube.Actions.MadeForKids.Yes="Sí, és adequat per a un públic infantil"
123
+YouTube.Actions.MadeForKids.No="No, està adreçat a un públic més adult"
124
+YouTube.Actions.AdditionalSettings="Configuració addicional:"
125
+YouTube.Actions.Latency="Latència"
126
+YouTube.Actions.Latency.Low="Baixa"
127
+YouTube.Actions.Latency.UltraLow="Molt baixa"
128
+YouTube.Actions.EnableAutoStart="Habilita l'inici automàtic"
129
+YouTube.Actions.EnableAutoStop="Habilita l'aturada automàtica"
130
+YouTube.Actions.AutoStartStop.TT="Indica si aquesta emissió programada s'ha d'iniciar automàticament"
131
+YouTube.Actions.EnableDVR="Habilita DVR"
132
+YouTube.Actions.360Video="Vídeo 360"
133
+YouTube.Actions.ScheduleForLater="Programa per a més tard"
134
+YouTube.Actions.RememberSettings="Recorda la configuració"
135
+YouTube.Actions.Create_Ready="Crea una emissió nova"
136
+YouTube.Actions.Create_GoLive="Crea una emissió i comença a emetre"
137
+YouTube.Actions.Choose_Ready="Trieu una emissió"
138
+YouTube.Actions.Choose_GoLive="Trieu una emissió i comenceu a emetre"
139
+YouTube.Actions.Create_Schedule="Programador d'emissions"
140
+YouTube.Actions.Create_Schedule_Ready="Seleccioneu i programeu una emissió"
141
+YouTube.Actions.Dashboard="Obre el YouTube Studio"
142
+YouTube.Actions.Error.Title="Error en crear l'emissió"
143
+YouTube.Actions.Error.Text="Error d'accés a YouTube '%1'.<br/>Un error més descriptiu es pot trobar a <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
144
+YouTube.Actions.Error.General="Error d'accés al YouTube. Comproveu la vostra connexió de xarxa o l'accés al servidor del YouTube."
145
+YouTube.Actions.Error.NoBroadcastCreated="Error creant l'emissió '%1'.<br/>Un error més descriptiu es pot trobar a <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
146
+YouTube.Actions.Error.NoStreamCreated="No s'ha creat cap transmissió. Torneu a enllaçar el vostre compte."
147
+YouTube.Actions.Error.YouTubeApi="Error de l'API de YouTube. Consulteu el fitxer de registre per obtenir més informació."
148
+YouTube.Actions.Error.BroadcastNotFound="No s'ha trobat l'emissió seleccionada."
149
+YouTube.Actions.Error.FileMissing="El fitxer no existeix"
150
+YouTube.Actions.Error.FileOpeningFailed="S'ha produït un error en obrir el fitxer seleccionat."
151
+YouTube.Actions.Error.FileTooLarge="El fitxer seleccionat és massa gran (Límit: 2 MiB)."
152
+YouTube.Actions.EventsLoading="S'està carregant la llista d'esdeveniments..."
153
+YouTube.Actions.EventCreated.Title="S'ha creat l'esdeveniment"
154
+YouTube.Actions.EventCreated.Text="S'ha creat l’esdeveniment correctament."
155
+YouTube.Actions.Stream="Transmissió"
156
+YouTube.Actions.Stream.ScheduledFor="Programat per a %1"
157
+YouTube.Actions.Stream.Resume="Reprèn la transmissió interrompuda"
158
+YouTube.Actions.Stream.YTStudio="Creada automàticament pel YouTube Studio"
159
+YouTube.Actions.Notify.CreatingBroadcast="S'està creant una retransmissió nova..."
160
+YouTube.Actions.AutoStartStreamingWarning.Title="Cal iniciar manualment"
161
+YouTube.Actions.AutoStartStreamingWarning="L'inici automàtic està inhabilitat per a aquest esdeveniment. Feu clic a \"Emet en directe\" per iniciar la transmissió."
162
+YouTube.Actions.AutoStopStreamingWarning="No podreu tornar a connectar.<br>La vostra emissió s'aturarà i deixareu d'estar en directe."
163
+YouTube.Errors.liveStreamingNotEnabled="La transmissió en directe no està habilitada al canal de YouTube seleccionat. <br/><br/>Consulteu <a href='https://www.youtube.com/features'>youtube.com/features</a> per obtenir més informació."
164
+YouTube.Errors.livePermissionBlocked="La reproducció en directe no està disponible al canal de YouTube seleccionat.<br/>Tingueu en compte que pot passar fins a 24 hores perquè la transmissió en directe estigui disponible després d’haver-la activat a la configuració del canal. <br/><br/>Consulteu <a href='https://www.youtube.com/features'>youtube.com/features</a> per obtenir més informació."
165
obs-studio-27.0.1.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/cs-CZ.ini Changed
165
 
1
@@ -108,6 +108,7 @@
2
 Auth.InvalidScope.Text="Požadavky pro přihlášení ke službě %1 se změnily. Některé funkce nemusí být dostupné."
3
 Auth.LoadingChannel.Title="Načítání informací o kanálu ..."
4
 Auth.LoadingChannel.Text="Načítání informací o kanálu ze služby %1 ..."
5
+Auth.LoadingChannel.Error="Nelze získat informace o kanálu."
6
 Auth.ChannelFailure.Title="Při načítání kanálu došlo k chybě"
7
 Auth.ChannelFailure.Text="Informace o kanálu se pomocí služby %1 nepodařilo načíst\n\n%2: %3"
8
 Auth.StreamInfo="Informace o vysílání"
9
@@ -149,12 +150,14 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Získat vysílací klíč"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Více informací"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Použít vysílací klíč"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Použít vysílací klíč (pokročilé)"
14
 Basic.AutoConfig.StreamPage.Service="Služba"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Zobrazit vše..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Vlastní ..."
17
 Basic.AutoConfig.StreamPage.StreamKey="Vysílací klíč"
18
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Odkaz)"
19
 Basic.AutoConfig.StreamPage.EncoderKey="Kódovací klíč"
20
+Basic.AutoConfig.StreamPage.ConnectedAccount="Připojený účet"
21
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Odhadnout bitrate za pomocí testu rychlosti spojení (může to zabrat pár minut)"
22
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferovat hardwarové kódování"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarové kódování rapidně snižuje využití CPU, ale může vyžadovat použití vyššího bitratu k dosažení stejné kvality."
24
@@ -314,6 +317,8 @@
25
 Output.RecordError.EncodeErrorMsg="Při nahrávání došlo k chybě kodéru."
26
 Output.BadPath.Title="Špatná cesta k souboru"
27
 Output.BadPath.Text="Nastavená cesta k výstupnímu souboru je chybná. Zkontrolujte nastavení, zda není cesta špatně napsána."
28
+Output.NoBroadcast.Title="Není nastaveno žádné vysílání"
29
+Output.NoBroadcast.Text="Nejdříve musíte vysílání nastavit než můžete začít vysílat."
30
 LogReturnDialog="Záznam byl úspěšně nahrán"
31
 LogReturnDialog.Description="Váš soubor záznamu byl nahrán. Nyní můžete sdílet tuto adresu pro účely ladění nebo podpory."
32
 LogReturnDialog.Description.Crash="Váše hlášení o selhání bylo nahráno. Nyní můžete sdílet tuto adresu pro účely ladění."
33
@@ -353,6 +358,8 @@
34
 MissingFiles.Found="Nalezen"
35
 MissingFiles.AutoSearch="Byly nalezeny další odpovídající soubory"
36
 MissingFiles.AutoSearchText="OBS našlo další odpovídající soubory ve vybrané složce. Přejete si je přidat ?"
37
+MissingFiles.NoMissing.Title="Kontrola chybějících souborů"
38
+MissingFiles.NoMissing.Text="Vypadá to, že nechybí žádné soubory."
39
 UpdateAvailable="K dispozici je nová verze"
40
 UpdateAvailable.Text="Verze %1.%2.%3 je nyní k dispozici. <a href='%4'>Stáhnout</a>"
41
 Basic.DesktopDevice1="Zvuk plochy"
42
@@ -420,6 +427,9 @@
43
 Basic.PropertiesView.FPS.Simple="Jednoduché hodnoty FPS"
44
 Basic.PropertiesView.FPS.Rational="Racionální hodnoty FPS"
45
 Basic.PropertiesView.FPS.ValidFPSRanges="Platné rozsahy FPS:"
46
+Basic.PropertiesView.UrlButton.Text="Chcete otevřít tento odkaz ve vašem výchozím internetovém prohlížeči?"
47
+Basic.PropertiesView.UrlButton.Text.Url="Adresa: %1"
48
+Basic.PropertiesView.UrlButton.OpenUrl="Otevřít adresu"
49
 Basic.InteractionWindow="Interakce s '%1'"
50
 Basic.StatusBar.Reconnecting="Odpojen, další pokus o spojení za %2 vteřin(y) (pokus č. %1)"
51
 Basic.StatusBar.AttemptingReconnect="Pokus o připojení... (pokus č. %1)"
52
@@ -474,6 +484,8 @@
53
 Basic.TransformWindow.BoundsType.ScaleToWidth="Škálovat do šířky ohraničení"
54
 Basic.TransformWindow.BoundsType.ScaleToHeight="Škálovat do výšky ohraničení"
55
 Basic.TransformWindow.BoundsType.Stretch="Roztáhnout do ohraničení"
56
+Basic.TransformWindow.Title="Úprava transformaci pro '%1'"
57
+Basic.TransformWindow.NoSelectedSource="Není vybrán žádný zdroj"
58
 Basic.Main.AddSourceHelp.Title="Nelze přidat zdroj"
59
 Basic.Main.AddSourceHelp.Text="Pro přidání zdroje je potřeba přidat alespoň jednu scénu."
60
 Basic.Main.Scenes="Scény"
61
@@ -485,6 +497,7 @@
62
 Basic.Main.StartReplayBuffer="Spustit záznam do paměti"
63
 Basic.Main.SaveReplay="Uložit záznam"
64
 Basic.Main.StartStreaming="Začít vysílat"
65
+Basic.Main.StartBroadcast="Začít vysílat"
66
 Basic.Main.StartVirtualCam="Spustit virtuální kameru"
67
 Basic.Main.StopRecording="Zastavit nahrávání"
68
 Basic.Main.PauseRecording="Pozastavit nahrávání"
69
@@ -492,7 +505,10 @@
70
 Basic.Main.StoppingRecording="Zastavuji nahrávání..."
71
 Basic.Main.StopReplayBuffer="Zastavit záznam do paměti"
72
 Basic.Main.StoppingReplayBuffer="Zastavuji záznam do paměti..."
73
+Basic.Main.SetupBroadcast="Spravovat vysílání"
74
 Basic.Main.StopStreaming="Zastavit vysílání"
75
+Basic.Main.StopBroadcast="Zastavit vysílání"
76
+Basic.Main.AutoStopEnabled="(Automatické zastavení)"
77
 Basic.Main.StoppingStreaming="Zastavuji vysílání..."
78
 Basic.Main.ForceStopStreaming="Zastavit vysílání (bez zpoždění)"
79
 Basic.Main.ShowContextBar="Zobrazit lištu nástrojů pro zdroje"
80
@@ -511,6 +527,7 @@
81
 Basic.MainMenu.File.Settings="Na&stavení"
82
 Basic.MainMenu.File.ShowSettingsFolder="Zobrazit složku nastavení"
83
 Basic.MainMenu.File.ShowProfileFolder="Zobrazit složku profilu"
84
+Basic.MainMenu.File.ShowMissingFiles="Zkontrolovat, zda nechybí nějaké soubory"
85
 Basic.MainMenu.AlwaysOnTop="Vždy n&avrchu"
86
 Basic.MainMenu.File.Exit="Ukončit (&X)"
87
 Basic.MainMenu.Edit="Upravit (&E)"
88
@@ -623,6 +640,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontálně, dole (8 scén)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikálně, vlevo (8 scén)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertikálně, vpravo (8 scén)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontálně, nahoře (18 scén)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontálně, nahoře (24 scén)"
94
 Basic.Settings.Stream="Vysílání"
95
 Basic.Settings.Stream.StreamType="Typ vysílání"
96
@@ -915,3 +933,68 @@
97
 ContextBar.MediaControls.PlaylistPrevious="Předchozí v seznamu skladeb"
98
 ContextBar.MediaControls.MediaProperties="Vlastnosti média"
99
 ContextBar.MediaControls.BlindSeek="Posuvník přehrávání"
100
+YouTube.Auth.Ok="Autorizace byla úspěšná.\nTuto stránku můžete nyní zavřít."
101
+YouTube.Auth.NoCode="Autorizační proces nebyl dokončen."
102
+YouTube.Auth.NoChannels="Na vybraném účtu nejsou k dispozici žádné kanály"
103
+YouTube.Auth.WaitingAuth.Title="Autorizace YouTube uživatele"
104
+YouTube.Auth.WaitingAuth.Text="Dokončete autorizaci v externím prohlížeči.<br>Pokud se externí prohlížeč neotevřel, následujte tento odkaz a dokončete autorizaci:<br>%1"
105
+YouTube.AuthError.Text="Nezdařilo se získat informace o kanálu: %1."
106
+YouTube.Actions.WindowTitle="Nastavení YouTube vysílání - kanál: %1"
107
+YouTube.Actions.CreateNewEvent="Vytvořit nové vysílání"
108
+YouTube.Actions.ChooseEvent="Vybrat existující vysílání"
109
+YouTube.Actions.Title="Název*"
110
+YouTube.Actions.MyBroadcast="Mé vysílání"
111
+YouTube.Actions.Description="Popis"
112
+YouTube.Actions.Privacy="Soukromí*"
113
+YouTube.Actions.Privacy.Private="Soukromé"
114
+YouTube.Actions.Privacy.Public="Veřejné"
115
+YouTube.Actions.Privacy.Unlisted="Neveřejné"
116
+YouTube.Actions.Category="Kategorie"
117
+YouTube.Actions.Thumbnail="Náhled"
118
+YouTube.Actions.Thumbnail.SelectFile="Vybrat soubor..."
119
+YouTube.Actions.Thumbnail.NoFileSelected="Není vybrán žádný soubor"
120
+YouTube.Actions.Thumbnail.ClearFile="Vyčistit"
121
+YouTube.Actions.MadeForKids="Je toto video vytvořeno pro děti?*"
122
+YouTube.Actions.MadeForKids.Yes="Ano, je vytvořeno pro děti"
123
+YouTube.Actions.MadeForKids.No="Ne, není vytvořeno pro děti"
124
+YouTube.Actions.AdditionalSettings="Další nastavení:"
125
+YouTube.Actions.Latency="Odezva"
126
+YouTube.Actions.Latency.Normal="Normální"
127
+YouTube.Actions.Latency.Low="Nízká"
128
+YouTube.Actions.Latency.UltraLow="Ultra nízká"
129
+YouTube.Actions.EnableAutoStart="Povolit automatické spuštění"
130
+YouTube.Actions.EnableAutoStop="Povolit automatické zastavení"
131
+YouTube.Actions.AutoStartStop.TT="Indikuje, zda má být toto naplánované vysílání začít automaticky"
132
+YouTube.Actions.EnableDVR="Povolit DVR"
133
+YouTube.Actions.ScheduleForLater="Naplánovat na později"
134
+YouTube.Actions.RememberSettings="Zapamatovat si tato nastavení"
135
+YouTube.Actions.Create_Ready="Vytvořit vysílání"
136
+YouTube.Actions.Create_GoLive="Vytvořit vysílání a začít vysílat"
137
+YouTube.Actions.Choose_Ready="Vybrat vysílání"
138
+YouTube.Actions.Choose_GoLive="Vybrat vysílání a začít vysílat"
139
+YouTube.Actions.Create_Schedule="Naplánovat vysílání"
140
+YouTube.Actions.Create_Schedule_Ready="Naplánovat a vybrat vysílání"
141
+YouTube.Actions.Dashboard="Otevřít YouTube Studio"
142
+YouTube.Actions.Error.Title="Chyba při vytváření živého vysílání"
143
+YouTube.Actions.Error.Text="Chyba přístupu k YouTube '%1'.<br/>Detailní popis chyby můžete najít na <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
144
+YouTube.Actions.Error.General="Chyba přístupu k YouTube. Zkontrolujte prosím své připojení k internetu nebo přístup k \nYouTube serverům."
145
+YouTube.Actions.Error.NoBroadcastCreated="Chyba při vytváření vysílání '%1'.<br/>Detailní popis chyby můžete najít na <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
146
+YouTube.Actions.Error.NoStreamCreated="Nebylo vytvořeno žádné vysílání. Připojte účet znovu."
147
+YouTube.Actions.Error.YouTubeApi="Chyba YouTube API. Pro více informací otevřete soubor záznamu."
148
+YouTube.Actions.Error.BroadcastNotFound="Vybrané vysílání nebylo nalezeno."
149
+YouTube.Actions.Error.FileMissing="Vybraný soubor neexistuje."
150
+YouTube.Actions.Error.FileOpeningFailed="Při otevírání vybraného souboru došlo k chybě."
151
+YouTube.Actions.Error.FileTooLarge="Vybraný soubor je moc velký (limit: 2 MiB)"
152
+YouTube.Actions.EventsLoading="Načítání seznamu událostí..."
153
+YouTube.Actions.EventCreated.Title="Událost vytvořena"
154
+YouTube.Actions.EventCreated.Text="Událost byla úspěšně vytvořena."
155
+YouTube.Actions.Stream="Vysílání"
156
+YouTube.Actions.Stream.ScheduledFor="Naplánováno na %1"
157
+YouTube.Actions.Stream.Resume="Pokračovat v přerušeném vysílání"
158
+YouTube.Actions.Stream.YTStudio="Automaticky vytvořeno YouTube Studiem"
159
+YouTube.Actions.Notify.CreatingBroadcast="Vytváření nového živého vysílání, čekejte prosím..."
160
+YouTube.Actions.AutoStartStreamingWarning.Title="Vyžaduje manuální spuštění"
161
+YouTube.Actions.AutoStartStreamingWarning="Automatické spuštění je pro tuto událost zakázáno. Pro zahájení vysílání klikněte na \"Začít vysílat\"."
162
+YouTube.Actions.AutoStopStreamingWarning="Nebude moci obnovit připojení.<br>Vaše vysílání bude zastaveno a nebudete moci vysílat."
163
+YouTube.Errors.liveStreamingNotEnabled="Živé vysílání není povoleno na vybraném YouTube kanálu.<br/><br/>Podívejte se na <a href='https://www.youtube.com/features'>youtube.com/features</a> pro více informací."
164
+YouTube.Errors.livePermissionBlocked="Živé vysílání není k dispozici na vybraném YouTube kanálu.<br/>Mějte na vědomí, že povolení vysílání na kanále může trvat až 24 hodit po zapnutí v nastavení kanálu.<br/><br/>Podívejte se na <a href='https://www.youtube.com/features'>youtube.com/features</a> pro více informací."
165
obs-studio-27.0.1.tar.xz/UI/data/locale/da-DK.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/da-DK.ini Changed
182
 
1
@@ -107,6 +107,7 @@
2
 Auth.InvalidScope.Text="Godkendelseskrav for %1 er ændret. Visse funktioner er muligvis ikke tilgængelige."
3
 Auth.LoadingChannel.Title="Indlæser kanalinformation..."
4
 Auth.LoadingChannel.Text="Indlæser kanalinformation for %1, afvent venligst..."
5
+Auth.LoadingChannel.Error="Kan ikke hente kanalinformation."
6
 Auth.ChannelFailure.Title="Mislykkedes at indlæse kanal"
7
 Auth.ChannelFailure.Text="Mislykkedes at indlæse kanalinformation for %1\n\n%2: %3"
8
 Auth.StreamInfo="Streaminformation"
9
@@ -147,12 +148,14 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Hent Streamnøgle"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Yderligere info"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Benyt Streamnøgle"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Brug Streamnøgle (avanceret)"
14
 Basic.AutoConfig.StreamPage.Service="Tjeneste"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Vis alle..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Tilpasset..."
17
 Basic.AutoConfig.StreamPage.StreamKey="Streamnøgle"
18
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)"
19
 Basic.AutoConfig.StreamPage.EncoderKey="Encoder-nøgle"
20
+Basic.AutoConfig.StreamPage.ConnectedAccount="Tilsluttet konto"
21
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimér bit-hastigheden vha. en båndbreddetest (kan tage et par minutter)"
22
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Foretræk hardwarekodning"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardwarekodning fjerner det meste CPU-forbrug, men kan kræve højere bit-hastighed for at opnå samme kvalitetsniveau."
24
@@ -310,6 +313,8 @@
25
 Output.RecordError.EncodeErrorMsg="En kodningsfejl opstod under optagelsen."
26
 Output.BadPath.Title="Ugyldig filsti"
27
 Output.BadPath.Text="Den opsatte filoutputsti er ugyldig, så tjek at en gyldig er opsat i Indstillinger."
28
+Output.NoBroadcast.Title="Ingen Udsendelse opsat"
29
+Output.NoBroadcast.Text="En udsendelse skal opættes, inden streaming kan påbegyndes."
30
 LogReturnDialog="Log er uploadet"
31
 LogReturnDialog.Description="Din logfil er uploadet. Du kan nu dele URL'en mhp. fejlfinding eller support."
32
 LogReturnDialog.Description.Crash="Din nedbrudsrapport er uploadet. Du kan nu dele URL'en mhp. fejlfinding."
33
@@ -347,6 +352,8 @@
34
 MissingFiles.Found="Fundet"
35
 MissingFiles.AutoSearch="Yderligere filmatches fundet"
36
 MissingFiles.AutoSearchText="OBS har fundet yderligere matches for manglende filer mappen. Tilføj disse?"
37
+MissingFiles.NoMissing.Title="Filmangel tjek"
38
+MissingFiles.NoMissing.Text="Ingen synes at mangle."
39
 UpdateAvailable="Ny opdatering tilgængelig"
40
 UpdateAvailable.Text="Version %1.%2.%3 er nu tilgængelig. <a href='%4'>Klik her for at downloade</a>"
41
 Basic.DesktopDevice1="Computerlyd"
42
@@ -407,6 +414,8 @@
43
 Basic.PropertiesView.FPS.Simple="Simple FPS-værdier"
44
 Basic.PropertiesView.FPS.Rational="Rationelle FPS-værdier"
45
 Basic.PropertiesView.FPS.ValidFPSRanges="Gyldige FPS-områder:"
46
+Basic.PropertiesView.UrlButton.Text="Åbn dette link i din standard webbrowser?"
47
+Basic.PropertiesView.UrlButton.OpenUrl="Åbn URL"
48
 Basic.InteractionWindow="Interagerer med '%1'"
49
 Basic.StatusBar.Reconnecting="Afbrudt, genforbinder om %2 sekund(-er) (forsøg %1)"
50
 Basic.StatusBar.AttemptingReconnect="Forsøger at genforbinde... (forsøg %1)"
51
@@ -457,6 +466,8 @@
52
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skalér til afgrænsningsbredden"
53
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skalér til afgrænsningshøjden"
54
 Basic.TransformWindow.BoundsType.Stretch="Stræk til grænser"
55
+Basic.TransformWindow.Title="Redigér Transformation for '%1'"
56
+Basic.TransformWindow.NoSelectedSource="Ingen kilde valgt"
57
 Basic.Main.AddSourceHelp.Title="Kan ikke tilføje kilde"
58
 Basic.Main.AddSourceHelp.Text="Du behøver mindst 1 scene for at tilføje en kilde."
59
 Basic.Main.Scenes="Scener"
60
@@ -468,6 +479,7 @@
61
 Basic.Main.StartReplayBuffer="Start Genafspilnings-buffer"
62
 Basic.Main.SaveReplay="Gem Genafspilning"
63
 Basic.Main.StartStreaming="Start streaming"
64
+Basic.Main.StartBroadcast="Gå Live"
65
 Basic.Main.StartVirtualCam="Start Virtuelt Kamera"
66
 Basic.Main.StopRecording="Stop optagelse"
67
 Basic.Main.PauseRecording="Sæt optagelse på pause"
68
@@ -475,7 +487,10 @@
69
 Basic.Main.StoppingRecording="Stopper optagelse..."
70
 Basic.Main.StopReplayBuffer="Stop Genafspilnings-buffer"
71
 Basic.Main.StoppingReplayBuffer="Stopper Genafspilnings-buffer..."
72
+Basic.Main.SetupBroadcast="Håndtere Udsendelse"
73
 Basic.Main.StopStreaming="Stop streaming"
74
+Basic.Main.StopBroadcast="Afslut udsendelse"
75
+Basic.Main.AutoStopEnabled="(Auto-stop)"
76
 Basic.Main.StoppingStreaming="Stopper stream..."
77
 Basic.Main.ForceStopStreaming="Stop streaming (ignorér forsinkelse)"
78
 Basic.Main.ShowContextBar="Vis Kildeværktøjsbjælke"
79
@@ -493,6 +508,7 @@
80
 Basic.MainMenu.File.Settings="Ind&stillinger"
81
 Basic.MainMenu.File.ShowSettingsFolder="Vis Indstillingsmappe"
82
 Basic.MainMenu.File.ShowProfileFolder="Vis Profilmappe"
83
+Basic.MainMenu.File.ShowMissingFiles="Tjek for manglende filer"
84
 Basic.MainMenu.AlwaysOnTop="&Altid øverst"
85
 Basic.MainMenu.File.Exit="Afslut (&X)"
86
 Basic.MainMenu.Edit="R&edigér"
87
@@ -604,6 +620,7 @@
88
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Vandret, nederst (8 scener)"
89
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Lodret, venstre (8 scener)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Lodret, højre (8 scener)"
91
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Vandret, øverst (18 scener)"
92
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Vandret, øverst (24 scener)"
93
 Basic.Settings.Stream.StreamType="Streamtype"
94
 Basic.Settings.Stream.Custom.UseAuthentication="Benyt godkendelse"
95
@@ -706,12 +723,12 @@
96
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer-indstillinger (om nogle)"
97
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframe-Interval (billeder)"
98
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Vis alle codecs (selv potentielt inkompatible)"
99
-Screenshot="Slærmfoto, output"
100
-Screenshot.SourceHotkey="Slærmfoto, valgte kilde"
101
-Screenshot.StudioProgram="Slærmfoto (program)"
102
-Screenshot.Preview="Slærmfoto (forhåndsvisning)"
103
-Screenshot.Scene="Slærmfoto (scene)"
104
-Screenshot.Source="Slærmfoto (kilde)"
105
+Screenshot="Skærmfoto, output"
106
+Screenshot.SourceHotkey="Skærmfoto, valgte kilde"
107
+Screenshot.StudioProgram="Skærmfoto (program)"
108
+Screenshot.Preview="Skærmfoto (forhåndsvisning)"
109
+Screenshot.Scene="Skærmfoto (scene)"
110
+Screenshot.Source="Skærmfoto (kilde)"
111
 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%d-%m-%Y %I-%M-%S-%p\n%d-%m-%Y %H-%M-%S-%z\n%d-%m-%Y %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n%VF"
112
 FilenameFormatting.TT="%DD     Månedsdag, nul-foranstillet (01-31)\n%MM                Måned som tal (01-12)\n%CCYY            År, fire cifre\n%YY             År, to sidste cifre (00-99)\n%hh                Time i 24-timersformat (00-23)\n%mm             Minut (00-59)\n%ss              Sekund (00-61)\n%%              Et %-tegn\n%a               Forkortet ugedagsnavn\n%A               Fuldt ugedagsnavn\n%b               Forkortet månedsnavn\n%B                Fuldt månedsnavn\n%d                Månedsdag, nul-foranstillet (01-31)\n%H             Time i 24-timersformat (00-23)\n%I              Time i 12-timersformat (01-12)\n%m              Måned som tal (01-12)\n%M               Minut (00-59)\n%p               AM-/PM-betegnelse\n%S               Sekund (00-61)\n%y              År, sidste to cifre (00-99)\n%Y             År\n%z              ISO 8601-forskydning fra UTC i tidszone\n%Z             Tidszonenavn eller -forkortelse\n%FPS               Billeder pr. sekund\n%CRES              Grundopløsning (lærred)\n%ORES              Outputopløsning (skaleret)\n%VF             Videoformat"
113
 Basic.Settings.Video.Adapter="Skærmkort"
114
@@ -884,3 +901,67 @@
115
 ContextBar.MediaControls.PlaylistPrevious="Foregående på Afspilningsliste"
116
 ContextBar.MediaControls.MediaProperties="Medieegenskaber"
117
 ContextBar.MediaControls.BlindSeek="Mediesøgnings-widget"
118
+YouTube.Auth.Ok="Godkendelse fuldført.\nDenne side kan nu lukkes."
119
+YouTube.Auth.NoCode="Denne godkendelsesproces blev ikke fuldført."
120
+YouTube.Auth.NoChannels="Ingen tilgængelig kanal(er) på den valgte konto"
121
+YouTube.Auth.WaitingAuth.Title="YouTube Brugergodkendelse"
122
+YouTube.Auth.WaitingAuth.Text="Fuldfør godkendelsen i en ekstern browser.<br>Åbner den eksterne browser ikke, så følg dette link og fuldfør godkendelsen:<br>%1"
123
+YouTube.AuthError.Text="Mislykkedes at hente kanalinformation: %1."
124
+YouTube.Actions.WindowTitle="YouTube Udsendelsesopsætning - Kanal: %1"
125
+YouTube.Actions.CreateNewEvent="Opret ny udsendelse"
126
+YouTube.Actions.ChooseEvent="Vælg eksisterende udsendelse"
127
+YouTube.Actions.Title="Titel*"
128
+YouTube.Actions.MyBroadcast="Min Udsendelse"
129
+YouTube.Actions.Description="Beskrivelse"
130
+YouTube.Actions.Privacy="Fortrolighed*"
131
+YouTube.Actions.Privacy.Private="Privat"
132
+YouTube.Actions.Privacy.Public="Offentlig"
133
+YouTube.Actions.Privacy.Unlisted="Ikke listet"
134
+YouTube.Actions.Category="Kategori"
135
+YouTube.Actions.Thumbnail="Miniature"
136
+YouTube.Actions.Thumbnail.SelectFile="Vælg fil..."
137
+YouTube.Actions.Thumbnail.NoFileSelected="Ingen fil valgt"
138
+YouTube.Actions.Thumbnail.ClearFile="Ryd"
139
+YouTube.Actions.MadeForKids="Er denne video beregnet til børn?*"
140
+YouTube.Actions.MadeForKids.Yes="Ja, den er beregnet til børn"
141
+YouTube.Actions.MadeForKids.No="Nej, den er ikke beregnet til børn"
142
+YouTube.Actions.AdditionalSettings="Yderligere indstillinger"
143
+YouTube.Actions.Latency="Ventetid"
144
+YouTube.Actions.Latency.Low="Lav"
145
+YouTube.Actions.Latency.UltraLow="Ultra lav"
146
+YouTube.Actions.EnableAutoStart="Aktivér auto-start"
147
+YouTube.Actions.EnableAutoStop="Aktivér auto-stop"
148
+YouTube.Actions.AutoStartStop.TT="Angiver, hvorvidt denne planlagte udsendelse skal starte automatisk"
149
+YouTube.Actions.EnableDVR="Aktivér DVR"
150
+YouTube.Actions.360Video="360-video"
151
+YouTube.Actions.ScheduleForLater="Planlæg til senere"
152
+YouTube.Actions.RememberSettings="Husk disse indstillinger"
153
+YouTube.Actions.Create_Ready="Opret udsendelse"
154
+YouTube.Actions.Create_GoLive="Opret udsendelse og påbegynd streaming"
155
+YouTube.Actions.Choose_Ready="Vælg udsendelse"
156
+YouTube.Actions.Choose_GoLive="Vælg udsendelse og påbegynd streaming"
157
+YouTube.Actions.Create_Schedule="Planlæg udsendelse"
158
+YouTube.Actions.Create_Schedule_Ready="Planlæg og vælg udsendelse"
159
+YouTube.Actions.Dashboard="Åbn YouTube Studio"
160
+YouTube.Actions.Error.Title="Fejl ved oprettelse af live-udsendelse"
161
+YouTube.Actions.Error.Text="YouTube-adgangsfejl '%1'.<br/>En detaljeret fejlbeskrivelse kan findes på <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
162
+YouTube.Actions.Error.General="YouTube-adgangsfejl. Tjek netværksforbindelse eller YouTube-serveradgang."
163
+YouTube.Actions.Error.NoBroadcastCreated="Fejl ved oprettelse af udsendelse '%1'.<br/>En detaljeret fejlbeskrivelse kan findes på <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
164
+YouTube.Actions.Error.NoStreamCreated="Ingen stream oprettet. Genassociér konto."
165
+YouTube.Actions.Error.YouTubeApi="YouTube-API fejl. Tjek logfilen for yderligere oplysninger."
166
+YouTube.Actions.Error.BroadcastNotFound="Den valgte udsendelse kunne ikke findes."
167
+YouTube.Actions.Error.FileMissing="Valgte fil findes ikke."
168
+YouTube.Actions.Error.FileOpeningFailed="Mislykkedes at åbne valgte fil."
169
+YouTube.Actions.Error.FileTooLarge="Valgte fil er for stor (maks.: 2 MiB)."
170
+YouTube.Actions.EventsLoading="Indlæser liste over begivenheder..."
171
+YouTube.Actions.EventCreated.Title="Begivenhed oprettet"
172
+YouTube.Actions.EventCreated.Text="Begivenhed er oprettet."
173
+YouTube.Actions.Stream.ScheduledFor="Planlagt til %1"
174
+YouTube.Actions.Stream.Resume="Genoptag afbrudt stream"
175
+YouTube.Actions.Stream.YTStudio="Automatisk oprettet af YouTube Studio"
176
+YouTube.Actions.Notify.CreatingBroadcast="Opretter en ny Live-udsendelse, afvent venligst..."
177
+YouTube.Actions.AutoStartStreamingWarning.Title="Manuel start nødvendig"
178
+YouTube.Actions.AutoStartStreamingWarning="Auto-start er deaktiveret for denne begivenhed. Klik på \"Gå Live\" for at starte udsendelse."
179
+YouTube.Actions.AutoStopStreamingWarning="Forbindelsen vil ikke kunne genoprettes.<br>Streamen stoppes, og live-udsendelse vil ophøre."
180
+YouTube.Errors.liveStreamingNotEnabled="Live streaming er ikke aktiveret på den valgte YouTube-kanal.<br/><br/>Se <a href='https://www.youtube.com/features'>youtube.com/features</a> for mere information."
181
+YouTube.Errors.livePermissionBlocked="Live streaming er utilgængelig på den valgte YouTube-kanal.<br/>Bemærk, at det kan tage op til 24 timer inden live streaming er tilgængelig, efter at det er aktiveret i kanalindstillingerne.<br/><br/>Se <a href='https://www.youtube.com/features'>youtube.com/features</a> for detaljer."
182
obs-studio-27.0.1.tar.xz/UI/data/locale/de-DE.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/de-DE.ini Changed
179
 
1
@@ -109,6 +109,7 @@
2
 Auth.InvalidScope.Text="Die Authentifizierungsanforderungen für %1 haben sich geändert. Einige Funktionen sind möglicherweise nicht verfügbar."
3
 Auth.LoadingChannel.Title="Kanalinformationen werden geladen …"
4
 Auth.LoadingChannel.Text="Kanalinformationen werden für %1 geladen, bitte warten …"
5
+Auth.LoadingChannel.Error="Kanalinformationen konnten nicht abgerufen werden."
6
 Auth.ChannelFailure.Title="Fehler beim Laden des Kanals"
7
 Auth.ChannelFailure.Text="Fehler beim Laden der Kanalinformationen für %1\n\n%2: %3"
8
 Auth.StreamInfo="Streaminformation"
9
@@ -149,11 +150,13 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Streamschlüssel erhalten"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Mehr Informationen"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Streamschlüssel verwenden"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Streamschlüssel verwenden (erweitert)"
14
 Basic.AutoConfig.StreamPage.Service="Plattform"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Alle anzeigen …"
16
 Basic.AutoConfig.StreamPage.Service.Custom="Benutzerdefiniert …"
17
 Basic.AutoConfig.StreamPage.StreamKey="Streamschlüssel"
18
 Basic.AutoConfig.StreamPage.EncoderKey="Encoder-Schlüssel"
19
+Basic.AutoConfig.StreamPage.ConnectedAccount="Verbundenes Konto"
20
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bitrate mit Bandbreitentest schätzen (kann einige Minuten dauern)"
21
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardwarecodierung bevorzugen"
22
 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."
23
@@ -176,7 +179,7 @@
24
 Basic.AutoConfig.TestPage.Result.Header="Das Programm hat festgestellt, dass diese geschätzten Einstellungen für Sie am idealsten sind:"
25
 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."
26
 Basic.AutoConfig.Info="Der Autokonfigurationsassistent ermittelt die besten Einstellungen basierend auf Ihren Computerspezifikationen und der Internetgeschwindigkeit."
27
-Basic.AutoConfig.RunAnytime="Er kann jederzeit über das Werkzeug-Menü ausgeführt werden."
28
+Basic.AutoConfig.RunAnytime="Er kann jederzeit über das Werkzeuge-Menü ausgeführt werden."
29
 Basic.Stats="Statistiken"
30
 Basic.Stats.CPUUsage="CPU-Auslastung"
31
 Basic.Stats.HDDSpaceAvailable="Speicherplatz verfügbar"
32
@@ -191,7 +194,7 @@
33
 Basic.Stats.Status.Active="Aktiv"
34
 Basic.Stats.DroppedFrames="Ausgelassene Frames (Netzwerk)"
35
 Basic.Stats.MegabytesSent="Insgesamte Datenausgabe"
36
-Basic.Stats.DiskFullIn="Festplatte voll in ungefähr"
37
+Basic.Stats.DiskFullIn="Datenträger voll in ungefähr"
38
 Basic.Stats.ResetStats="Statistiken zurücksetzen"
39
 ResetUIWarning.Title="Sind Sie sicher, dass Sie die Benutzeroberfläche zurücksetzen möchten?"
40
 ResetUIWarning.Text="Das Zurücksetzen der Benutzeroberfläche wird zusätzliche Docks ausblenden. Sie müssen diese Docks im Menü Ansicht wieder aktivieren, wenn sie sichtbar sein sollen.\n\nSind Sie sicher, dass Sie die Benutzeroberfläche zurücksetzen möchten?"
41
@@ -310,6 +313,8 @@
42
 Output.RecordError.EncodeErrorMsg="Ein Encoderfehler ist beim Aufnehmen aufgetreten."
43
 Output.BadPath.Title="Ungültiger Dateipfad"
44
 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."
45
+Output.NoBroadcast.Title="Keine Übertragung konfiguriert"
46
+Output.NoBroadcast.Text="Sie müssen eine Übertragung einrichten, bevor Sie mit dem Streamen beginnen können."
47
 LogReturnDialog="Log erfolgreich hochgeladen"
48
 LogReturnDialog.Description="Ihre Logdatei wurde hochgeladen. Sie können die URL jetzt für Debugging- oder Support-Zwecke teilen."
49
 LogReturnDialog.Description.Crash="Ihr Absturzbericht wurde hochgeladen. Sie können die URL jetzt für Debugging-Zwecke teilen."
50
@@ -349,6 +354,8 @@
51
 MissingFiles.Found="Gefunden"
52
 MissingFiles.AutoSearch="Zusätzliche Dateitreffer gefunden"
53
 MissingFiles.AutoSearchText="OBS hat zusätzliche Treffer für fehlende Dateien in diesem Ordner gefunden. Möchten Sie diese hinzufügen?"
54
+MissingFiles.NoMissing.Title="Auf fehlende Dateien prüfen"
55
+MissingFiles.NoMissing.Text="Keine Dateien fehlen."
56
 UpdateAvailable="Neues Update verfügbar"
57
 UpdateAvailable.Text="Version %1.%2.%3 ist nun verfügbar. <a href='%4'>Hier klicken zum Herunterladen</a>"
58
 Basic.DesktopDevice1="Desktop-Audio"
59
@@ -408,6 +415,8 @@
60
 Basic.PropertiesView.FPS.Simple="Einfache FPS-Werte"
61
 Basic.PropertiesView.FPS.Rational="Rationale FPS-Werte"
62
 Basic.PropertiesView.FPS.ValidFPSRanges="Gültige FPS-Bereiche:"
63
+Basic.PropertiesView.UrlButton.Text="Diesen Link in Ihrem Standard-Browser öffnen?"
64
+Basic.PropertiesView.UrlButton.OpenUrl="URL öffnen"
65
 Basic.InteractionWindow="Interaktion mit „%1“"
66
 Basic.StatusBar.Reconnecting="Verbindung getrennt. Verbindungsaufbau in %2 Sekunde(n) (Versuch %1)"
67
 Basic.StatusBar.AttemptingReconnect="Versuch zur Wiederherstellung der Verbindung läuft … (Versuch %1)"
68
@@ -460,6 +469,8 @@
69
 Basic.TransformWindow.BoundsType.ScaleToWidth="Auf Breite der Begrenzungen skalieren"
70
 Basic.TransformWindow.BoundsType.ScaleToHeight="Auf Höhe der Begrenzungen skalieren"
71
 Basic.TransformWindow.BoundsType.Stretch="Bis zu Begrenzungen strecken"
72
+Basic.TransformWindow.Title="Transformation für „%1“ bearbeiten"
73
+Basic.TransformWindow.NoSelectedSource="Keine Quelle ausgewählt"
74
 Basic.Main.AddSourceHelp.Title="Quelle konnte nicht hinzugefügt werden"
75
 Basic.Main.AddSourceHelp.Text="Sie müssen mindestens eine Szene besitzen, um eine Quelle hinzuzufügen."
76
 Basic.Main.Scenes="Szenen"
77
@@ -471,6 +482,7 @@
78
 Basic.Main.StartReplayBuffer="Wiederholungspuffer starten"
79
 Basic.Main.SaveReplay="Wiederholung speichern"
80
 Basic.Main.StartStreaming="Stream starten"
81
+Basic.Main.StartBroadcast="Live gehen"
82
 Basic.Main.StartVirtualCam="Virtuelle Kamera starten"
83
 Basic.Main.StopRecording="Aufnahme beenden"
84
 Basic.Main.PauseRecording="Aufnahme pausieren"
85
@@ -478,7 +490,10 @@
86
 Basic.Main.StoppingRecording="Beende Aufnahme …"
87
 Basic.Main.StopReplayBuffer="Wiederholungspuffer beenden"
88
 Basic.Main.StoppingReplayBuffer="Beende Wiederholungspuffer …"
89
+Basic.Main.SetupBroadcast="Übertragung verwalten"
90
 Basic.Main.StopStreaming="Stream beenden"
91
+Basic.Main.StopBroadcast="Übertragung beenden"
92
+Basic.Main.AutoStopEnabled="(Wird automatisch beendet)"
93
 Basic.Main.StoppingStreaming="Beende Stream …"
94
 Basic.Main.ForceStopStreaming="Stream beenden (Verzögerung missachten)"
95
 Basic.Main.ShowContextBar="Quellenwerkzeugleiste anzeigen"
96
@@ -497,6 +512,7 @@
97
 Basic.MainMenu.File.Settings="Ein&stellungen"
98
 Basic.MainMenu.File.ShowSettingsFolder="Einstellungsordner anzeigen"
99
 Basic.MainMenu.File.ShowProfileFolder="Profilordner anzeigen"
100
+Basic.MainMenu.File.ShowMissingFiles="Auf fehlende Dateien prüfen"
101
 Basic.MainMenu.AlwaysOnTop="Immer im Vordergrund (&A)"
102
 Basic.MainMenu.File.Exit="Beenden (&X)"
103
 Basic.MainMenu.Edit="B&earbeiten"
104
@@ -608,6 +624,7 @@
105
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, unten (8 Szenen)"
106
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikal, links (8 Szenen)"
107
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertikal, rechts (8 Szenen)"
108
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, oben (18 Szenen)"
109
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, oben (24 Szenen)"
110
 Basic.Settings.Stream.StreamType="Streamtyp"
111
 Basic.Settings.Stream.Custom.UseAuthentication="Authentifizierung verwenden"
112
@@ -895,3 +912,66 @@
113
 ContextBar.MediaControls.PlaylistPrevious="Zurück in Playlist"
114
 ContextBar.MediaControls.MediaProperties="Medieneigenschaften"
115
 ContextBar.MediaControls.BlindSeek="Mediensuchelement"
116
+YouTube.Auth.Ok="Autorisierung erfolgreich abgeschlossen.\nSie können diese Seite jetzt schließen."
117
+YouTube.Auth.NoCode="Der Autorisierungsprozess wurde nicht abgeschlossen."
118
+YouTube.Auth.NoChannels="Kein Kanal für das ausgewählte Konto verfügbar"
119
+YouTube.Auth.WaitingAuth.Title="YouTube-Benutzerautorisierung"
120
+YouTube.Auth.WaitingAuth.Text="Bitte vervollständigen Sie die Autorisierung in Ihrem externen Browser.<br>Wenn der externe Browser nicht geöffnet wird, folgen Sie diesem Link und vervollständigen Sie die Autorisierung:<br>%1"
121
+YouTube.AuthError.Text="Fehler beim Abrufen der Kanalinformationen: %1."
122
+YouTube.Actions.WindowTitle="Einrichtung einer YouTube-Übertragung – Kanal: %1"
123
+YouTube.Actions.CreateNewEvent="Neue Übertragung erstellen"
124
+YouTube.Actions.ChooseEvent="Existierende Übertragung auswählen"
125
+YouTube.Actions.Title="Titel*"
126
+YouTube.Actions.MyBroadcast="Meine Übertragung"
127
+YouTube.Actions.Description="Beschreibung"
128
+YouTube.Actions.Privacy="Sichtbarkeit*"
129
+YouTube.Actions.Privacy.Private="Privat"
130
+YouTube.Actions.Privacy.Public="Öffentlich"
131
+YouTube.Actions.Privacy.Unlisted="Nicht gelistet"
132
+YouTube.Actions.Category="Kategorie"
133
+YouTube.Actions.Thumbnail.SelectFile="Datei auswählen …"
134
+YouTube.Actions.Thumbnail.NoFileSelected="Keine Datei ausgewählt"
135
+YouTube.Actions.Thumbnail.ClearFile="Entfernen"
136
+YouTube.Actions.MadeForKids="Ist dieses Video speziell für Kinder?*"
137
+YouTube.Actions.MadeForKids.Yes="Ja, es ist speziell für Kinder"
138
+YouTube.Actions.MadeForKids.No="Nein, es ist nicht speziell für Kinder"
139
+YouTube.Actions.AdditionalSettings="Zusätzliche Einstellungen:"
140
+YouTube.Actions.Latency="Latenz"
141
+YouTube.Actions.Latency.Low="Niedrig"
142
+YouTube.Actions.Latency.UltraLow="Extrem niedrig"
143
+YouTube.Actions.EnableAutoStart="Automatischen Start aktivieren"
144
+YouTube.Actions.EnableAutoStop="Automatisches Beenden aktivieren"
145
+YouTube.Actions.AutoStartStop.TT="Gibt an, ob diese geplante Übertragung automatisch starten soll"
146
+YouTube.Actions.EnableDVR="DVR aktivieren"
147
+YouTube.Actions.360Video="360°-Video"
148
+YouTube.Actions.ScheduleForLater="Für später Planen"
149
+YouTube.Actions.RememberSettings="Einstellungen merken"
150
+YouTube.Actions.Create_Ready="Übertragung erstellen"
151
+YouTube.Actions.Create_GoLive="Übertragung erstellen und Stream starten"
152
+YouTube.Actions.Choose_Ready="Übertragung auswählen"
153
+YouTube.Actions.Choose_GoLive="Übertragung auswählen und Stream starten"
154
+YouTube.Actions.Create_Schedule="Übertragung planen"
155
+YouTube.Actions.Create_Schedule_Ready="Übertragung planen und auswählen"
156
+YouTube.Actions.Dashboard="YouTube Studio öffnen"
157
+YouTube.Actions.Error.Title="Erstellungsfehler der Live-Übertragung"
158
+YouTube.Actions.Error.Text="YouTube-Zugriffsfehler „%1“.<br/>Eine detaillierte Fehlerbeschreibung finden Sie unter <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
159
+YouTube.Actions.Error.General="YouTube-Zugriffsfehler. Bitte überprüfen Sie Ihre Netzwerkverbindung oder Ihren YouTube-Serverzugriff."
160
+YouTube.Actions.Error.NoBroadcastCreated="Fehler „%1“ beim Erstellen der Übertragung.<br/>Eine detaillierte Fehlerbeschreibung finden Sie unter <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
161
+YouTube.Actions.Error.NoStreamCreated="Kein Stream erstellt. Bitte verknüpfen Sie Ihr Konto erneut."
162
+YouTube.Actions.Error.YouTubeApi="YouTube-API-Fehler. Weitere Informationen finden Sie in der Logdatei."
163
+YouTube.Actions.Error.BroadcastNotFound="Die ausgewählte Übertragung wurde nicht gefunden."
164
+YouTube.Actions.Error.FileMissing="Die ausgewählte Datei existiert nicht."
165
+YouTube.Actions.Error.FileOpeningFailed="Fehler beim Öffnen der ausgewählten Datei."
166
+YouTube.Actions.Error.FileTooLarge="Die ausgewählte Datei ist zu groß (Limit: 2 MiB)."
167
+YouTube.Actions.EventsLoading="Liste der Events wird geladen …"
168
+YouTube.Actions.EventCreated.Title="Event erstellt"
169
+YouTube.Actions.EventCreated.Text="Event erfolgreich erstellt."
170
+YouTube.Actions.Stream.ScheduledFor="Geplant für %1"
171
+YouTube.Actions.Stream.Resume="Unterbrochenen Stream fortsetzen"
172
+YouTube.Actions.Stream.YTStudio="Automatisch von YouTube Studio erstellt"
173
+YouTube.Actions.Notify.CreatingBroadcast="Erstellen einer neuen Live-Übertragung, bitte warten…"
174
+YouTube.Actions.AutoStartStreamingWarning.Title="Manueller Start erforderlich"
175
+YouTube.Actions.AutoStartStreamingWarning="Der automatische Start ist für dieses Event deaktiviert. Klicken Sie auf „Live gehen“, um Ihre Übertragung zu starten."
176
+YouTube.Actions.AutoStopStreamingWarning="Sie können die Verbindung nicht wiederherstellen.<br>Ihr Stream wird gestoppt und Sie werden nicht länger live sein."
177
+YouTube.Errors.liveStreamingNotEnabled="Livestreaming ist für den gewählten YouTube-Kanal nicht aktiviert.<br/><br/>Gehen Sie auf <a href='https://www.youtube.com/features'>youtube.com/features</a> für weitere Informationen."
178
+YouTube.Errors.livePermissionBlocked="Livestreaming ist für den gewählten YouTube-Kanal nicht verfügbar.<br/>Bitte beachten Sie, dass es bis zu 24 Stunden nach der Aktivierung in Ihren Kanaleinstellungen dauern kann, bis Livestreaming verfügbar ist.<br/><br/>Gehen Sie auf <a href='https://www.youtube.com/features'>youtube.com/features</a> für Details."
179
obs-studio-27.0.1.tar.xz/UI/data/locale/el-GR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/el-GR.ini Changed
91
 
1
@@ -112,6 +112,7 @@
2
 Auth.InvalidScope.Text="Οι απαιτήσεις πιστοποίησης για το %1 έχουν αλλάξει. Κάποιες δυνατότητες μπορεί να μην είναι διαθέσιμες."
3
 Auth.LoadingChannel.Title="Φόρτωση πληροφοριών καναλιού..."
4
 Auth.LoadingChannel.Text="Φόρτωση πληροφοριών %1 καναλιού, παρακαλώ περιμένετε..."
5
+Auth.LoadingChannel.Error="Δεν ήταν δυνατή η λήψη πληροφοριών βάσης δεδομένων."
6
 Auth.ChannelFailure.Title="Απέτυχε η φόρτωση του καναλιού"
7
 Auth.ChannelFailure.Text="Αποτυχία φόρτωσης πληροφοριών %1 καναλιού\n\n%2:%3"
8
 Auth.Chat="Συνομιλία"
9
@@ -154,6 +155,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Κλειδί Ροής"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Περισσότερες πληροφορίες"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Χρησιμοποιήστε το κλειδί ζωντανής ροής"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Χρήση Κλειδιού Ροής (προχωρημένο)"
14
 Basic.AutoConfig.StreamPage.Service="Υπηρεσία"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Εμφάνιση Όλων..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Προσαρμοσμένο..."
17
@@ -161,6 +163,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Κλειδί Ροής"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Σύνδεσμος)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Κλειδί Κωδικοποιητή"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Συνδεδεμένος λογαριασμός"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Εκτίμηση ρυθμού μετάδοσης δεδομένων με δοκιμή εύρους ζώνης (ενδέχεται να χρειαστούν μερικά λεπτά)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Προτίμηση κωδικοποίησης υποβοηθούμενης από το υλισμικό"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Η υποβοηθούμενη από το υλισμικό απαιτεί την περισσότερη χρήση της CPU, αλλά μπορεί να χρειαστεί υψηλότερο ρυθμό μετάδοσης bits για την επίτευξη του ίδιου επιπέδου ποιότητας."
25
@@ -276,6 +279,7 @@
26
 Undo.MoveToBottom="Κίνηση του '%1' στο κάτω μέρος στο '%2'"
27
 Undo.PasteSource="Επικόλληση πηγής/ών στο '%1'"
28
 Undo.PasteSourceRef="Επικόλληση Αναφοράς/ών Πηγαίου Κώδικα στο '%1'"
29
+Undo.GroupItems="Ομαδοποίηση αντικειμένων στο '%1'"
30
 TransitionNameDlg.Text="Παρακαλώ εισάγετε το όνομα της μετάβασης"
31
 TransitionNameDlg.Title="Όνομα Μετάβασης"
32
 TitleBar.Profile="Προφίλ"
33
@@ -424,6 +428,9 @@
34
 Basic.PropertiesView.FPS.Simple="Ακέραιες Τιμές FPS"
35
 Basic.PropertiesView.FPS.Rational="Κλασματικές Τιμές FPS"
36
 Basic.PropertiesView.FPS.ValidFPSRanges="Έγκυρο εύρος τιμών FPS:"
37
+Basic.PropertiesView.UrlButton.Text="Ανοίξτε αυτόν τον σύνδεσμο στον προεπιλεγμένο περιηγητή σας?"
38
+Basic.PropertiesView.UrlButton.Text.Url="Σύνδεσμος%1"
39
+Basic.PropertiesView.UrlButton.OpenUrl="Άνοιγμα URL"
40
 Basic.InteractionWindow="Αλληλεπίδραση με '%1'"
41
 Basic.StatusBar.Reconnecting="Έγινε αποσύνδεση, επανασύνδεση σε %2 δευτερόλεπτα (προσπάθεια %1)"
42
 Basic.StatusBar.AttemptingReconnect="Γίνεται προσπάθεια επανασύνδεσης... (προσπάθεια %1)"
43
@@ -627,6 +634,7 @@
44
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Οριζόντια, Κάτω (8 Σκηνές)"
45
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Κατακόρυφα, Αριστερά (8 Σκηνές)"
46
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Κατακόρυφα, Δεξιά (8 Σκηνές)"
47
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Οριζόντια, Επάνω (18 Σκηνές)"
48
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Οριζόντια, Επάνω (24 Σκηνές)"
49
 Basic.Settings.Stream="Ροή"
50
 Basic.Settings.Stream.StreamType="Τύπος Ροής"
51
@@ -904,3 +912,39 @@
52
 ContextBar.MediaControls.PlaylistPrevious="Προηγούμενο στη Λίστα"
53
 ContextBar.MediaControls.MediaProperties="Ιδιότητες Πολυμέσων"
54
 ContextBar.MediaControls.BlindSeek="Μενού Αναζήτησης Πολυμέσων"
55
+YouTube.Auth.Ok="Η εξουσιοδότηση ολοκληρώθηκε επιτυχώς.\n Τώρα μπορείτε να κλείσετε αυτή τη σελίδα."
56
+YouTube.Auth.NoCode="Η διαδικασία εξουσιοδότησης δεν ολοκληρώθηκε."
57
+YouTube.Auth.WaitingAuth.Title="Εξουσιοδότηση Χρήστη Γιουτούμπ"
58
+YouTube.Auth.WaitingAuth.Text="Παρακαλούμε ολοκληρώστε την εξουσιοδότηση στον εξωτερικό σας περιηγητή.<br>Εάν ο εξωτερικός περιηγητής δεν ανοίξει, ακολουθήστε αυτόν τον σύνδεσμο και ολοκληρώστε την εξουσιοδότηση:<br>%1"
59
+YouTube.Actions.Title="Τίτλος*"
60
+YouTube.Actions.MyBroadcast="Η Μετάδοσή Μου"
61
+YouTube.Actions.Description="Περιγραφή"
62
+YouTube.Actions.Privacy="Απόρρητο*"
63
+YouTube.Actions.Privacy.Private="Ιδιωτικό"
64
+YouTube.Actions.Privacy.Public="Δημόσιο"
65
+YouTube.Actions.Privacy.Unlisted="Μη Καταχωρημένο"
66
+YouTube.Actions.Category="Κατηγορία"
67
+YouTube.Actions.MadeForKids="Είναι το βίντεο αυτό για παιδιά;*"
68
+YouTube.Actions.MadeForKids.Yes="Ναι, είναι φτιαγμένο για παιδιά"
69
+YouTube.Actions.MadeForKids.No="Όχι, δεν είναι φτιαγμένο για παιδιά"
70
+YouTube.Actions.AdditionalSettings="Πρόσθετες ρυθμίσεις:"
71
+YouTube.Actions.Latency="Καθυστέρηση"
72
+YouTube.Actions.Latency.Normal="Κανονική"
73
+YouTube.Actions.Latency.Low="Χαμηλή"
74
+YouTube.Actions.Latency.UltraLow="Εξαιρετικά χαμηλή"
75
+YouTube.Actions.EnableAutoStart="Ενεργοποίηση Αυτόματης Εκκίνησης"
76
+YouTube.Actions.EnableAutoStop="Ενεργοποίηση Αυτόματης Διακοπής"
77
+YouTube.Actions.EnableDVR="Ενεργοποίηση Ψηφιακής Συσκευής Καταγραφής (DVR)"
78
+YouTube.Actions.360Video="Βίντεο 360"
79
+YouTube.Actions.ScheduleForLater="Προγραμματισμός για αργότερα"
80
+YouTube.Actions.Error.Title="Σφάλμα δημιουργίας ζωντανής εκπομπής"
81
+YouTube.Actions.Error.Text="Σφάλμα πρόσβασης Γιουτούμπ '%1'.<br/>Λεπτομερής περιγραφή σφάλματος μπορεί να βρεθεί στο <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
82
+YouTube.Actions.Error.General="Σφάλμα πρόσβασης στο YouTube. Παρακαλώ ελέγξτε τη σύνδεσή σας στο δίκτυο ή την πρόσβαση στον διακομιστή σας YouTube."
83
+YouTube.Actions.Error.NoBroadcastCreated="Σφάλμα δημιουργίας εκπομπής '%1'.<br/>Λεπτομερής περιγραφή σφάλματος μπορεί να βρεθεί στο <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
84
+YouTube.Actions.Error.NoStreamCreated="Δεν δημιουργήθηκε η ροή. Παρακαλούμε επανασυνδέστε τον λογαριασμό."
85
+YouTube.Actions.Error.YouTubeApi="Σφάλμα YouTube API. Παρακαλώ δείτε το αρχείο καταγραφής για περισσότερες πληροφορίες."
86
+YouTube.Actions.EventCreated.Title="Δημιουργήθηκε Συμβάν"
87
+YouTube.Actions.EventCreated.Text="Το συμβάν δημιουργήθηκε επιτυχώς."
88
+YouTube.Actions.Stream="Ροή"
89
+YouTube.Actions.Notify.CreatingBroadcast="Δημιουργία μιας νέας ζωντανής εκπομπής, παρακαλούμε περιμένετε..."
90
+YouTube.Actions.AutoStopStreamingWarning="Δεν θα είστε σε θέση να επανασυνδεθείτε.<br>Η ροή σας θα σταματήσει και δεν θα είναι πλέον ζωντανή."
91
obs-studio-27.0.1.tar.xz/UI/data/locale/en-GB.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/en-GB.ini Changed
13
 
1
@@ -54,3 +54,11 @@
2
 ChangeBG="Set Colour"
3
 CustomColor="Custom Colour"
4
 About.License="Licence"
5
+YouTube.Auth.Ok="Authorisation completed successfully.\nYou can now close this page."
6
+YouTube.Auth.NoCode="The authorisation process was not completed."
7
+YouTube.Auth.WaitingAuth.Title="YouTube User Authorisation"
8
+YouTube.Auth.WaitingAuth.Text="Please complete authorisation in your external browser.<br>If the external browser does not open, follow this link and complete the authorisation:<br>%1"
9
+YouTube.Actions.Error.Text="YouTube access error '%1'.<br/>Detailed error description can be found at <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
10
+YouTube.Actions.Error.NoBroadcastCreated="Broadcast creation error '%1'.<br/>Detailed error description can be found at <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
11
+YouTube.Actions.EventCreated.Text="Event successfully created."
12
+YouTube.Actions.AutoStartStreamingWarning="Auto-start is disabled for this event, click \"Go Live\" to start your broadcast."
13
obs-studio-27.0.1.tar.xz/UI/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/en-US.ini Changed
186
 
1
@@ -128,6 +128,7 @@
2
 Auth.InvalidScope.Text="The authentication requirements for %1 have changed. Some features may not be available."
3
 Auth.LoadingChannel.Title="Loading channel information..."
4
 Auth.LoadingChannel.Text="Loading channel information for %1, please wait..."
5
+Auth.LoadingChannel.Error="Couldn't get channel information."
6
 Auth.ChannelFailure.Title="Failed to load channel"
7
 Auth.ChannelFailure.Text="Failed to load channel information for %1\n\n%2: %3"
8
 Auth.Chat="Chat"
9
@@ -178,6 +179,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Get Stream Key"
11
 Basic.AutoConfig.StreamPage.MoreInfo="More Info"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Use Stream Key"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Use Stream Key (advanced)"
14
 Basic.AutoConfig.StreamPage.Service="Service"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Custom..."
17
@@ -185,6 +187,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Stream Key"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Encoder Key"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Connected account"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimate bitrate with bandwidth test (may take a few minutes)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prefer hardware encoding"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware Encoding eliminates most CPU usage, but may require more bitrate to obtain the same level of quality."
25
@@ -388,6 +391,10 @@
26
 Output.BadPath.Title="Bad File Path"
27
 Output.BadPath.Text="The configured file output path is invalid. Please check your settings to confirm that a valid file path has been set."
28
 
29
+# broadcast setup messages
30
+Output.NoBroadcast.Title="No Broadcast Configured"
31
+Output.NoBroadcast.Text="You need to set up a broadcast before you can start streaming."
32
+
33
 # log upload dialog text and messages
34
 LogReturnDialog="Log Upload Successful"
35
 LogReturnDialog.Description="Your log file has been uploaded. You can now share the URL for debugging or support purposes."
36
@@ -432,6 +439,8 @@
37
 MissingFiles.Found="Found"
38
 MissingFiles.AutoSearch="Additional file matches found"
39
 MissingFiles.AutoSearchText="OBS has found additional matches for missing files in that directory. Would you like to add them?"
40
+MissingFiles.NoMissing.Title="Missing Files Check"
41
+MissingFiles.NoMissing.Text="No files appear to be missing."
42
 
43
 # update dialog
44
 UpdateAvailable="New Update Available"
45
@@ -544,6 +553,9 @@
46
 Basic.PropertiesView.FPS.Simple="Simple FPS Values"
47
 Basic.PropertiesView.FPS.Rational="Rational FPS Values"
48
 Basic.PropertiesView.FPS.ValidFPSRanges="Valid FPS Ranges:"
49
+Basic.PropertiesView.UrlButton.Text="Open this link in your default web browser?"
50
+Basic.PropertiesView.UrlButton.Text.Url="URL: %1"
51
+Basic.PropertiesView.UrlButton.OpenUrl="Open URL"
52
 
53
 # interaction window
54
 Basic.InteractionWindow="Interacting with '%1'"
55
@@ -609,6 +621,9 @@
56
 Basic.TransformWindow.BoundsType.ScaleToHeight="Scale to height of bounds"
57
 Basic.TransformWindow.BoundsType.Stretch="Stretch to bounds"
58
 
59
+Basic.TransformWindow.Title="Edit Transform for '%1'"
60
+Basic.TransformWindow.NoSelectedSource="No source selected"
61
+
62
 # no scene warning
63
 Basic.Main.AddSourceHelp.Title="Cannot Add Source"
64
 Basic.Main.AddSourceHelp.Text="You need to have at least 1 scene to add a source."
65
@@ -623,6 +638,7 @@
66
 Basic.Main.StartReplayBuffer="Start Replay Buffer"
67
 Basic.Main.SaveReplay="Save Replay"
68
 Basic.Main.StartStreaming="Start Streaming"
69
+Basic.Main.StartBroadcast="Go Live"
70
 Basic.Main.StartVirtualCam="Start Virtual Camera"
71
 Basic.Main.StopRecording="Stop Recording"
72
 Basic.Main.PauseRecording="Pause Recording"
73
@@ -630,7 +646,10 @@
74
 Basic.Main.StoppingRecording="Stopping Recording..."
75
 Basic.Main.StopReplayBuffer="Stop Replay Buffer"
76
 Basic.Main.StoppingReplayBuffer="Stopping Replay Buffer..."
77
+Basic.Main.SetupBroadcast="Manage Broadcast"
78
 Basic.Main.StopStreaming="Stop Streaming"
79
+Basic.Main.StopBroadcast="End Broadcast"
80
+Basic.Main.AutoStopEnabled="(Auto Stop)"
81
 Basic.Main.StoppingStreaming="Stopping Stream..."
82
 Basic.Main.ForceStopStreaming="Stop Streaming (discard delay)"
83
 Basic.Main.ShowContextBar="Show Source Toolbar"
84
@@ -651,6 +670,7 @@
85
 Basic.MainMenu.File.Settings="&Settings"
86
 Basic.MainMenu.File.ShowSettingsFolder="Show Settings Folder"
87
 Basic.MainMenu.File.ShowProfileFolder="Show Profile Folder"
88
+Basic.MainMenu.File.ShowMissingFiles="Check for Missing Files"
89
 Basic.MainMenu.AlwaysOnTop="&Always On Top"
90
 Basic.MainMenu.File.Exit="E&xit"
91
 
92
@@ -778,6 +798,7 @@
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, Bottom (8 Scenes)"
94
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, Left (8 Scenes)"
95
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, Right (8 Scenes)"
96
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, Top (18 Scenes)"
97
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, Top (24 Scenes)"
98
 
99
 # basic mode 'stream' settings
100
@@ -1163,3 +1184,85 @@
101
 ContextBar.MediaControls.PlaylistPrevious="Previous in Playlist"
102
 ContextBar.MediaControls.MediaProperties="Media Properties"
103
 ContextBar.MediaControls.BlindSeek="Media Seek Widget"
104
+
105
+# YouTube Actions and Auth
106
+YouTube.Auth.Ok="Authorization completed successfully.\nYou can now close this page."
107
+YouTube.Auth.NoCode="The authorization process was not completed."
108
+YouTube.Auth.NoChannels="No channel(s) available on selected account"
109
+YouTube.Auth.WaitingAuth.Title="YouTube User Authorization"
110
+YouTube.Auth.WaitingAuth.Text="Please complete the authorization in your external browser.<br>If the external browser does not open, follow this link and complete the authorization:<br>%1"
111
+YouTube.AuthError.Text="Failed to get channel information: %1."
112
+
113
+YouTube.Actions.WindowTitle="YouTube Broadcast Setup - Channel: %1"
114
+YouTube.Actions.CreateNewEvent="Create New Broadcast"
115
+YouTube.Actions.ChooseEvent="Select Existing Broadcast"
116
+YouTube.Actions.Title="Title*"
117
+YouTube.Actions.MyBroadcast="My Broadcast"
118
+YouTube.Actions.Description="Description"
119
+YouTube.Actions.Privacy="Privacy*"
120
+YouTube.Actions.Privacy.Private="Private"
121
+YouTube.Actions.Privacy.Public="Public"
122
+YouTube.Actions.Privacy.Unlisted="Unlisted"
123
+YouTube.Actions.Category="Category"
124
+
125
+YouTube.Actions.Thumbnail="Thumbnail"
126
+YouTube.Actions.Thumbnail.SelectFile="Select file..."
127
+YouTube.Actions.Thumbnail.NoFileSelected="No file selected"
128
+YouTube.Actions.Thumbnail.ClearFile="Clear"
129
+
130
+YouTube.Actions.MadeForKids="Is this video made for kids?*"
131
+YouTube.Actions.MadeForKids.Yes="Yes, it's made for kids"
132
+YouTube.Actions.MadeForKids.No="No, it's not made for kids"
133
+YouTube.Actions.MadeForKids.Help="<a href='https://support.google.com/youtube/topic/9689353'>(?)</a>"
134
+YouTube.Actions.AdditionalSettings="Additional settings:"
135
+YouTube.Actions.Latency="Latency"
136
+YouTube.Actions.Latency.Normal="Normal"
137
+YouTube.Actions.Latency.Low="Low"
138
+YouTube.Actions.Latency.UltraLow="Ultra low"
139
+YouTube.Actions.EnableAutoStart="Enable Auto-start"
140
+YouTube.Actions.EnableAutoStop="Enable Auto-stop"
141
+YouTube.Actions.AutoStartStop.TT="Indicates whether this scheduled broadcast should start automatically"
142
+YouTube.Actions.EnableDVR="Enable DVR"
143
+YouTube.Actions.360Video="360 video"
144
+YouTube.Actions.360Video.Help="<a href='https://vr.youtube.com/create/360/'>(?)</a>"
145
+YouTube.Actions.ScheduleForLater="Schedule for later"
146
+YouTube.Actions.RememberSettings="Remember these settings"
147
+
148
+YouTube.Actions.Create_Ready="Create broadcast"
149
+YouTube.Actions.Create_GoLive="Create broadcast and start streaming"
150
+YouTube.Actions.Choose_Ready="Select broadcast"
151
+YouTube.Actions.Choose_GoLive="Select broadcast and start streaming"
152
+YouTube.Actions.Create_Schedule="Schedule broadcast"
153
+YouTube.Actions.Create_Schedule_Ready="Schedule and select broadcast"
154
+YouTube.Actions.Dashboard="Open YouTube Studio"
155
+
156
+YouTube.Actions.Error.Title="Live broadcast creation error"
157
+YouTube.Actions.Error.Text="YouTube access error '%1'.<br/>A detailed error description can be found at <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
158
+YouTube.Actions.Error.General="YouTube access error. Please check your network connection or your YouTube server access."
159
+YouTube.Actions.Error.NoBroadcastCreated="Broadcast creation error '%1'.<br/>A detailed error description can be found at <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
160
+YouTube.Actions.Error.NoStreamCreated="No stream created. Please relink your account."
161
+YouTube.Actions.Error.YouTubeApi="YouTube API Error. Please see the log file for more information."
162
+YouTube.Actions.Error.BroadcastNotFound="The selected broadcast was not found."
163
+YouTube.Actions.Error.FileMissing="Selected file does not exist."
164
+YouTube.Actions.Error.FileOpeningFailed="Failed opening selected file."
165
+YouTube.Actions.Error.FileTooLarge="Selected file is too large (Limit: 2 MiB)."
166
+
167
+YouTube.Actions.EventsLoading="Loading list of events..."
168
+YouTube.Actions.EventCreated.Title="Event Created"
169
+YouTube.Actions.EventCreated.Text="Event created successfully."
170
+
171
+YouTube.Actions.Stream="Stream"
172
+YouTube.Actions.Stream.ScheduledFor="Scheduled for %1"
173
+YouTube.Actions.Stream.Resume="Resume interrupted stream"
174
+YouTube.Actions.Stream.YTStudio="Automatically created by YouTube Studio"
175
+
176
+YouTube.Actions.Notify.Title="YouTube"
177
+YouTube.Actions.Notify.CreatingBroadcast="Creating a new Live Broadcast, please wait..."
178
+
179
+YouTube.Actions.AutoStartStreamingWarning.Title="Manual start required"
180
+YouTube.Actions.AutoStartStreamingWarning="Auto-start is disabled for this event, click \"Go Live\" to start your broadcast."
181
+YouTube.Actions.AutoStopStreamingWarning="You will not be able to reconnect.<br>Your stream will stop and you will no longer be live."
182
+
183
+# YouTube API errors in format "YouTube.Errors.<error reason>"
184
+YouTube.Errors.liveStreamingNotEnabled="Live streaming is not enabled on the selected YouTube channel.<br/><br/>See <a href='https://www.youtube.com/features'>youtube.com/features</a> for more information."
185
+YouTube.Errors.livePermissionBlocked="Live streaming is unavailable on the selected YouTube Channel.<br/>Please note that it may take up to 24 hours for live streaming to become available after enabling it in your channel settings.<br/><br/>See <a href='https://www.youtube.com/features'>youtube.com/features</a> for details."
186
obs-studio-27.0.1.tar.xz/UI/data/locale/eo-UY.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/eo-UY.ini Changed
71
 
1
@@ -73,6 +73,8 @@
2
 Defaults="Defaŭltoj"
3
 HideMixer="Malkaŝi en miksilo"
4
 TransitionOverride="Devigi transpason"
5
+ShowTransition="Montri transpason"
6
+HideTransition="Kaŝi transpason"
7
 None="Neniu"
8
 StudioMode.Preview="Antaŭvido"
9
 StudioMode.Program="Programaro"
10
@@ -110,6 +112,7 @@
11
 Auth.InvalidScope.Text="La aŭtentigaj postuloj por %1 ŝanĝiĝis. Iuj trajtoj eble ne disponeblas."
12
 Auth.LoadingChannel.Title="Ŝargado de kanal-informoj..."
13
 Auth.LoadingChannel.Text="Ŝargado de kanal-informoj por %1, bonvole atendu..."
14
+Auth.LoadingChannel.Error="Ne eblas akiri kanalinformon"
15
 Auth.ChannelFailure.Title="Malsukcesis ŝargi kanalon"
16
 Auth.ChannelFailure.Text="Malsukcesis ŝargi kanal-informojn por %1\n\n%2: %3"
17
 Auth.Chat="Babilejo"
18
@@ -152,14 +155,36 @@
19
 Basic.AutoConfig.StreamPage.GetStreamKey="Akiri elsend-ŝlosilon"
20
 Basic.AutoConfig.StreamPage.MoreInfo="Pli da informoj"
21
 Basic.AutoConfig.StreamPage.UseStreamKey="Uzi elsend-ŝlosilon"
22
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Uzi tujan elsendan kodon (altnivela)"
23
 Basic.AutoConfig.StreamPage.Service="Servo"
24
 Basic.AutoConfig.StreamPage.Service.ShowAll="Montri ĉiujn..."
25
 Basic.AutoConfig.StreamPage.Service.Custom="Laŭmenda..."
26
 Basic.AutoConfig.StreamPage.Server="Servilo"
27
 Basic.AutoConfig.StreamPage.StreamKey="Elsend-ŝlosilo"
28
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(ligilo)"
29
+Basic.AutoConfig.StreamPage.EncoderKey="Kodila kodo"
30
+Basic.AutoConfig.StreamPage.ConnectedAccount="Konektita konto"
31
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Taksi bitrapidon per kapacita testo (eble necesos kelkaj minutoj)"
32
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferi aparat-kodado"
33
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Aparat-kodado forigas plej multajn CPU-uzadon, sed eble postulos pli da bitrapido por atingi la saman kvalit-nivelon."
34
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Bit-fluo averto"
35
+Basic.AutoConfig.StreamPage.StreamWarning.Text="La ret-trafik-kapacitotesto temas pri elsendi hazardigitan videodatumon al via kanalo sen aŭdaĵoj. Se vi kapablas, oni rekomendas kelk-tempe malŝalti konservi videojn el bitfluojn kaj agordi la elsendaĵon kiel privatan ĝis la testo finiĝos. Ĉu daŭrigi?"
36
 Basic.AutoConfig.TestPage="Finaj rezultoj"
37
+Basic.AutoConfig.TestPage.SubTitle.Testing="La programo nun plenumas plurajn testojn por estimi la idealajn agordojn"
38
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testado finita"
39
+Basic.AutoConfig.TestPage.TestingBandwidth="Plenumante ret-trafik-kapacitan teston. Tio eble daŭros kelkajn minutojn..."
40
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Konektante al: %1..."
41
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Malsukcesis konekti ĉiujn servilojn, bonvolu kontroli vian interretan konekton kaj reprovu."
42
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testante ret-trafik-kapacito je: %1"
43
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testanta bitfluon kodilon. Tio eble nelonge daŭros."
44
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testanta registradkodilon, tio eble nelonge daŭros..."
45
+Basic.AutoConfig.TestPage.TestingRes="Testanta distingivojn, tio eble daŭros kelkajn minutojn..."
46
+Basic.AutoConfig.TestPage.TestingRes.Fail="Malsukcesis startigi kodilon"
47
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testante %1x%2 %3 KS..."
48
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Bitflukodilo"
49
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Registradkodilo"
50
+Basic.AutoConfig.TestPage.Result.Header="La programo difinis, ke ĉi tiujn agordojn estas la idealaj por vi:"
51
+Basic.AutoConfig.TestPage.Result.Footer="Por uzi tiujn agordojn alklaku \"Apliky Agordojn\". Por reagordi la asistanton kaj reprovi, alklaku Reen. Por mane vi mem ŝanĝi agordojn, alklaku Rezigni kaj malfermu Agordoj-n."
52
 Updater.Skip="Preterpasi version"
53
 Updater.Running.Title="Programaro aktuale aktiva"
54
 Updater.Running.Text="Eligoj estas aktuale aktivaj, bonvolu fermi ajnajn aktivajn eligojn antaŭ ol provi ĝisdatigi"
55
@@ -181,6 +206,15 @@
56
 Basic.SceneTransitions="Scen-transpasoj"
57
 Basic.TransitionDuration="Daŭro"
58
 Basic.TogglePreviewProgramMode="Studio-reĝimo"
59
+Undo.Undo="Malfari"
60
+Undo.Redo="Refari"
61
+Undo.Add="Aldoni '%1'"
62
+Undo.Delete="Forigi '%1'"
63
+Undo.Rename="Alinomi '%1'"
64
+Undo.SceneCollection.Switch="Ŝanĝi al '%1'"
65
+Undo.Item.Undo="Malfari %1"
66
+Undo.Item.Redo="Refari %1"
67
+Undo.Sources.Multi="Forigi %1 Fontojn"
68
 TransitionNameDlg.Text="Bonvolu enigi la nomon de la transpaso"
69
 TransitionNameDlg.Title="Nomo de transpaso"
70
 TitleBar.Profile="Agordaro"
71
obs-studio-27.0.1.tar.xz/UI/data/locale/es-ES.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/es-ES.ini Changed
267
 
1
@@ -44,7 +44,7 @@
2
 Duplicate="Duplicar"
3
 Enable="Habilitar"
4
 DisableOSXVSync="Desahabilitar V-Sync en macOS"
5
-ResetOSXVSyncOnExit="Resetear V-Sync de macOS a la salida"
6
+ResetOSXVSyncOnExit="Resetear V-Sync de macOS al salir"
7
 HighResourceUsage="¡Sobrecarga al codificar! Considera bajar los ajustes de vídeo o usa una configuración del codificador más rápida."
8
 Transition="Transición"
9
 QuickTransitions="Transiciones rápidas"
10
@@ -58,7 +58,7 @@
11
 Minutes="Minutos"
12
 Seconds="Segundos"
13
 Deprecated="Obsoleto"
14
-ReplayBuffer="Búfer de reproducción"
15
+ReplayBuffer="Búfer de repetición"
16
 Import="Importar"
17
 Export="Exportar"
18
 Copy="Copiar"
19
@@ -110,6 +110,7 @@
20
 Auth.InvalidScope.Text="Los requisitos de autenticación para %1 han cambiado. Algunas características pueden no estar disponibles."
21
 Auth.LoadingChannel.Title="Cargando información del canal..."
22
 Auth.LoadingChannel.Text="Cargando información del canal para %1, por favor espere..."
23
+Auth.LoadingChannel.Error="No se pudo obtener información del canal."
24
 Auth.ChannelFailure.Title="Error al cargar canal"
25
 Auth.ChannelFailure.Text="Error al cargar la información del canal para %1\n\n%2: %3"
26
 Auth.StreamInfo="Información de Stream"
27
@@ -150,6 +151,7 @@
28
 Basic.AutoConfig.StreamPage.GetStreamKey="Obtener clave de transmisión"
29
 Basic.AutoConfig.StreamPage.MoreInfo="Más información"
30
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar clave de emisión"
31
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Usar clave de transmisión (avanzado)"
32
 Basic.AutoConfig.StreamPage.Service="Servicio"
33
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar todos..."
34
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizado..."
35
@@ -157,6 +159,7 @@
36
 Basic.AutoConfig.StreamPage.StreamKey="Clave de retransmisión"
37
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Enlace)"
38
 Basic.AutoConfig.StreamPage.EncoderKey="Clave del codificador"
39
+Basic.AutoConfig.StreamPage.ConnectedAccount="Cuenta conectada"
40
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimar bitrate con una prueba de ancho de banda (puede tardar unos minutos)"
41
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificación por hardware"
42
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="La codificación por hardware elimina la mayoría del uso de la CPU, pero puede requerir más bitrate para obtener el mismo nivel de calidad."
43
@@ -295,7 +298,7 @@
44
 ConfirmRemove.TextMultiple="¿Seguro que quieres eliminar %1 elementos?"
45
 Output.StartStreamFailed="No se pudo iniciar la emisión"
46
 Output.StartRecordingFailed="No se pudo iniciar grabación"
47
-Output.StartReplayFailed="No se pudo iniciar el búfer de reproducción"
48
+Output.StartReplayFailed="No se pudo iniciar el búfer de repetición"
49
 Output.StartFailedGeneric="No se pudo iniciar la salida. Por favor compruebe los logs para mas detalles. \n\nNota: Si estas usando los codificadores de NVENC o AMD, asegúrate que tus drivers de vídeo están actualizados."
50
 Output.ReplayBuffer.PauseWarning.Title="No se pueden guardar repeticiones mientras está pausado"
51
 Output.ReplayBuffer.PauseWarning.Text="Advertencia: No se pueden guardar repeticiones mientras la grabación está pausada."
52
@@ -316,6 +319,8 @@
53
 Output.RecordError.EncodeErrorMsg="Un error de codificación se produjo mientras se grababa."
54
 Output.BadPath.Title="Ruta de archivo incorrecta"
55
 Output.BadPath.Text="La ruta de salida de archivos establecida no es válida. Por favor, compruebe su configuración para confirmar que se ha establecido una ruta de archivos válida."
56
+Output.NoBroadcast.Title="Ninguna emisión configurada"
57
+Output.NoBroadcast.Text="Necesitas configurar una emisión antes de poder comenzar a transmitir"
58
 LogReturnDialog="Carga de registro exitosa"
59
 LogReturnDialog.Description="Tu archivo de registro ha sido subido. Ahora puedes compartir la URL para fines de depuración o soporte."
60
 LogReturnDialog.Description.Crash="Tu informe de error ha sido subido. Ahora puede compartir la URL para fines de depuración."
61
@@ -328,7 +333,7 @@
62
 Remux.Stop="Detener conversión"
63
 Remux.ClearFinished="Borrar los elementos finalizados"
64
 Remux.ClearAll="Borrar todos los elementos"
65
-Remux.OBSRecording="Grabación OBS"
66
+Remux.OBSRecording="Grabación de OBS"
67
 Remux.FinishedTitle="Conversión finalizada"
68
 Remux.Finished="Grabación convertida"
69
 Remux.FinishedError="Grabación convertida, pero el archivo podría estar incompleto"
70
@@ -355,6 +360,8 @@
71
 MissingFiles.Found="Encontrado"
72
 MissingFiles.AutoSearch="Encontradas coincidencias de archivos adicionales"
73
 MissingFiles.AutoSearchText="OBS ha encontrado coincidencias adicionales para archivos perdidos en ese directorio. ¿Quieres añadirlos?"
74
+MissingFiles.NoMissing.Title="Comprobación de archivos faltantes"
75
+MissingFiles.NoMissing.Text="No parece que falte ningún archivo."
76
 UpdateAvailable="Nueva actualización disponible"
77
 UpdateAvailable.Text="Versión %1.%2.%3 disponible. <a href='%4'> Haga clic aquí para descargarla</a>"
78
 Basic.DesktopDevice1="Audio del escritorio"
79
@@ -385,12 +392,12 @@
80
 Basic.Main.DefaultSceneName.Text="Escena %1"
81
 Basic.Main.AddSceneCollection.Title="Agregar colección de escenas"
82
 Basic.Main.AddSceneCollection.Text="Por favor escriba el nombre de la colección de escenas"
83
-Basic.Main.RenameSceneCollection.Title="Cambiar el nombre de colección de escenas"
84
+Basic.Main.RenameSceneCollection.Title="Renombrar la colección de escenas"
85
 AddProfile.Title="Añadir perfil"
86
 AddProfile.Text="Escriba el nombre del perfil"
87
 AddProfile.WizardCheckbox="Mostrar el asistente de configuración automática"
88
 RenameProfile.Title="Renombrar perfil"
89
-Basic.Main.MixerRename.Title="Cambiar el nombre de la fuente de audio"
90
+Basic.Main.MixerRename.Title="Renombrar la fuente de audio"
91
 Basic.Main.MixerRename.Text="Por favor, introduzca el nombre de la fuente de audio"
92
 Basic.Main.PreviewDisabled="Vista previa desactivada"
93
 Basic.SourceSelect="Crear/seleccionar fuente"
94
@@ -418,6 +425,8 @@
95
 Basic.PropertiesView.FPS.Simple="Valores simples de FPS"
96
 Basic.PropertiesView.FPS.Rational="Valores raciones de FPS"
97
 Basic.PropertiesView.FPS.ValidFPSRanges="Rangos validos de FPS:"
98
+Basic.PropertiesView.UrlButton.Text="¿Abrir este enlace en su navegador predeterminado?"
99
+Basic.PropertiesView.UrlButton.OpenUrl="Abrir URL"
100
 Basic.InteractionWindow="Interactuando con '%1'"
101
 Basic.StatusBar.Reconnecting="Desconectado, reconexión en %2 segundo(s) (tentativa%1)"
102
 Basic.StatusBar.AttemptingReconnect="Intentando volver a conectar... (intento %1)"
103
@@ -427,7 +436,7 @@
104
 Basic.StatusBar.DelayStoppingIn="Retardo (parando en %1 sec)"
105
 Basic.StatusBar.DelayStartingStoppingIn="Retardo (parando en %1 sec, iniciando en %2 sec)"
106
 Basic.StatusBar.RecordingSavedTo="Grabación guardada en '%1'"
107
-Basic.StatusBar.ReplayBufferSavedTo="Búfer de reproducción guardado en '%1'"
108
+Basic.StatusBar.ReplayBufferSavedTo="Búfer de repetición guardado en '%1'"
109
 Basic.StatusBar.ScreenshotSavedTo="Captura de pantalla guardada en '%1'"
110
 Basic.StatusBar.AutoRemuxedTo="Grabación convertida automáticamente en '%1'"
111
 Basic.Filters="Filtros"
112
@@ -472,6 +481,8 @@
113
 Basic.TransformWindow.BoundsType.ScaleToWidth="La escala a la anchura de límites"
114
 Basic.TransformWindow.BoundsType.ScaleToHeight="La escala a la altura de límites"
115
 Basic.TransformWindow.BoundsType.Stretch="Extender hasta los límites"
116
+Basic.TransformWindow.Title="Editar transformación para '%1'"
117
+Basic.TransformWindow.NoSelectedSource="Ninguna fuente seleccionada"
118
 Basic.Main.AddSourceHelp.Title="No se puede agregar la fuente"
119
 Basic.Main.AddSourceHelp.Text="Tienes que tener al menos 1 escena para agregar una fuente."
120
 Basic.Main.Scenes="Escenas"
121
@@ -480,17 +491,21 @@
122
 Basic.Main.Controls="Controles"
123
 Basic.Main.Connecting="Conectando..."
124
 Basic.Main.StartRecording="Iniciar Grabación"
125
-Basic.Main.StartReplayBuffer="Iniciar el búfer de reproducción"
126
+Basic.Main.StartReplayBuffer="Iniciar el Búfer de Repetición"
127
 Basic.Main.SaveReplay="Guardar repetición"
128
 Basic.Main.StartStreaming="Iniciar Transmisión"
129
+Basic.Main.StartBroadcast="Emitir en directo"
130
 Basic.Main.StartVirtualCam="Iniciar Cámara Virtual"
131
 Basic.Main.StopRecording="Detener grabación"
132
 Basic.Main.PauseRecording="Pausar la grabación"
133
 Basic.Main.UnpauseRecording="Reanudar la grabación"
134
 Basic.Main.StoppingRecording="Deteniendo la grabación..."
135
-Basic.Main.StopReplayBuffer="Detener el búfer de reproducción"
136
-Basic.Main.StoppingReplayBuffer="Deteniendo el búfer de reproducción..."
137
+Basic.Main.StopReplayBuffer="Detener el búfer de repetición"
138
+Basic.Main.StoppingReplayBuffer="Deteniendo el búfer de repetición..."
139
+Basic.Main.SetupBroadcast="Administrar emisión"
140
 Basic.Main.StopStreaming="Detener Transmisión"
141
+Basic.Main.StopBroadcast="Finalizar transmisión"
142
+Basic.Main.AutoStopEnabled="Detener automáticamente"
143
 Basic.Main.StoppingStreaming="Deteniendo la trasmisión..."
144
 Basic.Main.ForceStopStreaming="Parar Transmisión (descartar retardo)"
145
 Basic.Main.ShowContextBar="Mostrar barra de herramientas de fuente"
146
@@ -506,9 +521,10 @@
147
 Basic.MainMenu.File.Import="&Importar"
148
 Basic.MainMenu.File.ShowRecordings="Mostrar G&rabaciones"
149
 Basic.MainMenu.File.Remux="Convertir Grabaciones (&M)"
150
-Basic.MainMenu.File.Settings="Configuración (&S)"
151
+Basic.MainMenu.File.Settings="Ajuste&s"
152
 Basic.MainMenu.File.ShowSettingsFolder="Mostrar carpeta de configuración"
153
 Basic.MainMenu.File.ShowProfileFolder="Mostrar carpeta de perfiles"
154
+Basic.MainMenu.File.ShowMissingFiles="Comprobar si faltan archivos"
155
 Basic.MainMenu.AlwaysOnTop="Siempre &al frente"
156
 Basic.MainMenu.File.Exit="Salir (&X)"
157
 Basic.MainMenu.Edit="&Editar"
158
@@ -597,8 +613,8 @@
159
 Basic.Settings.General.SnapDistance="Ajustar la sensibilidad"
160
 Basic.Settings.General.RecordWhenStreaming="Grabar automáticamente cuando se transmite"
161
 Basic.Settings.General.KeepRecordingWhenStreamStops="Mantener la grabación cuando se detiene la transmisión"
162
-Basic.Settings.General.ReplayBufferWhileStreaming="Iniciar el búfer de reproducción automáticamente durante la transmisión"
163
-Basic.Settings.General.KeepReplayBufferStreamStops="Mantener activo el búfer de reproducción cuando la transmisión se detenga"
164
+Basic.Settings.General.ReplayBufferWhileStreaming="Iniciar el búfer de repetición automáticamente durante la transmisión"
165
+Basic.Settings.General.KeepReplayBufferStreamStops="Mantener activo el búfer de repetición cuando la transmisión se detenga"
166
 Basic.Settings.General.SysTray="Bandeja del sistema"
167
 Basic.Settings.General.SysTrayWhenStarted="Minimizar a la bandeja del sistema al iniciar"
168
 Basic.Settings.General.SystemTrayHideMinimize="Minimizar siempre en la bandeja del sistema en lugar de la barra de tareas"
169
@@ -621,6 +637,7 @@
170
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, inferior (8 Escenas)"
171
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, izquierda (8 Escenas)"
172
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, derecha (8 Escenas)"
173
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, superior (18 Escenas)"
174
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, superior (24 Escenas)"
175
 Basic.Settings.Stream="Emisión"
176
 Basic.Settings.Stream.StreamType="Tipo de Emisión"
177
@@ -634,7 +651,7 @@
178
 Basic.Settings.Stream.MissingSettingAlert="Falta configuración de stream"
179
 Basic.Settings.Stream.StreamSettingsWarning="Abrir Ajustes"
180
 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'."
181
-Basic.Settings.Stream.MissingUrl="Falta la URL del stream.\n\nAbre la configuración para introducir la URL en la pestaña 'Emisión'."
182
+Basic.Settings.Stream.MissingUrl="Falta la URL del stream.\n\nAbre los ajustes para introducir la URL en la pestaña 'Emisión'."
183
 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'."
184
 Basic.Settings.Stream.IgnoreRecommended="Ignorar las recomendaciones de configuración del servicio de streaming"
185
 Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Anular los ajustes recomendados"
186
@@ -655,9 +672,9 @@
187
 Basic.Settings.Output.Mode.Simple="Sencillo"
188
 Basic.Settings.Output.Mode.Adv="Avanzado"
189
 Basic.Settings.Output.Mode.FFmpeg="Salida de FFmpeg"
190
-Basic.Settings.Output.UseReplayBuffer="Activar el búfer de reproducción"
191
+Basic.Settings.Output.UseReplayBuffer="Activar el búfer de repetición"
192
 Basic.Settings.Output.ReplayBuffer.SecondsMax="Tiempo máximo de la repetición"
193
-Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memoria máxima (MB)"
194
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memoria máxima (Megabytes)"
195
 Basic.Settings.Output.ReplayBuffer.Estimate="Uso estimado de memoria: %1 MB"
196
 Basic.Settings.Output.ReplayBuffer.EstimateUnknown="No se puede estimar el uso de memoria. Establezca el límite máximo de memoria."
197
 Basic.Settings.Output.ReplayBuffer.Prefix="Prefijo del nombre de archivo del búfer"
198
@@ -919,3 +936,68 @@
199
 ContextBar.MediaControls.PlaylistPrevious="Anterior en la lista de reproducción"
200
 ContextBar.MediaControls.MediaProperties="Propiedades del Medio"
201
 ContextBar.MediaControls.BlindSeek="Widget Barra de reproducción"
202
+YouTube.Auth.Ok="Se completó la autorización correctamente.\nAhora puede cerrar esta página."
203
+YouTube.Auth.NoCode="No se completó el proceso de autorización."
204
+YouTube.Auth.NoChannels="No hay canal(es) disponible(s) en la cuenta seleccionada"
205
+YouTube.Auth.WaitingAuth.Title="Autorización de usuario de YouTube"
206
+YouTube.Auth.WaitingAuth.Text="Por favor, complete la autorización en su navegador externo.<br>Si el navegador externo no se abre, siga este enlace y complete la autorización:<br>%1"
207
+YouTube.AuthError.Text="No se pudo obtener información del canal: %1."
208
+YouTube.Actions.WindowTitle="Configuración de emisión de YouTube - Canal: %1"
209
+YouTube.Actions.CreateNewEvent="Crear nueva emisión"
210
+YouTube.Actions.ChooseEvent="Seleccionar emisión existente"
211
+YouTube.Actions.Title="Título*"
212
+YouTube.Actions.MyBroadcast="Mi transmisión"
213
+YouTube.Actions.Description="Descripción"
214
+YouTube.Actions.Privacy="Privacidad*"
215
+YouTube.Actions.Privacy.Private="Privado"
216
+YouTube.Actions.Privacy.Public="Público"
217
+YouTube.Actions.Privacy.Unlisted="Oculto"
218
+YouTube.Actions.Category="Categoría"
219
+YouTube.Actions.Thumbnail="Miniatura"
220
+YouTube.Actions.Thumbnail.SelectFile="Seleccionar archivo..."
221
+YouTube.Actions.Thumbnail.NoFileSelected="Ningún archivo seleccionado"
222
+YouTube.Actions.Thumbnail.ClearFile="Borrar"
223
+YouTube.Actions.MadeForKids="¿El vídeo se ha creado para niños?*"
224
+YouTube.Actions.MadeForKids.Yes="Sí, está hecho para niños"
225
+YouTube.Actions.MadeForKids.No="No, no está hecho para niños"
226
+YouTube.Actions.AdditionalSettings="Ajustes adicionales"
227
+YouTube.Actions.Latency="Latencia"
228
+YouTube.Actions.Latency.Low="Baja"
229
+YouTube.Actions.Latency.UltraLow="Ultra baja"
230
+YouTube.Actions.EnableAutoStart="Habilitar el inicio automático"
231
+YouTube.Actions.EnableAutoStop="Habilitar detención automática"
232
+YouTube.Actions.AutoStartStop.TT="Indica si esta emisión programada debe iniciarse automáticamente"
233
+YouTube.Actions.EnableDVR="Habilitar DVR"
234
+YouTube.Actions.360Video="Vídeo 360"
235
+YouTube.Actions.ScheduleForLater="Programar para más tarde"
236
+YouTube.Actions.RememberSettings="Recordar estos ajustes"
237
+YouTube.Actions.Create_Ready="Crear emisión"
238
+YouTube.Actions.Create_GoLive="Crear emisión y comenzar a transmitir"
239
+YouTube.Actions.Choose_Ready="Seleccionar emisión"
240
+YouTube.Actions.Choose_GoLive="Seleccionar emisión y comenzar a transmitir"
241
+YouTube.Actions.Create_Schedule="Programar emisión"
242
+YouTube.Actions.Create_Schedule_Ready="Programar y seleccionar emisión"
243
+YouTube.Actions.Dashboard="Abrir YouTube Studio"
244
+YouTube.Actions.Error.Title="Error al crear la transmisión"
245
+YouTube.Actions.Error.Text="Error de acceso a YouTube '%1'.<br/>La descripción detallada del error se puede encontrar en <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developeropers.google.com/youtube/v3/live/docs/errors</a>"
246
+YouTube.Actions.Error.General="Error de acceso a YouTube. Compruebe la conexión de red o el acceso al servidor de YouTube."
247
+YouTube.Actions.Error.NoBroadcastCreated="Error al crear la transmisión '%1'.<br/>La descripción detallada del error se puede encontrar en <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developeropers.google.com/youtube/v3/live/docs/errors</a>"
248
+YouTube.Actions.Error.NoStreamCreated="No se creó ninguna transmisión. Vuelva a vincular la cuenta."
249
+YouTube.Actions.Error.YouTubeApi="Error en la API de YouTube. Para más información, consulte el archivo de registro."
250
+YouTube.Actions.Error.BroadcastNotFound="No se encontró la emisión seleccionada."
251
+YouTube.Actions.Error.FileMissing="El archivo seleccionado no existe."
252
+YouTube.Actions.Error.FileOpeningFailed="No se pudo abrir el archivo seleccionado"
253
+YouTube.Actions.Error.FileTooLarge="El archivo seleccionado es demasiado grande (Límite: 2 MiB)."
254
+YouTube.Actions.EventsLoading="Cargando lista de eventos..."
255
+YouTube.Actions.EventCreated.Title="Evento Creado"
256
+YouTube.Actions.EventCreated.Text="Evento creado con éxito."
257
+YouTube.Actions.Stream="Transmitir"
258
+YouTube.Actions.Stream.ScheduledFor="Programado para %1"
259
+YouTube.Actions.Stream.Resume="Reanudar la transmisión interrumpida"
260
+YouTube.Actions.Stream.YTStudio="Creado automáticamente por YouTube Studio"
261
+YouTube.Actions.Notify.CreatingBroadcast="Creando una nueva transmisión en vivo, por favor espere..."
262
+YouTube.Actions.AutoStartStreamingWarning.Title="Requiere inicio manual"
263
+YouTube.Actions.AutoStartStreamingWarning="El inicio automático está deshabilitado para este evento, haga clic en \"Emitir en directo\" para iniciar su transmisión."
264
+YouTube.Actions.AutoStopStreamingWarning="No podrás reconectar.<br>Tu transmisión se detendrá y ya no estarás en vivo."
265
+YouTube.Errors.liveStreamingNotEnabled="El trasmisión en vivo no está habilitada en el canal de YouTube seleccionado.<br/><br/>Vea <a href='https://www.youtube.com/features'>youtube.com/features</a> para más información."
266
+YouTube.Errors.livePermissionBlocked="La transmisión en vivo no está disponible en el canal de YouTube seleccionado.<br/>Tenga en cuenta que puede tardar hasta 24 horas en estar disponible la transmisión en vivo después de habilitarla en la configuración de su canal.<br/><br/>Ver <a href='https://www.youtube.com/features'>youtube.com/features</a> para más detalles."
267
obs-studio-27.0.1.tar.xz/UI/data/locale/eu-ES.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/eu-ES.ini Changed
72
 
1
@@ -153,6 +153,7 @@
2
 Basic.AutoConfig.StreamPage.GetStreamKey="Lortu transmisio giltza"
3
 Basic.AutoConfig.StreamPage.MoreInfo="Informazio Gehiago"
4
 Basic.AutoConfig.StreamPage.UseStreamKey="Erabili transmisio giltza"
5
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Erabili transmisioaren gakoa (aurreratua)"
6
 Basic.AutoConfig.StreamPage.Service="Zerbitzua"
7
 Basic.AutoConfig.StreamPage.Service.ShowAll="Erakutsi denak..."
8
 Basic.AutoConfig.StreamPage.Service.Custom="Pertsonalizatuta..."
9
@@ -160,6 +161,7 @@
10
 Basic.AutoConfig.StreamPage.StreamKey="Transmisio giltza"
11
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Esteka)"
12
 Basic.AutoConfig.StreamPage.EncoderKey="Kodetzailearen gakoa"
13
+Basic.AutoConfig.StreamPage.ConnectedAccount="Lotutako kontua"
14
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Kalkulatu bit emaria banda zabaleraren testaren bidez (minutu batzuk beharko ditu)"
15
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hobetsi hardware-kodeketa"
16
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-kodeketa txikiagotzen du PUZaren erabilera, baina bit emari handiagoa eskatzen du kalitate maila bera lortzeko."
17
@@ -425,6 +427,9 @@
18
 Basic.PropertiesView.FPS.Simple="FPS-ko balio arruntak"
19
 Basic.PropertiesView.FPS.Rational="FPS-ko balio arrazionalak"
20
 Basic.PropertiesView.FPS.ValidFPSRanges="Baliozko FPS-ko tarteak:"
21
+Basic.PropertiesView.UrlButton.Text="Ireki esteka hau zure nabigatzaile lehenetsian?"
22
+Basic.PropertiesView.UrlButton.Text.Url="URLa: %1"
23
+Basic.PropertiesView.UrlButton.OpenUrl="Ireki URL-a"
24
 Basic.InteractionWindow="Elkarrekintza '%1'-rekin"
25
 Basic.StatusBar.Reconnecting="Konexiorik gabe, %2 segundo barru birkonektatzen (saiakera %1)"
26
 Basic.StatusBar.AttemptingReconnect="Birkonektatzen saiatzen... (saiakera %1)"
27
@@ -629,6 +634,7 @@
28
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontala, behean (8 eszena)"
29
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Bertikala, ezkerrean (8 eszena)"
30
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Bertikala, eskuinean (8 eszena)"
31
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontala, goian (18 eszena)"
32
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontala, goian (24 eszena)"
33
 Basic.Settings.Stream="Transmisioa"
34
 Basic.Settings.Stream.StreamType="Transmisio-mota"
35
@@ -934,3 +940,36 @@
36
 ContextBar.MediaControls.PlaylistNext="Hurrengoa Erreprodukzio-zerrendan"
37
 ContextBar.MediaControls.PlaylistPrevious="Aurrekoa Erreprodukzio-zerrendan"
38
 ContextBar.MediaControls.MediaProperties="Media propietateak"
39
+YouTube.Auth.WaitingAuth.Title="YouTuberen erabiltzaile baimena"
40
+YouTube.Auth.WaitingAuth.Text="Osatu baimena zure nabigatzailean.<br>Nabigatzailea irekitzen ez bada jarraitu esteka hau baimena eskuratzeko:<br>%1"
41
+YouTube.Actions.Title="Izenburua"
42
+YouTube.Actions.MyBroadcast="Nire emisioa"
43
+YouTube.Actions.Description="Deskribapena"
44
+YouTube.Actions.Privacy="Pribatutasuna*"
45
+YouTube.Actions.Privacy.Private="Pribatua"
46
+YouTube.Actions.Privacy.Public="Publikoa"
47
+YouTube.Actions.Privacy.Unlisted="Zerrendatu gabea"
48
+YouTube.Actions.Category="Kategoria"
49
+YouTube.Actions.MadeForKids="Bideo hau haurrentzat bereziki sortuta dago?*"
50
+YouTube.Actions.MadeForKids.Yes="Bai, haurrentzat da"
51
+YouTube.Actions.MadeForKids.No="Ez, ez da haurrentzat"
52
+YouTube.Actions.AdditionalSettings="Ezarpen gehiago:"
53
+YouTube.Actions.Latency="Atzerapena"
54
+YouTube.Actions.Latency.Normal="Normala"
55
+YouTube.Actions.Latency.Low="Baxua"
56
+YouTube.Actions.Latency.UltraLow="Baxu baxua"
57
+YouTube.Actions.EnableAutoStart="Gaitu abiatze automatikoa"
58
+YouTube.Actions.EnableAutoStop="Gaitu gelditze automatikoa"
59
+YouTube.Actions.EnableDVR="Gaitu DVR"
60
+YouTube.Actions.360Video="360 bideoa"
61
+YouTube.Actions.ScheduleForLater="Gerorako programatu"
62
+YouTube.Actions.Error.Title="Errorea zuzeneko emisioa sortzean"
63
+YouTube.Actions.Error.Text="'%1'errorea YouTuben sartzean.<br/>Errorearen deskribapen zehatza topatu dezakezu esteka honetan: <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
64
+YouTube.Actions.Error.NoBroadcastCreated="'%1' errorea emisioa sortzean.<br/>Errorearen gaineko deskribapen zehatza topatu dezakezu esteka honetan: <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
65
+YouTube.Actions.EventsLoading="Ekitaldien zerrenda kargatzen..."
66
+YouTube.Actions.EventCreated.Title="Ekitaldia sortu da."
67
+YouTube.Actions.EventCreated.Text="Ekitaldia behar bezala sortu da."
68
+YouTube.Actions.Stream="Transmisioa"
69
+YouTube.Actions.Stream.YTStudio="YouTube Studiok automatikoki sortua"
70
+YouTube.Actions.Notify.CreatingBroadcast="Zuzeneko igorpen berria sortzen, itxaron mesedez..."
71
+YouTube.Actions.AutoStartStreamingWarning.Title="Eskuzko hasiera behar da"
72
obs-studio-27.0.1.tar.xz/UI/data/locale/fa-IR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/fa-IR.ini Changed
173
 
1
@@ -1,4 +1,4 @@
2
-Language="انگلیسی"
3
+Language="فارسی"
4
 OK="باشه"
5
 Apply="اعمال تغییرات"
6
 Cancel="لغو"
7
@@ -112,6 +112,7 @@
8
 Auth.InvalidScope.Text="الزامات تأیید اعتبار برای %1 تغییر کرده است. برخی از ویژگی ها ممکن است در دسترس نباشند."
9
 Auth.LoadingChannel.Title="بارگیری اطلاعات کانال..."
10
 Auth.LoadingChannel.Text="در حال بارگیری اطلاعات کانال %1، لطفاً صبر کنید..."
11
+Auth.LoadingChannel.Error="اطلاعات کانال دریافت نشد."
12
 Auth.ChannelFailure.Title="کانال بارگیری نشد"
13
 Auth.ChannelFailure.Text="اطلاعات کانال برای %1\n\n%2: %3 بارگیری نشد"
14
 Auth.Chat="چت"
15
@@ -154,6 +155,7 @@
16
 Basic.AutoConfig.StreamPage.GetStreamKey="دریافت کلید پخش زنده"
17
 Basic.AutoConfig.StreamPage.MoreInfo="اطلاعات بیشتر"
18
 Basic.AutoConfig.StreamPage.UseStreamKey="کلید پخش زنده"
19
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="استفاده از کلید جریان (پیشرفته)"
20
 Basic.AutoConfig.StreamPage.Service="سرویس"
21
 Basic.AutoConfig.StreamPage.Service.ShowAll="نمایش همه..."
22
 Basic.AutoConfig.StreamPage.Service.Custom="سفارشی..."
23
@@ -161,6 +163,7 @@
24
 Basic.AutoConfig.StreamPage.StreamKey="کلید پخش زنده"
25
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(لینک)"
26
 Basic.AutoConfig.StreamPage.EncoderKey="کلید رمزگذار"
27
+Basic.AutoConfig.StreamPage.ConnectedAccount="حساب کاربری متصل"
28
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="برآورد میزان بیت ریت بر ثانیه با تست پهنای باند (ممکن است چند دقیقه طول بکشد)"
29
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="کد گذاری سخت افزاری را ترجیح می دهم"
30
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="رمزگذاری سخت افزاری مصرف زیاد CPU را از بین می برد، اما ممکن است برای بدست آوردن همان کیفیت کیفیت به بیت ریت بیشتری نیاز داشته باشد."
31
@@ -321,6 +324,8 @@
32
 Output.RecordError.EncodeErrorMsg="هنگام ضبط خطایی در انکودر رخ داده است."
33
 Output.BadPath.Title="مسیر فایل غیر قابل قبول است"
34
 Output.BadPath.Text="مسیر خروجی فایل پیکربندی شده نامعتبر است. لطفاً تنظیمات خود را بررسی کنید تا تأیید کنید مسیر پرونده معتبری تنظیم شده است."
35
+Output.NoBroadcast.Title="پخش تنظیم نشده"
36
+Output.NoBroadcast.Text="قبل از شروع لایو استریم، باید آن را تنظیم کنید"
37
 LogReturnDialog="گزارش با موفقیت آپلود شد"
38
 LogReturnDialog.Description="فایل گزارش شما آپلود شد. اکنون می توانید آدرس اینترنتی را برای اشکال زدایی یا اهداف پشتیبانی به اشتراک بگذارید."
39
 LogReturnDialog.Description.Crash="گزارش خرابی شما آپلود شد. اکنون می توانید آدرس اینترنتی را برای اهداف رفع اشکال به اشتراک بگذارید."
40
@@ -359,6 +364,8 @@
41
 MissingFiles.Found="یافت شد"
42
 MissingFiles.AutoSearch="موارد اضافی پرونده پیدا شد"
43
 MissingFiles.AutoSearchText="OBS موارد منطبق دیگری را برای پرونده های گمشده در آن فهرست پیدا کرده است. آیا می خواهید آنها را اضافه کنید؟"
44
+MissingFiles.NoMissing.Title="بررسی فایل های گمشده"
45
+MissingFiles.NoMissing.Text="به نظر می رسد هیچ فایلی گم نشده است."
46
 UpdateAvailable="بروزرسانی جدید در دسترس است"
47
 UpdateAvailable.Text="نسخه %1.%2.%3 اکنون در دسترس است. <a href='%4'> برای بارگیری اینجا کلیک کنید </a>"
48
 Basic.DesktopDevice1="صدای دسکتاپ"
49
@@ -430,6 +437,9 @@
50
 Basic.PropertiesView.FPS.Simple="مقادیر ساده fps"
51
 Basic.PropertiesView.FPS.Rational="مقادیر اعشاری fps"
52
 Basic.PropertiesView.FPS.ValidFPSRanges="محدود های درست fps:"
53
+Basic.PropertiesView.UrlButton.Text="این پیوند را در مرورگر وب پیش فرض خود باز می کنید?"
54
+Basic.PropertiesView.UrlButton.Text.Url="نشانی: %1"
55
+Basic.PropertiesView.UrlButton.OpenUrl="باز کردن نشانی"
56
 Basic.InteractionWindow="تعامل با '%1'"
57
 Basic.StatusBar.Reconnecting="اتصال قطع شده،اتصال دوباره در %2 ثانیه (تلاش شماره %1)"
58
 Basic.StatusBar.AttemptingReconnect="تلاش برای اتصال دوباره... (تلاش شماره %1)"
59
@@ -484,6 +494,8 @@
60
 Basic.TransformWindow.BoundsType.ScaleToWidth="مقیاس تا عرض مرزها"
61
 Basic.TransformWindow.BoundsType.ScaleToHeight="مقیاس تا ارتفاع مرزها"
62
 Basic.TransformWindow.BoundsType.Stretch="کشیدن تا مرزها"
63
+Basic.TransformWindow.Title="ویرایش تبدیل برای '%1'"
64
+Basic.TransformWindow.NoSelectedSource="بدون انتخاب منبع"
65
 Basic.Main.AddSourceHelp.Title="منبع اضافه نمیشود"
66
 Basic.Main.AddSourceHelp.Text="برای افزودن منبع باید حداقل 1 صحنه داشته باشید."
67
 Basic.Main.Scenes="صحنه ها"
68
@@ -495,6 +507,7 @@
69
 Basic.Main.StartReplayBuffer="شروع بافر پخش مجدد"
70
 Basic.Main.SaveReplay="ذخیره بازپخش"
71
 Basic.Main.StartStreaming="شروع استریم"
72
+Basic.Main.StartBroadcast="برو به لایو!"
73
 Basic.Main.StartVirtualCam="شروع دوربین مجازی"
74
 Basic.Main.StopRecording="پایان ضبط"
75
 Basic.Main.PauseRecording="توقف ضبط"
76
@@ -502,7 +515,10 @@
77
 Basic.Main.StoppingRecording="درحال پایان ضبط..."
78
 Basic.Main.StopReplayBuffer="توقف بافر بازپخش"
79
 Basic.Main.StoppingReplayBuffer="توقف پخش بافر..."
80
+Basic.Main.SetupBroadcast="تنظیم کردن پخش"
81
 Basic.Main.StopStreaming="توقف استریم"
82
+Basic.Main.StopBroadcast="پایان پخش"
83
+Basic.Main.AutoStopEnabled="قطع خودکار"
84
 Basic.Main.StoppingStreaming="درحال توقف استریم..."
85
 Basic.Main.ForceStopStreaming="توقف استریم (تأخیر در صرف نظر کردن)"
86
 Basic.Main.ShowContextBar="نمایش نوار ابزار منبع"
87
@@ -521,6 +537,7 @@
88
 Basic.MainMenu.File.Settings="&تنظیمات"
89
 Basic.MainMenu.File.ShowSettingsFolder="نمایش پوشه تنظیمات"
90
 Basic.MainMenu.File.ShowProfileFolder="نمایش پوشه نمایه"
91
+Basic.MainMenu.File.ShowMissingFiles="بررسی برای فایل های گمشده"
92
 Basic.MainMenu.AlwaysOnTop="&همیشه در بالا"
93
 Basic.MainMenu.File.Exit="خروج"
94
 Basic.MainMenu.Edit="ویرایش"
95
@@ -634,6 +651,7 @@
96
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="افقی ، پایین (8 صحنه)"
97
 Basic.Settings.General.MultiviewLayout.Vertical.Left="عمودی ، چپ (8 صحنه)"
98
 Basic.Settings.General.MultiviewLayout.Vertical.Right="عمودی ، راست (8 صحنه)"
99
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="افقی ، بالا (18 صحنه)"
100
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="افقی ، بالا (24 صحنه)"
101
 Basic.Settings.Stream="استریم"
102
 Basic.Settings.Stream.StreamType="نوع لایو استریم"
103
@@ -944,3 +962,69 @@
104
 ContextBar.MediaControls.PlaylistPrevious="قبلی در لیست پخش"
105
 ContextBar.MediaControls.MediaProperties="ویژگی های رسانه"
106
 ContextBar.MediaControls.BlindSeek="ویجت جستجوی رسانه"
107
+YouTube.Auth.Ok="مجوز با موفقیت انجام شد.\nاکنون می توانید این صفحه را ببندید."
108
+YouTube.Auth.NoCode="فرایند مجوز کامل نشده است."
109
+YouTube.Auth.NoChannels="هیچ کانال (های) در حساب انتخابی موجود نیست"
110
+YouTube.Auth.WaitingAuth.Title="مجوز کاربر YouTube"
111
+YouTube.Auth.WaitingAuth.Text="لطفاً مجوز را در مرورگر خارجی خود تکمیل کنید. <br> اگر مرورگر خارجی باز نشد ، این پیوند را دنبال کنید و مجوز را تکمیل کنید: <br>%1"
112
+YouTube.AuthError.Text="دریافت اطلاعات کانال ناموفق بود: %1."
113
+YouTube.Actions.WindowTitle="راه اندازی پخش یوتیوب - کانال %1"
114
+YouTube.Actions.CreateNewEvent="ایجاد پخش جدید"
115
+YouTube.Actions.ChooseEvent="انتخاب پخش های موجود"
116
+YouTube.Actions.Title="عنوان*"
117
+YouTube.Actions.MyBroadcast="پخش جریان من"
118
+YouTube.Actions.Description="توضیحات"
119
+YouTube.Actions.Privacy="حریم خصوصی*"
120
+YouTube.Actions.Privacy.Private="خصوصی"
121
+YouTube.Actions.Privacy.Public="عمومی"
122
+YouTube.Actions.Privacy.Unlisted="فهرستنشده"
123
+YouTube.Actions.Category="دسته بندی"
124
+YouTube.Actions.Thumbnail="تصویر روی صفحه (تامبنیل)"
125
+YouTube.Actions.Thumbnail.SelectFile="انتخاب فایل"
126
+YouTube.Actions.Thumbnail.NoFileSelected="هیچ فایلی انتخاب نشده"
127
+YouTube.Actions.Thumbnail.ClearFile="پاک کردن"
128
+YouTube.Actions.MadeForKids="آیا این ویدیو برای کودکان ساخته شده است؟*"
129
+YouTube.Actions.MadeForKids.Yes="بله ، برای بچه ها ساخته شده است"
130
+YouTube.Actions.MadeForKids.No="نه ، برای بچه ها ساخته نشده است"
131
+YouTube.Actions.AdditionalSettings="تنظیمات اضافی:"
132
+YouTube.Actions.Latency="تأخیر"
133
+YouTube.Actions.Latency.Normal="معمولی"
134
+YouTube.Actions.Latency.Low="کم"
135
+YouTube.Actions.Latency.UltraLow="بسیار کم"
136
+YouTube.Actions.EnableAutoStart="راه اندازی خودکار را فعال کنید"
137
+YouTube.Actions.EnableAutoStop="توقف خودکار را فعال کنید"
138
+YouTube.Actions.AutoStartStop.TT="نشان میدهد که آیا پخش برنامه ریزی شده باید به صورت خودکار شروع شود یا نه"
139
+YouTube.Actions.EnableDVR="فعال کردن DVR"
140
+YouTube.Actions.360Video="ویدئوی 360 درجه"
141
+YouTube.Actions.ScheduleForLater="برنامه ریزی کردن برای بعد"
142
+YouTube.Actions.RememberSettings="این تنظیمات را به یاد داشته باش"
143
+YouTube.Actions.Create_Ready="ایجاد پخش"
144
+YouTube.Actions.Create_GoLive="ایجاد پخش و شروع لایو استریم"
145
+YouTube.Actions.Choose_Ready="انتخاب پخش"
146
+YouTube.Actions.Choose_GoLive="انتخاب پخش و شروع لایو استریم"
147
+YouTube.Actions.Create_Schedule="زمان بندی پخش"
148
+YouTube.Actions.Create_Schedule_Ready="زمان بندی و انتخاب پخش"
149
+YouTube.Actions.Dashboard="باز کردن استودیو یوتیوب"
150
+YouTube.Actions.Error.Title="خطای ایجاد پخش مستقیم"
151
+YouTube.Actions.Error.Text="خطای دسترسی یوتیوب '%1'. <br/> شرح مشروح خطا را می توانید در<a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>پیدا کنید."
152
+YouTube.Actions.Error.General="خطای دسترسی به YouTube. لطفاً اتصال شبکه یا دسترسی به سرور YouTube خود را بررسی کنید."
153
+YouTube.Actions.Error.NoBroadcastCreated="خطای ایجاد پخش زنده '%1'. <br/> شرح مشروح خطا را می توانید در <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> پیدا کنید."
154
+YouTube.Actions.Error.NoStreamCreated="جریانی ایجاد نشد. لطفاً حساب خود را مجدداً پیوند دهید."
155
+YouTube.Actions.Error.YouTubeApi="خطای واسط YouTube. لطفاً برای اطلاعات بیشتر فایل log را ببینید."
156
+YouTube.Actions.Error.BroadcastNotFound="پخش جریانی منتخب یافت نشد."
157
+YouTube.Actions.Error.FileMissing="فایل انتخاب شده وجود ندارد"
158
+YouTube.Actions.Error.FileOpeningFailed="خطا در هنگام باز کردن فایل"
159
+YouTube.Actions.Error.FileTooLarge="فالی انتخاب شده خیلی بزرگ است (محدودیت 2 مگابایت)"
160
+YouTube.Actions.EventsLoading="در حال بارگیری فهرست رویدادها..."
161
+YouTube.Actions.EventCreated.Title="رویداد ایجاد شد"
162
+YouTube.Actions.EventCreated.Text="رویداد با موفقیت ایجاد شد."
163
+YouTube.Actions.Stream="جریان"
164
+YouTube.Actions.Stream.ScheduledFor="برای %1 برنامه ریزی شده"
165
+YouTube.Actions.Stream.Resume="از سرگیری جریان قطع شده"
166
+YouTube.Actions.Stream.YTStudio="به طور خودکار توسط YouTube Studio ایجاد شده است"
167
+YouTube.Actions.Notify.CreatingBroadcast="در حال ایجاد پخش زنده جدید ، لطفاً منتظر بمانید ..."
168
+YouTube.Actions.AutoStartStreamingWarning.Title="شروع دستی مورد نیاز"
169
+YouTube.Actions.AutoStartStreamingWarning="شروع خودکار برای این رویداد لغو شده است ، بر روی \"برو به لایو\" کلیک کنید تا پخش شروع شود"
170
+YouTube.Actions.AutoStopStreamingWarning="شما نمی توانید دوباره وصل شوید. <br> جریان شما متوقف می شود و دیگر زنده نخواهید بود."
171
+YouTube.Errors.liveStreamingNotEnabled="پخش مستقیم در کانال انتخابی YouTube فعال نیست. <br/><br/>برای اطلاعات بیشتر به<a href='https://www.youtube.com/features'>youtube.com/features</a> مراجعه کنید."
172
+YouTube.Errors.livePermissionBlocked="پخش مستقیم در کانال انتخابی YouTube در دسترس نیست.<br/>لطفاً توجه داشته باشید که پس از فعال کردن آن در تنظیمات کانال شما ممکن است 24 ساعت طول بکشد.<br/><br/>مشاهده<a href='https://www.youtube.com/features'>youtube.com/features</a> برای جزئیات بیشتر."
173
obs-studio-27.0.1.tar.xz/UI/data/locale/fi-FI.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/fi-FI.ini Changed
180
 
1
@@ -70,8 +70,8 @@
2
 Defaults="Oletukset"
3
 HideMixer="Piilota mikseristä"
4
 TransitionOverride="Siirtymän ohitus"
5
-ShowTransition="Näytä Siirtymä"
6
-HideTransition="Piilota Siirtymä"
7
+ShowTransition="Näytä siirtymä"
8
+HideTransition="Piilota siirtymä"
9
 None="Ei mitään"
10
 StudioMode.Preview="Esikatselu"
11
 StudioMode.Program="Ohjelma"
12
@@ -109,6 +109,7 @@
13
 Auth.InvalidScope.Text="Todennus vaatimukset %1:iin ovat muuttuneet. Jotkin ominaisuuksista eivät välttämättä ole käytössä."
14
 Auth.LoadingChannel.Title="Ladataan kanavan tietoja..."
15
 Auth.LoadingChannel.Text="Ladataan kanavan tietoja %1:stä, ole hyvä ja odota..."
16
+Auth.LoadingChannel.Error="Kanavan tietoja ei saatu."
17
 Auth.ChannelFailure.Title="Kanavan lataus epäonnistui"
18
 Auth.ChannelFailure.Text="Kanavan tietojen lataaminen epäonnistui %1:sta\n\n%2: %3"
19
 Auth.StreamInfo="Lähetyksen tiedot"
20
@@ -156,6 +157,7 @@
21
 Basic.AutoConfig.StreamPage.Server="Palvelin"
22
 Basic.AutoConfig.StreamPage.StreamKey="Striimiavain"
23
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Linkki)"
24
+Basic.AutoConfig.StreamPage.ConnectedAccount="Yhdistetty tili"
25
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Arvioi bittinopeus kaistan nopeustestin avulla (saattaa kestää muutaman minuutin)"
26
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Suosi laitteistoenkoodausta"
27
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Laitteistoenkoodaus poistaa suurimman osan CPU-käytöstä, mutta saattaa vaatia suuremman bittinopeuden saavuttaakseen saman laadun."
28
@@ -237,6 +239,8 @@
29
 Undo.Filters="Suodatin muutokset '%1'"
30
 Undo.Filters.Paste.Single="Liitä '%1'-Suodatin '%2'-Suodattimeen"
31
 Undo.Transform.Rotate="Kierto '%1'"
32
+Undo.Volume.Mute="Mykistä '%1'"
33
+Undo.Volume.Unmute="Poista mykistys '%1'"
34
 TransitionNameDlg.Text="Syötä siirtymän nimi"
35
 TransitionNameDlg.Title="Siirtymän nimi"
36
 TitleBar.Profile="Profiili"
37
@@ -281,6 +285,8 @@
38
 Output.RecordError.EncodeErrorMsg="Tallennuksen aikana tapahtui enkoodausvirhe."
39
 Output.BadPath.Title="Viallinen tiedostopolku"
40
 Output.BadPath.Text="Asetettu tiedostopolku on viallinen. Tarkista asetuksistasi, että tiedostopolku on asetettu oikein."
41
+Output.NoBroadcast.Title="Lähetystä ei ole määritetty"
42
+Output.NoBroadcast.Text="Sinun täytyy määrittää lähetys, ennen kuin voit aloittaa striimauksen."
43
 LogReturnDialog="Lokitiedoston lähetys onnistui"
44
 LogReturnDialog.Description="Lokisi on ladattu. Nyt voit jakaa URL-osoitteen virheenkorjausta tai  tukea varten."
45
 LogReturnDialog.Description.Crash="Kaatumisraporttisi on ladattu. Nyt voit jakaa URL-osoitteen virheenkorjausta tai  tukea varten."
46
@@ -320,6 +326,8 @@
47
 MissingFiles.Found="Löydetty"
48
 MissingFiles.AutoSearch="Lisäisiä tiedostovastaavuuksia löydetty"
49
 MissingFiles.AutoSearchText="OBS on löytänyt lisäisiä vastaavuuksia puuttuville tiedostoille kyseisessä hakemistossa. Haluatko lisätä ne?"
50
+MissingFiles.NoMissing.Title="Puuttuvien tiedostojen tarkistus"
51
+MissingFiles.NoMissing.Text="Yksikään tiedosto ei vaikuta puuttuvan."
52
 UpdateAvailable="Uusi päivitys saatavilla"
53
 UpdateAvailable.Text="Versio %1.%2.%3 on nyt saatavilla. <a href='%4'>Lataa tästä</a>"
54
 Basic.DesktopDevice1="Äänentoistolaite"
55
@@ -377,6 +385,9 @@
56
 Basic.PropertiesView.FPS.Simple="Yksinkertaiset FPS-arvot"
57
 Basic.PropertiesView.FPS.Rational="Rationaaliset FPS-arvot"
58
 Basic.PropertiesView.FPS.ValidFPSRanges="Kelvolliset FPS-alueet:"
59
+Basic.PropertiesView.UrlButton.Text="Avataanko tämä linkki oletusselaimessasi?"
60
+Basic.PropertiesView.UrlButton.Text.Url="URL-osoite: %1"
61
+Basic.PropertiesView.UrlButton.OpenUrl="Avaa URL-osoite"
62
 Basic.InteractionWindow="Vuorovaikutetaan '%1' kanssa"
63
 Basic.StatusBar.Reconnecting="Yhteys katkaistu, yhdistetään uudelleen %2 sekunnissa (yrityskerta %1)"
64
 Basic.StatusBar.AttemptingReconnect="Yhdistetään uudelleen... (yrityskerta %1)"
65
@@ -385,6 +396,8 @@
66
 Basic.StatusBar.DelayStartingIn="Viive (alku %1 sekunnissa)"
67
 Basic.StatusBar.DelayStoppingIn="Viive (loppuu %1 sekunnissa)"
68
 Basic.StatusBar.DelayStartingStoppingIn="Viive (loppuu %1 ja alkaa %2 sekunnissa)"
69
+Basic.StatusBar.RecordingSavedTo="Tallenne tallennettu sijaintiin '%1'"
70
+Basic.StatusBar.ScreenshotSavedTo="Kuvakaappaus tallennettu sijaintiin '%1'"
71
 Basic.Filters="Suodattimet"
72
 Basic.Filters.AsyncFilters="Ääni/kuva -suodattimet"
73
 Basic.Filters.AudioFilters="Äänisuodattimet"
74
@@ -410,6 +423,7 @@
75
 Basic.TransformWindow.CropLeft="Rajaa Vasemmalle"
76
 Basic.TransformWindow.CropRight="Rajaa Oikealle"
77
 Basic.TransformWindow.CropTop="Rajaa Ylhäällä"
78
+Basic.TransformWindow.CropBottom="Rajaa alhaalta"
79
 Basic.TransformWindow.Alignment.TopLeft="Ylävasen"
80
 Basic.TransformWindow.Alignment.TopCenter="Yläkeski"
81
 Basic.TransformWindow.Alignment.TopRight="Yläoikea"
82
@@ -426,6 +440,7 @@
83
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skaalaa pituuden rajoihin"
84
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skaalaa korkeuden rajoihin"
85
 Basic.TransformWindow.BoundsType.Stretch="Venytä rajoihin"
86
+Basic.TransformWindow.NoSelectedSource="Lähdettä ei ole valittu"
87
 Basic.Main.AddSourceHelp.Title="Lähdettä ei voi lisätä"
88
 Basic.Main.AddSourceHelp.Text="Tarvitset vähintään yhden skenen lisätäksesi lähteen."
89
 Basic.Main.Scenes="Skenet"
90
@@ -437,6 +452,7 @@
91
 Basic.Main.StartReplayBuffer="Käynnistä toistopuskuri"
92
 Basic.Main.SaveReplay="Tallenna uusinta"
93
 Basic.Main.StartStreaming="Aloita lähetys"
94
+Basic.Main.StartBroadcast="Aloita suora lähetys"
95
 Basic.Main.StartVirtualCam="Käynnistä virtuaalinen kamera"
96
 Basic.Main.StopRecording="Pysäytä tallennus"
97
 Basic.Main.PauseRecording="Pysäytä tallennus"
98
@@ -444,7 +460,10 @@
99
 Basic.Main.StoppingRecording="Pysäytetään tallennusta..."
100
 Basic.Main.StopReplayBuffer="Pysäytä toistopuskuri"
101
 Basic.Main.StoppingReplayBuffer="Pysäytetään toistopuskuri..."
102
+Basic.Main.SetupBroadcast="Hallitse lähetystä"
103
 Basic.Main.StopStreaming="Pysäytä lähetys"
104
+Basic.Main.StopBroadcast="Lopeta lähetys"
105
+Basic.Main.AutoStopEnabled="(Automaattinen lopetus)"
106
 Basic.Main.StoppingStreaming="Pysäytetään lähetystä..."
107
 Basic.Main.ForceStopStreaming="Lopeta lähetys (ohita viive)"
108
 Basic.Main.ShowContextBar="Näytä Lähdetyökalurivi"
109
@@ -463,6 +482,7 @@
110
 Basic.MainMenu.File.Settings="A&setukset"
111
 Basic.MainMenu.File.ShowSettingsFolder="Avaa asetuskansio"
112
 Basic.MainMenu.File.ShowProfileFolder="Avaa profiilikansio"
113
+Basic.MainMenu.File.ShowMissingFiles="Tarkista puuttuvat tiedostot"
114
 Basic.MainMenu.AlwaysOnTop="&Aina päällimmäisenä"
115
 Basic.MainMenu.File.Exit="Sulje (&X)"
116
 Basic.MainMenu.Edit="Muokkaa (&E)"
117
@@ -863,3 +883,62 @@
118
 ContextBar.MediaControls.PlaylistPrevious="Edellinen soittolistalla"
119
 ContextBar.MediaControls.MediaProperties="Median ominaisuudet"
120
 ContextBar.MediaControls.BlindSeek="Median hakutyökalu"
121
+YouTube.Auth.Ok="Valtuutus suoritettu onnistuneesti.\nVoit nyt sulkea tämän sivun."
122
+YouTube.Auth.NoCode="Valtuutusprosessia ei saatettu valmiiksi."
123
+YouTube.Auth.NoChannels="Kanavia ei ole saatavilla valitulla tilillä"
124
+YouTube.Auth.WaitingAuth.Title="YouTube-käyttäjävaltuutus"
125
+YouTube.Auth.WaitingAuth.Text="Suorita valtuuden antaminen ulkoisessa selaimessa.<br>Jos ulkoinen selain ei avaudu, suorita valtuuttaminen seuraavan linkin kautta:<br>%1"
126
+YouTube.AuthError.Text="Kanavan tietojen saaminen epäonnistui: %1."
127
+YouTube.Actions.WindowTitle="YouTube-lähetyksen asetukset - Kanava: %1"
128
+YouTube.Actions.CreateNewEvent="Luo uusi lähetys"
129
+YouTube.Actions.ChooseEvent="Valitse olemassa oleva lähetys"
130
+YouTube.Actions.Title="Otsikko*"
131
+YouTube.Actions.MyBroadcast="Oma lähetys"
132
+YouTube.Actions.Description="Kuvaus"
133
+YouTube.Actions.Privacy="Yksityisyys*"
134
+YouTube.Actions.Privacy.Private="Yksityinen"
135
+YouTube.Actions.Privacy.Public="Julkinen"
136
+YouTube.Actions.Privacy.Unlisted="Listaamaton"
137
+YouTube.Actions.Category="Luokka"
138
+YouTube.Actions.Thumbnail="Esikatselukuva"
139
+YouTube.Actions.Thumbnail.SelectFile="Valitse tiedosto..."
140
+YouTube.Actions.Thumbnail.NoFileSelected="Ei tiedostoa valittuna"
141
+YouTube.Actions.Thumbnail.ClearFile="Tyhjennä"
142
+YouTube.Actions.MadeForKids="Onko tämä video tehty lapsille?*"
143
+YouTube.Actions.MadeForKids.Yes="Kyllä, se on tehty lapsille"
144
+YouTube.Actions.MadeForKids.No="Ei, se ei ole tehty lapsille"
145
+YouTube.Actions.AdditionalSettings="Lisäasetukset:"
146
+YouTube.Actions.Latency="Viive"
147
+YouTube.Actions.Latency.Normal="Normaali"
148
+YouTube.Actions.Latency.Low="Matala"
149
+YouTube.Actions.Latency.UltraLow="Erittäin matala"
150
+YouTube.Actions.EnableAutoStart="Käytä automaattista käynnistystä"
151
+YouTube.Actions.EnableAutoStop="Käytä automaattista lopettamista"
152
+YouTube.Actions.EnableDVR="Käytä DVR:ää"
153
+YouTube.Actions.ScheduleForLater="Ajasta myöhemmäksi"
154
+YouTube.Actions.RememberSettings="Muista asetukset"
155
+YouTube.Actions.Create_Ready="Luo lähetys"
156
+YouTube.Actions.Create_GoLive="Luo lähetys ja aloita striimaaminen"
157
+YouTube.Actions.Choose_Ready="Valitse lähetys"
158
+YouTube.Actions.Choose_GoLive="Valitse lähetys ja aloita striimaaminen"
159
+YouTube.Actions.Create_Schedule="Ajasta lähetys"
160
+YouTube.Actions.Create_Schedule_Ready="Ajasta ja valitse lähetys"
161
+YouTube.Actions.Dashboard="Avaa YouTube Studio"
162
+YouTube.Actions.Error.Title="Live-lähetyksen luontivirhe"
163
+YouTube.Actions.Error.Text="YouTube-pääsyvirhe '%1'.<br/>Yksityiskohtainen virhekuvaus on osoitteessa <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
164
+YouTube.Actions.Error.General="YouTube-pääsyvirhe. Tarkista verkkoyhteytesi tila tai pääsysi YouTube-palvelimelle."
165
+YouTube.Actions.Error.NoBroadcastCreated="Lähetyksen luontivirhe '%1'.<br/>Yksityiskohtainen virhekuvaus on osoitteessa <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
166
+YouTube.Actions.Error.NoStreamCreated="Striimiä ei luotu. Yhdistä tilisi uudelleen."
167
+YouTube.Actions.Error.YouTubeApi="YouTuben rajapintavirhe. Katso lokitiedosto saadaksesi lisätietoja."
168
+YouTube.Actions.Error.BroadcastNotFound="Valittua lähetystä ei löytynyt."
169
+YouTube.Actions.Error.FileMissing="Valittua tiedostoa ei ole olemassa."
170
+YouTube.Actions.Error.FileOpeningFailed="Valitun tiedoston avaaminen epäonnistui."
171
+YouTube.Actions.Error.FileTooLarge="Valittu tiedosto on liian suuri (Raja: 2 MiB)."
172
+YouTube.Actions.EventsLoading="Ladataan listaa tapahtumista..."
173
+YouTube.Actions.EventCreated.Title="Tapahtuma luotu"
174
+YouTube.Actions.EventCreated.Text="Tapahtuma luotu onnistuneesti."
175
+YouTube.Actions.Stream.ScheduledFor="Ajastettu alkamaan %1"
176
+YouTube.Actions.Stream.YTStudio="Automaattisesti luotu YouTube Studion toimesta"
177
+YouTube.Actions.Notify.CreatingBroadcast="Luodaan uutta live-lähetystä, odota hetki..."
178
+YouTube.Actions.AutoStartStreamingWarning.Title="Manuaalinen käynnistys vaaditaan"
179
+YouTube.Actions.AutoStartStreamingWarning="Automaattinen käynnistys on poistettu käytöstä tämän tapahtuman osalta, napsauta \"Aloita suora lähetys\" aloittaaksesi lähetyksen."
180
obs-studio-27.0.1.tar.xz/UI/data/locale/fr-FR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/fr-FR.ini Changed
164
 
1
@@ -109,6 +109,7 @@
2
 Auth.InvalidScope.Text="Les exigences d'authentification pour %1 ont changé. Certaines fonctionnalités peuvent être indisponibles."
3
 Auth.LoadingChannel.Title="Chargement des informations de la Chaîne ..."
4
 Auth.LoadingChannel.Text="Chargement des informations de la Chaîne sur %1, veuillez patienter ..."
5
+Auth.LoadingChannel.Error="Impossible de récupérer les informations de la chaîne."
6
 Auth.ChannelFailure.Title="Échec du chargement de la chaîne"
7
 Auth.ChannelFailure.Text="Échec du chargement des informations de la chaîne pour %1\n\n%2 : %3"
8
 Auth.StreamInfo="Informations de la diffusion"
9
@@ -149,12 +150,14 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Récupérer la clé de stream"
11
 Basic.AutoConfig.StreamPage.MoreInfo="En savoir plus"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Utiliser la clé de stream"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Utiliser une clé de stream (avancé)"
14
 Basic.AutoConfig.StreamPage.Service.ShowAll="Afficher tout..."
15
 Basic.AutoConfig.StreamPage.Service.Custom="Personnalisé..."
16
 Basic.AutoConfig.StreamPage.Server="Serveur"
17
 Basic.AutoConfig.StreamPage.StreamKey="Clé de stream"
18
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Lien)"
19
 Basic.AutoConfig.StreamPage.EncoderKey="Clé de l'encodeur"
20
+Basic.AutoConfig.StreamPage.ConnectedAccount="Compte connecté"
21
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Test de la bande passantes pour estimer le débit (peut prendre quelques minutes)"
22
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Préférer l’encodage matériel"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="L'encodage matériel minimise l'utilisation du processeur (CPU), mais peut nécessiter un débit vidéo plus élevé pour obtenir une niveau de qualité équivalent."
24
@@ -315,6 +318,8 @@
25
 Output.RecordError.EncodeErrorMsg="L'encodeur a rencontré une erreur pendant l'enregistrement."
26
 Output.BadPath.Title="Chemin d'accès au fichier incorrect"
27
 Output.BadPath.Text="Le chemin configuré pour le flux sortant est invalide. Veuillez vérifier vos paramètres pour confirmer la présence d'un chemin valide."
28
+Output.NoBroadcast.Title="Aucune diffusion configurée"
29
+Output.NoBroadcast.Text="Vous devez configurer une diffusion avant de pouvoir commencer la diffusion."
30
 LogReturnDialog="Mise en ligne du journal réussie"
31
 LogReturnDialog.Description="Votre fichier journal a été téléversé. Vous pouvez maintenant partager l'URL à des fins de débogage ou de support."
32
 LogReturnDialog.Description.Crash="Votre rapport de plantage a été téléversé. Vous pouvez maintenant partager l'URL à des fins de débogage."
33
@@ -354,6 +359,8 @@
34
 MissingFiles.Found="Trouvé"
35
 MissingFiles.AutoSearch="Des correspondances de fichier supplémentaires ont été trouvées"
36
 MissingFiles.AutoSearchText="OBS a trouvé des correspondances supplémentaires pour les fichiers manquants dans ce dossier. Voulez-vous les ajouter ?"
37
+MissingFiles.NoMissing.Title="Vérification des fichiers manquants"
38
+MissingFiles.NoMissing.Text="Aucun fichier ne semble manquer."
39
 UpdateAvailable="Nouvelle mise à jour disponible"
40
 UpdateAvailable.Text="La version %1.%2.%3 est désormais disponible. <a href='%4'>Cliquez ici pour la télécharger</a>"
41
 Basic.DesktopDevice1="Audio du Bureau"
42
@@ -417,6 +424,8 @@
43
 Basic.PropertiesView.FPS.Simple="Valeurs de FPS simples"
44
 Basic.PropertiesView.FPS.Rational="Valeurs de FPS rationnelles"
45
 Basic.PropertiesView.FPS.ValidFPSRanges="Gammes de FPS valides:"
46
+Basic.PropertiesView.UrlButton.Text="Ouvrir ce lien dans votre navigateur par défaut ?"
47
+Basic.PropertiesView.UrlButton.OpenUrl="Ouvrir l'URL"
48
 Basic.InteractionWindow="Intéragir avec '%1'"
49
 Basic.StatusBar.Reconnecting="Déconnecté, reconnexion dans %2 seconde(s) (tentative n° %1)"
50
 Basic.StatusBar.AttemptingReconnect="Tentative de reconnexion... (tentative n° %1)"
51
@@ -467,6 +476,8 @@
52
 Basic.TransformWindow.BoundsType.ScaleToWidth="Mettre à l'échelle par la largeur"
53
 Basic.TransformWindow.BoundsType.ScaleToHeight="Mettre à l'échelle par la hauteur"
54
 Basic.TransformWindow.BoundsType.Stretch="Étirer aux dimensions du Cadre"
55
+Basic.TransformWindow.Title="Modification de la transformation pour '%1'"
56
+Basic.TransformWindow.NoSelectedSource="Aucune source sélectionnée"
57
 Basic.Main.AddSourceHelp.Title="Impossible d'ajouter la source"
58
 Basic.Main.AddSourceHelp.Text="Vous devez avoir au moins une scène pour ajouter une source."
59
 Basic.Main.Scenes="Scènes"
60
@@ -476,6 +487,7 @@
61
 Basic.Main.StartReplayBuffer="Démarrer le tampon de relecture"
62
 Basic.Main.SaveReplay="Sauvegarder la relecture"
63
 Basic.Main.StartStreaming="Commencer le streaming"
64
+Basic.Main.StartBroadcast="Passer en direct"
65
 Basic.Main.StartVirtualCam="Démarrer la caméra virtuelle"
66
 Basic.Main.StopRecording="Arrêter l'enregistrement"
67
 Basic.Main.PauseRecording="Mettre en pause l'enregistrement"
68
@@ -483,7 +495,10 @@
69
 Basic.Main.StoppingRecording="Arrêt de l'enregistrement..."
70
 Basic.Main.StopReplayBuffer="Arrêter le tampon de relecture"
71
 Basic.Main.StoppingReplayBuffer="Arrêt du tampon de relecture..."
72
+Basic.Main.SetupBroadcast="Gérer la diffusion"
73
 Basic.Main.StopStreaming="Arrêter le streaming"
74
+Basic.Main.StopBroadcast="Arrêter le direct"
75
+Basic.Main.AutoStopEnabled="(Arrêt automatique)"
76
 Basic.Main.StoppingStreaming="Arrêt du stream..."
77
 Basic.Main.ForceStopStreaming="Arrêter le streaming (immédiatement)"
78
 Basic.Main.ShowContextBar="Afficher la barre d'outils Sources"
79
@@ -502,6 +517,7 @@
80
 Basic.MainMenu.File.Settings="Paramètre&s"
81
 Basic.MainMenu.File.ShowSettingsFolder="Afficher le dossier des paramètres"
82
 Basic.MainMenu.File.ShowProfileFolder="Afficher le dossier du profil"
83
+Basic.MainMenu.File.ShowMissingFiles="Vérifier les fichiers manquants"
84
 Basic.MainMenu.AlwaysOnTop="Toujours &au-dessus"
85
 Basic.MainMenu.File.Exit="Quitter (&X)"
86
 Basic.MainMenu.Edit="&Editer"
87
@@ -613,6 +629,7 @@
88
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, Bas (8 Scènes)"
89
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, Gauche (8 Scènes)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, Droite (8 Scènes)"
91
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, Haut (18 Scènes)"
92
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, Haut (24 Scènes)"
93
 Basic.Settings.Stream="Stream (flux)"
94
 Basic.Settings.Stream.StreamType="Type de Streaming"
95
@@ -911,3 +928,68 @@
96
 ContextBar.MediaControls.PlaylistPrevious="Précédent dans la playlist"
97
 ContextBar.MediaControls.MediaProperties="Propriétés du média"
98
 ContextBar.MediaControls.BlindSeek="Widget de Navigation dans le Média"
99
+YouTube.Auth.Ok="Autorisation obtenue avec succès.\nVous pouvez maintenant fermer cette page."
100
+YouTube.Auth.NoCode="Le processus d'autorisation n'est pas terminé."
101
+YouTube.Auth.NoChannels="Aucune chaîne disponible sur le compte sélectionné"
102
+YouTube.Auth.WaitingAuth.Title="Autorisation utilisateur YouTube"
103
+YouTube.Auth.WaitingAuth.Text="Veuillez compléter l'autorisation dans votre navigateur externe.<br>Si le navigateur externe ne s'ouvre pas, suivez ce lien et complétez l'autorisation:<br>%1"
104
+YouTube.AuthError.Text="Impossible de récupérer les informations de la chaîne : %1."
105
+YouTube.Actions.WindowTitle="Configuration de la diffusion YouTube - Chaîne : %1"
106
+YouTube.Actions.CreateNewEvent="Créer une nouvelle diffusion"
107
+YouTube.Actions.ChooseEvent="Sélectionner une diffusion existante"
108
+YouTube.Actions.Title="Titre*"
109
+YouTube.Actions.MyBroadcast="Ma diffusion"
110
+YouTube.Actions.Privacy="Confidentialité*"
111
+YouTube.Actions.Privacy.Private="Privée"
112
+YouTube.Actions.Privacy.Public="Publique"
113
+YouTube.Actions.Privacy.Unlisted="Non répertoriée"
114
+YouTube.Actions.Category="Catégorie"
115
+YouTube.Actions.Thumbnail="Miniature"
116
+YouTube.Actions.Thumbnail.SelectFile="Sélectionner un fichier..."
117
+YouTube.Actions.Thumbnail.NoFileSelected="Aucun fichier sélectionné"
118
+YouTube.Actions.Thumbnail.ClearFile="Supprimer"
119
+YouTube.Actions.MadeForKids="Cette vidéo est-elle faite pour les enfants ?*"
120
+YouTube.Actions.MadeForKids.Yes="Oui, elle est faite pour les enfants"
121
+YouTube.Actions.MadeForKids.No="Non, elle n'est pas faite pour les enfants"
122
+YouTube.Actions.AdditionalSettings="Paramètres supplémentaires :"
123
+YouTube.Actions.Latency="Latence"
124
+YouTube.Actions.Latency.Normal="Normale"
125
+YouTube.Actions.Latency.Low="Faible"
126
+YouTube.Actions.Latency.UltraLow="Ultra faible"
127
+YouTube.Actions.EnableAutoStart="Activer le démarrage automatique"
128
+YouTube.Actions.EnableAutoStop="Activer l'arrêt automatique"
129
+YouTube.Actions.AutoStartStop.TT="Indique si cette diffusion planifiée doit démarrer automatiquement"
130
+YouTube.Actions.EnableDVR="Activer le contrôle du direct"
131
+YouTube.Actions.360Video="Vidéo 360°"
132
+YouTube.Actions.ScheduleForLater="Planifier pour plus tard"
133
+YouTube.Actions.RememberSettings="Mémoriser ces réglages"
134
+YouTube.Actions.Create_Ready="Créer une diffusion"
135
+YouTube.Actions.Create_GoLive="Créer une diffusion et commencer la diffusion"
136
+YouTube.Actions.Choose_Ready="Sélectionner une diffusion"
137
+YouTube.Actions.Choose_GoLive="Sélectionner une diffusion et démarrer la diffusion"
138
+YouTube.Actions.Create_Schedule="Programmer la diffusion"
139
+YouTube.Actions.Create_Schedule_Ready="Programmer et sélectionner la diffusion"
140
+YouTube.Actions.Dashboard="Ouvrir le YouTube Studio"
141
+YouTube.Actions.Error.Title="Erreur de création de la diffusion en direct"
142
+YouTube.Actions.Error.Text="Erreur d'accès YouTube '%1'.<br/>Une description détaillée de l'erreur peut être trouvée sur <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
143
+YouTube.Actions.Error.General="Erreur d'accès YouTube. Veuillez vérifier votre connexion réseau ou l'accès au serveurs de YouTube."
144
+YouTube.Actions.Error.NoBroadcastCreated="Erreur de création de la diffusion '%1'.<br/>Une description détaillée de l'erreur peut être trouvée sur <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
145
+YouTube.Actions.Error.NoStreamCreated="Aucune diffusion créée. Veuillez reconnecter votre compte."
146
+YouTube.Actions.Error.YouTubeApi="Erreur API YouTube. Veuillez consulter le fichier journal pour plus d'informations."
147
+YouTube.Actions.Error.BroadcastNotFound="La diffusion sélectionnée n'a pas été trouvée."
148
+YouTube.Actions.Error.FileMissing="Le fichier sélectionné n'existe pas"
149
+YouTube.Actions.Error.FileOpeningFailed="Impossible d'ouvrir le fichier sélectionné."
150
+YouTube.Actions.Error.FileTooLarge="Le fichier sélectionné est trop volumineux (limite : 2 MiB)."
151
+YouTube.Actions.EventsLoading="Chargement de la liste des évènements..."
152
+YouTube.Actions.EventCreated.Title="Évènement créé."
153
+YouTube.Actions.EventCreated.Text="Évènement créé avec succès."
154
+YouTube.Actions.Stream="Diffuser"
155
+YouTube.Actions.Stream.ScheduledFor="Planifié pour %1"
156
+YouTube.Actions.Stream.Resume="Reprendre le flux interrompu"
157
+YouTube.Actions.Stream.YTStudio="Créé automatiquement par YouTube Studio"
158
+YouTube.Actions.Notify.CreatingBroadcast="Création d'une nouvelle diffusion en direct, veuillez patienter..."
159
+YouTube.Actions.AutoStartStreamingWarning.Title="Démarrage manuel requis"
160
+YouTube.Actions.AutoStartStreamingWarning="Le démarrage automatique est désactivé pour cet événement, cliquez sur \"Passer en direct\" pour démarrer votre diffusion."
161
+YouTube.Actions.AutoStopStreamingWarning="Vous ne pourrez pas vous reconnecter.<br>Votre diffusion s'arrêtera et vous ne serez plus en direct."
162
+YouTube.Errors.liveStreamingNotEnabled="La diffusion en direct n'est pas activée sur la chaîne YouTube sélectionnée.<br/><br/>Visitez <a href='https://www.youtube.com/features'>youtube.com/features</a> pour plus d'informations."
163
+YouTube.Errors.livePermissionBlocked="La diffusion en direct n'est pas disponible sur la chaîne YouTube sélectionnée.<br/>Veuillez noter que cela peut prendre jusqu'à 24 heures pour que la diffusion en direct devienne disponible après l'activation dans vos paramètres de chaîne.<br/><br/>Visitez <a href='https://www.youtube.com/features'>youtube.com/features</a> pour plus de détails."
164
obs-studio-27.0.1.tar.xz/UI/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/gd-GB.ini Changed
240
 
1
@@ -22,7 +22,7 @@
2
 Exit="Fàg an-seo"
3
 Mixer="Measgadair fuaime"
4
 Browse="Rùraich"
5
-DroppedFrames="Frèamaichean a thuit: %1 (%2%)"
6
+DroppedFrames="Frèaman a thuit: %1 (%2%)"
7
 StudioProgramProjector="Proiseactar làn-sgrìn (prògram)"
8
 PreviewProjector="Proiseactar làn-sgrìn (ro-shealladh)"
9
 SceneProjector="Proiseactar làn-sgrìn (sealladh)"
10
@@ -110,6 +110,7 @@
11
 Auth.InvalidScope.Text="Chaidh riatanasan dearbhaidh air %1 atharrachadh. Dh’fhaoidte nach bi gach gleus ri làimh dhut."
12
 Auth.LoadingChannel.Title="A’ luchdadh fiosrachadh an t-seanail…"
13
 Auth.LoadingChannel.Text="A’ luchdadh fiosrachadh an t-seanail airson %1, fuirich greiseag…"
14
+Auth.LoadingChannel.Error="Cha b’ urrainn dhuinn fiosrachadh an t-seanail fhaighinn."
15
 Auth.ChannelFailure.Title="Dh’fhàillig le luchdadh an t-seanail"
16
 Auth.ChannelFailure.Text="Dh’fhàillig le luchdadh fiosrachadh an t-seanail airson %1\n\n%2: %3"
17
 Auth.Chat="Cabadaich"
18
@@ -152,6 +153,7 @@
19
 Basic.AutoConfig.StreamPage.GetStreamKey="Faigh iuchair sruthaidh"
20
 Basic.AutoConfig.StreamPage.MoreInfo="Barrachd fiosrachaidh"
21
 Basic.AutoConfig.StreamPage.UseStreamKey="Cleachd iuchair sruthaidh"
22
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Cleachd iuchair sruthaidh (adhartach)"
23
 Basic.AutoConfig.StreamPage.Service="Seirbheis"
24
 Basic.AutoConfig.StreamPage.Service.ShowAll="Seall na h-uile…"
25
 Basic.AutoConfig.StreamPage.Service.Custom="Gnàthaichte…"
26
@@ -159,6 +161,7 @@
27
 Basic.AutoConfig.StreamPage.StreamKey="Iuchair an t-sruthaidh"
28
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Ceangal)"
29
 Basic.AutoConfig.StreamPage.EncoderKey="Iuchair an inneil-chòdachaidh"
30
+Basic.AutoConfig.StreamPage.ConnectedAccount="Cunntas ceangailte"
31
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Dèan tuairmse air reat bhiodan le deuchainn air an leud-bhanna (dh’fhaoidte gun doir seo mionaid no dhà)"
32
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="B’ fheàrr leam còdachadh bathair-chruthaidh"
33
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Le còdachadh bathair-chruaidh, cha dèid ach glè bheag dhen CPU a chleachdadh ach dh’fhaoidte gum bi feum air reat bhiodan nas àirde airson ann aon ìre a chàileachd fhaighinn."
34
@@ -187,8 +190,8 @@
35
 Basic.Stats.HDDSpaceAvailable="Àite ri fhaighinn air an diosg"
36
 Basic.Stats.MemoryUsage="Cleachdadh a’ chuimhne"
37
 Basic.Stats.AverageTimeToRender="Ùine cuibheasach air reandaradh frèama"
38
-Basic.Stats.SkippedFrames="Na frèamaichean air an leigeil seachad ri linn dàil còdachaidh"
39
-Basic.Stats.MissedFrames="Na frèamaichean a chaidh a dhìth ri linn dàil còdachaidh"
40
+Basic.Stats.SkippedFrames="Na frèaman air an leigeil seachad ri linn dàil còdachaidh"
41
+Basic.Stats.MissedFrames="Na frèaman a chaidh a dhìth ri linn dàil còdachaidh"
42
 Basic.Stats.Output.Stream="Sruthadh"
43
 Basic.Stats.Output.Recording="Clàradh"
44
 Basic.Stats.Status="Staid"
45
@@ -197,7 +200,7 @@
46
 Basic.Stats.Status.Reconnecting="’Ga ath-cheangal"
47
 Basic.Stats.Status.Inactive="Neo-ghnìomhach"
48
 Basic.Stats.Status.Active="Gnìomhach"
49
-Basic.Stats.DroppedFrames="Frèamaichean a thuit: (lìonra)"
50
+Basic.Stats.DroppedFrames="Frèaman a thuit: (lìonra)"
51
 Basic.Stats.MegabytesSent="Às-chur dàta iomlan"
52
 Basic.Stats.Bitrate="Reat bhiodan"
53
 Basic.Stats.DiskFullIn="Bidh an diosg làn an ceann mu"
54
@@ -358,6 +361,8 @@
55
 MissingFiles.Found="Chaidh a lorg"
56
 MissingFiles.AutoSearch="Chaidh barrachd sheisean a lorg"
57
 MissingFiles.AutoSearchText="Lorg OBS barrachd sheisean dha na faidhlichean a tha a dhìth sa phasgan seo. A bheil thu airson an cur ris?"
58
+MissingFiles.NoMissing.Title="A’ sgrùdadh faidhlichean a dhìth"
59
+MissingFiles.NoMissing.Text="Tha coltas nach eil faidhle a dhìth."
60
 UpdateAvailable="Tha ùrachadh ri fhaighinn"
61
 UpdateAvailable.Text="Tha tionndadh %1.%2.%3 ri fhaighinn a-nis. <a href='%4'>Briog an-seo gus a luchdadh a-nuas</a>"
62
 Basic.DesktopDevice1="Fuaim an deasg"
63
@@ -425,6 +430,8 @@
64
 Basic.PropertiesView.FPS.Simple="Luachan FPS simplidh"
65
 Basic.PropertiesView.FPS.Rational="Luachan FPS reusanta"
66
 Basic.PropertiesView.FPS.ValidFPSRanges="Rainsean FPS dligheach:"
67
+Basic.PropertiesView.UrlButton.Text="A bheil thu airson an ceangal seo fhosgladh sa bhrabhsair-lìn bhunaiteach agad?"
68
+Basic.PropertiesView.UrlButton.OpenUrl="Fosgail URL"
69
 Basic.InteractionWindow="Conaltradh le “%1”"
70
 Basic.StatusBar.Reconnecting="Gun cheangal, ’ga ath-cheangal an ceann %2 diog(an) (oidhirp %1)"
71
 Basic.StatusBar.AttemptingReconnect="A’ feuchainn ri ath-cheangal… (oidhirp %1)"
72
@@ -479,6 +486,8 @@
73
 Basic.TransformWindow.BoundsType.ScaleToWidth="Sgèilich ri leud an iadhaidh"
74
 Basic.TransformWindow.BoundsType.ScaleToHeight="Sgèilich ri àirde an iadhaidh"
75
 Basic.TransformWindow.BoundsType.Stretch="Sìn gun iadhadh"
76
+Basic.TransformWindow.Title="Atharraich an tar-mhùthadh airson “%1”"
77
+Basic.TransformWindow.NoSelectedSource="Cha deach tùs a thaghadh"
78
 Basic.Main.AddSourceHelp.Title="Chan urrainn dhuinn an tùs a chur ris"
79
 Basic.Main.AddSourceHelp.Text="Feumaidh do shealladh a bhith agad mus cuir thu tùs ris."
80
 Basic.Main.Scenes="Seallaidhean"
81
@@ -490,6 +499,7 @@
82
 Basic.Main.StartReplayBuffer="Tòisich air bufair ath-chluiche"
83
 Basic.Main.SaveReplay="Sàbhail an ath-chluiche"
84
 Basic.Main.StartStreaming="Tòisich air sruthadh"
85
+Basic.Main.StartBroadcast="Dol air loidhne"
86
 Basic.Main.StartVirtualCam="Cuir an camara biortail gu dol"
87
 Basic.Main.StopRecording="Cuir stad air a’ chlàradh"
88
 Basic.Main.PauseRecording="Cuir an clàradh ’na stad"
89
@@ -498,6 +508,7 @@
90
 Basic.Main.StopReplayBuffer="Cuir stad air bufair na h-ath-chluiche"
91
 Basic.Main.StoppingReplayBuffer="A’ cur stad air bufair na h-ath-chluiche…"
92
 Basic.Main.StopStreaming="Cuir stad air an t-sruthadh"
93
+Basic.Main.StopBroadcast="Cuir stad air an craol"
94
 Basic.Main.StoppingStreaming="A’ cur stad air an t-sruthadh…"
95
 Basic.Main.ForceStopStreaming="Cuir stad air an t-sruthadh (leig seachad an dàil)"
96
 Basic.Main.ShowContextBar="Seall bàr-inneal nan tùsan"
97
@@ -516,6 +527,7 @@
98
 Basic.MainMenu.File.Settings="Roghainnean (&S)"
99
 Basic.MainMenu.File.ShowSettingsFolder="Seall pasgan nan roghainnean"
100
 Basic.MainMenu.File.ShowProfileFolder="Seall pasgan na pròifil"
101
+Basic.MainMenu.File.ShowMissingFiles="Thoir sùil airson faidhlichean a tha a dhìth"
102
 Basic.MainMenu.AlwaysOnTop="&Air uachdar an-còmhnaidh"
103
 Basic.MainMenu.File.Exit="Fàg an-seo (&X)"
104
 Basic.MainMenu.Edit="D&easaich"
105
@@ -629,6 +641,7 @@
106
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Còmhnard, bonn (8 seallaidhean)"
107
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Inghearach, clì (8 seallaidhean)"
108
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Inghearach, deas (8 seallaidhean)"
109
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Còmhnard, bàrr (18 seallaidhean)"
110
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Còmhnard, bàrr (24 sealladh)"
111
 Basic.Settings.Stream="Sruthadh"
112
 Basic.Settings.Stream.StreamType="Seòrsa an t-sruthaidh"
113
@@ -658,7 +671,7 @@
114
 Basic.Settings.Output.SelectFile="Tagh faidhle clàraidh"
115
 Basic.Settings.Output.DynamicBitrate="Atharraich an reat bhiodan gu h-innsgineach a sheachnadh dùmhlachd"
116
 Basic.Settings.Output.DynamicBitrate.Beta="Atharraich an reat bhiodan gu h-innsgineach a sheachnadh dùmhlachd (Beta)"
117
-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."
118
+Basic.Settings.Output.DynamicBitrate.TT="Atharraichidh seo an reat bhiodan seach tuiteam fhrèaman 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 bhiodan, 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."
119
 Basic.Settings.Output.Mode="Modh an às-chuir"
120
 Basic.Settings.Output.Mode.Simple="Simplidh"
121
 Basic.Settings.Output.Mode.Adv="Adhartach"
122
@@ -680,7 +693,7 @@
123
 Basic.Settings.Output.Simple.Warn.AudioBitrate="Rabhadh: Thèid reat bhiotaichean fuaim an t-sruthaidh a shuidheachadh air %1, seo a’ chrìoch as àirde aig an t-seirbheis sruthaidh làithreach."
124
 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."
125
 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."
126
-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."
127
+Basic.Settings.Output.Simple.Warn.Lossless="Rabhadh: Cruthaichidh càileachd gun chall faidhlichean uabhasach mòr! Faodaidh càileachd gun chall corr is 7 gigabaidht a dh’àite a chleachdadh air an diosg gach mionaid ma tha an dùmhlachd-bhreacaidh agus an reat fhrèaman àrd. Cha mholamaid càileachd gun chall airson clàraidhean fada ach ma tha tòrr àite agad air an diosg."
128
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="A bheil thu cinnteach gu bheil thu airson càileachd gun chall a chleachdadh?"
129
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Rabhadh a thaobh càileachd gun chall!"
130
 Basic.Settings.Output.Simple.Encoder.Software="Bathar-bog (x264)"
131
@@ -689,8 +702,8 @@
132
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Bathar-cruaidh (NVENC)"
133
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Bathar-bog (ro-shuidheachadh air x264 le cleachdadh a’ CPU ìosal, meudaichidh seo na faidhlichean)"
134
 Basic.Settings.Output.Simple.TwitchVodTrack="Traca video air iarrtas Twitch (a’ cleachdadh traca 2)"
135
-Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Dùmhlachd-bhreacaidh/Reat fhrèamaichean neo-chòrdail"
136
-Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Cha chuir seirbheis an t-sruthaidh taic ri dùmhlachd-bhreacaidh agus/no reat fhrèamaichean làithreach an às-chuir agad. Thèid an atharrachadh dhan luach cho-chòrdail as fhaisge:\n\n%1\n\nA bheil thu airson leantainn air adhart?"
137
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Dùmhlachd-bhreacaidh/Reat fhrèaman neo-chòrdail"
138
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Cha chuir seirbheis an t-sruthaidh taic ri dùmhlachd-bhreacaidh agus/no reat fhrèaman làithreach an às-chuir agad. Thèid an atharrachadh dhan luach cho-chòrdail as fhaisge:\n\n%1\n\nA bheil thu airson leantainn air adhart?"
139
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Dùmhlachd-bhreacaidh: %1"
140
 Basic.Settings.Output.VideoBitrate="Reat bhiodan a’ video"
141
 Basic.Settings.Output.AudioBitrate="Reat bhiodan na fuaime"
142
@@ -728,17 +741,17 @@
143
 Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Slighe faidhle no URL"
144
 Basic.Settings.Output.Adv.FFmpeg.Format="Fòrmat an t-soithich"
145
 Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Fuaim"
146
-Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Am fòrmat tùsail"
147
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Am fòrmat bunaiteach"
148
 Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Tuairisgeul air fòrmat an t-soithich"
149
 Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Chaidh codec fuaime/video a thuairmeas o shlighe an fhaidhle no URL"
150
-Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="An t-inneal-còdachaidh tùsail"
151
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="An t-inneal-còdachaidh bunaiteach"
152
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Cuir an t-inneal-còdachaidh à comas"
153
 Basic.Settings.Output.Adv.FFmpeg.VEncoder="Inneal-còdachaidh video"
154
 Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Roghainnean an inneil-chòdachaidh video (ma tha gin ann)"
155
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Inneal-còdachaidh fuaime"
156
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Roghainnean an inneil-chòdachaidh fuaime (ma tha gin ann)"
157
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Roghainnean an iompaicheir (ma tha gin ann)"
158
-Basic.Settings.Output.Adv.FFmpeg.GOPSize="Eadaramh nam frèamaichean-iuchrach (frèam)"
159
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Eadaramh nam frèaman-iuchrach (frèam)"
160
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Seall na h-uile codec (fiù an fheadhainn nach eil co-chòrdail ma dh’fhaoidte)"
161
 Screenshot="Às-chur glacaidh-sgrìn"
162
 Screenshot.SourceHotkey="Dèan glacadh-sgrìn dhen tùs a thagh thu"
163
@@ -746,7 +759,7 @@
164
 Screenshot.Preview="Glacadh-sgrìn (ro-shealladh)"
165
 Screenshot.Scene="Glacadh-sgrìn (sealladh)"
166
 Screenshot.Source="Glacadh-sgrìn (tùs)"
167
-FilenameFormatting.TT="%CCYY   Am bliadhna, ceithir àireamhan\n%YY     Am bliadhna, an dà àireamh mu dheireadh (00-99)\n%MM        Am mìos ’na àireamh dheicheach (01-12)\n%DD     Latha a’ mhìosa, le pada neoni (01-31)\n%hh     An uair san fhòrmat 24u (00-23)\n%mm        Am mionaid (00-59)\n%ss     An diog (00-61)\n%%     Samhla %\n%a        Geàrr-ainm air latha na seachdaine\n%A      Ainm slàn air latha na seachdaine\n%b       Geàrr-ainm a’ mhìosa\n%B        Ainm slàn a’ mhìosa\n%d     Latha a’ mhìosa le pada neoni (01-31)\n%H       An uair san fhòrmat 24u (00-23)\n%I     An uair san fhòrmat 12u (01-12)\n%m     Am mìos ’na àireamh dheicheach (01-12)\n%M      A’ mhionaid (00-59)\n%p     Sònrachadh m no f\n%S       An diog (00-61)\n%y     am bliadhna, an dà àireamh mu dheireadh (00-99)\n%Y     Am bliadhna\n%z     Frith-àireamh ISO 8601 o UTC no\n       ainm no giorrachadh na roinn-tìde\n%ZAinm no giorrachadh na roinn-tìde\n%FPS        Frèamaichean gach diog\n%CRES       Dùmhlachd-bhreacaidh bunasach a’ chanabhais\n%ORES      Dùmhlachd-bhreacaidh an às-chuir (sgèilichte)\n%VF      Fòrmat a’ video"
168
+FilenameFormatting.TT="%CCYY   Am bliadhna, ceithir àireamhan\n%YY     Am bliadhna, an dà àireamh mu dheireadh (00-99)\n%MM        Am mìos ’na àireamh dheicheach (01-12)\n%DD     Latha a’ mhìosa, le pada neoni (01-31)\n%hh     An uair san fhòrmat 24u (00-23)\n%mm        Am mionaid (00-59)\n%ss     An diog (00-61)\n%%     Samhla %\n%a        Geàrr-ainm air latha na seachdaine\n%A      Ainm slàn air latha na seachdaine\n%b       Geàrr-ainm a’ mhìosa\n%B        Ainm slàn a’ mhìosa\n%d     Latha a’ mhìosa le pada neoni (01-31)\n%H       An uair san fhòrmat 24u (00-23)\n%I     An uair san fhòrmat 12u (01-12)\n%m     Am mìos ’na àireamh dheicheach (01-12)\n%M      A’ mhionaid (00-59)\n%p     Sònrachadh m no f\n%S       An diog (00-61)\n%y     am bliadhna, an dà àireamh mu dheireadh (00-99)\n%Y     Am bliadhna\n%z     Frith-àireamh ISO 8601 o UTC no\n       ainm no giorrachadh na roinn-tìde\n%ZAinm no giorrachadh na roinn-tìde\n%FPS        Frèaman gach diog\n%CRES        Dùmhlachd-bhreacaidh bunasach a’ chanabhais\n%ORES      Dùmhlachd-bhreacaidh an às-chuir (sgèilichte)\n%VF      Fòrmat a’ video"
169
 Basic.Settings.Video.Adapter="Adaptar video"
170
 Basic.Settings.Video.BaseResolution="Dùmhlachd-bhreacaidh bhunasach (a’ chanabhais)"
171
 Basic.Settings.Video.ScaledResolution="Dùmhlachd-bhreacaidh (sgèilichte) an às-chuir"
172
@@ -775,7 +788,7 @@
173
 Basic.Settings.Audio.MeterDecayRate.Slow="Slaodach (PPM seòrsa II)"
174
 Basic.Settings.Audio.PeakMeterType="Seòrsa a’ mheidheadair-bharran"
175
 Basic.Settings.Audio.PeakMeterType.SamplePeak="Ball-sampaill de bhàrr"
176
-Basic.Settings.Audio.PeakMeterType.TruePeak="Barr fìrinneach (cleachdadh nas àirde a’ CPU)"
177
+Basic.Settings.Audio.PeakMeterType.TruePeak="Bàrr fìrinneach (cleachdadh nas àirde a’ CPU)"
178
 Basic.Settings.Audio.MultiChannelWarning.Enabled="RABHADH: Tha fuaim cuairteachaidh an comas."
179
 Basic.Settings.Audio.MultichannelWarning="Ma tha thu a’ dèanamh sruthadh, dearbh gun doir an t-seirbheis sruthaidh agad taic an dà chuid ri ion-chur is cluich fuaime cuairteachaidh. Mar eisimpleir, cuiridh Facebook 360 Live làn-taic ri fuaim cuairteachaidh. Ged a ghabhas Facebook Live is youTube Live ri sruthan fuaime cuairteachaidh, nì Facebook Live measgachadh sìos stereo dheth agus cha chluich YouTube live ach dà sheanail.\n\nTha criathragan fuaime OBS co-chòrdail ri fuaim cuairteachaidh ged nach doir sinn barantas gun obraich plugain VST."
180
 Basic.Settings.Audio.MultichannelWarning.Title="A bheil thu airson fuaim cuairteachaidh a chur an comas?"
181
@@ -808,7 +821,7 @@
182
 Basic.Settings.Advanced.Video.ColorRange.Partial="Leth-phàirteach"
183
 Basic.Settings.Advanced.Video.ColorRange.Full="Làn"
184
 Basic.Settings.Advanced.Audio.MonitoringDevice="Uidheam sgrùdaidh"
185
-Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Tùsail"
186
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Bunaiteach"
187
 Basic.Settings.Advanced.Audio.DisableAudioDucking="Cuir à comas tumadh fuaime Windows"
188
 Basic.Settings.Advanced.StreamDelay="Dàil an t-sruthaidh"
189
 Basic.Settings.Advanced.StreamDelay.Duration="Faid"
190
@@ -920,3 +933,49 @@
191
 ContextBar.MediaControls.PlaylistPrevious="An fhear roimhe air an liosta-chluich"
192
 ContextBar.MediaControls.MediaProperties="Roghainnean a’ mheadhain"
193
 ContextBar.MediaControls.BlindSeek="Widget sireadh meadhain"
194
+YouTube.Auth.Ok="Chaidh leis an ùghdarrachadh.\n’S urrainn dhut an duilleag seo a dhùnadh a-nis."
195
+YouTube.Auth.NoCode="Cha deach an t-ùghdarrachadh a choileanadh."
196
+YouTube.Auth.NoChannels="Chan eil seanail ri fhaighinn air a’ chunntas a thagh thu"
197
+YouTube.Auth.WaitingAuth.Title="Ùghdarrachadh cleachdaiche YouTube"
198
+YouTube.Auth.WaitingAuth.Text="Coilean an t-ùghdarrachadh taobh a-muigh sa bhrabhsair agad.<br>Mura fosgail am brabhsair air an taobh a-muigh, lean ris a’ cheangal seo agus coilean an t-ùghdarrachadh:<br>%1"
199
+YouTube.AuthError.Text="Cha b’ urrainn dhuinn fiosrachadh na seanail fhaighinn: %1."
200
+YouTube.Actions.Title="Tiotal*"
201
+YouTube.Actions.MyBroadcast="An craoladh agam"
202
+YouTube.Actions.Description="Tuairisgeul"
203
+YouTube.Actions.Privacy="Prìobhaideachd*"
204
+YouTube.Actions.Privacy.Private="Prìobhaideach"
205
+YouTube.Actions.Privacy.Public="Poblach"
206
+YouTube.Actions.Privacy.Unlisted="Falaichte o liostaichean"
207
+YouTube.Actions.Category="Roinn-seòrsa"
208
+YouTube.Actions.MadeForKids="A bheil a’ video seo ag amas air a’ chlann?*"
209
+YouTube.Actions.MadeForKids.Yes="Tha, tha e ag amas air a’ chlann"
210
+YouTube.Actions.MadeForKids.No="Chan eil e ag amas air a’ chlann"
211
+YouTube.Actions.AdditionalSettings="Roghainnean a bharrachd:"
212
+YouTube.Actions.Latency="Foillidheachd"
213
+YouTube.Actions.Latency.Normal="Àbhaisteach"
214
+YouTube.Actions.Latency.Low="Ìosal"
215
+YouTube.Actions.Latency.UltraLow="Glè ìosal"
216
+YouTube.Actions.EnableAutoStart="Cuir an tòiseachadh fèin-obrachail an comas"
217
+YouTube.Actions.EnableAutoStop="Cuir an stad fèin-obrachail an comas"
218
+YouTube.Actions.EnableDVR="Cuir DVR an comas"
219
+YouTube.Actions.360Video="Video 360"
220
+YouTube.Actions.ScheduleForLater="Cuir air an sgeideal airson uaireigin eile"
221
+YouTube.Actions.Error.Title="Mearachd a’ cruthachadh a’ chraolaidh bheò"
222
+YouTube.Actions.Error.Text="Mearachd inntrigeadh YouTube “%1”.<br/>Gheibh thu tuairisgeul mionaideach air a’ mhearachd air <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
223
+YouTube.Actions.Error.General="Mearachd inntrigeadh YouTube. Thoir sùil air a’ cheangal agad dhan lìonra no air an inntrigeadh agad air an fhrithealaiche YouTube."
224
+YouTube.Actions.Error.NoBroadcastCreated="Mearachd le cruthachadh a’ chraolaidh “%1”.<br/>Gheibh thu tuairisgeul mionaideach air a’ mhearachd air <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
225
+YouTube.Actions.Error.NoStreamCreated="Cha deach sruth a chruthachadh. Ceangail an cunntas agad às ùr."
226
+YouTube.Actions.Error.YouTubeApi="Mearachd API YouTube. Faic faidhle an loga airson barrachd fiosrachaidh."
227
+YouTube.Actions.Error.BroadcastNotFound="Cha deach an craoladh a thagh thu a lorg."
228
+YouTube.Actions.EventsLoading="A’ luchdadh liosta nan tachartasan…"
229
+YouTube.Actions.EventCreated.Title="Chaidh an tachartas a chruthachadh"
230
+YouTube.Actions.EventCreated.Text="Chaidh an tachartas a chruthachadh."
231
+YouTube.Actions.Stream="Sruthadh"
232
+YouTube.Actions.Stream.ScheduledFor="Air an sgeideal aig %1"
233
+YouTube.Actions.Stream.Resume="Lean air an t-sruthadh a chaidh a bhriseadh"
234
+YouTube.Actions.Stream.YTStudio="Chaidh a chruthachadh gu fèin-obrachail le YouTube Studio"
235
+YouTube.Actions.Notify.CreatingBroadcast="A’ cruthachadh craoladh beò ùr, fuirich ort…"
236
+YouTube.Actions.AutoStartStreamingWarning.Title="Tha feum air ath-thòiseachadh a làimh"
237
+YouTube.Actions.AutoStopStreamingWarning="Chan urrainn dhut ath-cheangal a dhèanamh.<br>Thèid stad a chur air an t-sruthadh agad is cha bhi e beò tuilleadh."
238
+YouTube.Errors.liveStreamingNotEnabled="Chan eil sruthadh beò an comas air an t-seanail YouTube a thagh thu.<br/><br/>Faic <a href='https://www.youtube.com/features'>youtube.com/features</a> airson barrachd fiosrachaidh."
239
+YouTube.Errors.livePermissionBlocked="Chan eil sruthadh beò ri fhaighinn air an t-seanail YouTube a thagh thu.<br/>Thoir an aire gun doir e gu ruige 24 uair a thìde gus am bi sruthadh beò ri fhaighinn às dhèidh dhut a chur an comas ann an roghainnean na seanail agad.<br/><br/>Faic <a href='https://www.youtube.com/features'>youtube.com/features</a> airson mion-fhiosrachadh."
240
obs-studio-27.0.1.tar.xz/UI/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/he-IL.ini Changed
504
 
1
@@ -24,7 +24,7 @@
2
 Browse="עיון"
3
 Mono="מונו"
4
 Stereo="סטריאו"
5
-DroppedFrames="פרייסים חסרים %1 (%2%)"
6
+DroppedFrames="פריימים חסרים %1 (%2%)"
7
 StudioProgramProjector="מקרן מסך מלא (תוכנית)"
8
 PreviewProjector="מקרן מסך מלא (תצוגה מקדימה)"
9
 SceneProjector="מקרן מסך מלא (סצנה)"
10
@@ -38,15 +38,15 @@
11
 ResizeProjectorWindowToContent="התאם חלון לתוכן"
12
 Clear="נקה"
13
 Revert="איפוס"
14
-Show="הצג"
15
-Hide="הסתר"
16
+Show="הצגה"
17
+Hide="הסתרה"
18
 UnhideAll="להציג הכול"
19
 Untitled="ללא שם"
20
 New="חדש"
21
 Duplicate="שכפול"
22
-Enable="אפשר"
23
-DisableOSXVSync="בטל סנכרון אנכי macOS"
24
-ResetOSXVSyncOnExit="איפוס סנכרון אנכי macOS ביציאה"
25
+Enable="הפעלה"
26
+DisableOSXVSync="ביטול סנכרון אנכי של macOS"
27
+ResetOSXVSyncOnExit="איפוס סנכרון אנכי של macOS ביציאה"
28
 HighResourceUsage="קידוד עמוס מדיי! נא לשקול להנמיך את הגדרות הווידאו או להשתמש בקידוד מהיר יותר."
29
 Transition="מעבר"
30
 QuickTransitions="מעברים מהירים"
31
@@ -55,12 +55,12 @@
32
 Right="ימין"
33
 Top="עליון"
34
 Bottom="תחתון"
35
-Reset="אפס"
36
+Reset="איפוס"
37
 Hours="שעות"
38
 Minutes="דקות"
39
 Seconds="שניות"
40
 Deprecated="הוצא משימוש"
41
-ReplayBuffer="הרץ מחדש חוצץ"
42
+ReplayBuffer="אוגר הילוך חוזר"
43
 Import="ייבוא"
44
 Export="ייצוא"
45
 Copy="העתקה"
46
@@ -68,8 +68,8 @@
47
 PasteReference="הדבקה (הפניה)"
48
 PasteDuplicate="הדבקה (שכפול)"
49
 RemuxRecordings="רימיקס הקלטות"
50
-Next="הבא"
51
-Back="קודם"
52
+Next="קדימה"
53
+Back="אחורה"
54
 Defaults="ברירות מחדל"
55
 HideMixer="הסתרה במערבל"
56
 TransitionOverride="מעבר דרוס"
57
@@ -88,15 +88,15 @@
58
 Windowed="חלון"
59
 Percent="אחוז"
60
 RefreshBrowser="ריענון"
61
-AspectRatio="יחס גובה־רוחב <b>%1:%2</b>"
62
+AspectRatio="יחס גובה-רוחב <b>%1:%2</b>"
63
 LockVolume="נעילת שמע"
64
 LogViewer="מציג היומן"
65
 ShowOnStartup="להציג בעת הפעלה"
66
 OpenFile="פתיחת קובץ"
67
 AddValue="הוספת %1"
68
-AlreadyRunning.Title="OBS פועל כבר"
69
+AlreadyRunning.Title="OBS כבר פעיל"
70
 AlreadyRunning.Text="OBS כבר פעיל! אלא אם התכוונת לעשות זאת, נא לכבות את כל התהליכים הקיימים של OBS לפני ניסיון הפעלת תהליך חדש. אם OBS מוזער למגש המערכת, נא לבדוק אם הוא עדיין פעיל שם."
71
-AlreadyRunning.LaunchAnyway="הפעל בכל מקרה"
72
+AlreadyRunning.LaunchAnyway="הפעלה בכל מקרה"
73
 ChromeOS.Title="פלטפורמה לא נתמכת"
74
 ChromeOS.Text="נראה ש־OBS פועל במֵכל של ChromeOS. פלטפורמה זו אינה נתמכת"
75
 DockCloseWarning.Title="סגירת חלון ניתן להצמדה"
76
@@ -104,14 +104,15 @@
77
 ExtraBrowsers="חלונות הצמדה מותאמים אישית של דפדפן"
78
 ExtraBrowsers.Info="אפשר להוסיף חלונות הצמדה בעזרת הוספת שם וכתובת, לאחר מכן יש ללחוץ על החלה או סגירה כדי לפתוח את חלונות ההצמדה. אפשר להוסיף או להסיר חלונות הצמדה בכל עת."
79
 ExtraBrowsers.DockName="שם חלון ההצמדה"
80
-Auth.Authing.Title="מאמת..."
81
-Auth.Authing.Text="מאמת עם %1, אנא המתן..."
82
+Auth.Authing.Title="כעת באימות..."
83
+Auth.Authing.Text="כעת באימות עם %1, נא להמתין..."
84
 Auth.AuthFailure.Title="האימות נכשל"
85
 Auth.AuthFailure.Text="נכשל באימות עם %1:\n\n%2: %3"
86
 Auth.InvalidScope.Title="דרושה הזדהות"
87
 Auth.InvalidScope.Text="דרישות האימות עבור %1 השתנו. חלק מהתכונות לא יהיו זמינות."
88
 Auth.LoadingChannel.Title="טוען מידע על הערוץ..."
89
 Auth.LoadingChannel.Text="טוען מידע על הערוץ עבור %1, אנא המתן..."
90
+Auth.LoadingChannel.Error="לא ניתן לקבל מידע על הערוץ."
91
 Auth.ChannelFailure.Title="טעינת הערוץ נכשלה"
92
 Auth.ChannelFailure.Text="נכשל בטעינת המידע עבור %1\n\n%2: %3"
93
 Auth.Chat="צ׳אט"
94
@@ -133,27 +134,28 @@
95
 Basic.AutoConfig="אשף תצורה אוטומטית"
96
 Basic.AutoConfig.ApplySettings="החלת ההגדרות"
97
 Basic.AutoConfig.StartPage="פרטי שימוש"
98
-Basic.AutoConfig.StartPage.SubTitle="ציין עבור מה ברצונך להשתמש בתוכנית"
99
+Basic.AutoConfig.StartPage.SubTitle="נא לציין איך ברצונך להשתמש בתוכנית"
100
 Basic.AutoConfig.StartPage.PrioritizeStreaming="מיטוב לשידורים חיים, ההקלטה משנית"
101
 Basic.AutoConfig.StartPage.PrioritizeRecording="מיטוב להקלטה בלבד, לא יהיו שידורים חיים"
102
 Basic.AutoConfig.StartPage.PrioritizeVirtualCam="אשתמש במצלמה הווירטואלית בלבד"
103
 Basic.AutoConfig.VideoPage="הגדרות וידאו"
104
-Basic.AutoConfig.VideoPage.SubTitle="ציין בספציפיות את הגדרות הווידאו המבוקשות עבורך"
105
-Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="השתמש בנוכחי (%1x%2)"
106
+Basic.AutoConfig.VideoPage.SubTitle="נא לציין את הגדרות הווידאו בהן ברצונך להשתמש"
107
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="שימוש בנוכחית (%1x%2)"
108
 Basic.AutoConfig.VideoPage.BaseResolution.Display="תצוגה %1 (%2x%3)"
109
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="השתמש בנוכחי (%1)"
110
-Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 או 30, אבל העדף 60 כאשר אפשרי"
111
-Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 או 30, אבל העדף רזולוציה גבוהה"
112
-Basic.AutoConfig.VideoPage.CanvasExplanation="הערה: רזולוציית הבד (בסיס) אינה זהה בהכרח לרזולוציית השידורים החיים או ההקלטה. ייתכן שרזולוציית השידורים החיים/ההקלטה תוקטן כדי להפחית את דרישות קצב הנתונים או המשאבים."
113
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 או 30, אך 60 עדיפים כאשר זה אפשרי"
114
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 או 30, אך רזולוציה גבוהה עדיפה"
115
+Basic.AutoConfig.VideoPage.CanvasExplanation="הערה: רזולוציית משטח העבודה (בסיס) אינה זהה בהכרח לרזולוציית השידורים החיים או ההקלטה. ייתכן שרזולוציית השידורים החיים/ההקלטה תוקטן כדי להפחית את דרישות קצב הנתונים או המשאבים."
116
 Basic.AutoConfig.StreamPage="פרטי השידור החי"
117
 Basic.AutoConfig.StreamPage.SubTitle="נא להזין את פרטי השידור החי שלך"
118
-Basic.AutoConfig.StreamPage.ConnectAccount="התחבר לחשבון (מומלץ)"
119
+Basic.AutoConfig.StreamPage.ConnectAccount="התחברות לחשבון (מומלץ)"
120
 Basic.AutoConfig.StreamPage.DisconnectAccount="ניתוק החשבון"
121
 Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="לנתק את החשבון?"
122
-Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="שינוי זה יחול באופן מיידי. האם לנתק את החשבון שלך?"
123
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="שינוי זה יחול באופן מיידי. האם לנתק את חשבונך?"
124
 Basic.AutoConfig.StreamPage.GetStreamKey="קבלת מפתח שידורים חיים"
125
 Basic.AutoConfig.StreamPage.MoreInfo="מידע נוסף"
126
 Basic.AutoConfig.StreamPage.UseStreamKey="שימוש במפתח שידורים חיים"
127
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="שימוש במפתח שידורים חיים (מתקדם)"
128
 Basic.AutoConfig.StreamPage.Service="שירות"
129
 Basic.AutoConfig.StreamPage.Service.ShowAll="להציג הכול..."
130
 Basic.AutoConfig.StreamPage.Service.Custom="התאמה אישית..."
131
@@ -161,6 +163,7 @@
132
 Basic.AutoConfig.StreamPage.StreamKey="מפתח שידורים חיים"
133
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(קישור)"
134
 Basic.AutoConfig.StreamPage.EncoderKey="מפתח מקודד"
135
+Basic.AutoConfig.StreamPage.ConnectedAccount="חשבון מחובר"
136
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="הערכת קצב נתונים עם בדיקת רוחב פס (עשוי להימשך דקות אחדות)"
137
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="העדף קידוד בחומרה"
138
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="קידוד בחומרה מבטלת רוב השימוש במעבד, אבל עשוי לדרוש קצב נתונים גבוה יותר כדי להשיג את אותה רמת האיכות."
139
@@ -244,12 +247,38 @@
140
 Undo.Filters.Paste.Single="הדבק פילטר %1 ל%2"
141
 Undo.Filters.Paste.Multiple="העתק פילטרים מ%1 ל%2"
142
 Undo.Transform="שנה מקור(ות) ב'%1'"
143
+Undo.Transform.Paste="הדבק שינוי ב-'%1'"
144
+Undo.Transform.Rotate="סיבוב פריט בתוך \"%1\""
145
+Undo.Transform.Reset="איפוס שינוי ב-'%1'"
146
+Undo.Transform.HFlip="היפוך אופקי לפריט בתוך \"%1\""
147
+Undo.Transform.VFlip="היפוך אנכי לפריט בתוך \"%1\""
148
 Undo.Transform.FitToScreen="התאמת \"%1\" למסך"
149
+Undo.Transform.StretchToScreen="מתח לגודל המסך ב-'%1'"
150
+Undo.Transform.Center="מרכז למסך ב-'%1'"
151
+Undo.Transform.VCenter="מרכז למסך אנכית ב-'%1'"
152
+Undo.Transform.HCenter="מרכז למסך אופקית ב-'%1'"
153
+Undo.Volume.Change="שינוי עוצמת השמע של \"%1\""
154
 Undo.Volume.Mute="השתק %1"
155
 Undo.Volume.Unmute="ביטול השתקת %1"
156
+Undo.Balance.Change="שינוי איזון שמע ב-'%1'"
157
+Undo.SyncOffset.Change="שינוי היסט סנכרון שמע ב-'%1'"
158
+Undo.MonitoringType.Change="שינוי ניטור שמע ב-'%1'"
159
+Undo.Mixers.Change="שינוי מערבלי שמע ב-'%1'"
160
+Undo.ForceMono.On="הפעלת אילוץ מונו ב-'%1'"
161
+Undo.ForceMono.Off="כיבוי אילוץ מונו ב-'%1'"
162
+Undo.Properties="שינוי מאפיין של \"%1\""
163
 Undo.Scene.Duplicate="שכפול סצנה %1"
164
 Undo.ShowTransition="הצגת המעבר של \"%1\""
165
 Undo.HideTransition="הסתרת המעבר של \"%1\""
166
+Undo.ShowSceneItem="הצגת \"%1\" בתוך \"%2\""
167
+Undo.HideSceneItem="הסתרת \"%1\" מתוך \"%2\""
168
+Undo.ReorderSources="סידור המקורות מחדש בתוך \"%1\""
169
+Undo.MoveUp="הזזת '%1' מעלה ב-'%2'"
170
+Undo.MoveDown="הזזת '%1' מטה ב-'%2'"
171
+Undo.MoveToTop="הזזת '%1' לקצה העליון ב-'%2'"
172
+Undo.MoveToBottom="הזזת '%1' לקצה התחתון ב-'%2'"
173
+Undo.PasteSource="הדבקת מקור(ות) ב-'%1'"
174
+Undo.PasteSourceRef="הדבקת הפניה(ות) מקור ב-'%1'"
175
 Undo.GroupItems="קבץ פריטים לכדי '%1'"
176
 TransitionNameDlg.Text="אנא הזן את שם המעבר"
177
 TransitionNameDlg.Title="שם מעבר"
178
@@ -270,11 +299,11 @@
179
 ConfirmExit.Title="לצאת מ־OBS?"
180
 ConfirmExit.Text="OBS פעילה כעת. כל השידורים החיים/ההקלטות ייסגרו. האם לצאת?"
181
 ConfirmRemove.Title="אישור הסרה"
182
-ConfirmRemove.Text="האם להסיר את \"$1\"?"
183
+ConfirmRemove.Text="האם להסיר את '%1'?"
184
 ConfirmRemove.TextMultiple="האם להסיר %1 פריטים?"
185
 Output.StartStreamFailed="התחלת השידור החי נכשלה"
186
 Output.StartRecordingFailed="התחלת ההקלטה נכשלה"
187
-Output.StartReplayFailed="נכשלה הפעלת מאגר החוזר"
188
+Output.StartReplayFailed="הפעלת אוגר ההילוך החוזר נכשלה"
189
 Output.StartFailedGeneric="הפלט נכשל. בבקשה בדוק את הרישומים עבור. \n\nNote: אם אתה משתמש בNVNEC או AMD מקודדים, הקפד שמנהלי ההתקן של הכרטיס מסך מעודכנים."
190
 Output.ReplayBuffer.PauseWarning.Title="לא ניתן לשמור הילוכים חוזרים בזמן השהיה"
191
 Output.ReplayBuffer.PauseWarning.Text="אזהרה: הילוכים חוזרים לא ניתנים לשמירה כאשר ההקלטה מושהית."
192
@@ -334,6 +363,8 @@
193
 MissingFiles.Found="נמצא"
194
 MissingFiles.AutoSearch="נמצאו התאמות נוספות לקבצים"
195
 MissingFiles.AutoSearchText="OBS מצא התאמות נוספות לקבצים חסרים בתיקייה זו. האם תרצה להוסיף אותם?"
196
+MissingFiles.NoMissing.Title="בדיקת קבצים חסרים"
197
+MissingFiles.NoMissing.Text="לא קיימים קבצים חסרים."
198
 UpdateAvailable="עדכון חדש זמין"
199
 UpdateAvailable.Text="גרסה %1.%2.%3 זמינה כעת. <a href='%4'> יש ללחוץ כאן כדי להורידה</a>"
200
 Basic.DesktopDevice1="שמע בשולחן העבודה"
201
@@ -383,9 +414,9 @@
202
 Basic.SourceSelect.AddExisting="הוסף קיימים"
203
 Basic.SourceSelect.AddVisible="הפוך מקור לגלוי"
204
 Basic.Main.Sources.Visibility="נראות"
205
-Basic.Main.Sources.VisibilityDescription="שולט בנראות של '%1' בקנבס"
206
+Basic.Main.Sources.VisibilityDescription="שולט בנראות של '%1' במשטח העבודה"
207
 Basic.Main.Sources.Lock="נעילה"
208
-Basic.Main.Sources.LockDescription="נועל את המיקום ואת הגודל של '%1' בקנבס"
209
+Basic.Main.Sources.LockDescription="נועל את המיקום ואת הגודל של '%1' במשטח העבודה"
210
 Basic.PropertiesWindow="מאפיינים עבור \"%1\""
211
 Basic.PropertiesWindow.AutoSelectFormat="%1 (בחירה אוטומטית: %2)"
212
 Basic.PropertiesWindow.SelectColor="בחירת צבע"
213
@@ -403,6 +434,9 @@
214
 Basic.PropertiesView.FPS.Simple="ערכים פשוטים של פריימים לשניה"
215
 Basic.PropertiesView.FPS.Rational="ערכים הגיוניים של פריימים לשניה"
216
 Basic.PropertiesView.FPS.ValidFPSRanges="טווחים תקינים של פריימים לשניה:"
217
+Basic.PropertiesView.UrlButton.Text="לפתוח קישור זה בדפדפן ברירת-המחדל שלך?"
218
+Basic.PropertiesView.UrlButton.Text.Url="כתובת: %1"
219
+Basic.PropertiesView.UrlButton.OpenUrl="פתיחת הכתובת"
220
 Basic.InteractionWindow="אינטראקציה עם '%1'"
221
 Basic.StatusBar.Reconnecting="החיבור מנותק, התחברות מחדש ב- %2 שניות (ניסיון %1)"
222
 Basic.StatusBar.AttemptingReconnect="מנסה להתחבר מחדש... (ניסיון %1)"
223
@@ -412,7 +446,9 @@
224
 Basic.StatusBar.DelayStoppingIn="השהיה (מסיים בעוד %1 שניות)"
225
 Basic.StatusBar.DelayStartingStoppingIn="השהיה (מסיים בעוד %1 שניות, מתחיל בעוד %2 שניות)"
226
 Basic.StatusBar.RecordingSavedTo="ההקלטה נשמרה ב%1"
227
+Basic.StatusBar.ReplayBufferSavedTo="אוגר ההילוך החוזר נשמר ל-'%1'"
228
 Basic.StatusBar.ScreenshotSavedTo="צילום מסך נשמר ב%1"
229
+Basic.StatusBar.AutoRemuxedTo="הקלטה הומרה אוטומטית ל-'%1'"
230
 Basic.Filters="מסננים"
231
 Basic.Filters.AsyncFilters="מסנני שמע/וידאו"
232
 Basic.Filters.AudioFilters="מסנני שמע"
233
@@ -432,6 +468,8 @@
234
 Basic.TransformWindow.BoundsType="סוג התיבה התוחמת"
235
 Basic.TransformWindow.BoundsAlignment="יישור בתיבה תוחמת"
236
 Basic.TransformWindow.Bounds="גודל התיבה התוחמת"
237
+Basic.TransformWindow.BoundsWidth="רוחב התיבה התוחמת"
238
+Basic.TransformWindow.BoundsHeight="גובה התיבה התוחמת"
239
 Basic.TransformWindow.Crop="חתוך"
240
 Basic.TransformWindow.CropLeft="חתוך משמאלה"
241
 Basic.TransformWindow.CropRight="חתוך מימינה"
242
@@ -453,6 +491,8 @@
243
 Basic.TransformWindow.BoundsType.ScaleToWidth="שנה גודל לרוחב של הגבולות"
244
 Basic.TransformWindow.BoundsType.ScaleToHeight="שנה גודל לגובה של הגבולות"
245
 Basic.TransformWindow.BoundsType.Stretch="מתח לגבולות"
246
+Basic.TransformWindow.Title="עריכת שינוי עבור '%1'"
247
+Basic.TransformWindow.NoSelectedSource="לא נבחר מקור"
248
 Basic.Main.AddSourceHelp.Title="אין אפשרות להוסיף מקור"
249
 Basic.Main.AddSourceHelp.Text="צריכה להיות לפחות סצנה אחת כדי להוסיף מקור."
250
 Basic.Main.Scenes="סצנות"
251
@@ -461,18 +501,20 @@
252
 Basic.Main.Controls="בקרה"
253
 Basic.Main.Connecting="מתחבר..."
254
 Basic.Main.StartRecording="התחלת הקלטה"
255
-Basic.Main.StartReplayBuffer="התחל מאגר החוזר"
256
+Basic.Main.StartReplayBuffer="התחל את אוגר ההילוך החוזר"
257
 Basic.Main.SaveReplay="שמירת הילוך חוזר"
258
 Basic.Main.StartStreaming="התחלת שידור חי"
259
-Basic.Main.StartVirtualCam="הפעל מצלמה וירטואלית"
260
+Basic.Main.StartBroadcast="התחל שידור חי"
261
+Basic.Main.StartVirtualCam="הפעלת מצלמה וירטואלית"
262
 Basic.Main.StopRecording="עצור הקלטה"
263
 Basic.Main.PauseRecording="להשהות הקלטה"
264
 Basic.Main.UnpauseRecording="בטל השהיית ההקלטה"
265
 Basic.Main.StoppingRecording="עוצר הקלטה..."
266
-Basic.Main.StopReplayBuffer="עצור את המאגר החוזר"
267
-Basic.Main.StoppingReplayBuffer="עצירת מאגר החוזר..."
268
+Basic.Main.StopReplayBuffer="עצור את אוגר ההילוך החוזר"
269
+Basic.Main.StoppingReplayBuffer="עצירת אוגר ההילוך החוזר..."
270
 Basic.Main.StopStreaming="עצירת השידור החי"
271
-Basic.Main.StoppingStreaming="עוצר את השידור החי..."
272
+Basic.Main.StopBroadcast="סיים שידור"
273
+Basic.Main.StoppingStreaming="כעת בעצירת השידור החי..."
274
 Basic.Main.ForceStopStreaming="עצירת השידור החי (השהיה בביטול)"
275
 Basic.Main.ShowContextBar="הצגת סרגל הכלים של המקורות"
276
 Basic.Main.HideContextBar="הסתרת סרגל הכלים של המקורות"
277
@@ -490,6 +532,7 @@
278
 Basic.MainMenu.File.Settings="ה&גדרות"
279
 Basic.MainMenu.File.ShowSettingsFolder="הצגת תיקיית ההגדרות"
280
 Basic.MainMenu.File.ShowProfileFolder="הצג תיקיית פרופיל"
281
+Basic.MainMenu.File.ShowMissingFiles="בדוק עבור קבצים חסרים"
282
 Basic.MainMenu.AlwaysOnTop="&תמיד עליון"
283
 Basic.MainMenu.File.Exit="י&ציאה"
284
 Basic.MainMenu.Edit="&עריכה"
285
@@ -500,7 +543,7 @@
286
 Basic.MainMenu.Edit.LockPreview="&נעל תצוגה מקדימה"
287
 Basic.MainMenu.Edit.Scale="&קנה המידה של התצוגה המקדימה"
288
 Basic.MainMenu.Edit.Scale.Window="שינוי קנה מידה לחלון"
289
-Basic.MainMenu.Edit.Scale.Canvas="בד (%1x%2)"
290
+Basic.MainMenu.Edit.Scale.Canvas="משטח עבודה (%1x%2)"
291
 Basic.MainMenu.Edit.Scale.Output="פלט (%1x%2)"
292
 Basic.MainMenu.Edit.Transform="&שינוי"
293
 Basic.MainMenu.Edit.Transform.EditTransform="&עריכת השינוי..."
294
@@ -544,7 +587,7 @@
295
 Basic.MainMenu.Profile.Exists="הפרופיל קיים כבר"
296
 Basic.MainMenu.SceneCollection.Exists="אוסף הסצנות כבר קיים"
297
 Basic.MainMenu.Tools="&כלים"
298
-Basic.MainMenu.Help="עזרה(&H)"
299
+Basic.MainMenu.Help="עז&רה"
300
 Basic.MainMenu.Help.HelpPortal="&פורטל עזרה"
301
 Basic.MainMenu.Help.Website="ביקור ב&אתר"
302
 Basic.MainMenu.Help.Discord="הצטרפות ל&שרת Discord"
303
@@ -573,14 +616,14 @@
304
 Basic.Settings.General.HideProjectorCursor="הסתר את הסמן מעל מקרנים"
305
 Basic.Settings.General.ProjectorAlwaysOnTop="הפוך מקרנים תמיד בעליון"
306
 Basic.Settings.General.Snapping="יישור הצמדת מקור"
307
-Basic.Settings.General.ScreenSnapping="הצמד מקורות לקצה המסך"
308
-Basic.Settings.General.CenterSnapping="הצמד מקורות למרכז אופקי ואנכי"
309
-Basic.Settings.General.SourceSnapping="הצמד מקור למקור נוסף"
310
+Basic.Settings.General.ScreenSnapping="הצמדת מקורות לקצה המסך"
311
+Basic.Settings.General.CenterSnapping="הצמדת מקורות למרכז הציר האופקי והאנכי"
312
+Basic.Settings.General.SourceSnapping="הצמדת מקורות למקורות אחרים"
313
 Basic.Settings.General.SnapDistance="רגישות צמד"
314
 Basic.Settings.General.RecordWhenStreaming="הקלטה אוטומטית בעת שידורים חיים"
315
 Basic.Settings.General.KeepRecordingWhenStreamStops="להמשיך להקליט כאשר השידור החי נעצר"
316
-Basic.Settings.General.ReplayBufferWhileStreaming="הפעלת מאגר חוזר אוטומטית בעת שידורים חיים"
317
-Basic.Settings.General.KeepReplayBufferStreamStops="השארת המאגר החוזר פעיל כאשר השידור החי נעצר"
318
+Basic.Settings.General.ReplayBufferWhileStreaming="הפעלת אוגר ההילוך החוזר אוטומטית בעת שידורים חיים"
319
+Basic.Settings.General.KeepReplayBufferStreamStops="השארת אוגר ההילוך החוזר פעיל כאשר השידור החי נעצר"
320
 Basic.Settings.General.SysTray="מגש המערכת"
321
 Basic.Settings.General.SysTrayWhenStarted="מזער למגש המערכת בתחילה"
322
 Basic.Settings.General.SystemTrayHideMinimize="מזער תמיד למגש המערכת במקום שורת המשימות"
323
@@ -603,13 +646,14 @@
324
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="אופקי, תחתון (8 סצנות)"
325
 Basic.Settings.General.MultiviewLayout.Vertical.Left="אנכי, שמאל (8 סצנות)"
326
 Basic.Settings.General.MultiviewLayout.Vertical.Right="אנכי, ימין (8 סצנות)"
327
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="אופקי, עליון (18 סצנות)"
328
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="אופקי, עליון (24 סצנות)"
329
 Basic.Settings.Stream="שידורים חיים"
330
 Basic.Settings.Stream.StreamType="סוג שידור חי"
331
 Basic.Settings.Stream.Custom.UseAuthentication="שימוש באימות"
332
 Basic.Settings.Stream.Custom.Username="שם משתמש"
333
 Basic.Settings.Stream.Custom.Password="סיסמה"
334
-Basic.Settings.Stream.BandwidthTestMode="הפעל מצב בדיקת רוחב-פס"
335
+Basic.Settings.Stream.BandwidthTestMode="הפעלת מצב בדיקת רוחב פס"
336
 Basic.Settings.Stream.TTVAddon="תוספי צ׳אט Twitch"
337
 Basic.Settings.Stream.TTVAddon.None="ללא"
338
 Basic.Settings.Stream.TTVAddon.Both="BetterTTV וגם FrankerFaceZ"
339
@@ -637,12 +681,12 @@
340
 Basic.Settings.Output.Mode.Simple="פשוט"
341
 Basic.Settings.Output.Mode.Adv="מתקדם"
342
 Basic.Settings.Output.Mode.FFmpeg="פלט FFmpeg"
343
-Basic.Settings.Output.UseReplayBuffer="הפעלת מאגר החוזר"
344
+Basic.Settings.Output.UseReplayBuffer="הפעלת אוגר ההילוך החוזר"
345
 Basic.Settings.Output.ReplayBuffer.SecondsMax="זמן שידור חוזר מקסימלי"
346
-Basic.Settings.Output.ReplayBuffer.MegabytesMax="זיכרון מרבי (מגה־בתים)"
347
-Basic.Settings.Output.ReplayBuffer.Estimate="הערך שימוש בזיכרון: %1 MB"
348
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="זיכרון מרבי (מגה-בתים)"
349
+Basic.Settings.Output.ReplayBuffer.Estimate="שימוש משוער בזיכרון: %1 MB"
350
 Basic.Settings.Output.ReplayBuffer.EstimateUnknown="אין אפשרות להעריך את השימוש בזיכרון. נא הגדר מגבלת זיכרון מירבי."
351
-Basic.Settings.Output.ReplayBuffer.Prefix="קידומת שם קובץ מאגר החוזר"
352
+Basic.Settings.Output.ReplayBuffer.Prefix="קידומת שם לקובץ אוגר ההילוך החוזר"
353
 Basic.Settings.Output.ReplayBuffer.Suffix="סיומת"
354
 Basic.Settings.Output.Simple.SavePath="נתיב הקלטה"
355
 Basic.Settings.Output.Simple.RecordingQuality="איכות הקלטה"
356
@@ -664,7 +708,7 @@
357
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="תוכנה (x 264 השימוש בהגדרת מעבד נמוך, גודל הקובץ גדל)"
358
 Basic.Settings.Output.Simple.TwitchVodTrack="החלפת רצועת Twitch VOD (שימוש ברצועה 2)"
359
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="קצב פריימים\רזולוציה לא נתמכת"
360
-Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="שירות הזרמה זה לא תומך ברזולצייה ובקצב הפריימים הנוכחיים שהגדרת. הם ישתנו לערך הכי קרוב ונתמך: \n\n%1\n\n האם להמשיך?"
361
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="שירות זה לשידורים חיים לא תומך ברזולצייה ובקצב הפריימים הנוכחיים שהגדרת. הם ישתנו לערך הכי קרוב ונתמך: \n\n%1\n\nהאם להמשיך?"
362
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="רזולוציה: %1"
363
 Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="פריימים לשנייה: %1"
364
 Basic.Settings.Output.VideoBitrate="קצב סיביות וידאו"
365
@@ -704,17 +748,17 @@
366
 Basic.Settings.Output.Adv.FFmpeg.Format="פורמט קובץ"
367
 Basic.Settings.Output.Adv.FFmpeg.FormatAudio="שמע"
368
 Basic.Settings.Output.Adv.FFmpeg.FormatVideo="וידאו"
369
-Basic.Settings.Output.Adv.FFmpeg.FormatDefault="פורמט ברירת־מחדל"
370
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="פורמט ברירת-מחדל"
371
 Basic.Settings.Output.Adv.FFmpeg.FormatDesc="תיאור סוג הקובץ"
372
-Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="ניחוש הקודקד של השמע/וידאו מנתיב קובץ או קישור"
373
-Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="מקודד ברירת המחדל"
374
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="בוצע ניחוש של codec השמע/וידאו מנתיב הקובץ או הקישור."
375
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="מקודד ברירת-מחדל"
376
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="שתק את המקודד"
377
 Basic.Settings.Output.Adv.FFmpeg.VEncoder="מקודד וידאו"
378
 Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="הגדרות מקודד וידאו (אם בכלל)"
379
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="מקודד שמע"
380
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="הגדרות מקודד שמע (אם בכלל)"
381
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="הגדרות Muxer (אם בכלל)"
382
-Basic.Settings.Output.Adv.FFmpeg.GOPSize="מרווח מפתח(מסגרות)"
383
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="מרווח תמונות מפתח (פריימים)"
384
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="הצג את כל רכיבי codec (גם אם אינם תואמים)"
385
 Screenshot="פלט צילום מסך"
386
 Screenshot.SourceHotkey="צילום מסך של המקור הנבחר"
387
@@ -724,9 +768,9 @@
388
 Screenshot.Source="צילום מסך (מקור)"
389
 Basic.Settings.Video="וידאו"
390
 Basic.Settings.Video.Adapter="מתאם תצוגה"
391
-Basic.Settings.Video.BaseResolution="רזולציית (קנבס) בסיס"
392
+Basic.Settings.Video.BaseResolution="רזולציית (משטח עבודה) בסיס"
393
 Basic.Settings.Video.ScaledResolution="רזולוציית (קנה מידה) פלט"
394
-Basic.Settings.Video.DownscaleFilter="מסנן מצמצם"
395
+Basic.Settings.Video.DownscaleFilter="פילטר צמצום קנה מידה"
396
 Basic.Settings.Video.DisableAeroWindows="בטל את Aero (Windows בלבד)"
397
 Basic.Settings.Video.FPS="פריימים לשנייה"
398
 Basic.Settings.Video.FPSCommon="ערכים משותפים לפריימים לשניה"
399
@@ -766,7 +810,7 @@
400
 Basic.Settings.Audio.AuxDevice4="מיקרופון/התקן שמע עזר 4"
401
 Basic.Settings.Audio.EnablePushToMute="אפשר לחץ-להשתקה"
402
 Basic.Settings.Audio.PushToMuteDelay="השהיית לחץ-להשתקה"
403
-Basic.Settings.Audio.EnablePushToTalk="הפעל לחץ-כדי-לדבר"
404
+Basic.Settings.Audio.EnablePushToTalk="הפעלת לחיצה־לדיבור"
405
 Basic.Settings.Audio.PushToTalkDelay="השהיית לחץ-כדי-לדבר"
406
 Basic.Settings.Audio.UnknownAudioDevice="[התקן לא מחובר או לא זמין]"
407
 Basic.Settings.Audio.Disabled="מושבת"
408
@@ -785,7 +829,7 @@
409
 Basic.Settings.Advanced.Video.ColorRange.Partial="חלקי"
410
 Basic.Settings.Advanced.Video.ColorRange.Full="מלא"
411
 Basic.Settings.Advanced.Audio.MonitoringDevice="מכשיר ניטור"
412
-Basic.Settings.Advanced.Audio.MonitoringDevice.Default="ברירת מחדל"
413
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="ברירת-מחדל"
414
 Basic.Settings.Advanced.Audio.DisableAudioDucking="בטל צימוד השמע של Windows"
415
 Basic.Settings.Advanced.StreamDelay="השהיה לפני שידורים חיים"
416
 Basic.Settings.Advanced.StreamDelay.Duration="משך"
417
@@ -793,14 +837,14 @@
418
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="שימוש זיכרון משוער: %1 MB"
419
 Basic.Settings.Advanced.Network="רשת"
420
 Basic.Settings.Advanced.Network.BindToIP="אגד ל- IP"
421
-Basic.Settings.Advanced.Network.EnableNewSocketLoop="הפעל מיטובי רשת"
422
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="הפעלת מיטובי רשת"
423
 Basic.Settings.Advanced.Network.EnableLowLatencyMode="אפשר TCP pacing"
424
 Basic.Settings.Advanced.Network.TCPPacing.Tooltip="מנסה להפוך את פלט RTMP לידידותי יותר עבור אפליקציות רגישות ל-latency ברשת על ידי ויסות קצב השידור.\nזה עלול להעלות את הסיכון לנפילת פריימים בחיבורים לא יציבים."
425
 Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="התנהגות מקש-חם"
426
 Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="לעולם אל תבטל מקשים-חמים"
427
 Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="בטל מקשים-חמים כאשר החלון הראשי בפוקוס"
428
 Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="בטל מקשים-חמים כאשר החלון הראשי אינו בפוקוס"
429
-Basic.Settings.Advanced.AutoRemux="המרה אוטומטית ל־mp4"
430
+Basic.Settings.Advanced.AutoRemux="בצע המרה אוטומטית ל-mp4"
431
 Basic.Settings.Advanced.AutoRemux.MP4="(הקלטה בתור mkv)"
432
 Basic.AdvAudio="מאפייני קול מתקדמים"
433
 Basic.AdvAudio.ActiveOnly="מקורות פעילים בלבד"
434
@@ -875,7 +919,7 @@
435
 NoSources.Label="אין לך מקורות.\n\לחץ על לחצן + למטה\nאו לחצן ימני כאן בכדי להוסיף אחד."
436
 ChangeBG="קבע צבע"
437
 CustomColor="צבע מותאם אישית"
438
-BrowserSource.EnableHardwareAcceleration="הפעל האצת חומרה עבור מקורות דפדפן"
439
+BrowserSource.EnableHardwareAcceleration="הפעלת האצת חומרה למקורות דפדפן"
440
 About="על אודות"
441
 About.Info="OBS Studio היא תכנה חופשית בקוד פתוח להקלטת וידאו ולשידורים חיים."
442
 About.Donate="מתן תרומה"
443
@@ -902,7 +946,7 @@
444
 NeedsRestart="צריך להפעיל את OBS Studio מחדש. האם להפעיל מחדש כעת?"
445
 ContextBar.NoSelectedSource="לא נבחר מקור"
446
 ContextBar.ResetTransform="אפס שינויים"
447
-ContextBar.FitToCanvas="התאם לקנבס"
448
+ContextBar.FitToCanvas="התאם למשטח העבודה"
449
 ContextBar.MediaControls.PlayMedia="ניגון מדיה"
450
 ContextBar.MediaControls.PauseMedia="השהה מדיה"
451
 ContextBar.MediaControls.StopMedia="עצור מדיה"
452
@@ -911,3 +955,51 @@
453
 ContextBar.MediaControls.PlaylistPrevious="הקודם בפלייליסט"
454
 ContextBar.MediaControls.MediaProperties="מאפייני מדיה"
455
 ContextBar.MediaControls.BlindSeek="יישומון חיפוש מדיה"
456
+YouTube.Auth.Ok="הזדהות הושלמה בהצלחה.\nכעת ניתן לסגור עמוד זה."
457
+YouTube.Auth.NoCode="תהליך ההזדהות לא הושלם."
458
+YouTube.Auth.NoChannels="אין ערוץ(ים) זמין(ים) לחשבון שנבחר"
459
+YouTube.Auth.WaitingAuth.Title="הזדהות משתמש YouTube"
460
+YouTube.Auth.WaitingAuth.Text="אנא השלם את ההזדהות בדפדפן החיצוני שלך.<br>אם הדפדפן החיצוני לא נפתח, עבור לקישור זה והשלם את ההזדהות:<br>%1"
461
+YouTube.AuthError.Text="נכשל בקבלת מידע ערוץ:%1"
462
+YouTube.Actions.Title="כותרת*"
463
+YouTube.Actions.MyBroadcast="השידור שלי"
464
+YouTube.Actions.Description="תיאור"
465
+YouTube.Actions.Privacy="פרטיות*"
466
+YouTube.Actions.Privacy.Private="פרטי"
467
+YouTube.Actions.Privacy.Public="גלוי לכול"
468
+YouTube.Actions.Privacy.Unlisted="לא רשום"
469
+YouTube.Actions.Category="קטגוריה"
470
+YouTube.Actions.MadeForKids="האם הסרטון הזה מיועד לילדים?*"
471
+YouTube.Actions.MadeForKids.Yes="כן, הוא מיועד לילדים"
472
+YouTube.Actions.MadeForKids.No="לא, הוא לא מיועד לילדים"
473
+YouTube.Actions.AdditionalSettings="הגדרות נוספות:"
474
+YouTube.Actions.Latency="זמן שיהוי (Latency)"
475
+YouTube.Actions.Latency.Normal="רגיל"
476
+YouTube.Actions.Latency.Low="נמוך"
477
+YouTube.Actions.Latency.UltraLow="אולטרה נמוך"
478
+YouTube.Actions.EnableAutoStart="הפעלת התחלה-אוטומטית"
479
+YouTube.Actions.EnableAutoStop="הפעלת הפסקה-אוטומטית"
480
+YouTube.Actions.AutoStartStop.TT="מציין האם שידור מתוזמן זה אמור להתחיל אוטומטית"
481
+YouTube.Actions.EnableDVR="הפעלת DVR"
482
+YouTube.Actions.360Video="וידאו 360"
483
+YouTube.Actions.ScheduleForLater="תזמן למועד מאוחר יותר"
484
+YouTube.Actions.Error.Title="שגיאה ביצירת שידור חי"
485
+YouTube.Actions.Error.Text="שגיאת גישה ל-YouTube '%1'.<br/>ניתן למצוא את פירוט השגיאה ב-<a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
486
+YouTube.Actions.Error.General="שגיאת גישה ל-YouTube. נא לבדוק את חיבור הרשת שלך או את הגישה שלך לשרת YouTube."
487
+YouTube.Actions.Error.NoBroadcastCreated="שגיאה ביצירת שידור חי '%1'.<br/>ניתן למצוא את פירוט השגיאה ב-<a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
488
+YouTube.Actions.Error.NoStreamCreated="לא נוצר שידור חי. נא לבצע קישור מחדש של החשבון."
489
+YouTube.Actions.Error.YouTubeApi="שגיאת YouTube API. נא לבדוק בקובץ היומן עבור מידע נוסף."
490
+YouTube.Actions.Error.BroadcastNotFound="השידור החי שנבחר לא נמצא."
491
+YouTube.Actions.EventsLoading="טוען את רשימת האירועים..."
492
+YouTube.Actions.EventCreated.Title="האירוע נוצר"
493
+YouTube.Actions.EventCreated.Text="אירוע נוצר בהצלחה."
494
+YouTube.Actions.Stream="שידור חי"
495
+YouTube.Actions.Stream.ScheduledFor="מתוזמן עבור %1"
496
+YouTube.Actions.Stream.Resume="המשך שידור חי שהופסק"
497
+YouTube.Actions.Stream.YTStudio="נוצר אוטומטית על ידי YouTube Studio"
498
+YouTube.Actions.Notify.CreatingBroadcast="יוצר אירוע שידור חי חדש, נא להמתין..."
499
+YouTube.Actions.AutoStartStreamingWarning.Title="נדרשת הפעלה ידנית"
500
+YouTube.Actions.AutoStartStreamingWarning="הפעלה-אוטומטית מבוטלת עבור אירוע זה, יש ללחוץ על \"התחל שידור חי\" בכדי להתחיל את השידור."
501
+YouTube.Actions.AutoStopStreamingWarning="לא יהיה באפשרותך להתחבר מחדש.<br>השידור החי שלך יופסק לחלוטין."
502
+YouTube.Errors.liveStreamingNotEnabled="האפשרות לשידור חי לא מופעלת בערוץ ה-YouTube שנבחר.<br/><br/>עבור מידע נוסף <a href='https://www.youtube.com/features'>youtube.com/features</a>"
503
+YouTube.Errors.livePermissionBlocked="האפשרות לשידור חי לא זמינה בערוץ ה-YouTube שנבחר.<br/>יש לשים לב שלאחר הפעלת שידורים חיים בהגדרות הערוץ, עשויות לעבור עד 24 שעות עד שניתן לשדר ממנו.<br/><br/>עבור מידע נוסף <a href='https://www.youtube.com/features'>youtube.com/features</a>"
504
obs-studio-27.0.1.tar.xz/UI/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/hi-IN.ini Changed
710
 
1
@@ -43,7 +43,7 @@
2
 UnhideAll="कुछ ना छिपाएं"
3
 Untitled="अनामांकित"
4
 New="नया"
5
-Duplicate="दोहरा"
6
+Duplicate="प्रतिलिपि बनाएं"
7
 Enable="सक्षम करें"
8
 DisableOSXVSync="macOS V-Sync अक्षम करें"
9
 ResetOSXVSyncOnExit="बंद करते समय macOS V-Sync रिसेट करें"
10
@@ -112,6 +112,7 @@
11
 Auth.InvalidScope.Text="%1 के लिए सत्यापन आवश्यकताएँ बदल गई हैं. कुछ सुविधाएं अनुपलब्ध हो सकती हैं."
12
 Auth.LoadingChannel.Title="चैनल जानकारी लोड हो रही है..."
13
 Auth.LoadingChannel.Text="%1 के लिए चैनल जानकारी लोड हो रही है, कृपया प्रतीक्षा करें..."
14
+Auth.LoadingChannel.Error="चैनल की जानकारी नहीं मिल पा रही है."
15
 Auth.ChannelFailure.Title="चैनल को लोड करने में विफल रहा"
16
 Auth.ChannelFailure.Text="%1\n\n%2: %3 के लिए चैनल जानकारी लोड करने में विफल"
17
 Auth.Chat="बातचीत"
18
@@ -154,6 +155,7 @@
19
 Basic.AutoConfig.StreamPage.GetStreamKey="स्ट्रीम कुंजी प्राप्त करें"
20
 Basic.AutoConfig.StreamPage.MoreInfo="और जानें"
21
 Basic.AutoConfig.StreamPage.UseStreamKey="स्ट्रीम कुंजी प्रयोग करें"
22
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="स्ट्रीम कुंजी का उपयोग करें (उन्नत)"
23
 Basic.AutoConfig.StreamPage.Service="सेवा"
24
 Basic.AutoConfig.StreamPage.Service.ShowAll="सब दिखाओ"
25
 Basic.AutoConfig.StreamPage.Service.Custom="अनुकूलित करें"
26
@@ -161,6 +163,7 @@
27
 Basic.AutoConfig.StreamPage.StreamKey="स्ट्रीमिंग चाबी"
28
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(लिंक)"
29
 Basic.AutoConfig.StreamPage.EncoderKey="एनकोडर कुंजी"
30
+Basic.AutoConfig.StreamPage.ConnectedAccount="जुड़ा हुआ खाता"
31
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="बैंडविड्थ परीक्षण कर बिटरेट का अनुमान लगाएं (कुछ मिनट लग सकते हैं)"
32
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="हार्डवेयर एन्कोडिंग को प्राथमिकता दें"
33
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="हार्डवेयर एन्कोडिंग अधिकांश CPU उपयोग को समाप्त करता है, लेकिन गुणवत्ता के समान स्तर को प्राप्त करने के लिए अधिक बिटरेट की आवश्यकता हो सकती है."
34
@@ -321,6 +324,8 @@
35
 Output.RecordError.EncodeErrorMsg="रिकॉर्डिंग करते समय एक एनकोडर त्रुटि हुई."
36
 Output.BadPath.Title="अमान्य फ़ाइल पथ"
37
 Output.BadPath.Text="कॉन्फ़िगर किया गया फ़ाइल आउटपुट पथ अमान्य है. कृपया पुष्टि करने के लिए अपनी सेटिंग जांचें कि एक मान्य फ़ाइल पथ सेट किया गया है."
38
+Output.NoBroadcast.Title="कोई प्रसारण कॉन्फ़िगरर्ड नहीं है"
39
+Output.NoBroadcast.Text="स्ट्रीमिंग शुरू करने से पहले आपको एक प्रसारण सेट करना होगा."
40
 LogReturnDialog="लॉग अपलोड सफल"
41
 LogReturnDialog.Description="आपकी लॉग फ़ाइल अपलोड कर दी गई है. अब आप डीबगिंग या सहायता उद्देश्यों के लिए URL साझा कर सकते हैं."
42
 LogReturnDialog.Description.Crash="आपकी क्रैश रिपोर्ट अपलोड कर दी गई है. अब आप डीबगिंग उद्देश्यों के लिए URL साझा कर सकते हैं."
43
@@ -329,16 +334,563 @@
44
 LogReturnDialog.ErrorUploadingLog="लॉग फ़ाईल अपलोड करने में त्रुटि"
45
 Remux.SourceFile="OBS रिकॉर्डिंग"
46
 Remux.TargetFile="लक्ष्य फाइल"
47
+Remux.Remux="रीमक्स"
48
+Remux.Stop="रीमक्सिंग रोकें"
49
+Remux.ClearFinished="संपूर्ण वस्तुओं की सफाई करें"
50
+Remux.ClearAll="सभी वस्तुओं की सफाई करें"
51
+Remux.OBSRecording="OBS रिकॉर्डिंग"
52
+Remux.FinishedTitle="रीमक्सिंग समाप्त"
53
+Remux.Finished="रिकॉर्डिंग रीमक्स हो गया"
54
+Remux.FinishedError="रिकॉर्डिंग रीमक्स की गई, लेकिन फ़ाइल अधूरी हो सकती है"
55
+Remux.SelectRecording="OBS रिकॉर्डिंग चुनें..."
56
+Remux.SelectTarget="लक्ष्य फ़ाइल चुनें..."
57
+Remux.FileExistsTitle="लक्ष्य फ़ाइलें मौजूद हैं"
58
+Remux.FileExists="निम्न लक्ष्य फ़ाइलें पहले से मौजूद हैं. क्या आप उन्हें बदलना चाहते हैं?"
59
+Remux.ExitUnfinishedTitle="रीमक्सिंग हो रहा है"
60
+Remux.ExitUnfinished="रीमक्सिंग पूरा नहीं हुआ है, अभी रोकना लक्ष्य फ़ाइल को अनुपयोगी बना सकता है.\nक्या आप सचमुच रीमक्सिंग को रोकना चाहते हैं?"
61
+Remux.HelpText="फ़ाइलों को रीमक्स करने के लिए इस विंडो में गिराएं, या किसी फ़ाइल को ब्राउज़ करने के लिए एक खाली \"OBS रिकॉर्डिंग\" सेल का चयन करें."
62
+MissingFiles="अनुपलब्ध फाइलें"
63
+MissingFiles.MissingFile="अनुपलब्ध फाइल"
64
+MissingFiles.NewFile="नई फ़ाइल"
65
+MissingFiles.HelpText="आपके द्वारा पिछली बार OBS का उपयोग किए जाने के बाद से कुछ फ़ाइलें अनुपलब्ध हैं."
66
+MissingFiles.Clear="<अनुपलब्ध>"
67
+MissingFiles.NumFound="$1 मिला कुल $2 में"
68
+MissingFiles.Search="डायरेक्टरी में ढूंढें..."
69
+MissingFiles.SelectFile="फ़ाइल चुनें..."
70
+MissingFiles.SelectDir="ढूंढने के लिए फ़ोल्डर चुनें"
71
+MissingFiles.State="अवस्था"
72
+MissingFiles.Missing="अनुपलब्ध"
73
+MissingFiles.Replaced="बदला गया"
74
+MissingFiles.Cleared="हटाया गया"
75
+MissingFiles.Found="मिला"
76
+MissingFiles.AutoSearch="अतिरिक्त मेल खाती फा़ईलें मिलीं"
77
+MissingFiles.AutoSearchText="OBS ने उस डायरेक्टरी में अनुपलब्ध फ़ाइलों के लिए अतिरिक्त मिलान पाया है. क्या आप उन्हें जोड़ना चाहेंगे?"
78
+MissingFiles.NoMissing.Title="अनुपलब्ध फाइलों की जाँच"
79
+MissingFiles.NoMissing.Text="एक भी फ़ाइल अनुपलब्ध नहीं है."
80
 UpdateAvailable="नया अपडेट उपलब्ध है"
81
+UpdateAvailable.Text="संस्करण %1.%2.%3 अब उपलब्ध है. <a href='%4'>डाउनलोड के लिये यहाँ क्लिक करें</a>"
82
+Basic.DesktopDevice1="डेस्कटॉप ऑडियो"
83
 Basic.DesktopDevice2="डेस्कटॉप ऑडियो 2"
84
 Basic.Scene="दृश्य"
85
 Basic.DisplayCapture="डिसप्ले कैप्चर करें"
86
 Basic.Main.PreviewConextMenu.Enable="पूर्वावलोकन सक्षम करें"
87
 Basic.Main.Preview.Disable="पूर्वावलोकन अक्षम करें"
88
+ScaleFiltering="स्केल फ़िल्टरिंग"
89
+ScaleFiltering.Point="बिंदु"
90
+ScaleFiltering.Bilinear="द्विरेखीय"
91
+ScaleFiltering.Bicubic="बाइक्यूबिक"
92
+ScaleFiltering.Area="क्षेत्र"
93
+Deinterlacing="डीइंटरलेस"
94
+Deinterlacing.Discard="छोड़ें"
95
+Deinterlacing.Retro="रेट्रो"
96
+Deinterlacing.Blend="मिश्रण"
97
+Deinterlacing.Blend2x="मिश्रण 2x"
98
+Deinterlacing.Linear="रेखीय"
99
+Deinterlacing.Linear2x="रेखीय 2x"
100
+Deinterlacing.TopFieldFirst="ऊपरी फील्ड पहले"
101
+Deinterlacing.BottomFieldFirst="निचला फील्ड पहले"
102
+VolControl.SliderUnmuted="वॉल्यूम स्लाइडर '%1' के लिए :"
103
+VolControl.SliderMuted="'%1' के लिए वॉल्यूम स्लाइडर : (वर्तमान में मौन)"
104
+VolControl.Mute="'%1' मौन करें"
105
+VolControl.Properties="'%1' के गुण"
106
+Basic.Main.AddSceneDlg.Title="दृश्य जोड़ें"
107
+Basic.Main.AddSceneDlg.Text="कृपया दृश्य का नाम लिखें"
108
+Basic.Main.DefaultSceneName.Text="दृश्य %1"
109
+Basic.Main.AddSceneCollection.Title="दृश्य संग्रह जोड़ें"
110
+Basic.Main.AddSceneCollection.Text="कृपया दृश्य संग्रह का नाम लिखें"
111
+Basic.Main.RenameSceneCollection.Title="दृश्य संग्रह का नया नाम रखें"
112
+AddProfile.Title="प्रोफ़ाइल जोड़ें"
113
+AddProfile.Text="कृपया प्रोफ़ाइल का नाम लिखें"
114
+AddProfile.WizardCheckbox="ऑटो-कॉन्फ़िगरेशन विज़ार्ड दिखाएं"
115
+RenameProfile.Title="प्रोफ़ाइल का नाम बदलें"
116
+Basic.Main.MixerRename.Title="ऑडियो स्रोत का नाम बदलें"
117
+Basic.Main.MixerRename.Text="कृपया ऑडियो स्रोत का नाम लिखें"
118
+Basic.Main.PreviewDisabled="पूर्वालोकन अभी अक्षम है."
119
+Basic.SourceSelect="स्रोत बनाएं/चुनें"
120
+Basic.SourceSelect.CreateNew="नया बनाएं"
121
+Basic.SourceSelect.AddExisting="उपलब्ध जोड़ें"
122
+Basic.SourceSelect.AddVisible="स्रोत दृश्यमान बनाएं"
123
+Basic.Main.Sources.Visibility="दृश्यता"
124
+Basic.Main.Sources.VisibilityDescription="कैनवास में '%1' की दृश्यता को नियंत्रित करता है"
125
+Basic.Main.Sources.Lock="ताला"
126
+Basic.Main.Sources.LockDescription="कैनवास में '%1' की स्थिति और पैमाने को ताला-बंद करता है"
127
+Basic.PropertiesWindow="'%1' के गुण"
128
+Basic.PropertiesWindow.AutoSelectFormat="%1 (स्वतः चयन : %2)"
129
+Basic.PropertiesWindow.SelectColor="रंग चुनें"
130
+Basic.PropertiesWindow.SelectFont="फ़ॉन्ट चुनें"
131
+Basic.PropertiesWindow.ConfirmTitle="सेटिंग्स बदल गईं"
132
+Basic.PropertiesWindow.Confirm="आपके पास असंचित परिवर्तन हैं. क्या आप इन्हें सहेजना चाहते हैं?"
133
+Basic.PropertiesWindow.NoProperties="कोई गुण उपलब्ध नहीं है"
134
+Basic.PropertiesWindow.AddFiles="फाइलें जोड़ें"
135
+Basic.PropertiesWindow.AddDir="डायरेक्टरी जोड़ें"
136
+Basic.PropertiesWindow.AddURL="पथ/URL जोड़ें"
137
+Basic.PropertiesWindow.AddEditableListDir="'%1' में डायरेक्टरी जोड़ें"
138
+Basic.PropertiesWindow.AddEditableListFiles="'%1' में फ़ाइलें जोड़ें"
139
+Basic.PropertiesWindow.AddEditableListEntry="'%1' में प्रविष्टि जोड़ें"
140
+Basic.PropertiesWindow.EditEditableListEntry="'%1' से प्रविष्टि संपादित करें"
141
+Basic.PropertiesView.FPS.Simple="सरल FPS मान"
142
+Basic.PropertiesView.FPS.Rational="युक्तिसंगत FPS मान"
143
+Basic.PropertiesView.FPS.ValidFPSRanges="वैध FPS रेंज :"
144
+Basic.PropertiesView.UrlButton.Text="इस लिंक को अपने डिफ़ॉल्ट वेब ब्राउज़र में खोलें?"
145
+Basic.PropertiesView.UrlButton.OpenUrl="URL खोलें"
146
+Basic.InteractionWindow="'%1' से सहभागिता"
147
+Basic.StatusBar.Reconnecting="डिस्कनेक्ट हो गया,%2 सेकंड में पुन: कनेक्ट हो रहा है (प्रयास %1)"
148
+Basic.StatusBar.AttemptingReconnect="पुन: कनेक्ट करने का प्रयास कर रहे हैं... (प्रयास %1)"
149
+Basic.StatusBar.ReconnectSuccessful="कनेक्शन पुन: स्थापित हो गया"
150
+Basic.StatusBar.Delay="विलंब (%1 सेकंड)"
151
+Basic.StatusBar.DelayStartingIn="विलंब ( %1 सेकेंड में प्रारंभ होगा)"
152
+Basic.StatusBar.DelayStoppingIn="विलंब ( %1 सेकेंड में रोकेंगे)"
153
+Basic.StatusBar.DelayStartingStoppingIn="विलंब (%1 सेकेंड मे रूकेगा, %2 सेकेंड मे प्रारंभ होगा)"
154
+Basic.StatusBar.RecordingSavedTo="रिकॉर्डिंग को '%1 में सहेजा गया."
155
+Basic.StatusBar.ReplayBufferSavedTo="रीप्ले बफ़र '%1' में सहेजा गया"
156
+Basic.StatusBar.ScreenshotSavedTo="स्क्रीनशॉट '%1' में सहेजा गया"
157
+Basic.StatusBar.AutoRemuxedTo="रिकॉर्डिंग को '%1' में रीमक्स किया गया"
158
+Basic.Filters="फिल्टर"
159
+Basic.Filters.AsyncFilters="ऑडियो/वीडियो फिल्टर"
160
+Basic.Filters.AudioFilters="ऑडियो फिल्टर"
161
+Basic.Filters.EffectFilters="प्रभाव फिल्टर"
162
+Basic.Filters.Title="'%1' के लिए फिल्टर"
163
+Basic.Filters.AddFilter.Title="फ़िल्टर का नाम"
164
+Basic.Filters.AddFilter.Text="कृपया फिल्टर के लिए एक नाम बताएं"
165
+Basic.TransformWindow="दृश्य वस्तु रूपांतर करें"
166
+Basic.TransformWindow.Position="स्थिति"
167
+Basic.TransformWindow.PositionX="स्थिति X"
168
+Basic.TransformWindow.PositionY="स्थिति Y"
169
+Basic.TransformWindow.Rotation="घुमाव"
170
+Basic.TransformWindow.Size="आकार"
171
+Basic.TransformWindow.Width="चौड़ाई"
172
+Basic.TransformWindow.Height="ऊँचाई"
173
+Basic.TransformWindow.Alignment="स्थितीय संरेखण"
174
+Basic.TransformWindow.BoundsType="बाउंडिंग बॉक्स प्रकार"
175
+Basic.TransformWindow.BoundsAlignment="बाउंडिंग बॉक्स में संरेखण"
176
+Basic.TransformWindow.Bounds="बाउंडिंग बॉक्स आकार"
177
+Basic.TransformWindow.BoundsWidth="बाउंडिंग बॉक्स चौड़ाई"
178
+Basic.TransformWindow.BoundsHeight="बाउंडिंग बॉक्स ऊँचाई"
179
+Basic.TransformWindow.Crop="छँटाई करें"
180
+Basic.TransformWindow.CropLeft="बाएं से छाँटें"
181
+Basic.TransformWindow.CropRight="दाएं से छाँटें"
182
+Basic.TransformWindow.CropTop="ऊपर से छाँटें"
183
+Basic.TransformWindow.CropBottom="नीचे से छाँटें"
184
+Basic.TransformWindow.Alignment.TopLeft="ऊपर बाएं"
185
+Basic.TransformWindow.Alignment.TopCenter="ऊपरी मध्य"
186
+Basic.TransformWindow.Alignment.TopRight="ऊपर दायें"
187
+Basic.TransformWindow.Alignment.CenterLeft="बायां केंद्र"
188
+Basic.TransformWindow.Alignment.Center="केंद्र"
189
+Basic.TransformWindow.Alignment.CenterRight="दायां केंद्र"
190
+Basic.TransformWindow.Alignment.BottomLeft="नीचे बायें"
191
+Basic.TransformWindow.Alignment.BottomCenter="नीचे केंद्र में"
192
+Basic.TransformWindow.Alignment.BottomRight="नीचे दाएं"
193
+Basic.TransformWindow.BoundsType.None="असीमित"
194
+Basic.TransformWindow.BoundsType.MaxOnly="केवल अधिकतम आकार"
195
+Basic.TransformWindow.BoundsType.ScaleInner="आंतरिक सीमा तक बढ़ाएं"
196
+Basic.TransformWindow.BoundsType.ScaleOuter="बाह्य सीमा तक बढ़ाएं"
197
+Basic.TransformWindow.BoundsType.ScaleToWidth="सीमा की चौड़ाई तक बढ़ाएं"
198
+Basic.TransformWindow.BoundsType.ScaleToHeight="सीमा की ऊँचाई तक बढ़ाएं"
199
+Basic.TransformWindow.BoundsType.Stretch="सीमाओं तक विस्तृत करें"
200
+Basic.TransformWindow.Title="'%1' के लिए रूपांतर संपादित करें"
201
+Basic.TransformWindow.NoSelectedSource="कोई स्रोत नहीं चुना गया"
202
+Basic.Main.AddSourceHelp.Title="स्रोत नहीं जोड़ सकते"
203
+Basic.Main.AddSourceHelp.Text="स्रोत जोड़ने के लिए आपके पास कम से कम 1 दृश्य होना चाहिए."
204
+Basic.Main.Scenes="दृश्य"
205
+Basic.Main.Sources="स्रोत"
206
+Basic.Main.Source="स्रोत"
207
+Basic.Main.Controls="नियंत्रण"
208
+Basic.Main.Connecting="कनेक्ट हो रहा है..."
209
+Basic.Main.StartRecording="रिकॉर्डिंग शुरू करें"
210
+Basic.Main.StartReplayBuffer="रीप्ले बफ़र आरंभ करें"
211
+Basic.Main.SaveReplay="रीप्ले सहेजें"
212
+Basic.Main.StartStreaming="स्ट्रीमिंग आरंभ करें"
213
+Basic.Main.StartBroadcast="लाइव हो जाइए"
214
+Basic.Main.StartVirtualCam="आभासी कैमरा चलाएं"
215
+Basic.Main.StopRecording="रिकॉर्डिंग बंद करें"
216
 Basic.Main.PauseRecording="रिकॉर्डिंग रोकें"
217
+Basic.Main.UnpauseRecording="रिकॉर्डिंग चलने दें"
218
+Basic.Main.StoppingRecording="रिकॉर्डिंग बंद कर रहे हैं"
219
+Basic.Main.StopReplayBuffer="रीप्ले बफ़र रोक दें"
220
+Basic.Main.StoppingReplayBuffer="रीप्ले बफ़र रोक रहे हैं"
221
+Basic.Main.SetupBroadcast="प्रसारण प्रबंध करें"
222
+Basic.Main.StopStreaming="प्रसारण रोकें"
223
+Basic.Main.StopBroadcast="प्रसारण समाप्त करें"
224
+Basic.Main.AutoStopEnabled="(ऑटो स्टॉप)"
225
+Basic.Main.StoppingStreaming="प्रसारण रोक रहे हैं"
226
+Basic.Main.ForceStopStreaming="स्ट्रीमिंग बंद करें (विलंब त्यागें)"
227
+Basic.Main.ShowContextBar="स्रोत टूलबार दिखाएं"
228
+Basic.Main.HideContextBar="स्रोत टूलबार छिपाएं"
229
+Basic.Main.StopVirtualCam="आभासी कैमरा रोक दें"
230
+Basic.Main.Group="समूह %1"
231
+Basic.Main.GroupItems="ग्रुप में चुनी वस्तुएं"
232
+Basic.Main.Ungroup="ग्रुप से अलग करें"
233
+Basic.Main.GridMode="ग्रिड मोड"
234
+Basic.Main.ListMode="सूची मोड"
235
+Basic.MainMenu.File="फ़ाइल (&F)"
236
+Basic.MainMenu.File.Export="निर्यात (&E)"
237
+Basic.MainMenu.File.Import="आयात (&I)"
238
+Basic.MainMenu.File.ShowRecordings="रिकॉर्डिंग दिखाएं (&R)"
239
+Basic.MainMenu.File.Remux="रिमक्स रिकॉर्डिंग्स (&m)"
240
+Basic.MainMenu.File.Settings="सेटिंग्स (&S)"
241
+Basic.MainMenu.File.ShowSettingsFolder="सेटिंग्स फोल्डर दिखाएं"
242
+Basic.MainMenu.File.ShowProfileFolder="प्रोफ़ाइल फोल्डर दिखाएं"
243
+Basic.MainMenu.File.ShowMissingFiles="अनुपलब्ध फाइलों की जाँच करें"
244
+Basic.MainMenu.AlwaysOnTop="हमेशा सबसे ऊपर (&A)"
245
+Basic.MainMenu.File.Exit="प्रस्थान (&x)"
246
+Basic.MainMenu.Edit="संपादित करें"
247
+Basic.MainMenu.Edit.Undo="पूर्ववत करें (&U)"
248
+Basic.MainMenu.Edit.Redo="पुनः दुहराएं (&R)"
249
+Basic.MainMenu.Edit.UndoAction="$1 पूर्ववत (&U)"
250
+Basic.MainMenu.Edit.RedoAction="$1 दुहराएं (&R)"
251
+Basic.MainMenu.Edit.LockPreview="पूर्वावलोकन लॉक करें"
252
+Basic.MainMenu.Edit.Scale="स्केलिंग पूर्वावलोकन (&S)"
253
+Basic.MainMenu.Edit.Scale.Window="विंडो में विस्तृत करें"
254
+Basic.MainMenu.Edit.Scale.Canvas="कैनवास (%1x%2)"
255
+Basic.MainMenu.Edit.Scale.Output="आउटपुट (%1x%2)"
256
+Basic.MainMenu.Edit.Transform="रूपांतर करें (&T)"
257
+Basic.MainMenu.Edit.Transform.EditTransform="रूपांतर संपादित करें... (&E)"
258
+Basic.MainMenu.Edit.Transform.CopyTransform="रूपांतर की प्रतिलिपि बनाएं"
259
+Basic.MainMenu.Edit.Transform.PasteTransform="रूपांतर चिपकाएं"
260
+Basic.MainMenu.Edit.Transform.ResetTransform="रूपांतर रीसेट करें"
261
+Basic.MainMenu.Edit.Transform.Rotate90CW="90 डिग्री CW घुमाएं"
262
+Basic.MainMenu.Edit.Transform.Rotate90CCW="90 डिग्री CCW घुमाएं"
263
+Basic.MainMenu.Edit.Transform.Rotate180="180 डिग्री घुमाएं"
264
+Basic.MainMenu.Edit.Transform.FlipHorizontal="क्षैतिज में पलटें (&H)"
265
+Basic.MainMenu.Edit.Transform.FlipVertical="ऊर्ध्वाधर पलटें (&V)"
266
+Basic.MainMenu.Edit.Transform.FitToScreen="स्क्रीन में फ़िट करें"
267
+Basic.MainMenu.Edit.Transform.StretchToScreen="पूरे स्क्रीन में फैला दें"
268
+Basic.MainMenu.Edit.Transform.CenterToScreen="स्क्रीन के मध्य में रखें"
269
+Basic.MainMenu.Edit.Transform.VerticalCenter="लंबवत केन्द्रित करें"
270
+Basic.MainMenu.Edit.Transform.HorizontalCenter="क्षैतिज केन्द्रित करें"
271
+Basic.MainMenu.Edit.Order="क्रमानुसार (&O)"
272
+Basic.MainMenu.Edit.Order.MoveUp="ऊपर ले जाएँ"
273
+Basic.MainMenu.Edit.Order.MoveDown="नीचे ले जाएँ"
274
+Basic.MainMenu.Edit.Order.MoveToTop="शीर्ष पर ले जाएँ"
275
+Basic.MainMenu.Edit.Order.MoveToBottom="तल पर ले जाएं"
276
+Basic.MainMenu.Edit.AdvAudio="उन्नत ऑडियो गुण"
277
 Basic.MainMenu.View="दृश्य"
278
 Basic.MainMenu.View.Toolbars="टूलबार"
279
 Basic.MainMenu.View.Docks="डॉक"
280
+Basic.MainMenu.View.Docks.ResetUI="UI रीसेट करें"
281
+Basic.MainMenu.View.Docks.LockUI="UI लॉक करें"
282
+Basic.MainMenu.View.Docks.CustomBrowserDocks="कस्टम ब्राउज़र डॉक्स..."
283
+Basic.MainMenu.View.ListboxToolbars="दृश्य/स्रोत सूची बटन"
284
+Basic.MainMenu.View.ContextBar="स्रोत टूलबार"
285
+Basic.MainMenu.View.SceneTransitions="दृश्य संक्रांति (&c)"
286
+Basic.MainMenu.View.SourceIcons="स्रोत आइकन्स (&I)"
287
+Basic.MainMenu.View.StatusBar="स्टेटस बार (&S)"
288
+Basic.MainMenu.View.Fullscreen.Interface="फ़ुलस्क्रीन इंटरफ़ेस"
289
+Basic.MainMenu.SceneCollection="दृश्य संग्रह (&S)"
290
+Basic.MainMenu.Profile="प्रोफ़ाइल (&P)"
291
+Basic.MainMenu.Profile.Import="प्रोफ़ाइल आयात करें"
292
+Basic.MainMenu.Profile.Export="प्रोफ़ाइल निर्यात करें"
293
+Basic.MainMenu.SceneCollection.Import="दृश्य संग्रह आयात करें"
294
+Basic.MainMenu.SceneCollection.Export="दृश्य संग्रह निर्यात करें"
295
+Basic.MainMenu.Profile.Exists="प्रोफ़ाइल पहले ही विद्यमान है"
296
+Basic.MainMenu.SceneCollection.Exists="दृश्य संग्रह पहले ही विद्यमान है"
297
+Basic.MainMenu.Tools="टूल्स (&T)"
298
+Basic.MainMenu.Help="मदद (&H)"
299
+Basic.MainMenu.Help.HelpPortal="मदद पोर्टल (&P)"
300
+Basic.MainMenu.Help.Website="वेबसाइट पर जाएँ (&W)"
301
+Basic.MainMenu.Help.Discord="&Discord सर्वर से जुड़ें"
302
+Basic.MainMenu.Help.Logs="लॉग फ़ाइलें (&L)"
303
+Basic.MainMenu.Help.Logs.ShowLogs="लॉग फ़ाइलें दिखाएं (&S)"
304
+Basic.MainMenu.Help.Logs.UploadCurrentLog="वर्तमान लॉग फ़ाइल अपलोड करें (&C)"
305
+Basic.MainMenu.Help.Logs.UploadLastLog="पिछला लॉग फ़ाइल अपलोड करें (&L)"
306
+Basic.MainMenu.Help.Logs.ViewCurrentLog="वर्तमान लॉग देखें"
307
+Basic.MainMenu.Help.CheckForUpdates="अपडेट के लिए देखें"
308
+Basic.MainMenu.Help.CrashLogs="क्रैश रिपोर्ट (&R)"
309
+Basic.MainMenu.Help.CrashLogs.ShowLogs="क्रैश रिपोर्ट दिखाएं (&S)"
310
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="पिछला क्रैश रिपोर्ट अपलोड करें"
311
+Basic.MainMenu.Help.About="परिचय (&A)"
312
+Basic.Settings.ProgramRestart="परिवर्तनों को लागू करने के लिए प्रोग्राम को रीस्टार्ट करना जरूरी है."
313
+Basic.Settings.ConfirmTitle="परिवर्तनों की पुष्टि करें"
314
+Basic.Settings.Confirm="आपने परिवर्तनों को अभी नहीं सहेजा है. क्या आप इन्हें सहेजना चाहते हैं?"
315
+Basic.Settings.General="सामान्य"
316
+Basic.Settings.General.Theme="थीम"
317
+Basic.Settings.General.Language="भाषा"
318
+Basic.Settings.General.EnableAutoUpdates="प्रारंभ में स्वतः अपडेट के लिए जांच करें"
319
+Basic.Settings.General.OpenStatsOnStartup="प्रारंभ में आँकड़े दिखाने के लिए पूछें"
320
+Basic.Settings.General.WarnBeforeStartingStream="नए स्ट्रीम्स आरंभ करने के लिए पुष्टि संवाद दिखाएँ"
321
+Basic.Settings.General.WarnBeforeStoppingStream="नए स्ट्रीम्स को रोकने के लिए पुष्टि संवाद दिखाएँ"
322
+Basic.Settings.General.WarnBeforeStoppingRecord="रिकॉर्डिंग रोकने के लिए पुष्टि संवाद दिखाएँ"
323
+Basic.Settings.General.Projectors="प्रदर्शक"
324
+Basic.Settings.General.HideProjectorCursor="प्रोजेक्टर पर कर्सर छुपाएं"
325
+Basic.Settings.General.ProjectorAlwaysOnTop="प्रोजेक्टर को हमेशा ऊपर रखें"
326
+Basic.Settings.General.Snapping="स्रोत संरेखण स्नैपिंग"
327
+Basic.Settings.General.ScreenSnapping="स्रोतों को स्क्रीन के किनारे पर स्नैप करें"
328
+Basic.Settings.General.CenterSnapping="स्रोतों को क्षैतिज और लंबवत केंद्र में स्नैप करें"
329
+Basic.Settings.General.SourceSnapping="स्रोतों को अन्य स्रोतों के साथ स्नैप करें"
330
+Basic.Settings.General.SnapDistance="स्नैप संवेदनशीलता"
331
+Basic.Settings.General.RecordWhenStreaming="स्ट्रीमिंग करते समय स्वचालित रूप से रिकॉर्ड करें"
332
+Basic.Settings.General.KeepRecordingWhenStreamStops="स्ट्रीम रुकने पर रिकॉर्डिंग करते रहें"
333
+Basic.Settings.General.ReplayBufferWhileStreaming="स्ट्रीमिंग करते समय स्वचालित रूप से रीप्ले बफर प्रारंभ करें"
334
+Basic.Settings.General.KeepReplayBufferStreamStops="स्ट्रीम रुकने पर रीप्ले बफर को सक्रिय रखें"
335
+Basic.Settings.General.SysTray="सिस्टम ट्रे"
336
+Basic.Settings.General.SysTrayWhenStarted="प्रारंभ होने पर सिस्टम ट्रे में न्यूनतम करें"
337
+Basic.Settings.General.SystemTrayHideMinimize="टास्क बार के बजाय हमेशा सिस्टम ट्रे में छोटा करें"
338
+Basic.Settings.General.SaveProjectors="बाहर निकलने पर प्रोजेक्टरों को संचित करें"
339
+Basic.Settings.General.Preview="पूर्वावलोकन"
340
+Basic.Settings.General.OverflowHidden="ओवरफ्लो छुपाएं"
341
+Basic.Settings.General.OverflowAlwaysVisible="ओवरफ्लो हमेशा दिखाई देगा"
342
+Basic.Settings.General.OverflowSelectionHidden="स्रोत के अदृश्य होने पर भी ओवरफ्लो दिखाएं"
343
+Basic.Settings.General.Importers="आयातकर्ता"
344
+Basic.Settings.General.AutomaticCollectionSearch="आयात करते समय दृश्य संग्रह के लिए ज्ञात स्थानों में खोजें"
345
+Basic.Settings.General.SwitchOnDoubleClick="दृश्य संक्रांति के लिए डबल-क्लिक करें"
346
+Basic.Settings.General.StudioPortraitLayout="पोर्ट्रेट/वर्टिकल लेआउट सक्षम करें"
347
+Basic.Settings.General.TogglePreviewProgramLabels="पूर्वावलोकन/कार्यक्रम लेबल दिखाएं"
348
+Basic.Settings.General.Multiview="मल्टीव्यू"
349
+Basic.Settings.General.Multiview.MouseSwitch="दृश्य की अदला-बदला के लिए क्लिक करें."
350
+Basic.Settings.General.Multiview.DrawSourceNames="दृश्यों के नाम दिखाएं"
351
+Basic.Settings.General.Multiview.DrawSafeAreas="सुरक्षित क्षेत्र बनाएं (EBU R 95)"
352
+Basic.Settings.General.MultiviewLayout="मल्टीव्यू लेआउट"
353
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="क्षैतिज, शीर्ष (8 दृश्य)"
354
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="क्षैतिज, नीचे (8 दृश्य)"
355
+Basic.Settings.General.MultiviewLayout.Vertical.Left="लंबवत, बाएं (8 दृश्य)"
356
+Basic.Settings.General.MultiviewLayout.Vertical.Right="लंबवत, दाएं (8 दृश्य)"
357
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="क्षैतिज, शीर्ष (18 दृश्य)"
358
+Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="क्षैतिज, शीर्ष (24 दृश्य)"
359
+Basic.Settings.Stream="स्ट्रीम"
360
+Basic.Settings.Stream.StreamType="स्ट्रीम प्रकार"
361
+Basic.Settings.Stream.Custom.UseAuthentication="प्रमाणीकरण का प्रयोग करें"
362
+Basic.Settings.Stream.Custom.Username="उपयोगकर्ता का नाम"
363
+Basic.Settings.Stream.Custom.Password="पासवर्ड"
364
+Basic.Settings.Stream.BandwidthTestMode="बैंडविड्थ टेस्ट मोड सक्षम करें"
365
+Basic.Settings.Stream.TTVAddon="Twitch चैट ऐड-ऑन"
366
+Basic.Settings.Stream.TTVAddon.None="कुछ नहीं"
367
+Basic.Settings.Stream.TTVAddon.Both="BetterTTV तथा FrankerFaceZ"
368
+Basic.Settings.Stream.MissingSettingAlert="अनुपलब्ध स्ट्रीम सेटअप"
369
+Basic.Settings.Stream.StreamSettingsWarning="सेटिंग्स खोलें"
370
+Basic.Settings.Stream.MissingUrlAndApiKey="URL और स्ट्रीम कुंजी अनुपलब्ध हैं.\n\n'स्ट्रीम' टैब में URL और स्ट्रीम कुंजी दर्ज करने के लिए सेटिंग्स खोलें."
371
+Basic.Settings.Stream.MissingUrl="स्ट्रीम URL अनुपलब्ध है.\n\n'स्ट्रीम' टैब में URL दर्ज करने के लिए सेटिंग्स खोलें."
372
+Basic.Settings.Stream.MissingStreamKey="स्ट्रीम कुँजी अनुपलब्ध है.\n\n'स्ट्रीम' टैब में स्ट्रीम कुँजी दर्ज करने के लिए सेटिंग्स खोलें."
373
+Basic.Settings.Stream.IgnoreRecommended="स्ट्रीमिंग सेवा सेटिंग अनुशंसाओं पर ध्यान न दें"
374
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="अनुशंसित सेटिंग्स को ओवरराइड करें"
375
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="चेतावनी: सेवा की सीमाओं को अनदेखा करने से स्ट्रीम की गुणवत्ता में कमी आ सकती है या आपको स्ट्रीमिंग से रोका जा सकता है.\n\nजारी रखें?"
376
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="अधिकतम वीडियो बिट दर : %1 kbps"
377
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="अधिकतम ऑडियो बिट दर : %1 kbps"
378
+Basic.Settings.Stream.Recommended.MaxResolution="अधिकतम रिज़ोल्यूशन : %1"
379
+Basic.Settings.Stream.Recommended.MaxFPS="अधिकतम FPS: %1"
380
+Basic.Settings.Output="आउटपुट"
381
+Basic.Settings.Output.Format="रिकॉर्डिंग प्रारूप"
382
+Basic.Settings.Output.Encoder="एनकोडर"
383
+Basic.Settings.Output.SelectDirectory="रिकॉर्डिंग डायरेक्टरी चुनें"
384
+Basic.Settings.Output.SelectFile="रिकॉर्डिंग फ़ाइल चुनें"
385
+Basic.Settings.Output.DynamicBitrate="भीड़भाड़ को प्रबंधित करने के लिए गतिशील रूप से बिटरेट बदलें"
386
+Basic.Settings.Output.DynamicBitrate.Beta="भीड़भाड़ को प्रबंधित करने के लिए गतिशील रूप से बिटरेट बदलें (बीटा)"
387
+Basic.Settings.Output.DynamicBitrate.TT="भीड़-भाड़ को कम करने के लिए फ़्रेम छोड़ने के बजाय, गतिशील रूप से बिटरेट को बदलता है.\n\nध्यान दें कि अगर अचानक से अत्यधिक भीड़ हो जाती है तो इससे दर्शकों के लिए विलंब बढ़ सकता है.\nजब बिटरेट गिर जाता है, तो इसे पुनर्स्थापित करने में कुछ मिनट लग सकते हैं. \n\nवर्तमान में केवल RTMP के लिए समर्थित है."
388
+Basic.Settings.Output.Mode="आउटपुट मोड"
389
+Basic.Settings.Output.Mode.Simple="सरल"
390
+Basic.Settings.Output.Mode.Adv="उन्नत"
391
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg आउटपुट"
392
+Basic.Settings.Output.UseReplayBuffer="रीप्ले बफ़र सक्षम करें"
393
+Basic.Settings.Output.ReplayBuffer.SecondsMax="अधिकतम रीप्ले समय"
394
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="अधिकतम मेमोरी (मेगाबाइट्स)"
395
+Basic.Settings.Output.ReplayBuffer.Estimate="अनुमानित मेमोरी उपयोग : %1 एमबी"
396
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="मेमोरी उपयोग का अनुमान नहीं लगा सकता. कृपया अधिकतम मेमोरी सीमा निर्धारित करें."
397
+Basic.Settings.Output.ReplayBuffer.Prefix="रीप्ले बफ़र फ़ाइल नाम उपसर्ग"
398
+Basic.Settings.Output.ReplayBuffer.Suffix="प्रत्यय"
399
+Basic.Settings.Output.Simple.SavePath="रिकॉर्डिंग पथ"
400
+Basic.Settings.Output.Simple.RecordingQuality="रिकॉर्डिंग गुणवत्ता"
401
+Basic.Settings.Output.Simple.RecordingQuality.Stream="स्ट्रीम के समान"
402
+Basic.Settings.Output.Simple.RecordingQuality.Small="उच्च गुणवत्ता, मध्यम फ़ाइल आकार"
403
+Basic.Settings.Output.Simple.RecordingQuality.HQ="अप्रभेद्य गुणवत्ता, बड़ी फ़ाइल आकार"
404
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="दोषरहित गुणवत्ता, अत्यधिक बड़ी फ़ाइल आकार"
405
+Basic.Settings.Output.Simple.Warn.VideoBitrate="चेतावनी : स्ट्रीमिंग वीडियो बिटरेट को %1 पर सेट किया जाएगा, जो वर्तमान स्ट्रीमिंग सेवा की ऊपरी सीमा है."
406
+Basic.Settings.Output.Simple.Warn.AudioBitrate="चेतावनी : स्ट्रीमिंग ऑडियो बिटरेट को %1 पर सेट किया जाएगा, जो वर्तमान स्ट्रीमिंग सेवा की ऊपरी सीमा है."
407
+Basic.Settings.Output.Simple.Warn.CannotPause="चेतावनी : यदि रिकॉर्डिंग गुणवत्ता \"स्ट्रीम के समान\" पर सेट है, तो रिकॉर्डिंग को रोका नहीं जा सकता."
408
+Basic.Settings.Output.Simple.Warn.Encoder="चेतावनी : यदि आप एक ही समय में स्ट्रीम और रिकॉर्ड करते हैं, तो स्ट्रीम से भिन्न गुणवत्ता वाले सॉफ़्टवेयर एन्कोडर के साथ रिकॉर्डिंग के लिए अतिरिक्त CPU उपयोग की आवश्यकता होगी."
409
+Basic.Settings.Output.Simple.Warn.Lossless="चेतावनी : दोषरहित गुणवत्ता अत्यधिक बड़े फ़ाइल आकार उत्पन्न करती है! दोषरहित गुणवत्ता उच्च रिज़ॉल्यूशन और फ़्रैमरेट्स पर प्रति मिनट 7 गीगाबाइट डिस्क स्थान का उपयोग कर सकती है. लंबी रिकॉर्डिंग के लिए दोषरहित की अनुशंसा नहीं की जाती है जब तक कि आपके पास बहुत बड़ी मात्रा में डिस्क स्थान उपलब्ध न हो."
410
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="क्या आप वाकई दोषरहित गुणवत्ता का उपयोग करना चाहते हैं?"
411
+Basic.Settings.Output.Simple.Warn.Lossless.Title="दोषरहित गुणवत्ता चेतावनी!"
412
+Basic.Settings.Output.Simple.Encoder.Software="सॉफ्टवेयर (x264)"
413
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="हार्डवेयर (QSV)"
414
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="हार्डवेयर (AMD)"
415
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="हार्डवेयर (NVENC)"
416
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="सॉफ़्टवेयर (x264 कम CPU उपयोग प्रीसेट, फ़ाइल का आकार बढ़ाता है)"
417
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD 'ट्रैक (ट्रैक 2 का प्रयोग)"
418
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="असंगत रिज़ॉल्यूशन/फ़्रेमरेट"
419
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="यह स्ट्रीमिंग सेवा आपके वर्तमान आउटपुट रिज़ॉल्यूशन और/या फ़्रेमरेट का समर्थन नहीं करती है. उन्हें निकटतम संगत मान में बदल दिया जाएगा:\n\n%1\n\nक्या आप जारी रखना चाहते हैं?"
420
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="रिजॉल्यूशन : %1"
421
+Basic.Settings.Output.VideoBitrate="वीडियो बिटरेट"
422
+Basic.Settings.Output.AudioBitrate="ऑडियो बिटरेट"
423
+Basic.Settings.Output.Reconnect="स्वचालित रूप से पुन: कनेक्ट करें"
424
+Basic.Settings.Output.RetryDelay="पुनर्प्रयास विलंब"
425
+Basic.Settings.Output.MaxRetries="अधिकतम पुनर्प्रयास"
426
+Basic.Settings.Output.Advanced="उन्नत एन्कोडर सेटिंग सक्षम करें"
427
+Basic.Settings.Output.EncoderPreset="एनकोडर प्रीसेट"
428
+Basic.Settings.Output.CustomEncoderSettings="निर्मित एनकोडर सेटिंग्स"
429
+Basic.Settings.Output.CustomMuxerSettings="निर्मित मक्सर सेटिंग्स"
430
+Basic.Settings.Output.NoSpaceFileName="रिक्त-स्थान के बिना फ़ाइल नाम उत्पन्न करें"
431
+Basic.Settings.Output.Adv.Rescale="आउटपुट रीस्केल करें"
432
+Basic.Settings.Output.Adv.AudioTrack="ऑडियो ट्रैक"
433
+Basic.Settings.Output.Adv.Streaming="स्ट्रीमिंग"
434
+Basic.Settings.Output.Adv.Audio.Track1="ट्रैक 1"
435
+Basic.Settings.Output.Adv.Audio.Track2="ट्रैक 2"
436
+Basic.Settings.Output.Adv.Audio.Track3="ट्रैक 3"
437
+Basic.Settings.Output.Adv.Audio.Track4="ट्रैक 4"
438
+Basic.Settings.Output.Adv.Audio.Track5="ट्रैक 5"
439
+Basic.Settings.Output.Adv.Audio.Track6="ट्रैक 6"
440
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD ट्रैक"
441
+Basic.Settings.Output.Adv.Recording="रिकॉर्डिंग"
442
+Basic.Settings.Output.Adv.Recording.RecType="रिकॉर्डिंग प्रकार"
443
+Basic.Settings.Output.Adv.Recording.Type="प्रकार"
444
+Basic.Settings.Output.Adv.Recording.Type.Standard="मानक"
445
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="निर्मित आउटपुट (FFmpeg)"
446
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(स्ट्रीम एनकोडर प्रयोग करें)"
447
+Basic.Settings.Output.Adv.Recording.Filename="फ़ाइल नाम स्वरूपण"
448
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="फ़ाइल उपस्थित होने पर अधिलेखित करें"
449
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg आउटपुट प्रकार"
450
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="आउटपुट URL में डालें"
451
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="आउटपुट फ़ाइल में डालें"
452
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="सामान्य रिकॉर्डिंग प्रारूप"
453
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="सभी फ़ाइलें"
454
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="फ़ाइल पथ या URL"
455
+Basic.Settings.Output.Adv.FFmpeg.Format="कंटेनर प्रारूप"
456
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="ऑडियो"
457
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="वीडियो"
458
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="आरंभिक प्रारूप"
459
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="कंटेनर प्रारूप विवरण"
460
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="ऑडियो/वीडियो कोडेक का अनुमान फ़ाइल पथ या URL से लगाया गया"
461
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="डिफ़ॉल्ट एनकोडर"
462
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="एनकोडर अक्षम करें"
463
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="वीडियो एनकोडर"
464
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="वीडियो एनकोडर सेटिंग्स (यदि कोई हो)"
465
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="ऑडियो एनकोडर"
466
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="ऑडियो एनकोडर सेटिंग्स (यदि कोई हो)"
467
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="मक्सर सेटिंग्स (यदि कोई हो)"
468
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="कीफ़्रेम अंतराल (फ़्रेम्स)"
469
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="सभी कोडेक्स दिखाएं (भले ही संभावित रूप से असंगत हों)"
470
+Screenshot="स्क्रीनशॉट आउटपुट"
471
+Screenshot.SourceHotkey="चयनित स्रोत का स्क्रीनशॉट निकालें"
472
+Screenshot.StudioProgram="स्क्रीनशॉट (प्रोग्राम)"
473
+Screenshot.Preview="स्क्रीनशॉट (पूर्वदर्शन)"
474
+Screenshot.Scene="स्क्रीनशॉट (दृश्य)"
475
+Screenshot.Source="स्क्रीनशॉट (स्रोत)"
476
+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     मिनट (00-59)\n%ss       सेकेंड (00-61)\n%%      A % sign\n%a        कार्यदिवस का संक्षिप्त  नाम\n%A     कार्यदिवस का पूरा नाम\n%b       महीने का संक्षिप्त नाम\n%B      महीने का पूरा नाम\n%d       महीने का दिन, शून्य-पूरित (01-31)\n%H       24घं के प्रारूप में घंटा (00-23)\n%I        12घं के प्रारूप में घंटा (01-12)\n%m        दशमलव संख्या के रूप में महीना (01-12)\n%M       मिनट (00-59)\n%p        पूर्वाह्न या अपराह्न\n%S        सेकेंड (00-61)\n%y      वर्ष, अंतिम दो अंक (00-99)\n%Y      वर्ष\n%z         टाइमज़ोन में UTC से ISO 8601ऑफसेट\n%Z      टाइमज़ोन नाम या संक्षिप्त नाम\n%FPS     फ्रेम प्रति सेकंड\n%CRES        मूल (कैनवास) रिज़ोल्यूशन\n%ORES     आउटपुट (स्केल्ड) रिज़ोल्यूशन\n%VF       वीडियो प्रारूप"
477
+Basic.Settings.Video="वीडियो"
478
+Basic.Settings.Video.Adapter="वीडियो अडैप्टर"
479
+Basic.Settings.Video.BaseResolution="मूल (कैनवास) रिजॉल्यूशन"
480
+Basic.Settings.Video.ScaledResolution="आउटपुट (स्केल्ड) रिजॉल्यूशन"
481
+Basic.Settings.Video.DownscaleFilter="डाउनस्केल फ़िल्टर"
482
+Basic.Settings.Video.DisableAeroWindows="Aero अक्षम करें (केवल Windows में)"
483
+Basic.Settings.Video.FPSCommon="सामान्य FPS मूल्य"
484
+Basic.Settings.Video.FPSInteger="पूर्णांक FPS मूल्य"
485
+Basic.Settings.Video.FPSFraction="भिन्नात्मक FPS मूल्य"
486
+Basic.Settings.Video.Numerator="अंश"
487
+Basic.Settings.Video.Denominator="भाजक"
488
+Basic.Settings.Video.Renderer="रेंडरर"
489
+Basic.Settings.Video.InvalidResolution="अमान्य रिज़ॉल्यूशन मान. [चौड़ाई] x [ऊंचाई] (यानी 1920x1080) होनी चाहिए"
490
+Basic.Settings.Video.CurrentlyActive="वीडियो आउटपुट वर्तमान में सक्रिय है. वीडियो सेटिंग बदलने के लिए कृपया किसी भी आउटपुट को बंद करें."
491
+Basic.Settings.Video.DisableAero="Aero अक्षम करें"
492
+Basic.Settings.Video.DownscaleFilter.Bilinear="बाइलिनियर (सबसे तेज़, लेकिन स्केलिंग होने पर धुंधली)"
493
+Basic.Settings.Video.DownscaleFilter.Bicubic="बाइक्यूबिक (सटीक स्केलिंग, 16 नमूने)"
494
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (सटीक स्केलिंग, 36 नमूने)"
495
+Basic.Settings.Video.DownscaleFilter.Area="क्षेत्रफल (भारित योग, 4/6/9 नमूने)"
496
+Basic.Settings.Audio="ऑडियो"
497
+Basic.Settings.Audio.SampleRate="नमूना दर"
498
+Basic.Settings.Audio.Channels="चैनल"
499
+Basic.Settings.Audio.Meters="मीटर"
500
+Basic.Settings.Audio.MeterDecayRate="क्षय दर"
501
+Basic.Settings.Audio.MeterDecayRate.Fast="तेज़"
502
+Basic.Settings.Audio.MeterDecayRate.Medium="मध्यम (टाइप I PPM)"
503
+Basic.Settings.Audio.MeterDecayRate.Slow="धीमा (टाइप II PPM)"
504
+Basic.Settings.Audio.PeakMeterType="पीक मीटर प्रकार"
505
+Basic.Settings.Audio.PeakMeterType.SamplePeak="सैम्पल पीक"
506
+Basic.Settings.Audio.PeakMeterType.TruePeak="ट्रू पीक (उच्च CPU उपयोग)"
507
+Basic.Settings.Audio.MultiChannelWarning.Enabled="चेतावनी: सराउंड साउंड ऑडियो सक्षम किया हुआ है."
508
+Basic.Settings.Audio.MultichannelWarning="यदि स्ट्रीमिंग हो रही है, तो यह देखने के लिए जांचें कि क्या आपकी स्ट्रीमिंग सेवा सराउंड साउंड इंजेस्ट और सराउंड साउंड प्लेबैक दोनों का समर्थन करती है. फेसबुक 360 लाइव एक ऐसा उदाहरण है जहां सराउंड साउंड पूरी तरह से समर्थित है. हालांकि फेसबुक लाइव और यूट्यूब लाइव दोनों सराउंड इंजेस्ट को स्वीकार करते हैं, फेसबुक लाइव स्टीरियो में डाउनमिक्स करता है, और यूट्यूब लाइव केवल दो चैनल चलाता है.\n\nOBS ऑडियो फिल्टर सराउंड साउंड के साथ संगत हैं, हालांकि VST प्लगइन समर्थन की गारंटी नहीं है."
509
+Basic.Settings.Audio.MultichannelWarning.Title="सराउंड साउंड ऑडियो सक्षम करें?"
510
+Basic.Settings.Audio.MultichannelWarning.Confirm="क्या आप वाकई सराउंड साउंड ऑडियो सक्षम करना चाहते हैं?"
511
+Basic.Settings.Audio.Devices="ग्लोबल ऑडियो उपकरण"
512
+Basic.Settings.Audio.DesktopDevice="डेस्कटॉप ऑडियो"
513
+Basic.Settings.Audio.DesktopDevice2="डेस्कटॉप ऑडियो 2"
514
+Basic.Settings.Audio.AuxDevice="माइक/सहायक ऑडियो"
515
+Basic.Settings.Audio.AuxDevice2="माइक/सहायक ऑडियो 2"
516
+Basic.Settings.Audio.AuxDevice3="माइक/सहायक ऑडियो 3"
517
+Basic.Settings.Audio.AuxDevice4="माइक/सहायक ऑडियो 4"
518
+Basic.Settings.Audio.EnablePushToMute="मौन-हेतू-दबाएं को सक्षम करें"
519
+Basic.Settings.Audio.PushToMuteDelay="मौन-हेतू-दबाएं विलंब"
520
+Basic.Settings.Audio.EnablePushToTalk="बातचीत-हेतु-दबाएं को सक्षम करें"
521
+Basic.Settings.Audio.PushToTalkDelay="बातचीत-हेतु-दबाएं विलंब"
522
+Basic.Settings.Audio.UnknownAudioDevice="[डिवाइस कनेक्ट नहीं है या उपलब्ध नहीं है]"
523
+Basic.Settings.Audio.Disabled="अक्षम"
524
+Basic.Settings.Advanced="उन्नत"
525
+Basic.Settings.Advanced.General.ProcessPriority="प्रक्रिया प्राथमिकता"
526
+Basic.Settings.Advanced.General.ProcessPriority.High="उच्च"
527
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="सामान्य से ऊपर"
528
+Basic.Settings.Advanced.General.ProcessPriority.Normal="सामान्य"
529
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="सामान्य से नीचे"
530
+Basic.Settings.Advanced.General.ProcessPriority.Idle="निष्क्रिय"
531
+Basic.Settings.Advanced.FormatWarning="चेतावनी: NV12 के अलावा अन्य रंग प्रारूप प्राथमिक रूप से रिकॉर्डिंग के लिए अभिप्रेत हैं, और स्ट्रीमिंग करते समय अनुशंसित नहीं हैं. रंग प्रारूप रूपांतरण के कारण स्ट्रीमिंग में CPU कें उपयोग में वृद्धि हो सकती है."
532
+Basic.Settings.Advanced.Audio.BufferingTime="ऑडियो बफ़रिंग का समय"
533
+Basic.Settings.Advanced.Video.ColorFormat="रंग प्रारुप"
534
+Basic.Settings.Advanced.Video.ColorSpace="रंग स्थान"
535
+Basic.Settings.Advanced.Video.ColorRange="रंग विस्तार"
536
+Basic.Settings.Advanced.Video.ColorRange.Partial="आंशिक"
537
+Basic.Settings.Advanced.Video.ColorRange.Full="पूर्ण"
538
+Basic.Settings.Advanced.Audio.MonitoringDevice="निगरानी उपकरण"
539
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="आरंभिक"
540
+Basic.Settings.Advanced.Audio.DisableAudioDucking="विंडोज ऑडियो डकिंग अक्षम करें"
541
+Basic.Settings.Advanced.StreamDelay="स्ट्रीम विलंब"
542
+Basic.Settings.Advanced.StreamDelay.Duration="अंतराल"
543
+Basic.Settings.Advanced.StreamDelay.Preserve="पुन: कनेक्ट करते समय कटऑफ बिंदु (विलंब बढ़ाएँ) को सुरक्षित रखें"
544
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="अनुमानित मेमोरी उपयोग : %1 MB"
545
+Basic.Settings.Advanced.Network="नेटवर्क"
546
+Basic.Settings.Advanced.Network.BindToIP="IP से जोड़ें"
547
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="नेटवर्क अनुकूलन सक्षम करें"
548
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="TCP pacing सक्षम करें"
549
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="ट्रांसमिशन की दर को विनियमित करके नेटवर्क पर अन्य विलंबता संवेदनशील ऐप्लिकेशन्स के लिए RTMP आउटपुट को अनुकूल बनाने का प्रयास करता है.\nयह अस्थिर कनेक्शन पर फ्रेम्स के छूट जाने का जोखिम बढ़ा सकता है."
550
+Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="सक्रिय कुंजी केंद्रिकरण व्यवहार"
551
+Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="सक्रिय कुंजी कभी अक्षम न करें"
552
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="जब मुख्य विंडो केंद्रित हो तो सक्रिय कुंजी अक्षम करें"
553
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="जब मुख्य विंडो जब केंद्रित न हो तो सक्रिय कुंजी अक्षम करें"
554
+Basic.Settings.Advanced.AutoRemux="स्वचालित रूप से mp4 मेें रीमक्स करें"
555
+Basic.Settings.Advanced.AutoRemux.MP4="(mkv के रूप में रिकॉर्ड करें)"
556
+Basic.AdvAudio="उन्नत ऑडियो गुण"
557
+Basic.AdvAudio.ActiveOnly="केवल सक्रिय स्रोत"
558
+Basic.AdvAudio.Name="नाम"
559
+Basic.AdvAudio.Volume="वॉल्यूम"
560
+Basic.AdvAudio.VolumeSource="'%1' के लिए वॉल्यूम"
561
+Basic.AdvAudio.Mono="मोनो"
562
+Basic.AdvAudio.MonoSource="'%1' के लिए मोनो डाउनमिक्स"
563
+Basic.AdvAudio.Balance="बैलेंस"
564
+Basic.AdvAudio.BalanceSource="'%1' के लिए बैलेंस"
565
+Basic.AdvAudio.SyncOffset="सिंक ऑफसेट"
566
+Basic.AdvAudio.SyncOffsetSource="'%1' के लिए सिंक ऑफसेट'"
567
+Basic.AdvAudio.Monitoring="ऑडियो निगरानी"
568
+Basic.AdvAudio.Monitoring.None="मॉनिटर बंद"
569
+Basic.AdvAudio.Monitoring.MonitorOnly="केवल मॉनिटर (आउटपुट चुप करें)"
570
+Basic.AdvAudio.Monitoring.Both="मॉनिटर और आउटपुट"
571
+Basic.AdvAudio.MonitoringSource="'%1' के लिए ऑडियो मॉनिटरिंग"
572
+Basic.AdvAudio.AudioTracks="ट्रैक"
573
+Basic.Settings.Hotkeys="सक्रिय कुंजी"
574
+Basic.Settings.Hotkeys.Pair="'%1' के साथ साझा किए गए कुंजी संयोजन टॉगल के रूप में कार्य करते हैं"
575
+Basic.Settings.Hotkeys.Filter="फ़िल्टर"
576
+Basic.Hotkeys.SelectScene="दृश्य पर स्विच करें"
577
+Basic.SystemTray.Show="दिखाएं"
578
+Basic.SystemTray.Hide="छिपाएं"
579
+Basic.SystemTray.Message.Reconnecting="डिस्कनेक्ट किया गया. फिर से कनेक्ट हो रहा है..."
580
+Hotkeys.Insert="डालें"
581
+Hotkeys.Delete="हटाएं"
582
+Hotkeys.Home="घर"
583
+Hotkeys.End="समाप्त"
584
+Hotkeys.PageUp="एक पृष्ठ ऊपर"
585
+Hotkeys.PageDown="एक पृष्ठ नीचे"
586
+Hotkeys.NumLock="Num लॉक"
587
+Hotkeys.ScrollLock="स्क्रॉल लॉक"
588
+Hotkeys.CapsLock="कैप्स लॉक"
589
+Hotkeys.Backspace="बैकस्पेस"
590
+Hotkeys.Print="प्रिंट करें"
591
+Hotkeys.Pause="विराम"
592
+Hotkeys.Left="बाएं"
593
+Hotkeys.Right="दाएँ"
594
+Hotkeys.Up="ऊपर"
595
+Hotkeys.Down="नीचे"
596
+Hotkeys.Super="सुपर"
597
+Hotkeys.Menu="मेन्यू"
598
+Hotkeys.Space="स्पेस"
599
+Hotkeys.NumpadMultiply="Numpad गुणा"
600
+Hotkeys.NumpadDivide="Numpad भाग"
601
+Hotkeys.NumpadAdd="Numpad जोड़"
602
+Hotkeys.NumpadSubtract="Numpad घटाव"
603
+Hotkeys.NumpadDecimal="Numpad दशमलव"
604
 Hotkeys.AppleKeypadNum="%1 (कीपैड)"
605
 Hotkeys.AppleKeypadMultiply="* (कीपैड)"
606
 Hotkeys.AppleKeypadDivide="/ (कीपैड)"
607
@@ -364,6 +916,7 @@
608
 NoSources.Label="आपके पास कोई स्रोत नहीं है.\nनीचे + बटन पर क्लिक करें,\nऔर एक जोड़ने के लिए यहां दायाँ क्लिक करें."
609
 ChangeBG="रंग निर्दिष्ट करें"
610
 CustomColor="निर्मित रंग"
611
+BrowserSource.EnableHardwareAcceleration="ब्राउज़र स्रोत हार्डवेयर त्वरण सक्षम करें"
612
 About="परिचय"
613
 About.Info="OBS Studio एक स्वतंत्र और खुले स्रोत वाला वीडियो रिकॉर्डिंग और लाइव स्ट्रीमिंग सॉफ्टवेयर है."
614
 About.Donate="योगदान करें"
615
@@ -373,3 +926,94 @@
616
 About.Contribute="OBS प्रोजेक्ट का समर्थन करें"
617
 AddUrl.Title="URL के माध्यम से स्रोत जोड़ें"
618
 AddUrl.Text="आपने एक URL को OBS में खींच लिया है. यह स्वचालित रूप से लिंक को एक स्रोत के रूप में जोड़ देगा. आगे चलें?"
619
+ResizeOutputSizeOfSource="आउटपुट का आकार बदलें (स्रोत का आकार)"
620
+ResizeOutputSizeOfSource.Text="मूल और आउटपुट रिज़ॉल्यूशन को वर्तमान स्रोत के आकार में बदल दिया जाएगा."
621
+ResizeOutputSizeOfSource.Continue="क्या आप आगे बढ़ना चाहते हैं?"
622
+PreviewTransition="संक्रांति पूर्व दर्शन"
623
+Importer="दृश्य संग्रह आयातक"
624
+Importer.SelectCollection="एक दृश्य संग्रह चुनें"
625
+Importer.Collection="दृश्य संग्रह"
626
+Importer.HelpText="OBS या अन्य समर्थित प्रोग्राम से संग्रह आयात करने के लिए इस विंडो में फ़ाइलों को जोड़ें."
627
+Importer.Path="संग्रह पथ"
628
+Importer.Program="ऐप्लिकेशन का पता चला"
629
+Importer.AutomaticCollectionPrompt="दृश्य संग्रह के लिए स्वचालित रूप से खोज करें"
630
+Importer.AutomaticCollectionText="ओबीएस स्वचालित रूप से समर्थित तृतीय-पक्ष प्रोग्रामों से आयात योग्य दृश्य संग्रह ढूंढ सकता है. क्या आप चाहते हैं कि OBS आपके लिए स्वचालित रूप से संग्रह ढूंढे?\n\nआप इसे बाद में सेटिंग > सामान्य > आयातक में जाकर बदल सकते हैं."
631
+Restart="पुनः आरंभ करें"
632
+NeedsRestart="OBS स्टूडियो को पुनरारंभ करने की आवश्यकता है. क्या आप अभी पुनः आरंभ करना चाहते हैं?"
633
+ContextBar.NoSelectedSource="कोई स्रोत नहीं चुना गया"
634
+ContextBar.ResetTransform="रूपांतर रीसेट करें"
635
+ContextBar.FitToCanvas="कैनवास में फ़िट करें"
636
+ContextBar.MediaControls.PlayMedia="मीडिया चलाएं"
637
+ContextBar.MediaControls.PauseMedia="मीडिया को रोकें"
638
+ContextBar.MediaControls.StopMedia="मीडिया रोक दें"
639
+ContextBar.MediaControls.RestartMedia="मीडिया पुन: चलाएं"
640
+ContextBar.MediaControls.PlaylistNext="प्लेलिस्ट में अगला"
641
+ContextBar.MediaControls.PlaylistPrevious="प्लेलिस्ट में पिछला"
642
+ContextBar.MediaControls.MediaProperties="मीडिया गुण"
643
+ContextBar.MediaControls.BlindSeek="मीडिया Seek Widget"
644
+YouTube.Auth.Ok="प्राधिकरण सफलतापूर्वक पूर्ण.\nअब आप इस पृष्ठ को बंद कर सकते हैं."
645
+YouTube.Auth.NoCode="प्राधिकरण प्रक्रिया संपूर्ण नहीं हुई."
646
+YouTube.Auth.NoChannels="चयनित खाते पर कोई चैनल उपलब्ध नहीं है"
647
+YouTube.Auth.WaitingAuth.Title="YouTube उपयोगकर्ता प्राधिकरण"
648
+YouTube.Auth.WaitingAuth.Text="कृपया अपने बाहरी ब्राउज़र में प्राधिकरण पूर्ण करें.<br>यदि बाहरी ब्राउज़र नहीं खुलता है, तो इस लिंक का अनुसरण करें और प्राधिकरण पूर्ण करें:<br>%1"
649
+YouTube.AuthError.Text="%1 : के लिए चैनल जानकारी लोड करने में विफल."
650
+YouTube.Actions.WindowTitle="यूट्यूब प्रसारण सेटअप - चैनल : %1"
651
+YouTube.Actions.CreateNewEvent="नया प्रसारण बनाएं"
652
+YouTube.Actions.ChooseEvent="उपलब्ध प्रसारण का चयन करें"
653
+YouTube.Actions.Title="शीर्षक*"
654
+YouTube.Actions.MyBroadcast="मेरा प्रसारण"
655
+YouTube.Actions.Description="विवरण"
656
+YouTube.Actions.Privacy="गोपनीयता*"
657
+YouTube.Actions.Privacy.Private="व्यक्तिगत"
658
+YouTube.Actions.Privacy.Public="सार्वजनिक"
659
+YouTube.Actions.Privacy.Unlisted="असूचीबद्ध"
660
+YouTube.Actions.Category="श्रेणी"
661
+YouTube.Actions.Thumbnail="थम्बनेल"
662
+YouTube.Actions.Thumbnail.SelectFile="फ़ाइल चुनें..."
663
+YouTube.Actions.Thumbnail.NoFileSelected="कोई फाइल नहीं चुनी गई"
664
+YouTube.Actions.Thumbnail.ClearFile="साफ़ करें"
665
+YouTube.Actions.MadeForKids="क्या यह वीडियो बच्चों के लिए बनाया गया है?*"
666
+YouTube.Actions.MadeForKids.Yes="हाँ, यह बच्चों के लिए बना है"
667
+YouTube.Actions.MadeForKids.No="नहीं, यह बच्चों के लायक नहीं है"
668
+YouTube.Actions.AdditionalSettings="अतिरिक्त सेटिंग्स :"
669
+YouTube.Actions.Latency="विलंबता"
670
+YouTube.Actions.Latency.Normal="सामान्य"
671
+YouTube.Actions.Latency.Low="निम्न"
672
+YouTube.Actions.Latency.UltraLow="निम्नतम"
673
+YouTube.Actions.EnableAutoStart="ऑटो-स्टार्ट सक्षम करें"
674
+YouTube.Actions.EnableAutoStop="ऑटो-स्टॉप सक्षम करें"
675
+YouTube.Actions.AutoStartStop.TT="इंगित करता है कि क्या यह निर्धारित प्रसारण स्वचालित रूप से प्रारंभ होना चाहिए"
676
+YouTube.Actions.EnableDVR="DVR सक्षम करें"
677
+YouTube.Actions.360Video="360 वीडियो"
678
+YouTube.Actions.ScheduleForLater="बाद में रखें"
679
+YouTube.Actions.RememberSettings="ये चीज़ें याद रखें"
680
+YouTube.Actions.Create_Ready="प्रसारण बनाएं"
681
+YouTube.Actions.Create_GoLive="प्रसारण बनाएं और स्ट्रीमिंग शुरू करें"
682
+YouTube.Actions.Choose_Ready="प्रसारण चुनें"
683
+YouTube.Actions.Choose_GoLive="प्रसारण चुनें और स्ट्रीमिंग शुरू करें"
684
+YouTube.Actions.Create_Schedule="प्रसारण निर्धारित करें"
685
+YouTube.Actions.Create_Schedule_Ready="समय निर्धारित करें और प्रसारण चुनें"
686
+YouTube.Actions.Dashboard="YouTube स्टूडियो खोलें"
687
+YouTube.Actions.Error.Title="लाइव प्रसारण निर्माण त्रुटि"
688
+YouTube.Actions.Error.Text="YouTube पहुँच में त्रुटि '%1'.<br/>विस्तृत त्रुटि विवरण <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> पर मिल सकता है"
689
+YouTube.Actions.Error.General="YouTube पहुंच त्रुटि. कृपया नेटवर्क कनेक्शन या YouTube सर्वर पहुंच की जांच करें."
690
+YouTube.Actions.Error.NoBroadcastCreated="प्रसारण निर्माण त्रुटि '%1'.<br/>विस्तृत त्रुटि विवरण <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> पर मिल सकता है"
691
+YouTube.Actions.Error.NoStreamCreated="कोई स्ट्रीम नहीं बनी. कृपया खाते को फिर से लिंक करें."
692
+YouTube.Actions.Error.YouTubeApi="YouTube API त्रुटि. अधिक जानकारी के लिए कृपया लॉग फ़ाइल देखें."
693
+YouTube.Actions.Error.BroadcastNotFound="चयनित प्रसारण नहीं मिला."
694
+YouTube.Actions.Error.FileMissing="चुनी गई फ़ाइल उपलब्ध नहीं है."
695
+YouTube.Actions.Error.FileOpeningFailed="चयनित फ़ाइल को खोलने में विफल."
696
+YouTube.Actions.Error.FileTooLarge="चयनित फ़ाइल बहुत बड़ी है (सीमा: 2 MiB)."
697
+YouTube.Actions.EventsLoading="कार्यक्रमों की सूची लोड हो रही है..."
698
+YouTube.Actions.EventCreated.Title="ईवेंट बनाया गया."
699
+YouTube.Actions.EventCreated.Text="ईवेंट सफलतापूर्वक बनाया गया."
700
+YouTube.Actions.Stream="स्ट्रीम"
701
+YouTube.Actions.Stream.ScheduledFor="%1 के लिए निर्धारित"
702
+YouTube.Actions.Stream.Resume="बाधित स्ट्रीम फिर से शुरू करें"
703
+YouTube.Actions.Stream.YTStudio="YouTube स्टूडियो द्वारा स्वचालित रूप से बनाया गया"
704
+YouTube.Actions.Notify.CreatingBroadcast="एक नया लाइव प्रसारण बनाया जा रहा है, कृपया प्रतीक्षा करें..."
705
+YouTube.Actions.AutoStartStreamingWarning.Title="मैन्युअल प्रारंभ आवश्यक"
706
+YouTube.Actions.AutoStartStreamingWarning="इस ईवेंट के लिए ऑटो-स्टार्ट अक्षम है, अपना प्रसारण शुरू करने के लिए \"लाइव जाएं\" पर क्लिक करें."
707
+YouTube.Actions.AutoStopStreamingWarning="आप फिर से कनेक्ट नहीं कर पाएंगे.<br>आपकी स्ट्रीम रुक जाएगी और आप लाइव नहीं रहेंगे."
708
+YouTube.Errors.liveStreamingNotEnabled="चयनित YouTube चैनल पर लाइव स्ट्रीमिंग सक्षम नहीं है.<br/><br/>अधिक जानकारी के लिए <a href='https://www.youtube.com/features'>youtube.com/features</a> देखें."
709
+YouTube.Errors.livePermissionBlocked="लाइव स्ट्रीमिंग चयनित YouTube चैनल पर उपलब्ध नहीं है.<br/>कृपया ध्यान दें कि लाइव स्ट्रीमिंग को आपके चैनल सेटिंग में सक्षम करने के बाद इसे उपलब्ध होने में 24 घंटे तक का समय लग सकता है.<br/><br/>देखें <a href ='https://www.youtube.com/features'>youtube.com/features</a> विवरण के लिए."
710
obs-studio-27.0.1.tar.xz/UI/data/locale/hu-HU.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/hu-HU.ini Changed
501
 
1
@@ -43,7 +43,7 @@
2
 New="Új"
3
 Duplicate="Másolat készítése"
4
 Enable="Engedélyezés"
5
-DisableOSXVSync="OSX V-Sync kikapcsolása"
6
+DisableOSXVSync="macOS V-Sync kikapcsolása"
7
 ResetOSXVSyncOnExit="macOS V-Sync visszaállítása kilépéskor"
8
 HighResourceUsage="Túlterhelt kódolás! Fontolja meg a videobeállítások csökkentését vagy egy gyorsabb kódoló-készletre váltást."
9
 Transition="Átmenet"
10
@@ -109,6 +109,7 @@
11
 Auth.InvalidScope.Text="A(z) %1 hitelesítési követelményei megváltoztak. Egyes funkciók lehet, hogy nem lesznek elérhetők."
12
 Auth.LoadingChannel.Title="Csatornainformációk betöltése…"
13
 Auth.LoadingChannel.Text="A(z) %1 csatornainformációinak betöltése, kis türelmet…"
14
+Auth.LoadingChannel.Error="Nem sikerült lekérni a csatornainformációkat."
15
 Auth.ChannelFailure.Title="A csatorna betöltése sikertelen"
16
 Auth.ChannelFailure.Text="A csatornainformációk betöltése sikertelen: %1\n\n%2: %3"
17
 Auth.Chat="Csevegő"
18
@@ -151,6 +152,7 @@
19
 Basic.AutoConfig.StreamPage.GetStreamKey="Stream Kulcs lekérése"
20
 Basic.AutoConfig.StreamPage.MoreInfo="További információk"
21
 Basic.AutoConfig.StreamPage.UseStreamKey="Stream kulcs használata"
22
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Streamkulcs használata (Haladó)"
23
 Basic.AutoConfig.StreamPage.Service="Szolgáltatás"
24
 Basic.AutoConfig.StreamPage.Service.ShowAll="Összes megjelenítése..."
25
 Basic.AutoConfig.StreamPage.Service.Custom="Egyéni…"
26
@@ -158,6 +160,7 @@
27
 Basic.AutoConfig.StreamPage.StreamKey="Stream kulcs"
28
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Hivatkozás)"
29
 Basic.AutoConfig.StreamPage.EncoderKey="Kódoló kulcs"
30
+Basic.AutoConfig.StreamPage.ConnectedAccount="Csatlakoztatott fiók"
31
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bitsebesség megbecsülése sávszélesség teszttel (néhány percig is eltarthat)"
32
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardveres kódolás előnyben részesítése"
33
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="A Hardveres kódolás megszünteti a CPU erőforrás tetemes részét, viszont sokkal több bitsebesség szükséges az azonos szintű képminőség eléréséhez."
34
@@ -247,6 +250,9 @@
35
 Undo.Transform.VFlip="Függőleges átforgatás itt: „%1”"
36
 Undo.Transform.FitToScreen="Képernyőhöz igazítás itt: „%1”"
37
 Undo.Transform.StretchToScreen="Képernyőhöz nyújtás itt: „%1”"
38
+Undo.Transform.Center="Középre igazítás itt: „%1”"
39
+Undo.Transform.VCenter="Függőlegesen középre igazítás itt: „%1”"
40
+Undo.Transform.HCenter="Vízszintesen középre igazítás itt: „%1”"
41
 Undo.Volume.Change="Hangerő módosítása itt: „%1”"
42
 Undo.Volume.Mute="„%1” némítása"
43
 Undo.Volume.Unmute="„%1” némításának feloldása"
44
@@ -314,6 +320,8 @@
45
 Output.RecordError.EncodeErrorMsg="Kódolási hiba történt felvétel készítése közben."
46
 Output.BadPath.Title="A fájl elérési útja hibás"
47
 Output.BadPath.Text="A beállított elérési útvonal érvénytelen. Kérem ellenőrizze a beállításait és győződjön meg arról, hogy a fájl elérési útja érvényes."
48
+Output.NoBroadcast.Title="Nincs adás beállítva"
49
+Output.NoBroadcast.Text="Be kell állítania egy adást, hogy elindíthassa a közvetítést."
50
 LogReturnDialog="Napló feltöltése sikeres"
51
 LogReturnDialog.Description="Logfájlod feltöltésre került. Megoszthatod az URL-t segítségkérésképpen."
52
 LogReturnDialog.Description.Crash="Logfájlod feltöltésre került. Megoszthatod az URL-t segítségkérés képpen."
53
@@ -352,6 +360,8 @@
54
 MissingFiles.Found="Találat"
55
 MissingFiles.AutoSearch="További fájlegyezések találhatóak"
56
 MissingFiles.AutoSearchText="Az OBS további egyezéseket talált hiányzó fájlokhoz abban a könyvtárban. Hozzáadja őket?"
57
+MissingFiles.NoMissing.Title="Hiányzó fájlok ellenőrzése"
58
+MissingFiles.NoMissing.Text="Úgy tűnik, hogy egy fájl sem hiányzik."
59
 UpdateAvailable="Elérhető újabb programváltozat"
60
 UpdateAvailable.Text="Verzió: %1.%2.%3 most elérhető. <a href='%4'>Kattintson ide a letöltéshez</a>"
61
 Basic.DesktopDevice1="Asztal audio"
62
@@ -420,6 +430,8 @@
63
 Basic.PropertiesView.FPS.Simple="Egyszerű FPS érték"
64
 Basic.PropertiesView.FPS.Rational="Racionális FPS érték"
65
 Basic.PropertiesView.FPS.ValidFPSRanges="Érvényes FPS tartományok:"
66
+Basic.PropertiesView.UrlButton.Text="Az alapértelmezett böngészőben nyitja meg ezt a hivatkozást?"
67
+Basic.PropertiesView.UrlButton.OpenUrl="URL megnyitása"
68
 Basic.InteractionWindow="Egymásra hatnak \"%1\"-el"
69
 Basic.StatusBar.Reconnecting="Szétkapcsolt, újrakapcsolódás %2 másodperc múlva (%1. kísérlet)"
70
 Basic.StatusBar.AttemptingReconnect="Újrakapcsolódási kísérlet... (%1. próbálkozás)"
71
@@ -456,17 +468,17 @@
72
 Basic.TransformWindow.Crop="Vágás"
73
 Basic.TransformWindow.CropLeft="Levágás balra"
74
 Basic.TransformWindow.CropRight="Levágás jobbra"
75
-Basic.TransformWindow.CropTop="Levágás fent"
76
+Basic.TransformWindow.CropTop="Levágás felül"
77
 Basic.TransformWindow.CropBottom="Levágás alul"
78
-Basic.TransformWindow.Alignment.TopLeft="Bal Felül"
79
-Basic.TransformWindow.Alignment.TopCenter="Középen Fent"
80
-Basic.TransformWindow.Alignment.TopRight="Jobb Felül"
81
-Basic.TransformWindow.Alignment.CenterLeft="Középen Balra"
82
+Basic.TransformWindow.Alignment.TopLeft="Bal felül"
83
+Basic.TransformWindow.Alignment.TopCenter="Középen felül"
84
+Basic.TransformWindow.Alignment.TopRight="Jobb felül"
85
+Basic.TransformWindow.Alignment.CenterLeft="Középen balra"
86
 Basic.TransformWindow.Alignment.Center="Középen"
87
-Basic.TransformWindow.Alignment.CenterRight="Középen Jobbra"
88
-Basic.TransformWindow.Alignment.BottomLeft="Bal Alul"
89
-Basic.TransformWindow.Alignment.BottomCenter="Alul Középen"
90
-Basic.TransformWindow.Alignment.BottomRight="Jobb Alul"
91
+Basic.TransformWindow.Alignment.CenterRight="Középen jobbra"
92
+Basic.TransformWindow.Alignment.BottomLeft="Bal alul"
93
+Basic.TransformWindow.Alignment.BottomCenter="Alul középen"
94
+Basic.TransformWindow.Alignment.BottomRight="Jobb alul"
95
 Basic.TransformWindow.BoundsType.None="Keret nélkül"
96
 Basic.TransformWindow.BoundsType.MaxOnly="Csak a maximális méret"
97
 Basic.TransformWindow.BoundsType.ScaleInner="Belső kerethez igazítás"
98
@@ -474,6 +486,8 @@
99
 Basic.TransformWindow.BoundsType.ScaleToWidth="Keret szélességéhez igazítás"
100
 Basic.TransformWindow.BoundsType.ScaleToHeight="Keret magasságához igazítás"
101
 Basic.TransformWindow.BoundsType.Stretch="Kerethez nyújtás"
102
+Basic.TransformWindow.Title="A(z) „%1” átalakításának szerkesztése"
103
+Basic.TransformWindow.NoSelectedSource="Nincs forrás kiválasztva"
104
 Basic.Main.AddSourceHelp.Title="Forrás nem hozzáadható"
105
 Basic.Main.AddSourceHelp.Text="Legalább 1 jelenetre van szükség forrás hozzáadásához."
106
 Basic.Main.Scenes="Jelenetek"
107
@@ -485,6 +499,7 @@
108
 Basic.Main.StartReplayBuffer="Visszajátszás puffer indítása"
109
 Basic.Main.SaveReplay="Visszajátszás mentése"
110
 Basic.Main.StartStreaming="Stream indítása"
111
+Basic.Main.StartBroadcast="Élő adás indítása"
112
 Basic.Main.StartVirtualCam="Virtuális Kamera indítása"
113
 Basic.Main.StopRecording="Felvétel leállítása"
114
 Basic.Main.PauseRecording="Felvétel szüneteltetése"
115
@@ -492,7 +507,10 @@
116
 Basic.Main.StoppingRecording="Felvétel leállítása..."
117
 Basic.Main.StopReplayBuffer="Visszajátszás puffer megállítása"
118
 Basic.Main.StoppingReplayBuffer="Visszajátszás puffer leáll..."
119
+Basic.Main.SetupBroadcast="Adás kezelése"
120
 Basic.Main.StopStreaming="Stream leállítása"
121
+Basic.Main.StopBroadcast="Közvetítés leállítása"
122
+Basic.Main.AutoStopEnabled="(Automatikus leállítás)"
123
 Basic.Main.StoppingStreaming="Stream leállítása..."
124
 Basic.Main.ForceStopStreaming="Stream leállítása (Késleltetés elvetése)"
125
 Basic.Main.ShowContextBar="A Forrás Eszköztár Megjelenítése"
126
@@ -511,64 +529,65 @@
127
 Basic.MainMenu.File.Settings="Beállítá&sok"
128
 Basic.MainMenu.File.ShowSettingsFolder="Beállítási mappa megjelenítése"
129
 Basic.MainMenu.File.ShowProfileFolder="Profilmappa megjelenítése"
130
+Basic.MainMenu.File.ShowMissingFiles="Hiányzó fájlok keresése"
131
 Basic.MainMenu.AlwaysOnTop="Mindig legfelül (&A)"
132
 Basic.MainMenu.File.Exit="Kilépés (&X)"
133
 Basic.MainMenu.Edit="Sz&erkesztés"
134
 Basic.MainMenu.Edit.Undo="Visszavonás (&U)"
135
 Basic.MainMenu.Edit.Redo="Ismét (&R)"
136
 Basic.MainMenu.Edit.UndoAction="Visszavonás $1 (&U)"
137
-Basic.MainMenu.Edit.RedoAction="Ismét $1 (&R)"
138
-Basic.MainMenu.Edit.LockPreview="E&lőnézet zárolás"
139
-Basic.MainMenu.Edit.Scale="Előnézet méretezé&s"
140
+Basic.MainMenu.Edit.RedoAction="&Mégis: $1"
141
+Basic.MainMenu.Edit.LockPreview="Előnézet &zárolása"
142
+Basic.MainMenu.Edit.Scale="Előnézet &méretezése"
143
 Basic.MainMenu.Edit.Scale.Window="Ablakhoz igazítás"
144
 Basic.MainMenu.Edit.Scale.Canvas="Vászon (%1x%2)"
145
 Basic.MainMenu.Edit.Scale.Output="Kimenet (%1x%2)"
146
-Basic.MainMenu.Edit.Transform="Alakí&tás"
147
-Basic.MainMenu.Edit.Transform.EditTransform="Alakítás átsz&erkesztése..."
148
-Basic.MainMenu.Edit.Transform.CopyTransform="Alakítás másolása"
149
+Basic.MainMenu.Edit.Transform="Á&talakítás"
150
+Basic.MainMenu.Edit.Transform.EditTransform="Átalakítás sz&erkesztése…"
151
+Basic.MainMenu.Edit.Transform.CopyTransform="Átalakítás másolása"
152
 Basic.MainMenu.Edit.Transform.PasteTransform="Átalakítás beillesztése"
153
-Basic.MainMenu.Edit.Transform.ResetTransform="Alakítás visszaállítása (&R)"
154
+Basic.MainMenu.Edit.Transform.ResetTransform="Átalakítás &visszaállítása"
155
 Basic.MainMenu.Edit.Transform.Rotate90CW="Forgatás 90 fokkal balra"
156
 Basic.MainMenu.Edit.Transform.Rotate90CCW="Forgatás 90 fokkal jobbra"
157
 Basic.MainMenu.Edit.Transform.Rotate180="Forgatás 180 fokkal"
158
-Basic.MainMenu.Edit.Transform.FlipHorizontal="Vízszintes tükrözés (&H)"
159
-Basic.MainMenu.Edit.Transform.FlipVertical="Függőleges tükrözés (&V)"
160
-Basic.MainMenu.Edit.Transform.FitToScreen="Képernyőhöz igazítás (&F)"
161
-Basic.MainMenu.Edit.Transform.StretchToScreen="Képernyőhöz nyújtá&s"
162
-Basic.MainMenu.Edit.Transform.CenterToScreen="Képernyő középpontjához (&C)"
163
-Basic.MainMenu.Edit.Transform.VerticalCenter="Függőleges közép"
164
-Basic.MainMenu.Edit.Transform.HorizontalCenter="Vízszintes közép"
165
-Basic.MainMenu.Edit.Order="Rendezés (&O)"
166
-Basic.MainMenu.Edit.Order.MoveUp="Mozgatás Fel (&U)"
167
-Basic.MainMenu.Edit.Order.MoveDown="Mozgatás Le (&D)"
168
-Basic.MainMenu.Edit.Order.MoveToTop="Mozgatás a &Tetejére"
169
-Basic.MainMenu.Edit.Order.MoveToBottom="Mozgatás az Aljára (&B)"
170
+Basic.MainMenu.Edit.Transform.FlipHorizontal="&Vízszintes tükrözés"
171
+Basic.MainMenu.Edit.Transform.FlipVertical="&Függőleges tükrözés"
172
+Basic.MainMenu.Edit.Transform.FitToScreen="Képernyőhöz &igazítás"
173
+Basic.MainMenu.Edit.Transform.StretchToScreen="&Nyújtás a kitöltéshez"
174
+Basic.MainMenu.Edit.Transform.CenterToScreen="Képernyő &középpontjához"
175
+Basic.MainMenu.Edit.Transform.VerticalCenter="Függőlegesen középre"
176
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Vízszintesen középre"
177
+Basic.MainMenu.Edit.Order="&Sorrend"
178
+Basic.MainMenu.Edit.Order.MoveUp="Mozgatás &fel"
179
+Basic.MainMenu.Edit.Order.MoveDown="Mozgatás &le"
180
+Basic.MainMenu.Edit.Order.MoveToTop="Mozgatás a &tetejére"
181
+Basic.MainMenu.Edit.Order.MoveToBottom="Mozgatás az &aljára"
182
 Basic.MainMenu.Edit.AdvAudio="Speciális h&angtulajdonságok"
183
-Basic.MainMenu.View="Nézet (&V)"
184
+Basic.MainMenu.View="&Nézet"
185
 Basic.MainMenu.View.Toolbars="Eszköz&tárak"
186
-Basic.MainMenu.View.Docks="Dokkolás"
187
+Basic.MainMenu.View.Docks="Dokkok"
188
 Basic.MainMenu.View.Docks.ResetUI="Felület újraindítása"
189
-Basic.MainMenu.View.Docks.LockUI="Felület zárása"
190
+Basic.MainMenu.View.Docks.LockUI="Felület zárolása"
191
 Basic.MainMenu.View.Docks.CustomBrowserDocks="Egyedi tallózó dokkoló..."
192
-Basic.MainMenu.View.ListboxToolbars="Jelenet/Forrás Lista Gombok"
193
+Basic.MainMenu.View.ListboxToolbars="Jelenet/forrás listagombok"
194
 Basic.MainMenu.View.ContextBar="Forrás eszköztár"
195
 Basic.MainMenu.View.SceneTransitions="Jelenet á&tmenetek"
196
 Basic.MainMenu.View.SourceIcons="Forrás&ikonok"
197
 Basic.MainMenu.View.StatusBar="Állapot&sor"
198
 Basic.MainMenu.View.Fullscreen.Interface="Teljes képernyős felület"
199
-Basic.MainMenu.SceneCollection="Jelenet gyűjtemény (&S)"
200
+Basic.MainMenu.SceneCollection="&Jelenetgyűjtemény"
201
 Basic.MainMenu.Profile="&Profil"
202
 Basic.MainMenu.Profile.Import="Profil importálása"
203
 Basic.MainMenu.Profile.Export="Profil exportálása"
204
-Basic.MainMenu.SceneCollection.Import="Jelenet gyűjtemény importálása"
205
-Basic.MainMenu.SceneCollection.Export="Jelenet gyűjtemény exportálása"
206
+Basic.MainMenu.SceneCollection.Import="Jelenetgyűjtemény importálása"
207
+Basic.MainMenu.SceneCollection.Export="Jelenetgyűjtemény exportálása"
208
 Basic.MainMenu.Profile.Exists="A profil már létezik"
209
-Basic.MainMenu.SceneCollection.Exists="A jelenet gyűjtemény már létezik"
210
-Basic.MainMenu.Tools="Eszközök (&T)"
211
-Basic.MainMenu.Help="Segítség (&H)"
212
-Basic.MainMenu.Help.HelpPortal="Segítség &Portál"
213
+Basic.MainMenu.SceneCollection.Exists="A jelenetgyűjtemény már létezik"
214
+Basic.MainMenu.Tools="&Eszközök"
215
+Basic.MainMenu.Help="&Súgó"
216
+Basic.MainMenu.Help.HelpPortal="Súgó&portál"
217
 Basic.MainMenu.Help.Website="&Weboldal megtekintése"
218
-Basic.MainMenu.Help.Discord="Csatlakozás &Discord szerverre"
219
+Basic.MainMenu.Help.Discord="Csatlakozás a &Discord-kiszolgálóhoz"
220
 Basic.MainMenu.Help.Logs="Nap&lófájlok"
221
 Basic.MainMenu.Help.Logs.ShowLogs="Naplófájlok megjeleníté&se"
222
 Basic.MainMenu.Help.Logs.UploadCurrentLog="Aktuális Naplófájl feltöltése (&C)"
223
@@ -598,53 +617,55 @@
224
 Basic.Settings.General.CenterSnapping="Források vízszintes és függőleges középponthoz igazítása"
225
 Basic.Settings.General.SourceSnapping="Források igazítása más forrásokhoz"
226
 Basic.Settings.General.SnapDistance="Igazítás érzékenysége"
227
-Basic.Settings.General.RecordWhenStreaming="Automatikus felvétel stream esetén"
228
-Basic.Settings.General.KeepRecordingWhenStreamStops="Felvétel folytatása a stream leállása esetén"
229
-Basic.Settings.General.ReplayBufferWhileStreaming="Automatikusan induljon a visszajátszás puffer stream megkezdésekor"
230
-Basic.Settings.General.KeepReplayBufferStreamStops="Visszajátszás puffer aktívan tartása stream leállása esetén"
231
-Basic.Settings.General.SysTray="Tálca"
232
-Basic.Settings.General.SysTrayWhenStarted="Indításkor ikonként a tálcán"
233
-Basic.Settings.General.SystemTrayHideMinimize="Mindig a rendszertálcára minimalizálás tálca helyett"
234
+Basic.Settings.General.RecordWhenStreaming="Automatikus felvétel közvetítés esetén"
235
+Basic.Settings.General.KeepRecordingWhenStreamStops="Felvétel folytatása a követítés leállása esetén"
236
+Basic.Settings.General.ReplayBufferWhileStreaming="Visszajátszási puffer automatikus indítása közvetítéskor"
237
+Basic.Settings.General.KeepReplayBufferStreamStops="Visszajátszási puffer aktívan tartása a közvetítés leállásakor"
238
+Basic.Settings.General.SysTray="Értesítési terület"
239
+Basic.Settings.General.SysTrayWhenStarted="Indításkor minimalizálás az értesítési területre"
240
+Basic.Settings.General.SystemTrayHideMinimize="Mindig az értesítési területre minimalizálás a tálca helyett"
241
 Basic.Settings.General.SaveProjectors="Projektorok mentése kilépéskor"
242
 Basic.Settings.General.Preview="Előnézet"
243
 Basic.Settings.General.OverflowHidden="Túlcsordulás elrejtése"
244
 Basic.Settings.General.OverflowAlwaysVisible="Túlcsordulás mindig látható"
245
-Basic.Settings.General.OverflowSelectionHidden="Túlcsordulás mutatása, akkor is, ha a forrás láthatatlan"
246
+Basic.Settings.General.OverflowSelectionHidden="Túlcsordulás megjelenítése, akkor is, ha a forrás láthatatlan"
247
 Basic.Settings.General.Importers="Importálók"
248
 Basic.Settings.General.AutomaticCollectionSearch="Jelenetgyűjtemények keresése importáláskor az ismert elérési utakon"
249
-Basic.Settings.General.SwitchOnDoubleClick="Átmenet a jelenetre dupla kattintás esetén"
250
+Basic.Settings.General.SwitchOnDoubleClick="Átmenet a jelenetre dupla kattintással"
251
 Basic.Settings.General.StudioPortraitLayout="Portré/függőleges elrendezés engedélyezése"
252
-Basic.Settings.General.TogglePreviewProgramLabels="Előnézet/programcímek mutatása"
253
-Basic.Settings.General.Multiview="MultiView"
254
+Basic.Settings.General.TogglePreviewProgramLabels="Előnézet/programcímkék mutatása"
255
+Basic.Settings.General.Multiview="Több nézet"
256
 Basic.Settings.General.Multiview.MouseSwitch="Kattintás a jelenetek közötti váltáshoz"
257
-Basic.Settings.General.Multiview.DrawSourceNames="Jelenetek neveinek megjelenítése"
258
+Basic.Settings.General.Multiview.DrawSourceNames="Jelenetnevek megjelenítése"
259
 Basic.Settings.General.Multiview.DrawSafeAreas="Biztonságos területek kirajzolása (EBU R 95)"
260
-Basic.Settings.General.MultiviewLayout="MultiView elrendezés"
261
+Basic.Settings.General.MultiviewLayout="Több nézetes elrendezés"
262
 Basic.Settings.General.MultiviewLayout.Horizontal.Top="Vízszintes, felső (8 jelenet)"
263
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Vízszintes, alsó (8 jelenet)"
264
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Függőleges, bal (8 jelenet)"
265
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Függőleges, jobb (8 jelenet)"
266
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Vízszintes, felső (18 jelenet)"
267
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Vízszintes, felső (24 jelenet)"
268
-Basic.Settings.Stream.StreamType="Stream típusa"
269
+Basic.Settings.Stream="Közvetítés"
270
+Basic.Settings.Stream.StreamType="Közvetítés típusa"
271
 Basic.Settings.Stream.Custom.UseAuthentication="Hitelesítés használata"
272
 Basic.Settings.Stream.Custom.Username="Felhasználónév"
273
 Basic.Settings.Stream.Custom.Password="Jelszó"
274
 Basic.Settings.Stream.BandwidthTestMode="Sávszélességteszt üzemmód engedélyezése"
275
-Basic.Settings.Stream.TTVAddon="Twitch Csevegő Kiegészítők"
276
+Basic.Settings.Stream.TTVAddon="Twitch csevegési kiegészítők"
277
 Basic.Settings.Stream.TTVAddon.None="Nincs"
278
 Basic.Settings.Stream.TTVAddon.Both="BetterTTV és FrankerFaceZ"
279
-Basic.Settings.Stream.MissingSettingAlert="Hiányzó stream beállítás"
280
+Basic.Settings.Stream.MissingSettingAlert="Hiányzó közvetítési beállítások"
281
 Basic.Settings.Stream.StreamSettingsWarning="Beállítások megnyitása"
282
-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."
283
-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."
284
-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."
285
-Basic.Settings.Stream.IgnoreRecommended="Streamkiszolgáló ajánlott beállításainak figyelmen kívül hagyása"
286
-Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Ajánlott Beállítások Felülbírálása"
287
-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?"
288
-Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitráta: %1 kbps"
289
-Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitráta: %1 kbps"
290
-Basic.Settings.Stream.Recommended.MaxResolution="Maximális Felbontás: %1"
291
-Basic.Settings.Stream.Recommended.MaxFPS="Maximális FPS: %1"
292
+Basic.Settings.Stream.MissingUrlAndApiKey="Az URL és a közvetítési kulcs hiányzik.\n\nNyissa meg a beállításokat, hogy megadja az URL-t és a közvetítési kulcsot a „Közvetítés” lapon."
293
+Basic.Settings.Stream.MissingUrl="A közvetítési URL hiányzik.\n\nNyissa meg a beállításokat, hogy megadja az URL-t a „Közvetítés” lapon."
294
+Basic.Settings.Stream.MissingStreamKey="A közvetítési kulcs hiányzik.\n\nNyissa meg a beállításokat, hogy megadja a közvetítés kulcsot a „Közvetítés” lapon."
295
+Basic.Settings.Stream.IgnoreRecommended="Közvetítési szolgáltatás ajánlott beállításainak figyelmen kívül hagyása"
296
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Ajánlott beállítások felülbírálása"
297
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Figyelem: A kiszolgáló korlátozásainak figyelmen kívül hagyása gyengébb minőséget eredményezhet, vagy megakadályozhatja a közvetítéstt.\n\nFolytatja?"
298
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Legnagyobb videó bitsebesség: %1 kbps"
299
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Legnagyobb hang bitsebesség: %1 kbps"
300
+Basic.Settings.Stream.Recommended.MaxResolution="Legnagyobb felbontás: %1"
301
+Basic.Settings.Stream.Recommended.MaxFPS="Legnagyobb FPS: %1"
302
 Basic.Settings.Output="Kimenet"
303
 Basic.Settings.Output.Format="Felvétel formátuma"
304
 Basic.Settings.Output.Encoder="Kódoló"
305
@@ -673,7 +694,7 @@
306
 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."
307
 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."
308
 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."
309
-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."
310
+Basic.Settings.Output.Simple.Warn.Encoder="Figyelem: A közvetítéstő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."
311
 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."
312
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Biztos benne, hogy veszteségmentes minőséget kíván használni?"
313
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Veszteségmentes minőség figyelem!"
314
@@ -681,7 +702,7 @@
315
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardver (QSV)"
316
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardver (AMD)"
317
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardver (NVENC)"
318
-Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Szoftveres (x264 alacsony CPU használati készlet, növekvő fájlméret)"
319
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Szoftver (x264 alacsony CPU használatú előbeállítás, növeli a fájlméretet)"
320
 Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD sáv (a 2. sávot használja)"
321
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Nem kompatibilis felbontás/képkockasebesség"
322
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Ez a közvetítési szolgáltatás nem támogatja a jelenlegi kimeneti felbontást vagy képkockasebességet. A legközelebbi kompatibilis értékre lesz módosítva:\n\n%1\n\nFolytatja?"
323
@@ -692,7 +713,7 @@
324
 Basic.Settings.Output.RetryDelay="Újrapróbálási késleltetés"
325
 Basic.Settings.Output.MaxRetries="Újrapróbálkozások maximális száma"
326
 Basic.Settings.Output.Advanced="Speciális kódoló beállítások engedélyezése"
327
-Basic.Settings.Output.EncoderPreset="Kódoló készlet"
328
+Basic.Settings.Output.EncoderPreset="Kódoló előbeállítás"
329
 Basic.Settings.Output.CustomEncoderSettings="Egyéni kódolási beállítások"
330
 Basic.Settings.Output.CustomMuxerSettings="Egyéni muxer beállítások"
331
 Basic.Settings.Output.NoSpaceFileName="Szóköz nélküli fájlnév előállítása"
332
@@ -706,12 +727,12 @@
333
 Basic.Settings.Output.Adv.Audio.Track5="5. sáv"
334
 Basic.Settings.Output.Adv.Audio.Track6="6. sáv"
335
 Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD sáv"
336
-Basic.Settings.Output.Adv.Recording="Rögzítés"
337
+Basic.Settings.Output.Adv.Recording="Felvétel"
338
 Basic.Settings.Output.Adv.Recording.RecType="Felvétel típusa"
339
 Basic.Settings.Output.Adv.Recording.Type="Típus"
340
 Basic.Settings.Output.Adv.Recording.Type.Standard="Szabványos"
341
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Egyéni kimenet (FFmpeg)"
342
-Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Stream kódoló használata)"
343
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Közvetítési kódoló használata)"
344
 Basic.Settings.Output.Adv.Recording.Filename="Fájlnév formázás"
345
 Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Létező fájl felülírása"
346
 Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg kimenet típusa"
347
@@ -725,7 +746,7 @@
348
 Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Videó"
349
 Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Alapértelmezett formátum"
350
 Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Konténerformátum leírása"
351
-Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Hang/videó kodek kitalálása a fájl elérési útból vagy URL-ből"
352
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Hang/videó kodek kitalálása a fájl elérési útjából vagy az URL-ből"
353
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Alapértelmezett kódoló"
354
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Kódoló letiltása"
355
 Basic.Settings.Output.Adv.FFmpeg.VEncoder="Videó kódoló"
356
@@ -733,7 +754,7 @@
357
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Hang kódoló"
358
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Hang kódoló beállítások (ha van)"
359
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer beállítások (ha van)"
360
-Basic.Settings.Output.Adv.FFmpeg.GOPSize="Kulcsképkocka időköz (képkockák)"
361
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Kulcsképkockák időköze (képkockák)"
362
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Minden kodek megjelenítése (akkor is, ha inkompatibilis lehet)"
363
 Screenshot="Képernyőkép a kimenetről"
364
 Screenshot.SourceHotkey="Képernyőkép készítése a kiválasztott forrásról"
365
@@ -844,7 +865,6 @@
366
 Basic.SystemTray.Show="Megjelenítés"
367
 Basic.SystemTray.Hide="Elrejtés"
368
 Basic.SystemTray.Message.Reconnecting="Szétkapcsolva. Újrakapcsolódás..."
369
-Hotkeys.Backspace="Visszatörlés"
370
 Hotkeys.Print="Nyomtatás"
371
 Hotkeys.Pause="Szünet"
372
 Hotkeys.Left="Balra"
373
@@ -854,7 +874,6 @@
374
 Hotkeys.Super="Szuper"
375
 Hotkeys.Menu="Menü"
376
 Hotkeys.Space="Szóköz"
377
-Hotkeys.NumpadNum="Numerikus %1"
378
 Hotkeys.NumpadMultiply="Numerikus szorzás"
379
 Hotkeys.NumpadDivide="Numerikus osztás"
380
 Hotkeys.NumpadAdd="Numerikus összeadás"
381
@@ -875,29 +894,29 @@
382
 SceneItemShow="„%1” megjelenítése"
383
 SceneItemHide="„%1” elrejtése"
384
 OutputWarnings.NoTracksSelected="Legalább egy sávot ki kell választania"
385
-OutputWarnings.MP4Recording="Figyelem: Az MP4/MOV-ban mentett állományok javíthatatlanok, ha a fájl nem kerül lezárásra (pl: BSOD vagy áramkimaradás esetén, stb.). Ha mindenképpen több hangsávval kíván felvételt készíteni, akkor használja az MKV állományt és remuxolja a felvételt MP4/MOV-ba, miután elkészült. (Fájl -> Felvételek remuxolása)"
386
-OutputWarnings.CannotPause="Figyelmeztetés: A felvételeket nem lehet szüneteltetni, ha a felvétel kódolója: \"(Stream kódolójának használatára)\" van állítva."
387
+OutputWarnings.MP4Recording="Figyelem: Az MP4/MOV-ban mentett felvételek javíthatatlanok, ha a fájl nem kerül lezárásra (például BSOD vagy áramkimaradás esetén). Ha mindenképpen több hangsávval kíván felvételt készíteni, akkor használjon MKV-t és remuxolja a felvételt MP4/MOV-ba, miután elkészült. (Fájl -> Felvételek remuxolása)"
388
+OutputWarnings.CannotPause="Figyelmeztetés: A felvételeket nem lehet szüneteltetni, ha a felvétel kódolója a „(Közvetítés kódolójának használata)” lehetőségre van állítva."
389
 FinalScene.Title="Jelenet törlése"
390
 FinalScene.Text="Legalább egy jelenetnek lennie kell."
391
-NoSources.Title="Nincsenek Források"
392
+NoSources.Title="Nincsenek források"
393
 NoSources.Text="Úgy fest, hogy nem adott hozzá valamilyen videoforrást, úgyhogy fekete képet fog adni. Biztos benne, hogy ezt kívánja tenni?"
394
 NoSources.Text.AddSource="Hozzáadhat forrásokat bármikor a + ikonra kattintva a Források doboz alatt a fő ablakban."
395
 NoSources.Label="Önnek nincsenek forrásai.\nKattintson alul a + gombra,\nvagy jobbklikkeljen ide, hogy hozzáadjon egyet."
396
 ChangeBG="Szín megadása"
397
-CustomColor="Egyedi szín"
398
+CustomColor="Egyéni szín"
399
 BrowserSource.EnableHardwareAcceleration="Böngészőforrás hardveres támogatásának engedélyezése"
400
 About="Névjegy"
401
-About.Info="Az OBS Studio egy ingyenes és nyílt forráskódú videofelvevő és livestream szoftver."
402
+About.Info="Az OBS Studio egy ingyenes és nyílt forráskódú videofelvevő és élő közvetítési szoftver."
403
 About.Donate="Hozzájárulás"
404
 About.GetInvolved="Részvétel"
405
 About.Authors="Készítők"
406
-About.License="Licensz"
407
-About.Contribute="Támogasd az OBS Projektet"
408
-AddUrl.Title="Forrás hozzáadása URL által"
409
-AddUrl.Text="Behúzott egy URL címet az OBS-be. Ez automatikusan hozzáadja a linket, mint forrást. Folytatja?"
410
-ResizeOutputSizeOfSource="Kimenet átméretezése (Forrásméret)"
411
+About.License="Licenc"
412
+About.Contribute="Támogassa az OBS Projektet"
413
+AddUrl.Title="Forrás hozzáadása URL-en keresztül"
414
+AddUrl.Text="Behúzott egy URL-t az OBS-be. Ez automatikusan forrásként adja hozzá a hivatkozást. Folytatja?"
415
+ResizeOutputSizeOfSource="Kimenet átméretezése (forrás mérete)"
416
 ResizeOutputSizeOfSource.Text="Az alap és a kimeneti felbontás átméretezése a jelenlegi forrásra."
417
-ResizeOutputSizeOfSource.Continue="Kívánja folytatni?"
418
+ResizeOutputSizeOfSource.Continue="Folytatja?"
419
 PreviewTransition="Átmenet előnézete"
420
 Importer="Jelenetgyűjtemény importáló"
421
 Importer.SelectCollection="Jelenetgyűjtemény kiválasztása"
422
@@ -910,7 +929,7 @@
423
 Restart="Újraindítás"
424
 NeedsRestart="Az OBS Studio újraindítása szükséges. Szeretné újraindítani most?"
425
 ContextBar.NoSelectedSource="Nincs forrás kiválasztva"
426
-ContextBar.ResetTransform="Alakítás visszaállítása"
427
+ContextBar.ResetTransform="Átalakítás visszaállítása"
428
 ContextBar.FitToCanvas="Vászonhoz igazítás"
429
 ContextBar.MediaControls.PlayMedia="Média lejátszása"
430
 ContextBar.MediaControls.PauseMedia="Média szüneteltetése"
431
@@ -920,3 +939,69 @@
432
 ContextBar.MediaControls.PlaylistPrevious="Előző a listán"
433
 ContextBar.MediaControls.MediaProperties="Média tulajdonságai"
434
 ContextBar.MediaControls.BlindSeek="Média tekerési ablakelem"
435
+YouTube.Auth.Ok="Az engedélyezés sikeresen befejeződött.\nMost már bezárhatja ezt az oldalt."
436
+YouTube.Auth.NoCode="Az engedélyezési folyamat nem fejeződött be."
437
+YouTube.Auth.NoChannels="Nem érhető el csatorna a kiválasztott fiókban"
438
+YouTube.Auth.WaitingAuth.Title="YouTube Felhasználó Hitelesítés"
439
+YouTube.Auth.WaitingAuth.Text="Fejezze be az engedélyezést a külső böngészőben.<br>Ha a külső böngésző nem nyílik meg, akkor kövesse ezt a hivatkozást és fejezze be az engedélyezést:<br>%1"
440
+YouTube.AuthError.Text="A csatornainformációk lekérése sikertelen: %1."
441
+YouTube.Actions.WindowTitle="YouTube adás beállítása – Csatorna: %1"
442
+YouTube.Actions.CreateNewEvent="Új adás létrehozása"
443
+YouTube.Actions.ChooseEvent="Meglévő adás kiválasztása"
444
+YouTube.Actions.Title="Cím*"
445
+YouTube.Actions.MyBroadcast="A közvetítésem"
446
+YouTube.Actions.Description="Leírás"
447
+YouTube.Actions.Privacy="Láthatóság*"
448
+YouTube.Actions.Privacy.Private="Privát"
449
+YouTube.Actions.Privacy.Public="Nyilvános"
450
+YouTube.Actions.Privacy.Unlisted="Nem listázott"
451
+YouTube.Actions.Category="Kategória"
452
+YouTube.Actions.Thumbnail="Bélyegkép"
453
+YouTube.Actions.Thumbnail.SelectFile="Fájl kiválasztása…"
454
+YouTube.Actions.Thumbnail.NoFileSelected="Nincs fájl kiválasztva"
455
+YouTube.Actions.Thumbnail.ClearFile="Törlés"
456
+YouTube.Actions.MadeForKids="Gyermekeknek készült ez a videó?*"
457
+YouTube.Actions.MadeForKids.Yes="Igen, gyermekeknek készült"
458
+YouTube.Actions.MadeForKids.No="Nem, nem gyermekeknek készült"
459
+YouTube.Actions.AdditionalSettings="További beállítások:"
460
+YouTube.Actions.Latency="Késleltetés"
461
+YouTube.Actions.Latency.Normal="Normál"
462
+YouTube.Actions.Latency.Low="Alacsony"
463
+YouTube.Actions.Latency.UltraLow="Ultra alacsony"
464
+YouTube.Actions.EnableAutoStart="Automatikus indítás engedélyezése"
465
+YouTube.Actions.EnableAutoStop="Automatikus leállítás engedélyezése"
466
+YouTube.Actions.AutoStartStop.TT="Azt jelzi, hogy az ütemezett közvetítés automatikusan elindul-e"
467
+YouTube.Actions.EnableDVR="DVR bekapcsolása"
468
+YouTube.Actions.360Video="360°-os videó"
469
+YouTube.Actions.ScheduleForLater="Beütemezés későbbre"
470
+YouTube.Actions.RememberSettings="Ezen beállítások megjegyzése"
471
+YouTube.Actions.Create_Ready="Adás létrehozása"
472
+YouTube.Actions.Create_GoLive="Adás létrehozása és közvetítés indítása"
473
+YouTube.Actions.Choose_Ready="Adás kiválasztása"
474
+YouTube.Actions.Choose_GoLive="Adás választása és közvetítés indítása"
475
+YouTube.Actions.Create_Schedule="Adás ütemezése"
476
+YouTube.Actions.Create_Schedule_Ready="Ütemezés és adás kiválasztása"
477
+YouTube.Actions.Dashboard="YouTube Studio megnyitása"
478
+YouTube.Actions.Error.Title="Hiba az elő közvetítés létrehozásakor"
479
+YouTube.Actions.Error.Text="YouTube hozzáférési hiba: „%1”.<br/>A részletes hibaleírás megtalálható a <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> oldalon."
480
+YouTube.Actions.Error.General="YouTube hozzáférési hiba. Ellenőrizze a hálózati kapcsolatát, vagy a hozzáférését a YouTube kiszolgálóhoz."
481
+YouTube.Actions.Error.NoBroadcastCreated="Közvetítés létrehozási hiba: „%1”.<br/>A részletes hibaleírás megtalálható a <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> oldalon."
482
+YouTube.Actions.Error.NoStreamCreated="Nem lett közvetítés létrehozva. Kapcsolja össze újra a fiókját."
483
+YouTube.Actions.Error.YouTubeApi="YouTube API hiba. További információkért nézze meg a naplófájlt."
484
+YouTube.Actions.Error.BroadcastNotFound="A kiválasztott adás nem található."
485
+YouTube.Actions.Error.FileMissing="A kiválasztott fájl nem létezik."
486
+YouTube.Actions.Error.FileOpeningFailed="A kiválasztott fájl megnyitása sikertelen."
487
+YouTube.Actions.Error.FileTooLarge="A kiválasztott fájl túl nagy (korlát: 2 MiB)."
488
+YouTube.Actions.EventsLoading="Események betöltése…"
489
+YouTube.Actions.EventCreated.Title="Esemény létrehozva"
490
+YouTube.Actions.EventCreated.Text="Esemény sikeresen létrehozva."
491
+YouTube.Actions.Stream="Közvetítés"
492
+YouTube.Actions.Stream.ScheduledFor="Ekkorra ütemezve: %1"
493
+YouTube.Actions.Stream.Resume="Megszakított közvetítés folytatása"
494
+YouTube.Actions.Stream.YTStudio="A YouTube Studio által automatikusan létrehozva"
495
+YouTube.Actions.Notify.CreatingBroadcast="Új élő közvetítés létrehozása, kis türelmet…"
496
+YouTube.Actions.AutoStartStreamingWarning.Title="Kézi indítás szükséges"
497
+YouTube.Actions.AutoStartStreamingWarning="Az automatikus indítás ki van kapcsolva ennél az eseménynél, a közvetítés indításához kattintson az „Élő adás indítása” gombra."
498
+YouTube.Actions.AutoStopStreamingWarning="Nem fog tudni újrakapcsolódni.<br>A közvetítés véget ér, és többé nem lesz élő adásban."
499
+YouTube.Errors.liveStreamingNotEnabled="Az elő közvetítés nem engedélyezett a kiválasztott YouTube csatornán.<br/><br/>További információkért lásd a <a href='https://www.youtube.com/features'>youtube.com/features</a> oldalt."
500
+YouTube.Errors.livePermissionBlocked="Az elő közvetítés nem engedélyezett a kiválasztott YouTube csatornán.<br/>Vegye figyelembe, hogy akár 24 óráig is eltarthat, amíg a közvetítés elérhetővé válik, miután bekapcsolta a csatorna beállításaiban.<br/><br/>További információkért lásd a <a href='https://www.youtube.com/features'>youtube.com/features</a> oldalt."
501
obs-studio-27.0.1.tar.xz/UI/data/locale/id-ID.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/id-ID.ini Changed
236
 
1
@@ -97,8 +97,8 @@
2
 ChromeOS.Title="Platform Tidak Didukung"
3
 ChromeOS.Text="Tampaknya OBS berjalan di dalam kontainer ChromeOS. Platform ini tidak didukung"
4
 DockCloseWarning.Title="Menutup Jendela yang Bisa di Dok"
5
-DockCloseWarning.Text="Anda baru saja menutup jendela yang bisa di dok. Jika Anda ingin menampilkannya lagi, gunakan menu Tampilan → Dok pada bar menu."
6
-ExtraBrowsers="Sesuaikan Dok Browser"
7
+DockCloseWarning.Text="Anda baru saja menutup jendela yang bisa di-dok. Jika Anda ingin menampilkannya lagi, pilih menu Tampilan → Dok pada bar menu."
8
+ExtraBrowsers="Penyesuaian Dok Peramban"
9
 ExtraBrowsers.Info="Tambahkan dok dengan memberi nama dan tautan URL, lalu klik Terapkan atau Tutup untuk membuka dok. Anda dapat menambahkan atau menghapus dok kapan saja."
10
 ExtraBrowsers.DockName="Nama dok"
11
 Auth.Authing.Title="Mengautentikasi..."
12
@@ -109,19 +109,20 @@
13
 Auth.InvalidScope.Text="Persyaratan autentikasi untuk %1 telah berubah. Beberapa fitur mungkin tidak tersedia."
14
 Auth.LoadingChannel.Title="Memuat informasi saluran..."
15
 Auth.LoadingChannel.Text="Memuat informasi saluran untuk %1, silakan tunggu..."
16
+Auth.LoadingChannel.Error="Tidak dapat mendapatkan informasi saluran."
17
 Auth.ChannelFailure.Title="Gagal memuat saluran"
18
 Auth.ChannelFailure.Text="Gagal memuat informasi saluran untuk %1\n\n%2: %3"
19
 Auth.Chat="Obrolan"
20
 Auth.StreamInfo="Informasi Streaming"
21
 TwitchAuth.Stats="Statistik Twitch"
22
 TwitchAuth.Feed="Umpan Aktivitas Twitch"
23
-TwitchAuth.TwoFactorFail.Title="Tidak dapat meminta kunci stream"
24
+TwitchAuth.TwoFactorFail.Title="Tidak bisa meminta kunci stream"
25
 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."
26
 RestreamAuth.Channels="Saluran Restream"
27
 Copy.Filters="Salin Filter"
28
 Paste.Filters="Tempel Filter"
29
-BrowserPanelInit.Title="Menginisialisasi Browser..."
30
-BrowserPanelInit.Text="Menginisialisasi browser, silakan tunggu..."
31
+BrowserPanelInit.Title="Menginisialisasi Peramban..."
32
+BrowserPanelInit.Text="Menginisialisasi peramban, mohon tunggu..."
33
 BandwidthTest.Region="Wilayah"
34
 BandwidthTest.Region.US="Amerika Serikat"
35
 BandwidthTest.Region.EU="Eropa"
36
@@ -150,12 +151,14 @@
37
 Basic.AutoConfig.StreamPage.GetStreamKey="Dapatkan Kunci Stream"
38
 Basic.AutoConfig.StreamPage.MoreInfo="Info lebih lanjut"
39
 Basic.AutoConfig.StreamPage.UseStreamKey="Gunakan Kunci Stream"
40
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Gunakan Kunci Stream (lanjutan)"
41
 Basic.AutoConfig.StreamPage.Service="Layanan"
42
 Basic.AutoConfig.StreamPage.Service.ShowAll="Tampilkan Semua..."
43
 Basic.AutoConfig.StreamPage.Service.Custom="Sesuaikan..."
44
 Basic.AutoConfig.StreamPage.StreamKey="Kunci Stream"
45
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Tautan)"
46
 Basic.AutoConfig.StreamPage.EncoderKey="Kunci Pengkodean"
47
+Basic.AutoConfig.StreamPage.ConnectedAccount="Akun yang terhubung"
48
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Perkirakan bitrate dengan uji bandwidth (mungkin perlu beberapa menit)"
49
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Lebih memilih pengkodean perangkat keras"
50
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Pengkodean Perangkat Keras mengurangi sebagian besar penggunaan CPU, namun mungkin memerlukan bitrate lebih besar untuk mendapatkan kualitas yang sama."
51
@@ -294,13 +297,13 @@
52
 Output.StartStreamFailed="Gagal memulai streaming"
53
 Output.StartRecordingFailed="Gagal memulai rekaman"
54
 Output.StartReplayFailed="Gagal memulai buffer replay"
55
-Output.StartFailedGeneric="Gagal memulai output. Silakan periksa catatan untuk detil lebih lanjut. \n\nCatatan: Jika Anda menggunakan pengkodean NVENC atau AMD, pastikan versi driver video Anda adalah yang terbaru."
56
+Output.StartFailedGeneric="Gagal memulai output. Silakan periksa catatan untuk detail lebih lanjut. \n\nCatatan: Jika Anda menggunakan pengkodean NVENC atau AMD, pastikan versi driver video Anda adalah yang terbaru."
57
 Output.ReplayBuffer.PauseWarning.Title="Tidak dapat menyimpan tayangan ulang saat dijeda"
58
 Output.ReplayBuffer.PauseWarning.Text="Peringatan: Tayangan ulang tidak dapat disimpan saat rekaman dijeda."
59
 Output.ConnectFail.Title="Gagal terhubung"
60
 Output.ConnectFail.BadPath="Jalur atau Sambungan URL tidak sah. Mohon periksa pengaturan Anda untuk memastikan bahwa jalur/URL nya sudah benar."
61
 Output.ConnectFail.ConnectFailed="Gagal terhubung ke server"
62
-Output.ConnectFail.InvalidStream="Tidak dapat mengakses saluran atau kunci stream yang ditentukan, mohon periksa kembali dengan benar kunci stream Anda. Jika sudah benar, kemungkinan ada masalah saat menghubungkan ke server."
63
+Output.ConnectFail.InvalidStream="Tidak bisa mengakses saluran atau kunci stream yang ditentukan, mohon periksa kembali dengan benar kunci stream Anda. Jika sudah benar, kemungkinan ada masalah saat menghubungkan ke server."
64
 Output.ConnectFail.Error="Kesalahan yang tak terduga terjadi ketika mencoba menghubungkan ke server. Info lebih lanjut ada di catatan berkas."
65
 Output.ConnectFail.Disconnected="Terputus dari sever."
66
 Output.StreamEncodeError.Title="Kesalahan pengkodean"
67
@@ -314,6 +317,8 @@
68
 Output.RecordError.EncodeErrorMsg="Kesalahan pengkodean terjadi saat merekam."
69
 Output.BadPath.Title="Jalur Berkas Tidak Sah"
70
 Output.BadPath.Text="Jalur berkas output yang terkonfigurasi tidak sah. Mohon periksa pengaturan Anda untuk memastikan bahwa jalur berkas yang sah telah ditentukan dengan benar."
71
+Output.NoBroadcast.Title="Tidak Ada Siaran yang Terkonfigurasi"
72
+Output.NoBroadcast.Text="Anda perlu menyiapkan sebuah siaran sebelum Anda memulai streaming."
73
 LogReturnDialog="Unggah Catatan Berhasil"
74
 LogReturnDialog.Description="Catatan berkas Anda telah diunggah. Sekarang Anda dapat membagikan URL untuk tujuan pengawakutuan atau bantuan."
75
 LogReturnDialog.Description.Crash="Laporan galat Anda telah diunggah. Sekarang Anda dapat membagikan URL untuk tujuan pengawakutuan."
76
@@ -352,6 +357,8 @@
77
 MissingFiles.Found="Ditemukan"
78
 MissingFiles.AutoSearch="Kecocokan berkas tambahan ditemukan"
79
 MissingFiles.AutoSearchText="OBS telah menemukan kecocokan tambahan pada berkas yang hilang dalam direktori tersebut. Apakah Anda ingin menambahkannya?"
80
+MissingFiles.NoMissing.Title="Pemeriksaan Kehilangan Berkas"
81
+MissingFiles.NoMissing.Text="Tidak ada berkas yang terlihat menghilang."
82
 UpdateAvailable="Pembaruan Terbaru Tersedia"
83
 UpdateAvailable.Text="Versi %1.%2.%3 telah tersedia. <a href='%4'>Klik disini untuk mengunduh</a>"
84
 Basic.DesktopDevice1="Audio Desktop"
85
@@ -407,6 +414,8 @@
86
 Basic.PropertiesView.FPS.Simple="Nilai FPS Sederhana"
87
 Basic.PropertiesView.FPS.Rational="Nilai FPS Rasional"
88
 Basic.PropertiesView.FPS.ValidFPSRanges="Rentang FPS yang Sah:"
89
+Basic.PropertiesView.UrlButton.Text="Buka tautan ini di peramban web bawaan Anda?"
90
+Basic.PropertiesView.UrlButton.OpenUrl="Buka URL"
91
 Basic.InteractionWindow="Berinteraksi dengan '%1'"
92
 Basic.StatusBar.Reconnecting="Terputus, menghubungkan kembali dalam %2 detik (percobaan %1)"
93
 Basic.StatusBar.AttemptingReconnect="Mencoba menghubungkan kembali... (percobaan %1)"
94
@@ -461,6 +470,8 @@
95
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skalakan ke lebar batas"
96
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skalakan ke tinggi batas"
97
 Basic.TransformWindow.BoundsType.Stretch="Regangkan ke batas"
98
+Basic.TransformWindow.Title="Ubah Transformasi untuk '%1'"
99
+Basic.TransformWindow.NoSelectedSource="Tidak ada sumber yang dipilih"
100
 Basic.Main.AddSourceHelp.Title="Tidak Dapat Menambahkan Sumber"
101
 Basic.Main.AddSourceHelp.Text="Anda harus memiliki setidaknya 1 adegan untuk menambahkan sumber."
102
 Basic.Main.Scenes="Adegan"
103
@@ -472,6 +483,7 @@
104
 Basic.Main.StartReplayBuffer="Mulai Buffer Replay"
105
 Basic.Main.SaveReplay="Simpan Tayangan Ulang"
106
 Basic.Main.StartStreaming="Mulai Streaming"
107
+Basic.Main.StartBroadcast="Mulai Siaran"
108
 Basic.Main.StartVirtualCam="Mulai Kamera Virtual"
109
 Basic.Main.StopRecording="Berhenti Merekam"
110
 Basic.Main.PauseRecording="Jeda Rekaman"
111
@@ -479,7 +491,10 @@
112
 Basic.Main.StoppingRecording="Menghentikan Perekaman..."
113
 Basic.Main.StopReplayBuffer="Hentikan Buffer Replay"
114
 Basic.Main.StoppingReplayBuffer="Menghentikan Buffer Replay..."
115
+Basic.Main.SetupBroadcast="Kelola Siaran"
116
 Basic.Main.StopStreaming="Berhenti Streaming"
117
+Basic.Main.StopBroadcast="Akhiri Siaran"
118
+Basic.Main.AutoStopEnabled="(Berhenti Otomatis)"
119
 Basic.Main.StoppingStreaming="Menghentikan Streaming..."
120
 Basic.Main.ForceStopStreaming="Berhenti Streaming (buang delay)"
121
 Basic.Main.ShowContextBar="Tampilkan Bilah Alat Sumber"
122
@@ -498,6 +513,7 @@
123
 Basic.MainMenu.File.Settings="Pengaturan (&S)"
124
 Basic.MainMenu.File.ShowSettingsFolder="Tampilkan Folder Pengaturan"
125
 Basic.MainMenu.File.ShowProfileFolder="Tampilkan Folder Profil"
126
+Basic.MainMenu.File.ShowMissingFiles="Periksa Berkas yang Hilang"
127
 Basic.MainMenu.AlwaysOnTop="Sel&alu di Atas"
128
 Basic.MainMenu.File.Exit="Keluar (&X)"
129
 Basic.MainMenu.Edit="Ubah (&E)"
130
@@ -534,8 +550,8 @@
131
 Basic.MainMenu.View.Toolbars="Bilah Ala&t"
132
 Basic.MainMenu.View.Docks="Dok"
133
 Basic.MainMenu.View.Docks.ResetUI="Atur Ulang UI"
134
-Basic.MainMenu.View.Docks.LockUI="Kunci UI"
135
-Basic.MainMenu.View.Docks.CustomBrowserDocks="Sesuaikan Dok Browser..."
136
+Basic.MainMenu.View.Docks.LockUI="Kuncikan UI"
137
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Penyesuaian Dok Peramban..."
138
 Basic.MainMenu.View.ListboxToolbars="Tombol Daftar Adegan/Sumber"
139
 Basic.MainMenu.View.ContextBar="Bilah Alat Sumber"
140
 Basic.MainMenu.View.SceneTransitions="Transisi Adegan (&C)"
141
@@ -610,6 +626,7 @@
142
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, Bawah (8 Adegan)"
143
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikal, Kiri (8 Adegan)"
144
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertikal, Kanan (8 Adegan)"
145
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, Atas (18 Adegan)"
146
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, Atas (24 Adegan)"
147
 Basic.Settings.Stream="Streaming"
148
 Basic.Settings.Stream.StreamType="Jenis Streaming"
149
@@ -627,7 +644,7 @@
150
 Basic.Settings.Stream.MissingStreamKey="Kunci Stream tidak ditemukan.\n\nBuka pengaturan untuk memasukkan kunci stream di tab 'Streaming'."
151
 Basic.Settings.Stream.IgnoreRecommended="Abaikan rekomendasi pengaturan layanan streaming"
152
 Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Mengesampinkan pengaturan yang direkomendasi"
153
-Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Peringatan: Mengabaikan batasan layanan dapat menurunkan kualitas streaming atau mencegah Anda dari aktifitas streaming. \n\nLanjutkan?"
154
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Peringatan: Mengabaikan batasan layanan dapat menurunkan kualitas streaming atau mencegah Anda dari aktivitas streaming. \n\nLanjutkan?"
155
 Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maksimum Bitrate Video: %1 kbps"
156
 Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maksimum Bitrate Audio: %1 kbps"
157
 Basic.Settings.Stream.Recommended.MaxResolution="Maksimum Resolusi: %1"
158
@@ -853,7 +870,7 @@
159
 NoSources.Label="Anda tidak memiliki sumber apapun.\nKlik tombol + di bawah ini,\natau klik kanan disini untuk menambahkan."
160
 ChangeBG="Atur Warna"
161
 CustomColor="Sesuaikan Warna"
162
-BrowserSource.EnableHardwareAcceleration="Aktifkan Akselerasi Perangkat Keras Sumber Browser"
163
+BrowserSource.EnableHardwareAcceleration="Aktifkan Akselerasi Perangkat Keras Sumber Peramban"
164
 About="Tentang"
165
 About.Info="OBS Studio adalah perangkat lunak perekam video dan live streaming gratis dan sumber terbuka."
166
 About.Donate="Buat Sebuah Kontribusi"
167
@@ -888,3 +905,68 @@
168
 ContextBar.MediaControls.PlaylistPrevious="Sebelumnya dalam Daftar Putar"
169
 ContextBar.MediaControls.MediaProperties="Properti Media"
170
 ContextBar.MediaControls.BlindSeek="Widget Media Seek"
171
+YouTube.Auth.Ok="Otorisasi berhasil diselesaikan.\nSekarang Anda dapat menutup halaman ini."
172
+YouTube.Auth.NoCode="Proses otorisasi tidak selesai."
173
+YouTube.Auth.NoChannels="Tidak ada saluran-saluran yang tersedia pada akun yang dipilih"
174
+YouTube.Auth.WaitingAuth.Title="Otorisasi Pengguna YouTube"
175
+YouTube.Auth.WaitingAuth.Text="Mohon selesaikan otorisasi di peramban luar Anda.<br>Jika peramban luar tidak terbuka, ikuti tautan ini dan selesaikan otorisasinya:<br>%1"
176
+YouTube.AuthError.Text="Gagal memperoleh informasi saluran: %1."
177
+YouTube.Actions.WindowTitle="Pengaturan Siaran YouTube - Saluran: %1"
178
+YouTube.Actions.CreateNewEvent="Buat Siaran Baru"
179
+YouTube.Actions.ChooseEvent="Pilih Siaran Yang Ada"
180
+YouTube.Actions.Title="Judul*"
181
+YouTube.Actions.MyBroadcast="Siaran Saya"
182
+YouTube.Actions.Description="Deskripsi"
183
+YouTube.Actions.Privacy="Privasi*"
184
+YouTube.Actions.Privacy.Private="Pribadi"
185
+YouTube.Actions.Privacy.Public="Publik"
186
+YouTube.Actions.Privacy.Unlisted="Tidak Publik"
187
+YouTube.Actions.Category="Kategori"
188
+YouTube.Actions.Thumbnail="Gambar mini"
189
+YouTube.Actions.Thumbnail.SelectFile="Pilih berkas..."
190
+YouTube.Actions.Thumbnail.NoFileSelected="Tidak ada berkas yang dipilih"
191
+YouTube.Actions.Thumbnail.ClearFile="Bersihkan"
192
+YouTube.Actions.MadeForKids="Apakah video ini dibuat untuk anak-anak?*"
193
+YouTube.Actions.MadeForKids.Yes="Ya, video ini dibuat untuk anak-anak"
194
+YouTube.Actions.MadeForKids.No="Tidak, video ini tidak dibuat untuk anak-anak"
195
+YouTube.Actions.AdditionalSettings="Pengaturan tambahan:"
196
+YouTube.Actions.Latency="Latensi"
197
+YouTube.Actions.Latency.Low="Rendah"
198
+YouTube.Actions.Latency.UltraLow="Ultra rendah"
199
+YouTube.Actions.EnableAutoStart="Aktifkan Mulai Otomatis"
200
+YouTube.Actions.EnableAutoStop="Aktifkan Berhenti Otomatis"
201
+YouTube.Actions.AutoStartStop.TT="Menunjukkan apakah siaran terjadwal ini sebaiknya di mulai otomatis"
202
+YouTube.Actions.EnableDVR="Aktifkan DVR"
203
+YouTube.Actions.360Video="Video 360"
204
+YouTube.Actions.ScheduleForLater="Jadwalkan nanti"
205
+YouTube.Actions.RememberSettings="Ingat pengaturan ini"
206
+YouTube.Actions.Create_Ready="Buat siaran"
207
+YouTube.Actions.Create_GoLive="Buat siaran dan mulai streaming"
208
+YouTube.Actions.Choose_Ready="Pilih siaran"
209
+YouTube.Actions.Choose_GoLive="Pilih siaran dan mulai streaming"
210
+YouTube.Actions.Create_Schedule="Jadwalkan siaran"
211
+YouTube.Actions.Create_Schedule_Ready="Jadwalkan dan pilih siaran"
212
+YouTube.Actions.Dashboard="Buka YouTube Studio"
213
+YouTube.Actions.Error.Title="Kesalahan pembuatan siaran langsung"
214
+YouTube.Actions.Error.Text="Kesalahan akses YouTube '%1'.<br/>Deskripsi detail kesalahan dapat ditemukan di <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
215
+YouTube.Actions.Error.General="Kesalahan akses YouTube. Mohon periksa koneksi jaringan Anda atau akses server YouTube Anda."
216
+YouTube.Actions.Error.NoBroadcastCreated="Kesalahan pembuatan siaran '%1'.<br/>Deskripsi detail kesalahan dapat ditemukan di <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
217
+YouTube.Actions.Error.NoStreamCreated="Tidak ada streaming yang dibuat. Silakan hubungkan kembali akun Anda."
218
+YouTube.Actions.Error.YouTubeApi="Kesalahan API YouTube. Silakan lihat catatan berkas untuk informasi lebih lanjut."
219
+YouTube.Actions.Error.BroadcastNotFound="Siaran yang dipilih tidak ditemukan."
220
+YouTube.Actions.Error.FileMissing="Berkas yang dipilih tidak ada."
221
+YouTube.Actions.Error.FileOpeningFailed="Gagal membuka berkas yang dipilih."
222
+YouTube.Actions.Error.FileTooLarge="Berkas yang dipilih terlalu besar (Batas: 2 MiB)."
223
+YouTube.Actions.EventsLoading="Memuat daftar acara..."
224
+YouTube.Actions.EventCreated.Title="Acara Dibuat"
225
+YouTube.Actions.EventCreated.Text="Acara berhasil dibuat."
226
+YouTube.Actions.Stream="Streaming"
227
+YouTube.Actions.Stream.ScheduledFor="Dijadwalkan untuk %1"
228
+YouTube.Actions.Stream.Resume="Lanjutkan streaming yang terputus"
229
+YouTube.Actions.Stream.YTStudio="Otomatis dibuat oleh YouTube Studio"
230
+YouTube.Actions.Notify.CreatingBroadcast="Membuat sebuah Siaran Langsung baru, silakan tunggu..."
231
+YouTube.Actions.AutoStartStreamingWarning.Title="Diperlukan mulai manual"
232
+YouTube.Actions.AutoStartStreamingWarning="Mulai otomatis dinonaktifkan untuk acara ini, klik \"Mulai Siaran\" untuk memulai siaran Anda."
233
+YouTube.Actions.AutoStopStreamingWarning="Anda tidak akan dapat menghubungkannya kembali.<br>Streaming Anda akan dihentikan dan Anda tidak akan dalam siaran langsung lagi."
234
+YouTube.Errors.liveStreamingNotEnabled="Live streaming tidak diaktifkan pada saluran YouTube yang dipilih.<br/><br/>Lihat <a href='https://www.youtube.com/features'>youtube.com/features</a> untuk informasi lebih lanjut."
235
+YouTube.Errors.livePermissionBlocked="Live streaming tidak tersedia pada saluran YouTube yang dipilih.<br/>Perlu diingat bahwa diperlukan waktu hingga 24 jam agar live streaming bisa dilakukan setelah mengaktifkannya di pengaturan saluran Anda.<br/><br/>Lihat <a href='https://www.youtube.com/features'>youtube.com/features</a> untuk detail lebih lanjut."
236
obs-studio-27.0.1.tar.xz/UI/data/locale/it-IT.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/it-IT.ini Changed
206
 
1
@@ -47,10 +47,10 @@
2
 Transition="Transizione"
3
 QuickTransitions="Transizioni rapide"
4
 FadeToBlack="Dissolvenza sul nero"
5
-Left="Sinistra"
6
-Right="Destra"
7
-Top="Alto"
8
-Bottom="Basso"
9
+Left="A sinistra"
10
+Right="A destra"
11
+Top="In alto"
12
+Bottom="In basso"
13
 Reset="Ripristina"
14
 Hours="Ore"
15
 Minutes="Minuti"
16
@@ -108,6 +108,7 @@
17
 Auth.InvalidScope.Text="I requisiti di accesso per %1 sono cambiati. Alcune funzionalità potrebbero non essere disponibili."
18
 Auth.LoadingChannel.Title="Caricamento delle informazioni del canale in corso..."
19
 Auth.LoadingChannel.Text="Caricamento delle informazioni del canale per %1, attendi..."
20
+Auth.LoadingChannel.Error="Impossibile ottenere le informazioni canale."
21
 Auth.ChannelFailure.Title="Impossibile caricare il canale"
22
 Auth.ChannelFailure.Text="Impossibile caricare le informazioni del canale per %1\n\n%2: %3"
23
 Auth.StreamInfo="Informazioni della diretta"
24
@@ -148,12 +149,14 @@
25
 Basic.AutoConfig.StreamPage.GetStreamKey="Ottieni la chiave di stream"
26
 Basic.AutoConfig.StreamPage.MoreInfo="Altre Informazioni"
27
 Basic.AutoConfig.StreamPage.UseStreamKey="Utilizza il codice delle dirette"
28
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Usa chiave Stream (avanzato)"
29
 Basic.AutoConfig.StreamPage.Service="Servizio"
30
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostra tutti..."
31
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizzato..."
32
 Basic.AutoConfig.StreamPage.StreamKey="Codice delle dirette"
33
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)"
34
 Basic.AutoConfig.StreamPage.EncoderKey="Chiave Codificatore"
35
+Basic.AutoConfig.StreamPage.ConnectedAccount="Account connesso"
36
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Calcola la velocità in bit tramite un test di larghezza di banda (richiede alcuni minuti)"
37
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferisco la codifica hardware"
38
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="La codifica hardware elimina la maggior parte dell'utilizzo della CPU, ma può richiedere più velocità in bit per ottenere lo stesso livello di qualità."
39
@@ -196,7 +199,7 @@
40
 Basic.Stats.MegabytesSent="Uscita dati totale"
41
 Basic.Stats.Bitrate="Velocità in bit"
42
 Basic.Stats.DiskFullIn="Disco pieno in (appross.)"
43
-Basic.Stats.ResetStats="Reset delle statistiche"
44
+Basic.Stats.ResetStats="Reset statistiche"
45
 ResetUIWarning.Title="Sei sicuro di voler ripristinare l'interfaccia utente?"
46
 ResetUIWarning.Text="Se ripristini l'interfaccia utente, verranno nascosti dei pannelli. Dovrai rimostrare questi pannelli dal menù visualizza se vuoi che siano visibili.\n\nSei sicuro di voler ripristinare l'interfaccia utente?"
47
 Updater.Title="Nuovo aggiornamento disponibile"
48
@@ -313,6 +316,8 @@
49
 Output.RecordError.EncodeErrorMsg="Si è verificato un errore di codifica durante la registrazione."
50
 Output.BadPath.Title="Percorso del file non valido"
51
 Output.BadPath.Text="Il percorso configurato per il file di uscita non è valido. Controlla le tue impostazioni per confermare che un percorso dei file valido è stato impostato."
52
+Output.NoBroadcast.Title="Nessuna Trasmissione Configurata"
53
+Output.NoBroadcast.Text="È necessario impostare una trasmissione prima di poter iniziare la diretta."
54
 LogReturnDialog="Caricamento del file di log avvenuto con successo"
55
 LogReturnDialog.Description="Il tuo file di log è stato caricato. Puoi condividere l'URL per il debug o per ottenere supporto."
56
 LogReturnDialog.Description.Crash="Il tuo rapporto sui crash è stato caricato. Puoi condividere l'URL per il debug."
57
@@ -352,6 +357,8 @@
58
 MissingFiles.Found="Trovato"
59
 MissingFiles.AutoSearch="Ulteriori corrispondenze di file trovate"
60
 MissingFiles.AutoSearchText="OBS ha trovato file somiglianti ai file mancanti nella stessa cartella. Vuoi aggiungerli?"
61
+MissingFiles.NoMissing.Title="Controllo file mancanti"
62
+MissingFiles.NoMissing.Text="Nessun file sembra mancare."
63
 UpdateAvailable="È disponibile un nuovo aggiornamento"
64
 UpdateAvailable.Text="La versione %1.%2.%3 è ora disponibile. <a href='%4'>Fai clic qui per scaricarla</a>"
65
 Basic.DesktopDevice1="Audio del desktop"
66
@@ -421,6 +428,8 @@
67
 Basic.PropertiesView.FPS.Simple="Valori FPS semplici"
68
 Basic.PropertiesView.FPS.Rational="Valori FPS razionali"
69
 Basic.PropertiesView.FPS.ValidFPSRanges="Intervalli di FPS validi:"
70
+Basic.PropertiesView.UrlButton.Text="Vuoi aprire questo collegamento nel browser web predefinito?"
71
+Basic.PropertiesView.UrlButton.OpenUrl="Apri URL"
72
 Basic.InteractionWindow="Interazione con «%1»"
73
 Basic.StatusBar.Reconnecting="Disconnesso, riconnessione in %2 secondi (tentativo %1)"
74
 Basic.StatusBar.AttemptingReconnect="Tentativo di riconnessione in corso... (tentativo %1)"
75
@@ -475,6 +484,8 @@
76
 Basic.TransformWindow.BoundsType.ScaleToWidth="Scala alla larghezza dei limiti"
77
 Basic.TransformWindow.BoundsType.ScaleToHeight="Scala all'altezza dei limiti"
78
 Basic.TransformWindow.BoundsType.Stretch="Allungare ai limiti"
79
+Basic.TransformWindow.Title="Modifica trasformazione per '%1'"
80
+Basic.TransformWindow.NoSelectedSource="Nessuna sorgente selezionata"
81
 Basic.Main.AddSourceHelp.Title="Impossibile aggiungere la fonte"
82
 Basic.Main.AddSourceHelp.Text="Devi avere almeno una scena per aggiungere una fonte."
83
 Basic.Main.Scenes="Scene"
84
@@ -486,6 +497,7 @@
85
 Basic.Main.StartReplayBuffer="Avvia il buffer di replay"
86
 Basic.Main.SaveReplay="Salva il replay"
87
 Basic.Main.StartStreaming="Avvia la diretta"
88
+Basic.Main.StartBroadcast="Vai in diretta"
89
 Basic.Main.StartVirtualCam="Avvia la fotocamera virtuale"
90
 Basic.Main.StopRecording="Termina la registrazione"
91
 Basic.Main.PauseRecording="Registrazione in pausa"
92
@@ -493,7 +505,9 @@
93
 Basic.Main.StoppingRecording="Terminazione della registrazione in corso..."
94
 Basic.Main.StopReplayBuffer="Termina il buffer di replay"
95
 Basic.Main.StoppingReplayBuffer="Terminazione del buffer di replay in corso..."
96
+Basic.Main.SetupBroadcast="Gestisci Trasmissione"
97
 Basic.Main.StopStreaming="Termina la diretta"
98
+Basic.Main.StopBroadcast="Fine trasmissione"
99
 Basic.Main.StoppingStreaming="Terminazione della diretta in corso..."
100
 Basic.Main.ForceStopStreaming="Termina la diretta (annulla ritardo)"
101
 Basic.Main.ShowContextBar="Mostra la barra degli strumenti delle fonti"
102
@@ -511,6 +525,7 @@
103
 Basic.MainMenu.File.Settings="Impo&stazioni"
104
 Basic.MainMenu.File.ShowSettingsFolder="Visualizza la cartella delle impostazioni"
105
 Basic.MainMenu.File.ShowProfileFolder="Visualizza la cartella dei profili"
106
+Basic.MainMenu.File.ShowMissingFiles="Controlla i file mancanti"
107
 Basic.MainMenu.AlwaysOnTop="Sempre in primo pi&ano"
108
 Basic.MainMenu.File.Exit="Esci (&X)"
109
 Basic.MainMenu.Edit="Modifica (&E)"
110
@@ -624,6 +639,7 @@
111
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Orizzontale, in basso (8 scene)"
112
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Verticale, a sinistra (8 scene)"
113
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Verticale, a destra (8 scene)"
114
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Orizzontale, Superiore (18 scene)"
115
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Orizzontale, in alto (24 scene)"
116
 Basic.Settings.Stream="Dirette"
117
 Basic.Settings.Stream.StreamType="Tipo di diretta"
118
@@ -752,7 +768,7 @@
119
 Basic.Settings.Video.DownscaleFilter.Bilinear="Bilineare (il più veloce, ma sfocato se ridimensionato)"
120
 Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubica (scalatura accentuata, 16 campioni)"
121
 Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (scalatura accentuata, 36 campioni)"
122
-Basic.Settings.Video.DownscaleFilter.Area="Area (Somma ponderata, 4/6/9 campioni)"
123
+Basic.Settings.Video.DownscaleFilter.Area="Area (importo peso, 4/6/9 campioni)"
124
 Basic.Settings.Audio.SampleRate="Frequenza di campionamento"
125
 Basic.Settings.Audio.Channels="Canali"
126
 Basic.Settings.Audio.Meters="Metrica"
127
@@ -888,8 +904,8 @@
128
 About.Authors="Autori"
129
 About.License="Licenza"
130
 About.Contribute="Sostieni il progetto OBS"
131
-AddUrl.Title="Aggiungi origine mediante URL"
132
-AddUrl.Text="Hai trascinato un URL in OBS. Questo aggiungerà automaticamente il link come sorgente. Continuare?"
133
+AddUrl.Title="Aggiungi origine tramite URL"
134
+AddUrl.Text="Hai spostato un URL in OBS. Questo aggiungerà automaticamente il link come sorgente. Continuare?"
135
 ResizeOutputSizeOfSource="Ridimensionamento dell'uscita (alle dimensioni della fonte)"
136
 ResizeOutputSizeOfSource.Text="La risoluzione di base e quella effettiva verranno ridimensionate in base alla dimensione della fonte attuale."
137
 ResizeOutputSizeOfSource.Continue="Vuoi continuare?"
138
@@ -915,3 +931,67 @@
139
 ContextBar.MediaControls.PlaylistPrevious="Precedente nella playlist"
140
 ContextBar.MediaControls.MediaProperties="Proprietà del media"
141
 ContextBar.MediaControls.BlindSeek="Widget ricerca multimediale"
142
+YouTube.Auth.Ok="Autorizzazione completata con successo.\nOra puoi chiudere questa pagina."
143
+YouTube.Auth.NoCode="Il processo di autorizzazione non è stato completato."
144
+YouTube.Auth.NoChannels="Nessun canale disponibile sull'account selezionato"
145
+YouTube.Auth.WaitingAuth.Title="Autorizzazione utente YouTube"
146
+YouTube.Auth.WaitingAuth.Text="Completa l'autorizzazione nel browser esterno.<br>Se il browser esterno non si apre, apri questo collegamento e completa l'autorizzazione:<br>%1"
147
+YouTube.AuthError.Text="Recupero delle informazioni del canale non riuscito: %1."
148
+YouTube.Actions.WindowTitle="Configurazione di trasmissione di YouTube - Canale: %1"
149
+YouTube.Actions.CreateNewEvent="Crea Nuova Trasmissione"
150
+YouTube.Actions.ChooseEvent="Seleziona Trasmissione Esistente"
151
+YouTube.Actions.Title="Titolo*"
152
+YouTube.Actions.MyBroadcast="Mio broadcast"
153
+YouTube.Actions.Description="Descrizione"
154
+YouTube.Actions.Privacy.Private="Privato"
155
+YouTube.Actions.Privacy.Public="Pubblico"
156
+YouTube.Actions.Privacy.Unlisted="Non in elenco"
157
+YouTube.Actions.Category="Categoria"
158
+YouTube.Actions.Thumbnail="Anteprima"
159
+YouTube.Actions.Thumbnail.SelectFile="Seleziona file..."
160
+YouTube.Actions.Thumbnail.NoFileSelected="Nessun file selezionato"
161
+YouTube.Actions.Thumbnail.ClearFile="Pulisci"
162
+YouTube.Actions.MadeForKids="Questo vdieo è adatto per bambini?*"
163
+YouTube.Actions.MadeForKids.Yes="Sì, è adatto per bambini"
164
+YouTube.Actions.MadeForKids.No="No, non è adatto per bambini"
165
+YouTube.Actions.AdditionalSettings="Impostazioni aggiuntive:"
166
+YouTube.Actions.Latency="Latenza"
167
+YouTube.Actions.Latency.Normal="Normale"
168
+YouTube.Actions.Latency.Low="Bassa"
169
+YouTube.Actions.Latency.UltraLow="Ultra bassa"
170
+YouTube.Actions.EnableAutoStart="Abilita avvio automatico"
171
+YouTube.Actions.EnableAutoStop="Abilita stop automatico"
172
+YouTube.Actions.AutoStartStop.TT="Indica se questa trasmissione pianificata deve iniziare automaticamente"
173
+YouTube.Actions.EnableDVR="Abilita DVR"
174
+YouTube.Actions.360Video="Video 360"
175
+YouTube.Actions.ScheduleForLater="Pianificato più tardi"
176
+YouTube.Actions.RememberSettings="Ricorda queste impostazioni"
177
+YouTube.Actions.Create_Ready="Crea trasmissione"
178
+YouTube.Actions.Create_GoLive="Crea trasmissione e avvia la diretta"
179
+YouTube.Actions.Choose_Ready="Seleziona trasmissione"
180
+YouTube.Actions.Choose_GoLive="Seleziona trasmissione e avvia la diretta"
181
+YouTube.Actions.Create_Schedule="Pianifica trasmissione"
182
+YouTube.Actions.Create_Schedule_Ready="Pianifica e seleziona trasmissione"
183
+YouTube.Actions.Dashboard="Apri YouTube Studio"
184
+YouTube.Actions.Error.Title="Errore creazione broadcast Live"
185
+YouTube.Actions.Error.Text="Errore accesso YouTube '%1'.<br/>Descrizione dettagliata errore disponibile qui: <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
186
+YouTube.Actions.Error.General="Errore di accesso a YouTube.\nControlla la connessione di rete o l'accesso al server YouTube."
187
+YouTube.Actions.Error.NoBroadcastCreated="Errore creazione broadcast '%1'.<br/>Descrizione dettagliata dell'errore disponibile qui: <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
188
+YouTube.Actions.Error.NoStreamCreated="Nessun flusso creato.\nRi-collegati all'account."
189
+YouTube.Actions.Error.YouTubeApi="Errore API YouTube.\nPer maggiori informazioni, consulta il file del regsitro eventi."
190
+YouTube.Actions.Error.BroadcastNotFound="La trasmissione selezionata non è stata trovata."
191
+YouTube.Actions.Error.FileMissing="Il file selezionato non esiste."
192
+YouTube.Actions.Error.FileOpeningFailed="Apertura del file selezionato non riuscita."
193
+YouTube.Actions.Error.FileTooLarge="Il file selezionato è troppo grande (Limite: 2 MiB)."
194
+YouTube.Actions.EventsLoading="Caricamento elenco degli eventi..."
195
+YouTube.Actions.EventCreated.Title="Evento creato"
196
+YouTube.Actions.EventCreated.Text="Creazione evento completata."
197
+YouTube.Actions.Stream.ScheduledFor="Pianificato per %1"
198
+YouTube.Actions.Stream.Resume="Riprendi lo stream interrotto"
199
+YouTube.Actions.Stream.YTStudio="Creato automaticamente da YouTube Studio"
200
+YouTube.Actions.Notify.CreatingBroadcast="Creazione nuovo broadcast live..."
201
+YouTube.Actions.AutoStartStreamingWarning.Title="Avvio manuale richiesto"
202
+YouTube.Actions.AutoStartStreamingWarning="er questo evento l'avvio automatico è disabilitato, per avviare la trasmissionefai clic su \"Vai Live\" ."
203
+YouTube.Actions.AutoStopStreamingWarning="Non potrai riconnetterti.<br>Il tuo streaming verrà interrotto e non sarai più in diretta."
204
+YouTube.Errors.liveStreamingNotEnabled="Lo streaming live non è abilitato sul canale YouTube selezionato.<br/><br/>Vedi <a href='https://www.youtube.com/features'>youtube.com/features</a> per ulteriori informazioni."
205
+YouTube.Errors.livePermissionBlocked="Lo streaming live non è disponibile sul canale YouTube selezionato.<br/>Si prega di notare che potrebbero essere necessarie fino a 24 ore perché lo streaming in diretta diventi disponibile dopo averlo abilitato nelle impostazioni del canale.<br/><br/>Vedi <a href='https://www.youtube.com/features'>youtube.com/features</a> per i dettagli."
206
obs-studio-27.0.1.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ja-JP.ini Changed
166
 
1
@@ -111,6 +111,7 @@
2
 Auth.InvalidScope.Text="%1の認証要件が変更されました。 いくつかの機能は利用できないかもしれません。"
3
 Auth.LoadingChannel.Title="チャンネル情報を読み込み中..."
4
 Auth.LoadingChannel.Text="%1のチャンネル情報を読み込み中、しばらくお待ちください..."
5
+Auth.LoadingChannel.Error="チャンネル情報を取得できません。"
6
 Auth.ChannelFailure.Title="チャンネルの読み込みに失敗"
7
 Auth.ChannelFailure.Text="%1のチャネル情報の読み込みに失敗しました\n\n%2: %3"
8
 Auth.Chat="チャット"
9
@@ -152,6 +153,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="ストリームキーを取得"
11
 Basic.AutoConfig.StreamPage.MoreInfo="詳細情報"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="ストリームキーを使用"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="ストリームキーを使用する (詳細)"
14
 Basic.AutoConfig.StreamPage.Service="サービス"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="すべて表示..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="カスタム..."
17
@@ -159,6 +161,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="ストリームキー"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(リンク)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="エンコーダキー"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="接続されたアカウント"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="帯域幅のテストでビットレートを推定する (数分かかることがあります)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="ハードウェアエンコードを優先する"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="ハードウェアエンコードは CPU 使用率がほとんどなくなりますが、同レベルの品質を得るためにはより多くのビットレートが必要になります。"
25
@@ -319,6 +322,8 @@
26
 Output.RecordError.EncodeErrorMsg="録画中にエンコーダでエラーが発生しました。"
27
 Output.BadPath.Title="無効なパス"
28
 Output.BadPath.Text="設定されたファイルの出力パスが無効です。有効なファイルパスが設定されていることを確認してください。"
29
+Output.NoBroadcast.Title="配信が設定されていません"
30
+Output.NoBroadcast.Text="配信を開始する前に配信を設定する必要があります。"
31
 LogReturnDialog="ログの送信成功"
32
 LogReturnDialog.Description="ログファイルがアップロードされました。 デバッグまたはサポートのために、URLをシェアできます。"
33
 LogReturnDialog.Description.Crash="クラッシュレポートがアップロードされました。 デバッグのために、URLをシェアできます。"
34
@@ -358,6 +363,8 @@
35
 MissingFiles.Found="見つかった"
36
 MissingFiles.AutoSearch="追加ファイル一致が見つかりました"
37
 MissingFiles.AutoSearchText="OBSはそのディレクトリで不足しているファイルに一致するものを追加で検出しました。それらを追加しますか?"
38
+MissingFiles.NoMissing.Title="見つからないファイルのチェック"
39
+MissingFiles.NoMissing.Text="見つからないファイルはありません。"
40
 UpdateAvailable="更新が利用可能"
41
 UpdateAvailable.Text="バージョン %1.%2.%3 が利用可能です。<a href='%4'>ダウンロードはこちら</a>"
42
 Basic.DesktopDevice1="デスクトップ音声"
43
@@ -423,6 +430,8 @@
44
 Basic.PropertiesView.FPS.Simple="単純なFPS値"
45
 Basic.PropertiesView.FPS.Rational="有理数のFPS値"
46
 Basic.PropertiesView.FPS.ValidFPSRanges="有効なFPS範囲:"
47
+Basic.PropertiesView.UrlButton.Text="このリンクを既定のウェブブラウザで開きますか?"
48
+Basic.PropertiesView.UrlButton.OpenUrl="URLを開く"
49
 Basic.InteractionWindow="'%1' との相互作用"
50
 Basic.StatusBar.Reconnecting="切断されました、%2 秒で再接続 (試行 %1)"
51
 Basic.StatusBar.AttemptingReconnect="再接続しています... (試行 %1)"
52
@@ -477,6 +486,8 @@
53
 Basic.TransformWindow.BoundsType.ScaleToWidth="境界の幅に合わせる"
54
 Basic.TransformWindow.BoundsType.ScaleToHeight="境界の高さに合わせる"
55
 Basic.TransformWindow.BoundsType.Stretch="境界まで引き伸ばす"
56
+Basic.TransformWindow.Title="'%1' の変換の編集"
57
+Basic.TransformWindow.NoSelectedSource="ソースが選択されていません"
58
 Basic.Main.AddSourceHelp.Title="ソースの追加不可"
59
 Basic.Main.AddSourceHelp.Text="ソースを追加するには少なくとも1つのシーンが必要です。"
60
 Basic.Main.Scenes="シーン"
61
@@ -488,6 +499,7 @@
62
 Basic.Main.StartReplayBuffer="リプレイバッファ開始"
63
 Basic.Main.SaveReplay="リプレイを保存"
64
 Basic.Main.StartStreaming="配信開始"
65
+Basic.Main.StartBroadcast="今すぐ配信"
66
 Basic.Main.StartVirtualCam="仮想カメラ開始"
67
 Basic.Main.StopRecording="録画終了"
68
 Basic.Main.PauseRecording="録画一時停止"
69
@@ -495,7 +507,10 @@
70
 Basic.Main.StoppingRecording="録画停止処理中..."
71
 Basic.Main.StopReplayBuffer="リプレイバッファ停止"
72
 Basic.Main.StoppingReplayBuffer="リプレイバッファ停止処理中..."
73
+Basic.Main.SetupBroadcast="配信の管理"
74
 Basic.Main.StopStreaming="配信終了"
75
+Basic.Main.StopBroadcast="配信を終了"
76
+Basic.Main.AutoStopEnabled="(自動停止)"
77
 Basic.Main.StoppingStreaming="配信停止処理中..."
78
 Basic.Main.ForceStopStreaming="配信停止 (遅延破棄)"
79
 Basic.Main.ShowContextBar="ソースツールバーを表示"
80
@@ -514,6 +529,7 @@
81
 Basic.MainMenu.File.Settings="設定(&S)"
82
 Basic.MainMenu.File.ShowSettingsFolder="設定フォルダーを表示"
83
 Basic.MainMenu.File.ShowProfileFolder="プロファイルフォルダーを表示"
84
+Basic.MainMenu.File.ShowMissingFiles="見つからないファイルを確認"
85
 Basic.MainMenu.AlwaysOnTop="常に手前に表示(&A)"
86
 Basic.MainMenu.File.Exit="終了(&X)"
87
 Basic.MainMenu.Edit="編集(&E)"
88
@@ -627,6 +643,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="水平下側 (8 シーン)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="垂直左側 (8 シーン)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="垂直右側 (8 シーン)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="水平上側 (18 シーン)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="水平上側 (24 シーン)"
94
 Basic.Settings.Stream="配信"
95
 Basic.Settings.Stream.StreamType="配信種別"
96
@@ -937,3 +954,69 @@
97
 ContextBar.MediaControls.PlaylistPrevious="プレイリスト内の前"
98
 ContextBar.MediaControls.MediaProperties="メディアプロパティ"
99
 ContextBar.MediaControls.BlindSeek="メディアシークウィジェット"
100
+YouTube.Auth.Ok="認証に成功しました。\nこのページを閉じることができます。"
101
+YouTube.Auth.NoCode="認証プロセスが完了しませんでした。"
102
+YouTube.Auth.NoChannels="選択したアカウントに利用可能なチャネルがありません"
103
+YouTube.Auth.WaitingAuth.Title="YouTubeユーザー認証"
104
+YouTube.Auth.WaitingAuth.Text="外部ブラウザで認証を完了してください。<br>外部ブラウザが開かない場合は、このリンクに従って認証を完了してください:<br>%1"
105
+YouTube.AuthError.Text="チャネル情報の取得に失敗しました: %1."
106
+YouTube.Actions.WindowTitle="YouTube 配信の設定 - チャンネル: %1"
107
+YouTube.Actions.CreateNewEvent="新しい配信を作成"
108
+YouTube.Actions.ChooseEvent="既存の配信を選択"
109
+YouTube.Actions.Title="タイトル*"
110
+YouTube.Actions.MyBroadcast="自分の配信"
111
+YouTube.Actions.Description="説明"
112
+YouTube.Actions.Privacy="プライバシー*"
113
+YouTube.Actions.Privacy.Private="非公開"
114
+YouTube.Actions.Privacy.Public="公開"
115
+YouTube.Actions.Privacy.Unlisted="限定公開"
116
+YouTube.Actions.Category="カテゴリ"
117
+YouTube.Actions.Thumbnail="サムネイル"
118
+YouTube.Actions.Thumbnail.SelectFile="ファイル選択..."
119
+YouTube.Actions.Thumbnail.NoFileSelected="ファイルが選択されていません"
120
+YouTube.Actions.Thumbnail.ClearFile="クリア"
121
+YouTube.Actions.MadeForKids="この動画は子ども向けに作られていますか?*"
122
+YouTube.Actions.MadeForKids.Yes="はい、子ども向けです"
123
+YouTube.Actions.MadeForKids.No="いいえ、子ども向けではありません"
124
+YouTube.Actions.AdditionalSettings="詳細設定:"
125
+YouTube.Actions.Latency="遅延"
126
+YouTube.Actions.Latency.Normal="通常の遅延"
127
+YouTube.Actions.Latency.Low="低遅延"
128
+YouTube.Actions.Latency.UltraLow="超低遅延"
129
+YouTube.Actions.EnableAutoStart="自動開始を有効"
130
+YouTube.Actions.EnableAutoStop="自動停止を有効"
131
+YouTube.Actions.AutoStartStop.TT="このスケジュールされた配信を自動的に開始するかどうか"
132
+YouTube.Actions.EnableDVR="DVR を有効にする"
133
+YouTube.Actions.360Video="360° 動画"
134
+YouTube.Actions.ScheduleForLater="予約する"
135
+YouTube.Actions.RememberSettings="これらの設定を記憶する"
136
+YouTube.Actions.Create_Ready="配信を作成"
137
+YouTube.Actions.Create_GoLive="配信を作成して配信開始"
138
+YouTube.Actions.Choose_Ready="配信を選択"
139
+YouTube.Actions.Choose_GoLive="配信を選択して配信開始"
140
+YouTube.Actions.Create_Schedule="配信のスケジュール"
141
+YouTube.Actions.Create_Schedule_Ready="選択したファイルが存在しません。"
142
+YouTube.Actions.Dashboard="YouTube Studioを開く"
143
+YouTube.Actions.Error.Title="ライブ配信作成エラー"
144
+YouTube.Actions.Error.Text="YouTube アクセスエラー '%1'。<br/>エラーの詳細はこちらを参照してください <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
145
+YouTube.Actions.Error.General="YouTubeアクセスエラー。 ネットワーク接続またはYouTubeサーバーへのアクセスを確認してください。"
146
+YouTube.Actions.Error.NoBroadcastCreated="配信作成エラー '%1'。<br/>エラーの詳細はこちらを参照してください <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
147
+YouTube.Actions.Error.NoStreamCreated="配信が作成されていません。アカウントを再リンクしてください。"
148
+YouTube.Actions.Error.YouTubeApi="YouTube API エラー。詳細はログファイルを確認してください。"
149
+YouTube.Actions.Error.BroadcastNotFound="選択した配信が見つかりませんでした。"
150
+YouTube.Actions.Error.FileMissing="選択されたファイルが存在しません。"
151
+YouTube.Actions.Error.FileOpeningFailed="選択したファイルを開けませんでした。"
152
+YouTube.Actions.Error.FileTooLarge="選択したファイルが大きすぎます。(制限: 2 MiB)"
153
+YouTube.Actions.EventsLoading="イベントリストを読み込み中..."
154
+YouTube.Actions.EventCreated.Title="イベントが作成されました"
155
+YouTube.Actions.EventCreated.Text="イベントが正常に作成されました。"
156
+YouTube.Actions.Stream="配信"
157
+YouTube.Actions.Stream.ScheduledFor="%1 のスケジュール"
158
+YouTube.Actions.Stream.Resume="中断された配信を再開"
159
+YouTube.Actions.Stream.YTStudio="YouTube Studioによって自動的に作成"
160
+YouTube.Actions.Notify.CreatingBroadcast="新しい配信を作成しています。しばらくお待ちください..."
161
+YouTube.Actions.AutoStartStreamingWarning.Title="手動で開始する必要があります"
162
+YouTube.Actions.AutoStartStreamingWarning="このイベントでは自動開始が無効になっています。\"今すぐ配信\"をクリックして配信を開始します。"
163
+YouTube.Actions.AutoStopStreamingWarning="再接続することはできません。<br>配信が停止しライブではなくなります。"
164
+YouTube.Errors.liveStreamingNotEnabled="選択したYouTubeチャンネルでライブ配信が有効になっていません。<br/> <br/>詳細については<a href='https://www.youtube.com/features'>youtube.com/features</a>をご覧ください。"
165
+YouTube.Errors.livePermissionBlocked="選択したYouTubeチャンネルではライブ配信を利用できません。<br/>チャンネル設定でライブ配信を有効にしてから利用できるようになるまで最大24時間かかる場合があります。<br/><br/>詳細については <a href='https://www.youtube.com/features'>youtube.com/features</a> をご覧ください。"
166
obs-studio-27.0.1.tar.xz/UI/data/locale/ka-GE.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ka-GE.ini Changed
157
 
1
@@ -112,6 +112,7 @@
2
 Auth.InvalidScope.Text="შესვლის მოთხოვნები შეცვლილია მომსახურებისთვის %1. ზოგი შესაძლებლობა, შეიძლება აღარ იყოს ხელმისაწვდომი."
3
 Auth.LoadingChannel.Title="არხის მონაცემების ჩატვირთვა..."
4
 Auth.LoadingChannel.Text="%1-ის არხის მონაცემები იტვირთება, გთხოვთ მოითმინოთ..."
5
+Auth.LoadingChannel.Error="არხის მონაცემები ვერ ჩაიტვირთა."
6
 Auth.ChannelFailure.Title="მონაცემების ჩატვირთვა ვერ მოხერხდა"
7
 Auth.ChannelFailure.Text="%1-ის არხის მონაცემების ჩატვირთვა ვერ მოხერხდა\n\n%2: %3"
8
 Auth.Chat="სასაუბრო"
9
@@ -154,6 +155,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="ნაკადის გასაღების მიღება"
11
 Basic.AutoConfig.StreamPage.MoreInfo="ვრცლად"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="ნაკადის გასაღების გამოყენება"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="ნაკადის გასაღები (გამოცდილთათვის)"
14
 Basic.AutoConfig.StreamPage.Service="მომსახურება"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="ყველას ჩვენება..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="მითითებული..."
17
@@ -161,6 +163,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="ნაკადის გასაღები"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(ბმული)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="დამშიფრავის გასაღები"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="დაკავშირებული ანაგრიში"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="მიახლოებითი ბიტური სიხშირე, გამოთვლილი ქსელის გამტარუნარიანობის შემოწმებით (რამდენიმე წუთს შესაძლოა გასტანოს)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="აპარატურული დაშიფვრის გამოყენება"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="აპარატურული დაშიფვრა შეამცირებს პროცესორზე დატვირთვას, თუმცა შესაძლოა მეტი ბიტური სიხშირე დასჭირდეს, იმავე ხარისხის მისაღწევად."
25
@@ -360,6 +363,8 @@
26
 MissingFiles.Found="ნაპოვნია"
27
 MissingFiles.AutoSearch="ნაპოვნია სხვა შესაბამისი ფაილებიც"
28
 MissingFiles.AutoSearchText="OBS-მა ამ საქაღალდეში დაკარგული ფაილების შესაბამისი სხვა ფაილებიც იპოვა. გსურთ მათი დამატება?"
29
+MissingFiles.NoMissing.Title="ნაკლული ფაილების შემოწმება"
30
+MissingFiles.NoMissing.Text="ფაილები, წესით არ აკლია."
31
 UpdateAvailable="განახლება ხელმისაწვდომია"
32
 UpdateAvailable.Text="ხელმისაწვდომია ვერსია %1.%2.%3. <a href='%4'>დააწკაპეთ ჩამოსატვირთად</a>"
33
 Basic.Scene="სცენა"
34
@@ -422,6 +427,9 @@
35
 Basic.PropertiesView.FPS.Simple="ჩვეულებრივი FPS-მნიშვნელობები"
36
 Basic.PropertiesView.FPS.Rational="რაციონალურ რიცხვიანი FPS-მნიშვნელობები"
37
 Basic.PropertiesView.FPS.ValidFPSRanges="დაშვებული FPS-შუალედები:"
38
+Basic.PropertiesView.UrlButton.Text="გაიხსნას ბმული ნაგულისხმევ ბრაუზერში?"
39
+Basic.PropertiesView.UrlButton.Text.Url="ბმული: %1"
40
+Basic.PropertiesView.UrlButton.OpenUrl="ბმულის გახსნა"
41
 Basic.InteractionWindow="თაგვით ზემოქმედება ფანჯარაში – „%1“"
42
 Basic.StatusBar.Reconnecting="კავშირი გაწყვეტილია. ხელახლა დაკავშირება %2 წამში (%1 მცდელობა)"
43
 Basic.StatusBar.AttemptingReconnect="ხელახლა დაკავშირება... (%1 მცდელობა)"
44
@@ -435,8 +443,8 @@
45
 Basic.StatusBar.ScreenshotSavedTo="ეკრანის სურათი შენახულია – „%1“"
46
 Basic.StatusBar.AutoRemuxedTo="ჩანაწერი გადაიფუთა – „%1“"
47
 Basic.Filters="ფილტრები"
48
-Basic.Filters.AsyncFilters="ხმოვანი/ვიდეო ფილტრები"
49
-Basic.Filters.AudioFilters="ხმოვანი ფილტრები"
50
+Basic.Filters.AsyncFilters="ხმის/ვიდეოს ფილტრები"
51
+Basic.Filters.AudioFilters="ხმის ფილტრები"
52
 Basic.Filters.EffectFilters="დასამუშავებელი ფილტრები"
53
 Basic.Filters.Title="„%1“ – ფილტრები"
54
 Basic.Filters.AddFilter.Title="ფილტრის დასახელება"
55
@@ -476,6 +484,8 @@
56
 Basic.TransformWindow.BoundsType.ScaleToWidth="ზომის დაყვანა საზღვრების სიგანემდე"
57
 Basic.TransformWindow.BoundsType.ScaleToHeight="ზომის დაყვანა საზღვრების სიმაღლემდე"
58
 Basic.TransformWindow.BoundsType.Stretch="გაწელვა საზღვრებამდე"
59
+Basic.TransformWindow.Title="გარდაქმნის შესწორება – „%1“"
60
+Basic.TransformWindow.NoSelectedSource="წყარო არაა შერჩეული"
61
 Basic.Main.AddSourceHelp.Title="წყარო ვერ დაემატება"
62
 Basic.Main.AddSourceHelp.Text="საჭიროა, სულ მცირე 1 სცენა წყაროს დასამატებლად."
63
 Basic.Main.Scenes="სცენები"
64
@@ -487,6 +497,7 @@
65
 Basic.Main.StartReplayBuffer="გადახვევის ჩართვა"
66
 Basic.Main.SaveReplay="გადახვევის შენახვა"
67
 Basic.Main.StartStreaming="ნაკადის გაშვება"
68
+Basic.Main.StartBroadcast="ეთერში გასვლა"
69
 Basic.Main.StartVirtualCam="ვირტუალური კამერის ჩართვა"
70
 Basic.Main.StopRecording="ჩაწერის შეწყვეტა"
71
 Basic.Main.PauseRecording="ჩაწერის შეჩერება"
72
@@ -495,6 +506,7 @@
73
 Basic.Main.StopReplayBuffer="გადახვევის გამორთვა"
74
 Basic.Main.StoppingReplayBuffer="გადახვევა გამოირთვება..."
75
 Basic.Main.StopStreaming="ნაკადის შეწყვეტა"
76
+Basic.Main.StopBroadcast="გადაცემის დასრულება"
77
 Basic.Main.StoppingStreaming="ნაკადი წყდება..."
78
 Basic.Main.ForceStopStreaming="ნაკადის შეწყვეტა (დაუყოვნებლივ)"
79
 Basic.Main.ShowContextBar="წყაროს ზოლის ჩვენება"
80
@@ -513,6 +525,7 @@
81
 Basic.MainMenu.File.Settings="პარამეტრები (&S)"
82
 Basic.MainMenu.File.ShowSettingsFolder="პარამეტრების საქაღალდის ჩვენება"
83
 Basic.MainMenu.File.ShowProfileFolder="პროფილის საქაღალდის ჩვენება"
84
+Basic.MainMenu.File.ShowMissingFiles="ნაკლული ფაილების შემოწმება"
85
 Basic.MainMenu.AlwaysOnTop="ყოველთვის წინა პლანზე (&A)"
86
 Basic.MainMenu.File.Exit="გამოსვლა (&X)"
87
 Basic.MainMenu.Edit="ჩასწორება (&E)"
88
@@ -626,6 +639,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="თარაზულად, ქვემოთ (8 სცენა)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="შვეულად, მარცხნივ (8 სცენა)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="შვეულად, მარჯვნივ (8 სცენა)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="თარაზულად, ზემოთ (18 სცენა)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="თარაზულად, ზემოთ (24 სცენა)"
94
 Basic.Settings.Stream="ნაკადი"
95
 Basic.Settings.Stream.StreamType="ნაკადის სახეობა"
96
@@ -781,7 +795,7 @@
97
 Basic.Settings.Audio.MultichannelWarning="ნაკადის გაშვებისას გადაამოწმეთ, მომსახურების მომწოდებელი, იძლევა თუ არა მოცულობითი ხმოვანი სიგნალის როგორც მიღების, ასევე მოსმენის შესაძლებლობას. ერთ-ერთი მაგალითია Facebook 360 Live, სადაც სრულადაა მხარდაჭერილი მოცულობითი ხმოვანი სიგნალი. ხოლო Facebook Live და YouTube Live, მიუხედავად იმისა, რომ ორივე იღებს მოცულობით ხმოვან სიგნალს, Facebook Live გარდაქმნის მას სტერეო-სიგნალად, ხოლო YouTube Live უშვებს მხოლოდ ორი არხით.\n\nOBS-ის ხმოვანი ფილტრები თავსებადია მოცულობით ხმოვან სიგნალთან, მაგრამ VST-მოდულის მხარდაჭერა, შესაძლოა არ იყოს უზრუნველყოფილი."
98
 Basic.Settings.Audio.MultichannelWarning.Title="ჩაირთოს მოცულობითი ხმოვანი სიგნალი?"
99
 Basic.Settings.Audio.MultichannelWarning.Confirm="ნამდვილად გსურთ, ჩართოთ მოცულობითი ხმოვანი სიგნალი?"
100
-Basic.Settings.Audio.Devices="საერთო ხმოვანი მოწყობილობები"
101
+Basic.Settings.Audio.Devices="საერთო ხმის მოწყობილობები"
102
 Basic.Settings.Audio.DesktopDevice="ხმის მოწყობილობა"
103
 Basic.Settings.Audio.DesktopDevice2="ხმის მოწყობილობა 2"
104
 Basic.Settings.Audio.AuxDevice="მიკროფონი/დამატებითი მოწყობილობა"
105
@@ -921,3 +935,51 @@
106
 ContextBar.MediaControls.PlaylistPrevious="წინა, სიაში"
107
 ContextBar.MediaControls.MediaProperties="მასალის თვისებები"
108
 ContextBar.MediaControls.BlindSeek="მასალის ძიების ხელსაწყო"
109
+YouTube.Auth.Ok="შესვლა წარმატებით დამოწმდა.\nშეგიძლიათ დახუროთ ეს გვერდი."
110
+YouTube.Auth.NoCode="შესვლა ვერ დამოწმდა."
111
+YouTube.Auth.NoChannels="არხ(ებ)ი ვერ მოიძებნა მითითებულ ანგარიშზე"
112
+YouTube.Auth.WaitingAuth.Title="YouTube-მომხმარებლის დამოწმება"
113
+YouTube.Auth.WaitingAuth.Text="გთხოვთ, დამოწმებისთვის გამოიყენოთ ცალკე ბრაუზერი.<br>თუ ბრაუზერი არ იხსნება, მიჰყევით ამ ბმულს, დამოწმების დასასრულებლად:<br>%1"
114
+YouTube.AuthError.Text="არხის მონაცემები ვერ ჩაიტვირთა: %1."
115
+YouTube.Actions.Title="სათაური*"
116
+YouTube.Actions.MyBroadcast="ჩემი გადაცემა"
117
+YouTube.Actions.Description="აღწერილობა"
118
+YouTube.Actions.Privacy="ხილვადობა*"
119
+YouTube.Actions.Privacy.Private="პირადი"
120
+YouTube.Actions.Privacy.Public="საჯარო"
121
+YouTube.Actions.Privacy.Unlisted="ბმულით"
122
+YouTube.Actions.Category="კატეგორია"
123
+YouTube.Actions.MadeForKids="ეს ვიდეო ბავშვებისთვისაა?"
124
+YouTube.Actions.MadeForKids.Yes="დიახ, ბავშვებისთვისაა შექმნილი"
125
+YouTube.Actions.MadeForKids.No="არა, ბავშვებისთვის არაა შექმნილი"
126
+YouTube.Actions.AdditionalSettings="დამატებითი პარამეტრები:"
127
+YouTube.Actions.Latency="დაყოვნება"
128
+YouTube.Actions.Latency.Normal="ჩვეულებრივი"
129
+YouTube.Actions.Latency.Low="მცირე"
130
+YouTube.Actions.Latency.UltraLow="უმცირესი"
131
+YouTube.Actions.EnableAutoStart="თვითდაწყების შესაძლებლობა"
132
+YouTube.Actions.EnableAutoStop="თვითდასრულების შესაძლებლობა"
133
+YouTube.Actions.AutoStartStop.TT="აჩვენებს, დაგეგმილი გადაცემა თავადვე დაიწყოს თუ არა."
134
+YouTube.Actions.EnableDVR="ჩაირთოს DVR"
135
+YouTube.Actions.360Video="360 ვიდეო"
136
+YouTube.Actions.ScheduleForLater="სამომავლოდ დაგეგმვა"
137
+YouTube.Actions.Error.Title="შეცდომა, პირდაპირის ეთერის წამოწყებისას"
138
+YouTube.Actions.Error.Text="YouTube-თან წვდომის შეცდომა „%1“.<br/>შეცდომის ვრცელი აღწერისთვის, იხილეთ <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
139
+YouTube.Actions.Error.General="YouTube-თან წვდომის შეცდომა. გთხოვთ, შეამოწმოთ ქსელთან ან YouTube-სერვერთან კავშირი."
140
+YouTube.Actions.Error.NoBroadcastCreated="შეცდომა, გადაცემის წამოწყებისას „%1“.<br/>შეცდომის ვრცელი აღწერისთვის, იხილეთ <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
141
+YouTube.Actions.Error.NoStreamCreated="ნაკადი ვერ შეიქმნა. გთხოვთ, ხელახლა მიუერთდეთ ანგარიშს."
142
+YouTube.Actions.Error.YouTubeApi="YouTube-მაკავშირებლის შეცდომა. ვრცლად, იხილეთ აღრიცხვების ჩანაწერში."
143
+YouTube.Actions.Error.BroadcastNotFound="მითითებული გადაცემა ვერ მოიძებნა."
144
+YouTube.Actions.EventsLoading="იტვირთება ღონისძიებების სია..."
145
+YouTube.Actions.EventCreated.Title="ღონისძიება შექმნილია"
146
+YouTube.Actions.EventCreated.Text="ღონისძიება წარმატებით შეიქმნა."
147
+YouTube.Actions.Stream="ნაკადი"
148
+YouTube.Actions.Stream.ScheduledFor="დაგეგმილი %1"
149
+YouTube.Actions.Stream.Resume="გაწყვეტილი ნაკადის გაგრძელება"
150
+YouTube.Actions.Stream.YTStudio="თავად უზრუნველყოფს YouTube Studio"
151
+YouTube.Actions.Notify.CreatingBroadcast="იქმნება ახალი პირდაპირი ეთერი, გთხოვთ მოითმინოთ..."
152
+YouTube.Actions.AutoStartStreamingWarning.Title="საჭიროებს ხელით წამოწყებას"
153
+YouTube.Actions.AutoStartStreamingWarning="თვითდაწყება გათიშულია ამ ღონისძიებისთვის, დაწკაპეთ „ეთერში გასვლა“ გადაცემის წამოსაწყებად."
154
+YouTube.Actions.AutoStopStreamingWarning="ხელახლა მიერთებას ვერ შეძლებთ.<br>თქვენი ნაკადი შეწყდება და ეთერიდან გამოხვალთ."
155
+YouTube.Errors.liveStreamingNotEnabled="პირდაპირი ეთერის შესაძლებლობა, არაა ჩართული მითითებულ YouTube-არხზე.<br/><br/>ვრცლად, იხილეთ ბმულზე <a href='https://www.youtube.com/features'>youtube.com/features</a>."
156
+YouTube.Errors.livePermissionBlocked="პირდაპირი ეთერი, მიუწვდომელია მითითებულ YouTube-არხზე.<br/>გაითვალისწინეთ, რომ ამ შესაძლებლობის ამოქმედებამ, 24 საათამდე შეიძლება გასტანოს, მისი ჩართვიდან არხის პარამეტრებში.<br/><br/>ვრცლად, იხილეთ <a href='https://www.youtube.com/features'>youtube.com/features</a>."
157
obs-studio-27.0.1.tar.xz/UI/data/locale/kab-KAB.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/kab-KAB.ini Changed
12
 
1
@@ -201,6 +201,10 @@
2
 Basic.SceneTransitions="Asaka n yisuyas"
3
 Basic.TransitionDuration="Tanzagt"
4
 Basic.TogglePreviewProgramMode="Askar n ustudyu"
5
+Undo.Undo="Sefsex"
6
+Undo.Redo="Uɣal"
7
+Undo.Add="Rnu '%1'"
8
+Undo.Delete="kkes '%1'"
9
 TransitionNameDlg.Text="Ma ulac uɣilif sekcem isem i usayes"
10
 TransitionNameDlg.Title="Isem n usaka"
11
 TitleBar.Profile="Amaɣnu"
12
obs-studio-27.0.1.tar.xz/UI/data/locale/km-KH.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/km-KH.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-Language="ភាសាអង់គ្លេស"
3
+Language="ភាសាខ្មែរ"
4
 OK="អូខេ"
5
 Apply="អនុវត្ត"
6
 Cancel="បោះបង់"
7
obs-studio-27.1.3.tar.xz/UI/data/locale/kmr-TR.ini Added
1016
 
1
@@ -0,0 +1,1014 @@
2
+Language="Kurmancî"
3
+OK="BAŞ E"
4
+Apply="Bisepîne"
5
+Cancel="Dev jê berde"
6
+Close="Bigire"
7
+Save="Tomar bike"
8
+Discard="Biavêje"
9
+Disable="Neçalak bike"
10
+Yes="Erê"
11
+No="Na"
12
+Add="Tevlî bike"
13
+Remove="Rake"
14
+Rename="Ji nû ve nav lê bike"
15
+Interact="Bandor"
16
+Filters="Parzûn"
17
+Properties="Taybetmendî"
18
+MoveUp="Bibe jor"
19
+MoveDown="Bibe jêr"
20
+Settings="Sazkarî"
21
+Display="Dîmender"
22
+Name="Nav"
23
+Exit="Derkeve"
24
+Mixer="Tevlihevkera dengê"
25
+Browse="Bigere"
26
+DroppedFrames="Ketina tarikan %1 (%2%)"
27
+StudioProgramProjector="Projektorê dîmendera tije (Bername)"
28
+PreviewProjector="Projektorê dîmendera tije (Pêşdîtin)"
29
+SceneProjector="Projektorê dîmendera tije (Dîmen)"
30
+SourceProjector="Projektorê dîmendera tije (Çavkanî)"
31
+StudioProgramWindow="Projektorê çarçoveyî (Bername)"
32
+PreviewWindow="Projektorê çarçoveyî (Pêşdîtin)"
33
+SceneWindow="Projektorê çarçoveyî (Dîmen)"
34
+SourceWindow="Projektorê çarçoveyî (Çavkanî)"
35
+MultiviewProjector="Pirdîmen (Dîmendera tije)"
36
+MultiviewWindowed="Pirdîmen (Çarçoveyî)"
37
+ResizeProjectorWindowToContent="Çarçoveyê li naverokê guncan bike"
38
+Clear="Pak bike"
39
+Revert="Vegerîne rewşa berê"
40
+Show="Nîşan bide"
41
+Hide="Veşêre"
42
+UnhideAll="Hemûyan veneşêre"
43
+Untitled="Bê nav"
44
+New="Nû"
45
+Duplicate="Dûbare bike"
46
+Enable="Çalak bike"
47
+DisableOSXVSync="macOS V-Sync neçalak bike"
48
+ResetOSXVSyncOnExit="macOS V-Sync ji nû ve saz bike li ser derketinê"
49
+HighResourceUsage="Kodkirin pir barkirî ye! an sazkariyên vîdyoyê daxîne an jî pêşdanasînek kodkirina zûtir bi kar bîne."
50
+Transition="Derbasbûn"
51
+QuickTransitions="Derbasbûna bilez"
52
+FadeToBlack="Bo reş wenda dibê"
53
+Left="Çep"
54
+Right="Rast"
55
+Top="Jor"
56
+Bottom="Jêr"
57
+Reset="Ji nû ve saz bike"
58
+Hours="Demjimêr"
59
+Minutes="Xulek"
60
+Seconds="Çirke"
61
+Deprecated="Paşguhkirî"
62
+ReplayBuffer="Bîrgeha demkî ji nû ve lêde"
63
+Import="Têxistin"
64
+Export="Derxistin"
65
+Copy="Jê bigire"
66
+Paste="Pêve bike"
67
+PasteReference="Pêve bike (Çavkanî)"
68
+PasteDuplicate="Pêve bike (Dûbarekirî)"
69
+RemuxRecordings="Tomarkirinên Remux"
70
+Next="Pêş"
71
+Back="Paş"
72
+Defaults="Berdest"
73
+HideMixer="Di tevlihevkerê de veşêre"
74
+TransitionOverride="Veguheztina veguherînê"
75
+ShowTransition="Derbasbûnê nîşan bide"
76
+HideTransition="Derbasbûnê veşêre"
77
+None="Ne yek"
78
+StudioMode.Preview="Pêşdîtin"
79
+StudioMode.Program="Bername"
80
+ShowInMultiview="Di pirdîmen de nîşan bide"
81
+VerticalLayout="Rêzkirina stûnî"
82
+Group="Kom"
83
+DoNotShowAgain="Careke din nîşan nede"
84
+Default="(Berdest)"
85
+Calculating="Tê hejmartin..."
86
+Fullscreen="Dîmendera tijî"
87
+Windowed="Çarçoveyî"
88
+Percent="ji sedî"
89
+RefreshBrowser="Nû bike"
90
+AspectRatio="Rêjeya bilindbûn û pehnbûnê <b>%1:%2</b>"
91
+LockVolume="Dengê kilît bike"
92
+LogViewer="Nîşanderê têketinê"
93
+ShowOnStartup="Li ser destpêkirinê nîşan bide"
94
+OpenFile="Pelê veke"
95
+AddValue="Tevlî bike %1"
96
+AlreadyRunning.Title="OBS jixwe dixebite"
97
+AlreadyRunning.Text="OBS jixwe dixebite! Heke te nexwest vê yekê bike, ji kerema xwe berî ku tu hewl bidî ku tomarkirinekî nû bixebitnî hemû tomarkirinekê heyî yên OBS-ê bigire. Heke te OBS saz kiriye ku li pêşpirtika pergalê piçûk bibe, ji kerema xwe li wir kontrol bike ka ew hin jî dixebite."
98
+AlreadyRunning.LaunchAnyway="Bi her awayî dest pê bike"
99
+ChromeOS.Title="Platforma nepiştgirî"
100
+ChromeOS.Text="Wusa dixuye ku OBS di hundurê konteynirek ChromeOS de dixebite. Ev platform nayê piştgirî kirin"
101
+DockCloseWarning.Title="Girtina pencereya kîpbûn"
102
+DockCloseWarning.Text="Te pencereyeke keştîgeh girt. Heke tu dixûyî careke din nîşan bidî, menuya dîtinê → darbarê menuyê bi kar bîne."
103
+ExtraBrowsers="Keştîgehê gerokê taybet"
104
+ExtraBrowsers.Info="Bi navûdeng û URL re keştîgehan lê zêde bike, paşê ji bo vekirina keştîgeh bitikîne an bigire. Tu dikarî di her demê de keştîgeh lê zêde bikî an jî rake."
105
+ExtraBrowsers.DockName="Navê keştîgeh"
106
+Auth.Authing.Title="Tê rastandin"
107
+Auth.Authing.Text="Bi %1 re tê rastandin, ji kerema xwe li bendê bimîne..."
108
+Auth.AuthFailure.Title="Rastandin têkçû"
109
+Auth.AuthFailure.Text="Rastandin bi %1:\n\n%2: %3 re têkçû"
110
+Auth.InvalidScope.Title="Rastandin pêdivî ye"
111
+Auth.InvalidScope.Text="Pêdiviyên rastandinê ji bo %1 hatine guhertin. Hinek taybetmendî belkî tune bin."
112
+Auth.LoadingChannel.Title="Zanyariyên kanalê tên barkirin..."
113
+Auth.LoadingChannel.Text="Zaniyariyên kanalê ji bo %1 tê barkirin, ji kerema xwe li bendê be..."
114
+Auth.LoadingChannel.Error="Nikare zanyariyên kanalê bi dest bixê."
115
+Auth.ChannelFailure.Title="Barkirina kanalê têkçû"
116
+Auth.ChannelFailure.Text="Barkirina zanyariyên kanalê ji bo%1\n\n%2: %3 têkçû"
117
+Auth.Chat="Axaftin"
118
+Auth.StreamInfo="Zanyariyên weşanê"
119
+TwitchAuth.Stats="Rewşa Twitch"
120
+TwitchAuth.Feed="Weşana çalakiya Twitch"
121
+TwitchAuth.TwoFactorFail.Title="Nikarî mifteya weşana jê bipirse"
122
+TwitchAuth.TwoFactorFail.Text="OBS nikaribû bi hesabê Twitch-ê ve girêbide. Ji kerema xwe pê ewle bine ku pejirandina du-faktor di ya we de hatî saz kirin <a href='https://www.twitch.tv/settings/security'>Sazkarîyên ewlehiyê yên twitch</a>ji ber ku ev pêdivî ye ku biherike."
123
+RestreamAuth.Channels="Kanalên Restream"
124
+Copy.Filters="Pazrûnan jê bigire"
125
+Paste.Filters="Pazrûnan pêve bike"
126
+BrowserPanelInit.Title="Gerok tê destpêkirin..."
127
+BrowserPanelInit.Text="Gerok tê destpêkirin, ji kerema xwe li bendê bimîne..."
128
+BandwidthTest.Region="Herêm"
129
+BandwidthTest.Region.US="Dewletên yekbûyî"
130
+BandwidthTest.Region.EU="Ewropa"
131
+BandwidthTest.Region.Asia="Asya"
132
+BandwidthTest.Region.Other="Yên din"
133
+Basic.AutoConfig="Sêrbazê veşartina xweser"
134
+Basic.AutoConfig.ApplySettings="Sazkariyan bisepîne"
135
+Basic.AutoConfig.StartPage="Zanyariyên bikaranînê"
136
+Basic.AutoConfig.StartPage.SubTitle="Hûn dixwazin bernameyê ji bo çi bikar bînin diyar bikin"
137
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Ji bo weşane çêtir bikin, tomarkirin duyemîn e"
138
+Basic.AutoConfig.StartPage.PrioritizeRecording="Tenê ji bo tomarkirinê çêtir bikin, ez ê weşane nekim"
139
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Ez ê bi tenê kamera ya rastekî bi kar bînim"
140
+Basic.AutoConfig.VideoPage="Sazkariyên vîdyoyê"
141
+Basic.AutoConfig.VideoPage.SubTitle="Sazkariyên vîdyoyê yên ku tu dixwazî bi kar bînî diyar bike"
142
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Yê heyî bi kar bîne (%1x%2)"
143
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Dîmender %1 (%2x%3)"
144
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Yê heyî bi kar bîne (%1)"
145
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 an jî 30, lê gava ku gengaz be 60 tercîh bike"
146
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 an jî 30, lê gava ku gengaz be qalîteya bilind tercîh bike"
147
+Basic.AutoConfig.VideoPage.CanvasExplanation="Nîşe: Pênasa (bingeh) ya teqez ne hewce ye ku averûtîya ku hûn ê bi wê ve bişînin an tomar bikin. Vebijêrka rasterast/qeydkirina we dibe ku ji rahijmendiya tûjê were dakêşandin da ku karanîna çavkaniyê an hewceyên leza bît kêm bikin."
148
+Basic.AutoConfig.StreamPage="Zanyariyên weşanê"
149
+Basic.AutoConfig.StreamPage.SubTitle="Ji kerema xwe zaniyariyên weşanê xwe binivîse"
150
+Basic.AutoConfig.StreamPage.ConnectAccount="Ajimêrê girê bide (tê pêşniyazkirin)"
151
+Basic.AutoConfig.StreamPage.DisconnectAccount="Girêdanê ajimêr qut bike"
152
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Girêdanê ajimêr qut bike?"
153
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Ev guhertin dê tavilê were sepandin. Ma tu dixwazî girêdanê ajimêra xwe qut bikî?"
154
+Basic.AutoConfig.StreamPage.GetStreamKey="Kilîdê weşanê bistîne"
155
+Basic.AutoConfig.StreamPage.MoreInfo="Bêhtir zanyarî"
156
+Basic.AutoConfig.StreamPage.UseStreamKey="Kilîdê weşanê bi kar bîne"
157
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Kilîdê weşanê bi kar bîne (pêşketî)"
158
+Basic.AutoConfig.StreamPage.Service="Karûbar"
159
+Basic.AutoConfig.StreamPage.Service.ShowAll="Hemû nîşan bide"
160
+Basic.AutoConfig.StreamPage.Service.Custom="Kesanekirî"
161
+Basic.AutoConfig.StreamPage.Server="Rajekar"
162
+Basic.AutoConfig.StreamPage.StreamKey="kilîdê weşanê"
163
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Girêdan)"
164
+Basic.AutoConfig.StreamPage.EncoderKey="Kilîdê şîfreker"
165
+Basic.AutoConfig.StreamPage.ConnectedAccount="Ajimêrên girêdayî"
166
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Rêjeya bît ya bi testkirina firehiya bendê (dibe ku çend hûrdeman bavêje)"
167
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Kodkirin bi riya reqalavê tercîh bike"
168
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Şîfrekirina Kêşeya Piranî karanîna CPU-yê ji holê radike, lê dibe ku ji bo bidestxistina heman asta kalîteyê leza bît zêde jî hewce bike."
169
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Hişyariya weşanê"
170
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Testa ceribandinê li ber e ku daneyên vîdyoya bêserûber bêyî deng li kanala we bide weşandin. Ger hûn bikaribin, pêşniyaz kirin ku hûn bi demkî hilanîna vîdyoyên herikan vemirînin û heya ku ceribandin xilas bibe herimê bi taybetî ve bikin. Berdewamkirin?"
171
+Basic.AutoConfig.TestPage="Encamên dawî"
172
+Basic.AutoConfig.TestPage.SubTitle.Testing="Bername nuha komek testan pêk tîne da ku sazkarîyên îdeal binirxîne"
173
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testkirin qediya"
174
+Basic.AutoConfig.TestPage.TestingBandwidth="Çêkirina testa bandê, dibe ku ev çend hûrdeman bikişîn ..."
175
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Tê girêdan bi: %1..."
176
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Girêdana bi pêşkêşkeran re têk çû, ji kerema xwe girêdana xwe ya înternetê kontrol bike û dîsa biceribîne."
177
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Firehiya bandê ji bo: %1"
178
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Kodkerê weşanê tê testkirin, ev dibe ku xulekekê bistîne..."
179
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Ceribandina kodkirina tomarkirinê, dibe ku ev deqîqeyekê bik..."
180
+Basic.AutoConfig.TestPage.TestingRes="Biryarên ceribandinê, dibe ku ev çend deqe..."
181
+Basic.AutoConfig.TestPage.TestingRes.Fail="Destpêkirina kodkirin bi ser neket"
182
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Çareseriya %1x%2 di %3 Tarik de tê testkirin ..."
183
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Kodkerê weşanê"
184
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Kodkerê tomarkirinê"
185
+Basic.AutoConfig.TestPage.Result.Header="Bernamê diyar kir ku ev sazkariyên lêhatî bo te ev in :"
186
+Basic.AutoConfig.TestPage.Result.Footer="Vebijarkên bername bikirtînin da ku van sazkarîyan bikar bînin. Vegere bikirtînin da ku sêrbaz vesaz bikin û dîsa biceribînin. Ji bo ku hûn bixweber sazkarîyan vesaz bikin, betal bike û sazkarîyên veke."
187
+Basic.AutoConfig.Info="Sêrbazê xweser-veavakirinê dê li gorî taybetmendiyên kompîtura we û leza înternetê sazkarîyên çêtirîn diyar bike."
188
+Basic.AutoConfig.RunAnytime="Ev dikare her gav bi çûyîna menuya Amûran were meşandin."
189
+Basic.Stats="Rêjejimar"
190
+Basic.Stats.CPUUsage="Bikaranîna YKN"
191
+Basic.Stats.HDDSpaceAvailable="Cîhê dîskê heyî"
192
+Basic.Stats.MemoryUsage="Bikaranîna bîrê"
193
+Basic.Stats.AverageTimeToRender="Dema navînî ya ji bo çarçoweyê"
194
+Basic.Stats.SkippedFrames="Çarçoveyên ji ber paşvekêşana qefilandinê"
195
+Basic.Stats.MissedFrames="Çarçovên ji ber paşvedana paşvekêşanê winda bûn"
196
+Basic.Stats.Output.Stream="Weşan"
197
+Basic.Stats.Output.Recording="Tomarkirin"
198
+Basic.Stats.Status="Rewş"
199
+Basic.Stats.Status.Recording="Tê tomarkirin"
200
+Basic.Stats.Status.Live="Zindî"
201
+Basic.Stats.Status.Reconnecting="Tê girêdan..."
202
+Basic.Stats.Status.Inactive="Neçalak"
203
+Basic.Stats.Status.Active="Çalak"
204
+Basic.Stats.DroppedFrames="Çarçoveyên hatine avêtin (Tor)"
205
+Basic.Stats.MegabytesSent="Derana giştî ya daneyan"
206
+Basic.Stats.Bitrate="Leza bîtê"
207
+Basic.Stats.DiskFullIn="Disk tijî ye (nêzikî.)"
208
+Basic.Stats.ResetStats="Rêjejimaran ji nû ve saz bike"
209
+ResetUIWarning.Title="Tu dixwazî navrûya bikarhêneriyê ji nû ve saz bikî?"
210
+ResetUIWarning.Text="Ji nû ve sazkirina UI dê keştîgeh din veşêre. Heke tu dixwazî nîşan bide, divê tu van deran ji menuya dîtinê veşêrî.\n\n Ji dil dixwazî UI ji nû ve saz bikî?"
211
+Updater.Title="Rojanekirina nû heye"
212
+Updater.Text="Rojanekirina nû heye:"
213
+Updater.UpdateNow="Niha rojane bike"
214
+Updater.RemindMeLater="Paşê bîne bîra min"
215
+Updater.Skip="Guhertoyê derbas bike"
216
+Updater.Running.Title="Bername niha çalak e"
217
+Updater.Running.Text="Hilberîn niha çalak in, ji kerema xwe ji kerema xwe re hilberînên çalak bigire berî ku hewl bide nûve bike"
218
+Updater.NoUpdatesAvailable.Title="Tu rojanekirin tune ne"
219
+Updater.NoUpdatesAvailable.Text="Niha tu rojanekirin tune ne"
220
+Updater.FailedToLaunch="Vekirina rojaneker bi ser neket"
221
+Updater.GameCaptureActive.Title="Girtina lîstikê çalak e"
222
+Updater.GameCaptureActive.Text="Pirtûkxaneya girtina lîstika niha tê bikaranîn. Ji kerema xwe her lîstik/bername têne girtin bigire (an Windows-ê ji nû ve dest pê bike) û dîsa biceribîne."
223
+QuickTransitions.SwapScenes="Piştî koçkirinê dîmenên pêşdîtin/Deran biguherîne"
224
+QuickTransitions.SwapScenesTT="Dîmenên pêşdîtin û derketinê piştî veguhastinê diguhezîne (heke derketinên dîmenê orîjînal hîn jî hebe).\nEv dê guhartinên ku dibe ku li sehneya xwerû ya derketinê hatibe kirin paşde nade."
225
+QuickTransitions.DuplicateScene="Dîmenê cêwî bike"
226
+QuickTransitions.DuplicateSceneTT="Dema ku heman dîmentê diguherînin, dihêle ku guhartin/dîtinên çavkaniyan bêyî guherandina hilberînê.\nJi bo guherandina taybetmendiyên çavkaniyan bêyî guherandina hilberînê, 'Çavkaniyên Dubare' çalak bikin.\nGuhertina vê nirxê wê dîmena hilberînê ya heyî ji nû ve saz bike (heke hîn jî hebe)."
227
+QuickTransitions.EditProperties="Çavkaniyan bike cêwî"
228
+QuickTransitions.EditPropertiesTT="Dema ku heman dîmen tê sererast kirin, dihêle ku taybetmendiyên çavkaniyan bêyî guhartina hilberînê sererast bike.\nEv tenê heke 'Dîmena Dubare' çalak be dikare were bikaranîn.\nÇavkaniyên Teqez (wekî girtin an jî çavkaniyên medyayê) vê yekê destek nake û nikare bi awayekî cuda were sererast kirin.\nGuhertina vê nirxê wê dîmena hilberînê ya heyî ji nû ve saz bike (eger hîn hebe).\n\nHişyari: Ji ber ku çavkanî dê dubare bibin, ev dibe ku hewceyê pergalan an çavkaniyên vîdyoyê be."
229
+QuickTransitions.HotkeyName="Derbasbûna lezgîn: %1"
230
+Basic.AddTransition="Veguheztina sazkarî lê zêde bike"
231
+Basic.RemoveTransition="Veguhestina sazkar rake"
232
+Basic.TransitionProperties="Taybetmendiyên derbasbûnê"
233
+Basic.SceneTransitions="Derbasbûnên dîmenan"
234
+Basic.TransitionDuration="Dema derbasbûnê"
235
+Basic.TogglePreviewProgramMode="Awayê studyo"
236
+Undo.Undo="Vegerîne"
237
+Undo.Redo="Dûbare bike"
238
+Undo.Add="Tevlî bike '%1'"
239
+Undo.Delete="Jê bibe '%1'"
240
+Undo.Rename="Ji nû ve nav lê bike '%1'"
241
+Undo.SceneCollection.Switch="Biguherîne '%1'"
242
+Undo.Item.Undo="Vegerîne %1"
243
+Undo.Item.Redo="Dûbare bike %1"
244
+Undo.Sources.Multi="%1 Çavkaniyan jê bibe"
245
+Undo.Filters="Guhertinên parzûnê li ser %1"
246
+Undo.Filters.Paste.Single="Parzûnan pevê bike '%1' bo '%2'"
247
+Undo.Filters.Paste.Multiple="Parzûnan jê bigire ji '%1' bo '%2'"
248
+Undo.Transform="Çavkaniyan biguherîne di '%1' de"
249
+Undo.Transform.Paste="Guhertinan di '%1' de pêve bike"
250
+Undo.Transform.Rotate="Zivirandin di '%1' de"
251
+Undo.Transform.Reset="Guhertinan ji nû ve saz bike di '%1' de"
252
+Undo.Transform.HFlip="Pelê berwarî si '%1' de"
253
+Undo.Transform.VFlip="Pelê emûdî di '%1' de"
254
+Undo.Transform.FitToScreen="Li '%1'ê li dîmenderê bicîh bibe"
255
+Undo.Transform.StretchToScreen="Di '%1' de dirêjî dîmenderê bibe"
256
+Undo.Transform.Center="Navenda di '%1' de veşêre"
257
+Undo.Transform.VCenter="Navenda emûdî ya ku di '%1' de vebije"
258
+Undo.Transform.HCenter="Navenda berwarî ya ku di '%1' de tê pêşandan"
259
+Undo.Volume.Change="Guhertina dengê di '%1' de"
260
+Undo.Volume.Mute="Bêdeng bike '%1'"
261
+Undo.Volume.Unmute="Bêdeng neke '%1'"
262
+Undo.Balance.Change="Di '%1' de guhertina hevsengiya dengê"
263
+Undo.SyncOffset.Change="Guhartina teraz kirin ya bihevrekirina deng di '%1' de"
264
+Undo.MonitoringType.Change="Di '%1' de çavdêriya deng biguherîne"
265
+Undo.Mixers.Change="Tevlihevkerên deng di '%1' de biguherîne"
266
+Undo.ForceMono.On="Li ser '%1' monoyê çalak bike"
267
+Undo.ForceMono.Off="Mono ya zorê li ser '%1' neçalak bike"
268
+Undo.Properties="Guhertina taybetiyê li ser '%1'"
269
+Undo.Scene.Duplicate="Dîmena dualî '%1'"
270
+Undo.ShowTransition="Derbasbûnê nîşan bide li ser '%1'"
271
+Undo.HideTransition="Derbasbûnê veşêre li ser '%1'"
272
+Undo.ShowSceneItem="'%1' Nîşan bide di '%2' de"
273
+Undo.HideSceneItem="'%1' Veşêre di '%2' de"
274
+Undo.ReorderSources="Çavkaniyên di '%1' serrast bike"
275
+Undo.MoveUp="Di '%2' de '%1' hilkişîne jor"
276
+Undo.MoveDown="Di '%2' de '%1' hilînin jêr"
277
+Undo.MoveToTop="'%1' berbi jor ve di '%2' de biguhêze"
278
+Undo.MoveToBottom="Di '%2' de '%1' biguhêze jêr"
279
+Undo.PasteSource="Çavkanîyên di '%1' de pêve bike"
280
+Undo.PasteSourceRef="Çavkanîyên di '%1' de pêve bike"
281
+Undo.GroupItems="Hêmanan di '%1' de kom bike"
282
+TransitionNameDlg.Text="Ji kerema xwe navê derbasbûnê binivsîne"
283
+TransitionNameDlg.Title="Navê derbasbûnê"
284
+TitleBar.Profile="Profîl"
285
+TitleBar.Scenes="Dîmen"
286
+NameExists.Title="Nav jixwe heye"
287
+NameExists.Text="Nav jixwe tê bikaranîn."
288
+NoNameEntered.Title="Ji kerema xwe navekî derbasdar binvsîne"
289
+NoNameEntered.Text="Tu nikarî navên vala bi kar bîne."
290
+ConfirmStart.Title="Weşanê dest pê bike?"
291
+ConfirmStart.Text="Ma tu bi rastî dixwazî weşanê dest pê bikî?"
292
+ConfirmStop.Title="Weşanê rawestîne"
293
+ConfirmStop.Text="Ma tu bi rastî dixwazî weşanê rawestînî?"
294
+ConfirmStopRecord.Title="Tomarkirinê rawestîne"
295
+ConfirmStopRecord.Text="Ma tu bi rastî dixwazî tomarkirinê rawestînî?"
296
+ConfirmBWTest.Title="Dest bi testa leza herikê bike?"
297
+ConfirmBWTest.Text="Tu OBS-ê di moda testa leza herikê bi rê ve dibî. Ev mod dihêle ku tu bêyî ku kanala te biçe weşana zindî torê test bikî. Gava te test qedand, ji bo ku temaşevan bikaribin herika te bibînin, tu yê wê neçalak bikî.\n \nTu dixwazî bidomînî?"
298
+ConfirmExit.Title="Ji OBS derkevî?"
299
+ConfirmExit.Text="OBS niha çalak e. Hemû weşan/tomarkirin wê bêne girtin. Ma tu bi rastî dixwazî ku derkevî?"
300
+ConfirmRemove.Title="Jêbirinê bipejirîne"
301
+ConfirmRemove.Text="Tu bi rastî dixwazî '$1' rakî?"
302
+ConfirmRemove.TextMultiple="Tu dixwazî hêmanên %1 jê bibî?"
303
+Output.StartStreamFailed="Destpêkirina weşanê têkçû"
304
+Output.StartRecordingFailed="Destpêkirina tomarkirinê têkçû"
305
+Output.StartReplayFailed="Destpêkirina ji nû ve vêxistina bîrgeha demkî têkçû"
306
+Output.StartFailedGeneric="Destpêkirina deran ê têk çû. Ji kerema xwe ji bo detayan tımarê kontrol bikin.\n\nNîşe: Heke hûn kodkirina NVENC an AMD bikar tînin, bawer bin ku ajokarên vîdyoyê nû ne."
307
+Output.ReplayBuffer.PauseWarning.Title="Dema ku tê sekinandin nedikarî dubareyan tomar bike"
308
+Output.ReplayBuffer.PauseWarning.Text="Hişyarî: Dema tomar were barkirin lêdan nayê tomarkirin."
309
+Output.ConnectFail.Title="Girêdan pêk nehat"
310
+Output.ConnectFail.BadPath="Url a Girêdanan an Jî Rêgeza Girêdanê nerast e. Ji kerema xwe sazkarîyên xwe kontrol bikin da ku piştrast bikin ku derbasdar in."
311
+Output.ConnectFail.ConnectFailed="Girêdana bi rajekar re têkçû"
312
+Output.ConnectFail.InvalidStream="Nikare bigihîje kanala diyarkirî an mifteya weşane, ji kerema xwe re du caran mifteya çem kontrol bike. Heke rast be, dibe ku di girêdana bi pêşkêşker re pirsgirêkek hebe."
313
+Output.ConnectFail.Error="Dema ku bi pêşkêşkar re tê girêdan çewtiyek nelirêtî çêbû. Agahiyên zêdetir di pelê tomarkirinê de."
314
+Output.ConnectFail.Disconnected="Girêdan ji rajekar ve qut bû."
315
+Output.StreamEncodeError.Title="Çewtiya kodkirinê"
316
+Output.StreamEncodeError.Msg="Di dema weşanê de çewtiyeke kodkirinê çêbû."
317
+Output.RecordFail.Title="Destpêkirina tomarkirinê têkçû"
318
+Output.RecordFail.Unsupported="Formata derketinê an nayê destekirin an jî ji parçeke zêdetir piştgirî nade. Ji kerema xwe sazkarîyên xwe kontrol bike û dîsa biceribîne."
319
+Output.RecordNoSpace.Title="Cihê dîskê têrê nake"
320
+Output.RecordNoSpace.Msg="Ji bo domandina tomarkirinê cihê dîskê têr nake."
321
+Output.RecordError.Title="Çewtiya tomarkirinê"
322
+Output.RecordError.Msg="Di dema tomarkirinê de çewtiyeke nediyar çêbû."
323
+Output.RecordError.EncodeErrorMsg="Di dema tomarkirinê de çewtiyeke kodker çêbû."
324
+Output.BadPath.Title="Riya pelê xerab"
325
+Output.BadPath.Text="Riya deranîna pelê ya verastkirî ne rast e. Ji kerema xwe mîhengên xwe kontrol bikin da ku piştrast bikin ku riya pelan a derbasdar hatiye danîn."
326
+Output.NoBroadcast.Title="Weşan çê nebû"
327
+Output.NoBroadcast.Text="Berî ku tu dest bi weşanê bikî, divê ku tu weşanekê saz bikî."
328
+LogReturnDialog="Barkirina tomarê bi awayekî serketî qediya"
329
+LogReturnDialog.Description="Pelê têketina we hate barkirin. Tu niha dikarî URL'yê ji bo vegotin an jî armancên piştgiriyê parve bikî."
330
+LogReturnDialog.Description.Crash="Rapora te ya qezayê hat barkirin. Tu dikarî url'a ji bo venihêrandinê êdî parve bikî."
331
+LogReturnDialog.CopyURL="Girêdanê jê bigire"
332
+LogReturnDialog.AnalyzeURL="Lêkolîn"
333
+LogReturnDialog.ErrorUploadingLog="Di barkirina pelê têketinê de çewtî"
334
+Remux.SourceFile="Tomarkirina OBS"
335
+Remux.TargetFile="Pelê armanc"
336
+Remux.Stop="Remuxing rawestîne"
337
+Remux.ClearFinished="Hêmanên qediyayî pak bike"
338
+Remux.ClearAll="Hemû hêmanan pak bike"
339
+Remux.OBSRecording="Tomarkirina OBS"
340
+Remux.FinishedTitle="Remuxing qediya"
341
+Remux.Finished="Tomarkirina remuxed"
342
+Remux.FinishedError="Tomarkirin remuxed, lê dibe ku pel netemam be"
343
+Remux.SelectRecording="Tomarkirina OBS hilbijêre..."
344
+Remux.SelectTarget="Pelê armanc hilbijêre..."
345
+Remux.FileExistsTitle="Pelên hedef hene"
346
+Remux.FileExists="Ev pelên armanc jixwe hene. Tu dixwazî wan biguherînî?"
347
+Remux.ExitUnfinishedTitle="Remuxing di pêş de ye"
348
+Remux.ExitUnfinished="Remuxing neqediyaye, rawestandin a niha dibe ku pelê hedef ê nayê bikar anîn.\nTu dixwazî remuxing rawestînî?"
349
+Remux.HelpText="Pelan biavêjî vê paceyê ji bo ku remux bike, an jî ji bo pelekê binihêre hucreyeke vala ya \"OBS Recording\" hilbijêre."
350
+MissingFiles="Pelên winda"
351
+MissingFiles.MissingFile="Pelê winda"
352
+MissingFiles.NewFile="Pela nû"
353
+MissingFiles.HelpText="Ji ber ku te herî dawî OBS bi kar anî hin dosya winda ne."
354
+MissingFiles.Clear="<pakkirî>"
355
+MissingFiles.NumFound="$1 ji $2 hate dîtin"
356
+MissingFiles.Search="Pelrêç lêgerînê..."
357
+MissingFiles.SelectFile="Pelê hilbijêre..."
358
+MissingFiles.SelectDir="Peldankekê hilbijêre ji bo lêgerînê li"
359
+MissingFiles.State="Rewş"
360
+MissingFiles.Missing="Tune"
361
+MissingFiles.Replaced="Hatiye guhartin"
362
+MissingFiles.Cleared="Hatiye pakkirin"
363
+MissingFiles.Found="Hate dîtin"
364
+MissingFiles.AutoSearch="Heviyên pelên din hatin dîtin"
365
+MissingFiles.AutoSearchText="OBS ji bo pelên winda di vê peldankê de hevrikên din dîtin. Tu dixwî wan lê zêde bikî?"
366
+MissingFiles.NoMissing.Title="Kontrolkirina pelên windayî"
367
+MissingFiles.NoMissing.Text="Nayê xuyakirin ku tu pel windabûne"
368
+UpdateAvailable="Rojanekirina nû heye"
369
+UpdateAvailable.Text="Guhertoya %1.%2.%3 niha peyda dibe. <a href='%4'> li vir bitikîne bo daxistinê</a>"
370
+Basic.DesktopDevice1="Dengê sermaseyê"
371
+Basic.DesktopDevice2="Dengê sermaseyê 2"
372
+Basic.AuxDevice1="Mîkrofon/aux"
373
+Basic.AuxDevice2="Mîkrofon/aux 2"
374
+Basic.AuxDevice3="Mîkrofon/aux 3"
375
+Basic.AuxDevice4="Mîkrofon/aux 4"
376
+Basic.Scene="Dîmen"
377
+Basic.DisplayCapture="Girtina dîmenderê"
378
+Basic.Main.PreviewConextMenu.Enable="Pêşdîtin çalak bike"
379
+Basic.Main.Preview.Disable="Pêşdîtin neçalak bike"
380
+ScaleFiltering="Fîltrekirina pîvanan"
381
+ScaleFiltering.Point="Xal"
382
+ScaleFiltering.Bilinear="Du heb xêzî"
383
+ScaleFiltering.Bicubic="Bikubik"
384
+ScaleFiltering.Area="Dever"
385
+Deinterlacing.Discard="Berde"
386
+Deinterlacing.Blend="Tevlihevî"
387
+Deinterlacing.Blend2x="Tevlihevî 2x"
388
+Deinterlacing.Linear="Xezikî"
389
+Deinterlacing.Linear2x="Xezikî 2x"
390
+Deinterlacing.TopFieldFirst="Berê zeviya serekeyî"
391
+Deinterlacing.BottomFieldFirst="Qada jêrîn pêşîn"
392
+VolControl.SliderUnmuted="'Xîşonek deng ji bo '%1':"
393
+VolControl.SliderMuted="Xîşonek ya ji bo '%1': (niha bê deng e)"
394
+VolControl.Mute="\"%1\" Bê deng bike"
395
+VolControl.Properties="Taybetmendiyên '%1'"
396
+Basic.Main.AddSceneDlg.Title="Dîmenê tevlî bike"
397
+Basic.Main.AddSceneDlg.Text="Ji kerema xwe navê dîmenê binivîse"
398
+Basic.Main.DefaultSceneName.Text="Dîmen %1"
399
+Basic.Main.AddSceneCollection.Title="Koleksiyona dîmenê zêdekirin"
400
+Basic.Main.AddSceneCollection.Text="Ji kerema xwe navê berhevoka dîmenê binivîsin"
401
+Basic.Main.RenameSceneCollection.Title="Navê berhevoka dîmenê biguheze"
402
+AddProfile.Title="Profîlê tevlî bike"
403
+AddProfile.Text="Ji kerema xwe navê profîlê binivîse"
404
+AddProfile.WizardCheckbox="Sêrbazê vesazkirina xweser nîşan bide"
405
+RenameProfile.Title="Navê profîl ji nû ve binav bike"
406
+Basic.Main.MixerRename.Title="Navê çavkaniya deng binav bike"
407
+Basic.Main.MixerRename.Text="Ji kerema xwe navê çavkaniya dengî têkeve"
408
+Basic.Main.PreviewDisabled="Pêşdîtin niha neçalak e"
409
+Basic.SourceSelect="Çavkanî biafirîne/Hilbijêre"
410
+Basic.SourceSelect.CreateNew="Nû biafirîne"
411
+Basic.SourceSelect.AddExisting="Yê heyî tevlî bike"
412
+Basic.SourceSelect.AddVisible="Çavkaniyê dîtbar bike"
413
+Basic.Main.Sources.Visibility="Xuyanî"
414
+Basic.Main.Sources.VisibilityDescription="Kontrola çavdariyê ya '%1' a di canvasê de"
415
+Basic.Main.Sources.Lock="Kilît"
416
+Basic.Main.Sources.LockDescription="Cih û pîvana '%1' a di canvasê de kilît dike"
417
+Basic.PropertiesWindow="Taybetmendiyên '%1'"
418
+Basic.PropertiesWindow.AutoSelectFormat="%1 (hilbijartina bixweber: %2)"
419
+Basic.PropertiesWindow.SelectColor="Reng hilbijêre"
420
+Basic.PropertiesWindow.SelectFont="Curenivîs hilbijêre"
421
+Basic.PropertiesWindow.ConfirmTitle="Sazkarî hatin guhertin"
422
+Basic.PropertiesWindow.Confirm="Guhertinên ku nehatine torandin hene.Tu dixwazî wan bimênî?"
423
+Basic.PropertiesWindow.NoProperties="Tu taybetmendiyên heyî tune"
424
+Basic.PropertiesWindow.AddFiles="Pelan tevlî bike"
425
+Basic.PropertiesWindow.AddDir="Pelrêç tevlî bike"
426
+Basic.PropertiesWindow.AddURL="Rêgeh/Girêdan tevlî bike"
427
+Basic.PropertiesWindow.AddEditableListDir="Peldankê tevlî '%1' bike"
428
+Basic.PropertiesWindow.AddEditableListFiles="Pelan tevlî '%1' bike"
429
+Basic.PropertiesWindow.AddEditableListEntry="Têketinê tevlî '%1' bike"
430
+Basic.PropertiesWindow.EditEditableListEntry="Têketinê ji '%1' biguherîne"
431
+Basic.PropertiesView.FPS.Simple="Nirxên FPS-yên sade"
432
+Basic.PropertiesView.FPS.Rational="Nirxên FPS-yên rasyonel"
433
+Basic.PropertiesView.FPS.ValidFPSRanges="Rêjeyên FPS-ên derbasdar:"
434
+Basic.PropertiesView.UrlButton.Text="Vê girêdanê di geroka xwe ya tevne ya berdest de veke?"
435
+Basic.PropertiesView.UrlButton.Text.Url="Girêdan %1"
436
+Basic.PropertiesView.UrlButton.OpenUrl="Girêdanê veke"
437
+Basic.InteractionWindow="Bi '%1' re têkilî danî"
438
+Basic.StatusBar.Reconnecting="Girêdan negirêdayî ye, di %2 duyemînen de ji nû ve tê girêdan (hewl a %1)"
439
+Basic.StatusBar.AttemptingReconnect="Hewldana ji nû ve girêdanê... (hewldana %1)"
440
+Basic.StatusBar.ReconnectSuccessful="Ji nû ve girêdan serkeftî bû"
441
+Basic.StatusBar.Delay="Derengxistin (%1 çirke)"
442
+Basic.StatusBar.DelayStartingIn="Derengxistin (di %1 çirke de tê destpêkirin)"
443
+Basic.StatusBar.DelayStoppingIn="Derengxistin (di %1 çirke de tê rawestan)"
444
+Basic.StatusBar.DelayStartingStoppingIn="Derengxistin (di %2 çirke de tê rawestan, di %1 çirke de tê destpêkirin)"
445
+Basic.StatusBar.RecordingSavedTo="Tomarkirin li '%1' hate tomarkirin"
446
+Basic.StatusBar.ReplayBufferSavedTo="Tampona '%1' hate tomarkirin dîsa lê bide"
447
+Basic.StatusBar.ScreenshotSavedTo="Dîmenê di '%1' de hate tomarkirin"
448
+Basic.StatusBar.AutoRemuxedTo="Ji bo '%1' bixweber tê tomarkirin"
449
+Basic.Filters="Parzûn"
450
+Basic.Filters.AsyncFilters="Parzûnên deng/Vîdyo"
451
+Basic.Filters.AudioFilters="Parzûnên deng"
452
+Basic.Filters.EffectFilters="Parzûnên bandorê"
453
+Basic.Filters.Title="Parzûnên ji bo '%1'"
454
+Basic.Filters.AddFilter.Title="Navê parzûnê"
455
+Basic.Filters.AddFilter.Text="Ji kerema xwe navê parzûnê diyar bike"
456
+Basic.TransformWindow="Guhertina hêmanê dîmenê"
457
+Basic.TransformWindow.Position="Şon"
458
+Basic.TransformWindow.PositionX="Şona X"
459
+Basic.TransformWindow.PositionY="Şona Y"
460
+Basic.TransformWindow.Rotation="Zivirandin"
461
+Basic.TransformWindow.Size="Mezinahî"
462
+Basic.TransformWindow.Width="Firehî"
463
+Basic.TransformWindow.Height="Bilindî"
464
+Basic.TransformWindow.Alignment="Bicîkirina şûnê"
465
+Basic.TransformWindow.BoundsType="Cureya Box sînorê"
466
+Basic.TransformWindow.BoundsAlignment="Di Box tixûbê de pêve"
467
+Basic.TransformWindow.Bounds="Mezinahiya Box sînorê"
468
+Basic.TransformWindow.BoundsWidth="Firehiya Box'a sînordar"
469
+Basic.TransformWindow.BoundsHeight="Bilindahiya Box'a sînordar"
470
+Basic.TransformWindow.Crop="Qirpandin"
471
+Basic.TransformWindow.CropLeft="Çepê qirpandin"
472
+Basic.TransformWindow.CropRight="Qirpandina rastê"
473
+Basic.TransformWindow.CropTop="Jorê qirpandin"
474
+Basic.TransformWindow.CropBottom="Jêr qirpandin"
475
+Basic.TransformWindow.Alignment.TopLeft="Çepê jor"
476
+Basic.TransformWindow.Alignment.TopCenter="Navenda jor"
477
+Basic.TransformWindow.Alignment.TopRight="Rastê jor"
478
+Basic.TransformWindow.Alignment.CenterLeft="Navenda çepê"
479
+Basic.TransformWindow.Alignment.Center="Navend"
480
+Basic.TransformWindow.Alignment.CenterRight="Navenda rastê"
481
+Basic.TransformWindow.Alignment.BottomLeft="Çepê jêr"
482
+Basic.TransformWindow.Alignment.BottomCenter="Navenda jêr"
483
+Basic.TransformWindow.Alignment.BottomRight="Rastê jêr"
484
+Basic.TransformWindow.BoundsType.None="Sînor tune"
485
+Basic.TransformWindow.BoundsType.MaxOnly="Tenê mezinahiya herî mezin"
486
+Basic.TransformWindow.BoundsType.ScaleInner="Bi sînorên hundurîn re pîvandin"
487
+Basic.TransformWindow.BoundsType.ScaleOuter="Pîvana ber bi sînorên derve ve"
488
+Basic.TransformWindow.BoundsType.ScaleToWidth="Pîvana ber bi firehiya sînorên"
489
+Basic.TransformWindow.BoundsType.ScaleToHeight="Pîvana ber bi bilindahiya sînorên"
490
+Basic.TransformWindow.BoundsType.Stretch="Bi sînoran ve dirêj bibin"
491
+Basic.TransformWindow.Title="Serrastkirina derbasbûnê bo '%1'"
492
+Basic.TransformWindow.NoSelectedSource="Tu çavkanî nehatine hilbijartin"
493
+Basic.Main.AddSourceHelp.Title="Nikare çavkanî lê zêde bike"
494
+Basic.Main.AddSourceHelp.Text="Ji bo ku tu çavkaniyekê lê zêde bikî, divê herî kêm 1 dîmen ek be."
495
+Basic.Main.Scenes="Dîmen"
496
+Basic.Main.Sources="Çavkanî"
497
+Basic.Main.Source="Çavkanî"
498
+Basic.Main.Controls="Kontrol"
499
+Basic.Main.Connecting="Tê girêdan..."
500
+Basic.Main.StartRecording="Dest bi tomarkirinê bike"
501
+Basic.Main.StartReplayBuffer="Tampona dubarê dest pê bikin"
502
+Basic.Main.SaveReplay="Dubarê hilînin"
503
+Basic.Main.StartStreaming="Weşanê dest pê bikin"
504
+Basic.Main.StartBroadcast="Biçe zindî"
505
+Basic.Main.StartVirtualCam="Kameraya rastekî dest pê bike"
506
+Basic.Main.StopRecording="Tomarkirinê rawestîne"
507
+Basic.Main.PauseRecording="Tomarkirinê bi awayekî demkî rawestîne"
508
+Basic.Main.UnpauseRecording="Tomarkirinê bidomîne"
509
+Basic.Main.StoppingRecording="Tomarkirin tê rawestandin..."
510
+Basic.Main.StopReplayBuffer="Dubarekirina bîrgeha demkî rawestîne"
511
+Basic.Main.StoppingReplayBuffer="Dubarekirina bîrgeha demkî tê rawestandin..."
512
+Basic.Main.SetupBroadcast="Weşanê bi rê ve bibe"
513
+Basic.Main.StopStreaming="Weşanê rawestîne"
514
+Basic.Main.StopBroadcast="Weşanê biqedîne"
515
+Basic.Main.AutoStopEnabled="(Rawestandina bi xweberî)"
516
+Basic.Main.StoppingStreaming="Rawestandina weşanê..."
517
+Basic.Main.ForceStopStreaming="Weşane rawestîne (derengûnê paşguh bike)"
518
+Basic.Main.ShowContextBar="Alavdankê çavkaniyan nîşan bide"
519
+Basic.Main.HideContextBar="Alavdankê çavkaniyan veşêre"
520
+Basic.Main.StopVirtualCam="Kameraya farazî rawestîne"
521
+Basic.Main.Group="Kom %1"
522
+Basic.Main.GroupItems="Hêmanên hilbijartî kom bike"
523
+Basic.Main.Ungroup="Komê belav bike"
524
+Basic.Main.GridMode="Moda izxare"
525
+Basic.Main.ListMode="Moda rêzokê"
526
+Basic.MainMenu.File="&Pel"
527
+Basic.MainMenu.File.Export="&Derxistin"
528
+Basic.MainMenu.File.Import="&Têxistin"
529
+Basic.MainMenu.File.ShowRecordings="&Tomarkirinan nîşan bide"
530
+Basic.MainMenu.File.Remux="&Tomarên remux"
531
+Basic.MainMenu.File.Settings="&Sazkarî"
532
+Basic.MainMenu.File.ShowSettingsFolder="Peldanka sazkariyan nîşan bide"
533
+Basic.MainMenu.File.ShowProfileFolder="Peldanka profîlê nîşan bide"
534
+Basic.MainMenu.File.ShowMissingFiles="Bo pelên wendayî kontrol bike"
535
+Basic.MainMenu.AlwaysOnTop="&Her dem li ser"
536
+Basic.MainMenu.File.Exit="&Derkeve"
537
+Basic.MainMenu.Edit="&Biguherîne"
538
+Basic.MainMenu.Edit.Undo="&Vegerîne"
539
+Basic.MainMenu.Edit.Redo="&Dûbare bike"
540
+Basic.MainMenu.Edit.UndoAction="$1 &Vegerîne"
541
+Basic.MainMenu.Edit.RedoAction="$1 &Dûbare bike"
542
+Basic.MainMenu.Edit.LockPreview="&Pêşdîtinê kilît bike"
543
+Basic.MainMenu.Edit.Scale="Pêşdîtin &Pîvandin"
544
+Basic.MainMenu.Edit.Scale.Window="Ji paceyê re pîvandin"
545
+Basic.MainMenu.Edit.Scale.Output="Derketî (%1x%2)"
546
+Basic.MainMenu.Edit.Transform="&Veguherîne"
547
+Basic.MainMenu.Edit.Transform.EditTransform="&Guheztin biguherîne..."
548
+Basic.MainMenu.Edit.Transform.CopyTransform="Guherandinê ji ber bike"
549
+Basic.MainMenu.Edit.Transform.PasteTransform="Guheztin pêve bike"
550
+Basic.MainMenu.Edit.Transform.ResetTransform="&Guherandinê ji nû ve saz bike"
551
+Basic.MainMenu.Edit.Transform.Rotate90CW="90 dereceyên CW bizivirin"
552
+Basic.MainMenu.Edit.Transform.Rotate90CCW="90 derece CCW bizivirînin"
553
+Basic.MainMenu.Edit.Transform.Rotate180="180 dereceyan bizivire"
554
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Teqle &Bermaweyî"
555
+Basic.MainMenu.Edit.Transform.FlipVertical="Teqle &Emûdî"
556
+Basic.MainMenu.Edit.Transform.FitToScreen="&Li dîmenderê bicîh bike"
557
+Basic.MainMenu.Edit.Transform.StretchToScreen="&Bi dîmenderê dirêj bike"
558
+Basic.MainMenu.Edit.Transform.CenterToScreen="&Navend ji dîmenderê"
559
+Basic.MainMenu.Edit.Transform.VerticalCenter="Navenda emûdî bike"
560
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Navenda berwarî bike"
561
+Basic.MainMenu.Edit.Order="&Ferman"
562
+Basic.MainMenu.Edit.Order.MoveUp="Biguhêze &Jor"
563
+Basic.MainMenu.Edit.Order.MoveDown="Biguhêze &Jêr"
564
+Basic.MainMenu.Edit.Order.MoveToTop="Biguhêze &Ser"
565
+Basic.MainMenu.Edit.Order.MoveToBottom="Biguhêze &Jêrîn"
566
+Basic.MainMenu.Edit.AdvAudio="&Taybetmendiyên pêşketî yên deng"
567
+Basic.MainMenu.View="&Dîtin"
568
+Basic.MainMenu.View.Toolbars="&Alavdank"
569
+Basic.MainMenu.View.Docks="Keştîgehan"
570
+Basic.MainMenu.View.Docks.ResetUI="Navrûya bikarhêneriyê ji nû ve saz bike"
571
+Basic.MainMenu.View.Docks.LockUI="Navrûya bikarhêneriyê kilît bike"
572
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Keştîgehan gerokên xwerû..."
573
+Basic.MainMenu.View.ListboxToolbars="Çavkanî/Bişkokên rêzoka dîmen"
574
+Basic.MainMenu.View.ContextBar="Alavdankê çavkaniyan"
575
+Basic.MainMenu.View.SceneTransitions="&Veguheztinên Dîmenê"
576
+Basic.MainMenu.View.SourceIcons="Çavkanî &Îkon"
577
+Basic.MainMenu.View.StatusBar="&Darika rewşan"
578
+Basic.MainMenu.View.Fullscreen.Interface="Navrûya dîmendera tije"
579
+Basic.MainMenu.SceneCollection="&Berhevoka dîmenan"
580
+Basic.MainMenu.Profile="&Profîl"
581
+Basic.MainMenu.Profile.Import="Profîlê têxê"
582
+Basic.MainMenu.Profile.Export="Profîlê derxe"
583
+Basic.MainMenu.SceneCollection.Import="Berhevoka dîmenan têxê"
584
+Basic.MainMenu.SceneCollection.Export="Berhevoka dîmenan hinarde bike"
585
+Basic.MainMenu.Profile.Exists="Profîl jixwe heye"
586
+Basic.MainMenu.SceneCollection.Exists="Berhevoka dîmenan jixwe heye"
587
+Basic.MainMenu.Tools="&Alav"
588
+Basic.MainMenu.Help="&Alikarî"
589
+Basic.MainMenu.Help.HelpPortal="&Alîkariya dergevan"
590
+Basic.MainMenu.Help.Website="Ziyaret &Malper"
591
+Basic.MainMenu.Help.Discord="Beşdarî &Discord Server"
592
+Basic.MainMenu.Help.Logs="&Pelên têketinê"
593
+Basic.MainMenu.Help.Logs.ShowLogs="&Pelên têketinê nîşan bide"
594
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Pelê têketa &heyî bar bike"
595
+Basic.MainMenu.Help.Logs.UploadLastLog="Pelê têketa &dawîn bar bike"
596
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Têketa heyî temaşe bike"
597
+Basic.MainMenu.Help.CheckForUpdates="Ji bo nûvekirinan kontrol bike"
598
+Basic.MainMenu.Help.CrashLogs="Qeza &Raporan"
599
+Basic.MainMenu.Help.CrashLogs.ShowLogs="&Raporên qezayê nîşan bide"
600
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Rapora qezayê &dawîn bar bike"
601
+Basic.MainMenu.Help.About="&Derbar"
602
+Basic.Settings.ProgramRestart="Ji bo ku ev sazkarî bi bandor be divê bername ji nû ve werê destpêkirin."
603
+Basic.Settings.ConfirmTitle="Guhertinan piştrast bike"
604
+Basic.Settings.Confirm="Te guhertinên torbarnekirî hene. Guhertinan tomar bike?"
605
+Basic.Settings.General="Giştî"
606
+Basic.Settings.General.Theme="Rûkar"
607
+Basic.Settings.General.Language="Ziman"
608
+Basic.Settings.General.EnableAutoUpdates="Ji bo nûvekirinên li ser destpêkirinê bixweber kontrol bikin"
609
+Basic.Settings.General.OpenStatsOnStartup="Di destpêkê de diyaloga serjimêran vekin"
610
+Basic.Settings.General.WarnBeforeStartingStream="Di destpêkirina rûbaran de diyaloga weşane nîşan bide"
611
+Basic.Settings.General.WarnBeforeStoppingStream="Di dema rawestandina lêkeran de diyaloga weşane nîşan bide"
612
+Basic.Settings.General.WarnBeforeStoppingRecord="Di dema rawestandina tomarkirinê de diyaloga piştrastkirinê nîşan bide"
613
+Basic.Settings.General.Projectors="Projektor"
614
+Basic.Settings.General.HideProjectorCursor="Nîşanker li ser projektoran veşêrin"
615
+Basic.Settings.General.ProjectorAlwaysOnTop="Projektoran her tim li jor bikin"
616
+Basic.Settings.General.Snapping="Pêveka rêzkirina çavkaniyê"
617
+Basic.Settings.General.ScreenSnapping="Çavkaniyan ber bi perava ekranê ve bibe"
618
+Basic.Settings.General.CenterSnapping="Çavkaniyan ber bi navenda seranser û sertîveyî ve bibe"
619
+Basic.Settings.General.SourceSnapping="Çavkaniyên ji çavkaniyên din re bispêre"
620
+Basic.Settings.General.SnapDistance="hesasiyeta pêvek"
621
+Basic.Settings.General.RecordWhenStreaming="Dema weşanê bixweber tomar bikin"
622
+Basic.Settings.General.KeepRecordingWhenStreamStops="Dema ku weşan disekine tomarê bidomînin"
623
+Basic.Settings.General.ReplayBufferWhileStreaming="Di dema weşanên de bixweber tampon lê deyne"
624
+Basic.Settings.General.KeepReplayBufferStreamStops="Dema ku weşan raweste tamponê dîsa çalak bike"
625
+Basic.Settings.General.SysTray="Sêniya pergalê"
626
+Basic.Settings.General.SysTrayWhenStarted="Dema dest pê kir sêniya pergalê biçûktir bike"
627
+Basic.Settings.General.SystemTrayHideMinimize="Her dem li şûna darka kar sêniya pergalê kêmbike"
628
+Basic.Settings.General.SaveProjectors="Li ser derketinê projektoran xilas bikin"
629
+Basic.Settings.General.Preview="Pêşdîtin"
630
+Basic.Settings.General.OverflowHidden="Seranseriyê veşêre"
631
+Basic.Settings.General.OverflowAlwaysVisible="Tijî her tim xuya ye"
632
+Basic.Settings.General.OverflowSelectionHidden="Dema çavkanî nexuya be jî lêzêdebûn nîşan bide"
633
+Basic.Settings.General.Importers="Înannavkaran"
634
+Basic.Settings.General.AutomaticCollectionSearch="Di dema îthal de li cihên naskirî yên ji bo koleksiyonên dîmenan bigere"
635
+Basic.Settings.General.SwitchOnDoubleClick="Dema du-tikandinê veguherîne cihê bûyerê"
636
+Basic.Settings.General.StudioPortraitLayout="Portreyê çalak bike/nizama emûdî"
637
+Basic.Settings.General.TogglePreviewProgramLabels="Pêşnîyarên/pêşniyarên bernameyê nîşan bidin"
638
+Basic.Settings.General.Multiview="Pirdîmen"
639
+Basic.Settings.General.Multiview.MouseSwitch="Bitikîne bo guhertînê navbera dîmanan de"
640
+Basic.Settings.General.Multiview.DrawSourceNames="Navê dîmenan nîşan bide"
641
+Basic.Settings.General.Multiview.DrawSafeAreas="Devera aram xêz bike (EBU R 95)"
642
+Basic.Settings.General.MultiviewLayout="Plankirina pirdîmen"
643
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="Asoyî, jor (8 Dîmen)"
644
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Asoyî, jêr (8 Dîmen)"
645
+Basic.Settings.General.MultiviewLayout.Vertical.Left="Stûnî, çep (8 Dîmen)"
646
+Basic.Settings.General.MultiviewLayout.Vertical.Right="Stûnî, rast (8 Dîmen)"
647
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Asoyî, jor (18 Dîmen)"
648
+Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Asoyî, jor (24 Dîmen)"
649
+Basic.Settings.Stream="Weşan"
650
+Basic.Settings.Stream.StreamType="Cureya weşanê"
651
+Basic.Settings.Stream.Custom.UseAuthentication="Nasname kontrol bikar bînin"
652
+Basic.Settings.Stream.Custom.Username="Navê bikarhêneriyê"
653
+Basic.Settings.Stream.Custom.Password="Pêborîn"
654
+Basic.Settings.Stream.BandwidthTestMode="Moda testa firehiya band çalak bike"
655
+Basic.Settings.Stream.TTVAddon="Pêveka pevaxaftin twitch"
656
+Basic.Settings.Stream.TTVAddon.None="Ne yek"
657
+Basic.Settings.Stream.TTVAddon.Both="BetterTTV û FrankerFaceZ"
658
+Basic.Settings.Stream.MissingSettingAlert="Sazkirina weşane wenda"
659
+Basic.Settings.Stream.StreamSettingsWarning="Sazkariyan veke"
660
+Basic.Settings.Stream.MissingUrlAndApiKey="Mifteya URL û Weşan winda ye.\n\nVeke ku URL û mifteya Weşanê têkeve di tabla 'weşan' de."
661
+Basic.Settings.Stream.MissingUrl="URL ya weşan winda ye.\n\nVeke ku URL têkeve di taba 'Weşan' de."
662
+Basic.Settings.Stream.MissingStreamKey="Mifteya weşan winda ye.\n\nVeke ku mifteya weşan têkeve di taba 'Weşan' de."
663
+Basic.Settings.Stream.IgnoreRecommended="Pêşniyarên sazkirina karûbarê weşane paşguh bike"
664
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Sazkarîyên pêşniyarkirî hilînin"
665
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Hişyarî: Dibe ku paşguhxistina sînorên karûbarê bibe sedema qalîteya weşanê ya xerabkirî an rê li ber weşana we bigire.\n\nDerdewam?"
666
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Leza bît vîdyoya zêde: %1 kbps"
667
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Rêjaya bit dengê ya herî zêde: %1 kbps"
668
+Basic.Settings.Stream.Recommended.MaxResolution="Averûtîya herî zêde: %1"
669
+Basic.Settings.Stream.Recommended.MaxFPS="Herî zêde FPS: %1"
670
+Basic.Settings.Output="Deran"
671
+Basic.Settings.Output.Format="Formata tomarkirinê"
672
+Basic.Settings.Output.Encoder="Kodker"
673
+Basic.Settings.Output.SelectDirectory="Peldanka tomarkirinê hilbijêrin"
674
+Basic.Settings.Output.SelectFile="Pelê tomarkirinê hilbijêrin"
675
+Basic.Settings.Output.DynamicBitrate="Bi dînamîkî bitrate biguherînin da ku bargiraniyê birêve bibin"
676
+Basic.Settings.Output.DynamicBitrate.Beta="Rêjaya bît biguherîne da ku bargiraniyê birêve bibe (Beta)"
677
+Basic.Settings.Output.DynamicBitrate.TT="Li şûna ku çarçoveyên kêmkirina tevliheviyê kêm bike, bi awayekî dînamîk bitrate di firînê de diguherîne.\n\nNîşe ku heke ji nişka ve tevliheviyek mezin hebe ev dikare derengbûnê li temaşevanan zêde bike.\nDema ku rêjeya bît dakeve, ji bo sererastkirinê dikare heta çend deqeyan berdewam bike.\n\nNiha tenê ji bo RTMP tê piştgirî kirin."
678
+Basic.Settings.Output.Mode="Moda derketinê"
679
+Basic.Settings.Output.Mode.Simple="Hêsan"
680
+Basic.Settings.Output.Mode.Adv="Pêşketî"
681
+Basic.Settings.Output.Mode.FFmpeg="Derketina FFmpeg"
682
+Basic.Settings.Output.UseReplayBuffer="Tampona dubarê çalak bikin"
683
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Dema lêdana herî zêde"
684
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Bîra herî mezin (Megabayt)"
685
+Basic.Settings.Output.ReplayBuffer.Estimate="Bikaranîna bîra texmînî: %1 MB"
686
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Nikare bikaranîna bîrê texmîn bike. Ji kerema xwe sînorê herî zêde yê bîrê diyar bike."
687
+Basic.Settings.Output.ReplayBuffer.Prefix="Pêşgira navê navnîşê tampon dîsa lê bike"
688
+Basic.Settings.Output.ReplayBuffer.Suffix="Paşgir"
689
+Basic.Settings.Output.Simple.SavePath="Riya tomarkirinê"
690
+Basic.Settings.Output.Simple.RecordingQuality="Kalîteya tomarkirinê"
691
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Eynî wek weşane"
692
+Basic.Settings.Output.Simple.RecordingQuality.Small="Qalîteya bilind, mezinahiya pelê ya navîn"
693
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Qalîteya nediyar, mezinahiya pelê mezin"
694
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Qalîteya bêserûber, mezinahiya pelê ya zêde berz"
695
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Hişyarî: Rêjeya leza bît vîdyoyê ya ku tê lêdan dê ji bo servîsa lêzêdekirinê ya niha sînorê jor ê %1 were danîn."
696
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Hişyarî: Rêjeya bît ya lêdan dê ji bo %1 were mîmarkirin, ku sînorê jor ê servîsa lêvekirinê ya heyî ye."
697
+Basic.Settings.Output.Simple.Warn.CannotPause="Hişyarî: Heke kalîteya tomarkirinê wekî \"Eynî çem\" were mîmarkirin, tomar kirin nayê raxistin."
698
+Basic.Settings.Output.Simple.Warn.Encoder="Hişyarî: Heke hûn di heman demê de rêve bikin û tomar bikin, tomarkirina bi kalîteya nermalavê bi kalîteyeke din ji çem wê hewceyê bikaranîna CPU ya zêde be."
699
+Basic.Settings.Output.Simple.Warn.Lossless="Hişyarî: Kalîteya bêwinda mezinahiya mezin a pelan çêdike! Kalîteya bêserûber dikare 7 gigabayt cîhê dîskê di her xulekê de li ser hûrdemî û çargoşeyên bilind bikar bîne. Heta ku tu cihê dîskê pir mezin tune, ji bo tomarên dirêj nayê pêşniyar kirin."
700
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Tu bawer î ku tu dixwazî kalîteya bêserûber bi kar bîne?"
701
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Hişyariya kalîteya bêserûber!"
702
+Basic.Settings.Output.Simple.Encoder.Software="Nermalav (x264)"
703
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Reqalav (LHV)"
704
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Reqalav (AMD)"
705
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Reqalav (NVENC)"
706
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Nermalav (x264 pêşniyara karanîna CPU kêm, mezinahiya pelê zêde dike)"
707
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD Track (Track 2 bikar tîne)"
708
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Averûtîya nehevgirtî/Leza çarçove"
709
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Ev servîsa weşan piştgirî nade averûtîya hilberîna te ya niha û/an jî leza çarçove. Ew dê veguherin nirxa herî nêzîk a hevgirtî:\n\n%1\n\nTu dixwazî berdewam bikî?"
710
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Averûtî: %1"
711
+Basic.Settings.Output.VideoBitrate="Rêjeya bît vîdyoyê"
712
+Basic.Settings.Output.AudioBitrate="Rêjeya bît deng"
713
+Basic.Settings.Output.Reconnect="Ji nû ve girêdana bixweber"
714
+Basic.Settings.Output.RetryDelay="Derengxistinê ji nû ve biceribîne"
715
+Basic.Settings.Output.MaxRetries="Ji nû ve ceribandina herî zêde"
716
+Basic.Settings.Output.Advanced="Sazkarîyên kodkirina pêşketî çalak bike"
717
+Basic.Settings.Output.EncoderPreset="Pêşkirina sazkirina kodkirin"
718
+Basic.Settings.Output.CustomEncoderSettings="Sazkarîyên kodkirinaa taybet"
719
+Basic.Settings.Output.CustomMuxerSettings="Sazkarîyên xwerû yên Muxerê"
720
+Basic.Settings.Output.NoSpaceFileName="Bêyî valahî navê pelan çêbike"
721
+Basic.Settings.Output.Adv.Rescale="Deranê ji nû ve bipîvan bike"
722
+Basic.Settings.Output.Adv.AudioTrack="Parçe Deng"
723
+Basic.Settings.Output.Adv.Streaming="Weşan"
724
+Basic.Settings.Output.Adv.Audio.Track1="Parçe 1"
725
+Basic.Settings.Output.Adv.Audio.Track2="Parçe 2"
726
+Basic.Settings.Output.Adv.Audio.Track3="Parçe 3"
727
+Basic.Settings.Output.Adv.Audio.Track4="Parçe 4"
728
+Basic.Settings.Output.Adv.Audio.Track5="Parçe 5"
729
+Basic.Settings.Output.Adv.Audio.Track6="Parçe 6"
730
+Basic.Settings.Output.Adv.TwitchVodTrack="Parçeya Twitch VOD"
731
+Basic.Settings.Output.Adv.Recording="Tê tomarkirin"
732
+Basic.Settings.Output.Adv.Recording.RecType="Cureyê tomarkirinê"
733
+Basic.Settings.Output.Adv.Recording.Type="Cure"
734
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Derana Xwerû (FFmpeg)"
735
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Kodkirina weşan bi kar bîne)"
736
+Basic.Settings.Output.Adv.Recording.Filename="Formûla navê pelan"
737
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Heke pel hebe li ser binivîse"
738
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg tîpa derketina"
739
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Deran ji URL re"
740
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Deran ji pelê re"
741
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Formatên tomarkirinê yên hevpar"
742
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Hemû pel"
743
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Riya pelan an jî girêdan"
744
+Basic.Settings.Output.Adv.FFmpeg.Format="Formata konteyneran"
745
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Deng"
746
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Vîdyo"
747
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Formata jixweberî"
748
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Danasîna formata konteyneran"
749
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Deng/Vîdyo Codec ji riya pelan an URL tê texmînkirin"
750
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Kodkerê berdest"
751
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Kodker neçalak bike"
752
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Kodkerê vîdyo"
753
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Sazkariyên kodkerê vîdyo (heke hebe)"
754
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Kodkerê deng"
755
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Sazkariyên kodkerê deng (heke hebe)"
756
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Sazkarîyên Muxer (heke hebe)"
757
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Mifteya çarçoveyê (çarçoveyan)"
758
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Hemî kodekan nîşan bide (her çend potansiyel li hev neke)"
759
+Screenshot="Derana dîmender"
760
+Screenshot.SourceHotkey="Dîmender çavkaniya hilbijartî"
761
+Screenshot.StudioProgram="Dîmender (Bername)"
762
+Screenshot.Preview="Dîmender (Pêşdîtin)"
763
+Screenshot.Scene="Dîmender (Dîmen)"
764
+Screenshot.Source="Dîmender (Çavkanî)"
765
+FilenameFormatting.TT="%CCYY   Sal, Çar hejmarek \n%YY     Sal, du hejmarên dawî (00-99)\n%MM      Meh wekî hejmarek dehî (01-12)\n%DD     Roja mehê, zero-padded (01-31)\n%hh     Demjimêr di formata 24d (00-23)\n%mm        Xulek (00-59)\n%ss      Çirke (00-61)\n%%       A % nîşan\n%a       Navê hefteyê yê kurtkirî\n%A        Navê tevahiya hefteyê\n%b       Navê meha kurtkirî\n%B      Navê tevahî mehê\n%d        Roja mehê, zero-padded (01-31)\n%H      Demjimêr di formata 24d (00-23)\n%I     Demjimêr di formata 12d (01-12)\n%m     Meh wekî hejmarek dehî (01-12)\n%M      Xulek (00-59)\n%p       BN AN PN destnîşankirin\n%S     Çirke(00-61)\n%y        Sal, du hejmarên dawî (00-99)\n%Y       Sal\n%z     ISO 8601 veqitandî ji Dema Gerdûnî ya Koordînasyona herêma demê\n%Z     Navê herêma demê an kurteya wê\n%FPS        Çirkeyên di yek çirke\n%CRES        Bîngeh (kanvas) res\n%ORES      Deranê (pîvan) çareseriyê\n%VF      Formata vîdyo"
766
+Basic.Settings.Video="Vîdyo"
767
+Basic.Settings.Video.Adapter="Adapterê vîdyoyê"
768
+Basic.Settings.Video.BaseResolution="Averûtîya bingehî (Canvas)"
769
+Basic.Settings.Video.ScaledResolution="Averûtîya derkeftin (Pîvan)"
770
+Basic.Settings.Video.DownscaleFilter="Parzûna dakêş"
771
+Basic.Settings.Video.DisableAeroWindows="Aero (Tenê Windows) neçalak bike"
772
+Basic.Settings.Video.FPS="FPS (Tarik)"
773
+Basic.Settings.Video.FPSCommon="Nirxên giştî yên FPS"
774
+Basic.Settings.Video.FPSInteger="Nirxa FPS ya rast"
775
+Basic.Settings.Video.FPSFraction="Nirxa FPS ya fraksiyonel"
776
+Basic.Settings.Video.Numerator="Par"
777
+Basic.Settings.Video.Denominator="Jêpar"
778
+Basic.Settings.Video.Renderer="Pêkhêner"
779
+Basic.Settings.Video.InvalidResolution="Nirxa çareseriyê nederbasdar. divê wa be [width]x[height] (Mînak: 1920x1080)"
780
+Basic.Settings.Video.CurrentlyActive="Hilberîna vîdyoyê niha çalak e. Ji kerema xwe ji bo guhertina sazkarîyên vîdyoyê deran veke."
781
+Basic.Settings.Video.DisableAero="Aero neçalak bike"
782
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Zûtirîn, lê heke pîvandin tarî be)"
783
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bîbubîk (Pîvana tûjkirî, 16 mînak)"
784
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Pîvana tûjkirî, 36 mînak)"
785
+Basic.Settings.Video.DownscaleFilter.Area="Qada (Baca girankirî, nimûneyên 4/6/9)"
786
+Basic.Settings.Audio="Deng"
787
+Basic.Settings.Audio.SampleRate="Rêjeya mînaka"
788
+Basic.Settings.Audio.Channels="Kanalên"
789
+Basic.Settings.Audio.Meters="Metre"
790
+Basic.Settings.Audio.MeterDecayRate="Rêjeya rizîbûnê"
791
+Basic.Settings.Audio.MeterDecayRate.Fast="Lezdar"
792
+Basic.Settings.Audio.MeterDecayRate.Medium="Navîn (Tîpa I PPM)"
793
+Basic.Settings.Audio.MeterDecayRate.Slow="Hêdî (Tîpa II PPM)"
794
+Basic.Settings.Audio.PeakMeterType="Cureya pîvana metre"
795
+Basic.Settings.Audio.PeakMeterType.SamplePeak="Mînak lûtke"
796
+Basic.Settings.Audio.PeakMeterType.TruePeak="True Peak (Bikaranîna CPU ya bilind)"
797
+Basic.Settings.Audio.MultiChannelWarning.Enabled="HIŞYARÎ: Dengê dorpeçkirî tê çalak kirin."
798
+Basic.Settings.Audio.MultichannelWarning="Ger bilivîne, binihêrin ka xizmeta te ya weşan hem dengê dorpêç dike û hem jî lêdanka deng dorpêç dike yan na. Facebook 360 Live yek mînak e ku dengê dorpêçê bi tevahî tê piştgirî kirin. Her çiqas Facebook Live û YouTube Live her du dorpêçê qebûl bikin, Facebook Live downmixs li stereo, û YouTube Live tenê du kanalan dilîze.\n\nOBS parzûnên deng bi dengê dorpêçê re hevgirtî ne, lê piştgiriya pêveka VST ne garantî ye."
799
+Basic.Settings.Audio.MultichannelWarning.Title="Deng derûdora deng çalak bike?"
800
+Basic.Settings.Audio.MultichannelWarning.Confirm="Tu dixwazî dengê derdora dengê çalak bikî?"
801
+Basic.Settings.Audio.Devices="Amûrên dengê yên gerdûnî"
802
+Basic.Settings.Audio.DesktopDevice="Sermaseya deng"
803
+Basic.Settings.Audio.DesktopDevice2="Sermaseya deng 2"
804
+Basic.Settings.Audio.AuxDevice="Mîk/Dengê alîkar"
805
+Basic.Settings.Audio.AuxDevice2="Mîk/Dengê alîkar 2"
806
+Basic.Settings.Audio.AuxDevice3="Mîk/Dengê alîkar 3"
807
+Basic.Settings.Audio.AuxDevice4="Mîk/Dengê alîkar 4"
808
+Basic.Settings.Audio.EnablePushToMute="Bêdengiya bassê çalak bikin"
809
+Basic.Settings.Audio.PushToMuteDelay="Derengiya bêdengiya bass"
810
+Basic.Settings.Audio.EnablePushToTalk="Pûş-bo-axaftin çalak bike"
811
+Basic.Settings.Audio.PushToTalkDelay="Dereng xistin axaftin"
812
+Basic.Settings.Audio.UnknownAudioDevice="[Amûr ne girêdayî ye an na]"
813
+Basic.Settings.Audio.Disabled="Neçalak"
814
+Basic.Settings.Advanced="Pêşketî"
815
+Basic.Settings.Advanced.General.ProcessPriority="Pêşengiya pêvajoyê"
816
+Basic.Settings.Advanced.General.ProcessPriority.High="Bilind"
817
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Ji normal bêhtir"
818
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Ji normal kêmtîr"
819
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Bêçalak"
820
+Basic.Settings.Advanced.FormatWarning="Hişyarî: Rengên ji bilî NV12 di serî de ji bo tomarkirinê têne armanckirin û di dema avîkirinê de nayê pêşniyarkirin. Ji ber sedema guherîna formata rengan, dibe ku weşan zêde bikaranîna CPU bike."
821
+Basic.Settings.Advanced.Audio.BufferingTime="Dema tamponkirina deng"
822
+Basic.Settings.Advanced.Video.ColorFormat="Formata rengan"
823
+Basic.Settings.Advanced.Video.ColorSpace="Cihê rengan"
824
+Basic.Settings.Advanced.Video.ColorRange="Rengê bejn"
825
+Basic.Settings.Advanced.Video.ColorRange.Partial="Parçeyî"
826
+Basic.Settings.Advanced.Video.ColorRange.Full="Tijî"
827
+Basic.Settings.Advanced.Audio.MonitoringDevice="Alava şopandinê"
828
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Berdest"
829
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Venihêrîna deng a Windowsê neçalak bike"
830
+Basic.Settings.Advanced.StreamDelay="Derengîya weşan"
831
+Basic.Settings.Advanced.StreamDelay.Duration="Demajok"
832
+Basic.Settings.Advanced.StreamDelay.Preserve="Dema ku mirov ji nû ve tê girêdan xala qutkirinê (derengbûnê zêde bike) biparêze"
833
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Bikaranîna bîra texmînî: %1 MB"
834
+Basic.Settings.Advanced.Network="Tor"
835
+Basic.Settings.Advanced.Network.BindToIP="Bi IP ve girêdayî ye"
836
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Optimîzasyonên torê çalak bike"
837
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Pêveka TCP çalak bike"
838
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Hewl dide ku rtMP hilberîna hevaltiyê ji bo sepanên din ên hesas ên derengbûnê yên li ser torê bi rêjeya vegûhestinê re bike.\nDibe ku rîska çarçoveyên hatine avêtin li ser pêwendiyên nediyar zêde bike."
839
+Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Raveka bal ya kurterê"
840
+Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Tu carî bişkojka kurterê neçalak bike"
841
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Dema paceya sereke li ber çavan be, bişkojka kurterê neçalak bike"
842
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Dema paceya sereke ne li ber çavan be, bişkojkan kurterê neçalak bike"
843
+Basic.Settings.Advanced.AutoRemux="Bixweber remux li mp4"
844
+Basic.Settings.Advanced.AutoRemux.MP4="(wekî mkv tomar bike)"
845
+Basic.AdvAudio="Taybetiyên dengê yên pêşketî"
846
+Basic.AdvAudio.ActiveOnly="Tenê çavkaniyên çalak"
847
+Basic.AdvAudio.Name="Nav"
848
+Basic.AdvAudio.Volume="Bilindahiya dengê"
849
+Basic.AdvAudio.VolumeSource="Bilindahiya dengê bo '%1'"
850
+Basic.AdvAudio.MonoSource="Mono Downmix ji bo '%1'"
851
+Basic.AdvAudio.Balance="Hevsengî"
852
+Basic.AdvAudio.BalanceSource="Hevsengî bo '%1'"
853
+Basic.AdvAudio.SyncOffset="Çêkirina hevdemkirinê"
854
+Basic.AdvAudio.SyncOffsetSource="Ji bo '%1' hevkêşeya hevdemkirinê"
855
+Basic.AdvAudio.Monitoring="Çavdêriya deng"
856
+Basic.AdvAudio.Monitoring.None="Çavdêrî girtî"
857
+Basic.AdvAudio.Monitoring.MonitorOnly="Çavdêrî tenê (derketina bê deng)"
858
+Basic.AdvAudio.Monitoring.Both="Çavdêrî û deran"
859
+Basic.AdvAudio.MonitoringSource="Çavdêriya deng ji bo '%1'"
860
+Basic.AdvAudio.AudioTracks="Parçeyan"
861
+Basic.Settings.Hotkeys="Bişkojka kurterê"
862
+Basic.Settings.Hotkeys.Pair="Tevliheviyên sereke yên bi '%1' re wekî vegûhestinê tevdigerin"
863
+Basic.Settings.Hotkeys.Filter="Parzûn"
864
+Basic.Hotkeys.SelectScene="Veguherin dîmenê"
865
+Basic.SystemTray.Show="Nîşan bide"
866
+Basic.SystemTray.Hide="Veşêre"
867
+Basic.SystemTray.Message.Reconnecting="Girêdan qût bû. Dîsa tê girêdan..."
868
+Hotkeys.Insert="Têxistin"
869
+Hotkeys.Delete="Jêbirin"
870
+Hotkeys.Home="Serrûpel"
871
+Hotkeys.End="Dawî"
872
+Hotkeys.PageUp="Jor de"
873
+Hotkeys.PageDown="Jêr de"
874
+Hotkeys.NumLock="Kilîtê hejmaran"
875
+Hotkeys.Tab="Rûger"
876
+Hotkeys.Print="Çapkirin"
877
+Hotkeys.Pause="Rawestîne"
878
+Hotkeys.Left="Çep"
879
+Hotkeys.Right="Rast"
880
+Hotkeys.Up="Jor"
881
+Hotkeys.Down="Jêr"
882
+Hotkeys.Menu="Kulîn"
883
+Hotkeys.Space="Valahî"
884
+Hotkeys.NumpadNum="Klavya hejmara %1"
885
+Hotkeys.NumpadMultiply="Numpad pirbike"
886
+Hotkeys.NumpadDivide="Dabeşkirina bişkojka hejmarî"
887
+Hotkeys.NumpadAdd="Bişkojka hejmarî lê zêde bike"
888
+Hotkeys.NumpadSubtract="Jêbirina bişkojka hejmarî"
889
+Hotkeys.NumpadDecimal="Bişkojka hejmarî dehanî"
890
+Hotkeys.AppleKeypadNum="%1 (Klavye)"
891
+Hotkeys.AppleKeypadMultiply="* (Klavye)"
892
+Hotkeys.AppleKeypadDivide="/ (Klavye)"
893
+Hotkeys.AppleKeypadAdd="+ (Klavye)"
894
+Hotkeys.AppleKeypadSubtract="- (Klavye)"
895
+Hotkeys.AppleKeypadDecimal=". (Klavye)"
896
+Hotkeys.AppleKeypadEqual="= (Klavye)"
897
+Hotkeys.MouseButton="Mişk %1"
898
+Mute="Bêdeng bike"
899
+Unmute="Bêdeng neke"
900
+Push-to-mute="Pêlê bike bo bêdeng bikî"
901
+Push-to-talk="Pêlê bike bo biaxivî"
902
+SceneItemShow="'%1' Nîşan bide"
903
+SceneItemHide="'%1' Veşêre"
904
+OutputWarnings.NoTracksSelected="Divê herî kêm yek rê hilbijêrî"
905
+OutputWarnings.MP4Recording="Hişyarî: Eger pel bi dawî nebe tomarkirinên ku di MP4/MOV de hatine tomarkirin wê ji nû ve nehêle (weke encama BSOD'yan, windahiyên hêzê û hwd.). Heke tu dixwazî gelek stranan tomar bikî bifikire ku MKV bi kar bîne û piştî qedandina tomarê li MP4/MOV re muxbike (Pel → Remux Tomarkirin)"
906
+OutputWarnings.CannotPause="Hişyarî: Dema ku kodkirina tomarê \"(Bikaranîna Kodkirina Weşanê)\" were danîn, tomar nikarin bên rawesandin"
907
+FinalScene.Title="Jêbirina dîmenê"
908
+FinalScene.Text="Divê herî kêm yek dîmen hebê"
909
+NoSources.Title="Çavkanî tune"
910
+NoSources.Text="Xuya dike ku te hin tu çavkaniyên vîdyoyê tevlî nekiriye, ji ber vê yekê tu yê tenê dîmenderekê vala derbixî. Tu dixwazî vê bikî?"
911
+NoSources.Text.AddSource="Tu dikarî çavkaniyan tevlî bikî û di her demê de di çarçoveya serekede de li bin kodika çavkaniyan de bi riya tikandinê li ser îkona +."
912
+NoSources.Label="Tu çavkanî tune.\n Bişkojka + jêrîn bitikîne ,\nan jî ji bo tevlîkirina yekê li vir bitikine."
913
+ChangeBG="Rengê saz bike"
914
+CustomColor="Rengê kesanekirî"
915
+BrowserSource.EnableHardwareAcceleration="Bilidkirina alevê ya gerokê çalak bike"
916
+About="Derbar"
917
+About.Info="OBS Studio nermalava tomarkirin û weşandina zindî ya belaş û çavkaniya azad e."
918
+About.Donate="Beşdariyekê bike"
919
+About.GetInvolved="Tevlî bibe"
920
+About.Authors="Nivîskar"
921
+About.License="Lîsans"
922
+About.Contribute="Piştgriya projeya OBS bike"
923
+AddUrl.Title="Çavkanî bi riya girêdanê tevlî bike"
924
+AddUrl.Text="Te girêdanek kêşand OBS. Ev ê bixweber girêdanê wekî çavkanî tevlî bike. Bidomîne?"
925
+AddUrl.Text.Url="Girêdan %1"
926
+ResizeOutputSizeOfSource="Mezinahiya hilberînê ji nû ve bike (mezinahiya çavkaniyê)"
927
+ResizeOutputSizeOfSource.Text="Pîvana bingehîn û ya hilberînê wê ji nû ve bê mezinkirin û mezinahiya çavkaniya heyî."
928
+ResizeOutputSizeOfSource.Continue="Tu dixwazî bidomînî?"
929
+PreviewTransition="Derbasbûna pêşdîtinê"
930
+Importer="Koleksiyoneke dîmenê têde bihewîne"
931
+Importer.SelectCollection="Berhevokeke dîmenan hilbijêre"
932
+Importer.Collection="Berhevoka dîmenan"
933
+Importer.HelpText="Pelan li vê paceyê zêde bike da ku berhevokên ji OBS an bernameyên din ên ku tên piştgirî kirin têxe."
934
+Importer.Path="Riya berhevokê"
935
+Importer.Program="Sepana tesbîtkirî"
936
+Importer.AutomaticCollectionPrompt="Bixweber li berhevokên dîmenan bigere"
937
+Importer.AutomaticCollectionText="OBS dikare bi xwe berhevokên dîmenan ên ji bernameyên sêyemîn ên alîgir bibîne. Tu dixwezî OBS bixweber berhevokên ji bo we bibîne?\n\nTu dikarî vê paşê di Sazkarîyên Giştî yên > > Îthal biguherînî."
938
+Restart="Ji nû ve destpêkirin"
939
+NeedsRestart="OBS Studio divê ji nû ve bê destpêkirin. tu dixwazî ji nû ve dest pê bikî niha?"
940
+ContextBar.NoSelectedSource="Tu çavkanî nehatine hilbijartin"
941
+ContextBar.ResetTransform="Guherandinê ji nû ve saz bike"
942
+ContextBar.FitToCanvas="Li ser tuwal biguncin"
943
+ContextBar.MediaControls.PlayMedia="Medya lê de"
944
+ContextBar.MediaControls.PauseMedia="Medya rawestîne"
945
+ContextBar.MediaControls.StopMedia="Medya bi dawî bike"
946
+ContextBar.MediaControls.RestartMedia="Medya ji nû ve dest pê bike"
947
+ContextBar.MediaControls.PlaylistNext="Dû re di rêzoka lêdanan de"
948
+ContextBar.MediaControls.PlaylistPrevious="Ya berê di rêzoka lêdanan de"
949
+ContextBar.MediaControls.MediaProperties="Taybetmendiyên medyayê"
950
+ContextBar.MediaControls.BlindSeek="Widget li ser medyayê bigerin"
951
+YouTube.Auth.Ok="Mafdayîn bi awayekî serkeftî qediya.\nTu niha dikarî vê rûpelê bigire."
952
+YouTube.Auth.NoCode="Pêvajoya mafdayînê ne qediya ye."
953
+YouTube.Auth.NoChannels="Tu kanalên heyî tune ne li ser ajimêra hilbijartî"
954
+YouTube.Auth.WaitingAuth.Title="Rastandina bikarhêner a YouTube"
955
+YouTube.Auth.WaitingAuth.Text="Ji kerema xwe rastandinê di geroka xwe ya derveyî de bidomîne.<br>Heke geroka derve veneke, vê girêdanê bişopîne û rastandinê bidomîne:<br>%1"
956
+YouTube.AuthError.Text="Nikare zanyariyên kanalê bi dest bixê: %1."
957
+YouTube.Actions.WindowTitle="Sazkirina Weşana YouTube - Kanal: %1"
958
+YouTube.Actions.CreateNewEvent="Weşaneke nû biafrîne"
959
+YouTube.Actions.ChooseEvent="Weşaneke heyî hilbijêre"
960
+YouTube.Actions.Title="Sernav"
961
+YouTube.Actions.MyBroadcast="Weşana min"
962
+YouTube.Actions.Description="Danasîn"
963
+YouTube.Actions.Privacy="Nihênî"
964
+YouTube.Actions.Privacy.Private="Taybet"
965
+YouTube.Actions.Privacy.Public="Gelemperî"
966
+YouTube.Actions.Privacy.Unlisted="Nerêzokkirî"
967
+YouTube.Actions.Category="Beş:"
968
+YouTube.Actions.Thumbnail="Wêneya biçûk"
969
+YouTube.Actions.Thumbnail.SelectFile="Pelê hilbijêre..."
970
+YouTube.Actions.Thumbnail.NoFileSelected="Tu pel nehatiye hilbijartin"
971
+YouTube.Actions.Thumbnail.ClearFile="Pak bike"
972
+YouTube.Actions.MadeForKids="Ma ev vîdyo ji bo zarokan hatiye çêkirin? *"
973
+YouTube.Actions.MadeForKids.Yes="Erê, ji bo zarokan hatiye çêkirin"
974
+YouTube.Actions.MadeForKids.No="Na, ji bo zarokan nehatiye çêkirin"
975
+YouTube.Actions.AdditionalSettings="Bêhtir sazkarî"
976
+YouTube.Actions.Latency="Derengxistin"
977
+YouTube.Actions.Latency.Low="Kêm"
978
+YouTube.Actions.Latency.UltraLow="Pir kêm"
979
+YouTube.Actions.EnableAutoStart="Destpêkirina bi xweberî çalak bike"
980
+YouTube.Actions.EnableAutoStop="Rawestandina bi xweberî çalak bike"
981
+YouTube.Actions.AutoStartStop.TT="Diyar dike ku divê ev weşana demsazkirîkirî bixweber dest pê bike"
982
+YouTube.Actions.EnableDVR="DVR çalak bike"
983
+YouTube.Actions.360Video="360 vîdyo"
984
+YouTube.Actions.ScheduleForLater="Demsaz bike bo paşê"
985
+YouTube.Actions.RememberSettings="Van sazkariyan bi bîr bîne"
986
+YouTube.Actions.Create_Ready="Weşanê biafirîne"
987
+YouTube.Actions.Create_GoLive="Weşanê biafirîne û dest bi weşana zindî bike"
988
+YouTube.Actions.Choose_Ready="Weşanê hilbijêre"
989
+YouTube.Actions.Choose_GoLive="Weşanê hilbijêre û dest bi weşana zindî bike"
990
+YouTube.Actions.Create_Schedule="Weşanê demsaz bike"
991
+YouTube.Actions.Create_Schedule_Ready="Weşanê demsaz bike û dest bi weşana zindî bike"
992
+YouTube.Actions.Dashboard="YouTube Studio veke"
993
+YouTube.Actions.Error.Title="Çewtiya afirandina weşana zindî"
994
+YouTube.Actions.Error.Text="Çewtiya gihîştina YouTube '%1'.<br/>Danasîna çewtiyê ya berfireh dikarin bêne dîtin li <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
995
+YouTube.Actions.Error.General="Çewtiya gihîştina YouTube. Ji kerema xwe girêdana torê an gihiştîna rajekera YouTube-ê venêre."
996
+YouTube.Actions.Error.NoBroadcastCreated="Çewtiya afirandina weşana zindî '%1'.<br/>Danasîna çewtiyê ya berfireh dikarin bêne dîtin li <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
997
+YouTube.Actions.Error.NoStreamCreated="Tu weşan nehatine afirandin. Ji kerema xwe ajimêra xwe dîsa girê bide"
998
+YouTube.Actions.Error.YouTubeApi="Çewtiya API ya YouTube-ê. Jkx bo bêhtir zanyarî pêlê têketinan binêre."
999
+YouTube.Actions.Error.BroadcastNotFound="Weşana bijartî nehate dîtin."
1000
+YouTube.Actions.Error.FileMissing="Pelê hilbijartî tune ye."
1001
+YouTube.Actions.Error.FileOpeningFailed="Vekirina pelê hilbijartî têkçû"
1002
+YouTube.Actions.Error.FileTooLarge="Pelê hilbijartî pir mezin e (Sînor: 2MB)."
1003
+YouTube.Actions.EventsLoading="Rêzoka bûyeran tê barkirin..."
1004
+YouTube.Actions.EventCreated.Title="Bûyerek hate afirandin"
1005
+YouTube.Actions.EventCreated.Text="Bûyerek bi awayekî serkeftî hate afirandin"
1006
+YouTube.Actions.Stream="Weşan"
1007
+YouTube.Actions.Stream.ScheduledFor="Demsazkirî bo %1"
1008
+YouTube.Actions.Stream.Resume="Weşana hatiye qutkirin ji nû ve bidomîne"
1009
+YouTube.Actions.Stream.YTStudio="Ji hêla Studyoya YouTube ve bixweber tê afirandin."
1010
+YouTube.Actions.Notify.CreatingBroadcast="Weşana zindî ya nû tê afirandin, ji kerema xwe re li bendê bimîne..."
1011
+YouTube.Actions.AutoStartStreamingWarning.Title="Destpêkirina bi destan pêdivî dike"
1012
+YouTube.Actions.AutoStartStreamingWarning="Destpêkirina bi xweberî neçalak e bo vê bûyerê, li ser \"Biçe zindî\" bitikîne da ku tu weşana xwe bidî destpêkirin"
1013
+YouTube.Actions.AutoStopStreamingWarning="Tu nikarî ji nû ve girê bidî. <br> Wê weşana te rawestê û weşana te ya zindî qut bibe."
1014
+YouTube.Errors.liveStreamingNotEnabled="Weşana zindî li ser kanala YouTube a bijarte nayê çalakkirin.<br/><br/>Binêre<a href='https://www.youtube.com/features'>youtube.com/features</a> bo bêhtir zanyarî."
1015
+YouTube.Errors.livePermissionBlocked="Weşana zindî li ser Kanala YouTube ya bijartî tune. <br/> Bizane vê yekê dibe ku 24 demjimêran bidome da ku weşana zindî piştî ku tu di sazkariyên kanala xwe de çalak bikî peyda bibe.<br/><br/> Binêre <<a href='https://www.youtube.com/features'> youtube.com/features </a> ji bo hûrguliyan."
1016
obs-studio-27.0.1.tar.xz/UI/data/locale/ko-KR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ko-KR.ini Changed
365
 
1
@@ -1,4 +1,4 @@
2
-Language="영어"
3
+Language="한국어"
4
 OK="확인"
5
 Apply="적용"
6
 Cancel="취소"
7
@@ -22,6 +22,8 @@
8
 Exit="나가기"
9
 Mixer="오디오 믹서"
10
 Browse="찾아보기"
11
+Mono="모노"
12
+Stereo="스테레오"
13
 DroppedFrames="손실된 프레임 %1 (%2%)"
14
 StudioProgramProjector="전체화면 프로젝터 (프로그램)"
15
 PreviewProjector="전체화면 프로젝터 (미리보기)"
16
@@ -48,7 +50,7 @@
17
 HighResourceUsage="인코딩 과부하! 비디오 설정을 낮추거나 더 빠른 인코딩 사전설정을 사용하는 것을 고려하세요."
18
 Transition="전환"
19
 QuickTransitions="빠른 전환"
20
-FadeToBlack="서서히 사라지기"
21
+FadeToBlack="검정색으로 사라지기"
22
 Left="왼쪽"
23
 Right="오른쪽"
24
 Top="위"
25
@@ -58,14 +60,14 @@
26
 Minutes="분"
27
 Seconds="초"
28
 Deprecated="사용하지 않음"
29
-ReplayBuffer="리플레이 버퍼링"
30
+ReplayBuffer="리플레이 버퍼"
31
 Import="가져오기"
32
 Export="내보내기"
33
 Copy="복사"
34
 Paste="붙여넣기"
35
 PasteReference="붙여넣기 (참조)"
36
 PasteDuplicate="붙여넣기 (중복)"
37
-RemuxRecordings="녹화본 재다중화"
38
+RemuxRecordings="녹화본 Remux"
39
 Next="다음"
40
 Back="이전"
41
 Defaults="기본값"
42
@@ -99,7 +101,7 @@
43
 ChromeOS.Text="OBS가 ChromeOS 컨테이너 안에서 작동 중입니다. 이 플랫폼은 지원되지 않습니다."
44
 DockCloseWarning.Title="도킹 가능한 창을 닫는 중입니다"
45
 DockCloseWarning.Text="도킹 가능한 창을 닫았습니다. 이 창을 다시 보려면 상단 메뉴에서 보기 -> 독을 확인하세요."
46
-ExtraBrowsers="사용자 임의 브라우저 독"
47
+ExtraBrowsers="사용자 브라우저 독"
48
 ExtraBrowsers.Info="이름과 URL을 부여하여 독을 추가할 수 있으며, 작업 후 적용 혹은 닫기 단추를 누르면 됩니다. 언제든지 독을 추가하거나 제거할 수 있습니다."
49
 ExtraBrowsers.DockName="독 이름"
50
 Auth.Authing.Title="인증 처리 중..."
51
@@ -110,6 +112,7 @@
52
 Auth.InvalidScope.Text="%1 의 인증 요구사항이 변경되었습니다. 일부 기능이 제한될 수 있습니다."
53
 Auth.LoadingChannel.Title="채널 정보를 읽는 중..."
54
 Auth.LoadingChannel.Text="%1 채널 정보를 읽고 있습니다, 잠시만 기다려 주세요..."
55
+Auth.LoadingChannel.Error="채널 정보를 불러올 수 없음"
56
 Auth.ChannelFailure.Title="채널을 불러오지 못했습니다"
57
 Auth.ChannelFailure.Text="%1\n\n%2: %3 의 채널 정보를 불러오는 데 실패했습니다"
58
 Auth.Chat="채팅"
59
@@ -142,7 +145,7 @@
60
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="현재 설정 사용 (%1)"
61
 Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 혹은 30, 하지만 가능하면 60을 선호"
62
 Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 혹은 30, 하지만 높은 해상도를 선호"
63
-Basic.AutoConfig.VideoPage.CanvasExplanation="참고: 캔버스 (기본) 해상도는 방송 혹은 녹화하려는 해상도와 반드시 같을 필요는 없습니다. 실제 방송/녹화 해상도는 Pc 사양을 낮추거나 비트레이트 제한에 맞추기 위해 이 캔버스 해상도를 기준으로 축소할 수 있습니다."
64
+Basic.AutoConfig.VideoPage.CanvasExplanation="참고: 캔버스 (기본) 해상도는 방송 혹은 녹화하려는 해상도와 반드시 같을 필요는 없습니다. 실제 방송/녹화 해상도는 시스템 리소스 혹은 비트레이트 요구 기준에 맞춰서 캔버스 해상도가 축소될 수도 있습니다."
65
 Basic.AutoConfig.StreamPage="방송 정보"
66
 Basic.AutoConfig.StreamPage.SubTitle="방송 정보를 입력하세요"
67
 Basic.AutoConfig.StreamPage.ConnectAccount="계정 연결 (권장)"
68
@@ -152,6 +155,7 @@
69
 Basic.AutoConfig.StreamPage.GetStreamKey="스트림 키 받기"
70
 Basic.AutoConfig.StreamPage.MoreInfo="자세한 정보"
71
 Basic.AutoConfig.StreamPage.UseStreamKey="스트림 키 사용"
72
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="방송 키 사용(고급)"
73
 Basic.AutoConfig.StreamPage.Service="서비스"
74
 Basic.AutoConfig.StreamPage.Service.ShowAll="모두 보기..."
75
 Basic.AutoConfig.StreamPage.Service.Custom="사용자 지정..."
76
@@ -159,6 +163,7 @@
77
 Basic.AutoConfig.StreamPage.StreamKey="스트림 키"
78
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(링크)"
79
 Basic.AutoConfig.StreamPage.EncoderKey="인코더 키"
80
+Basic.AutoConfig.StreamPage.ConnectedAccount="연결된 계정"
81
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="대역폭 검사로 비트레이트 계산 (몇 분 정도 걸릴 수 있음)"
82
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="하드웨어 인코딩 선호"
83
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="하드웨어 인코딩은 CPU 사용량을 대폭 줄일 수 있지만, 소프트웨어 인코덩과 동등한 품질을 달성하려면 더 많은 비트레이트가 필요합니다."
84
@@ -197,7 +202,7 @@
85
 Basic.Stats.Status.Reconnecting="다시 연결 중"
86
 Basic.Stats.Status.Inactive="작동 중지"
87
 Basic.Stats.Status.Active="활성화"
88
-Basic.Stats.DroppedFrames="드롭된 프레임 (네트워크)"
89
+Basic.Stats.DroppedFrames="손실된 프레임 (네트워크)"
90
 Basic.Stats.MegabytesSent="데이터 출력 합계"
91
 Basic.Stats.Bitrate="비트레이트"
92
 Basic.Stats.DiskFullIn="디스크가 꽉차기 전까지 (추정)"
93
@@ -227,7 +232,7 @@
94
 Basic.RemoveTransition="설정 가능한 화면 전환 제거"
95
 Basic.TransitionProperties="화면 전환 속성"
96
 Basic.SceneTransitions="장면 전환"
97
-Basic.TransitionDuration="지속 기간"
98
+Basic.TransitionDuration="지속 시간"
99
 Basic.TogglePreviewProgramMode="편집 방식"
100
 Undo.Undo="되돌리기"
101
 Undo.Redo="다시실행"
102
@@ -248,7 +253,7 @@
103
 Undo.Transform.HFlip="%1 수평 회전"
104
 Undo.Transform.VFlip="%1 수직 회전"
105
 Undo.Transform.FitToScreen="%1 화면 맞춤"
106
-Undo.Transform.StretchToScreen="%1 화면 맞춤(강제)"
107
+Undo.Transform.StretchToScreen="%1 화면 맞춤"
108
 Undo.Transform.Center="%1 화면 중앙 맞춤"
109
 Undo.Transform.VCenter="%1 화면 수직 중앙 맞춤"
110
 Undo.Transform.HCenter="%1 화면 수평 중앙 맞춤"
111
@@ -274,24 +279,24 @@
112
 Undo.MoveToBottom="'%2' 에서 '%1' 맨 아래로 내리기"
113
 Undo.PasteSource="'%1'에 소스 붙여넣기"
114
 Undo.PasteSourceRef="'%1'에 소스 참조 붙여넣기"
115
-Undo.GroupItems="'%1' 으로 항목 묶기"
116
+Undo.GroupItems="'%1' (으)로 항목 묶기"
117
 TransitionNameDlg.Text="이 화면 전환의 이름을 입력하세요"
118
 TransitionNameDlg.Title="화면 전환 이름"
119
 TitleBar.Profile="프로파일"
120
 TitleBar.Scenes="장면"
121
 NameExists.Title="해당 이름이 이미 존재합니다"
122
-NameExists.Text="그 이름은 이미 사용 중입니다."
123
+NameExists.Text="이미 사용 중인 이름입니다."
124
 NoNameEntered.Title="유효한 이름을 입력하십시오"
125
 NoNameEntered.Text="이름을 반드시 지정해야 합니다."
126
-ConfirmStart.Title="방송 시작?"
127
-ConfirmStart.Text="정말로 방송을 시작할까요?"
128
-ConfirmStop.Title="방송 중지?"
129
-ConfirmStop.Text="정말로 방송을 중단할까요?"
130
+ConfirmStart.Title="방송 송출을 시작할까요?"
131
+ConfirmStart.Text="정말로 방송을 시작하시겠습니까?"
132
+ConfirmStop.Title="방송 송출을 중지할까요?"
133
+ConfirmStop.Text="정말로 방송을 중단하시겠습니까?"
134
 ConfirmStopRecord.Title="녹화를 중단할까요?"
135
 ConfirmStopRecord.Text="정말로 녹화를 중단하시겠습니까?"
136
 ConfirmBWTest.Title="대역폭을 점검하겠습니까?"
137
 ConfirmBWTest.Text="OBS가 대역폭 시험 상태입니다. 방송을 송출하지 않고 네트워크를 점검할 수 있습니다. 시험을 종료해야 시청자가 방송을 볼 수 있습니다.\n\n계속하겠습니까?"
138
-ConfirmExit.Title="OBS를 종료합니까?"
139
+ConfirmExit.Title="OBS를 종료할까요?"
140
 ConfirmExit.Text="OBS가 현재 작동 중입니다. 모든 방송/녹화가 중단됩니다. 정말로 종료하시겠습니까?"
141
 ConfirmRemove.Title="제거 확인"
142
 ConfirmRemove.Text="'$1'을 정말로 제거하시겠습니까?"
143
@@ -302,7 +307,7 @@
144
 Output.StartFailedGeneric="출력을 시작하지 못했습니다. 기록 파일을 확인하십시오.\n\n참고: NVENC 혹은 AMD 인코더를 사용하고 있다면 드라이버를 최신 버전으로 유지하십시오."
145
 Output.ReplayBuffer.PauseWarning.Title="일시정지 상태에서는 리플레이를 저장할 수 없습니다"
146
 Output.ReplayBuffer.PauseWarning.Text="경고: 녹화가 일시정지되어 있는 상태에서는 리플레이를 저장할 수 없습니다."
147
-Output.ConnectFail.Title="연결에 실패했음"
148
+Output.ConnectFail.Title="연결 실패"
149
 Output.ConnectFail.BadPath="잘못된 경로 혹은 연결 주소입니다. 유효한 값인지 설정을 확인하시기 바랍니다."
150
 Output.ConnectFail.ConnectFailed="서버에 연결하지 못했습니다"
151
 Output.ConnectFail.InvalidStream="지정한 채널 혹은 스트림 키에 접근할 수 없습니다. 스트림 키를 다시 확인하세요. 키가 올바르다면 서버 접속에 문제가 있을 수 있습니다."
152
@@ -319,6 +324,8 @@
153
 Output.RecordError.EncodeErrorMsg="녹화 중 인코더 오류가 발생했습니다."
154
 Output.BadPath.Title="잘못된 파일 경로"
155
 Output.BadPath.Text="설정된 출력 파일 경로가 올바르지 않습니다. 경로가 제대로 설정이 되었는지 확인하십시오."
156
+Output.NoBroadcast.Title="설정된 방송 없음"
157
+Output.NoBroadcast.Text="생방송을 진행하기 전에 방송설정이 필요합니다"
158
 LogReturnDialog="기록 업로드 성공"
159
 LogReturnDialog.Description="기록 파일을 올렸습니다. 해당 URL을 디버깅 혹은 문제 해결을 위해 공유할 수 있습니다."
160
 LogReturnDialog.Description.Crash="튕김 현상에 관한 기록이 업로드되었습니다. 이제 URL을 디버깅의 목적으로 공유할 수 있습니다."
161
@@ -327,21 +334,20 @@
162
 LogReturnDialog.ErrorUploadingLog="업로드하는 기록 파일 오류"
163
 Remux.SourceFile="OBS 녹화"
164
 Remux.TargetFile="대상 파일"
165
-Remux.Remux="재다중화"
166
-Remux.Stop="재다중화 중단"
167
+Remux.Stop="Remux 중단"
168
 Remux.ClearFinished="종료한 항목 삭제"
169
 Remux.ClearAll="모든 항목 삭제"
170
 Remux.OBSRecording="OBS 녹화"
171
-Remux.FinishedTitle="재다중화 작업 완료"
172
-Remux.Finished="녹화가 재다중화 처리되었음"
173
-Remux.FinishedError="녹화가 재다중화 처리되었으나 파일이 완성되지 않을 수 있습니다"
174
+Remux.FinishedTitle="Remux 작업 완료"
175
+Remux.Finished="녹화가 Remux 처리되었음"
176
+Remux.FinishedError="녹화가 Remux 처리되었으나 파일이 완성되지 않을 수 있습니다"
177
 Remux.SelectRecording="OBS 녹화를 선택합니다..."
178
 Remux.SelectTarget="대상 파일을 지정합니다..."
179
 Remux.FileExistsTitle="대상 파일이 존재합니다"
180
 Remux.FileExists="다음 대상 파일들이 이미 존재합니다. 대체하시겠습니까?"
181
-Remux.ExitUnfinishedTitle="재다중화 작업 중"
182
-Remux.ExitUnfinished="재다중화 작업이 끝나지 않았습니다. 지금 멈추면 대상 파일은 사용할 수 없는 상태가 됩니다.\n정말로 작업을 중단하겠습니까?"
183
-Remux.HelpText="재다중화 작업을 하려면 파일을 이 창에 드롭하거나 비어있는 \"OBS 녹화\" 셀을 눌러 대상을 지정하세요."
184
+Remux.ExitUnfinishedTitle="Remux 작업 중"
185
+Remux.ExitUnfinished="Remux 작업이 끝나지 않았습니다. 지금 멈추면 대상 파일은 사용할 수 없는 상태가 됩니다.\n정말로 Remux 작업을 중단하겠습니까?"
186
+Remux.HelpText="Remux 작업을 하려면 파일을 이 창에 드롭하거나 비어있는 \"OBS 녹화\" 셀을 눌러 대상을 지정하세요."
187
 MissingFiles="누락된 파일"
188
 MissingFiles.MissingFile="누락된 파일"
189
 MissingFiles.NewFile="새 파일"
190
@@ -358,6 +364,8 @@
191
 MissingFiles.Found="발견됨"
192
 MissingFiles.AutoSearch="일치하는 파일 추가 확인됨"
193
 MissingFiles.AutoSearchText="OBS 가 해당 디렉토리에서 누락된 파일과 일치하는 건을 발견했습니다. 추가하시겠습니까?"
194
+MissingFiles.NoMissing.Title="무결성 검사"
195
+MissingFiles.NoMissing.Text="문제가 있는 파일이 없습니다"
196
 UpdateAvailable="새 업데이트 사용 가능"
197
 UpdateAvailable.Text="버전 %1.%2.%3이 나왔습니다. <a href='%4'>다운로드</a>"
198
 Basic.DesktopDevice1="데스크탑 오디오"
199
@@ -429,6 +437,8 @@
200
 Basic.PropertiesView.FPS.Simple="단순 FPS 값"
201
 Basic.PropertiesView.FPS.Rational="분수 FPS 값"
202
 Basic.PropertiesView.FPS.ValidFPSRanges="유효 FPS 범위:"
203
+Basic.PropertiesView.UrlButton.Text="기본 브라우저에서 링크를 여시겠습니까?"
204
+Basic.PropertiesView.UrlButton.OpenUrl="URL 열기"
205
 Basic.InteractionWindow="'%1' 과 상호 작용"
206
 Basic.StatusBar.Reconnecting="연결이 끊겼습니다, %2 초에 다시 연결합니다 (시도 %1)"
207
 Basic.StatusBar.AttemptingReconnect="재접속 중... (시도 %1)"
208
@@ -483,6 +493,8 @@
209
 Basic.TransformWindow.BoundsType.ScaleToWidth="경계 너비에 비례"
210
 Basic.TransformWindow.BoundsType.ScaleToHeight="경계 높이에 비례"
211
 Basic.TransformWindow.BoundsType.Stretch="경계에 맞춤"
212
+Basic.TransformWindow.Title="'%1' 형태 수정"
213
+Basic.TransformWindow.NoSelectedSource="선택된 소스 없음"
214
 Basic.Main.AddSourceHelp.Title="소스를 추가할 수 없음"
215
 Basic.Main.AddSourceHelp.Text="소스를 추가하기 위해서는 최소 하나의 장면이 있어야 합니다."
216
 Basic.Main.Scenes="장면 목록:"
217
@@ -494,6 +506,7 @@
218
 Basic.Main.StartReplayBuffer="리플레이 버퍼 시작"
219
 Basic.Main.SaveReplay="리플레이 저장"
220
 Basic.Main.StartStreaming="방송 시작"
221
+Basic.Main.StartBroadcast="방송 시작"
222
 Basic.Main.StartVirtualCam="가상 카메라 시작"
223
 Basic.Main.StopRecording="녹화 중단"
224
 Basic.Main.PauseRecording="녹화 일시정지"
225
@@ -501,7 +514,10 @@
226
 Basic.Main.StoppingRecording="녹화를 중단합니다...."
227
 Basic.Main.StopReplayBuffer="리플레이 버퍼 중단"
228
 Basic.Main.StoppingReplayBuffer="리플레이 버퍼를 멈추고 있습니다..,"
229
+Basic.Main.SetupBroadcast="방송설정 관리"
230
 Basic.Main.StopStreaming="방송 중단"
231
+Basic.Main.StopBroadcast="방송 종료"
232
+Basic.Main.AutoStopEnabled="(자동 정지)"
233
 Basic.Main.StoppingStreaming="방송을 중지합니다..."
234
 Basic.Main.ForceStopStreaming="방송 중지 (지연된 분량도 마무리없이 즉시 송출 중단)"
235
 Basic.Main.ShowContextBar="소스 도구 모음 사용"
236
@@ -516,10 +532,11 @@
237
 Basic.MainMenu.File.Export="내보내기(&E)"
238
 Basic.MainMenu.File.Import="가져오기(&I)"
239
 Basic.MainMenu.File.ShowRecordings="녹화 저장 폴더 열기(&R)"
240
-Basic.MainMenu.File.Remux="재다중화 녹화(&M)"
241
+Basic.MainMenu.File.Remux="Remux 녹화(&M)"
242
 Basic.MainMenu.File.Settings="설정(&S)"
243
 Basic.MainMenu.File.ShowSettingsFolder="설정 폴더 보기"
244
 Basic.MainMenu.File.ShowProfileFolder="프로파일 폴더 열기"
245
+Basic.MainMenu.File.ShowMissingFiles="무결성 검사"
246
 Basic.MainMenu.AlwaysOnTop="항상 위로(&A)"
247
 Basic.MainMenu.File.Exit="끝내기(&X)"
248
 Basic.MainMenu.Edit="편집(&E)"
249
@@ -558,7 +575,7 @@
250
 Basic.MainMenu.View.Docks="독"
251
 Basic.MainMenu.View.Docks.ResetUI="사용자 인터페이스 초기화"
252
 Basic.MainMenu.View.Docks.LockUI="사용자 인터페이스 잠금"
253
-Basic.MainMenu.View.Docks.CustomBrowserDocks="사용자 임의 브라우저 독..."
254
+Basic.MainMenu.View.Docks.CustomBrowserDocks="사용자 브라우저 독..."
255
 Basic.MainMenu.View.ListboxToolbars="장면/소스 목록 버튼"
256
 Basic.MainMenu.View.ContextBar="소스 도구 모음"
257
 Basic.MainMenu.View.SceneTransitions="장면 전환(&C)"
258
@@ -633,6 +650,7 @@
259
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="수평, 하단 (8장면)"
260
 Basic.Settings.General.MultiviewLayout.Vertical.Left="수직, 좌측 (8장면)"
261
 Basic.Settings.General.MultiviewLayout.Vertical.Right="수직, 우측 (8장면)"
262
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="수평, 상단 (18 장면)"
263
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="수평, 상단 (24 장면)"
264
 Basic.Settings.Stream="방송"
265
 Basic.Settings.Stream.StreamType="방송 형식"
266
@@ -702,8 +720,8 @@
267
 Basic.Settings.Output.MaxRetries="최대 재시도 횟수"
268
 Basic.Settings.Output.Advanced="고급 인코더 설정 활성화"
269
 Basic.Settings.Output.EncoderPreset="인코더 사전설정"
270
-Basic.Settings.Output.CustomEncoderSettings="사용자 임의 인코더 설정"
271
-Basic.Settings.Output.CustomMuxerSettings="사용자 임의 다중화 설정"
272
+Basic.Settings.Output.CustomEncoderSettings="사용자 인코더 설정"
273
+Basic.Settings.Output.CustomMuxerSettings="사용자 Muxer 설정"
274
 Basic.Settings.Output.NoSpaceFileName="여백없이 파일 이름 짓기"
275
 Basic.Settings.Output.Adv.Rescale="출력 배율 재조정"
276
 Basic.Settings.Output.Adv.AudioTrack="오디오 트랙"
277
@@ -829,7 +847,7 @@
278
 Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="단축키를 절대로 비활성화하지 말 것"
279
 Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="주요 창을 초점으로 둘 때 단축키를 비활성화"
280
 Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="주요 창을 보고있지 않으면 단축키를 비활성화"
281
-Basic.Settings.Advanced.AutoRemux="mp4 형식으로 재다중화"
282
+Basic.Settings.Advanced.AutoRemux="mp4 형식으로 자동 remux"
283
 Basic.Settings.Advanced.AutoRemux.MP4="(녹화는 mkv 형식)"
284
 Basic.AdvAudio="오디오 고급 설정"
285
 Basic.AdvAudio.ActiveOnly="활성화된 소스만"
286
@@ -883,7 +901,7 @@
287
 SceneItemShow="'%1' 표시"
288
 SceneItemHide="'%1' 숨기기"
289
 OutputWarnings.NoTracksSelected="최소 하나의 트랙을 선택해야 합니다"
290
-OutputWarnings.MP4Recording="경고: MP4로 녹화를 하면 파일이 마무리가 되지 않았을 때 (예를 들어, 컴퓨터가 급작스럽게 꺼지거나 블루 스크린 오류가 일어나는 경우) 복구할 수 없습니다. 여러 개의 오디오 트랙을 녹음하고 싶다면 MKV 확장자로 녹화 한 뒤 재다중화 작업을 통해 MP4/MOV로 변환하십시오. (파일 → 재다중화 녹화)"
291
+OutputWarnings.MP4Recording="경고: MP4로 녹화를 하면 파일이 마무리가 되지 않았을 때 (예를 들어, 컴퓨터가 급작스럽게 꺼지거나 블루 스크린 오류가 일어나는 경우) 복구할 수 없습니다. 여러 개의 오디오 트랙을 녹음하고 싶다면 MKV 확장자로 녹화 한 뒤 remux 작업을 통해 MP4/MOV로 변환하십시오. (파일 → remux 녹화)"
292
 OutputWarnings.CannotPause="경고: 녹화 인코더가 \"(스트림 인코더 사용)\"으로 설정되어 있으면 녹화를 일시정지할 수 없습니다."
293
 FinalScene.Title="장면 삭제"
294
 FinalScene.Text="적어도 하나의 장면은 존재해야 합니다."
295
@@ -929,3 +947,69 @@
296
 ContextBar.MediaControls.PlaylistPrevious="재생목록 내 이전 항목"
297
 ContextBar.MediaControls.MediaProperties="미디어 속성"
298
 ContextBar.MediaControls.BlindSeek="미디어 탐색 도구"
299
+YouTube.Auth.Ok="성공적으로 인증을 완료했습니다.\n이 창을 닫아도 좋습니다."
300
+YouTube.Auth.NoCode="인증이 완료되지 않았습니다"
301
+YouTube.Auth.NoChannels="선택한 계정에서 채널을 찾을 수 없음"
302
+YouTube.Auth.WaitingAuth.Title="유튜브 계정 인증"
303
+YouTube.Auth.WaitingAuth.Text="외부 브라우저를 이용하여 계정 인증을 완료하십시오.<br>만약 외부 브라우저가 열리지 않으면 이 링크를 통해 인증을 완료하십시오:<br>%1"
304
+YouTube.AuthError.Text="채널 정보를 불러올 수 없음: %1."
305
+YouTube.Actions.WindowTitle="유튜브 방송 설정 - 채널: %1"
306
+YouTube.Actions.CreateNewEvent="새 방송 생성"
307
+YouTube.Actions.ChooseEvent="기존 방송 선택"
308
+YouTube.Actions.Title="제목*"
309
+YouTube.Actions.MyBroadcast="내 방송"
310
+YouTube.Actions.Description="설명"
311
+YouTube.Actions.Privacy="보안*"
312
+YouTube.Actions.Privacy.Private="비공개"
313
+YouTube.Actions.Privacy.Public="공개"
314
+YouTube.Actions.Privacy.Unlisted="미등록"
315
+YouTube.Actions.Category="카테고리"
316
+YouTube.Actions.Thumbnail="미리보기"
317
+YouTube.Actions.Thumbnail.SelectFile="파일 선택"
318
+YouTube.Actions.Thumbnail.NoFileSelected="선택된 파일 없음"
319
+YouTube.Actions.Thumbnail.ClearFile="선택 해제"
320
+YouTube.Actions.MadeForKids="이 영상은 아이들을 위한 것입니까?"
321
+YouTube.Actions.MadeForKids.Yes="예, 이것은 아이들을 위한 것입니다"
322
+YouTube.Actions.MadeForKids.No="아니오, 이것은 아이들용이 아닙니다"
323
+YouTube.Actions.AdditionalSettings="추가 설정:"
324
+YouTube.Actions.Latency="지연 시간"
325
+YouTube.Actions.Latency.Normal="보통"
326
+YouTube.Actions.Latency.Low="낮음"
327
+YouTube.Actions.Latency.UltraLow="매우 낮음"
328
+YouTube.Actions.EnableAutoStart="자동 시작 사용"
329
+YouTube.Actions.EnableAutoStop="자동 멈추기 사용"
330
+YouTube.Actions.AutoStartStop.TT="예약된 방송이 자동으로 시작될지 선택"
331
+YouTube.Actions.EnableDVR="DVR 사용"
332
+YouTube.Actions.360Video="360도 영상"
333
+YouTube.Actions.ScheduleForLater="나중을 위해 임시 저장하기"
334
+YouTube.Actions.RememberSettings="이 설정 기억하기"
335
+YouTube.Actions.Create_Ready="방송 생성"
336
+YouTube.Actions.Create_GoLive="방송 생성 후 생방송 켜기"
337
+YouTube.Actions.Choose_Ready="방송 선택"
338
+YouTube.Actions.Choose_GoLive="방송 선택 후 생방송 켜기"
339
+YouTube.Actions.Create_Schedule="방송 예약"
340
+YouTube.Actions.Create_Schedule_Ready="방송 선택 후 예약"
341
+YouTube.Actions.Dashboard="유튜브 스튜디오 열기"
342
+YouTube.Actions.Error.Title="생방송 생성 오류"
343
+YouTube.Actions.Error.Text="유튜브 접근 오류 '%1'.<br/>자세한 사항은 다음에서 확인하십시오: <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
344
+YouTube.Actions.Error.General="유튜브 접근 오류. 연결 상태나 유튜브 서버 상태를 확인하십시오."
345
+YouTube.Actions.Error.NoBroadcastCreated="방송 생성 오류 '%1'.<br/>자세한 사항은 다음에서 확인하십시오: <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
346
+YouTube.Actions.Error.NoStreamCreated="방송이 생성되지 않았습니다. 계정을 다시 연결하십시오."
347
+YouTube.Actions.Error.YouTubeApi="유튜브 API 오류. 추가 정보를 확인하려면 로그 파일을 확인하십시오"
348
+YouTube.Actions.Error.BroadcastNotFound="선택한 방송을 찾을 수 없습니다."
349
+YouTube.Actions.Error.FileMissing="선택한 파일이 존재하지 않습니다"
350
+YouTube.Actions.Error.FileOpeningFailed="선택한 파일을 여는 데 실패했습니다"
351
+YouTube.Actions.Error.FileTooLarge="선택한 파일의 용량이 너무 큽니다 (최대 2Mib)"
352
+YouTube.Actions.EventsLoading="이벤트 목록을 불러오는 중..."
353
+YouTube.Actions.EventCreated.Title="이벤트 생성 완료"
354
+YouTube.Actions.EventCreated.Text="이벤트 성공적으로 생성됨."
355
+YouTube.Actions.Stream="방송"
356
+YouTube.Actions.Stream.ScheduledFor="예정: %1"
357
+YouTube.Actions.Stream.Resume="중단된 송출 재개"
358
+YouTube.Actions.Stream.YTStudio="YouTube 스튜디오에 의해 자동적으로 생성됨"
359
+YouTube.Actions.Notify.CreatingBroadcast="새 방송을 생성중입니다. 기다려 주십시오..."
360
+YouTube.Actions.AutoStartStreamingWarning.Title="수동 시작 필요"
361
+YouTube.Actions.AutoStartStreamingWarning="이 이벤트는 자동시작이 비활성화되어 있습니다. \"방송 시작\"을 눌러 방송을 시작하십시오"
362
+YouTube.Actions.AutoStopStreamingWarning="다시 접속할 수 없습니다.<br>방송은 정지되고 라이브 상태가 중단됩니다."
363
+YouTube.Errors.liveStreamingNotEnabled="선택한 YouTube 채널에서 실시간 방송이 활성화되지 않았습니다.<br/><br/><a href='https://www.youtube.com/features'>youtube.com/features</a>에서 자세한 정보를 확인하세요."
364
+YouTube.Errors.livePermissionBlocked="선택한 YouTube 채널에서 실시간 방송을 사용할 수 없습니다.<br/>채널 설정에서 실시간 방송을 활성화해도 실제로 방송이 가능하기까지 최대 24시간이 걸릴 수 있습니다.<br/><br/><a href='https://www.youtube.com/features'>youtube.com/features</a>에서 자세한 정보를 확인하세요."
365
obs-studio-27.0.1.tar.xz/UI/data/locale/lo-LA.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/lo-LA.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Language="ພາສາລາວ"
3
 OK="ໂອເຄ"
4
 Cancel="ຍົກເລີກ"
5
 Close="ປິດ"
6
obs-studio-27.0.1.tar.xz/UI/data/locale/lt-LT.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/lt-LT.ini Changed
70
 
1
@@ -1,4 +1,4 @@
2
-Language="Anglų"
3
+Language="Lietuvių"
4
 OK="ОК"
5
 Apply="Pritaikyti"
6
 Cancel="Atšaukti"
7
@@ -65,20 +65,27 @@
8
 Paste="Įklijuoti"
9
 PasteReference="Įklijuoti (Nuoroda)"
10
 PasteDuplicate="Įklijuoti (Duplikatas)"
11
+RemuxRecordings="Remux įrašymas"
12
 Next="Kitas"
13
 Back="Atgal"
14
 Defaults="Numatytieji"
15
 HideMixer="Paslėpti maišyklėje"
16
+TransitionOverride="Perėjimo perrašymas"
17
+ShowTransition="Rodymo perėjimas"
18
+HideTransition="Paslėpimo perrėjimas"
19
 None="Nieko"
20
 StudioMode.Preview="Peržiūra"
21
 StudioMode.Program="Programa"
22
 ShowInMultiview="Rodyti daugialypėje peržiūroje"
23
+VerticalLayout="Vertikalus išdėstymas"
24
 Group="Grupė"
25
 DoNotShowAgain="Daugiau nerodyti"
26
 Default="(Numatytas)"
27
 Calculating="Skaičiuojama..."
28
 Fullscreen="Visas ekranas"
29
+Windowed="Lango rėžimas"
30
 Percent="Procentai"
31
+RefreshBrowser="Atnaujinti"
32
 AspectRatio="Kraštinių santykis <b>%1:%2</b>"
33
 LockVolume="Užrakinti garsą"
34
 LogViewer="Peržiūrėti žurnalą"
35
@@ -90,14 +97,26 @@
36
 AlreadyRunning.LaunchAnyway="Vistiek paleisti"
37
 ChromeOS.Title="Nepalaikoma platforma"
38
 ChromeOS.Text="OBS panašu, kad veikia ChromeOS sistemoje. Ši platforma yra nepalaikoma"
39
+DockCloseWarning.Title="Uždaromas prijungiamas langas"
40
+DockCloseWarning.Text="Jūs ką tik uždarėte prijungiamą langą. Jei norėtumete vėl jį rodyti, naudokite Rodymas → Prijungimo meniu meniu juostoje."
41
+ExtraBrowsers="Pritaikyti naršyklės prijungimai"
42
 Auth.Authing.Title="Autentifikuojama..."
43
 Auth.AuthFailure.Title="Autentifikacijos klaida"
44
 Auth.InvalidScope.Title="Reikalingas autentifikavimas"
45
+Auth.LoadingChannel.Title="Kraunama kanalo informacija"
46
+Auth.LoadingChannel.Text="Kraunama %1 kanalo informacija, prašome palaukti..."
47
+Auth.LoadingChannel.Error="Nepavyko gauti kanalo informacijos"
48
+Auth.ChannelFailure.Title="Nepavyko užkrauti kanalo"
49
+Auth.ChannelFailure.Text="Nepavyko užkrauti kanalo informacijos %1\n\n%2: %3"
50
 Auth.Chat="chat'as"
51
 Auth.StreamInfo="Transliacijos informacija"
52
 TwitchAuth.Stats="Twitch statistika"
53
 TwitchAuth.Feed="Twitch aktyvumo sąrašas"
54
+RestreamAuth.Channels="Restream kanalai"
55
 Copy.Filters="Kopijuoti filtrus"
56
+Paste.Filters="Įklijuoti filtrus"
57
+BrowserPanelInit.Title="Inicijuojama naršyklė..."
58
+BrowserPanelInit.Text="Inicijuojama naršyklė, prašome palaukti..."
59
 BandwidthTest.Region="Regionas"
60
 BandwidthTest.Region.US="Jungtinės Valstijos"
61
 BandwidthTest.Region.EU="Europa"
62
@@ -285,6 +304,7 @@
63
 Basic.MainMenu.Edit.Order.MoveDown="Perkelti žemyn (&D)"
64
 Basic.MainMenu.Edit.Order.MoveToTop="Perkel&ti į viršų"
65
 Basic.MainMenu.Edit.Order.MoveToBottom="Perkelti į apačią (&B)"
66
+Basic.MainMenu.View="&Rodymas"
67
 Basic.Settings.Advanced.General.ProcessPriority.High="Aukštas"
68
 Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Virš vidutionio"
69
 Basic.Settings.Advanced.General.ProcessPriority.Normal="Vidutinis"
70
obs-studio-27.1.3.tar.xz/UI/data/locale/lv-LV.ini Added
820
 
1
@@ -0,0 +1,818 @@
2
+Language="Latviešu"
3
+OK="Jā, darām"
4
+Apply="Piemērot/apstiprināt"
5
+Cancel="Atcelt"
6
+Close="Aizvērt"
7
+Save="Saglabāt"
8
+Discard="Atcelt/Neapstiprināt"
9
+Disable="Atspējot"
10
+Yes="Jā"
11
+No="Nē"
12
+Add="Pievienot"
13
+Remove="Atvienot/noņemt"
14
+Rename="Pārdēvēt"
15
+Interact="Mijiedarboties"
16
+Filters="FIltri"
17
+Properties="Īpašības/Rekvizīti"
18
+MoveUp="Pārvietot augšup"
19
+MoveDown="Pārvietot lejup"
20
+Settings="Iestatījumi"
21
+Display="Parādīt/atainot"
22
+Name="Nosaukums"
23
+Exit="Iziet"
24
+Mixer="Audio mikseris"
25
+Browse="Pārlūkot"
26
+DroppedFrames="Izkritušie/zudušie kadri %1 (%2%)"
27
+StudioProgramProjector="Pilnekrāna projektors (programmas/dzīvajā)"
28
+PreviewProjector="Pilnekrāna projektors (priekšskats)"
29
+SceneProjector="Pilnekrāna projektors (aina)"
30
+SourceProjector="Pilnekrāna projektors (avots)"
31
+StudioProgramWindow="Logots projektors (programmas/dzīvajā)"
32
+PreviewWindow="Logots projektors (priekšskats)"
33
+SceneWindow="Logots projektors (aina)"
34
+SourceWindow="Logots projektors (avots)"
35
+MultiviewProjector="Multiskats (pilnekrāna)"
36
+MultiviewWindowed="Multiskats (logots/logā)"
37
+ResizeProjectorWindowToContent="Pielāgot logu saturam"
38
+Clear="Attīrīt"
39
+Revert="Atgriezt atpakaļ"
40
+Show="Rādīt"
41
+Hide="Nerādīt"
42
+UnhideAll="Rādīt visus"
43
+Untitled="Beznosaukuma"
44
+New="Jauns"
45
+Duplicate="Dublikāts"
46
+Enable="Iespējot"
47
+DisableOSXVSync="Atspējot macOSa V-Sync"
48
+ResetOSXVSyncOnExit="Atstatīt macOSa V-Sync izejot"
49
+HighResourceUsage="Enkoderis pārslogots! Apsveriet iespēju izmantot 'vieglākus' video iestatījumus vai izmantot ātrāku kodēšanas iestatījumu."
50
+Transition="Pāreja"
51
+QuickTransitions="Ātrās pārejas"
52
+FadeToBlack="Izgaist melnā"
53
+Left="kreisais"
54
+Right="labais"
55
+Top="augšējais"
56
+Bottom="apakšējais"
57
+Reset="Atstatīt/atcelt"
58
+Hours="stundas"
59
+Minutes="minūtes"
60
+Seconds="sekundes"
61
+Deprecated="Neieteiktie"
62
+ReplayBuffer="Replay bufferis"
63
+Import="Importēt"
64
+Export="Eksportēt"
65
+Copy="Kopēt"
66
+Paste="Ievietot"
67
+PasteReference="Ievietot (atsauci)"
68
+PasteDuplicate="Ievietot (dublikātu)"
69
+RemuxRecordings="Remux-ēt ierakstus"
70
+Next="Uz priekšu"
71
+Back="Atpakaļ"
72
+Defaults="Noklusējumi"
73
+HideMixer="Nerādīt mikserī"
74
+TransitionOverride="Pārejas ignorēšana (override)"
75
+ShowTransition="Parādīt pāreju"
76
+HideTransition="Nerādīt pāreju"
77
+None="Nekas"
78
+StudioMode.Preview="Priekšskats"
79
+StudioMode.Program="Programma"
80
+ShowInMultiview="Rādīt multiskatā"
81
+VerticalLayout="Vertikāls izkārtojums"
82
+Group="Grupa"
83
+DoNotShowAgain="Vairs nerādīt"
84
+Default="(noklusējuma)"
85
+Calculating="Tiek aprēķināts..."
86
+Fullscreen="Pilnekrānā"
87
+Windowed="Logā"
88
+Percent="procenti"
89
+RefreshBrowser="Atsvaidzināt"
90
+AspectRatio="Proporcija <b>%1:%2</b>"
91
+LockVolume="Bloķēt volume?"
92
+LogViewer="Žurnālu skatītājs"
93
+ShowOnStartup="Rādīt palaižot"
94
+OpenFile="Atvērt failu"
95
+AddValue="Pielikt %1"
96
+AlreadyRunning.Title="OBS jau darbojas (ir palaists)"
97
+AlreadyRunning.Text="OBS jau darbojas! Ja nevēlaties vairākas paralēli darbojošās OBS kopijas, lūdzu, aiztaisiet/izslēdziet pašreiz darbojošās. Ja jums iestatīts, ka OBS tiek minimizēts sistēmas teknē, lūdzu, pārbaudiet, vai tas tur joprojām darbojas."
98
+AlreadyRunning.LaunchAnyway="Palaist vēl vienu"
99
+ChromeOS.Title="Neatbalstīta operētājsistēma"
100
+ChromeOS.Text="Šķiet, ka OBS darbojas ChromeOS konteinerā. Šī platforma netiek atbalstīta"
101
+DockCloseWarning.Title="Dokojamā loga aizvēršana"
102
+DockCloseWarning.Text="Jūs tikko aizvērāt dokojamu logu. Ja vēlaties to darīt redzamu, izmantojiet izvēlnes joslas izvēlni Skats → Doki."
103
+ExtraBrowsers="Pielāgoti pārlūka doki"
104
+ExtraBrowsers.Info="Pievienojiet dokus, piešķirot tiem nosaukumu un URL. Pēc tam noklikšķiniet uz Pielietot vai Aizvērt, lai atvērtu dokus. Dokus var pievienot vai noņemt jebkurā laikā."
105
+ExtraBrowsers.DockName="Doka nosaukums"
106
+Auth.Authing.Title="Autentificē..."
107
+Auth.Authing.Text="Autentificē ar %1, lūdzu gaidiet..."
108
+Auth.AuthFailure.Title="Autentifikācijas ķibele"
109
+Auth.AuthFailure.Text="Neizdevās autentificēt ar %1:\n\n%2: %3"
110
+Auth.InvalidScope.Title="Nepieciešama autentifikācija"
111
+Auth.InvalidScope.Text="%1 autentifikācijas prasības ir mainījušās. Dažas funkcijas var nebūt pieejamas."
112
+Auth.LoadingChannel.Title="Ielādējas kanāla informācija..."
113
+Auth.LoadingChannel.Text="Notiek kanāla informācijas ielāde %1, lūdzu, uzgaidiet..."
114
+Auth.ChannelFailure.Title="Neizdevās ielādēt kanālu"
115
+Auth.ChannelFailure.Text="Neizdevās ielādēt kanāla informāciju priekš %1\n\n%2: %3"
116
+Auth.Chat="Tērziņš/klača"
117
+Auth.StreamInfo="Straumes informācija"
118
+TwitchAuth.Stats="Twitch statistika"
119
+TwitchAuth.Feed="Twitch darbību plūsma"
120
+TwitchAuth.TwoFactorFail.Title="Nevarēja iegūt straumes atslēgu"
121
+TwitchAuth.TwoFactorFail.Text="OBS nespēja izveidot savienojumu ar jūsu Twitch kontu. Lūdzu, pārliecinieties, ka jūsu <a href='https://www.twitch.tv/settings/security'> Twitch drošības iestatījumi (security settings) </a> ir iestatīta 2 faktoru autentifikācija (2FA), jo tas ir obligāts priekšnosacījums straumēšanai."
122
+RestreamAuth.Channels="PārStraumēt kanālus"
123
+Copy.Filters="Kopēt filtrus"
124
+Paste.Filters="Ievietot filtrus"
125
+BrowserPanelInit.Title="Tiek inicializēts pārlūks..."
126
+BrowserPanelInit.Text="Tiek inicializēts pārlūks, lūdzu uzgaidiet..."
127
+BandwidthTest.Region="Reģions"
128
+BandwidthTest.Region.US="Amerikas apvienotās valstis"
129
+BandwidthTest.Region.EU="Eiropa"
130
+BandwidthTest.Region.Asia="Āzija"
131
+BandwidthTest.Region.Other="Cits"
132
+Basic.AutoConfig="Auto-konfigurācijas pavedējs/vednis"
133
+Basic.AutoConfig.ApplySettings="Pielietot iestatījumus"
134
+Basic.AutoConfig.StartPage="Lietojuma informācija"
135
+Basic.AutoConfig.StartPage.SubTitle="Norādiet, kādiem nolūkiem vēlaties izmantot programmu"
136
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimizēt straumēšanai, ierakstīšana ir sekundāra"
137
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimizēt tikai ierakstīšanai, es nestraumēšu"
138
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Es izmantošu tikai virtuālo kameru"
139
+Basic.AutoConfig.VideoPage="Video iestatījumi"
140
+Basic.AutoConfig.VideoPage.SubTitle="Iestatiet vēlamos video iestatījumus"
141
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Izmantot pašreizējo (%1x%2)"
142
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Ekrāns %1 (%2x%3)"
143
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Izmantot pašreizējo (%1)"
144
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 vai 30, bet, ja iespējams, priekšroka 60"
145
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 vai 30, bet priekšroka augstākai izšķirtspējai"
146
+Basic.AutoConfig.VideoPage.CanvasExplanation="Piezīme. Kanvas (bāzes) izšķirtspēja ne vienmēr ir tāda pati kā izšķirtspēja, ar kuru straumēsiet vai ierakstīsiet. Jūsu faktiskā straumes/ieraksta izšķirtspēja var tikt samazināta no kanvas izšķirtspējas, lai samazinātu resursu izmantošanu vai nodrošinātu \"bitrate\" prasības (pārraides ātrumu?)."
147
+Basic.AutoConfig.StreamPage="Straumes informācija"
148
+Basic.AutoConfig.StreamPage.SubTitle="Lūdzu ievadiet savu straumes informāciju"
149
+Basic.AutoConfig.StreamPage.ConnectAccount="Piesaistīt kontu (ieteicams)"
150
+Basic.AutoConfig.StreamPage.DisconnectAccount="Atsaistīt kontu"
151
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Atsaistīt kontu?"
152
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Text="Šīs izmaiņas stāsies spēkā nekavējoties. Tiešām vēlaties atsaistīt savu kontu?"
153
+Basic.AutoConfig.StreamPage.GetStreamKey="Iegūt straumes atslēgu"
154
+Basic.AutoConfig.StreamPage.MoreInfo="Vairāk info"
155
+Basic.AutoConfig.StreamPage.UseStreamKey="Izmantot straumēšanas atslēgu"
156
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Izmantot straumēšanas atslēgu (advancēts)"
157
+Basic.AutoConfig.StreamPage.Service="Pakalpojums"
158
+Basic.AutoConfig.StreamPage.Service.ShowAll="Rādīt visus"
159
+Basic.AutoConfig.StreamPage.Service.Custom="Pielāgots/individuāls"
160
+Basic.AutoConfig.StreamPage.Server="Serveris"
161
+Basic.AutoConfig.StreamPage.StreamKey="Straumes atslēga"
162
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(saite)"
163
+Basic.AutoConfig.StreamPage.EncoderKey="Enkodera atslēga"
164
+Basic.AutoConfig.StreamPage.ConnectedAccount="Piesaistītais konts"
165
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Notestēt bitrate (bitu pārraides ātrumu) ar interneta ātruma testu (var aizņemt dažas minūtes)"
166
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prioritāte aparatūras enkodēšanai"
167
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Aparatūriskā kodēšana mazāk noslogo CPU, bet var pieprasīt lielāku bitreitu, lai iegūtu tādu pašu kvalitātes līmeni."
168
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Straumēnu brīdinājums"
169
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Interneta ātruma tests gatavojas straumēt pēc nejaušības principa izvēlētus video datus bez audio uz jūsu kanālu. Ja jums ir iespēja, iesakām īslaicīgi izslēgt video straumju saglabāšanu un iestatīt straumēšanu kā privātu līdz testa pabeigšanas. Turpināt?"
170
+Basic.AutoConfig.TestPage="Rezultāti"
171
+Basic.AutoConfig.TestPage.SubTitle.Testing="Programma pašreiz veic testu kopumu, lai piemeklētu ideālākos iestatījumus"
172
+Basic.AutoConfig.TestPage.SubTitle.Complete="Tests pabeigts"
173
+Basic.AutoConfig.TestPage.TestingBandwidth="Tiek veikta interneta pieslēguma ātruma pārbaude, tas var aizņemt dažas minūtes ..."
174
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Savienojums ar: %1..."
175
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Neizdevās izveidot savienojumu ar serveriem. Lūdzu, pārbaudiet interneta pieslēgumu un mēģiniet vēlreiz."
176
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Ātruma tests savienojumam ar: %1"
177
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Notiek straumes enkodera testēšana, tas var aizņemt minūti ..."
178
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Notiek ierakstīšanas enkodera testēšana, tas var aizņemt minūti ..."
179
+Basic.AutoConfig.TestPage.TestingRes="Veicam izšķirtspēju testēšanu, tas var aizņemt dažas minūtes ..."
180
+Basic.AutoConfig.TestPage.TestingRes.Fail="Neizdevās palaist enkoderi"
181
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Tiek testēts %1x%2 ar %3 kadriem sekundē..."
182
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Straumēšanas enkoders"
183
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Ieraksta enkoders"
184
+Basic.AutoConfig.TestPage.Result.Header="Programma ir noteikusi, ka šai sistēmai vislabāk piemērotie ir šādi iestatījumi:"
185
+Basic.AutoConfig.TestPage.Result.Footer="Lai saglabātu šos iestatījumus, noklikšķiniet uz Pielietot iestatījumus. Lai pārkonfigurētu pavedēju un mēģinātu vēlreiz, noklikšķiniet uz Atpakaļ. Lai manuāli konfigurētu iestatījumus, noklikšķiniet uz Atcelt un atveriet Iestatījumi."
186
+Basic.AutoConfig.Info="Automātiskās konfigurācijas pavedējs noteiks labākos iestatījumus, pamatojoties uz datora specifikāciju un interneta ātrumu."
187
+Basic.AutoConfig.RunAnytime="To var palaist jebkurā laikā, dodoties uz izvēlni Rīki."
188
+Basic.Stats="Statistika"
189
+Basic.Stats.CPUUsage="CPU lietojums"
190
+Basic.Stats.HDDSpaceAvailable="Diska vieta (pieejamā)"
191
+Basic.Stats.MemoryUsage="RAM (operatīvās atmiņas) lietojums"
192
+Basic.Stats.AverageTimeToRender="Vidējais kadra renderēšanas laiks"
193
+Basic.Stats.SkippedFrames="Izlaisti kadri kavētas/novilcinātas enkodēšanas dēļ"
194
+Basic.Stats.MissedFrames="Izlaisti kadri kavētas/novilcinātas renderēšanas dēļ"
195
+Basic.Stats.Output.Stream="Straume"
196
+Basic.Stats.Output.Recording="Ieraksts"
197
+Basic.Stats.Status="Statuss"
198
+Basic.Stats.Status.Recording="Ieraksta"
199
+Basic.Stats.Status.Live="Ēterā (dzīvajā)"
200
+Basic.Stats.Status.Reconnecting="Atkārtoti savienojas"
201
+Basic.Stats.Status.Inactive="Neaktīvs"
202
+Basic.Stats.Status.Active="Aktīvs"
203
+Basic.Stats.DroppedFrames="Izlaistie/izkritušie kadri (tīkls)"
204
+Basic.Stats.MegabytesSent="Kopējā datu izvade"
205
+Basic.Stats.Bitrate="Bitrate (bitu pārraides ātrums)"
206
+Basic.Stats.DiskFullIn="Disks pilns"
207
+Basic.Stats.ResetStats="Atstatīt (nonullēt) statistiku"
208
+ResetUIWarning.Title="Tiešām vēlaties atstatīt lietotāja saskarni (GUI)?"
209
+ResetUIWarning.Text="Atstatot lietotāja saskarni, kļūs neredzami papildu doki. Ja tos vēlēsieties, tie būs Skata izvēlnē jāpadara redzami. \n\nTiešām vēlaties atstatīt lietotāja saskarni?"
210
+Updater.Title="Pieejama programmas aktualizācija (update)"
211
+Updater.Text="Ir pieejams jauns programmas aktualizējums (update):"
212
+Updater.UpdateNow="Aktualizēt tagad"
213
+Updater.RemindMeLater="Atgādināt vēlāk"
214
+Updater.Skip="Izlaist šo versiju"
215
+Updater.Running.Title="Programma pašreiz aktīva/darbojas"
216
+Updater.Running.Text="Izvadi (outputs) pašlaik ir aktīvi. Lūdzu, izslēdziet visus aktīvos izvadus, pirms mēģināt aktualizēt programmu"
217
+Updater.NoUpdatesAvailable.Title="Aktualizācijas (updates) nav pieejamas"
218
+Updater.NoUpdatesAvailable.Text="Aktualizācijas (updates) pašreiz nav pieejamas"
219
+Updater.FailedToLaunch="Neizdevās palaist aktualizatoru"
220
+Updater.GameCaptureActive.Title="Spēles tveršana ir aktīva"
221
+Updater.GameCaptureActive.Text="Spēļu tveršanas āķu bibliotēka pašlaik tiek izmantota. Lūdzu, aizveriet visas pašreiz tvertās spēles/programmas (vai restartējiet operētājsistēmu) un mēģiniet vēlreiz."
222
+QuickTransitions.SwapScenes="Samainiet vietām Priekšskata/Izvada Ainas pēc Pārejas"
223
+QuickTransitions.SwapScenesTT="Pēc pārejas maina vietām priekšskata un izvadu ainas (ja izvada sākotnējā aina joprojām pastāv). \nTas neatgriezīs visas izmaiņas, kas varētu būt veiktas izvada sākotnējā ainā."
224
+QuickTransitions.DuplicateScene="Dublicēt/dublēt ainu"
225
+QuickTransitions.DuplicateSceneTT="Kad tiek rediģēta to pati aina, var rediģēt avotu transformāciju/redzamību, nemainot izvadu. \nLai rediģētu avotu rekvizītus, nemainot izvadu, iespējojiet 'Dublēt avotus'. \nMainot šo vērtību, tiks atstatīta pašreizējā izvada aina (ja tā joprojām pastāv)."
226
+QuickTransitions.EditProperties="Dublēt avotus"
227
+QuickTransitions.EditPropertiesTT="Rediģējot vienu un to pašu ainu, tiek ļauts rediģēt avotu rekvizītus, nemainot izvadu. \nTo var izmantot tikai tad, ja ir iespējota opcija Dublēt ainu. \nDaži avoti (piemēram, tveršanas vai mediju avoti) to neatbalsta, un tos nevar rediģēt atsevišķi. \nMainot šo vērtību, tiks atstatīta pašreizējā izvades aina (ja tā joprojām pastāv). \n\nBrīdinājums: tā kā avoti tiks dublēti, tas var prasīt papildu sistēmas vai video resursus."
228
+QuickTransitions.HotkeyName="Ātra pāreja: %1"
229
+Basic.AddTransition="Pielikt konfigurējamu pāreju"
230
+Basic.RemoveTransition="Noņemt konfigurējamo pāreju"
231
+Basic.TransitionProperties="Pārejas rekvizīti"
232
+Basic.SceneTransitions="Ainas pārejas"
233
+Basic.TransitionDuration="Ilgums"
234
+Basic.TogglePreviewProgramMode="Studio režīms"
235
+Undo.Undo="Atgriezt"
236
+Undo.Redo="Atatgriezt (redo)"
237
+Undo.Add="Pielikt '%1'"
238
+Undo.Delete="Dzēst '%1'"
239
+Undo.Rename="Pārdēvēt '%1'"
240
+Undo.SceneCollection.Switch="Pāriet uz '%1'"
241
+Undo.Item.Undo="Atgriezt/atsaukt %1"
242
+Undo.Item.Redo="Atatgriezt (redo) %1"
243
+Undo.Sources.Multi="Dzēst %1 avotus"
244
+Undo.Filters="Filtra izmaiņas uz '%1'"
245
+Undo.Filters.Paste.Single="Ievietot filtru '%1' uz '%2'"
246
+Undo.Filters.Paste.Multiple="Kopēt filtru '%1' uz '%2'"
247
+Undo.Transform="Pārveidot avotu(s) iekš '%1'"
248
+Undo.Transform.Paste="Ielikt pārveidojumu iekš '%1'"
249
+Undo.Transform.Rotate="Rotāciju/pagriešanu iekš '%1'"
250
+Undo.Transform.Reset="Pārveidot atstatīšanu iekš '%1' '"
251
+Undo.Transform.HFlip="Horizontālo pārmešanu iekš '%1'"
252
+Undo.Transform.VFlip="Vertikālo pārmešanu iekš '%1'"
253
+Undo.Transform.FitToScreen="Pielāgot ekrānam iekš '%1'"
254
+Undo.Transform.StretchToScreen="Izstiept uz ekrāna ainā '%1'"
255
+Undo.Transform.Center="Centrēt ekrānā ainā '%1'"
256
+Undo.Transform.VCenter="Vertikāli centrēt ekrānā ainā '%1'"
257
+Undo.Volume.Change="Skaļuma maiņa '%1'"
258
+Undo.Volume.Mute="Noklusināt '%1'"
259
+Undo.Volume.Unmute="Atgriezt skaņu '%1'"
260
+TransitionNameDlg.Text="Lūdzu ievadiet pārejas nosaukumu"
261
+TransitionNameDlg.Title="Pārejas nosaukums"
262
+TitleBar.Profile="Profils"
263
+TitleBar.Scenes="Ainas"
264
+NameExists.Title="Nosaukums jau pastāv"
265
+NameExists.Text="Šis nosaukums jau ir aizņemts."
266
+NoNameEntered.Title="Lūdzu ievadiet derīgu nosaukumu"
267
+NoNameEntered.Text="Nosaukums ir obligāts."
268
+ConfirmStart.Title="Sākt straumēt?"
269
+ConfirmStart.Text="Vēlaties sākt straumēt?"
270
+ConfirmStop.Title="Beigt straumēt?"
271
+ConfirmStop.Text="Vēlaties beigt straumēt?"
272
+ConfirmStopRecord.Title="Beigt ierakstu?"
273
+ConfirmStopRecord.Text="Vēlaties beigt ierakstīt?"
274
+ConfirmBWTest.Title="Sākt interneta ātruma testu?"
275
+ConfirmBWTest.Text="OBS ir konfigurēts interneta ātruma pārbaudes režīmam. Šis režīms ļauj veikt tīkla testēšanu, jūsu kanālam neejot tiešraidē. Kad būsiet pabeidzis testēšanu, jums šis režīms būs jāatspējo, lai skatītāji varētu redzēt jūsu straumi. \n\nVēlaties turpināt?"
276
+ConfirmExit.Title="Aizvērt OBS?"
277
+ConfirmExit.Text="OBS pašlaik ir aktīvs. Visas straumes/ieraksti tiks beigti. Tiešām vēlaties OBS aizvērt?"
278
+ConfirmRemove.Title="Dzēšanas apstiprinājums"
279
+ConfirmRemove.Text="Tiešām vēlaties noņemt '$1'?"
280
+ConfirmRemove.TextMultiple="Tiešām vēlaties noņemt %1 gabalus?"
281
+Output.StartStreamFailed="Neizdevās uzsākt straumēšanu"
282
+Output.StartRecordingFailed="Neizdevās uzsākt ierakstīšanu"
283
+Output.StartReplayFailed="Neizdevās sākt replay bufera ierakstu"
284
+Output.StartFailedGeneric="Neizdevās sākt izvadu. Lūdzu, skatiet žurnālu, lai iegūtu sīkāku informāciju. \n\nPiezīme: Ja izmantojat NVENC vai AMD enkoderus, pārliecinieties, ka ir svaigi video draiveri."
285
+Output.ReplayBuffer.PauseWarning.Title="Nevar saglabāt replay-us, kamēr uz pauzes"
286
+Output.ReplayBuffer.PauseWarning.Text="Brīdinājums: Replay-i nevar tikt saglabāti, kad ieraksts ir pauzēts."
287
+Output.ConnectFail.Title="Neizdevās savienoties"
288
+Output.ConnectFail.BadPath="Nederīgs ceļš vai savienojuma URL. Lūdzu, pārbaudiet vai iestatījumi ir korekti."
289
+Output.ConnectFail.ConnectFailed="Neizdevās savienoties ar serveri"
290
+Output.ConnectFail.InvalidStream="Nevarēja piekļūt norādītajam kanālam vai straumēšanas atslēgai. Lūdzu, pārbaudiet straumēšanas atslēgu. Ja tā derīga, pie vainas var būt problēma pievienoties serverim."
291
+Output.ConnectFail.Error="Mēģinot izveidot savienojumu ar serveri, radās negaidīta kļūme. Vairāk informācijas žurnālfailā."
292
+Output.ConnectFail.Disconnected="Zuda savienojums ar serveri."
293
+Output.StreamEncodeError.Title="Enkodēšanas kļūme"
294
+Output.StreamEncodeError.Msg="Straumēšanas laikā atgadījās enkodera kļūme."
295
+Output.RecordFail.Title="Neizdevās sākt ierakstu"
296
+Output.RecordFail.Unsupported="Izvada formāts ir vai nu neatbalstīts vai arī tas neatbalsta vairāk nekā vienu audio celiņu. Lūdzu, pārbaudiet iestatījumus un mēģiniet vēlreiz."
297
+Output.RecordNoSpace.Title="Nepietiek diska vietas (noliktavas)"
298
+Output.RecordNoSpace.Msg="Ieraksta turpināšanai nepietiek diska vietas (failu noliktavas)."
299
+Output.RecordError.Title="Ierakstīšanas kļūme"
300
+Output.RecordError.Msg="Ieraksta laikā radās nenoteikta kļūme."
301
+Output.RecordError.EncodeErrorMsg="Ieraksta laikā radās enkodera kļūda."
302
+Output.BadPath.Title="Nederīgs faila ceļš"
303
+Output.BadPath.Text="Konfigurētais izvada faila ceļš nav derīgs. Lūdzu, pārbaudiet iestatījumos, vai norādīts derīgs faila ceļš."
304
+LogReturnDialog="Žurnāla augšuplāde veiksmīga"
305
+LogReturnDialog.Description="Jūsu žurnālfails ir augšuplādēts. Tagad jūs varat koplietot tā URL atkļūdošanas vai atbalsta nolūkiem."
306
+LogReturnDialog.Description.Crash="Jūsu avārijas ziņojums ir augšuplādēts. Tagad jūs varat koplietot tā URL atkļūdošanas nolūkiem."
307
+LogReturnDialog.CopyURL="Kopēt URL"
308
+LogReturnDialog.AnalyzeURL="Analizēt"
309
+LogReturnDialog.ErrorUploadingLog="Augšuplādējot žurnālfailu atgadījās ķibele"
310
+Remux.SourceFile="OBS ieraksts"
311
+Remux.TargetFile="Mērķa (izvada) fails"
312
+Remux.Remux="Remux-ēt"
313
+Remux.Stop="Beigt remux-ēšanu"
314
+Remux.ClearFinished="Notīrīt pabeigtos"
315
+Remux.ClearAll="Notīrīt visus"
316
+Remux.OBSRecording="OBS ieraksts"
317
+Remux.FinishedTitle="Remux-ēšana pabeigta"
318
+Remux.Finished="Ieraksts remux-ēts"
319
+Remux.FinishedError="Ieraksts remux-ēts, bet fails varētu būt nepilnīgs"
320
+Remux.SelectRecording="Izvēlies OBS ierakstu..."
321
+Remux.SelectTarget="Izvēlies izvada/mērķa failu..."
322
+Remux.FileExistsTitle="Izvada/mērķa fails eksistē"
323
+Remux.FileExists="Šādi izvada/mērķa faili jau pastāv. Vēlaties tos aizstāt?"
324
+Remux.ExitUnfinishedTitle="Remux-ēšana procesā"
325
+Remux.ExitUnfinished="Remux-ēšana nav pabeigta un tās apstādināšana tagad var padarīt izvada/mērķa failu nelietojamu. \nTomēr vēlaties to apstādināt?"
326
+Remux.HelpText="Remux-ējamos failus iemetiet šajā logā vai izvēlieties tukšu \"OBS ieraksta\" šūnu, lai failu pārlūkā atlasītu ievada failu."
327
+MissingFiles="Iztrūkstoši faili"
328
+MissingFiles.MissingFile="Trūkstošais fails"
329
+MissingFiles.NewFile="Jaunais fails"
330
+MissingFiles.HelpText="Kopš jūsu pēdējās OBS izmantošanas reizes daži faili ir pazuduši."
331
+MissingFiles.Clear="<notīrīti>"
332
+MissingFiles.NumFound="Atrasti $1 no $2"
333
+MissingFiles.Search="Meklēt mapē..."
334
+MissingFiles.SelectFile="Izvēlieties failu..."
335
+MissingFiles.SelectDir="Izvēlieties mapi, kurā meklēt"
336
+MissingFiles.State="Stāvoklis"
337
+MissingFiles.Missing="Zudis"
338
+MissingFiles.Replaced="Aizstāts"
339
+MissingFiles.Cleared="Notīrīts"
340
+MissingFiles.Found="Atrasts"
341
+MissingFiles.AutoSearch="Atrastas papildu failu atbilstības"
342
+MissingFiles.AutoSearchText="OBS šajā mapē ir atradis papildu atbilstības trūkstošajiem failiem. Vai vēlaties tās pievienot?"
343
+UpdateAvailable="Pieejama jauna aktualizācija"
344
+UpdateAvailable.Text="Tagad ir pieejama versija%1.%2.%3. <a href='%4'> Lai lejupielādētu, klikšķiniet šeit </a>"
345
+Basic.DesktopDevice1="Darbvirsmas audio"
346
+Basic.DesktopDevice2="Darbvirsmas audio 2"
347
+Basic.AuxDevice1="Mic/Aux (mikrofons/papildu)"
348
+Basic.AuxDevice2="Mic/Aux (mikrofons/papildu) 2"
349
+Basic.AuxDevice3="Mic/Aux (mikrofons/papildu) 3"
350
+Basic.AuxDevice4="Mic/Aux (mikrofons/papildu) 4"
351
+Basic.Scene="Aina"
352
+Basic.DisplayCapture="Ekrāna tveršana/uzņemšana"
353
+Basic.Main.PreviewConextMenu.Enable="Iespējot priekšskatu"
354
+Basic.Main.Preview.Disable="Atspējot priekšskatu"
355
+ScaleFiltering="Mēroga filtrēšana"
356
+ScaleFiltering.Point="Punkta"
357
+ScaleFiltering.Bilinear="Bilineāra"
358
+ScaleFiltering.Bicubic="Bikubiska"
359
+ScaleFiltering.Area="Apgabals"
360
+Deinterlacing="Deinterleisings"
361
+Deinterlacing.Discard="Atmest"
362
+Deinterlacing.Blend="Sapludinājums"
363
+Deinterlacing.Blend2x="Sapludinājums 2x"
364
+Deinterlacing.Linear="Lineārs"
365
+Deinterlacing.Linear2x="Lineārs 2x"
366
+Deinterlacing.TopFieldFirst="Augšējais lauks vispirms"
367
+Deinterlacing.BottomFieldFirst="Apakšējais lauks vispirms"
368
+VolControl.SliderUnmuted="Skaļuma slīdnis priekš '%1':"
369
+VolControl.SliderMuted="Skaļuma slīdnis priekš '%1': (pašreiz noklusināts)"
370
+VolControl.Mute="Noklusināt '%1'"
371
+VolControl.Properties="Rekvizīti '%1'"
372
+Basic.Main.AddSceneDlg.Title="Pievienot ainu"
373
+Basic.Main.AddSceneDlg.Text="Lūdzu ievadiet ainas nosaukumu"
374
+Basic.Main.DefaultSceneName.Text="Aina %1"
375
+Basic.Main.AddSceneCollection.Title="Pievienot ainu kolekciju"
376
+Basic.Main.AddSceneCollection.Text="Lūdzu ievadiet ainu kolekcijas nosaukumu"
377
+Basic.Main.RenameSceneCollection.Title="Pārdēvēt ainu kolekciju"
378
+AddProfile.Title="Pievienot profilu"
379
+AddProfile.Text="Lūdzu ievadiet profila nosaukumu"
380
+AddProfile.WizardCheckbox="Rādīt automātisko konfigurātoru"
381
+RenameProfile.Title="Pārdēvēt profilu"
382
+Basic.Main.MixerRename.Title="Pārdēvēt audio avotu"
383
+Basic.Main.MixerRename.Text="Lūdzu ievadiet audio avota nosaukumu"
384
+Basic.Main.PreviewDisabled="Priekšskats pašlaik ir atspējots"
385
+Basic.SourceSelect="Izveidot/atlasīt avotu"
386
+Basic.SourceSelect.CreateNew="Izveidot jaunu"
387
+Basic.SourceSelect.AddExisting="Pielikt esošu"
388
+Basic.SourceSelect.AddVisible="Padarīt avotu redzamu"
389
+Basic.Main.Sources.Visibility="Redzamība"
390
+Basic.Main.Sources.VisibilityDescription="Kontrolē '%1' redzamību kanvās"
391
+Basic.Main.Sources.Lock="Fiksēt"
392
+Basic.Main.Sources.LockDescription="Fiksē '%1' pozīciju un mērogu kanvās"
393
+Basic.PropertiesWindow="'%1'rekvizīti"
394
+Basic.PropertiesWindow.AutoSelectFormat="%1 (automātiski atzīmēt: %2)"
395
+Basic.PropertiesWindow.SelectColor="Izvēlēties krāsu"
396
+Basic.PropertiesWindow.SelectFont="Izvēlēties šriftu"
397
+Basic.PropertiesWindow.ConfirmTitle="Iestatījumu izmaiņa"
398
+Basic.PropertiesWindow.Confirm="Ir nesaglabātas izmaiņas. Vai vēlaties tās paturēt?"
399
+Basic.PropertiesWindow.NoProperties="Rekvizīti nav pieejami"
400
+Basic.PropertiesWindow.AddFiles="Pievienot failus"
401
+Basic.PropertiesWindow.AddDir="Pievienot mapi"
402
+Basic.PropertiesWindow.AddURL="Pievienot ceļu/URL"
403
+Basic.PropertiesWindow.AddEditableListDir="Pievienot mapi pie '%1'"
404
+Basic.PropertiesWindow.AddEditableListFiles="Pievienot failus pie '%1'"
405
+Basic.PropertiesWindow.AddEditableListEntry="Pievienot ierakstu pie '%1'"
406
+Basic.PropertiesWindow.EditEditableListEntry="Rediģēt '%1' ierakstu"
407
+Basic.PropertiesView.FPS.Simple="Vienkāršas FPS vērtības"
408
+Basic.PropertiesView.FPS.Rational="Racionālas FPS vērtības"
409
+Basic.PropertiesView.FPS.ValidFPSRanges="Derīgie FPS diapazoni:"
410
+Basic.PropertiesView.UrlButton.Text="Atvērt šo saiti noklusējuma tīmekļa pārlūkā?"
411
+Basic.PropertiesView.UrlButton.OpenUrl="Atvērt URL"
412
+Basic.InteractionWindow="Mijiedarbojas ar '%1'"
413
+Basic.StatusBar.Reconnecting="Atvienots. Mēģinājums pievienoties pēc %2 sekundēm (mēģinājums #%1)"
414
+Basic.StatusBar.AttemptingReconnect="Tiek mēģināts atjaunot savienojumu... (mēģinājums #%1)"
415
+Basic.StatusBar.ReconnectSuccessful="Atkalsavienošanās mēģinājums sekmīgs"
416
+Basic.StatusBar.Delay="Aizkave (%1 sek)"
417
+Basic.StatusBar.DelayStartingIn="Aizkave (sākas pēc %1 sek.)"
418
+Basic.StatusBar.DelayStoppingIn="Aizkave (beidzas pēc %1 sek.)"
419
+Basic.StatusBar.DelayStartingStoppingIn="Aizkave (beidzas pēc %1 sek., sākas pēc %2 sek.)"
420
+Basic.StatusBar.RecordingSavedTo="Ieraksts saglabāts '%1'"
421
+Basic.StatusBar.ReplayBufferSavedTo="Replay bufferis saglabāts '%1'"
422
+Basic.StatusBar.ScreenshotSavedTo="Ekrānšāviņš saglabāts '%1'"
423
+Basic.StatusBar.AutoRemuxedTo="Ieraksts automātiski remux-ēts/saglabāts '%1'"
424
+Basic.Filters="Filtri"
425
+Basic.Filters.AsyncFilters="Audio/Video filtri"
426
+Basic.Filters.AudioFilters="Audio filtri"
427
+Basic.Filters.EffectFilters="Efektu filtri"
428
+Basic.Filters.Title="Filtri priekš '%1'"
429
+Basic.Filters.AddFilter.Title="Filtra nosaukums"
430
+Basic.Filters.AddFilter.Text="Lūdzu norādiet filtra nosaukumu"
431
+Basic.TransformWindow="Ainas elementa transformēšana"
432
+Basic.TransformWindow.Position="Pozīcija"
433
+Basic.TransformWindow.PositionX="Pozīcija X"
434
+Basic.TransformWindow.PositionY="Pozīcija Y"
435
+Basic.TransformWindow.Rotation="Pagriešana/rotācija"
436
+Basic.TransformWindow.Size="Izmērs"
437
+Basic.TransformWindow.Width="Platums"
438
+Basic.TransformWindow.Height="Augstums"
439
+Basic.TransformWindow.Alignment="Pozicionālā izlīdzināšana"
440
+Basic.TransformWindow.BoundsType="Ierobežojošās kastes tips"
441
+Basic.TransformWindow.BoundsAlignment="Līdzinājums ierobežojošajā kastē"
442
+Basic.TransformWindow.Bounds="Ierobežojošās kastes izmērs"
443
+Basic.TransformWindow.BoundsWidth="Ierobežojošās kastes platums"
444
+Basic.TransformWindow.BoundsHeight="Ierobežojošās kastes augstums"
445
+Basic.TransformWindow.Crop="Apcirpt"
446
+Basic.TransformWindow.CropLeft="Apcirpt kreiso"
447
+Basic.TransformWindow.CropRight="Apcirpt labo"
448
+Basic.TransformWindow.CropTop="Apcirpt augšu"
449
+Basic.TransformWindow.CropBottom="Apcirpt apakšu"
450
+Basic.TransformWindow.Alignment.TopLeft="Augšā pa kreisi"
451
+Basic.TransformWindow.Alignment.TopCenter="Augšā centrēts"
452
+Basic.TransformWindow.Alignment.TopRight="Augšā pa labi"
453
+Basic.TransformWindow.Alignment.CenterLeft="Centrā pa kreisi"
454
+Basic.TransformWindow.Alignment.Center="Centrā"
455
+Basic.TransformWindow.Alignment.CenterRight="Centrā pa labi"
456
+Basic.TransformWindow.Alignment.BottomLeft="Apakšā pa kreisi"
457
+Basic.TransformWindow.Alignment.BottomCenter="Apakšā centrēts"
458
+Basic.TransformWindow.Alignment.BottomRight="Apakšā pa labi"
459
+Basic.TransformWindow.BoundsType.None="Bez robežām"
460
+Basic.TransformWindow.BoundsType.MaxOnly="Tikai maksimālais izmērs"
461
+Basic.TransformWindow.BoundsType.ScaleInner="Mērogot atbilstoši iekšējām robežām"
462
+Basic.TransformWindow.BoundsType.ScaleOuter="Mērogot atbilstoši ārējām robežām"
463
+Basic.TransformWindow.BoundsType.ScaleToWidth="Mērogot atbilstoši robežu platumam"
464
+Basic.TransformWindow.BoundsType.ScaleToHeight="Robežot atbilstoši robežu augstumam"
465
+Basic.TransformWindow.BoundsType.Stretch="Izstiept līdz robežām"
466
+Basic.Main.AddSourceHelp.Title="Nevar pielikt avotu"
467
+Basic.Main.AddSourceHelp.Text="Lai pieliktu avotu, ir jābūt vismaz vienai ainai."
468
+Basic.Main.Scenes="Ainas"
469
+Basic.Main.Sources="Avoti"
470
+Basic.Main.Source="Avots"
471
+Basic.Main.Controls="Vadīklas"
472
+Basic.Main.Connecting="Notiek savienošanās..."
473
+Basic.Main.StartRecording="Sākt ierakstīt"
474
+Basic.Main.StartReplayBuffer="Sākt 'replay' bufera darbību"
475
+Basic.Main.SaveReplay="Saglabāt 'replay' buferi"
476
+Basic.Main.StartStreaming="Sākt straumēt"
477
+Basic.Main.StartVirtualCam="Sākt virtuālo kameru"
478
+Basic.Main.StopRecording="Beigt ierakstu"
479
+Basic.Main.PauseRecording="Pauzēt ierakstu"
480
+Basic.Main.UnpauseRecording="Atsākt ierakstu"
481
+Basic.Main.StoppingRecording="Tiek beigts ieraksts..."
482
+Basic.Main.StopReplayBuffer="Beigt 'replay' bufera darbību"
483
+Basic.Main.StoppingReplayBuffer="Tiek apturēts 'replay' bufferis"
484
+Basic.Main.StopStreaming="Beigt straumēt"
485
+Basic.MainMenu.File="&Fails"
486
+Basic.MainMenu.File.Export="&Eksports"
487
+Basic.MainMenu.File.Import="&Imports"
488
+Basic.MainMenu.File.ShowRecordings="Parādīt ie&rakstus"
489
+Basic.MainMenu.File.Remux="Re&mux-ēt ierakstus"
490
+Basic.MainMenu.File.Settings="Ie&statījumi"
491
+Basic.MainMenu.File.ShowSettingsFolder="Parādīt iestatījumu mapi"
492
+Basic.MainMenu.File.ShowProfileFolder="Parādīt profila mapi"
493
+Basic.MainMenu.AlwaysOnTop="Vienmēr virspusē"
494
+Basic.MainMenu.File.Exit="Aizvērt"
495
+Basic.MainMenu.Edit="R&ediģēt"
496
+Basic.MainMenu.Edit.Undo="Atgriezt (&undo)"
497
+Basic.MainMenu.Edit.Redo="Atatgriezt (&redo)"
498
+Basic.MainMenu.Edit.UndoAction="Atgriezt (&undo) $1"
499
+Basic.MainMenu.Edit.RedoAction="Atatgriezt (&redo) $1"
500
+Basic.MainMenu.Edit.LockPreview="&Fiksēt priekšskatu"
501
+Basic.MainMenu.Edit.Scale="Priešskata mērogošana"
502
+Basic.MainMenu.Edit.Scale.Window="Mērogot loga izmērā"
503
+Basic.MainMenu.Edit.Scale.Canvas="Kanvas (%1x%2)"
504
+Basic.MainMenu.Edit.Scale.Output="Izvads (%1x%2)"
505
+Basic.MainMenu.Edit.Transform="&Transformēt"
506
+Basic.MainMenu.Edit.Transform.EditTransform="R&ediģēt transformējumu"
507
+Basic.MainMenu.Edit.Transform.CopyTransform="Kopēt transformējumu"
508
+Basic.MainMenu.Edit.Transform.PasteTransform="Ievietot transformējumu"
509
+Basic.MainMenu.Edit.Transform.ResetTransform="Atstatīt t&ransformējumu"
510
+Basic.MainMenu.Edit.Transform.Rotate90CW="Rotēt 90 gr. PV"
511
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotēt 90 gr. PPV"
512
+Basic.MainMenu.Edit.Transform.Rotate180="Rotēt 180 gr."
513
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Apmest &horizontāli"
514
+Basic.MainMenu.Edit.Transform.FlipVertical="Apmest &vertikāli"
515
+Basic.MainMenu.Edit.Transform.FitToScreen="Pielāgo&t ekrānam"
516
+Basic.MainMenu.Edit.Transform.StretchToScreen="Iz&stiept pa ekrānu"
517
+Basic.MainMenu.Edit.Transform.CenterToScreen="&Centrēt uz ekrāna"
518
+Basic.MainMenu.Edit.Transform.VerticalCenter="Centrēt vertikāli"
519
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Centrēt horizontāli"
520
+Basic.MainMenu.Edit.Order="Kārt&ot"
521
+Basic.MainMenu.Edit.Order.MoveUp="Virzīt augš&up"
522
+Basic.MainMenu.Edit.Order.MoveDown="Virzīt &lejup"
523
+Basic.MainMenu.Edit.Order.MoveToTop="Virzī&t uz pašu augšu"
524
+Basic.MainMenu.Edit.Order.MoveToBottom="&Braukt uz pašu apakšu"
525
+Basic.MainMenu.Edit.AdvAudio="&Advancētie audio rekvizīti"
526
+Basic.MainMenu.View="Skats"
527
+Basic.MainMenu.View.Toolbars="Rīkjoslas"
528
+Basic.MainMenu.View.Docks="Doki"
529
+Basic.MainMenu.View.Docks.ResetUI="Atstatīt lietotāja saskarni"
530
+Basic.MainMenu.View.Docks.LockUI="Fiksēt lietotāja saskarni"
531
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Pielāgotie pārlūka doki"
532
+Basic.MainMenu.View.ListboxToolbars="Ainu/avotu sarakstu pogas"
533
+Basic.MainMenu.View.ContextBar="Avotu rīkjosla"
534
+Basic.MainMenu.View.SceneTransitions="Ainas pārejas"
535
+Basic.MainMenu.View.SourceIcons="Avotu &ikonas"
536
+Basic.MainMenu.View.StatusBar="&Statusa josla"
537
+Basic.MainMenu.View.Fullscreen.Interface="Pilnekrāna saskarne"
538
+Basic.MainMenu.SceneCollection="Ainu kolekcija"
539
+Basic.MainMenu.Profile="&Profils"
540
+Basic.MainMenu.Profile.Import="Importēt profilu"
541
+Basic.MainMenu.Profile.Export="Eksportēt profilu"
542
+Basic.MainMenu.SceneCollection.Import="Importēt ainu kolekciju"
543
+Basic.MainMenu.SceneCollection.Export="Eksportēt ainu kolekciju"
544
+Basic.MainMenu.Profile.Exists="Šāds profils jau pastāv"
545
+Basic.MainMenu.SceneCollection.Exists="Ainu kolekcija jau pastāv"
546
+Basic.MainMenu.Tools="Rīki"
547
+Basic.MainMenu.Help="Palīdzība"
548
+Basic.MainMenu.Help.HelpPortal="Palīdzība &portāla"
549
+Basic.MainMenu.Help.Website="Apmeklēt tīmekļvietni"
550
+Basic.MainMenu.Help.Discord="Pievienoties &Discord serverim"
551
+Basic.MainMenu.Help.Logs="Žurnālfaili (&L)"
552
+Basic.MainMenu.Help.Logs.ShowLogs="Parādīt žurnālfailus (&S)"
553
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Augšuplādēt tekošo žurnālfailu"
554
+Basic.Settings.General.Projectors="Projektori"
555
+Basic.Settings.General.HideProjectorCursor="Nerādīt kursoru virs projektoriem"
556
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maksimālais video bitreits: %1 kbps"
557
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maksimālais audio bitreits: %1 kbps"
558
+Basic.Settings.Stream.Recommended.MaxResolution="Maksimālā izšķirtspēja: %1"
559
+Basic.Settings.Stream.Recommended.MaxFPS="Maksimālais FPS: %1"
560
+Basic.Settings.Output="Izvads"
561
+Basic.Settings.Output.Format="Ieraksta formāts"
562
+Basic.Settings.Output.Encoder="Enkoders"
563
+Basic.Settings.Output.SelectDirectory="Norādiet ierakstu mapi"
564
+Basic.Settings.Output.SelectFile="Norādiet ieraksta failu"
565
+Basic.Settings.Output.DynamicBitrate="Dinamiski mainīt bitreitu, lai izvairītos no pārslodzēm"
566
+Basic.Settings.Output.DynamicBitrate.Beta="Dinamiski maina bitreitu, lai izvairītos no pārslodzēm (beta)"
567
+Basic.Settings.Output.DynamicBitrate.TT="Tā vietā, lai mazinot sastrēgumus, izmestu kadrus, dinamiski tiek mainīts bitreits. \n\nŅemiet vērā, ka tas var palielināt aizturi skatītājiem, ja pēkšņi rodas ievērojami pārslodzes gadījumi. \nKad bitreits samazinjies, tā atjaunošana var ilgt dažas minūtes. \n\nŠobrīd tiek atbalstīts tikai RTMP."
568
+Basic.Settings.Output.Mode="Izvada režīms"
569
+Basic.Settings.Output.Mode.Simple="Vienkāršs"
570
+Basic.Settings.Output.Mode.Adv="Advancēts"
571
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg izvads"
572
+Basic.Settings.Output.UseReplayBuffer="Iespējot 'replay' buferi"
573
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Maksimālais 'replay' laiks"
574
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maksimālā atmiņa (MB)"
575
+Basic.Settings.Output.ReplayBuffer.Estimate="Paredzamais atmiņas izlietojums: %1 MB"
576
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Nevar novērtēt potenciālo atmiņas izmantošanu. Lūdzu iestatiet maksimālo atmiņas ierobežojumu."
577
+Basic.Settings.Output.ReplayBuffer.Prefix="'Replay' bufera faila nosaukuma prefikss"
578
+Basic.Settings.Output.ReplayBuffer.Suffix="Sufikss"
579
+Basic.Settings.Output.Simple.SavePath="Ierakstu ceļš"
580
+Basic.Settings.Output.Simple.RecordingQuality="Ieraksta kvalitāte"
581
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Tāda pati kā straumei"
582
+Basic.Settings.Output.Simple.RecordingQuality.Small="Augsta kvalitāte, vidējs faila izmērs"
583
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Neatšķirama kvalitāte, liels faila izmērs"
584
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Bezzudumu kvalitāte, ārkārtīgi liels faila izmērs"
585
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Brīdinājums: Straumēšanas video bitreits tiks iestatīts uz %1, kas ir pašreizējā straumēšanas pakalpojuma augšējā robeža."
586
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Brīdinājums: Straumēšanas audio bitreits tiks iestatīts uz %1, kas ir pašreizējā straumēšanas pakalpojuma augšējā robeža."
587
+Basic.Settings.Output.Simple.Warn.CannotPause="Brīdinājums: Ierakstīšanu nevar pauzēt, ja ierakstīšanas kvalitāte ir iestatīta uz “Tāda pati kā straumei”."
588
+Basic.Settings.Output.Simple.Warn.Encoder="Brīdinājums: Ierakstīšana ar programmatūras enkoderi kvalitātē, kas atšķiras no straumes kvalitātes, prasīs procesora papildu noslodzi, ja straumēsiet un ierakstīsiet vienlaikus."
589
+Basic.Settings.Output.Simple.Warn.Lossless="Brīdinājums: Bezzuduma kvalitāte rada ārkārtīgi lielus failu izmērus! Bezzuduma kvalitāte ar augstu izšķirtspēju un kadru nomaiņas ātrumu, var prasīt līdz pat 7 gigabaitiem diska vietas minūtē. Bezzudumu kvalitāte nav ieteicama ilgstošiem ierakstiem, ja vien jums nav pieejams ļoti daudz diska vietas."
590
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Tiešām vēlaties izmantot bezzuduma kvalitāti?"
591
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Brīdinājums bezzuduma kvalitātes sakarā!"
592
+Basic.Settings.Output.Simple.Encoder.Software="Programmatūras (x264)"
593
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Aparatūras (Intel QSV)"
594
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Aparatūras (AMD)"
595
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Aparatūras (Nvidia NVENC)"
596
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Programmatūras (x264 zema CPU lietojuma iestatījums, paliels faila izmērs)"
597
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD celiņš (izmanto celiņu #2)"
598
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Nesaderīga izšķirtspēja/freimreits (kadru nomaiņas ātrums)"
599
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Šis straumēšanas pakalpojums neatbalsta jūsu pašreizējo izvada izšķirtspēju un/vai freimreitu (kadru nomaiņas ātrumu). Tie tiks mainīti uz tuvāko saderīgo vērtību: \n\n%1 \n\nVai vēlaties turpināt?"
600
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Izšķirtspēja: %1"
601
+Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="FPS (kadri sekundē): %1"
602
+Basic.Settings.Output.VideoBitrate="Video bitreits (bitu pārraides ātrums)"
603
+Basic.Settings.Output.AudioBitrate="Audio bitreits (bitu pārraides ātrums)"
604
+Basic.Settings.Output.Reconnect="Automātiski atkalsavienoties"
605
+Basic.Settings.Output.RetryDelay="Aizkave pēc atkārtota mēģinājuma"
606
+Basic.Settings.Output.MaxRetries="Maksimālais mēģinājumu skaits"
607
+Basic.Settings.Output.Advanced="Iespējot enkodera advancētos iestatījumus"
608
+Basic.Settings.Output.EncoderPreset="Enkodera priekšiestatījumi"
609
+Basic.Settings.Output.CustomEncoderSettings="Enkodera pielāgoti iestatījumi"
610
+Basic.Settings.Output.CustomMuxerSettings="Muxer-a pielāgoti iestatījumi"
611
+Basic.Settings.Output.NoSpaceFileName="Veidot faila nosaukumus bez atstarpēm"
612
+Basic.Settings.Output.Adv.Rescale="Mērogot izvadu"
613
+Basic.Settings.Output.Adv.AudioTrack="Audio celiņš"
614
+Basic.Settings.Output.Adv.Streaming="Straumēšana"
615
+Basic.Settings.Output.Adv.Audio.Track1="Celiņš #1"
616
+Basic.Settings.Output.Adv.Audio.Track2="Celiņš #2"
617
+Basic.Settings.Output.Adv.Audio.Track3="Celiņš #3"
618
+Basic.Settings.Output.Adv.Audio.Track4="Celiņš #4"
619
+Basic.Settings.Output.Adv.Audio.Track5="Celiņš #5"
620
+Basic.Settings.Output.Adv.Audio.Track6="Celiņš #6"
621
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD celiņš"
622
+Basic.Settings.Output.Adv.Recording="Ieraksts"
623
+Basic.Settings.Output.Adv.Recording.RecType="Ieraksta tips"
624
+Basic.Settings.Output.Adv.Recording.Type="Tips"
625
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standarta"
626
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Pielāgots izvads (FFmpeg)"
627
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Izmantot straumes enkoderi)"
628
+Basic.Settings.Output.Adv.Recording.Filename="Faila nosaukuma formatējums"
629
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Pārrakstīt, ja fails eksistē"
630
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg izvada tips"
631
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Izvads uz URL"
632
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Izvads failā"
633
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Populārākie ierakstu formāti"
634
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Visi faili"
635
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Faila ceļš vai URL"
636
+Basic.Settings.Output.Adv.FFmpeg.Format="Konteinera formāts"
637
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Formāts pēc noklusējuma"
638
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Konteinera formāta apraksts"
639
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio/video kodeks uzminēts pēc faila ceļa vai URL"
640
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Enkoders pēc noklusējuma"
641
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Atspējot enkoderi"
642
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video enkoders"
643
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video enkodera iestatījumi (ja kādi)"
644
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio enkoders"
645
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio enkodera iestatījumi (ja kādi)"
646
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer-a iestatījumi (ja kādi)"
647
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Atslēgas kadru intervāls (kadri)"
648
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Rādīt visus kodekus (pat ja tie ir potenciāli nesaderīgi)"
649
+Screenshot="Taisīt izvada ekrānuzņēmumu"
650
+Screenshot.SourceHotkey="Taisīt izvēlētā avota ekrānuzņēmumu"
651
+Screenshot.StudioProgram="Taisīt ekrānuzņēmumu (programma)"
652
+Screenshot.Preview="Taisīt ekrānuzņēmumu (priekšskats)"
653
+Screenshot.Scene="Taisīt ekrānuzņēmumu (aina)"
654
+Screenshot.Source="Ekrānuzņēmums (avots)"
655
+FilenameFormatting.TT="%CCYY   Gads, četri cipari\n%YY     Gads, pēdējie 2 dipari (00-99)\n%MM     Mēnesis kā decimāls skaitlis (01-12)\n%DD       Mēneša diena ar ievadošo nulli (01-31)\n%hh     Stunda 24h formātā (00-23)\n%mm     Minūte (00-59)\n%ss     Sekunde (00-61)\n%%     A % sign\n%a        Saīsināts nedēļas dienu nosaukums\n%A       Pilns nedēļas dienu nosaukums\n%b       Saīsināts mēneša nosaukums\n%B      Pilns mēneša nosaukums\n%d      Mēneša diena ar ievadošo nulli (01-31)\n%H      Stunda 24h formātā (00-23)\n%I      Stunda 12h formātā (01-12)\n%m      Mēnesis kā decimāls skaitlis (01-12)\n%M        Minūte (00-59)\n%p      AM / PM norāde\n%S      Sekunde (00-61)\n%y     Gads, divi pēdējie cipari (00-99)\n%Y       Gads\n%z        ISO 8601 nobīde no UTC laika joslas\n%Z     Laikajoslas nosaukums vai saīsinājums\n%FPS     Kadri sekundē\n%CRES        Bāzes (kanvas) izšķirtspēja\n%ORES      Izvada (mērogota) izšķirtspēja\n%VF     Video formāts"
656
+Basic.Settings.Video.Adapter="Video adapteris"
657
+Basic.Settings.Video.BaseResolution="Bāzes (kanvas) izšķirtspēja"
658
+Basic.Settings.Video.ScaledResolution="Izvada (mērogota) izšķirtspēja"
659
+Basic.Settings.Video.DownscaleFilter="Mērogošanas filtrs"
660
+Basic.Settings.Video.FPSCommon="Vienkāršas FPS vērtības"
661
+Basic.Settings.Video.FPSInteger="FPS kā vesels skaitlis"
662
+Basic.Settings.Video.FPSFraction="FPS kā daļskaitlis"
663
+Basic.Settings.Video.Numerator="Skaitītājs"
664
+Basic.Settings.Video.Denominator="Denominators/saucējs"
665
+Basic.Settings.Video.Renderer="Rendereris"
666
+Basic.Settings.Video.InvalidResolution="Nederīga izšķirtspējas vērtība. Jābūt [platums]x[augstums] (piemēram, 1920x1080)"
667
+Basic.Settings.Video.CurrentlyActive="Video izvads pašlaik ir aktīvs. Lai mainītu video iestatījumus, izslēdziet visus izvadus."
668
+Basic.Settings.Video.DisableAero="Atspējot Aero"
669
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (ātrākais, bet izplūdis, ja mērogo)"
670
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (precīza mērogošana, 16 paraugi)"
671
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (precīza mērogošana, 36 paraugi)"
672
+Basic.Settings.Video.DownscaleFilter.Area="Platība/nogabals (svērtā summa, 4/6/9 paraugi)"
673
+Basic.Settings.Audio.SampleRate="Diskretizācijas frekvence /frekvenčbiežums (sample rate)"
674
+Basic.Settings.Audio.Channels="Kanāli"
675
+Basic.Settings.Audio.Meters="Mērītāji"
676
+Basic.Settings.Audio.MeterDecayRate="Sabrukšanas ātrums"
677
+Basic.Settings.Audio.MeterDecayRate.Fast="Ātrs"
678
+Basic.Settings.Audio.MeterDecayRate.Medium="Vidējs (tips: I PPM)"
679
+Basic.Settings.Audio.MeterDecayRate.Slow="Lēns (tips: II PPM)"
680
+Basic.Settings.Audio.PeakMeterType="Virsotņu skaitītāja tips"
681
+Basic.Settings.Audio.PeakMeterType.SamplePeak="Vienkāršots - Sample Peak"
682
+Basic.Settings.Audio.PeakMeterType.TruePeak="Precīzs - True Peak (augstāka CPU noslodze)"
683
+Basic.Settings.Audio.MultiChannelWarning.Enabled="BRĪDINĀJUMS: Telpiskās skaņas (surround sound) audio ir iespējots."
684
+Basic.Settings.Audio.MultichannelWarning="Straumēšanas gadījumā pārbaudiet, vai straumēšanas pakalpojums atbalsta gan telpiskās skaņas (surround sound) ievadi, gan tās atskaņošanu. Facebook 360 Live ir viens piemērs, kur telpiskā skaņa tiek pilnībā atbalstīta. Lai arī Facebook Live un YouTube Live atbalsta šīs skaņas ievadi, Facebook Live to pārvērš uz stereo, bet YouTube Live atskaņo tikai divus kanālus. \n\nOBS audio filtri ir saderīgi ar telpisko skaņu, lai arī VST spraudņu atbalsts netiek garantēts."
685
+Basic.Settings.Audio.MultichannelWarning.Title="Vai iespējot telpiskās skaņas (surround sound) audio?"
686
+Basic.Settings.Audio.MultichannelWarning.Confirm="Tiešām vēlaties iespējot telpiskās skaņas (surround sound) audio?"
687
+Basic.Settings.Audio.Devices="Globālās audio ierīces"
688
+Basic.Settings.Audio.DesktopDevice="Darbvirsmas audio"
689
+Basic.Settings.Audio.DesktopDevice2="Darbvirsmas audio 2"
690
+Basic.Settings.Audio.AuxDevice="Mic/Aux (mikrofons/papildu) audio"
691
+Basic.Settings.Audio.AuxDevice2="Mic/Aux (mikrofons/papildu) audio 2"
692
+Basic.Settings.Audio.AuxDevice3="Mic/Aux (mikrofons/papildu) audio 3"
693
+Basic.Settings.Audio.AuxDevice4="Mic/Aux (mikrofons/papildu) audio 4"
694
+Basic.Settings.Audio.EnablePushToMute="Iespējot funkciju \"Nospiest, lai noklusinātu mikrofonu\""
695
+Basic.Settings.Audio.PushToMuteDelay="“Nospiest, lai noklusinātu” funkcijas aizture"
696
+Basic.Settings.Audio.EnablePushToTalk="Iespējot funkciju \"Nospiest, lai runātu\""
697
+Basic.Settings.Audio.PushToTalkDelay="“Nospiest, lai runātu” funkcijas aizture"
698
+Basic.Settings.Audio.UnknownAudioDevice="[Ierīce nav pievienota vai nav pieejama]"
699
+Basic.Settings.Audio.Disabled="Atspējots"
700
+Basic.Settings.Advanced="Advancēts"
701
+Basic.Settings.Advanced.General.ProcessPriority="Procesa prioritāte"
702
+Basic.Settings.Advanced.General.ProcessPriority.High="Augsta"
703
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Virs vidējā"
704
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Vidēja"
705
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Zem vidējā"
706
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Zema"
707
+Basic.Settings.Advanced.FormatWarning="Brīdinājums: Citi krāsu formāti, izņemot NV12, galvenokārt ir paredzēti ierakstīšanai, un tie nav ieteicami straumēšanai. Straumēšana var palielināt CPU noslodzi krāsu formāta pārveidošanas dēļ."
708
+Basic.Settings.Advanced.Audio.BufferingTime="Audio bufera ilgums"
709
+Basic.Settings.Advanced.Video.ColorFormat="Krāsu formāts"
710
+Basic.Settings.Advanced.Video.ColorSpace="Krāsu telpa"
711
+Basic.Settings.Advanced.Video.ColorRange="Krāsu diapazons"
712
+Basic.Settings.Advanced.Video.ColorRange.Partial="Daļējs"
713
+Basic.Settings.Advanced.Video.ColorRange.Full="Pilns"
714
+Basic.Settings.Advanced.Audio.MonitoringDevice="Monitoringa/noklausīšanās ierīce"
715
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Noklusējuma"
716
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Atspējot nejēdzīgā Windows audio savienošanu"
717
+Basic.Settings.Advanced.StreamDelay="Straumes aizkave"
718
+Basic.Settings.Advanced.StreamDelay.Duration="Ilgums"
719
+Basic.Settings.Advanced.StreamDelay.Preserve="Saglabāt robežpunktu (palielināt aizkavi), atkārtoti pievienojoties"
720
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Paredzamais atmiņas lietojums: %1 MB"
721
+Basic.Settings.Advanced.Network="Tīkls"
722
+Basic.Settings.Advanced.Network.BindToIP="Piesaiste IP"
723
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Iespējot tīkla optimizāciju"
724
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Iespējot TCP stimulēšanu"
725
+Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Mēģinājumi padarīt RTMP izvadu draudzīgāku citām pret tīkla aizkavi jutīgām programmām, regulējot pārraides ātrumu, \nnestabilos savienojumos var palielināt kadru izkrišanas risku."
726
+Basic.Settings.Advanced.Hotkeys.HotkeyFocusBehavior="Saīsnes fokusa uzvedība"
727
+Basic.Settings.Advanced.Hotkeys.NeverDisableHotkeys="Nekad neatspējot saīsnes"
728
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysInFocus="Atspējot saīsnes, kad galvenais logs ir fokusā"
729
+Basic.Settings.Advanced.Hotkeys.DisableHotkeysOutOfFocus="Atspējot saīsnes, kad galvenais logs nav fokusā"
730
+Basic.Settings.Advanced.AutoRemux="Automātiski remux-ēt uz mp4"
731
+Basic.Settings.Advanced.AutoRemux.MP4="(ierakstīt .mkv formātā)"
732
+Basic.AdvAudio="Advancētie audio rekvizīti"
733
+Basic.AdvAudio.ActiveOnly="Tikai aktīvie avoti"
734
+Basic.AdvAudio.Name="Nosaukums"
735
+Basic.AdvAudio.Volume="Skaļums"
736
+Basic.AdvAudio.VolumeSource="'%1' skaļums"
737
+Basic.AdvAudio.MonoSource="Mono downmiksēt/lejupmaisīt '%1'"
738
+Basic.AdvAudio.Balance="Balanss"
739
+Basic.AdvAudio.BalanceSource="Balanss '%1'"
740
+Basic.AdvAudio.SyncOffset="Sinhronizācijas nobīde"
741
+Basic.AdvAudio.SyncOffsetSource="Sinhronizācijas nobīde '%1'"
742
+Basic.AdvAudio.Monitoring="Audio monitorings"
743
+Basic.AdvAudio.Monitoring.None="Monitors izslēgts"
744
+Basic.AdvAudio.Monitoring.MonitorOnly="Tikai monitorēt (bez skaņas)"
745
+Basic.AdvAudio.Monitoring.Both="Monitorēt ar skaņas izvadi"
746
+Basic.AdvAudio.MonitoringSource="Audio monitorings '%1'"
747
+Basic.AdvAudio.AudioTracks="Celiņi"
748
+Basic.Settings.Hotkeys="Saīsnes"
749
+Basic.Settings.Hotkeys.Pair="Taustiņu kombinācijas, kas kopīgotas ar '%1', darbojas kā pārslēgi"
750
+Basic.Settings.Hotkeys.Filter="Filtrs"
751
+Basic.Hotkeys.SelectScene="Pāriet uz ainu"
752
+Basic.SystemTray.Show="Rādīt"
753
+Basic.SystemTray.Hide="Nerādīt"
754
+Basic.SystemTray.Message.Reconnecting="Atvienojies. Notiek pievienošanās..."
755
+Hotkeys.PageUp="PageUp"
756
+Hotkeys.PageDown="PageDown"
757
+Hotkeys.Backspace="Backspace (atpakaļdzēšana)"
758
+Hotkeys.Print="Print (drukāt)"
759
+Hotkeys.MouseButton="Pele %1"
760
+Mute="Noklusināt"
761
+Unmute="Atjaunot skaņu"
762
+Push-to-mute="Nospiežot noklusināt"
763
+Push-to-talk="Nospiežot ieslēgt skaņu"
764
+SceneItemShow="Rādīt '%1'"
765
+SceneItemHide="Nerādīt '%1'"
766
+OutputWarnings.NoTracksSelected="Jums jāizvēlas vismaz viens celiņš"
767
+OutputWarnings.MP4Recording="Brīdinājums: ierakstus, kas saglabāti MP4/MOV, nebūs iespējams atgūt, ja failu nevarēs pabeigt (piemēram, Windows zilā nāves ekrāna, elektrības zudumu u.c. dēļ). Ja vēlaties ierakstīt vairākus audio celiņus, apsveriet iespēju izmantot MKV un, vajadzības gadījumā, pēcāk ierakstu pārtaisīt/pārkonvertēt uz MP4/MOV (Fails → Remux ieraksti)"
768
+OutputWarnings.CannotPause="Brīdinājums: ierakstus nevar nopauzēt, ja ierakstīšanas enkoders ir iestatīts uz \"(Lietot straumes enkoderi)\""
769
+FinalScene.Title="Dzēst ainu"
770
+FinalScene.Text="Jābūt vismaz vienai ainai."
771
+NoSources.Title="Avotu nav"
772
+NoSources.Text="Šķiet, ka vēl neesat pievienojis nevienu video avotu, tāpēc tiks izvadīts/parādīts tikai tukšs ekrāns. Vēlaties to darīt?"
773
+NoSources.Text.AddSource="Varat pievienot avotus, jebkurā laikā noklikšķinot uz + ikonas lodziņā 'Avoti' galvenajā logā."
774
+NoSources.Label="Jums nav neviena avota. \nNoklikšķiniet uz zemāk esošās pogas +, \n vai arī ar peles labo pogu noklikšķiniet šeit, lai to pievienotu."
775
+ChangeBG="Iestatīt krāsu"
776
+CustomColor="Pielāgota krāsa"
777
+BrowserSource.EnableHardwareAcceleration="Iespējot pārlūka avota aparatūras paātrinājumu"
778
+About="Par"
779
+About.Info="OBS Studio ir brīva un atklātā koda video ierakstīšanas un tiešraides straumēšanas programmatūra."
780
+About.Donate="Sniedziet ieguldījumu/atbalstu"
781
+About.GetInvolved="Iesaistieties"
782
+About.Authors="Autori"
783
+About.License="Licence"
784
+About.Contribute="Atbalstiet OBS projektu"
785
+AddUrl.Title="Pievienot avotu, izmantojot URL"
786
+AddUrl.Text="Jūs esat OBSā ievilcis URL. Tas automātiski pievienos šo saiti kā avotu. Turpināt?"
787
+ResizeOutputSizeOfSource="Izvades izmēra maiņa (avota lielums)"
788
+ResizeOutputSizeOfSource.Text="Bāzes un izvades izšķirtspēja tiks mainīta atbilstoši pašreizējā avota izmēram."
789
+ResizeOutputSizeOfSource.Continue="Vēlaties turpināt?"
790
+PreviewTransition="Priekšskatīt pāreju"
791
+Importer="Ainu kolekcijas importētājs"
792
+Importer.SelectCollection="Izvēlieties ainu kolekciju"
793
+Importer.Collection="Ainu kolekcija"
794
+Importer.HelpText="Pievienojiet failus šim logam, lai importētu kolekcijas no OBS vai citām atbalstītajām programmām."
795
+Importer.Path="Kolekcijas ceļš"
796
+Importer.Program="Identificētā programma"
797
+Importer.AutomaticCollectionPrompt="Automātiski meklēt ainu kolekcijas"
798
+Importer.AutomaticCollectionText="OBS var automātiski atrast importējamas ainu kolekcijas no atbalstītās trešo personu programmatūras. Vai vēlaties, lai OBS automātiski atrastu kolekcijas jūsu vietā? \n\nVarat šo vēlāk mainīt izvēlnē Iestatījumi> Vispārīgi> Importētāji."
799
+Restart="Restarts"
800
+NeedsRestart="OBS Studija ir jāpārlaiž. Vai vēlaties pārlaist tūlīt?"
801
+ContextBar.NoSelectedSource="Nav neviena avota"
802
+ContextBar.ResetTransform="Atstatīt transformēšanu"
803
+ContextBar.FitToCanvas="Pielāgot kanvām"
804
+ContextBar.MediaControls.PlayMedia="Spēlēt mediju"
805
+ContextBar.MediaControls.PauseMedia="Pauzēt mediju"
806
+ContextBar.MediaControls.StopMedia="Apturēt (stopēt) mediju"
807
+ContextBar.MediaControls.RestartMedia="Pārlaist mediju"
808
+ContextBar.MediaControls.PlaylistNext="Nākošais spēlējamo sarakstā"
809
+ContextBar.MediaControls.PlaylistPrevious="Iepriekšējais spēlējamo sarakstā"
810
+ContextBar.MediaControls.MediaProperties="Medija rekvizīti"
811
+ContextBar.MediaControls.BlindSeek="Medija pārtīšanas vidžets"
812
+YouTube.Actions.ScheduleForLater="Ieplānot spēlēt vēlāk"
813
+YouTube.Actions.Error.Title="Tiešraides izveides kļūme"
814
+YouTube.Actions.Error.Text="YouTube piekļuves kļūme '%1'. <br/> Detalizētu kļūdas aprakstu var atrast vietnē <a href='https://developers.google.com/youtube/v3/live/docs/errors'> https://developers.google.com/youtube/v3/live/docs/errors </a>"
815
+YouTube.Actions.Error.NoBroadcastCreated="Apraides izveides kļūme '%1'. <br/> Detalizētu kļūmes aprakstu var atrast vietnē <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors </a>"
816
+YouTube.Actions.EventCreated.Title="Notikums izveidots"
817
+YouTube.Actions.EventCreated.Text="Notikums sekmīgi izveidots."
818
+YouTube.Actions.Stream="Straumi"
819
+YouTube.Actions.Notify.CreatingBroadcast="Notiek jaunas tiešraides izveide, lūdzu, uzgaidiet ..."
820
obs-studio-27.0.1.tar.xz/UI/data/locale/ms-MY.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ms-MY.ini Changed
260
 
1
@@ -93,7 +93,7 @@
2
 AlreadyRunning.Text="OBS sedang dijalankan! Melainkan anda mahu membuatnya, sila matikan apa jua kejadian OSB sebelum cuba menjalankan kejadian yang baharu. Jika anda telah menetapkan OBS terus diminimumkan ke dalam talam sistem, sila periksa sama ada ia masih ada di sana."
3
 AlreadyRunning.LaunchAnyway="Lancar Jua"
4
 ChromeOS.Title="Platform Tidak Disokong"
5
-ChromeOS.Text="OBS nampaknya telah berjalan di dalam satu bekas ChromeOS. Platform ini malangnya tidak disokong."
6
+ChromeOS.Text="OBS nampaknya telah berjalan di dalam satu bekas ChromeOS. Platform ini malangnya tidak disokong"
7
 DockCloseWarning.Title="Menutup Tetingkap Boleh Labuh"
8
 DockCloseWarning.Text="Anda baru sahaja menutup satu tetingkap boleh labuh. Jika anda mahu tunjuk ia sekali lagi, guna menu View → Labuh dalam palang menu."
9
 ExtraBrowsers="Labuh Pelayar Suai"
10
@@ -107,6 +107,7 @@
11
 Auth.InvalidScope.Text="Keperluan pengesahihan untuk %1 telah berubah. Sesetengah fitur mungkin tidak tersedia."
12
 Auth.LoadingChannel.Title="Memuatkan maklumat saluran..."
13
 Auth.LoadingChannel.Text="Memuatkan maklumat saluran untuk %1, tunggu sebentar..."
14
+Auth.LoadingChannel.Error="Tidak memperoleh maklumat saluran."
15
 Auth.ChannelFailure.Title="Gagal memuatkan saluran"
16
 Auth.ChannelFailure.Text="Gagal memuatkan maklumat saluran untuk %1\n\n%2: %3"
17
 Auth.Chat="Sembang"
18
@@ -148,6 +149,7 @@
19
 Basic.AutoConfig.StreamPage.GetStreamKey="Dapatkan Kunci Strim"
20
 Basic.AutoConfig.StreamPage.MoreInfo="Maklumat Lanjut"
21
 Basic.AutoConfig.StreamPage.UseStreamKey="Guna Kunci Strim"
22
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Guna Kunci Strim (lanjutan)"
23
 Basic.AutoConfig.StreamPage.Service="Perkhidmatan"
24
 Basic.AutoConfig.StreamPage.Service.ShowAll="Tunjuk Semua..."
25
 Basic.AutoConfig.StreamPage.Service.Custom="Suai..."
26
@@ -155,6 +157,7 @@
27
 Basic.AutoConfig.StreamPage.StreamKey="Kunci Strim"
28
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Pautan)"
29
 Basic.AutoConfig.StreamPage.EncoderKey="Kunci Pengekod"
30
+Basic.AutoConfig.StreamPage.ConnectedAccount="Akaun bersambung"
31
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Anggar kadar bit menerusi ujian lebar jalur (ia mengambil masa beberapa minit)"
32
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Utamakan pengekodan perkakasan"
33
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Pengekodan Perkakasan mengelakkan penggunaan CPU yang banyak, tetapi mungkin memerlukan lebih kadar bit untuk memperolehi tahap kualiti yang serupa."
34
@@ -177,7 +180,7 @@
35
 Basic.AutoConfig.TestPage.Result.Header="Program telah menentukan tetapan anggaran ini adalah sesuai untuk anda:"
36
 Basic.AutoConfig.TestPage.Result.Footer="Untuk menggunakan tetapan ini, klik Terap Tetapan. Untuk mengkonfigur semula bestari dan cuba sekali lagi, klik Undur. Untuk mengkonfigur tetapan secara manual, klik Batal dan buka Tetapan."
37
 Basic.AutoConfig.Info="Bestari auto-konfigurasi akan menentukan tetapan terbaik berdasarkan spesifikasi komputer dan kelajuan internet anda."
38
-Basic.AutoConfig.RunAnytime="Proses ini boleh dijalankan bila-bila masa melalui menu Alat"
39
+Basic.AutoConfig.RunAnytime="Proses ini boleh dijalankan bila-bila masa melalui menu Alat."
40
 Basic.Stats="Statistik"
41
 Basic.Stats.CPUUsage="Penggunaan CPU"
42
 Basic.Stats.HDDSpaceAvailable="Ruang cakera yang ada"
43
@@ -284,7 +287,7 @@
44
 ConfirmStop.Text="Anda pasti mahu menghentikan strim?"
45
 ConfirmStopRecord.Title="Henti Rakaman?"
46
 ConfirmStopRecord.Text="Anda pasti mahu menghentikan rakaman?"
47
-ConfirmBWTest.Title="Mula Ujian Lebar Jalur"
48
+ConfirmBWTest.Title="Mula Ujian Lebar Jalur?"
49
 ConfirmBWTest.Text="OBS anda telah dikonfigur dalam mod ujian lebar jalur. Mod ini membolehkan pengujian rangkaian tanpa saluran anda bersiaran langsung. Setelah selesai menguji, anda perlu lumpuhkannya supaya para penonton dapat melihat strim anda.\n\nAnda pasti mahu teruskan?"
50
 ConfirmExit.Title="Keluar dari OBS?"
51
 ConfirmExit.Text="OBS buat masa ini masih aktif. Semua stri/rakaman akan dimatikan. Anda pasti mahu keluar?"
52
@@ -301,10 +304,10 @@
53
 Output.ConnectFail.BadPath="Laluan atau URL Sambungan tidak sah. Sila periksa tetapan anda untuk mengesahkannya."
54
 Output.ConnectFail.ConnectFailed="Gagal bersambung dengan pelayan"
55
 Output.ConnectFail.InvalidStream="Tidak dapat mencapai saluran atau kunci strim yang dinyatakan, sila semak semula kunci strim anda. Jika ia betul, kemungkinan ada masalah sambungan dengan pelayan."
56
-Output.ConnectFail.Error="satu ralat tidak dijangka berlaku ketika cuba bersambung dengan pelayan. Maklumat lanjut ada dalam fail log."
57
+Output.ConnectFail.Error="Satu ralat tidak dijangka berlaku ketika cuba bersambung dengan pelayan. Maklumat lanjut ada dalam fail log."
58
 Output.ConnectFail.Disconnected="Terputus dengan pelayan."
59
 Output.StreamEncodeError.Title="Ralat pengekodan"
60
-Output.StreamEncodeError.Msg="Satu ralat pengekod telah muncul ketika menstrim"
61
+Output.StreamEncodeError.Msg="Satu ralat pengekod telah muncul ketika menstrim."
62
 Output.RecordFail.Title="Gagal memulakan rakaman"
63
 Output.RecordFail.Unsupported="Format output sama ada tidak disokong atau tidak menyokong lebih daripada satu trek audio. Sila semak tetapan anda dan cuba lagi."
64
 Output.RecordNoSpace.Title="Ruang cakera tidak mencukupi"
65
@@ -314,6 +317,8 @@
66
 Output.RecordError.EncodeErrorMsg="Satu ralat pengekod telah muncul ketika merakam."
67
 Output.BadPath.Title="Laluan Fail Teruk"
68
 Output.BadPath.Text="Laluan output fail yang terkonfigur tidak sah. Sila semak tetapan anda untuk mengesahkan satu laluan fail yang sah telah ditetapkan."
69
+Output.NoBroadcast.Title="Tiada Siaran Dikonfigur"
70
+Output.NoBroadcast.Text="Anda perlu sediakan siaran sebelum anda boleh memulakan penstriman."
71
 LogReturnDialog="Muat Naik Log Berjaya"
72
 LogReturnDialog.Description="Fail log anda telah dimuat naik. Anda kini boleh berkongsi URL untuk tujuan penyahpepijatan atau sokongan."
73
 LogReturnDialog.Description.Crash="Laporan kerosakan anda telah dimuat naik. Anda kini boleh berkongsi URL untuk tujuan penyahpepijatan."
74
@@ -352,6 +357,8 @@
75
 MissingFiles.Found="Temui"
76
 MissingFiles.AutoSearch="Padanan fail tambahan ditemui"
77
 MissingFiles.AutoSearchText="OBS telah menemui padanan-padanan tambahan bagi fail-fail hilang dalam direktori tersebut. Anda mahu menambahnya?"
78
+MissingFiles.NoMissing.Title="Semakan Fail Hilang"
79
+MissingFiles.NoMissing.Text="Tiada fail yang hilang."
80
 UpdateAvailable="Kemas Kini Baharu Telah Tersedia"
81
 UpdateAvailable.Text="Versi %1.%2.%3 kini sudah tersedia. <a href='%4'>Klik di sini untuk muat turun</a>"
82
 Basic.DesktopDevice1="Audio Atas Meja"
83
@@ -412,6 +419,8 @@
84
 Basic.PropertiesView.FPS.Simple="Nilai-nilai FPS mudah"
85
 Basic.PropertiesView.FPS.Rational="Nilai-nilai FPS Pecahan"
86
 Basic.PropertiesView.FPS.ValidFPSRanges="Julat FPS Sah:"
87
+Basic.PropertiesView.UrlButton.Text="Buka pautan ini dalam pelayar sesawang lalai anda?"
88
+Basic.PropertiesView.UrlButton.OpenUrl="Buka URL"
89
 Basic.InteractionWindow="Berinteraksi dengan '%1'"
90
 Basic.StatusBar.Reconnecting="Terputus, bersambung semula dalam tempoh %2 saat(percubaan %1)"
91
 Basic.StatusBar.AttemptingReconnect="Cubaan menyambung semula... (percubaan %1)"
92
@@ -466,6 +475,8 @@
93
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skala ke lebar batas"
94
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skala ke tinggi batas"
95
 Basic.TransformWindow.BoundsType.Stretch="Regang ikut batas"
96
+Basic.TransformWindow.Title="Sunting Jelmaan untuk '%1'"
97
+Basic.TransformWindow.NoSelectedSource="Tiada sumber dipilih"
98
 Basic.Main.AddSourceHelp.Title="Tidak Dapat Tambah Sumber"
99
 Basic.Main.AddSourceHelp.Text="Anda perlu mempunyai sekurang-kurangnya 1 adegan untuk menambah satu sumber."
100
 Basic.Main.Scenes="Adegan"
101
@@ -484,8 +495,11 @@
102
 Basic.Main.StoppingRecording="Menghentikan Rakaman..."
103
 Basic.Main.StopReplayBuffer="Henti Penimbal Main Semula"
104
 Basic.Main.StoppingReplayBuffer="Menghentikan Penimbal Main Semula..."
105
+Basic.Main.SetupBroadcast="Urus Siaran"
106
 Basic.Main.StopStreaming="Henti Menstrim"
107
-Basic.Main.StoppingStreaming="Menghentikan Penstriman"
108
+Basic.Main.StopBroadcast="Henti Siaran"
109
+Basic.Main.AutoStopEnabled="(Auto Henti)"
110
+Basic.Main.StoppingStreaming="Menghentikan Penstriman..."
111
 Basic.Main.ForceStopStreaming="Henti Menstrim (singkir lengah)"
112
 Basic.Main.ShowContextBar="Tunjuk Palang Alat Sumber"
113
 Basic.Main.HideContextBar="Sembunyi Palang Alat Sumber"
114
@@ -498,39 +512,40 @@
115
 Basic.MainMenu.File="&Fail"
116
 Basic.MainMenu.File.Export="&Eksport"
117
 Basic.MainMenu.File.ShowRecordings="Tunjuk &Rakaman"
118
-Basic.MainMenu.File.Remux="For&matrakaman"
119
-Basic.MainMenu.File.Settings="Tetapan (&S)"
120
+Basic.MainMenu.File.Remux="For&mat Rakaman"
121
+Basic.MainMenu.File.Settings="T&etapan"
122
 Basic.MainMenu.File.ShowSettingsFolder="Tunjuk Folder Tetapan"
123
 Basic.MainMenu.File.ShowProfileFolder="Tunjuk Folder Profil"
124
+Basic.MainMenu.File.ShowMissingFiles="Periksa Fail yang Hilang"
125
 Basic.MainMenu.AlwaysOnTop="Senti&asa Di Atas"
126
 Basic.MainMenu.File.Exit="&Keluar"
127
-Basic.MainMenu.Edit="Sunting (&E)"
128
+Basic.MainMenu.Edit="&Sunting"
129
 Basic.MainMenu.Edit.Undo="Buat &Asal"
130
 Basic.MainMenu.Edit.Redo="Buat &Semula"
131
 Basic.MainMenu.Edit.UndoAction="Buat &Asal $1"
132
-Basic.MainMenu.Edit.RedoAction="Ubah Semula $1 (&R)"
133
-Basic.MainMenu.Edit.LockPreview="Kunci Pratonton (&L)"
134
+Basic.MainMenu.Edit.RedoAction="Buat &Semula $1"
135
+Basic.MainMenu.Edit.LockPreview="&Kunci Pratonton"
136
 Basic.MainMenu.Edit.Scale="Pratonton Pen&skalaan"
137
 Basic.MainMenu.Edit.Scale.Window="Skala ikut Tetingkap"
138
 Basic.MainMenu.Edit.Scale.Canvas="Kanvas (%1x%2)"
139
-Basic.MainMenu.Edit.Transform="Ubah (&T)"
140
-Basic.MainMenu.Edit.Transform.EditTransform="Sunting P&erubahan..."
141
+Basic.MainMenu.Edit.Transform="&Jelma"
142
+Basic.MainMenu.Edit.Transform.EditTransform="&Sunting Jelmaan..."
143
 Basic.MainMenu.Edit.Transform.CopyTransform="Salin Jelmaan"
144
 Basic.MainMenu.Edit.Transform.PasteTransform="Tampal Jelmaan"
145
 Basic.MainMenu.Edit.Transform.ResetTransform="T&etap Semula Jelmaan"
146
 Basic.MainMenu.Edit.Transform.Rotate90CW="Putar 90 darjah Ikut Jam"
147
 Basic.MainMenu.Edit.Transform.Rotate90CCW="Putar 90 darjah Lawan Jam"
148
 Basic.MainMenu.Edit.Transform.Rotate180="Putar 180 darjah"
149
-Basic.MainMenu.Edit.Transform.FlipHorizontal="Flip secara Mendatar (&H)"
150
-Basic.MainMenu.Edit.Transform.FlipVertical="Flip secara Menegak (&V)"
151
-Basic.MainMenu.Edit.Transform.FitToScreen="Muat di skrin (&F)"
152
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Kalih Men&gufuk"
153
+Basic.MainMenu.Edit.Transform.FlipVertical="Kalih Meneg&ak"
154
+Basic.MainMenu.Edit.Transform.FitToScreen="Suai &Muat dengan Skrin"
155
 Basic.MainMenu.Edit.Transform.StretchToScreen="Regangkan ke &skrin"
156
 Basic.MainMenu.Edit.Transform.CenterToScreen="&Tengah skrin"
157
 Basic.MainMenu.Edit.Transform.VerticalCenter="Tengah secara Menegak"
158
 Basic.MainMenu.Edit.Transform.HorizontalCenter="Tengah secara Mengufuk"
159
 Basic.MainMenu.Edit.Order="Te&rtib"
160
-Basic.MainMenu.Edit.Order.MoveUp="Gerakkan ke atas (&U)"
161
-Basic.MainMenu.Edit.Order.MoveDown="Gerakkan ke bawah (&D)"
162
+Basic.MainMenu.Edit.Order.MoveUp="Alih ke &Atas"
163
+Basic.MainMenu.Edit.Order.MoveDown="Alih ke &Bawah"
164
 Basic.MainMenu.Edit.Order.MoveToTop="Alih ke Te&ratas"
165
 Basic.MainMenu.Edit.Order.MoveToBottom="Alih ke Ter&bawah"
166
 Basic.MainMenu.Edit.AdvAudio="Sifat-sifat Audio L&anjutan"
167
@@ -560,10 +575,10 @@
168
 Basic.MainMenu.Help.Website="Lawati Tapak Sesa&wang"
169
 Basic.MainMenu.Help.Discord="Sertai Pelayan &Discord"
170
 Basic.MainMenu.Help.Logs="Fail &Log"
171
-Basic.MainMenu.Help.Logs.ShowLogs="Tunjukkan Fail-Fail Log (&S)"
172
-Basic.MainMenu.Help.Logs.UploadCurrentLog="Muat naik Fail Log Kini (&C)"
173
-Basic.MainMenu.Help.Logs.UploadLastLog="Muat naik Fai&l Log Terakhir"
174
-Basic.MainMenu.Help.Logs.ViewCurrentLog="Paparkan Log Semasa (&V)"
175
+Basic.MainMenu.Help.Logs.ShowLogs="&Tunjuk Fail Log"
176
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Muat &Naik Fail Log Semasa"
177
+Basic.MainMenu.Help.Logs.UploadLastLog="Muat Naik &Fail Log Terakhir"
178
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Lihat Log Semasa"
179
 Basic.MainMenu.Help.CheckForUpdates="Periksa Kemas Kini"
180
 Basic.MainMenu.Help.CrashLogs="&Laporan Kerosakan"
181
 Basic.MainMenu.Help.CrashLogs.ShowLogs="&Tunjuk Laporan Kerosakan"
182
@@ -614,6 +629,7 @@
183
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Mengufuk, Bawah (8 Adegan)"
184
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Menegak, Kiri (8 Adegan)"
185
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Menegak, Kanan (8 Adegan)"
186
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Mengufuk, Atas (18 Adegan)"
187
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Menegak, Atas (24 Adegan)"
188
 Basic.Settings.Stream="Strim"
189
 Basic.Settings.Stream.StreamType="Jenis Strim"
190
@@ -894,3 +910,69 @@
191
 ContextBar.MediaControls.PlaylistPrevious="Terdahulu dalam Senarai Main"
192
 ContextBar.MediaControls.MediaProperties="Sifat-sifat Media"
193
 ContextBar.MediaControls.BlindSeek="Widget Jangkau Media"
194
+YouTube.Auth.Ok="Pengesahihan berjaya diselesaikan.\nAnda boleh tutup halaman ini sekarang."
195
+YouTube.Auth.NoCode="Proses pengesahihan tidak selesai."
196
+YouTube.Auth.NoChannels="Tiada saluran tersedia untuk akaun terpilih"
197
+YouTube.Auth.WaitingAuth.Title="Keizinan Pengguna YouTube"
198
+YouTube.Auth.WaitingAuth.Text="Sila selesaikan keizinan dalam pelayar luar anda.<br>Jika pelayar luar tidak dibuka, ikut pautan ini dan selesaikan keizinan:<br>%1"
199
+YouTube.AuthError.Text="Gagal mendapatkan maklumat saluran: %1."
200
+YouTube.Actions.WindowTitle="Persediaan Siaran YouTube - Saluran: %1"
201
+YouTube.Actions.CreateNewEvent="Cipta Siaran Baharu"
202
+YouTube.Actions.ChooseEvent="Pilih Siaran Sedia Ada"
203
+YouTube.Actions.Title="Tajuk*"
204
+YouTube.Actions.MyBroadcast="Siaran Saya"
205
+YouTube.Actions.Description="Keterangan"
206
+YouTube.Actions.Privacy="Privasi*"
207
+YouTube.Actions.Privacy.Private="Peribadi"
208
+YouTube.Actions.Privacy.Public="Awam"
209
+YouTube.Actions.Privacy.Unlisted="Tidak tersenarai"
210
+YouTube.Actions.Category="Kategori"
211
+YouTube.Actions.Thumbnail="Imej Kenit"
212
+YouTube.Actions.Thumbnail.SelectFile="Pilih fail..."
213
+YouTube.Actions.Thumbnail.NoFileSelected="Tiada fail dipilih"
214
+YouTube.Actions.Thumbnail.ClearFile="Kosongkan"
215
+YouTube.Actions.MadeForKids="Adakah video untuk dihasilkan untuk tontonan kanak-kanak?*"
216
+YouTube.Actions.MadeForKids.Yes="Ya, ia khusus untuk kanak-kanak"
217
+YouTube.Actions.MadeForKids.No="Tidak, bukan untuk tontonan kanak-kanak"
218
+YouTube.Actions.AdditionalSettings="Tetapan tambahan:"
219
+YouTube.Actions.Latency="Kependaman"
220
+YouTube.Actions.Latency.Normal="Biasa"
221
+YouTube.Actions.Latency.Low="Rendah"
222
+YouTube.Actions.Latency.UltraLow="Teramat rendah"
223
+YouTube.Actions.EnableAutoStart="Benarkan Auto-mula"
224
+YouTube.Actions.EnableAutoStop="Benarkan Auto-henti"
225
+YouTube.Actions.AutoStartStop.TT="Menunjukkan sama ada siaran berjadual ini patut dimulakan secara automatik"
226
+YouTube.Actions.EnableDVR="Benarkan DVR"
227
+YouTube.Actions.360Video="Video 360"
228
+YouTube.Actions.ScheduleForLater="Dijadualkan kemudian"
229
+YouTube.Actions.RememberSettings="Ingat tetapan ini"
230
+YouTube.Actions.Create_Ready="Cipta siaran"
231
+YouTube.Actions.Create_GoLive="Cipta siaran dan mulakan penstriman"
232
+YouTube.Actions.Choose_Ready="Pilih siaran"
233
+YouTube.Actions.Choose_GoLive="Pilih siaran dan mulakan penstriman"
234
+YouTube.Actions.Create_Schedule="Jadualkan siaran"
235
+YouTube.Actions.Create_Schedule_Ready="Jadualkan dan pilih siaran"
236
+YouTube.Actions.Dashboard="Buka YouTube Studio"
237
+YouTube.Actions.Error.Title="Ralat penciptaan siaran langsung"
238
+YouTube.Actions.Error.Text="Ralat capaian YouTube '%1'.<br/>Keterangan terperinci ralat boleh ditemui di <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
239
+YouTube.Actions.Error.General="Ralat capaian YouTube. Sila periksa sambungan rangkaian anda atau capaian pelayan YouTube anda."
240
+YouTube.Actions.Error.NoBroadcastCreated="Ralat penciptaan siaran '%1'.<br/>Keterangan terperinci boleh ditemui di <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
241
+YouTube.Actions.Error.NoStreamCreated="Tiada strim dicipta. Sila paut semula akaun anda."
242
+YouTube.Actions.Error.YouTubeApi="Ralat API YouTube. Sila lihat fail log untuk maklumat lanjut."
243
+YouTube.Actions.Error.BroadcastNotFound="Siaran terpilih tidak ditemui."
244
+YouTube.Actions.Error.FileMissing="Fail terpilih tidak wujud."
245
+YouTube.Actions.Error.FileOpeningFailed="Gagal membuka fail terpilih."
246
+YouTube.Actions.Error.FileTooLarge="Fail terpilih terlalu besar (Had: 2 MiB)."
247
+YouTube.Actions.EventsLoading="Memuatkan senarai acara..."
248
+YouTube.Actions.EventCreated.Title="Acara Dicipta"
249
+YouTube.Actions.EventCreated.Text="Acara berjaya dicipta."
250
+YouTube.Actions.Stream="Strim"
251
+YouTube.Actions.Stream.ScheduledFor="Dijadualkan untuk %1"
252
+YouTube.Actions.Stream.Resume="Sambung semula strim disampuk"
253
+YouTube.Actions.Stream.YTStudio="Dicipta secara automatik oleh YouTube Studio"
254
+YouTube.Actions.Notify.CreatingBroadcast="Mencipta satu Siaran Langsung baharu, tunggu sebentar..."
255
+YouTube.Actions.AutoStartStreamingWarning.Title="Permulaan manual diperlukan"
256
+YouTube.Actions.AutoStartStreamingWarning="Auto-mula dilumpuhkan untuk acara ini, klik \"Go Live\" untuk memulakan siaran anda."
257
+YouTube.Actions.AutoStopStreamingWarning="Anda tidak dapat menyambung semula.<br>Stream anda akan terhenti dan anda tidak dapat bersiaran langsung lagi."
258
+YouTube.Errors.liveStreamingNotEnabled="Penstriman langsung tidak dibenarkan untuk saluran YouTube terpilih.<br/><br/>Sila rujuk <a href='https://www.youtube.com/features'>youtube.com/features</a> untuk maklumat lanjut."
259
+YouTube.Errors.livePermissionBlocked="Penstriman langsung tidak tersedia untuk Saluran YouTube terpilih.<br/>Penstriman langsung mengambil masa sehingga 24 jam setelah dibenarkan dalam tetapan saluran anda.<br/><br/>Sila rujuk <a href='https://www.youtube.com/features'>youtube.com/features</a> untuk perincian mengenainya."
260
obs-studio-27.0.1.tar.xz/UI/data/locale/my-MM.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/my-MM.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
+Language="မြန်မာဘာသာ"
3
 OK="ဟုတ်"
4
 Apply="လုပ်ဆောင်ပါ"
5
 Cancel="ပယ်ဖျက်ပါ"
6
obs-studio-27.0.1.tar.xz/UI/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/nb-NO.ini Changed
390
 
1
@@ -11,7 +11,7 @@
2
 Add="Legg til"
3
 Remove="Fjern"
4
 Rename="Gi nytt navn"
5
-Interact="Tilpass"
6
+Interact="Samhandle"
7
 Filters="Filtre"
8
 Properties="Egenskaper"
9
 MoveUp="Flytt opp"
10
@@ -28,9 +28,9 @@
11
 SceneProjector="Fullskjermsprojektor (scene)"
12
 SourceProjector="Fullskjermprojektor (kilde)"
13
 StudioProgramWindow="Projektorvindu (Program)"
14
-PreviewWindow="Projektor i vindu (forhåndsvisning)"
15
-SceneWindow="Projektor i vindu (scene)"
16
-SourceWindow="Projektor i vindu (kilde)"
17
+PreviewWindow="Projektorvindu (forhåndsvisning)"
18
+SceneWindow="Projektorvindu (scene)"
19
+SourceWindow="Projektorvindu (kilde)"
20
 MultiviewProjector="Flervisning (Fullskjerm)"
21
 MultiviewWindowed="Flervisning (Vindu)"
22
 ResizeProjectorWindowToContent="Tilpass vindu til innhold"
23
@@ -47,8 +47,8 @@
24
 ResetOSXVSyncOnExit="Tilbakestill macOS sin V-sync ved avslutning"
25
 HighResourceUsage="Koderen er overbelastet! Vurder nedjustering av videokvaliteten eller en raskere forhåndsinnstilling for koderen."
26
 Transition="Overgang"
27
-QuickTransitions="Raske overganger"
28
-FadeToBlack="Falme til svart"
29
+QuickTransitions="Hurtig overganger"
30
+FadeToBlack="Ton til svart"
31
 Left="Venstre"
32
 Right="Høyre"
33
 Top="Topp"
34
@@ -68,15 +68,17 @@
35
 RemuxRecordings="Remux Opptak"
36
 Next="Neste"
37
 Back="Tilbake"
38
-Defaults="Standardinnstillinger"
39
+Defaults="Standard"
40
 HideMixer="Skjul i mikser"
41
-TransitionOverride="Overgangsoverkjøring"
42
+TransitionOverride="Overstyr overgang"
43
+ShowTransition="Vis overgang"
44
+HideTransition="Skjul overgang"
45
 None="Ingen"
46
 StudioMode.Preview="Forhåndsvisning"
47
 ShowInMultiview="Vis i flervisningen"
48
 VerticalLayout="Loddrett oppsett"
49
 Group="Gruppe"
50
-DoNotShowAgain="Ikke vis denne igjen"
51
+DoNotShowAgain="Ikke vis igjen"
52
 Default="(Standard)"
53
 Calculating="Kalkulerer..."
54
 Fullscreen="Fullskjerm"
55
@@ -90,7 +92,7 @@
56
 OpenFile="Åpne fil"
57
 AddValue="Legg til %1"
58
 AlreadyRunning.Title="OBS kjører allerede"
59
-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."
60
+AlreadyRunning.Text="OBS kjører allerede! Hvis dette ikke var bevisst, vennligst lukk alle eksisterende kjørende tilfeller av OBS før du kjører noen nye. Hvis du har satt OBS til å minimere til oppgavelinjen, vennligst sjekk om den fortsatt kjører der."
61
 AlreadyRunning.LaunchAnyway="Start uansett"
62
 ChromeOS.Title="Usupportert platform"
63
 ChromeOS.Text="OBS ser ut til å kjøre i en ChromeOS kontainer. Denne platformen er ikke supportert"
64
@@ -107,6 +109,7 @@
65
 Auth.InvalidScope.Text="Autentiseringskravene til %1 har blitt forandret. Noen egenskaper vil kanskje ikke være tilgjengelige."
66
 Auth.LoadingChannel.Title="Laster informasjon om kanalen..."
67
 Auth.LoadingChannel.Text="Laster kanalinformasjon for %1, vennligst vent..."
68
+Auth.LoadingChannel.Error="Fikk ikke tak i kanalinformasjonen."
69
 Auth.ChannelFailure.Title="Mislyktes i å laste inn kanalen"
70
 Auth.ChannelFailure.Text="Mislyktes i å laste ned kanalinformasjon om %1\n\n%2: %3"
71
 Auth.Chat="Nettprat"
72
@@ -147,12 +150,15 @@
73
 Basic.AutoConfig.StreamPage.GetStreamKey="Få strømmenøkkel"
74
 Basic.AutoConfig.StreamPage.MoreInfo="Mer informasjon"
75
 Basic.AutoConfig.StreamPage.UseStreamKey="Bruk strømmenøkkel"
76
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Bruk strømmenøkkel (avansert)"
77
 Basic.AutoConfig.StreamPage.Service="Tjeneste"
78
 Basic.AutoConfig.StreamPage.Service.ShowAll="Vis alle..."
79
 Basic.AutoConfig.StreamPage.Service.Custom="Egendefinert …"
80
 Basic.AutoConfig.StreamPage.Server="Tjener"
81
 Basic.AutoConfig.StreamPage.StreamKey="Strømmenøkkel"
82
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Lenke)"
83
+Basic.AutoConfig.StreamPage.EncoderKey="Enkoder nøkkel"
84
+Basic.AutoConfig.StreamPage.ConnectedAccount="Tilkobla konto"
85
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Beregn bitfrekvensen med en båndbreddetest (Kan ta noen minutter)"
86
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Foretrekk maskinvarekoding"
87
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Maskinvarekoding reduserer mesteparten av CPU-bruken, men kan kreve mer bitrate for å få samme nivå av kvalitet."
88
@@ -222,6 +228,52 @@
89
 Basic.SceneTransitions="Sceneoverganger"
90
 Basic.TransitionDuration="Varighet"
91
 Basic.TogglePreviewProgramMode="Studiomodus"
92
+Undo.Undo="Angre"
93
+Undo.Redo="Gjør om"
94
+Undo.Add="Legg til \"%1\""
95
+Undo.Delete="Slett \"%1\""
96
+Undo.Rename="Gi nytt navn '%1'"
97
+Undo.SceneCollection.Switch="Bytt til '%1'"
98
+Undo.Item.Undo="Angre %1"
99
+Undo.Item.Redo="Gjør om %1"
100
+Undo.Sources.Multi="Slett %1 Kilder"
101
+Undo.Filters="Filtrer endringer på '%1'"
102
+Undo.Filters.Paste.Single="Lim inn filter '%1' til '%2'"
103
+Undo.Filters.Paste.Multiple="Kopier filtre fra '%1' til '%2'"
104
+Undo.Transform="Omform kilde(r) i '%1'"
105
+Undo.Transform.Paste="Lim in Omforming i '%1'"
106
+Undo.Transform.Rotate="Rotering i '%1'"
107
+Undo.Transform.Reset="Tilbakestill transformering i '%1'"
108
+Undo.Transform.HFlip="Snu horisontalt i '%1'"
109
+Undo.Transform.VFlip="Snu vertikalt i '%1'"
110
+Undo.Transform.FitToScreen="Tilpass til skjermen i '%1'"
111
+Undo.Transform.StretchToScreen="Strekk til skjerm i '%1'"
112
+Undo.Transform.Center="Midtstill til skjerm i '%1'"
113
+Undo.Transform.VCenter="Sentrer vertikalt til skjerm i '%1'"
114
+Undo.Transform.HCenter="Sentrer horisontalt til skjerm i '%1'"
115
+Undo.Volume.Change="Volum endring i '%1'"
116
+Undo.Volume.Mute="Demp '%1'"
117
+Undo.Volume.Unmute="Skru av demping '%1'"
118
+Undo.Balance.Change="Lydbalanse endring i '%1'"
119
+Undo.SyncOffset.Change="Lyd synkroniseringsforskyvning på '%1'"
120
+Undo.MonitoringType.Change="Endre Lydovervåking i '%1'"
121
+Undo.Mixers.Change="Endre lydmikser i '%1'"
122
+Undo.ForceMono.On="Aktiver tvungen mono på '%1'"
123
+Undo.ForceMono.Off="Deaktiver tvungen mono på '%1'"
124
+Undo.Properties="Endring av egenskap i '%1'"
125
+Undo.Scene.Duplicate="Dupliser scene '%1'"
126
+Undo.ShowTransition="Vis overgang på '%1'"
127
+Undo.HideTransition="Skjul overgang på '%1'"
128
+Undo.ShowSceneItem="Vis '%1' i '%2'"
129
+Undo.HideSceneItem="Skjul '%1' i '%2'"
130
+Undo.ReorderSources="Omorganiser kilder i '%1'"
131
+Undo.MoveUp="Flytt '%1' opp i '%2'"
132
+Undo.MoveDown="Flytt '%1 ned i '%2'"
133
+Undo.MoveToTop="Flytt '%1' til toppen i '%2'"
134
+Undo.MoveToBottom="Flytt '%1' til bunnen i '%2'"
135
+Undo.PasteSource="Lim inn kilde(r) i '%1'"
136
+Undo.PasteSourceRef="Lim inn kildereferanse(r) i '%1'"
137
+Undo.GroupItems="Grupper elementer i '%1'"
138
 TransitionNameDlg.Text="Gi et navn til overgangen"
139
 TransitionNameDlg.Title="Overgangsnavn"
140
 TitleBar.Profile="Profil"
141
@@ -304,6 +356,9 @@
142
 MissingFiles.Cleared="Ryddet"
143
 MissingFiles.Found="Funnet"
144
 MissingFiles.AutoSearch="Ytterligere samsvarende filer funnet."
145
+MissingFiles.AutoSearchText="OBS har funnet flere treff for manglende filer i den mappen. Ønsker du å legge de til?"
146
+MissingFiles.NoMissing.Title="Sjekk for manglende filer"
147
+MissingFiles.NoMissing.Text="Ingen filer ser ut til å mangle."
148
 UpdateAvailable="Ny oppdatering tilgjengelig"
149
 UpdateAvailable.Text="Versjon %1.%2.%3 er nå tilgjengelig. <a href='%4'>Klikk her for å laste ned</a>"
150
 Basic.DesktopDevice1="Skrivebordlyd"
151
@@ -330,6 +385,7 @@
152
 Deinterlacing.TopFieldFirst="Øverste felt først"
153
 Deinterlacing.BottomFieldFirst="Nederste felt først"
154
 VolControl.SliderUnmuted="Volumskyveknappen for '%1':"
155
+VolControl.SliderMuted="Volumskyveknappen for '%1': (dempet)"
156
 VolControl.Mute="Demp '%1'"
157
 VolControl.Properties="Egenskaper for '%1'"
158
 Basic.Main.AddSceneDlg.Title="Ny Scene"
159
@@ -339,6 +395,7 @@
160
 Basic.Main.RenameSceneCollection.Title="Gi nytt navn til scenesamlingen"
161
 AddProfile.Title="Legg til profil"
162
 AddProfile.Text="Skriv inn navn på profilen"
163
+AddProfile.WizardCheckbox="Vis autokonfigurasjons veiviser"
164
 RenameProfile.Title="Gi nytt navn til profil"
165
 Basic.Main.MixerRename.Title="Gi nytt navn til lydkilde"
166
 Basic.Main.MixerRename.Text="Vennligst skriv inn navnet til lydkilden"
167
@@ -347,7 +404,10 @@
168
 Basic.SourceSelect.CreateNew="Opprett"
169
 Basic.SourceSelect.AddExisting="Legg til eksisterende"
170
 Basic.SourceSelect.AddVisible="Gjør kilden synlig"
171
+Basic.Main.Sources.Visibility="Synlighet"
172
+Basic.Main.Sources.VisibilityDescription="Kontrollerer synligheten til '%1' i lerretet"
173
 Basic.Main.Sources.Lock="Lås"
174
+Basic.Main.Sources.LockDescription="Låser posisjonen og størrelsen av '%1' i lerretet"
175
 Basic.PropertiesWindow="Egenskaper for '%1'"
176
 Basic.PropertiesWindow.AutoSelectFormat="%1 (selvvalg: %2)"
177
 Basic.PropertiesWindow.SelectColor="Velg farge"
178
@@ -365,6 +425,8 @@
179
 Basic.PropertiesView.FPS.Simple="Bildefrekvens (enkel)"
180
 Basic.PropertiesView.FPS.Rational="Bildefrekvens (rasjonalt tall)"
181
 Basic.PropertiesView.FPS.ValidFPSRanges="Gyldige bildefrekvensrekkevidder:"
182
+Basic.PropertiesView.UrlButton.Text="Åpne denne linken i standard nettleser?"
183
+Basic.PropertiesView.UrlButton.OpenUrl="Åpne URL"
184
 Basic.InteractionWindow="Kommuniserer med «%1»"
185
 Basic.StatusBar.Reconnecting="Frakoblet. Kobler til om %2 sekund(er) (Forsøk %1)."
186
 Basic.StatusBar.AttemptingReconnect="Prøver tilkobling… (Forsøk %1)"
187
@@ -373,6 +435,10 @@
188
 Basic.StatusBar.DelayStartingIn="Forsinkelse (starter om %1 sek)"
189
 Basic.StatusBar.DelayStoppingIn="Forsinkelse (stopper om %1 sek)"
190
 Basic.StatusBar.DelayStartingStoppingIn="Forsinkelse (stopper om %1 sek, starter om %2 sek)"
191
+Basic.StatusBar.RecordingSavedTo="Opptaket er lagret i '%1"
192
+Basic.StatusBar.ReplayBufferSavedTo="Omspillingsbufferen lagret i '%1'"
193
+Basic.StatusBar.ScreenshotSavedTo="Skjermbilde lagret i '%1"
194
+Basic.StatusBar.AutoRemuxedTo="Opptak automatisk remukset til '%1'"
195
 Basic.Filters="Filtre"
196
 Basic.Filters.AsyncFilters="Lyd- og bildefiltre"
197
 Basic.Filters.AudioFilters="Lydfiltre"
198
@@ -382,13 +448,23 @@
199
 Basic.Filters.AddFilter.Text="Angi navnet på filteret"
200
 Basic.TransformWindow="Transformer sceneelement"
201
 Basic.TransformWindow.Position="Posisjon"
202
+Basic.TransformWindow.PositionX="Posisjon X"
203
+Basic.TransformWindow.PositionY="Posisjon Y"
204
 Basic.TransformWindow.Rotation="Rotasjon"
205
 Basic.TransformWindow.Size="Størrelse"
206
+Basic.TransformWindow.Width="Bredde"
207
+Basic.TransformWindow.Height="Høyde"
208
 Basic.TransformWindow.Alignment="Posisjonsoppstilling"
209
 Basic.TransformWindow.BoundsType="Innholdsavgrensningstype"
210
 Basic.TransformWindow.BoundsAlignment="Oppstilling i innholdsavgrensning"
211
 Basic.TransformWindow.Bounds="Innholdsavgrensningsstørrelse"
212
+Basic.TransformWindow.BoundsWidth="Innholdsavgrensning bredde"
213
+Basic.TransformWindow.BoundsHeight="Innholdsavgrensning høyde"
214
 Basic.TransformWindow.Crop="Beskjæring"
215
+Basic.TransformWindow.CropLeft="Beskjær venstre"
216
+Basic.TransformWindow.CropRight="Beskjær høyre"
217
+Basic.TransformWindow.CropTop="Beskjær topp"
218
+Basic.TransformWindow.CropBottom="Beskjær bunn"
219
 Basic.TransformWindow.Alignment.TopLeft="Øverst til venstre"
220
 Basic.TransformWindow.Alignment.TopCenter="Øverst i midten"
221
 Basic.TransformWindow.Alignment.TopRight="Øverst til høyre"
222
@@ -405,16 +481,20 @@
223
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skalér etter bredden av avgrensningen"
224
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skalér etter høyden av avgrensningen"
225
 Basic.TransformWindow.BoundsType.Stretch="Strekk etter avgrensningen"
226
+Basic.TransformWindow.Title="Rediger transformering for '%1'"
227
+Basic.TransformWindow.NoSelectedSource="Ingen kilde valgt"
228
 Basic.Main.AddSourceHelp.Title="Kan ikke legge til kilde"
229
 Basic.Main.AddSourceHelp.Text="Du må ha minst én scene for å legge til en kilde."
230
 Basic.Main.Scenes="Scener"
231
 Basic.Main.Sources="Kilder"
232
+Basic.Main.Source="Kilde"
233
 Basic.Main.Controls="Kontrollere"
234
 Basic.Main.Connecting="Kobler til…"
235
 Basic.Main.StartRecording="Start Opptak"
236
 Basic.Main.StartReplayBuffer="Start omspillingsbuffer"
237
 Basic.Main.SaveReplay="Lagre reprise"
238
 Basic.Main.StartStreaming="Start Strømming"
239
+Basic.Main.StartBroadcast="Gå Live"
240
 Basic.Main.StartVirtualCam="Start virtuelt kamera"
241
 Basic.Main.StopRecording="Stopp Opptak"
242
 Basic.Main.PauseRecording="Sett opptaket på pause"
243
@@ -423,6 +503,7 @@
244
 Basic.Main.StopReplayBuffer="Stopp omspillingsbufferen"
245
 Basic.Main.StoppingReplayBuffer="Stopper omspillingsbufferen..."
246
 Basic.Main.StopStreaming="Stopp Strømming"
247
+Basic.Main.StopBroadcast="Avslutt sendingen"
248
 Basic.Main.StoppingStreaming="Avslutter sendingen …"
249
 Basic.Main.ForceStopStreaming="Avslutt sendingen (forkast forsinkelse)"
250
 Basic.Main.ShowContextBar="Vis verktøylinje for kilde"
251
@@ -441,6 +522,7 @@
252
 Basic.MainMenu.File.Settings="Inn&stillinger"
253
 Basic.MainMenu.File.ShowSettingsFolder="Vis innstillingsmappen"
254
 Basic.MainMenu.File.ShowProfileFolder="Vis profilmappen"
255
+Basic.MainMenu.File.ShowMissingFiles="Sjekk for manglende filer"
256
 Basic.MainMenu.AlwaysOnTop="&Alltid synlig"
257
 Basic.MainMenu.File.Exit="Avslutt (&X)"
258
 Basic.MainMenu.Edit="R&edigér"
259
@@ -554,6 +636,7 @@
260
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Vannrett, bunn (8 scener)"
261
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Loddrett, venstre (8 scener)"
262
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Loddrett, høyre (8 scener)"
263
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horisontalt, Topp (18 scener)"
264
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Vannrett, topp (24 scener)"
265
 Basic.Settings.Stream="Strøm"
266
 Basic.Settings.Stream.StreamType="Strømmetype"
267
@@ -569,6 +652,11 @@
268
 Basic.Settings.Stream.MissingUrlAndApiKey="URL og strømmenøkkel mangler.\n\nÅpne innstillinger for å angi URL og strømmenøkkel i fanen 'strøm'."
269
 Basic.Settings.Stream.MissingUrl="Strømme-URL mangler.\n\nÅpne innstillinger for å angi URL-en i fanen 'Strøm'."
270
 Basic.Settings.Stream.MissingStreamKey="Strømmenøkkel mangler.\n\nÅpne innstillinger for å angi strømmenøkkelen i fanen 'Strøm'."
271
+Basic.Settings.Stream.IgnoreRecommended="Ignorer strømmetjenestens anbefalinger"
272
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Overstyr anbefalte innstillinger"
273
+Basic.Settings.Stream.IgnoreRecommended.Warn.Text="Advarsel: Hvis du ignorerer begrensningene for tjenesten, kan det føre til degradert strømmekvalitet eller hindre deg i å strømme.\n\nFortsett?"
274
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maksimum Video Bitrate: %1 kbps"
275
+Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maksimum lyd bitrate: %1 kbps"
276
 Basic.Settings.Stream.Recommended.MaxResolution="Maksimal oppløsning: %1"
277
 Basic.Settings.Stream.Recommended.MaxFPS="Maksimum BPS: %1"
278
 Basic.Settings.Output="Utgang"
279
@@ -596,6 +684,8 @@
280
 Basic.Settings.Output.Simple.RecordingQuality.Small="Høy kvalitet, middels filstørrelse"
281
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Veldig høy kvalitet, stor filstørrelse"
282
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tapsfri kvalitet, veldig stor filstørrelse"
283
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Advarsel: Strømmens video bitrate har blitt satt til '%1'. Dette er over grensen til den valgte strømmeplatformen."
284
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Advarsel: Strømmens bitrate for lyd har blitt satt til '%1'. Dette er over grensen til valgt strømmeplatform."
285
 Basic.Settings.Output.Simple.Warn.CannotPause="Advarsel: Innspillinger kan ikke pauses hvis opptakskvaliteten er satt til \"Samme som strøm\"."
286
 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."
287
 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."
288
@@ -606,6 +696,9 @@
289
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Maskinvare (AMD)"
290
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Maskinvare (NVENC)"
291
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Programvare (Forhåndsinnstilt til x264 med lav CPU-bruk, øker filstørrelsen)"
292
+Basic.Settings.Output.Simple.TwitchVodTrack="Twitch VOD spor (Bruker spor 2)"
293
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Inkompatibel oppløsning / bildefrekvens"
294
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Strømmeplatformen støtter ikke din valgte utgangsoppløsning og/eller bildefrekvens. De vil bli endret til næreste kompatible verdier: \n\n%1\n\n Ønsker du å fortsette?"
295
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Oppløsning: %1"
296
 Basic.Settings.Output.Warn.EnforceResolutionFPS.FPS="BPS: %1"
297
 Basic.Settings.Output.VideoBitrate="Bilde-bitfrekvens"
298
@@ -627,7 +720,9 @@
299
 Basic.Settings.Output.Adv.Audio.Track4="Spor 4"
300
 Basic.Settings.Output.Adv.Audio.Track5="Spor 5"
301
 Basic.Settings.Output.Adv.Audio.Track6="Spor 6"
302
+Basic.Settings.Output.Adv.TwitchVodTrack="Twitch VOD spor"
303
 Basic.Settings.Output.Adv.Recording="Opptak"
304
+Basic.Settings.Output.Adv.Recording.RecType="Opptakstype"
305
 Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Egendefinert FFmpeg-utgang"
306
 Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Bruk strømkoder)"
307
 Basic.Settings.Output.Adv.Recording.Filename="Filnavnformat"
308
@@ -658,6 +753,7 @@
309
 Screenshot.Preview="Skjermbilde (forhåndsvisning)"
310
 Screenshot.Scene="Skjermbilde (Scene)"
311
 Screenshot.Source="Skjermbilde (Kilde)"
312
+FilenameFormatting.TT="%CCYY   År, fire siffer\n%YY        År, siste to siffer(00-99)\n%MM     Månedsnummer(01-12)\n%DD        Dag i måneden, foranstilt med null(01-31)\n%hh      Timer i 24 timers format (00-23)\n%mm       Minutt (00-59)\n%ss     Sekund (00-61)\n%%      A % tegn\n%a        Forkortet navn på ukedag \n%A       Fullt ukedags navn\n%b      Forkortet navn på måned\n%B     Fullt navn på måned\n%d     Dag i måneden, foranstilt med null(01-31)\n%H       Timer i 24 timers format (00-23)\n%I        Timer i 12 timers format (01-12)\n%m        Månedsnummer (01-12)\n%M        Minutter (00-59)\n%p        AM eller PM betegnelse\n%S      Sekunder (00-61)\n%y        År, siste to siffer (00-99)\n%Y     År\n%z      ISO 8601 forskyvning fra UTC i tidssone\n%Z     Tidssonenavn eller forkortelse\n%FPS        Bilder per sek\n%CRES       Grunnoppløsning (lerret)\n%ORES     Utgangsoppløsning (skalert\n%VF     Video format"
313
 Basic.Settings.Video="Bilde"
314
 Basic.Settings.Video.Adapter="Bildeadapter"
315
 Basic.Settings.Video.BaseResolution="Grunnoppløsning (lerret)"
316
@@ -688,6 +784,7 @@
317
 Basic.Settings.Audio.PeakMeterType.SamplePeak="Samplingstoppunkt"
318
 Basic.Settings.Audio.PeakMeterType.TruePeak="Ekte toppunkt (Høyere CPU-bruk)"
319
 Basic.Settings.Audio.MultiChannelWarning.Enabled="Advarsel: Surroundlyd er aktivert."
320
+Basic.Settings.Audio.MultichannelWarning="Hvis du strømmer, sjekk om den valgte strømmetjenesten støtter både surround-lydinntak og surround-lydavspilling. Facebook 360 Live, Mixer RTMP, og Smashcast er eksempler hvor surroundlyd er fullt støttet. Selv om Facebook Live og YouTube Live begge støtter surround-innføring, nedmikser Facebook Live det ned til Stereo, og YouTube Live spiller bare av to kanaler.\n\nOBS-lydfiltre er kompatible med surroundlyd, selv om VST-tilleggsstøtte ikke er garantert."
321
 Basic.Settings.Audio.MultichannelWarning.Title="Vil du aktivere surround-lyd?"
322
 Basic.Settings.Audio.MultichannelWarning.Confirm="Er du sikker på at du vil aktivere surround-lyd?"
323
 Basic.Settings.Audio.Devices="Globale lyd enheter"
324
@@ -737,12 +834,17 @@
325
 Basic.AdvAudio.ActiveOnly="Kun aktive kilder"
326
 Basic.AdvAudio.Name="Navn"
327
 Basic.AdvAudio.Volume="Volum"
328
+Basic.AdvAudio.VolumeSource="Volum for '%1'"
329
+Basic.AdvAudio.MonoSource="Mono nedmiksing for '%1'"
330
 Basic.AdvAudio.Balance="Balanse"
331
+Basic.AdvAudio.BalanceSource="Balanse for '%1'"
332
 Basic.AdvAudio.SyncOffset="Synkroniser avvik"
333
+Basic.AdvAudio.SyncOffsetSource="Synk forskyvning for '%1'"
334
 Basic.AdvAudio.Monitoring="Hør på kilde"
335
 Basic.AdvAudio.Monitoring.None="Ikke hør kilden"
336
 Basic.AdvAudio.Monitoring.MonitorOnly="Kun hør kilden (Demp utdataen)"
337
 Basic.AdvAudio.Monitoring.Both="Hør og output kilde"
338
+Basic.AdvAudio.MonitoringSource="Lydovervåking for '%1"
339
 Basic.AdvAudio.AudioTracks="Spor"
340
 Basic.Settings.Hotkeys="Hurtigtaster"
341
 Basic.Settings.Hotkeys.Pair="Tastekombinasjoner delt med '%1' vil veksle"
342
@@ -823,3 +925,47 @@
343
 ContextBar.MediaControls.PlaylistPrevious="Forrige i spilleliste"
344
 ContextBar.MediaControls.MediaProperties="Media egenskaper"
345
 ContextBar.MediaControls.BlindSeek="Widget for media søker"
346
+YouTube.Auth.Ok="Autorisasjon fullført.\nDu kan nå lukke denne siden."
347
+YouTube.Auth.NoCode="Autoriseringsprosessen ble ikke fullført."
348
+YouTube.Auth.NoChannels="Ingen kanal(er) tilgjengelig på valgt konto"
349
+YouTube.Auth.WaitingAuth.Title="YouTube brukerautorisasjon"
350
+YouTube.Auth.WaitingAuth.Text="Vennligst fullfør autorisasjonen i din eksterne nettleser.<br>Hvis den eksterne nettleseren ikke åpnes, følg denne lenken og fullfør autorisasjonen:<br>%1"
351
+YouTube.AuthError.Text="Fikk ikke tak i kanalinformasjonen: %1."
352
+YouTube.Actions.Title="Tittel*"
353
+YouTube.Actions.MyBroadcast="Min Strøm"
354
+YouTube.Actions.Description="Beskrivelse"
355
+YouTube.Actions.Privacy="Personvern*"
356
+YouTube.Actions.Privacy.Private="Privat"
357
+YouTube.Actions.Privacy.Public="Offentlig"
358
+YouTube.Actions.Privacy.Unlisted="Ikke listet"
359
+YouTube.Actions.Category="Kategori"
360
+YouTube.Actions.MadeForKids="Er denne videoen laget for barn?*"
361
+YouTube.Actions.MadeForKids.Yes="Ja, den er laget for barn"
362
+YouTube.Actions.MadeForKids.No="Nei, den er ikke laget for barn"
363
+YouTube.Actions.AdditionalSettings="Ytterligere innstillinger:"
364
+YouTube.Actions.Latency="Forsinkelse"
365
+YouTube.Actions.Latency.Low="Lav"
366
+YouTube.Actions.Latency.UltraLow="Ultra-lav"
367
+YouTube.Actions.EnableAutoStart="Aktiver automatisk start"
368
+YouTube.Actions.EnableAutoStop="Aktiver auto-stopp"
369
+YouTube.Actions.EnableDVR="Aktiver DVR"
370
+YouTube.Actions.ScheduleForLater="Planlegg for senere"
371
+YouTube.Actions.Error.Title="Feil ved opprettelse av strøm"
372
+YouTube.Actions.Error.Text="YouTube tilgangsfeil '%1'.<br/>En detaljert feilbeskrivelse kan finnes på <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
373
+YouTube.Actions.Error.General="Youtube tilgangsfeil. Vennligst sjekk nettverks tilkoblingen og youtube tilgangen din."
374
+YouTube.Actions.Error.NoBroadcastCreated="Feil ved oppretting av strømm '%1'.<br/>En detaljert feilbeskrivelse kan finnes på <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
375
+YouTube.Actions.Error.NoStreamCreated="Ingen strøm opprettet. Vennligst koblet til kontoen din på nytt."
376
+YouTube.Actions.Error.YouTubeApi="YouTube API feil. Se loggfilen for mer informasjon."
377
+YouTube.Actions.Error.BroadcastNotFound="Den valgte strømmen finnes ikke."
378
+YouTube.Actions.EventsLoading="Laster liste over Eventer..."
379
+YouTube.Actions.EventCreated.Title="Event opprettet"
380
+YouTube.Actions.EventCreated.Text="Event ble opprettet."
381
+YouTube.Actions.Stream="Strøm"
382
+YouTube.Actions.Stream.ScheduledFor="Planlagt for %1"
383
+YouTube.Actions.Stream.Resume="Gjenoppta avbrutt strøm"
384
+YouTube.Actions.Stream.YTStudio="Automatisk opprettet av YouTube Studio"
385
+YouTube.Actions.Notify.CreatingBroadcast="Oppretter en ny Live-sending, vennligst vent..."
386
+YouTube.Actions.AutoStartStreamingWarning.Title="Manuell start kreves"
387
+YouTube.Actions.AutoStopStreamingWarning="Du vil ikke kunne koblet til på nytt. <br>Strømmen din vil stoppe og ikke lengre være live."
388
+YouTube.Errors.liveStreamingNotEnabled="Live streaming er ikke aktivert på den valgte YouTube kanalen.<br/><br/>Se <a href='https://www.youtube.com/features'>youtube.com/features</a> for mer informasjon."
389
+YouTube.Errors.livePermissionBlocked="Live streaming er ikke tilgjengelig på den valgte YouTube Channel.<br/>Vær oppmerksom på at det kan ta opptil 24 timer før direktesendinger blir tilgjengelig etter at du har aktivert det i dine kanalinnstillinger.<br/><br/>Se <a href='https://www.youtube.com/features'>youtube.com/features</a> for detaljer."
390
obs-studio-27.0.1.tar.xz/UI/data/locale/nl-NL.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/nl-NL.ini Changed
158
 
1
@@ -105,6 +105,7 @@
2
 Auth.InvalidScope.Text="De authenticatie vereisten voor %1 zijn gewijzigd. Sommige functies zijn mogelijk niet beschikbaar."
3
 Auth.LoadingChannel.Title="Kanaalinformatie laden..."
4
 Auth.LoadingChannel.Text="Kanaalinformatie voor %1 laden, even geduld a.u.b..."
5
+Auth.LoadingChannel.Error="Kon geen kanaalinformatie opvragen"
6
 Auth.ChannelFailure.Title="Laden van kanaal mislukt"
7
 Auth.ChannelFailure.Text="Laden van kanaal informatie mislukt voor %1\n\n%2: %3"
8
 Auth.StreamInfo="Stream-informatie"
9
@@ -146,11 +147,13 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Haal Stream key op"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Meer informatie"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Gebruik Stream Key"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Gebruik Stream Sleutel (geavanceerd)"
14
 Basic.AutoConfig.StreamPage.Service="Dienst"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Toon alles..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Aangepast..."
17
 Basic.AutoConfig.StreamPage.StreamKey="Stream key"
18
 Basic.AutoConfig.StreamPage.EncoderKey="Encoder sleutel"
19
+Basic.AutoConfig.StreamPage.ConnectedAccount="Verbonden account"
20
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Schat bitrate met bandbreedte test (kan een paar minuten duren)"
21
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Geef de voorkeur aan hardware-encoding"
22
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-encoding elimineert het meeste CPU-gebruik, maar heeft wellicht een hogere bitrate nodig om hetzelfde kwaliteitsniveau te bereiken."
23
@@ -307,6 +310,8 @@
24
 Output.RecordError.EncodeErrorMsg="Er is een coderingsfout opgetreden tijdens het opnemen."
25
 Output.BadPath.Title="Ongeldig bestandspad"
26
 Output.BadPath.Text="Het geconfigureerde bestandsuitvoerpad is ongeldig; controleer de instellingen om er zeker van te zijn dat er een geldig bestandspad ingesteld is."
27
+Output.NoBroadcast.Title="Geen uitzending geconfigureerd"
28
+Output.NoBroadcast.Text="Je moet een uitzending instellen voordat je kunt streamen."
29
 LogReturnDialog="Log-upload gelukt"
30
 LogReturnDialog.Description="Het logbestand is geüpload; je kunt nu de URL delen voor foutopsporings- of supportdoeleinden."
31
 LogReturnDialog.Description.Crash="Het crashrapport is geüpload; je kunt nu de URL delen voor foutopsporingsdoeleinden."
32
@@ -345,6 +350,8 @@
33
 MissingFiles.Found="Gevonden"
34
 MissingFiles.AutoSearch="Extra bestandsovereenkomsten gevonden"
35
 MissingFiles.AutoSearchText="OBS heeft extra overeenkomsten gevonden voor ontbrekende bestanden in die directory; wilt u ze toevoegen?"
36
+MissingFiles.NoMissing.Title="Ontbrekende bestanden controle"
37
+MissingFiles.NoMissing.Text="Er lijken geen bestanden te ontbreken."
38
 UpdateAvailable="Nieuwe update beschikbaar"
39
 UpdateAvailable.Text="Versie %1.%2.%3 is nu beschikbaar; <a href='%4'>klik hier om hem te downloaden</a>"
40
 Basic.DesktopDevice1="Desktop-audio"
41
@@ -405,6 +412,7 @@
42
 Basic.PropertiesView.FPS.Simple="Simpele FPS Waarden"
43
 Basic.PropertiesView.FPS.Rational="Rationale FPS-waarden"
44
 Basic.PropertiesView.FPS.ValidFPSRanges="Geldige FPS-bereiken:"
45
+Basic.PropertiesView.UrlButton.Text="Deze link in uw standaard webbrowser openen?"
46
 Basic.InteractionWindow="Interactie met '%1'"
47
 Basic.StatusBar.Reconnecting="Verbinding verbroken, opnieuw verbinden over %2 second(en) (poging %1)"
48
 Basic.StatusBar.AttemptingReconnect="Poging opnieuw te verbinden... (poging %1)"
49
@@ -457,6 +465,8 @@
50
 Basic.TransformWindow.BoundsType.ScaleToWidth="Schaal naar de breedte van de grenzen"
51
 Basic.TransformWindow.BoundsType.ScaleToHeight="Schaal naar de hoogte van de grenzen"
52
 Basic.TransformWindow.BoundsType.Stretch="Uitrekken naar de grenzen"
53
+Basic.TransformWindow.Title="Wijzig Transformatie voor '%1'"
54
+Basic.TransformWindow.NoSelectedSource="Geen bron geselecteerd"
55
 Basic.Main.AddSourceHelp.Title="Bron kan niet toegevoegd worden"
56
 Basic.Main.AddSourceHelp.Text="Je moet ten minste één scène hebben om een bron toe te kunnen voegen."
57
 Basic.Main.Scenes="Scènes"
58
@@ -468,6 +478,7 @@
59
 Basic.Main.StartReplayBuffer="Start de replaybuffer"
60
 Basic.Main.SaveReplay="Replay opslaan"
61
 Basic.Main.StartStreaming="Streamen starten"
62
+Basic.Main.StartBroadcast="Ga Live"
63
 Basic.Main.StartVirtualCam="Start de virtuele camera"
64
 Basic.Main.StopRecording="Stop met opnemen"
65
 Basic.Main.PauseRecording="Pauzeer de opname"
66
@@ -475,7 +486,9 @@
67
 Basic.Main.StoppingRecording="De opname stoppen..."
68
 Basic.Main.StopReplayBuffer="De replaybuffer stoppen"
69
 Basic.Main.StoppingReplayBuffer="De replaybuffer aan het stoppen..."
70
+Basic.Main.SetupBroadcast="Uitzending beheren"
71
 Basic.Main.StopStreaming="Streamen stoppen"
72
+Basic.Main.StopBroadcast="Beëindigd uitzending"
73
 Basic.Main.StoppingStreaming="De stream stoppen..."
74
 Basic.Main.ForceStopStreaming="Stop het streamen (vertraging negeren)"
75
 Basic.Main.ShowContextBar="Toon de bron-taakbalk"
76
@@ -494,6 +507,7 @@
77
 Basic.MainMenu.File.Settings="In&stellingen"
78
 Basic.MainMenu.File.ShowSettingsFolder="Toon de instellingenmap"
79
 Basic.MainMenu.File.ShowProfileFolder="Toon de profielmap"
80
+Basic.MainMenu.File.ShowMissingFiles="Controleren op ontbrekende bestanden"
81
 Basic.MainMenu.AlwaysOnTop="&Altijd op de voorgrond"
82
 Basic.MainMenu.File.Exit="&Afsluiten"
83
 Basic.MainMenu.Edit="&Bewerken"
84
@@ -602,6 +616,7 @@
85
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontaal, onder (8 scènes)"
86
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Verticaal, links (8 scènes)"
87
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Verticaal, rechts (8 scènes)"
88
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontaal, boven (18 scènes)"
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontaal, boven (24 scènes)"
90
 Basic.Settings.Stream.StreamType="Stream-type"
91
 Basic.Settings.Stream.Custom.UseAuthentication="Gebruik authenticatie"
92
@@ -856,3 +871,65 @@
93
 ContextBar.MediaControls.PlaylistPrevious="Vorige in de afspeellijst"
94
 ContextBar.MediaControls.MediaProperties="Media Eigenschappen"
95
 ContextBar.MediaControls.BlindSeek="Media Zoek Widget"
96
+YouTube.Auth.Ok="Autorisatie succesvol afgerond.\nJe kunt nu deze pagina sluiten."
97
+YouTube.Auth.NoCode="Het autorisatieproces is niet voltooid."
98
+YouTube.Auth.NoChannels="Geen kanaal/kanalen beschikbaar op geselecteerde account"
99
+YouTube.Auth.WaitingAuth.Title="YouTube Gebruiker Autorisatie"
100
+YouTube.Auth.WaitingAuth.Text="Voltooi alstublieft de autorisatie in uw externe browser.<br>Als de externe browser niet opent, volg dan deze link en voltooi de autorisatie:<br>%1"
101
+YouTube.AuthError.Text="Laden van kanaal informatie mislukt: %1."
102
+YouTube.Actions.WindowTitle="YouTube uitzending configuratie - Kanaal: %1"
103
+YouTube.Actions.CreateNewEvent="Nieuwe uitzending aanmaken"
104
+YouTube.Actions.ChooseEvent="Selecteer bestaande uitzending"
105
+YouTube.Actions.Title="Titel*"
106
+YouTube.Actions.MyBroadcast="Mijn Stream"
107
+YouTube.Actions.Description="Omschrijving"
108
+YouTube.Actions.Privacy.Private="Privé"
109
+YouTube.Actions.Privacy.Public="Publiek"
110
+YouTube.Actions.Privacy.Unlisted="Niet openbaar"
111
+YouTube.Actions.Category="Categorie"
112
+YouTube.Actions.Thumbnail.SelectFile="Selecteer bestand..."
113
+YouTube.Actions.Thumbnail.NoFileSelected="Geen bestand geselecteerd"
114
+YouTube.Actions.Thumbnail.ClearFile="Verwijderen"
115
+YouTube.Actions.MadeForKids="Is deze video gemaakt voor kinderen?*"
116
+YouTube.Actions.MadeForKids.Yes="Ja, het is gemaakt voor kinderen"
117
+YouTube.Actions.MadeForKids.No="Nee, het is niet gemaakt voor kinderen"
118
+YouTube.Actions.AdditionalSettings="Aanvullende instellingen:"
119
+YouTube.Actions.Latency="Vertraging"
120
+YouTube.Actions.Latency.Normal="Normaal"
121
+YouTube.Actions.Latency.Low="Laag"
122
+YouTube.Actions.Latency.UltraLow="Ultra laag"
123
+YouTube.Actions.EnableAutoStart="Automatisch starten inschakelen"
124
+YouTube.Actions.EnableAutoStop="Automatisch stoppen inschakelen"
125
+YouTube.Actions.AutoStartStop.TT="Geeft aan of deze geplande uitzending automatisch moet starten"
126
+YouTube.Actions.EnableDVR="DVR inschakelen"
127
+YouTube.Actions.ScheduleForLater="Plannen voor later"
128
+YouTube.Actions.RememberSettings="Onthoud deze instellingen"
129
+YouTube.Actions.Create_Ready="Uitzending aanmaken"
130
+YouTube.Actions.Create_GoLive="Uitzending aanmaken en begin met streamen"
131
+YouTube.Actions.Choose_Ready="Selecteer een uitzending"
132
+YouTube.Actions.Choose_GoLive="Selecteer een uitzending en begin met streamen"
133
+YouTube.Actions.Create_Schedule="Plan een uitzending"
134
+YouTube.Actions.Create_Schedule_Ready="Plan en selecteer een uitzending"
135
+YouTube.Actions.Dashboard="YouTube Studio Openen"
136
+YouTube.Actions.Error.Title="Fout bij aanmaken live uitzending"
137
+YouTube.Actions.Error.Text="YouTube toegangsfout '%1'.<br/>Een gedetailleerde foutbeschrijving kan worden gevonden op <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
138
+YouTube.Actions.Error.General="YouTube toegangsfout. Controleer de netwerkverbinding of toegang tot YouTube server."
139
+YouTube.Actions.Error.NoBroadcastCreated="Fout bij aanmaken van stream '%1'.<br/>Gedetailleerde foutbeschrijving kan gevonden worden op <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
140
+YouTube.Actions.Error.NoStreamCreated="Geen stream aangemaakt. Koppel het account opnieuw."
141
+YouTube.Actions.Error.YouTubeApi="YouTube API-fout. Bekijk het logbestand voor meer informatie."
142
+YouTube.Actions.Error.BroadcastNotFound="De geselecteerde uitzending is niet gevonden."
143
+YouTube.Actions.Error.FileMissing="Het geselecteerde bestand bestaat niet."
144
+YouTube.Actions.Error.FileOpeningFailed="Kan geselecteerd bestand niet openen."
145
+YouTube.Actions.Error.FileTooLarge="Geselecteerde bestand is te groot (Max: 2 MiB)."
146
+YouTube.Actions.EventsLoading="Lijst met gebeurtenissen wordt geladen..."
147
+YouTube.Actions.EventCreated.Title="Event aangemaakt"
148
+YouTube.Actions.EventCreated.Text="Event succesvol aangemaakt."
149
+YouTube.Actions.Stream.ScheduledFor="Gepland voor %1"
150
+YouTube.Actions.Stream.Resume="Onderbroken stream hervatten"
151
+YouTube.Actions.Stream.YTStudio="Automatisch gemaakt door YouTube Studio"
152
+YouTube.Actions.Notify.CreatingBroadcast="Een nieuwe Live Broadcast aan het aanmaken, even geduld..."
153
+YouTube.Actions.AutoStartStreamingWarning.Title="Handmatige start vereist"
154
+YouTube.Actions.AutoStartStreamingWarning="Automatisch starten is uitgeschakeld voor dit evenement, klik op \"Ga Live\" om uw uitzending te starten."
155
+YouTube.Actions.AutoStopStreamingWarning="U kunt geen nieuwe verbinding maken.<br>Uw stream zal stoppen en u zult niet langer live zijn."
156
+YouTube.Errors.liveStreamingNotEnabled="Live streaming is niet ingeschakeld op het geselecteerde YouTube-kanaal.<br/><br/>Zie <a href='https://www.youtube.com/features'>youtube.com/features</a> voor meer informatie."
157
+YouTube.Errors.livePermissionBlocked="Live streaming is niet beschikbaar op het geselecteerde YouTube-kanaal.<br/>Houd er rekening mee dat het tot 24 uur kan duren voordat live streaming beschikbaar is na het inschakelen van het programma in je kanaalinstellingen.<br/><br/>Zie <a href='https://www.youtube.com/features'>youtube.com/features</a> voor details."
158
obs-studio-27.0.1.tar.xz/UI/data/locale/nn-NO.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/nn-NO.ini Changed
19
 
1
@@ -61,6 +61,10 @@
2
 StudioMode.Preview="Førehandsvising"
3
 Group="Gruppe"
4
 DoNotShowAgain="Ikkje syn att"
5
+Fullscreen="Fullskjerm"
6
+RefreshBrowser="Oppdater"
7
+OpenFile="Opne fil"
8
+AddValue="Legg til %1"
9
 BandwidthTest.Region.EU="Europa"
10
 BandwidthTest.Region.Other="Andre stader"
11
 Basic.AutoConfig.ApplySettings="Bruk innstillingane"
12
@@ -122,3 +126,6 @@
13
 Basic.Settings.General="Generelt"
14
 Basic.Settings.General.Theme="Tema"
15
 Basic.Settings.General.Language="Språk"
16
+YouTube.Actions.Privacy.Private="Privat"
17
+YouTube.Actions.Privacy.Public="Offentleg"
18
+YouTube.Actions.Category="Kategori"
19
obs-studio-27.0.1.tar.xz/UI/data/locale/oc-FR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/oc-FR.ini Changed
132
 
1
@@ -19,6 +19,7 @@
2
 Display="Afichatge"
3
 Name="Nom"
4
 Exit="Sortir"
5
+Mixer="Mixador àudio"
6
 Browse="Percórrer"
7
 Clear="Escafar"
8
 Show="Mostrar"
9
@@ -27,6 +28,24 @@
10
 New="Novèl"
11
 Duplicate="Duplicar"
12
 Enable="Activar"
13
+Transition="Transicion"
14
+Left="Esquèrra"
15
+Right="Drecha"
16
+Top="Naut"
17
+Bottom="Bas"
18
+Reset="Reïnicializar"
19
+Hours="Oras"
20
+Minutes="Minutas"
21
+Seconds="Segondas"
22
+Import="Importar"
23
+Export="Exportar"
24
+Copy="Copiar"
25
+Paste="Pegar"
26
+Next="Seguent"
27
+Back="Precedent"
28
+Defaults="Predefinits"
29
+None="Pas cap"
30
+StudioMode.Preview="Apercebut"
31
 StudioMode.Program="Programa"
32
 Group="Grop"
33
 DoNotShowAgain="Mostrar pas mai"
34
@@ -39,23 +58,41 @@
35
 Copy.Filters="Copiar los filtres"
36
 Paste.Filters="Pegar los filtres"
37
 BandwidthTest.Region.US="Estats units"
38
+BandwidthTest.Region.EU="Euròpa"
39
+BandwidthTest.Region.Other="Autre"
40
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Utilizarai pas que la camèra virtuala"
41
 Basic.AutoConfig.VideoPage.BaseResolution.Display="Afichatge %1 (%2x%3)"
42
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="Utilizar l’actual (%1)"
43
 Basic.AutoConfig.StreamPage.MoreInfo="Mai d‘informacions"
44
 Basic.AutoConfig.StreamPage.Service="Servici"
45
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizat..."
46
 Basic.AutoConfig.StreamPage.Server="Servidor"
47
+Basic.Stats="Estat"
48
+Basic.Stats.Output.Recording="Enregistrament"
49
+Basic.Stats.Status="Estat"
50
+Basic.Stats.Status.Recording="Enregistrament"
51
+Basic.Stats.Status.Live="DIRÈCTE"
52
+Basic.Stats.Status.Reconnecting="Reconnexion"
53
 Basic.Stats.Status.Inactive="Inactiu"
54
 Basic.Stats.Status.Active="Actiu"
55
 Updater.Title="Novèla mesa a jorn disponibla"
56
 Updater.UpdateNow="Metre a jorn ara"
57
+QuickTransitions.DuplicateScene="Duplicar la scèna"
58
+QuickTransitions.EditProperties="Duplicar la font"
59
+Basic.SceneTransitions="Transicions de scèna"
60
 Basic.TransitionDuration="Durada"
61
 Basic.TogglePreviewProgramMode="Mòde studio"
62
+Undo.Sources.Multi="Suprimir %1 fonts"
63
 TitleBar.Profile="Perfil"
64
 TitleBar.Scenes="Scènas"
65
 ConfirmStart.Title="Començar la difusion ?"
66
+Basic.Scene="Scèna"
67
 VolControl.Mute="Amudir « %1 »"
68
 VolControl.Properties="Proprietats de « %1 »"
69
+Basic.Main.AddSceneDlg.Title="Apondre scèna"
70
+Basic.Main.DefaultSceneName.Text="Scèna %1"
71
+Basic.SourceSelect="Crear/Seleccionar font"
72
+Basic.SourceSelect.AddVisible="Rendre la font visibla"
73
 Basic.Main.Sources.Visibility="Visibilitat"
74
 Basic.Main.Sources.Lock="Verrolhar"
75
 Basic.PropertiesWindow="Proprietats de « %1 »"
76
@@ -76,7 +113,25 @@
77
 Basic.TransformWindow.Size="Talha"
78
 Basic.TransformWindow.Width="Largor"
79
 Basic.TransformWindow.Height="Nautor"
80
+Basic.Main.AddSourceHelp.Title="Apondon impossible de la font"
81
+Basic.Main.Scenes="Scènas"
82
+Basic.Main.Sources="Fonts"
83
+Basic.Main.Source="Font"
84
+Basic.Main.Controls="Contraròtles"
85
+Basic.Main.StartRecording="Començar l'enregistrament"
86
+Basic.Main.StartStreaming="Començar la difusion"
87
+Basic.Main.StartVirtualCam="Aviar la camèra virtuala"
88
+Basic.MainMenu.File="&Fichièr"
89
 Basic.MainMenu.File.Settings="&Paramètres"
90
+Basic.MainMenu.Edit="&Edicion"
91
+Basic.MainMenu.View="&Afichatge"
92
+Basic.MainMenu.View.Toolbars="&Barra d’aisinas"
93
+Basic.MainMenu.View.ContextBar="Barra d’aisina font"
94
+Basic.MainMenu.View.SceneTransitions="Transicions de scèna"
95
+Basic.MainMenu.Profile="&Perfil"
96
+Basic.MainMenu.Help="&Ajuda"
97
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Enviar darrièra rapòrt d’avaria"
98
+Basic.MainMenu.Help.About="&A prepaus"
99
 Basic.Settings.General.Theme="Tèma"
100
 Basic.Settings.General.Language="Lenga"
101
 Basic.Settings.General.Preview="Apercebut"
102
@@ -95,6 +150,7 @@
103
 Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Àudio"
104
 Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Vidèo"
105
 Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Format per defaut"
106
+Screenshot.Source="Captura d’ecran (font)"
107
 Basic.Settings.Video="Vidèo"
108
 Basic.Settings.Audio="Àudio"
109
 Basic.Settings.Audio.Channels="Canals"
110
@@ -102,6 +158,7 @@
111
 Basic.Settings.Advanced.Network="Ret"
112
 Basic.AdvAudio.Name="Nom"
113
 Basic.AdvAudio.Volume="Volum"
114
+Basic.AdvAudio.VolumeSource="Volum per « %1 »"
115
 Basic.AdvAudio.AudioTracks="Pistas"
116
 Basic.SystemTray.Show="Mostrar"
117
 Basic.SystemTray.Hide="Amagar"
118
@@ -111,7 +168,13 @@
119
 Hotkeys.End="Fin"
120
 Hotkeys.Print="Imprimir"
121
 Mute="Amudir"
122
+SceneItemShow="Afichar « %1 »"
123
+SceneItemHide="Rescondre « %1 »"
124
+FinalScene.Title="Suprimir scèna"
125
+NoSources.Title="Cap de font"
126
+NoSources.Label="Avètz pas cap de font.\nClicatz lo boton + çai-jos,\no clic-drech aicí per n’apondre una."
127
 About="A prepaus"
128
 About.GetInvolved="Implicatz-vos"
129
 About.Authors="Autors"
130
 About.License="Licéncia"
131
+ContextBar.NoSelectedSource="Cap de font pas seleccionada"
132
obs-studio-27.0.1.tar.xz/UI/data/locale/pl-PL.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/pl-PL.ini Changed
219
 
1
@@ -10,7 +10,7 @@
2
 Add="Dodaj"
3
 Remove="Usuń"
4
 Rename="Zmień nazwę"
5
-Interact="Włącz interakcję"
6
+Interact="Interakcja"
7
 Filters="Filtry"
8
 Properties="Właściwości"
9
 MoveUp="Przenieś w górę"
10
@@ -18,7 +18,7 @@
11
 Settings="Ustawienia"
12
 Display="Ekran"
13
 Name="Nazwa"
14
-Exit="Wyjście"
15
+Exit="Zamknij"
16
 Mixer="Mikser dźwięku"
17
 Browse="Przeglądaj"
18
 DroppedFrames="Zgubione klatki %1 (%2%)"
19
@@ -30,7 +30,7 @@
20
 PreviewWindow="Podgląd w oknie (podgląd)"
21
 SceneWindow="Podgląd w oknie (scena)"
22
 SourceWindow="Podgląd w oknie (źródło)"
23
-MultiviewProjector="MultiView (pełny ekran)"
24
+MultiviewProjector="Multiwidok (pełny ekran)"
25
 MultiviewWindowed="MultiView (w oknie)"
26
 ResizeProjectorWindowToContent="Dopasuj okno do zawartości"
27
 Clear="Wyczyść"
28
@@ -107,6 +107,7 @@
29
 Auth.InvalidScope.Text="Zmieniły się wymagania uwierzytelniania dla %1. Niektóre funkcje mogą nie być dostępne."
30
 Auth.LoadingChannel.Title="Trwa ładowanie informacji o kanale..."
31
 Auth.LoadingChannel.Text="Proszę czekaj. Trwa ładowanie informacji o kanale w serwisie %1..."
32
+Auth.LoadingChannel.Error="Nie można pobrać informacji o kanale."
33
 Auth.ChannelFailure.Title="Nie udało się załadować informacji o kanale"
34
 Auth.ChannelFailure.Text="Nie udało się załadować informacji o kanale w serwisie %1\n\n%2: %3"
35
 Auth.Chat="Czat"
36
@@ -148,12 +149,14 @@
37
 Basic.AutoConfig.StreamPage.GetStreamKey="Pobierz klucz"
38
 Basic.AutoConfig.StreamPage.MoreInfo="Więcej informacji"
39
 Basic.AutoConfig.StreamPage.UseStreamKey="Użyj klucza strumienia"
40
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Użyj klucza streamu (zaawansowane)"
41
 Basic.AutoConfig.StreamPage.Service="Serwis"
42
 Basic.AutoConfig.StreamPage.Service.ShowAll="Pokaż wszystkie..."
43
 Basic.AutoConfig.StreamPage.Service.Custom="Własny..."
44
 Basic.AutoConfig.StreamPage.Server="Serwer"
45
 Basic.AutoConfig.StreamPage.StreamKey="Klucz strumienia"
46
 Basic.AutoConfig.StreamPage.EncoderKey="Klucz enkodera"
47
+Basic.AutoConfig.StreamPage.ConnectedAccount="Połączone konto"
48
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Oszacuj bitrate przy pomocy testu prędkości łącza (może potrwać parę minut)"
49
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferuj enkodowanie sprzętowe"
50
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Enkodowanie sprzętowe odciąża procesor ale może wymagać większej przepustowości dla osiągnięcia porównywalnej jakości."
51
@@ -179,7 +182,7 @@
52
 Basic.AutoConfig.RunAnytime="Możesz to uruchomić w dowolnym momencie, przechodząc do menu Narzędzia."
53
 Basic.Stats="Statystyki"
54
 Basic.Stats.CPUUsage="Użycie procesora"
55
-Basic.Stats.HDDSpaceAvailable="Wolne miejsce na dysku"
56
+Basic.Stats.HDDSpaceAvailable="Dostępne miejsce na dysku"
57
 Basic.Stats.MemoryUsage="Wykorzystanie pamięci"
58
 Basic.Stats.AverageTimeToRender="Średni czas renderowania klatki"
59
 Basic.Stats.SkippedFrames="Pominięte klatki z powodu opóźnień enkodera"
60
@@ -311,6 +314,8 @@
61
 Output.RecordError.EncodeErrorMsg="W trakcie nagrywania nastąpił błąd enkodowania."
62
 Output.BadPath.Title="Nieprawidłowa ścieżka pliku"
63
 Output.BadPath.Text="Ustawiona ścieżka pliku wynikowego jest nieprawidłowa. Proszę sprawdzić ustawienia."
64
+Output.NoBroadcast.Title="Nie skonfigurowano transmisji"
65
+Output.NoBroadcast.Text="Musisz skonfigurować transmisję zanim zaczniesz nadawać."
66
 LogReturnDialog="Wysłanie pliku dziennika powiodło się"
67
 LogReturnDialog.Description="Twój plik dziennika został przesłany. Możesz teraz udostępnić adres URL w celu debugowania lub wsparcia technicznego."
68
 LogReturnDialog.Description.Crash="Twój raport o awarii został przesłany. Możesz teraz udostępnić adres URL do celów debugowania."
69
@@ -350,6 +355,8 @@
70
 MissingFiles.Found="Znaleziony"
71
 MissingFiles.AutoSearch="Znaleziono dodatkowe dopasowanie plików"
72
 MissingFiles.AutoSearchText="OBS znalazł dodatkowe dopasowania brakujących plików w tym katalogu. Czy chcesz je dodać?"
73
+MissingFiles.NoMissing.Title="Brakujące pliki"
74
+MissingFiles.NoMissing.Text="Wygląda na to, że nie brakuje żadnych plików."
75
 UpdateAvailable="Aktualizacja dostępna"
76
 UpdateAvailable.Text="Wersja %1.%2.%3 jest dostępna. <a href='%4'>Kliknij tutaj aby pobrać</a>"
77
 Basic.DesktopDevice1="Urządzenie audio"
78
@@ -417,6 +424,8 @@
79
 Basic.PropertiesView.FPS.Simple="Proste wartości FPS"
80
 Basic.PropertiesView.FPS.Rational="Ułamkowe wartości FPS"
81
 Basic.PropertiesView.FPS.ValidFPSRanges="Prawidłowe zakresy FPS:"
82
+Basic.PropertiesView.UrlButton.Text="Otworzyć ten link w domyślnej przeglądarce internetowej?"
83
+Basic.PropertiesView.UrlButton.OpenUrl="Otwórz URL"
84
 Basic.InteractionWindow="Interakcja z '%1'"
85
 Basic.StatusBar.Reconnecting="Rozłączono, próba ponownego połączenia za %2s (próba %1)"
86
 Basic.StatusBar.AttemptingReconnect="Próba ponownego połączenia... (próba %1)"
87
@@ -471,6 +480,8 @@
88
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skaluj do długości granic"
89
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skaluj do wysokości granic"
90
 Basic.TransformWindow.BoundsType.Stretch="Rozciągnij do granic"
91
+Basic.TransformWindow.Title="Edytuj transformację dla '%1'"
92
+Basic.TransformWindow.NoSelectedSource="Nie wybrano źródła"
93
 Basic.Main.AddSourceHelp.Title="Nie można dodać źródła"
94
 Basic.Main.AddSourceHelp.Text="Wymagana jest przynajmniej jedna scena, aby dodać źródło."
95
 Basic.Main.Scenes="Sceny"
96
@@ -482,6 +493,7 @@
97
 Basic.Main.StartReplayBuffer="Rozpocznij nagrywanie powtórek"
98
 Basic.Main.SaveReplay="Zapisz powtórkę"
99
 Basic.Main.StartStreaming="Rozpocznij stream"
100
+Basic.Main.StartBroadcast="Nadawaj"
101
 Basic.Main.StartVirtualCam="Uruchom Kamerę Wirtualną"
102
 Basic.Main.StopRecording="Zatrzymaj nagrywanie"
103
 Basic.Main.PauseRecording="Pauzuj nagrywanie"
104
@@ -489,7 +501,9 @@
105
 Basic.Main.StoppingRecording="Zatrzymywanie nagrywania..."
106
 Basic.Main.StopReplayBuffer="Zatrzymaj nagrywanie powtórek"
107
 Basic.Main.StoppingReplayBuffer="Zatrzymywanie nagrywania powtórek..."
108
+Basic.Main.SetupBroadcast="Zarządzaj transmisją"
109
 Basic.Main.StopStreaming="Zatrzymaj stream"
110
+Basic.Main.StopBroadcast="Zakończ transmisję"
111
 Basic.Main.StoppingStreaming="Zatrzymywanie streamowania..."
112
 Basic.Main.ForceStopStreaming="Zatrzymaj stream (anuluj opóźnienie)"
113
 Basic.Main.ShowContextBar="Pokaż pasek narzędziowy źródła"
114
@@ -507,6 +521,7 @@
115
 Basic.MainMenu.File.Settings="U&stawienia"
116
 Basic.MainMenu.File.ShowSettingsFolder="Pokaż folder z ustawieniami"
117
 Basic.MainMenu.File.ShowProfileFolder="Pokaż folder z profilami"
118
+Basic.MainMenu.File.ShowMissingFiles="Sprawdź brakujące pliki"
119
 Basic.MainMenu.AlwaysOnTop="Z&awsze na wierzchu"
120
 Basic.MainMenu.File.Exit="Zakończ (&X)"
121
 Basic.MainMenu.Edit="&Edycja"
122
@@ -556,8 +571,8 @@
123
 Basic.MainMenu.Profile="&Profil"
124
 Basic.MainMenu.Profile.Import="Importuj profil"
125
 Basic.MainMenu.Profile.Export="Eksportuj profil"
126
-Basic.MainMenu.SceneCollection.Import="Importuj kolekcje sceny"
127
-Basic.MainMenu.SceneCollection.Export="Exportuj kolekcje sceny"
128
+Basic.MainMenu.SceneCollection.Import="Importuj kolekcje scen"
129
+Basic.MainMenu.SceneCollection.Export="Eksportuj kolekcję scen"
130
 Basic.MainMenu.Profile.Exists="Profil już istnieje"
131
 Basic.MainMenu.SceneCollection.Exists="Kolekcja sceny już istnieje"
132
 Basic.MainMenu.Tools="Narzędzia (&T)"
133
@@ -619,6 +634,7 @@
134
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Poziomo, Dół (8 scen)"
135
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Pionowo, Lewo (8 scen)"
136
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Pionowo, Prawo (8 scen)"
137
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Poziomo, Góra (18 scen)"
138
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Poziomo, Góra (24 sceny)"
139
 Basic.Settings.Stream.StreamType="Typ streamu"
140
 Basic.Settings.Stream.Custom.UseAuthentication="Użyj uwierzytelniania"
141
@@ -661,7 +677,7 @@
142
 Basic.Settings.Output.ReplayBuffer.Suffix="Sufiks"
143
 Basic.Settings.Output.Simple.SavePath="Ścieżka pliku"
144
 Basic.Settings.Output.Simple.RecordingQuality="Jakość nagrywania"
145
-Basic.Settings.Output.Simple.RecordingQuality.Stream="Taka sama jak stream"
146
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Identycznie jak strunień"
147
 Basic.Settings.Output.Simple.RecordingQuality.Small="Wysoka jakość, średni rozmiar pliku"
148
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Jakość nie do odróżnienia, duża wielkość pliku"
149
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Jakość bezstratna, ogromna wielkość pliku"
150
@@ -902,3 +918,68 @@
151
 ContextBar.MediaControls.PlaylistPrevious="Poprzedni na liście odtwarzania"
152
 ContextBar.MediaControls.MediaProperties="Właściwości pliku"
153
 ContextBar.MediaControls.BlindSeek="Pasek postępu odtwarzania"
154
+YouTube.Auth.Ok="Autoryzacja zakończona pomyślnie.\nMożesz teraz zamknąć tę stronę."
155
+YouTube.Auth.NoCode="Proces autoryzacji nie został zakończony."
156
+YouTube.Auth.NoChannels="Brak dostępnych kanałów na wybranym koncie"
157
+YouTube.Auth.WaitingAuth.Title="Autoryzacja użytkownika YouTube"
158
+YouTube.Auth.WaitingAuth.Text="Dokonaj autoryzacji w zewnętrznej przeglądarce.<br>Jeśli zewnętrzna przeglądarka nie otworzyła się, użyj poniższego linku i dokończ autoryzację:<br>%1"
159
+YouTube.AuthError.Text="Nie udało się pobrać informacji o kanale: %1."
160
+YouTube.Actions.WindowTitle="Konfiguracja transmisji YouTube - Kanał: %1"
161
+YouTube.Actions.CreateNewEvent="Utwórz nową transmisję"
162
+YouTube.Actions.ChooseEvent="Wybierz istniejącą transmisję"
163
+YouTube.Actions.Title="Tytuł*"
164
+YouTube.Actions.MyBroadcast="Moja transmisja"
165
+YouTube.Actions.Description="Opis"
166
+YouTube.Actions.Privacy="Widoczność*"
167
+YouTube.Actions.Privacy.Private="Prywatny"
168
+YouTube.Actions.Privacy.Public="Publiczny"
169
+YouTube.Actions.Privacy.Unlisted="Niepubliczny"
170
+YouTube.Actions.Category="Kategoria"
171
+YouTube.Actions.Thumbnail="Miniaturka"
172
+YouTube.Actions.Thumbnail.SelectFile="Wybierz plik..."
173
+YouTube.Actions.Thumbnail.NoFileSelected="Nie wybrano pliku"
174
+YouTube.Actions.Thumbnail.ClearFile="Wyczyść"
175
+YouTube.Actions.MadeForKids="Czy film przeznaczony jest dla dzieci?*"
176
+YouTube.Actions.MadeForKids.Yes="Tak, jest przeznaczony dla dzieci"
177
+YouTube.Actions.MadeForKids.No="Nie, nie jest przeznaczony dla dzieci"
178
+YouTube.Actions.AdditionalSettings="Dodatkowe ustawienia:"
179
+YouTube.Actions.Latency="Opóźnienie"
180
+YouTube.Actions.Latency.Normal="Normalne"
181
+YouTube.Actions.Latency.Low="Niskie"
182
+YouTube.Actions.Latency.UltraLow="Ultra niskie"
183
+YouTube.Actions.EnableAutoStart="Włącz auto-start"
184
+YouTube.Actions.EnableAutoStop="Włącz auto-stop"
185
+YouTube.Actions.AutoStartStop.TT="Wskazuje, czy ta zaplanowana transmisja powinna uruchamiać się automatycznie"
186
+YouTube.Actions.EnableDVR="Włącz DVR"
187
+YouTube.Actions.360Video="Wideo 360 stopni"
188
+YouTube.Actions.ScheduleForLater="Zaplanuj na później"
189
+YouTube.Actions.RememberSettings="Zapamiętaj ustawienia"
190
+YouTube.Actions.Create_Ready="Utwórz transmisję"
191
+YouTube.Actions.Create_GoLive="Utwórz transmisję i zacznij nadawać"
192
+YouTube.Actions.Choose_Ready="Wybierz transmisję"
193
+YouTube.Actions.Choose_GoLive="Wybierz transmisję i zacznij nadawać"
194
+YouTube.Actions.Create_Schedule="Zaplanuj transmisję"
195
+YouTube.Actions.Create_Schedule_Ready="Zaplanuj i wybierz transmisję"
196
+YouTube.Actions.Dashboard="Otwórz YouTube Studio"
197
+YouTube.Actions.Error.Title="Błąd tworzenia transmisji na żywo"
198
+YouTube.Actions.Error.Text="Błąd dostępu do YouTube '%1'.<br/>Dokładny opis błędu znajdziesz pod <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
199
+YouTube.Actions.Error.General="Błąd dostępu do YouTube. Sprawdź połączenie sieciowe lub dostęp do serwera YouTube."
200
+YouTube.Actions.Error.NoBroadcastCreated="Błąd tworzenia transmisji '%1'.<br/>Dokładny opis błędu znajdziesz pod <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
201
+YouTube.Actions.Error.NoStreamCreated="Nie utworzono strumienia. Proszę połącz ponownie swoje konto."
202
+YouTube.Actions.Error.YouTubeApi="Błąd API YouTube. Aby uzyskać więcej informacji, przeglądnij treść pliku dziennika."
203
+YouTube.Actions.Error.BroadcastNotFound="Wybrana transmisja nie została odnaleziona."
204
+YouTube.Actions.Error.FileMissing="Wybrany plik nie istnieje."
205
+YouTube.Actions.Error.FileOpeningFailed="Nie udało się otworzyć wybranego pliku."
206
+YouTube.Actions.Error.FileTooLarge="Wybrany plik jest zbyt duży (limit: 2 MiB)."
207
+YouTube.Actions.EventsLoading="Ładuję listę wydarzeń..."
208
+YouTube.Actions.EventCreated.Title="Wydarzenie zostało utworzone"
209
+YouTube.Actions.EventCreated.Text="Wydarzenie zostało utworzone."
210
+YouTube.Actions.Stream.ScheduledFor="Zaplanowane na %1"
211
+YouTube.Actions.Stream.Resume="Wznów przerwany stream"
212
+YouTube.Actions.Stream.YTStudio="Automatycznie utworzone przez YouTube Studio"
213
+YouTube.Actions.Notify.CreatingBroadcast="Tworzenie nowej transmisji na żywo, proszę czekać..."
214
+YouTube.Actions.AutoStartStreamingWarning.Title="Wymagany ręczny start"
215
+YouTube.Actions.AutoStartStreamingWarning="Automatyczny start dla tego wydarzenia jest wyłączony. Kliknij \"Nadawaj\", aby rozpocząć transmisję."
216
+YouTube.Actions.AutoStopStreamingWarning="Nie będziesz mógł ponownie się połączyć.<br>Twój stream zatrzyma się i nie będziesz nadawać."
217
+YouTube.Errors.liveStreamingNotEnabled="Nadawanie na żywo nie jest włączone na wybranym kanale YouTube.<br/><br/>Przejdź na <a href='https://www.youtube.com/features'>youtube.com/feature</a> po więcej informacji."
218
+YouTube.Errors.livePermissionBlocked="Nadawanie na żywo jest niedostępne na wybranym kanale YouTube.<br/>Pamiętaj, że po włączeniu możliwości nadawania na żywo w ustawieniach kanału może minąć do 24 godzin zanim opcja będzie dostępna.<br/><br/>Przejdź na <a href='https://www.youtube.com/features'>youtube.com/feature</a> po szczegóły."
219
obs-studio-27.0.1.tar.xz/UI/data/locale/pt-BR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/pt-BR.ini Changed
317
 
1
@@ -71,8 +71,8 @@
2
 Defaults="Redefinir"
3
 HideMixer="Ocultar no mixer"
4
 TransitionOverride="Sobrepor transição"
5
-ShowTransition="Mostrar transição"
6
-HideTransition="Ocultar transição"
7
+ShowTransition="Transição ao mostrar"
8
+HideTransition="Transição ao ocultar"
9
 None="Nenhuma"
10
 StudioMode.Preview="Prévia"
11
 StudioMode.Program="Programa"
12
@@ -110,6 +110,7 @@
13
 Auth.InvalidScope.Text="Os requisitos de autenticação do(a) %1 foram alterados. Alguns recursos podem não estar disponíveis."
14
 Auth.LoadingChannel.Title="Carregando informações do canal..."
15
 Auth.LoadingChannel.Text="Carregando informações do canal do(a) %1, aguarde..."
16
+Auth.LoadingChannel.Error="Não foi possível obter informações do canal."
17
 Auth.ChannelFailure.Title="Não foi possível carregar o canal"
18
 Auth.ChannelFailure.Text="Não foi possível carregar informações do canal do(a) %1\n\n%2: %3"
19
 Auth.StreamInfo="Informações da transmissão"
20
@@ -151,13 +152,15 @@
21
 Basic.AutoConfig.StreamPage.GetStreamKey="Obter chave de transmissão"
22
 Basic.AutoConfig.StreamPage.MoreInfo="Mais informações"
23
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar chave de transmissão"
24
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Usar chave de transmissão (avançado)"
25
 Basic.AutoConfig.StreamPage.Service="Serviço"
26
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar todos..."
27
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizado..."
28
 Basic.AutoConfig.StreamPage.Server="Servidor"
29
 Basic.AutoConfig.StreamPage.StreamKey="Chave de transmissão"
30
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)"
31
-Basic.AutoConfig.StreamPage.EncoderKey="Chave do Codificador"
32
+Basic.AutoConfig.StreamPage.EncoderKey="Chave do codificador"
33
+Basic.AutoConfig.StreamPage.ConnectedAccount="Conta conectada"
34
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimar taxa de bits com teste de largura de banda (pode levar uns minutos)"
35
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificação por hardware"
36
 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."
37
@@ -237,8 +240,8 @@
38
 Undo.Item.Redo="Refazer %1"
39
 Undo.Sources.Multi="exclusão de %1 fontes"
40
 Undo.Filters="mudanças filtradas em \"%1\""
41
-Undo.Filters.Paste.Single="Colar Filtro '%1' para '%2'"
42
-Undo.Filters.Paste.Multiple="Copiar Filtros de '%1' para '%2'"
43
+Undo.Filters.Paste.Single="filtro copiado de \"%1\" para \"%2\""
44
+Undo.Filters.Paste.Multiple="filtros copiados de \"%1\" para \"%2\""
45
 Undo.Transform="fonte(s) transformada(s) em \"%1\""
46
 Undo.Transform.Paste="transformação colada em \"%1\""
47
 Undo.Transform.Rotate="rotação em \"%1\""
48
@@ -251,28 +254,28 @@
49
 Undo.Transform.VCenter="centralização vertical na tela em \"%1\""
50
 Undo.Transform.HCenter="centralização horizontal na tela em \"%1\""
51
 Undo.Volume.Change="mudança de volume em \"%1\""
52
-Undo.Volume.Mute="Silenciar '%1'"
53
-Undo.Volume.Unmute="Desativar silenciamento '%1'"
54
-Undo.Balance.Change="Mudança de Equilíbrio de Áudio em '%1'"
55
-Undo.SyncOffset.Change="Offset de Sincronização de Áudio em '%1'"
56
-Undo.MonitoringType.Change="Alterar monitoramento de áudio em '%1'"
57
-Undo.Mixers.Change="Alterar Mixers de Áudio em '%1'"
58
-Undo.ForceMono.On="Ativar Mono Forçado em '%1'"
59
-Undo.ForceMono.Off="Desativar Mono Forçado em '%1'"
60
+Undo.Volume.Mute="ativar mudo de \"%1\""
61
+Undo.Volume.Unmute="desativar mudo de \"%1\""
62
+Undo.Balance.Change="alteração no balanço de áudio em '%1'"
63
+Undo.SyncOffset.Change="alteração no atraso na sincronização do áudio em \"%1\""
64
+Undo.MonitoringType.Change="alteração do monitoramento de áudio em \"%1\""
65
+Undo.Mixers.Change="alteração dos mixers de áudio em \"%1\""
66
+Undo.ForceMono.On="ativação do mono forçado em \"%1\""
67
+Undo.ForceMono.Off="desativação do mono forçado em \"%1\""
68
 Undo.Properties="mudança de propriedade em \"%1\""
69
 Undo.Scene.Duplicate="duplicação da cena \"%1\""
70
 Undo.ShowTransition="mostrar transição em \"%1\""
71
 Undo.HideTransition="ocultar transição em \"%1\""
72
-Undo.ShowSceneItem="Mostrar \"%1\" em \"%2\""
73
-Undo.HideSceneItem="Ocultar \"%1\" em \"%2\""
74
+Undo.ShowSceneItem="mostrar \"%1\" em \"%2\""
75
+Undo.HideSceneItem="ocultar \"%1\" em \"%2\""
76
 Undo.ReorderSources="Reordenar as fontes em '%1'"
77
-Undo.MoveUp="Mover \"%1\" para cima em \"%2\""
78
-Undo.MoveDown="Mover \"%1\" para baixo em \"%2\""
79
-Undo.MoveToTop="Mover \"%1\" para o início em \"%2\""
80
-Undo.MoveToBottom="Mover \"%1\" para o final em \"%2\""
81
-Undo.PasteSource="Colar Origem(ns) em'%1'"
82
-Undo.PasteSourceRef="Colar Referência(s) de Origem '%1'"
83
-Undo.GroupItems="Agrupar Itens em '%1'"
84
+Undo.MoveUp="mover \"%1\" para cima em \"%2\""
85
+Undo.MoveDown="mover \"%1\" para baixo em \"%2\""
86
+Undo.MoveToTop="mover \"%1\" para a frente em \"%2\""
87
+Undo.MoveToBottom="mover \"%1\" para trás em \"%2\""
88
+Undo.PasteSource="cópia da(s) origem(ns) para \"%1\""
89
+Undo.PasteSourceRef="cópia da(s) referência(s) da origem para \"%1\""
90
+Undo.GroupItems="agrupamento dos itens para \"%1\""
91
 TransitionNameDlg.Text="Por favor, insira o nome da transição"
92
 TransitionNameDlg.Title="Nome da transição"
93
 TitleBar.Profile="Perfil"
94
@@ -317,6 +320,8 @@
95
 Output.RecordError.EncodeErrorMsg="Ocorreu um erro de codificação durante a gravação."
96
 Output.BadPath.Title="Caminho de arquivo inválido"
97
 Output.BadPath.Text="O caminho do arquivo de saída é inválido. Por favor, certifique-se de informar um caminho válido."
98
+Output.NoBroadcast.Title="Nenhuma transmissão configurada"
99
+Output.NoBroadcast.Text="Você precisa configurar uma transmissão antes de começar a transmitir."
100
 LogReturnDialog="Carregamento do arquivo de registro efetuado com êxito"
101
 LogReturnDialog.Description="Seu arquivo de registro foi enviado. Agora você pode compartilhar a URL para fins de depuração ou suporte."
102
 LogReturnDialog.Description.Crash="Seu relatório de falha foi enviado. Agora você pode compartilhar a URL para fins de depuração."
103
@@ -346,7 +351,7 @@
104
 MissingFiles.HelpText="Alguns arquivos estão faltando desde a última vez que o OBS foi usado."
105
 MissingFiles.Clear="<vazio>"
106
 MissingFiles.NumFound="Encontrado $1 de $2"
107
-MissingFiles.Search="Procurar nas pastas..."
108
+MissingFiles.Search="Procurar pasta..."
109
 MissingFiles.SelectFile="Selecionar arquivo..."
110
 MissingFiles.SelectDir="Selecionar pasta para pesquisar"
111
 MissingFiles.State="Estado"
112
@@ -354,8 +359,10 @@
113
 MissingFiles.Replaced="Substituído"
114
 MissingFiles.Cleared="Excluído"
115
 MissingFiles.Found="Encontrado"
116
-MissingFiles.AutoSearch="Outras correspondências de arquivos encontradas"
117
+MissingFiles.AutoSearch="Correspondências de arquivos adicionais encontradas"
118
 MissingFiles.AutoSearchText="O OBS encontrou outras correspondências para arquivos ausentes na pasta. Gostaria de adicioná-las?"
119
+MissingFiles.NoMissing.Title="Verificação de arquivos ausentes"
120
+MissingFiles.NoMissing.Text="Nenhum arquivo parece estar faltando."
121
 UpdateAvailable="Nova atualização disponível"
122
 UpdateAvailable.Text="A versão %1.%2.%3 já está disponível. <a href='%4'>Clique aqui para fazer download</a>"
123
 Basic.DesktopDevice1="Áudio do desktop"
124
@@ -376,8 +383,8 @@
125
 Deinterlacing.TopFieldFirst="Campo superior primeiro"
126
 Deinterlacing.BottomFieldFirst="Campo inferior primeiro"
127
 VolControl.SliderUnmuted="Barra de volume de '%1':"
128
-VolControl.SliderMuted="Barra de volume de '%1': (atualmente silenciado)"
129
-VolControl.Mute="Silenciar '%1'"
130
+VolControl.SliderMuted="Barra de volume de '%1': (atualmente sem áudio)"
131
+VolControl.Mute="Ativar mudo de '%1'"
132
 VolControl.Properties="Propriedades de '%1'"
133
 Basic.Main.AddSceneDlg.Title="Adicionar cena"
134
 Basic.Main.AddSceneDlg.Text="Por favor, digite o nome da cena"
135
@@ -417,6 +424,8 @@
136
 Basic.PropertiesView.FPS.Simple="Valores de FPS Simples"
137
 Basic.PropertiesView.FPS.Rational="Valores de FPS racionais"
138
 Basic.PropertiesView.FPS.ValidFPSRanges="Intervalos de FPS válidos:"
139
+Basic.PropertiesView.UrlButton.Text="Abrir este link no seu navegador padrão?"
140
+Basic.PropertiesView.UrlButton.OpenUrl="Abrir URL"
141
 Basic.InteractionWindow="Interagindo com '%1'"
142
 Basic.StatusBar.Reconnecting="Desconectado, reconectando-se em %2 segundo(s) (tentativa %1)"
143
 Basic.StatusBar.AttemptingReconnect="Tentando reconectar... (tentativa %1)"
144
@@ -428,7 +437,7 @@
145
 Basic.StatusBar.RecordingSavedTo="Gravação salva em \"%1\""
146
 Basic.StatusBar.ReplayBufferSavedTo="Buffer de reprodução salvo em \"%1\""
147
 Basic.StatusBar.ScreenshotSavedTo="Captura de tela salva em \"%1\""
148
-Basic.StatusBar.AutoRemuxedTo="Gravação auto multiplexada em '%1'"
149
+Basic.StatusBar.AutoRemuxedTo="Gravação auto convertida em \"%1\""
150
 Basic.Filters="Filtros"
151
 Basic.Filters.AsyncFilters="Filtros de áudio/vídeo"
152
 Basic.Filters.AudioFilters="Filtros de áudio"
153
@@ -471,6 +480,8 @@
154
 Basic.TransformWindow.BoundsType.ScaleToWidth="Redimensionar até a largura das bordas"
155
 Basic.TransformWindow.BoundsType.ScaleToHeight="Redimensionar até a altura das bordas"
156
 Basic.TransformWindow.BoundsType.Stretch="Esticar até as bordas"
157
+Basic.TransformWindow.Title="Editar Transformação para '%1'"
158
+Basic.TransformWindow.NoSelectedSource="Nenhuma fonte selecionada"
159
 Basic.Main.AddSourceHelp.Title="Não foi possível adicionar a fonte"
160
 Basic.Main.AddSourceHelp.Text="É necessário pelo menos uma cena para adicionar uma fonte."
161
 Basic.Main.Scenes="Cenas"
162
@@ -482,6 +493,7 @@
163
 Basic.Main.StartReplayBuffer="Iniciar buffer de repetição"
164
 Basic.Main.SaveReplay="Salvar replay"
165
 Basic.Main.StartStreaming="Iniciar transmissão"
166
+Basic.Main.StartBroadcast="Entre Ao Vivo"
167
 Basic.Main.StartVirtualCam="Iniciar câmera virtual"
168
 Basic.Main.StopRecording="Interromper gravação"
169
 Basic.Main.PauseRecording="Pausar gravação"
170
@@ -489,7 +501,10 @@
171
 Basic.Main.StoppingRecording="Interrompendo gravação..."
172
 Basic.Main.StopReplayBuffer="Interromper buffer de repetição"
173
 Basic.Main.StoppingReplayBuffer="Interrompendo buffer de repetição..."
174
+Basic.Main.SetupBroadcast="Gerenciar Transmissão"
175
 Basic.Main.StopStreaming="Interromper transmissão"
176
+Basic.Main.StopBroadcast="Encerrar Transmissão"
177
+Basic.Main.AutoStopEnabled="(Parada Automática)"
178
 Basic.Main.StoppingStreaming="Interrompendo a transmissão..."
179
 Basic.Main.ForceStopStreaming="Interromper transmissão (ignorar atraso)"
180
 Basic.Main.ShowContextBar="Mostrar barra de ferramentas da fonte"
181
@@ -508,6 +523,7 @@
182
 Basic.MainMenu.File.Settings="Configuraçõe&s"
183
 Basic.MainMenu.File.ShowSettingsFolder="Mostrar pasta de configurações"
184
 Basic.MainMenu.File.ShowProfileFolder="Mostrar pasta de perfis"
185
+Basic.MainMenu.File.ShowMissingFiles="Verificar arquivos ausentes"
186
 Basic.MainMenu.AlwaysOnTop="Sempre no topo (&A)"
187
 Basic.MainMenu.File.Exit="Encerrar OBS (&X)"
188
 Basic.MainMenu.Edit="&Editar"
189
@@ -621,6 +637,7 @@
190
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, abaixo (8 cenas)"
191
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, à esquerda (8 cenas)"
192
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, à direita (8 cenas)"
193
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, acima (18 cenas)"
194
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, acima (24 cenas)"
195
 Basic.Settings.Stream="Transmissão"
196
 Basic.Settings.Stream.StreamType="Tipo de transmissão"
197
@@ -689,7 +706,7 @@
198
 Basic.Settings.Output.Advanced="Ativar as configurações avançadas do encoder"
199
 Basic.Settings.Output.EncoderPreset="Padrão de codificação"
200
 Basic.Settings.Output.CustomEncoderSettings="Configurações de codificador personalizadas"
201
-Basic.Settings.Output.CustomMuxerSettings="Configurações personalizadas do Muxer"
202
+Basic.Settings.Output.CustomMuxerSettings="Configurações personalizadas do conversor de gravações"
203
 Basic.Settings.Output.NoSpaceFileName="Gerar nome de arquivo sem espaços"
204
 Basic.Settings.Output.Adv.Rescale="Redimensionar a saída"
205
 Basic.Settings.Output.Adv.AudioTrack="Faixa de áudio"
206
@@ -727,7 +744,7 @@
207
 Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Configurações do codificador de vídeo (se houver)"
208
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Codificador de áudio"
209
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Configurações do codificador de áudio (se houver)"
210
-Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Configurações do Muxer (se houver)"
211
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Configurações do conversor de gravações (se houver)"
212
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Intervalo de keyframes (quadros)"
213
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Mostrar todos os codificadores (incluir potencialmente incompatíveis)"
214
 Screenshot="Caminho da captura de tela"
215
@@ -778,8 +795,8 @@
216
 Basic.Settings.Audio.AuxDevice2="Áudio do microfone ou auxiliar 2"
217
 Basic.Settings.Audio.AuxDevice3="Áudio do microfone ou auxiliar 3"
218
 Basic.Settings.Audio.AuxDevice4="Áudio do microfone ou auxiliar 4"
219
-Basic.Settings.Audio.EnablePushToMute="Ativar pressionar-para-mutar"
220
-Basic.Settings.Audio.PushToMuteDelay="Atraso do pressionar-para-mutar"
221
+Basic.Settings.Audio.EnablePushToMute="Ativar pressionar-para-ativar-mudo"
222
+Basic.Settings.Audio.PushToMuteDelay="Atraso do pressionar-para-ativar-mudo"
223
 Basic.Settings.Audio.EnablePushToTalk="Ativar pressionar-para-falar"
224
 Basic.Settings.Audio.PushToTalkDelay="Atraso do pressionar-para-falar"
225
 Basic.Settings.Audio.UnknownAudioDevice="[Dispositivo desconectado ou indisponível]"
226
@@ -826,7 +843,7 @@
227
 Basic.AdvAudio.SyncOffsetSource="Atraso na sincronização de '%1'"
228
 Basic.AdvAudio.Monitoring="Monitoramento de áudio"
229
 Basic.AdvAudio.Monitoring.None="Não monitorar"
230
-Basic.AdvAudio.Monitoring.MonitorOnly="Apenas monitorar (mutar saída)"
231
+Basic.AdvAudio.Monitoring.MonitorOnly="Apenas monitor (saída sem áudio)"
232
 Basic.AdvAudio.Monitoring.Both="Monitorar e enviar áudio"
233
 Basic.AdvAudio.MonitoringSource="Monitoramento de áudio de '%1'"
234
 Basic.AdvAudio.AudioTracks="Faixas"
235
@@ -856,9 +873,9 @@
236
 Hotkeys.AppleKeypadDecimal=". (teclado)"
237
 Hotkeys.AppleKeypadEqual="= (teclado)"
238
 Hotkeys.MouseButton="Botão %1 do mouse"
239
-Mute="Mutar"
240
-Unmute="Desmutar"
241
-Push-to-mute="Pressione-para-mutar"
242
+Mute="Ativar mudo"
243
+Unmute="Desativar mudo"
244
+Push-to-mute="Pressionar-para-ativar-mudo"
245
 Push-to-talk="Pressione-para-falar"
246
 SceneItemShow="Mostrar '%1'"
247
 SceneItemHide="Ocultar '%1'"
248
@@ -908,3 +925,68 @@
249
 ContextBar.MediaControls.PlaylistPrevious="Anterior na lista de reprodução"
250
 ContextBar.MediaControls.MediaProperties="Propriedades da mídia"
251
 ContextBar.MediaControls.BlindSeek="Widget de procura de mídia"
252
+YouTube.Auth.Ok="Autorização concluída com sucesso.\nVocê pode fechar esta página."
253
+YouTube.Auth.NoCode="O processo de autorização não foi concluído."
254
+YouTube.Auth.NoChannels="Nenhum canal disponível na conta selecionada"
255
+YouTube.Auth.WaitingAuth.Title="Autorização de usuário do YouTube"
256
+YouTube.Auth.WaitingAuth.Text="Por favor, complete a autorização no seu navegador externo.<br>Se o navegador externo não abrir, siga este link e complete a autorização:<br>%1"
257
+YouTube.AuthError.Text="Falha ao obter informações do canal: %1."
258
+YouTube.Actions.WindowTitle="Configuração de Transmissão do YouTube - Canal: %1"
259
+YouTube.Actions.CreateNewEvent="Criar Nova Transmissão"
260
+YouTube.Actions.ChooseEvent="Selecionar Transmissão Existente"
261
+YouTube.Actions.Title="Título*"
262
+YouTube.Actions.MyBroadcast="Minha transmissão"
263
+YouTube.Actions.Description="Descrição"
264
+YouTube.Actions.Privacy="Privacidade*"
265
+YouTube.Actions.Privacy.Private="Privado"
266
+YouTube.Actions.Privacy.Public="Público"
267
+YouTube.Actions.Privacy.Unlisted="Não listado"
268
+YouTube.Actions.Category="Categoria"
269
+YouTube.Actions.Thumbnail="Miniatura"
270
+YouTube.Actions.Thumbnail.SelectFile="Selecionar arquivo..."
271
+YouTube.Actions.Thumbnail.NoFileSelected="Nenhum arquivo selecionado"
272
+YouTube.Actions.Thumbnail.ClearFile="Limpar"
273
+YouTube.Actions.MadeForKids="Este vídeo é feito para crianças?*"
274
+YouTube.Actions.MadeForKids.Yes="Sim, é feito para as crianças"
275
+YouTube.Actions.MadeForKids.No="Não, não é feito para crianças"
276
+YouTube.Actions.AdditionalSettings="Configurações adicionais:"
277
+YouTube.Actions.Latency="Latência"
278
+YouTube.Actions.Latency.Low="Baixa"
279
+YouTube.Actions.Latency.UltraLow="Extremamente baixa"
280
+YouTube.Actions.EnableAutoStart="Habilitar a inicialização automática"
281
+YouTube.Actions.EnableAutoStop="Habilitar o encerramento automático"
282
+YouTube.Actions.AutoStartStop.TT="Indica se essa transmissão programada deve começar automaticamente"
283
+YouTube.Actions.EnableDVR="Habilitar DVR"
284
+YouTube.Actions.360Video="Vídeo 360"
285
+YouTube.Actions.ScheduleForLater="Agendar para mais tarde"
286
+YouTube.Actions.RememberSettings="Lembrar configurações"
287
+YouTube.Actions.Create_Ready="Criar transmissão"
288
+YouTube.Actions.Create_GoLive="Criar e iniciar transmissão"
289
+YouTube.Actions.Choose_Ready="Selecionar transmissão"
290
+YouTube.Actions.Choose_GoLive="Selecionar e iniciar transmissão"
291
+YouTube.Actions.Create_Schedule="Agendar transmissão"
292
+YouTube.Actions.Create_Schedule_Ready="Agendar e selecionar transmissão"
293
+YouTube.Actions.Dashboard="Abrir o YouTube Studio"
294
+YouTube.Actions.Error.Title="Erro na criação da transmissão ao vivo"
295
+YouTube.Actions.Error.Text="Erro de acesso ao YouTube \"%1\".<br/>Descrição detalhada do erro pode ser encontrada em <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
296
+YouTube.Actions.Error.General="Erro de acesso ao YouTube. Por favor, verifique sua conexão de rede ou seu acesso ao servidor do YouTube."
297
+YouTube.Actions.Error.NoBroadcastCreated="Erro de criação de transmissão '%1'.<br/>Descrição de erro detalhada pode ser encontrada em <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
298
+YouTube.Actions.Error.NoStreamCreated="Nenhuma transmissão criada. Por favor, reconecte sua conta."
299
+YouTube.Actions.Error.YouTubeApi="Erro de API do YouTube. Por favor, consulte o arquivo de log para obter mais informações."
300
+YouTube.Actions.Error.BroadcastNotFound="A transmissão selecionada não foi encontrada."
301
+YouTube.Actions.Error.FileMissing="O arquivo selecionado não existe."
302
+YouTube.Actions.Error.FileOpeningFailed="Falha ao abrir o arquivo selecionado."
303
+YouTube.Actions.Error.FileTooLarge="O arquivo selecionado é muito grande (Limite: 2 MiB)."
304
+YouTube.Actions.EventsLoading="Carregando lista de eventos..."
305
+YouTube.Actions.EventCreated.Title="Evento criado"
306
+YouTube.Actions.EventCreated.Text="Evento criado com sucesso."
307
+YouTube.Actions.Stream="Transmissão"
308
+YouTube.Actions.Stream.ScheduledFor="Agendado para %1"
309
+YouTube.Actions.Stream.Resume="Retomar transmissão interrompida"
310
+YouTube.Actions.Stream.YTStudio="Criado automaticamente pelo YouTube Studio"
311
+YouTube.Actions.Notify.CreatingBroadcast="Criando uma nova transmissão ao vivo, por favor aguarde..."
312
+YouTube.Actions.AutoStartStreamingWarning.Title="Início manual necessário"
313
+YouTube.Actions.AutoStartStreamingWarning="O início automático está desativado para este evento, clique em \"Entrar Ao Vivo\" para iniciar a sua transmissão."
314
+YouTube.Actions.AutoStopStreamingWarning="Não será possível reconectar.<br>Sua transmissão será interrompida e você não estará mais ao vivo."
315
+YouTube.Errors.liveStreamingNotEnabled="Transmissão ao vivo não está habilitada no canal selecionado do YouTube.<br/><br/>Veja <a href='https://www.youtube.com/features'>youtube.com/features</a> para mais informações."
316
+YouTube.Errors.livePermissionBlocked="Transmissão ao vivo não está disponível no canal do YouTube selecionado.<br/>Por favor, note que pode demorar até 24 horas para que a transmissão ao vivo fique disponível depois de habilitá-la nas suas configurações de canal.<br/><br/>Consulte <a href='https://www.youtube.com/features'>youtube.com/features</a> para obter detalhes."
317
obs-studio-27.0.1.tar.xz/UI/data/locale/pt-PT.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/pt-PT.ini Changed
165
 
1
@@ -111,6 +111,7 @@
2
 Auth.InvalidScope.Text="Os requisitos de autenticação para %1 mudaram. Algumas funcionalidades podem não estar disponíveis."
3
 Auth.LoadingChannel.Title="A carregar informação do canal..."
4
 Auth.LoadingChannel.Text="A carregar informação do canal para %1, por favor aguarde..."
5
+Auth.LoadingChannel.Error="Impossível obter informações do canal."
6
 Auth.ChannelFailure.Title="Falha ao carregar o canal"
7
 Auth.ChannelFailure.Text="Falha ao carregar informação do canal para %1\n\n%2: %3"
8
 Auth.StreamInfo="Informação da transmissão"
9
@@ -152,6 +153,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Obter chave de transmissão"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Mais informações"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Usar chave de transmissão"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Usar chave da transmissão (avançado)"
14
 Basic.AutoConfig.StreamPage.Service="Serviço"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar tudo..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizado..."
17
@@ -159,6 +161,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Chave de transmissão"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(ligação)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Chave de codificação"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Conta ligada"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimar taxa de bits com teste de largura de banda (pode demorar alguns minutos)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificação de equipamento"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="A codificação de equipamento elimina a maior parte da utilização da CPU mas pode precisar de uma taxa de bits maior para obter o mesmo nível de qualidade."
25
@@ -319,6 +322,8 @@
26
 Output.RecordError.EncodeErrorMsg="Ocorreu um erro de codificação ao gravar."
27
 Output.BadPath.Title="Caminho de ficheiro inválido"
28
 Output.BadPath.Text="O caminho de ficheiro de saída definido é inválido. Por favor, verifique as definições e confirme que há um caminho válido."
29
+Output.NoBroadcast.Title="Nenhuma transmissão configurada"
30
+Output.NoBroadcast.Text="Tem de configurar uma transmissão antes de começar a emitir."
31
 LogReturnDialog="Envio de diário com sucesso"
32
 LogReturnDialog.Description="O seu ficheiro de diário foi enviado. Agora pode partilhar o URL para fins de depuração ou suporte."
33
 LogReturnDialog.Description.Crash="O seu relatório de falha foi enviado. Agora pode partilhar o URL para fins de depuração."
34
@@ -358,6 +363,8 @@
35
 MissingFiles.Found="Encontrado"
36
 MissingFiles.AutoSearch="Mais ficheiros correspondentes encontrados"
37
 MissingFiles.AutoSearchText="O OBS encontrou correspondências adicionais para ficheiros em falta na pasta. Deseja adicioná-los?"
38
+MissingFiles.NoMissing.Title="Procurar ficheiros em falta"
39
+MissingFiles.NoMissing.Text="Não parece haver ficheiros em falta"
40
 UpdateAvailable="Nova actualização disponível"
41
 UpdateAvailable.Text="A versão %1.%2.%3 está agora disponível. <a href='%4'>Clique aqui para transferir</a>"
42
 Basic.DesktopDevice1="Áudio da área de trabalho"
43
@@ -423,6 +430,8 @@
44
 Basic.PropertiesView.FPS.Simple="Valores de FPS simples"
45
 Basic.PropertiesView.FPS.Rational="Valores de FPS racionais"
46
 Basic.PropertiesView.FPS.ValidFPSRanges="Intervalos de FPS válidos:"
47
+Basic.PropertiesView.UrlButton.Text="Abrir a ligação no navegador predefinido?"
48
+Basic.PropertiesView.UrlButton.OpenUrl="Abrir URL"
49
 Basic.InteractionWindow="A interagir com \"%1\""
50
 Basic.StatusBar.Reconnecting="Desligado. A ligar em %2 segundo(s) (tentativa %1)"
51
 Basic.StatusBar.AttemptingReconnect="A tentar nova ligação... (tentativa %1)"
52
@@ -477,6 +486,8 @@
53
 Basic.TransformWindow.BoundsType.ScaleToWidth="Escalar à largura do limite"
54
 Basic.TransformWindow.BoundsType.ScaleToHeight="Escalar à altura do limite"
55
 Basic.TransformWindow.BoundsType.Stretch="Esticar ao limite"
56
+Basic.TransformWindow.Title="Editar transformação para \"%1\""
57
+Basic.TransformWindow.NoSelectedSource="Nenhuma fonte seleccionada"
58
 Basic.Main.AddSourceHelp.Title="Impossível adicionar fonte"
59
 Basic.Main.AddSourceHelp.Text="Precisa de pelo menos uma cena para adicionar uma fonte."
60
 Basic.Main.Scenes="Cenas"
61
@@ -488,6 +499,7 @@
62
 Basic.Main.StartReplayBuffer="Iniciar memória de repetição"
63
 Basic.Main.SaveReplay="Gravar repetição"
64
 Basic.Main.StartStreaming="Iniciar transmissão"
65
+Basic.Main.StartBroadcast="Emitir em directo"
66
 Basic.Main.StartVirtualCam="Iniciar câmara virtual"
67
 Basic.Main.StopRecording="Parar gravação"
68
 Basic.Main.PauseRecording="Pausar gravação"
69
@@ -495,7 +507,10 @@
70
 Basic.Main.StoppingRecording="A parar gravação..."
71
 Basic.Main.StopReplayBuffer="Parar memória de repetição"
72
 Basic.Main.StoppingReplayBuffer="A parar memória de repetição..."
73
+Basic.Main.SetupBroadcast="Gerir transmissão"
74
 Basic.Main.StopStreaming="Parar transmissão"
75
+Basic.Main.StopBroadcast="Terminar transmissão"
76
+Basic.Main.AutoStopEnabled="(paragem automática)"
77
 Basic.Main.StoppingStreaming="A parar transmissão..."
78
 Basic.Main.ForceStopStreaming="Parar transmissão (ignorar atraso)"
79
 Basic.Main.ShowContextBar="Mostrar barra de ferramentas da fonte"
80
@@ -514,6 +529,7 @@
81
 Basic.MainMenu.File.Settings="Definiçõe&s"
82
 Basic.MainMenu.File.ShowSettingsFolder="Mostrar pasta das definições"
83
 Basic.MainMenu.File.ShowProfileFolder="Mostrar pasta do perfil"
84
+Basic.MainMenu.File.ShowMissingFiles="Procurar ficheiros em falta"
85
 Basic.MainMenu.AlwaysOnTop="Sempre em cim&a"
86
 Basic.MainMenu.File.Exit="&Sair"
87
 Basic.MainMenu.Edit="&Editar"
88
@@ -627,6 +643,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, fundo (8 cenas)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, esquerda (8 cenas)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, direita (8 cenas)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontal, topo (18 cenas)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontal, topo (24 cenas)"
94
 Basic.Settings.Stream="Transmissão"
95
 Basic.Settings.Stream.StreamType="Tipo de transmissão"
96
@@ -913,3 +930,68 @@
97
 ContextBar.MediaControls.PlaylistPrevious="Anterior na lista de reprodução"
98
 ContextBar.MediaControls.MediaProperties="Propriedades do conteúdo"
99
 ContextBar.MediaControls.BlindSeek="Ferramenta de procura de conteúdo"
100
+YouTube.Auth.Ok="Autorização concluída com sucesso.\nPode agora fechar esta página."
101
+YouTube.Auth.NoCode="O processo de autorização não foi concluído."
102
+YouTube.Auth.NoChannels="Nenhum canal disponível na conta seleccionada"
103
+YouTube.Auth.WaitingAuth.Title="Autorização de utilizador YouTube"
104
+YouTube.Auth.WaitingAuth.Text="Por favor, complete a autorização no seu navegador externo.<br>Se o navegador externo não abrir, siga esta ligação e complete a autorização:<br>%1"
105
+YouTube.AuthError.Text="Falha ao obter informações do canal: %1."
106
+YouTube.Actions.WindowTitle="Configuração de transmissão do YouTube - Canal: %1"
107
+YouTube.Actions.CreateNewEvent="Criar nova transmissão"
108
+YouTube.Actions.ChooseEvent="Seleccionar transmissão existente"
109
+YouTube.Actions.Title="Título*"
110
+YouTube.Actions.MyBroadcast="Minha transmissão"
111
+YouTube.Actions.Description="Descrição"
112
+YouTube.Actions.Privacy="Privacidade*"
113
+YouTube.Actions.Privacy.Private="Privado"
114
+YouTube.Actions.Privacy.Public="Público"
115
+YouTube.Actions.Privacy.Unlisted="Não listado"
116
+YouTube.Actions.Category="Categoria"
117
+YouTube.Actions.Thumbnail="Miniatura"
118
+YouTube.Actions.Thumbnail.SelectFile="Seleccionar ficheiro..."
119
+YouTube.Actions.Thumbnail.NoFileSelected="Nenhum ficheiro seleccionado"
120
+YouTube.Actions.Thumbnail.ClearFile="Limpar"
121
+YouTube.Actions.MadeForKids="Este vídeo é feito para crianças?*"
122
+YouTube.Actions.MadeForKids.Yes="Sim, é feito para crianças"
123
+YouTube.Actions.MadeForKids.No="Não, não é feito para crianças"
124
+YouTube.Actions.AdditionalSettings="Definições adicionais:"
125
+YouTube.Actions.Latency="Latência"
126
+YouTube.Actions.Latency.Low="Baixa"
127
+YouTube.Actions.Latency.UltraLow="Ultra baixa"
128
+YouTube.Actions.EnableAutoStart="Activar início automático"
129
+YouTube.Actions.EnableAutoStop="Activar paragem automática"
130
+YouTube.Actions.AutoStartStop.TT="Indica se esta transmissão programada deve começar automaticamente"
131
+YouTube.Actions.EnableDVR="Activar DVR"
132
+YouTube.Actions.360Video="Vídeo 360"
133
+YouTube.Actions.ScheduleForLater="Agendar para mais tarde"
134
+YouTube.Actions.RememberSettings="Recordar estas definições"
135
+YouTube.Actions.Create_Ready="Criar transmissão"
136
+YouTube.Actions.Create_GoLive="Criar transmissão e iniciar a emissão"
137
+YouTube.Actions.Choose_Ready="Seleccionar transmissão"
138
+YouTube.Actions.Choose_GoLive="Seleccionar a transmissão e começar a emissão"
139
+YouTube.Actions.Create_Schedule="Agendar transmissão"
140
+YouTube.Actions.Create_Schedule_Ready="Agendar e seleccionar transmissão"
141
+YouTube.Actions.Dashboard="Abrir o YouTube Studio"
142
+YouTube.Actions.Error.Title="Erro na criação da transmissão ao vivo"
143
+YouTube.Actions.Error.Text="Erro de acesso ao YouTube \"%1\".<br/>Pode encontrar uma descrição detalhada do erro em <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
144
+YouTube.Actions.Error.General="Falha ao aceder ao YouTube. Por favor, verifique a ligação à rede ou o acesso ao servidor do YouTube."
145
+YouTube.Actions.Error.NoBroadcastCreated="Erro de criação de transmissão \"%1\".<br/>Pode encontrar uma descrição detalhada do erro em <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
146
+YouTube.Actions.Error.NoStreamCreated="Nenhuma transmissão criada. Por favor, religue a conta."
147
+YouTube.Actions.Error.YouTubeApi="Erro da API do YouTube. Por favor, veja o diário para mais informações."
148
+YouTube.Actions.Error.BroadcastNotFound="A transmissão seleccionada não foi encontrada."
149
+YouTube.Actions.Error.FileMissing="O ficheiro seleccionado não existe."
150
+YouTube.Actions.Error.FileOpeningFailed="Falha ao abrir o ficheiro seleccionado."
151
+YouTube.Actions.Error.FileTooLarge="Ficheiro seleccionado muito grande (Limite: 2 MiB)."
152
+YouTube.Actions.EventsLoading="A carregar a lista de eventos..."
153
+YouTube.Actions.EventCreated.Title="Evento criado"
154
+YouTube.Actions.EventCreated.Text="Evento criado com sucesso."
155
+YouTube.Actions.Stream="Transmissão"
156
+YouTube.Actions.Stream.ScheduledFor="Agendado para %1"
157
+YouTube.Actions.Stream.Resume="Retomar transmissão interrompida"
158
+YouTube.Actions.Stream.YTStudio="Criado automaticamente pelo YouTube Studio"
159
+YouTube.Actions.Notify.CreatingBroadcast="A criar uma nova transmissão ao vivo, por favor aguarde..."
160
+YouTube.Actions.AutoStartStreamingWarning.Title="Início manual necessário"
161
+YouTube.Actions.AutoStartStreamingWarning="O início automático está desactivado para este evento, clique em \"Emitir em directo\" para iniciar a transmissão."
162
+YouTube.Actions.AutoStopStreamingWarning="Não poderá voltar a ligar.<br>A sua transmissão parará e deixará de estar em directo."
163
+YouTube.Errors.liveStreamingNotEnabled="A transmissão ao vivo não está activa no canal do YouTube seleccionado.<br/><br/>Veja <a href='https://www.youtube.com/features'>youtube.com/features</a> para mais informação."
164
+YouTube.Errors.livePermissionBlocked="A transmissão ao vivo não está disponível no canal do YouTube seleccionado.<br/>Por favor, note que pode demorar até 24 horas para que a transmissão ao vivo fique disponível após activá-la nas definições do canal.<br/><br/>Veja <a href='https://www.youtube.com/features'>youtube.com/features</a> para obter detalhes."
165
obs-studio-27.0.1.tar.xz/UI/data/locale/ro-RO.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ro-RO.ini Changed
170
 
1
@@ -108,6 +108,7 @@
2
 Auth.InvalidScope.Text="Cerințele de autentificare pentru %1 s-au schimbat. Unele funcții pot să nu fie disponibile."
3
 Auth.LoadingChannel.Title="Se încarcă informațiile canalului..."
4
 Auth.LoadingChannel.Text="Se încarcă informațiile canalului pentru %1, te rugăm să aștepți..."
5
+Auth.LoadingChannel.Error="Nu s-au putut obține informații despre canal."
6
 Auth.ChannelFailure.Title="Încărcarea canalului a eșuat"
7
 Auth.ChannelFailure.Text="Încărcarea informațiilor canalului pentru %1 a eșuat\n\n%2: %3"
8
 Auth.StreamInfo="Informații privind transmisiunea"
9
@@ -148,11 +149,13 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Obține cheia de transmisiune"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Mai multe informații"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Folosește o cheie de transmisiune"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Folosește o cheie de transmisiune (avansat)"
14
 Basic.AutoConfig.StreamPage.Service="Serviciu"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Afișează toate..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Personalizat..."
17
 Basic.AutoConfig.StreamPage.StreamKey="Cheie de transmisiune"
18
 Basic.AutoConfig.StreamPage.EncoderKey="Cheia codificării"
19
+Basic.AutoConfig.StreamPage.ConnectedAccount="Cont conectat"
20
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimează rata de biți cu o testare a lățimii de bandă (poate dura câteva minute)"
21
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferă codificarea hardware"
22
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Codificarea hardware elimină cea mai mare parte a utilizării CPU, însă poate necesita o rată de biți mai mare pentru a obține același nivel de calitate."
23
@@ -312,6 +315,8 @@
24
 Output.RecordError.EncodeErrorMsg="A apărut o eroare de codificare în timpul înregistrării."
25
 Output.BadPath.Title="Calea fișierului greșită"
26
 Output.BadPath.Text="Calea configurată pentru fișierul de output este nevalidă. Te rugăm să verifici setările pentru a confirma că a fost setată o cale validă a fișierului."
27
+Output.NoBroadcast.Title="Nicio difuzare configurată"
28
+Output.NoBroadcast.Text="Trebuie să configurați o difuzare înainte de a putea începe streaming-ul."
29
 LogReturnDialog="Jurnal încărcat cu succes"
30
 LogReturnDialog.Description="Fișierul jurnal a fost încărcat. Acum poți distribui adresa URL în scopuri de depanare sau de asistență."
31
 LogReturnDialog.Description.Crash="Raportul de defecțiune a fost încărcat. Acum poți distribui adresa URL în scopuri de depanare sau de asistență."
32
@@ -351,6 +356,8 @@
33
 MissingFiles.Found="Găsit"
34
 MissingFiles.AutoSearch="Au fost găsite potriviri de fișiere suplimentare"
35
 MissingFiles.AutoSearchText="OBS a găsit potriviri suplimentare pentru fișierele lipsă din acest director. Dorești să le adaugi?"
36
+MissingFiles.NoMissing.Title="Verificarea fișierelor lipsă"
37
+MissingFiles.NoMissing.Text="Nu pare să lipsească niciun fișier."
38
 UpdateAvailable="Actualizare nouă disponibilă"
39
 UpdateAvailable.Text="Versiunea %1.%2.%3 este acum disponibilă. <a href='%4'> Clic aici pentru a descărca</a>"
40
 Basic.DesktopDevice1="Audio desktop"
41
@@ -418,6 +425,8 @@
42
 Basic.PropertiesView.FPS.Simple="Valori FPS simple"
43
 Basic.PropertiesView.FPS.Rational="Valori FPS raționale"
44
 Basic.PropertiesView.FPS.ValidFPSRanges="Intervale FPS valide:"
45
+Basic.PropertiesView.UrlButton.Text="Deschideți acest link in browser-ul dvs. implicit?"
46
+Basic.PropertiesView.UrlButton.OpenUrl="Deschide URL-ul"
47
 Basic.InteractionWindow="Interacționează cu '%1'"
48
 Basic.StatusBar.Reconnecting="Deconectat, se reconectează în %2 secundă(e) (încercarea %1)"
49
 Basic.StatusBar.AttemptingReconnect="Se încearcă reconectarea... (încercarea %1)"
50
@@ -472,6 +481,8 @@
51
 Basic.TransformWindow.BoundsType.ScaleToWidth="Scalează la lățimea limitei"
52
 Basic.TransformWindow.BoundsType.ScaleToHeight="Scalează la înălțimea limitei"
53
 Basic.TransformWindow.BoundsType.Stretch="Întinde la limite"
54
+Basic.TransformWindow.Title="Editează transformarea pentru '%1'"
55
+Basic.TransformWindow.NoSelectedSource="Nici o sursă selectată"
56
 Basic.Main.AddSourceHelp.Title="Nu se poate adăuga sursa"
57
 Basic.Main.AddSourceHelp.Text="Trebuie să ai cel puțin 1 scenă pentru a adăuga o sursă."
58
 Basic.Main.Scenes="Scene"
59
@@ -483,6 +494,7 @@
60
 Basic.Main.StartReplayBuffer="Pornește bufferul de reluări"
61
 Basic.Main.SaveReplay="Salvează reluarea"
62
 Basic.Main.StartStreaming="Pornește transmisiunea"
63
+Basic.Main.StartBroadcast="Treceti pe modul live"
64
 Basic.Main.StartVirtualCam="Pornește camera virtuală"
65
 Basic.Main.StopRecording="Oprește înregistrarea"
66
 Basic.Main.PauseRecording="Pune pe pauză înregistrarea"
67
@@ -490,7 +502,9 @@
68
 Basic.Main.StoppingRecording="Se oprește înregistrarea..."
69
 Basic.Main.StopReplayBuffer="Oprește bufferul de reluări"
70
 Basic.Main.StoppingReplayBuffer="Se oprește bufferul de reluări..."
71
+Basic.Main.SetupBroadcast="Gestionați difuzarea"
72
 Basic.Main.StopStreaming="Oprește transmisiunea"
73
+Basic.Main.StopBroadcast="Încheie transmisiunea"
74
 Basic.Main.StoppingStreaming="Se oprește transmisiunea..."
75
 Basic.Main.ForceStopStreaming="Oprește transmisiunea (renunță la întârziere)"
76
 Basic.Main.ShowContextBar="Afișează bara de unelte pentru sursă"
77
@@ -509,6 +523,7 @@
78
 Basic.MainMenu.File.Settings="&Setări"
79
 Basic.MainMenu.File.ShowSettingsFolder="Afișează folderul cu setări"
80
 Basic.MainMenu.File.ShowProfileFolder="Afișează folderul cu profiluri"
81
+Basic.MainMenu.File.ShowMissingFiles="Caută fișiere lipsă"
82
 Basic.MainMenu.AlwaysOnTop="Întotde&auna deasupra"
83
 Basic.MainMenu.File.Exit="Ieși (&X)"
84
 Basic.MainMenu.Edit="&Editare"
85
@@ -621,6 +636,7 @@
86
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Orizontal, jos (8 scene)"
87
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, stânga (8 scene)"
88
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, dreapta (8 scene)"
89
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Orizontal, Sus (18 Scene)"
90
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Orizontal, sus (24 de scene)"
91
 Basic.Settings.Stream="Transmisiune"
92
 Basic.Settings.Stream.StreamType="Tipul transmisiunii"
93
@@ -731,7 +747,7 @@
94
 Screenshot.Preview="Realizează o captură de ecran (Previzualizare)"
95
 Screenshot.Scene="Realizează o captură de ecran (Scenă)"
96
 Screenshot.Source="Realizează o captură de ecran (Sursă)"
97
-FilenameFormatting.completer="%CCDD-%MM-%YY %hh-%mm-%ss\n%DD-%MM-%YY %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- %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"
98
+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%d-%m-%Y %I-%M-%S-%p\n%d-%m-%Y %H-%M-%S-%z\n%d-%m-%Y %H-%M-%S-%Z\n%FPS\n%CRES\n%ORES\n"
99
 FilenameFormatting.TT="%CCYY       An, patru cifre\n%YY        An, ultimele 2 cifre (00-99)\n%MM       Luna ca numar decimal (01-12)\n%DD      Ziua lunii, prefixat cu 0 (01-31)\n%hh      Ora in format 24h (00-23)\n%mm      Minut (00-59)\n%ss      Secunda (00-61)\n%%     Un % semn\n%a       Numele zilei abreviat\n%A       Numele zilei full\n%b       Numele lunii abreviat\n%B       Numele lunii full\n%d       Ziua lunii, prefixat cu 0 (01-31)\n%H       Ora in format 24h (00-23)\n%I       Ora in format 12h (01-12)\n%m       Luna ca numar decimal (01-12)\n%M       Minut (00-59)\n%p       Desemnari AM or PM\n%S      Secunda (00-61)\n%y     An, ultimele 2 cifre (00-99)\n%Y        An\n%z      ISO 8601 compensare UTC or fus orar\n       nume sau abreviere\n%Z      Numele fusului orar sau abreviere\n"
100
 Basic.Settings.Video.Adapter="Adaptor video"
101
 Basic.Settings.Video.BaseResolution="Rezoluție de bază (a planșei)"
102
@@ -904,3 +920,67 @@
103
 ContextBar.MediaControls.PlaylistPrevious="Anteriorul în playlist"
104
 ContextBar.MediaControls.MediaProperties="Proprietăți media"
105
 ContextBar.MediaControls.BlindSeek="Widget de căutare media"
106
+YouTube.Auth.Ok="Autorizarea a fost finalizată cu succes.\nAcum poți închide această pagină."
107
+YouTube.Auth.NoCode="Procesul de autorizare nu a fost finalizat."
108
+YouTube.Auth.NoChannels="Nici un canal(e) disponibil(e) în contul selectat"
109
+YouTube.Auth.WaitingAuth.Title="Autorizare pentru utilizatorul YouTube"
110
+YouTube.Auth.WaitingAuth.Text="Te rugăm să completezi autorizarea în browserul extern.<br>Dacă browserul extern nu se deschide, urmează acest link și completează autorizarea:<br>%1"
111
+YouTube.AuthError.Text="Eșuare obținere informații despre canal: %1"
112
+YouTube.Actions.WindowTitle="Configurare difuzare YouTube - Canal: %1"
113
+YouTube.Actions.CreateNewEvent="Creați o difuzare nouă"
114
+YouTube.Actions.ChooseEvent="Selectați difuzarea existentă"
115
+YouTube.Actions.Title="Titlu*"
116
+YouTube.Actions.MyBroadcast="Transmisiunea mea"
117
+YouTube.Actions.Description="Descriere"
118
+YouTube.Actions.Privacy="Confidențialitate*"
119
+YouTube.Actions.Privacy.Private="Privat"
120
+YouTube.Actions.Privacy.Unlisted="Nelistat"
121
+YouTube.Actions.Category="Categorie"
122
+YouTube.Actions.Thumbnail="Miniatură"
123
+YouTube.Actions.Thumbnail.SelectFile="Selectați fișierul..."
124
+YouTube.Actions.Thumbnail.NoFileSelected="Niciun fișier selectat"
125
+YouTube.Actions.Thumbnail.ClearFile="Șterge"
126
+YouTube.Actions.MadeForKids="Este acest video făcut pentru copii?*"
127
+YouTube.Actions.MadeForKids.Yes="Da, este făcut pentru copii"
128
+YouTube.Actions.MadeForKids.No="Nu, nu este făcut pentru copii"
129
+YouTube.Actions.AdditionalSettings="Setări adiționale:"
130
+YouTube.Actions.Latency="Latență"
131
+YouTube.Actions.Latency.Low="Redusă"
132
+YouTube.Actions.Latency.UltraLow="Ultra redusă"
133
+YouTube.Actions.EnableAutoStart="Activează Auto-start"
134
+YouTube.Actions.EnableAutoStop="Activează Auto-stop"
135
+YouTube.Actions.AutoStartStop.TT="Indică dacă această difuzare programată ar trebui să înceapă automat"
136
+YouTube.Actions.EnableDVR="Activează DVR"
137
+YouTube.Actions.360Video="Video 360"
138
+YouTube.Actions.ScheduleForLater="Programează pentru mai târziu"
139
+YouTube.Actions.RememberSettings="Memorează aceste setări"
140
+YouTube.Actions.Create_Ready="Creați difuzare"
141
+YouTube.Actions.Create_GoLive="Creați difuzarea și începeți streaming-ul"
142
+YouTube.Actions.Choose_Ready="Selectați difuzarea"
143
+YouTube.Actions.Choose_GoLive="Selectați difuzarea și începeți streaming-ul"
144
+YouTube.Actions.Create_Schedule="Programare difuzare"
145
+YouTube.Actions.Create_Schedule_Ready="Programați și selectați difuzarea"
146
+YouTube.Actions.Dashboard="Deschideți YouTube Studio"
147
+YouTube.Actions.Error.Title="Eroare creare transmisiune în direct"
148
+YouTube.Actions.Error.Text="Eroare acces YouTube '%1'. <br/> Descrierea detaliată a erorii poate fi găsită la <a href='https://developers.google.com/youtube/v3/live/docs/errors'> https: // dezvoltatori .Google.com / YouTube / v3 / Live / Docs / Errors </a>"
149
+YouTube.Actions.Error.General="Eroare de acces YouTube. Verificați conexiunea la rețea sau accesul la serverul YouTube."
150
+YouTube.Actions.Error.NoBroadcastCreated="Eroare creare transmisiune \"%1\". <br/> Descrierea detaliată a erorii poate fi găsită la <a href='https://developers.google.com/youtube/v3/live/docs/errors'> https: // dezvoltatori .Google.com / YouTube / v3 / Live / Docs / Errors </a>"
151
+YouTube.Actions.Error.NoStreamCreated="Nici un flux creat. Vă rugăm să vă reconectați contul."
152
+YouTube.Actions.Error.YouTubeApi="Eroare API YouTube. Consultați fișierul jurnal pentru mai multe informații."
153
+YouTube.Actions.Error.BroadcastNotFound="Transmisiunea selectată nu a fost găsită."
154
+YouTube.Actions.Error.FileMissing="Fișierul selectat nu există."
155
+YouTube.Actions.Error.FileOpeningFailed="Deschiderea fișierului selectat nu a reușit."
156
+YouTube.Actions.Error.FileTooLarge="Fișierul selectat este prea mare (Limita: 2MiB)."
157
+YouTube.Actions.EventsLoading="Încarcare listă de evenimente..."
158
+YouTube.Actions.EventCreated.Title="Eveniment creat"
159
+YouTube.Actions.EventCreated.Text="Eveniment creat cu succes."
160
+YouTube.Actions.Stream="Transmisiune"
161
+YouTube.Actions.Stream.ScheduledFor="Programat pentru %1"
162
+YouTube.Actions.Stream.Resume="Reluare flux întrerupt"
163
+YouTube.Actions.Stream.YTStudio="Creat automat de YouTube Studio"
164
+YouTube.Actions.Notify.CreatingBroadcast="Crearea unei noi transmisiuni în direct, vă rugăm să așteptați..."
165
+YouTube.Actions.AutoStartStreamingWarning.Title="Start manual necesar"
166
+YouTube.Actions.AutoStartStreamingWarning="Auto-start este dezactivat pentru acest eveniment, apăsați \"Du-te în direct\" pentru a porni transmisiunea."
167
+YouTube.Actions.AutoStopStreamingWarning="Nu vă veți putea reconecta.<br>Transmisiunea dvs. se va opri și nu veți mai fi în direct."
168
+YouTube.Errors.liveStreamingNotEnabled="Transmisiunea în direct nu este activată pe canalul YouTube selectat.<br/><br/> Vezi<a href='https://www.youtube.com/features'>youTube.com/features</a> pentru mai multe informații."
169
+YouTube.Errors.livePermissionBlocked="Transmisiunea în direct nu este disponibilă pe canalul dvs. YouTube selectat <br/> Vă rugăm să rețineți că poate dura până la 24 de ore pentru a deveni disponibil după activarea acesteia în setările canalului.<br/><br/>Vezi <a href='https: //www.youtube.com/features \">youTube.com/features </a> pentru detalii."
170
obs-studio-27.0.1.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ru-RU.ini Changed
269
 
1
@@ -111,6 +111,7 @@
2
 Auth.InvalidScope.Text="Требования к аутентификации для %1 изменились. Некоторые функции могут быть недоступны."
3
 Auth.LoadingChannel.Title="Загрузка информации о канале..."
4
 Auth.LoadingChannel.Text="Загрузка информации о канале для %1, пожалуйста подождите..."
5
+Auth.LoadingChannel.Error="Не удалось получить информацию о канале."
6
 Auth.ChannelFailure.Title="Не удалось загрузить канал"
7
 Auth.ChannelFailure.Text="Не удалось загрузить информацию о канале для %1\n\n%2: %3"
8
 Auth.Chat="Чат"
9
@@ -153,6 +154,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Получить ключ потока"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Подробная информация"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Использовать ключ потока"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Использовать ключ потока (для продвинутых пользователей)"
14
 Basic.AutoConfig.StreamPage.Service="Сервис"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Показать все..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Настраиваемый..."
17
@@ -160,6 +162,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Ключ потока"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Ссылка)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Ключ Кодирования"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Подключённый аккаунт"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Посчитать битрейт во время теста пропускной способности (может занять несколько минут)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Предпочитать аппаратное кодирование"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Аппаратное кодирование снижает использование ЦП, но может потребовать больший битрейт, для достижения того же уровня качества."
25
@@ -220,7 +223,7 @@
26
 QuickTransitions.SwapScenes="Менять местами сцены предпросмотра и вывода после перехода"
27
 QuickTransitions.SwapScenesTT="Меняет местами сцены предпросмотра и вывода после перехода (если оригинальная выходная сцена до сих пор существует).\nЭто не отменяет никаких изменений, которые возможно были сделаны в оригинальной выходной сцене."
28
 QuickTransitions.DuplicateScene="Дублировать сцену"
29
-QuickTransitions.DuplicateSceneTT="При редактировании одной и той же сцены, функция позволяет трансформировать редактирования/видимости источников без изменения выхода.\nДля редактирования свойств источников без изменения выходного сигнала, включить \"дублировать источники'.\nИзменение этого параметра приведёт к сбросу выходного сигнала в сцене (если оно ещё существует)."
30
+QuickTransitions.DuplicateSceneTT="При редактировании одной и той же сцены, функция позволяет трансформировать редактирования/видимости источников без изменения выхода.\nДля редактирования свойств источников без изменения выходного сигнала, включить \"дублировать источники\".\nИзменение этого параметра приведёт к сбросу выходного сигнала в сцене (если оно ещё существует)."
31
 QuickTransitions.EditProperties="Дублировать источники"
32
 QuickTransitions.EditPropertiesTT="При редактировании одной и той же сцены, функция позволяет редактировать свойства источников без изменения выхода.\nЭто может только использоваться, если параметр \"Повторяющиеся Сцены\" включён.\nНекоторые источники (такие как захват или медиа-источники) не поддерживаются и не могут быть отредактированы отдельно.\nИзменение этого параметра приведёт к сбросу выходного сигнала в сцене (если оно ещё существует).\n\nПредупреждение: поскольку источники будут дублироваться, это может потребовать дополнительных системных ресурсов или видео."
33
 QuickTransitions.HotkeyName="Быстрый переход: %1"
34
@@ -232,50 +235,50 @@
35
 Basic.TogglePreviewProgramMode="Режим студии"
36
 Undo.Undo="Отменить"
37
 Undo.Redo="Повторить"
38
-Undo.Add="Добавить '%1'"
39
-Undo.Delete="Удалить '%1'"
40
-Undo.Rename="Переименовать '%1'"
41
-Undo.SceneCollection.Switch="Переключить на '%1'"
42
+Undo.Add="добавление \"%1\""
43
+Undo.Delete="удаление \"%1\""
44
+Undo.Rename="переименовывание \"%1\""
45
+Undo.SceneCollection.Switch="переключение на \"%1\""
46
 Undo.Item.Undo="Отменить %1"
47
 Undo.Item.Redo="Повторить %1"
48
 Undo.Sources.Multi="Удалить источники %1"
49
-Undo.Filters="настройку фильтра в '%1'"
50
-Undo.Filters.Paste.Single="Вставить фильтр '%1' в '%2'"
51
-Undo.Filters.Paste.Multiple="Скопировать фильтры из '%1' в '%2'"
52
-Undo.Transform="преобразование источника(ов) в '%1'"
53
-Undo.Transform.Paste="вставку настроек преобразования в '%1'"
54
-Undo.Transform.Rotate="поворот '%1'"
55
-Undo.Transform.Reset="сброс настроек преобразования в '%1'"
56
-Undo.Transform.HFlip="отзеркаливание по горизонтали в '%1'"
57
-Undo.Transform.VFlip="отзеркаливание по вертикали в '%1'"
58
-Undo.Transform.FitToScreen="растяжение по размеру экрана в '%1'"
59
-Undo.Transform.StretchToScreen="растяжение по размеру экрана в '%1'"
60
-Undo.Transform.Center="центрирование на экране в '%1'"
61
-Undo.Transform.VCenter="вертикальное центрирование на экране в '%1'"
62
-Undo.Transform.HCenter="горизонтальное центрирование на экране в '%1'"
63
-Undo.Volume.Change="изменение громкости у '%1'"
64
-Undo.Volume.Mute="Выключить звук '%1'"
65
-Undo.Volume.Unmute="Включить звук '%1'"
66
-Undo.Balance.Change="Изменение баланса аудио на '%1'"
67
-Undo.SyncOffset.Change="Изменить смешение синхронизации звука '%1'"
68
-Undo.MonitoringType.Change="Изменить аудиомониторинг для '%1'"
69
-Undo.Mixers.Change="Изменить настройки аудио микшера на '%1'"
70
-Undo.ForceMono.On="Включить принудительный моно '%1'"
71
-Undo.ForceMono.Off="Выключить принудительный моно '%1'"
72
-Undo.Properties="настройки свойств источника '%1'"
73
-Undo.Scene.Duplicate="дублирование сцены '%1'"
74
-Undo.ShowTransition="Показать переход на '%1'"
75
-Undo.HideTransition="Скрыть переход на '%1'"
76
-Undo.ShowSceneItem="Показать '%1' в '%2'"
77
-Undo.HideSceneItem="Скрыть '%1' в '%2'"
78
-Undo.ReorderSources="Пересортировать источники в '%1'"
79
-Undo.MoveUp="Переместить '%1' верхнюю часть '%2'"
80
-Undo.MoveDown="Переместить '%1' нижнюю часть '%2'"
81
-Undo.MoveToTop="Переместить '%1' на передний план '%2'"
82
-Undo.MoveToBottom="Переместить '%1' на задний план '%2'"
83
-Undo.PasteSource="Вставить источник(и) в '%1'"
84
-Undo.PasteSourceRef="Вставить исходную ссылку(и) в '%1'"
85
-Undo.GroupItems="Cгруппированные элементы в \"%1\""
86
+Undo.Filters="настройку фильтра в \"%1\""
87
+Undo.Filters.Paste.Single="вставку фильтра \"%1\" в \"%2\""
88
+Undo.Filters.Paste.Multiple="копирование фильтров из \"%1\" в \"%2\""
89
+Undo.Transform="Преобразование источника(ов) в \"%1\""
90
+Undo.Transform.Paste="Вставку настроек преобразования в \"%1\""
91
+Undo.Transform.Rotate="поворот в \"%1\""
92
+Undo.Transform.Reset="Сброс настроек преобразования в \"%1\""
93
+Undo.Transform.HFlip="отзеркаливание по горизонтали в \"%1\""
94
+Undo.Transform.VFlip="отзеркаливание по вертикали в \"%1\""
95
+Undo.Transform.FitToScreen="размещение по размеру экрана в \"%1\""
96
+Undo.Transform.StretchToScreen="растяжение по размеру экрана в \"%1\""
97
+Undo.Transform.Center="центрирование по экрану в \"%1\""
98
+Undo.Transform.VCenter="вертикальное центрирование по экрану в \"%1\""
99
+Undo.Transform.HCenter="горизонтальное центрирование по экрану в \"%1\""
100
+Undo.Volume.Change="изменение громкости у \"%1\""
101
+Undo.Volume.Mute="выключение звука \"%1\""
102
+Undo.Volume.Unmute="включеник звука \"%1\""
103
+Undo.Balance.Change="изменение баланса аудио на \"%1\""
104
+Undo.SyncOffset.Change="изменение смещения синхронизации звука \"%1\""
105
+Undo.MonitoringType.Change="изменение аудиомониторинга для \"%1\""
106
+Undo.Mixers.Change="изменение настройки аудио микшера на \"%1\""
107
+Undo.ForceMono.On="включение принудительного моно \"%1\""
108
+Undo.ForceMono.Off="выключение принудительного моно \"%1\""
109
+Undo.Properties="настройки свойств источника \"%1\""
110
+Undo.Scene.Duplicate="дублирование сцены \"%1\""
111
+Undo.ShowTransition="показывание перехода на \"%1\""
112
+Undo.HideTransition="скрытие перехода на \"%1\""
113
+Undo.ShowSceneItem="показывание \"%1\" в \"%2\""
114
+Undo.HideSceneItem="скрытие \"%1\" в \"%2\""
115
+Undo.ReorderSources="пересортировку источников в \"%1\""
116
+Undo.MoveUp="перемещение \"%1\" в верхнюю часть \"%2\""
117
+Undo.MoveDown="перемещение \"%1\" в нижнюю часть \"%2\""
118
+Undo.MoveToTop="перемещение \"%1\" кверху \"%2\""
119
+Undo.MoveToBottom="перемещение \"%1\" книзу \"%2\""
120
+Undo.PasteSource="вставку источника(ов) в \"%1\""
121
+Undo.PasteSourceRef="вставка ссылки(ок) на источники в \"%1\""
122
+Undo.GroupItems="сгруппированные элементы в \"%1\""
123
 TransitionNameDlg.Text="Пожалуйста, введите имя перехода"
124
 TransitionNameDlg.Title="Имя перехода"
125
 TitleBar.Profile="Профиль"
126
@@ -320,6 +323,8 @@
127
 Output.RecordError.EncodeErrorMsg="Произошла ошибка кодировщика во время записи."
128
 Output.BadPath.Title="Неправильный путь к файлу"
129
 Output.BadPath.Text="Некорректный путь для записи файлов. Пожалуйста, убедитесь, что указанный в настройках путь для записи доступен."
130
+Output.NoBroadcast.Title="Трансляция не настроена"
131
+Output.NoBroadcast.Text="Вам нужно настроить Трансляцию, прежде чем вы сможете начать Прямой эфир."
132
 LogReturnDialog="Журнал успешно загружен"
133
 LogReturnDialog.Description="Ваши логи были загружены. Теперь вы можете поделиться URL-адресом для отладки."
134
 LogReturnDialog.Description.Crash="Отчет об ошибке был загружен. Теперь вы можете поделиться URL-адресом для отладки."
135
@@ -359,6 +364,8 @@
136
 MissingFiles.Found="Найдено"
137
 MissingFiles.AutoSearch="Найдены дополнительные совпадения файлов"
138
 MissingFiles.AutoSearchText="OBS нашёл в этой папке дополнительные совпадения для недостающих файлов. Хотите их добавить?"
139
+MissingFiles.NoMissing.Title="Проверка на отсутствующие файлы"
140
+MissingFiles.NoMissing.Text="Не найдено отсутствующих файлов."
141
 UpdateAvailable="Доступно новое обновление"
142
 UpdateAvailable.Text="Доступна версия %1.%2.%3. <a href='%4'>Нажмите сюда, чтобы скачать</a>"
143
 Basic.DesktopDevice1="Устройство воспроизведения"
144
@@ -424,6 +431,8 @@
145
 Basic.PropertiesView.FPS.Simple="Простые значения FPS"
146
 Basic.PropertiesView.FPS.Rational="Рациональные значения FPS"
147
 Basic.PropertiesView.FPS.ValidFPSRanges="Допустимые диапазоны FPS:"
148
+Basic.PropertiesView.UrlButton.Text="Открыть эту ссылку в браузере по умолчанию?"
149
+Basic.PropertiesView.UrlButton.OpenUrl="Открыть URL"
150
 Basic.InteractionWindow="Взаимодействие с '%1'"
151
 Basic.StatusBar.Reconnecting="Потеряно соединение, переподключение через %2 секунд(ы) (попытка %1)"
152
 Basic.StatusBar.AttemptingReconnect="Попытка подключения... (попытка %1)"
153
@@ -478,6 +487,8 @@
154
 Basic.TransformWindow.BoundsType.ScaleToWidth="Масштабирование до ширины границы"
155
 Basic.TransformWindow.BoundsType.ScaleToHeight="Масштабирование до высоты границы"
156
 Basic.TransformWindow.BoundsType.Stretch="Растянуть до границы"
157
+Basic.TransformWindow.Title="Изменить преобразование для '%1'"
158
+Basic.TransformWindow.NoSelectedSource="Источник не выбран"
159
 Basic.Main.AddSourceHelp.Title="невозможно добавить источник"
160
 Basic.Main.AddSourceHelp.Text="Вы должны создать по крайней мере одну сцену чтобы добавить источник."
161
 Basic.Main.Scenes="Сцены"
162
@@ -489,6 +500,7 @@
163
 Basic.Main.StartReplayBuffer="Запустить повтор"
164
 Basic.Main.SaveReplay="Сохранить повтор"
165
 Basic.Main.StartStreaming="Запустить трансляцию"
166
+Basic.Main.StartBroadcast="Начать Прямой эфир"
167
 Basic.Main.StartVirtualCam="Запустить виртуальную камеру"
168
 Basic.Main.StopRecording="Остановить запись"
169
 Basic.Main.PauseRecording="Приостановить запись"
170
@@ -496,8 +508,11 @@
171
 Basic.Main.StoppingRecording="Остановка записи..."
172
 Basic.Main.StopReplayBuffer="Остановить повтор"
173
 Basic.Main.StoppingReplayBuffer="Остановка повтора..."
174
+Basic.Main.SetupBroadcast="Управлять трансляцией"
175
 Basic.Main.StopStreaming="Остановить трансляцию"
176
-Basic.Main.StoppingStreaming="Остановка вещания..."
177
+Basic.Main.StopBroadcast="Завершить Трансляцию"
178
+Basic.Main.AutoStopEnabled="(Автоостоновка)"
179
+Basic.Main.StoppingStreaming="Остановка трансляции..."
180
 Basic.Main.ForceStopStreaming="Остановить трансляцию (сбросить задержку)"
181
 Basic.Main.ShowContextBar="Показать панель инструментов источников"
182
 Basic.Main.HideContextBar="Скрыть панель инструментов источников"
183
@@ -515,6 +530,7 @@
184
 Basic.MainMenu.File.Settings="Настройки (&S)"
185
 Basic.MainMenu.File.ShowSettingsFolder="Открыть папку настроек"
186
 Basic.MainMenu.File.ShowProfileFolder="Открыть папку профиля"
187
+Basic.MainMenu.File.ShowMissingFiles="Проверить на наличие отсутствующих файлов"
188
 Basic.MainMenu.AlwaysOnTop="Поверх всех окон (&A)"
189
 Basic.MainMenu.File.Exit="Выход (&X)"
190
 Basic.MainMenu.Edit="Правка (&E)"
191
@@ -628,6 +644,7 @@
192
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Горизонтально, низ (8 сцен)"
193
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Вертикально, слева (8 сцен)"
194
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Вертикально, справа (8 сцен)"
195
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Горизонтально, верх (18 сцен)"
196
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Горизонтально, верх (24 сцены)"
197
 Basic.Settings.Stream="Трансляция"
198
 Basic.Settings.Stream.StreamType="Тип вещания"
199
@@ -921,3 +938,69 @@
200
 ContextBar.MediaControls.PlaylistPrevious="Предыдущий в плейлисте"
201
 ContextBar.MediaControls.MediaProperties="Свойства медиа"
202
 ContextBar.MediaControls.BlindSeek="Виджет перемотки медиа"
203
+YouTube.Auth.Ok="Авторизация успешно завершена.\nТеперь вы можете закрыть эту страницу."
204
+YouTube.Auth.NoCode="Процесс авторизации не был завершён."
205
+YouTube.Auth.NoChannels="Не найдено доступных каналов в выбранном аккаунте"
206
+YouTube.Auth.WaitingAuth.Title="Авторизация пользователя YouTube"
207
+YouTube.Auth.WaitingAuth.Text="Пожалуйста, завершите авторизацию во внешнем браузере.<br>Если внешний браузер не открывается, перейдите по этой ссылке и завершите авторизацию:<br>%1"
208
+YouTube.AuthError.Text="Не удалось получить информацию о канале: %1."
209
+YouTube.Actions.WindowTitle="Настройка трансляции YouTube - Канал: %1"
210
+YouTube.Actions.CreateNewEvent="Создать новую Трансляцию"
211
+YouTube.Actions.ChooseEvent="Выбрать существующую трансляцию"
212
+YouTube.Actions.Title="Название*"
213
+YouTube.Actions.MyBroadcast="Моя трансляция"
214
+YouTube.Actions.Description="Описание"
215
+YouTube.Actions.Privacy="Конфиденциальность*"
216
+YouTube.Actions.Privacy.Private="Приватное"
217
+YouTube.Actions.Privacy.Public="Видно всем (публичное)"
218
+YouTube.Actions.Privacy.Unlisted="Доступ по ссылке (Unlisted)"
219
+YouTube.Actions.Category="Категория"
220
+YouTube.Actions.Thumbnail="Заставка"
221
+YouTube.Actions.Thumbnail.SelectFile="Выбрать файл..."
222
+YouTube.Actions.Thumbnail.NoFileSelected="Файл не выбран"
223
+YouTube.Actions.Thumbnail.ClearFile="Очистить"
224
+YouTube.Actions.MadeForKids="Пометить трансляцию как сделанную \"для детей\"?"
225
+YouTube.Actions.MadeForKids.Yes="Да, это сделано для детей"
226
+YouTube.Actions.MadeForKids.No="Нет, это не для детей"
227
+YouTube.Actions.AdditionalSettings="Дополнительные параметры"
228
+YouTube.Actions.Latency="Задержка"
229
+YouTube.Actions.Latency.Normal="Нормально"
230
+YouTube.Actions.Latency.Low="Низко"
231
+YouTube.Actions.Latency.UltraLow="Очень низко"
232
+YouTube.Actions.EnableAutoStart="Включить автозапуск"
233
+YouTube.Actions.EnableAutoStop="Включить автоостановку"
234
+YouTube.Actions.AutoStartStop.TT="Указывает, должна ли эта запланированная трансляция запускаться автоматически"
235
+YouTube.Actions.EnableDVR="Включить DVR"
236
+YouTube.Actions.360Video="360 видео"
237
+YouTube.Actions.ScheduleForLater="Запланировать на потом"
238
+YouTube.Actions.RememberSettings="Запомнить эти настройки"
239
+YouTube.Actions.Create_Ready="Создать трансляцию"
240
+YouTube.Actions.Create_GoLive="Создать трансляцию, и начать Прямой эфир"
241
+YouTube.Actions.Choose_Ready="Выбрать трансляцию"
242
+YouTube.Actions.Choose_GoLive="Выбрать трансляцию, и начать Прямой эфир"
243
+YouTube.Actions.Create_Schedule="Запланировать трансляцию"
244
+YouTube.Actions.Create_Schedule_Ready="Запланировать и выбрать трансляцию"
245
+YouTube.Actions.Dashboard="Открыть YouTube Studio"
246
+YouTube.Actions.Error.Title="Ошибка создания трансляции"
247
+YouTube.Actions.Error.Text="Ошибка доступа к YouTube '%1'.<br/>Подробное описание ошибки можно найти на <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
248
+YouTube.Actions.Error.General="Нет доступа к YouTube. Пожалуйста, проверьте подключение к сети или доступ к серверу YouTube."
249
+YouTube.Actions.Error.NoBroadcastCreated="Ошибка создания трансляции '%1'.<br/>Подробное описание ошибки можно найти на <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
250
+YouTube.Actions.Error.NoStreamCreated="Не удалось создать трансляцию. Пожалуйста, отсоедините и повторно присоедините свой аккаунт."
251
+YouTube.Actions.Error.YouTubeApi="Ошибка YouTube API. Более подробную информацию см. в файле журнала."
252
+YouTube.Actions.Error.BroadcastNotFound="Выбранная трансляция не найдена."
253
+YouTube.Actions.Error.FileMissing="Выбранный файл не существует."
254
+YouTube.Actions.Error.FileOpeningFailed="Не удалось открыть выбранный файл."
255
+YouTube.Actions.Error.FileTooLarge="Выбранный файл слишком большой (Лимит: 2 МБ)."
256
+YouTube.Actions.EventsLoading="Загрузка списка событий..."
257
+YouTube.Actions.EventCreated.Title="Событие создано"
258
+YouTube.Actions.EventCreated.Text="Событие успешно создано."
259
+YouTube.Actions.Stream="Трансляция"
260
+YouTube.Actions.Stream.ScheduledFor="Запланировано на %1"
261
+YouTube.Actions.Stream.Resume="Возобновить прерванный поток"
262
+YouTube.Actions.Stream.YTStudio="Автоматически создано YouTube Studio"
263
+YouTube.Actions.Notify.CreatingBroadcast="Создаётся новая трансляция. Пожалуйста, подождите..."
264
+YouTube.Actions.AutoStartStreamingWarning.Title="Требуется запустить вручную"
265
+YouTube.Actions.AutoStartStreamingWarning="Автоматический запуск отключен для этого события, нажмите \"Прямой эфир\", чтобы начать трансляцию."
266
+YouTube.Actions.AutoStopStreamingWarning="Ваша трансляция будет остановлена и Вы не сможете продолжить или перезапустить её."
267
+YouTube.Errors.liveStreamingNotEnabled="Прямые эфиры отключены для данного канала YouTube.<br/><br/>Смотрите <a href='https://www.youtube.com/features'>youtube.com/features</a> для подробной информации."
268
+YouTube.Errors.livePermissionBlocked="Прямая трансляция недоступна на выбранном канале YouTube.<br/>Пожалуйста, обратите внимание, что трансляция в прямом эфире может занять до 24 часов после ее включения в настройках канала.<br/><br/>Смотрите <a href='https://www.youtube.com/features'>youtube.com/features</a> для деталей."
269
obs-studio-27.0.1.tar.xz/UI/data/locale/si-LK.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/si-LK.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-Language="ඉංග්රීසි"
3
+Language="සිංහල"
4
 OK="හරි"
5
 Apply="යොදන්න"
6
 Cancel="අවලංගු කරන්න"
7
obs-studio-27.0.1.tar.xz/UI/data/locale/sk-SK.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/sk-SK.ini Changed
232
 
1
@@ -1,4 +1,4 @@
2
-Language="slovenčina"
3
+Language="Slovenčina"
4
 Apply="Použiť"
5
 Cancel="Zrušiť"
6
 Close="Zatvoriť"
7
@@ -34,11 +34,11 @@
8
 MultiviewWindowed="Multiview (okno)"
9
 ResizeProjectorWindowToContent="Upraviť veľkosť okna podľa obsahu"
10
 Clear="Vymazať"
11
-Revert="Vrátiť"
12
+Revert="Vrátiť späť"
13
 Show="Ukázať"
14
 Hide="Skryť"
15
 UnhideAll="Odkryť Všetky"
16
-Untitled="Bez názvu"
17
+Untitled="Nepomenovaný"
18
 New="Nový"
19
 Duplicate="Duplikovať"
20
 Enable="Povoliť"
21
@@ -107,6 +107,7 @@
22
 Auth.InvalidScope.Text="Požiadavky na overenie pre %1 sa zmenili. Niektoré funkcie nemusia byť k dispozícii."
23
 Auth.LoadingChannel.Title="Načítavajú sa informácie o kanáli..."
24
 Auth.LoadingChannel.Text="Načítavajú sa informácie o kanáli pre službu %1, prosím čakajte..."
25
+Auth.LoadingChannel.Error="Nedali sa získať informácie o kanáli."
26
 Auth.ChannelFailure.Title="Načítanie kanálu zlyhalo"
27
 Auth.ChannelFailure.Text="Nepodarilo sa načítať informácie o kanáli pre službu %1\n\n%2: %3"
28
 Auth.StreamInfo="Informácie o vysielaní"
29
@@ -148,12 +149,14 @@
30
 Basic.AutoConfig.StreamPage.GetStreamKey="Dostať Streamovací Kľúč"
31
 Basic.AutoConfig.StreamPage.MoreInfo="Viac informácií"
32
 Basic.AutoConfig.StreamPage.UseStreamKey="Použiť kľúč vysielania"
33
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Použiť streamovací kľúč (pokročilé)"
34
 Basic.AutoConfig.StreamPage.Service="Služba"
35
 Basic.AutoConfig.StreamPage.Service.ShowAll="Zobraziť všetky..."
36
 Basic.AutoConfig.StreamPage.Service.Custom="Vlastné..."
37
 Basic.AutoConfig.StreamPage.StreamKey="Streamovací kľúč"
38
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Odkaz)"
39
 Basic.AutoConfig.StreamPage.EncoderKey="Kľúč enkodéra"
40
+Basic.AutoConfig.StreamPage.ConnectedAccount="Pripojený účet"
41
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Odhadnúť bitrate pomocou testu rýchlosti pripojenia (môže to trvať pár minút)"
42
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferovať hardvérové enkódovanie"
43
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardvérové kódovanie eliminuje väčšinu využitia CPU, ale na dosiahnutie rovnakej kvality videa môže vyžadovať väčší bitrate."
44
@@ -312,12 +315,14 @@
45
 Output.RecordError.EncodeErrorMsg="Nastala chyba pri kódovaní počas nahrávania."
46
 Output.BadPath.Title="Nesprávna cesta k súboru"
47
 Output.BadPath.Text="Nastavená cesta k výstupnému súboru je chybná. Prosím, skontrolujte správnosť nastavenej cesty."
48
+Output.NoBroadcast.Title="Nie je nastavené žiadne vysielanie"
49
+Output.NoBroadcast.Text="Najprv musíte nastaviť vysielanie predtým než začnete streamovať."
50
 LogReturnDialog="Nahranie logu bolo úspešné"
51
-LogReturnDialog.Description="Váš výpisový súbor bol nahratý. Môžete teraz zdieľať URL pre potreby ladenia alebo podpory."
52
-LogReturnDialog.Description.Crash="Váš výpis výpadkov aplikácie bol nahratý. Môžete teraz zdieľať URL pre potreby ladenia."
53
+LogReturnDialog.Description="Váš log súbor bol nahratý. Môžete teraz zdieľať URL pre potreby ladenia alebo podpory."
54
+LogReturnDialog.Description.Crash="Vaša správa o zlyhaní aplikácie bola nahratá. Môžete teraz zdieľať URL pre potreby ladenia."
55
 LogReturnDialog.CopyURL="Kopírovať URL"
56
 LogReturnDialog.AnalyzeURL="Analyzovať"
57
-LogReturnDialog.ErrorUploadingLog="Chyba pri nahrávaní súboru denníka chýb"
58
+LogReturnDialog.ErrorUploadingLog="Chyba pri nahrávaní log súboru"
59
 Remux.SourceFile="OBS nahrávka"
60
 Remux.TargetFile="Cieľový súbor"
61
 Remux.Remux="Previesť"
62
@@ -351,14 +356,16 @@
63
 MissingFiles.Found="Najdený"
64
 MissingFiles.AutoSearch="Nájdených viacero zhôd"
65
 MissingFiles.AutoSearchText="OBS našlo viacero zhôd pre chýbajúce súbory v tejto zložke. Chceli by ste ich pridať?"
66
+MissingFiles.NoMissing.Title="Kontrola chýbajúcich súborov"
67
+MissingFiles.NoMissing.Text="Vyzerá to tak, že žiadne súbory nechýbajú."
68
 UpdateAvailable="Je dostupná aktualizácia"
69
 UpdateAvailable.Text="Verzia %1.%2.%3 je dostupná. <a href='%4'>Kliknite sem na jej stiahnutie</a>"
70
 Basic.DesktopDevice1="Zvuk plochy"
71
 Basic.DesktopDevice2="Zvuk plochy 2"
72
 Basic.AuxDevice1="Mikrofón/Aux"
73
 Basic.AuxDevice2="Mikrofón/Aux 2"
74
-Basic.AuxDevice3="Mikrofon / AUX 3"
75
-Basic.AuxDevice4="Mikrofon / AUX 4"
76
+Basic.AuxDevice3="Mikrofón/Aux 3"
77
+Basic.AuxDevice4="Mikrofón/Aux 4"
78
 Basic.Scene="Scéna"
79
 Basic.DisplayCapture="Zachytávanie monitora"
80
 Basic.Main.PreviewConextMenu.Enable="Zapnúť náhľad"
81
@@ -418,6 +425,8 @@
82
 Basic.PropertiesView.FPS.Simple="Jednoduché hodnoty FPS"
83
 Basic.PropertiesView.FPS.Rational="Rozumné hodnoty FPS"
84
 Basic.PropertiesView.FPS.ValidFPSRanges="Platné rozsahy FPS:"
85
+Basic.PropertiesView.UrlButton.Text="Otvoriť tento odkaz v predvolenom webovom prehliadači?"
86
+Basic.PropertiesView.UrlButton.OpenUrl="Otvoriť URL"
87
 Basic.InteractionWindow="V interakcii s '%1'"
88
 Basic.StatusBar.Reconnecting="Odpojený, prebieha znovu-pripájanie za %2 sekúnd(y) (pokus č. %1)"
89
 Basic.StatusBar.AttemptingReconnect="Pokus o znovu-pripojenie... (pokus č. %1)"
90
@@ -472,6 +481,8 @@
91
 Basic.TransformWindow.BoundsType.ScaleToWidth="Škálovať podľa šírky hranice"
92
 Basic.TransformWindow.BoundsType.ScaleToHeight="Škálovať podľa výšky hranice"
93
 Basic.TransformWindow.BoundsType.Stretch="Natiahnuť podľa celej hranice"
94
+Basic.TransformWindow.Title="Úprava transformácie pre '%1'"
95
+Basic.TransformWindow.NoSelectedSource="Žiaden vybratý zdroj"
96
 Basic.Main.AddSourceHelp.Title="Nie je možné pridať zdroj"
97
 Basic.Main.AddSourceHelp.Text="Na pridanie zdroja je potrebná aspoň 1 scéna."
98
 Basic.Main.Scenes="Scény"
99
@@ -483,6 +494,7 @@
100
 Basic.Main.StartReplayBuffer="Spustiť záznam do pamäte"
101
 Basic.Main.SaveReplay="Uložiť záznam"
102
 Basic.Main.StartStreaming="Spustiť stream"
103
+Basic.Main.StartBroadcast="Začať vysielať"
104
 Basic.Main.StartVirtualCam="Spustiť virtuálnu kameru"
105
 Basic.Main.StopRecording="Ukončiť nahrávanie"
106
 Basic.Main.PauseRecording="Pozastaviť nahrávanie"
107
@@ -490,7 +502,10 @@
108
 Basic.Main.StoppingRecording="Zastavenie nahrávania..."
109
 Basic.Main.StopReplayBuffer="Zastaviť záznam do pamäte"
110
 Basic.Main.StoppingReplayBuffer="Zastavujem záznam do pamäte..."
111
+Basic.Main.SetupBroadcast="Spravovať vysielanie"
112
 Basic.Main.StopStreaming="Ukončiť stream"
113
+Basic.Main.StopBroadcast="Ukončiť vysielanie"
114
+Basic.Main.AutoStopEnabled="(Auto stop)"
115
 Basic.Main.StoppingStreaming="Zastavenie streamu..."
116
 Basic.Main.ForceStopStreaming="Zastaviť vysielanie (bez oneskorenia)"
117
 Basic.Main.ShowContextBar="Zobraziť panel nástrojov zdroja"
118
@@ -509,6 +524,7 @@
119
 Basic.MainMenu.File.Settings="Na&stavenia"
120
 Basic.MainMenu.File.ShowSettingsFolder="Zobraziť priečinok nastavení"
121
 Basic.MainMenu.File.ShowProfileFolder="Zobraziť priečinok profilu"
122
+Basic.MainMenu.File.ShowMissingFiles="Kontrolovať či nechýbajú súbory"
123
 Basic.MainMenu.AlwaysOnTop="Vždy n&avrchu"
124
 Basic.MainMenu.File.Exit="Ukončiť (&x)"
125
 Basic.MainMenu.Edit="Upraviť (&E)"
126
@@ -569,13 +585,13 @@
127
 Basic.MainMenu.Help.Discord="Pripojiť sa na &Discord server"
128
 Basic.MainMenu.Help.Logs="&Log súbory"
129
 Basic.MainMenu.Help.Logs.ShowLogs="Zobraziť log &súbory"
130
-Basic.MainMenu.Help.Logs.UploadCurrentLog="Nahrať súčasný súbor záznamu (&C)"
131
-Basic.MainMenu.Help.Logs.UploadLastLog="Nahrať posledný súbor záznamu (&L)"
132
-Basic.MainMenu.Help.Logs.ViewCurrentLog="Zobraziť aktuálny záznam (&V)"
133
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Nahrať súčasný log súbor (&C)"
134
+Basic.MainMenu.Help.Logs.UploadLastLog="Nahrať posledný log súbor (&L)"
135
+Basic.MainMenu.Help.Logs.ViewCurrentLog="Zobraziť aktuálny log (&V)"
136
 Basic.MainMenu.Help.CheckForUpdates="Skontrolovať aktualizácie"
137
-Basic.MainMenu.Help.CrashLogs="Hlásenia o zlyhaní (&R)"
138
+Basic.MainMenu.Help.CrashLogs="Správy o zlyhaní (&R)"
139
 Basic.MainMenu.Help.CrashLogs.ShowLogs="Zobraziť &správy o zlyhaniach"
140
-Basic.MainMenu.Help.CrashLogs.UploadLastLog="Nahrať pos&lednú správu"
141
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Nahrať poslednú správu o zlyhaní (&L)"
142
 Basic.MainMenu.Help.About="O &aplikácii"
143
 Basic.Settings.ProgramRestart="Tieto nastavenia sa prejavia až po reštarte programu."
144
 Basic.Settings.ConfirmTitle="Potvrdenie zmien"
145
@@ -585,8 +601,8 @@
146
 Basic.Settings.General.Language="Jazyk"
147
 Basic.Settings.General.EnableAutoUpdates="Automaticky kontrolovať aktualizácie pri štarte"
148
 Basic.Settings.General.OpenStatsOnStartup="Otvoriť dialógové okno štatistík po štarte"
149
-Basic.Settings.General.WarnBeforeStartingStream="Ukázať potvrďovacie okno pri začatí vysielania"
150
-Basic.Settings.General.WarnBeforeStoppingStream="Ukázať potvrďovacie okno pri zastavení vysielania"
151
+Basic.Settings.General.WarnBeforeStartingStream="Ukázať potvrdzovacie okno pri začatí vysielania"
152
+Basic.Settings.General.WarnBeforeStoppingStream="Ukázať potvrdzovacie okno pri zastavení vysielania"
153
 Basic.Settings.General.WarnBeforeStoppingRecord="Ukázať potvrdzovacie okno pri zastavení nahrávania"
154
 Basic.Settings.General.Projectors="Projektory"
155
 Basic.Settings.General.HideProjectorCursor="Skryť kurzor pred náhľadmi"
156
@@ -620,6 +636,7 @@
157
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontálne, Dole (8 scén)"
158
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikálne, Vľavo (8 scén)"
159
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertikálne, Vpravo (8 scén)"
160
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horizontálne, Hore (18 scén)"
161
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horizontálne, Hore (24 scén)"
162
 Basic.Settings.Stream.StreamType="Typ streamu"
163
 Basic.Settings.Stream.Custom.UseAuthentication="Použiť overenie"
164
@@ -908,3 +925,67 @@
165
 ContextBar.MediaControls.PlaylistPrevious="Predchádzajúca v zozname skladieb"
166
 ContextBar.MediaControls.MediaProperties="Vlastnosti médií"
167
 ContextBar.MediaControls.BlindSeek="Widget posuvníka médií"
168
+YouTube.Auth.Ok="Autorizácia dokončená úspešne.\nTeraz môžete zavrieť túto stránku."
169
+YouTube.Auth.NoCode="Autorizačný proces nebol dokončený."
170
+YouTube.Auth.NoChannels="Žiaden dostupný kanál na vybranom účte"
171
+YouTube.Auth.WaitingAuth.Title="YouTube užívateľská autorizácia"
172
+YouTube.Auth.WaitingAuth.Text="Prosím dokončite autorizáciu vo svojom externom prehliadači.<br>Ak sa externý prehliadač neotvára, nasledujte tento odkaz a dokončite autorizáciu:<br>%1"
173
+YouTube.AuthError.Text="Nepodarilo sa získať informácie o kanáli: %1."
174
+YouTube.Actions.WindowTitle="Nastavenie YouTube vysielania - Kanál: %1"
175
+YouTube.Actions.CreateNewEvent="Vytvoriť nové vysielanie"
176
+YouTube.Actions.ChooseEvent="Vybrať existujúce vysielanie"
177
+YouTube.Actions.Title="Názov*"
178
+YouTube.Actions.MyBroadcast="Moje Vysielanie"
179
+YouTube.Actions.Description="Popis"
180
+YouTube.Actions.Privacy="Súkromie*"
181
+YouTube.Actions.Privacy.Private="Súkromný"
182
+YouTube.Actions.Privacy.Public="Verejný"
183
+YouTube.Actions.Privacy.Unlisted="Nezaradený"
184
+YouTube.Actions.Category="Kategória"
185
+YouTube.Actions.Thumbnail="Náhľad"
186
+YouTube.Actions.Thumbnail.SelectFile="Vybrať súbor..."
187
+YouTube.Actions.Thumbnail.NoFileSelected="Žiaden vybratý súbor"
188
+YouTube.Actions.Thumbnail.ClearFile="Vyčistiť"
189
+YouTube.Actions.MadeForKids="Je toto video robené pre deti?*"
190
+YouTube.Actions.MadeForKids.Yes="Áno, je robené pre deti"
191
+YouTube.Actions.MadeForKids.No="Nie, nie je robené pre deti"
192
+YouTube.Actions.AdditionalSettings="Ďalšie nastavenia:"
193
+YouTube.Actions.Latency="Odozva"
194
+YouTube.Actions.Latency.Normal="Normálna"
195
+YouTube.Actions.Latency.Low="Nízka"
196
+YouTube.Actions.Latency.UltraLow="Ultra nízka"
197
+YouTube.Actions.EnableAutoStart="Zapnúť Auto-štart"
198
+YouTube.Actions.EnableAutoStop="Zapnúť Auto-stop"
199
+YouTube.Actions.AutoStartStop.TT="Indikuje, či by sa toto plánované vysielanie malo spustiť automaticky."
200
+YouTube.Actions.EnableDVR="Zapnúť DVR"
201
+YouTube.Actions.ScheduleForLater="Naplánovať na neskôr"
202
+YouTube.Actions.RememberSettings="Zapamätať tieto nastavenia"
203
+YouTube.Actions.Create_Ready="Vytvoriť vysielanie"
204
+YouTube.Actions.Create_GoLive="Vytvoriť vysielanie a začať streamovať"
205
+YouTube.Actions.Choose_Ready="Vybrať vysielanie"
206
+YouTube.Actions.Choose_GoLive="Vybrať vysielanie a začať streamovať"
207
+YouTube.Actions.Create_Schedule="Naplánovať vysielanie"
208
+YouTube.Actions.Create_Schedule_Ready="Naplánovať a vybrať vysielanie"
209
+YouTube.Actions.Dashboard="Otvoriť YouTube Štúdio"
210
+YouTube.Actions.Error.Title="Chyba pri vytvorení živého vysielania"
211
+YouTube.Actions.Error.Text="Chyba prístupu na YouTube '%1'.<br/>Podrobný popis chyby môžete nájsť na <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
212
+YouTube.Actions.Error.General="Chyba prístupu na YouTube. Prosím skontrolujte sieťové pripojenie alebo prístup na YouTube server."
213
+YouTube.Actions.Error.NoBroadcastCreated="Chyba pri vytváraní vysielania '%1'.<br/>Podrobný popis chyby môžete nájsť na <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
214
+YouTube.Actions.Error.NoStreamCreated="Nebol vytvorený žiaden stream. Prosím znova pripojte svoj účet."
215
+YouTube.Actions.Error.YouTubeApi="Chyba YouTube API. Prosím pozrite si log súbor pre viac informácií."
216
+YouTube.Actions.Error.BroadcastNotFound="Vybraté vysielanie nebolo nájdené."
217
+YouTube.Actions.Error.FileMissing="Vybratý súbor neexistuje."
218
+YouTube.Actions.Error.FileOpeningFailed="Otvorenie vybratého súboru zlyhalo."
219
+YouTube.Actions.Error.FileTooLarge="Vybratý súbor je príliš veľký (Limit: 2MiB)."
220
+YouTube.Actions.EventsLoading="Načítavanie zoznamu udalostí..."
221
+YouTube.Actions.EventCreated.Title="Udalosť vytvorená"
222
+YouTube.Actions.EventCreated.Text="Udalosť úspešne vytvorená."
223
+YouTube.Actions.Stream.ScheduledFor="Naplánovaný na %1"
224
+YouTube.Actions.Stream.Resume="Obnoviť prerušený stream"
225
+YouTube.Actions.Stream.YTStudio="Automaticky vytvorené cez Štúdio YouTube"
226
+YouTube.Actions.Notify.CreatingBroadcast="Vytváranie nového živého vysielania, prosím počkajte..."
227
+YouTube.Actions.AutoStartStreamingWarning.Title="Manuálny štart vyžadovaný"
228
+YouTube.Actions.AutoStartStreamingWarning="Auto-štart je vypnutý pre túto udalosť, kliknite \"Začať vysielať\" pre spustenie vášho vysielania."
229
+YouTube.Actions.AutoStopStreamingWarning="Nebudete môcť obnoviť pripojenie.<br>Váš stream sa zastaví a nebudete vysielať naživo."
230
+YouTube.Errors.liveStreamingNotEnabled="Živé streamovanie nie je zapnuté na vybratom YouTube kanáli.<br/><br/>Pozrite si <a href='https://www.youtube.com/features'>youtube.com/features</a> pre viac informácií."
231
+YouTube.Errors.livePermissionBlocked="Živé streamovanie nie je dostupné na vybratom YouTube kanáli.<br/>Prosím uvedomte si že môže trvať až 24 hodín aby sa živé streamovanie stalo dostupné po aktivácií v nastaveniach kanála.<br/><br/>Pozrite si <a href='https://www.youtube.com/features'>youtube.com/features</a> pre detaily."
232
obs-studio-27.0.1.tar.xz/UI/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/sl-SI.ini Changed
311
 
1
@@ -20,7 +20,7 @@
2
 Display="Zaslon"
3
 Name="Ime"
4
 Exit="Izhod"
5
-Mixer="Mešalnik zvoka"
6
+Mixer="Zvočna mešalka"
7
 Browse="Brskaj"
8
 DroppedFrames="Spuščeni okvirji %1 (%2 %)"
9
 StudioProgramProjector="Celozaslonski projektor (program)"
10
@@ -45,7 +45,7 @@
11
 Enable="Omogoči"
12
 DisableOSXVSync="Onemogoči macOS V-Sync"
13
 ResetOSXVSyncOnExit="Ponastavi macOS V-Sync ob izhodu"
14
-HighResourceUsage="Preobremenjeno kodiranje! Zmanjšajte video nastavitve ali uporabite hitrejše kodirne prednastavitve."
15
+HighResourceUsage="Preobremenjeno kodiranje! Zmanjšajte zahtevnost videa v nastavitvah ali za kodiranje uporabite hitrejšo prednastavitev."
16
 Transition="Prehod"
17
 QuickTransitions="Hitri prehodi"
18
 FadeToBlack="Preliv v črno"
19
@@ -109,6 +109,7 @@
20
 Auth.InvalidScope.Text="Overitvene zahteve za %1 so se spremenile. Nekatere funkcije morda ne bodo na voljo."
21
 Auth.LoadingChannel.Title="Nalaganje informacij o kanalu..."
22
 Auth.LoadingChannel.Text="Nalaganje informacij o kanalu za %1. Prosimo, počakajte..."
23
+Auth.LoadingChannel.Error="Ni bilo mogoče pridobiti podatkov o kanalu."
24
 Auth.ChannelFailure.Title="Nalaganje kanala neuspešno"
25
 Auth.ChannelFailure.Text="Nalaganje informacij o kanalu za %1 je spodletelo\n\n%2: %3"
26
 Auth.Chat="Klepet"
27
@@ -151,12 +152,15 @@
28
 Basic.AutoConfig.StreamPage.GetStreamKey="Dobi ključ pretoka"
29
 Basic.AutoConfig.StreamPage.MoreInfo="Več informacij"
30
 Basic.AutoConfig.StreamPage.UseStreamKey="Uporabi ključ pretoka"
31
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Uporabi pretočni ključ (napredno)"
32
 Basic.AutoConfig.StreamPage.Service="Storitev"
33
 Basic.AutoConfig.StreamPage.Service.ShowAll="Prikaži vse..."
34
 Basic.AutoConfig.StreamPage.Service.Custom="Po meri..."
35
 Basic.AutoConfig.StreamPage.Server="Strežnik"
36
 Basic.AutoConfig.StreamPage.StreamKey="Ključ pretoka"
37
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(povezava)"
38
+Basic.AutoConfig.StreamPage.EncoderKey="Ključ kodirnika"
39
+Basic.AutoConfig.StreamPage.ConnectedAccount="Povezan račun"
40
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Oceni bitno hitrost s preizkusom pasovne širine (lahko traja nekaj minut)"
41
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Daj prednost strojnemu kodiranju"
42
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Strojno kodiranje zelo razbremeni procesor, a lahko za dosego enake kakovosti potrebuje večjo bitno hitrost."
43
@@ -236,13 +240,43 @@
44
 Undo.Item.Undo="Razveljavi %1"
45
 Undo.Item.Redo="Obnovi %1"
46
 Undo.Sources.Multi="Izbriši %1 virov"
47
+Undo.Filters="Sprememba filtra na '%1'"
48
 Undo.Filters.Paste.Single="Prilepi filter '%1' na '%2'"
49
 Undo.Filters.Paste.Multiple="Kopiraj filter iz '%1' na '%2'"
50
+Undo.Transform="Preoblikovanje vira/virov v '%1'"
51
+Undo.Transform.Paste="Prilepi preoblikovanje v '%1'"
52
+Undo.Transform.Rotate="Zasuk v '%1'"
53
+Undo.Transform.Reset="Ponastavitev preoblikovanja v '%1'"
54
+Undo.Transform.HFlip="Vodoravno zrcaljenje v '%1'"
55
+Undo.Transform.VFlip="Navpično zrcaljenje v '%1'"
56
+Undo.Transform.FitToScreen="Prilagodi zaslonu v '%1'"
57
+Undo.Transform.StretchToScreen="Raztegni na velikost zaslona v '%1'"
58
+Undo.Transform.Center="Na sredino zaslona v '%1'"
59
+Undo.Transform.VCenter="Na navpično sredino zaslona v '%1'"
60
+Undo.Transform.HCenter="Na vodoravno sredino zaslona v '%1'"
61
 Undo.Volume.Change="Spremeni glasnost na '%1'"
62
 Undo.Volume.Mute="Utišaj '%1'"
63
+Undo.Volume.Unmute="Vklopi zvok za '%1'"
64
+Undo.Balance.Change="Zamenjava ravnovesje zvoka za '%1'"
65
+Undo.SyncOffset.Change="Sprememba sinhronizacijskega zamika za '%1'"
66
+Undo.MonitoringType.Change="Sprememba nadzora zvoka za '%1'"
67
+Undo.Mixers.Change="Sprememba mešalke zvoka za '%1'"
68
+Undo.ForceMono.On="Vklop prisiljenega mono za '%1'"
69
+Undo.ForceMono.Off="Izklop prisiljenega mono za '%1'"
70
+Undo.Properties="Sprememba lastnosti za '%1'"
71
 Undo.Scene.Duplicate="Podvoji prizor '%1'"
72
 Undo.ShowTransition="Prikaži prehod na '%1'"
73
 Undo.HideTransition="Skrij prehod na '%1'"
74
+Undo.ShowSceneItem="Prikaži '%1' v '%2'"
75
+Undo.HideSceneItem="Skrij '%1' v '%2'"
76
+Undo.ReorderSources="Ponovno razvrsti vire v '%1'"
77
+Undo.MoveUp="Premakni '%1' navzgor v '%2'"
78
+Undo.MoveDown="Premakni '%1' navzdol v '%2'"
79
+Undo.MoveToTop="Premakni '%1' na vrh v '%2'"
80
+Undo.MoveToBottom="Premakni '%1' na dno v '%2'"
81
+Undo.PasteSource="Prilepi vir/vire v '%1'"
82
+Undo.PasteSourceRef="Prilepi referenco/-e v '%1'"
83
+Undo.GroupItems="Združi predmete v '%1'"
84
 TransitionNameDlg.Text="Vnesite ime prehoda"
85
 TransitionNameDlg.Title="Ime prehoda"
86
 TitleBar.Profile="Profil"
87
@@ -273,7 +307,7 @@
88
 Output.ConnectFail.Title="Povezava ni uspela"
89
 Output.ConnectFail.BadPath="Neveljavna pot ali URL povezava. Prosimo, preverite vaše nastavitve in se prepričajte, da so veljavne."
90
 Output.ConnectFail.ConnectFailed="Povezava s strežnikom je spodletela"
91
-Output.ConnectFail.InvalidStream="Dostopanje do navedenega kanala ali ključa pretoka ni bilo uspešno. Preverite ključ pretoka. Če je pravilen, so težave lahko pri povezovanju na strežnik."
92
+Output.ConnectFail.InvalidStream="Dostopanje do navedenega kanala ali ključa pretoka ni bilo uspešno. Preverite ključ pretoka. Če je pravilen, je lahko težava pri povezovanju na strežnik."
93
 Output.ConnectFail.Error="Med povezovanjem s strežnikom je prišlo do nepričakovane napake. Več informacij se nahaja v datoteki dnevnika."
94
 Output.ConnectFail.Disconnected="Povezava s strežnikom je prekinjena."
95
 Output.StreamEncodeError.Title="Napaka pri kodiranju"
96
@@ -287,6 +321,8 @@
97
 Output.RecordError.EncodeErrorMsg="Med snemanjem se je pojavila napaka kodirnika."
98
 Output.BadPath.Title="Nepravilna pot do datoteke"
99
 Output.BadPath.Text="Nastavljena pot do datoteke ni veljavna. Preverite, da je nastavljena veljavna pot do datoteke."
100
+Output.NoBroadcast.Title="Ni nastavljenega oddajanja"
101
+Output.NoBroadcast.Text="Pred začtekom pretakanja morate nastaviti oddajanje."
102
 LogReturnDialog="Dnevnik je bil uspešno poslan"
103
 LogReturnDialog.Description="Dnevniška datoteka je bila naložena. URL se sedaj lahko deli za razhroščevanje ali podporo."
104
 LogReturnDialog.Description.Crash="Poročilo sesutja je bilo naloženo. URL lahko sedaj delite za namene razhroščevanja."
105
@@ -324,6 +360,10 @@
106
 MissingFiles.Replaced="Zamenjano"
107
 MissingFiles.Cleared="Počiščeno"
108
 MissingFiles.Found="Najdeno"
109
+MissingFiles.AutoSearch="Najdene so bile dodatne ustrezne datoteke"
110
+MissingFiles.AutoSearchText="OBS je našel dodatne ustrezne datoteke za manjkajoče v tej mapi. Bi jih radi dodali?"
111
+MissingFiles.NoMissing.Title="Preverjanje manjkajočih datotek"
112
+MissingFiles.NoMissing.Text="Ni manjkajočih datotek"
113
 UpdateAvailable="Nova posodobitev je na voljo"
114
 UpdateAvailable.Text="Različica %1.%2.%3 je sedaj na voljo. <a href='%4'>Kliknite tukaj za prenos</a>"
115
 Basic.DesktopDevice1="Namizni zvok"
116
@@ -392,6 +432,8 @@
117
 Basic.PropertiesView.FPS.Simple="Preproste vrednosti sl./s"
118
 Basic.PropertiesView.FPS.Rational="Racionalne vrednosti sl./s"
119
 Basic.PropertiesView.FPS.ValidFPSRanges="Veljavni razpon sl./s:"
120
+Basic.PropertiesView.UrlButton.Text="Odprem to povezavo v privzetem brskalniku?"
121
+Basic.PropertiesView.UrlButton.OpenUrl="Odpri URL"
122
 Basic.InteractionWindow="V stiku z '%1'"
123
 Basic.StatusBar.Reconnecting="Povezava je bila prekinjena. Ponovno povezava čez %2 sekund (%1. poizkus)"
124
 Basic.StatusBar.AttemptingReconnect="Poizkušanje ponovne povezave … (%1. poizkus)"
125
@@ -400,6 +442,10 @@
126
 Basic.StatusBar.DelayStartingIn="Zakasnitev (začetek čez %1 s)"
127
 Basic.StatusBar.DelayStoppingIn="Zakasnitev (konec čez %1 s)"
128
 Basic.StatusBar.DelayStartingStoppingIn="Zakasnitev (začetek čez %1 s, konec čez %2 s)"
129
+Basic.StatusBar.RecordingSavedTo="Posnetek je shranjen v '%1'"
130
+Basic.StatusBar.ReplayBufferSavedTo="Medpomnilnik za ponovitev shranjen v '%1'"
131
+Basic.StatusBar.ScreenshotSavedTo="Posnetek zaslona je shranjen v '%1'"
132
+Basic.StatusBar.AutoRemuxedTo="Posnetek je bil samodejno remuksiran v '%1'"
133
 Basic.Filters="Filtri"
134
 Basic.Filters.AsyncFilters="Zvočni/slikovni filtri"
135
 Basic.Filters.AudioFilters="Zvočni filtri"
136
@@ -427,13 +473,13 @@
137
 Basic.TransformWindow.CropTop="Obreži zgoraj"
138
 Basic.TransformWindow.CropBottom="Obreži spodaj"
139
 Basic.TransformWindow.Alignment.TopLeft="Zgoraj levo"
140
-Basic.TransformWindow.Alignment.TopCenter="Zgoraj na sredino"
141
+Basic.TransformWindow.Alignment.TopCenter="Sredina zgoraj"
142
 Basic.TransformWindow.Alignment.TopRight="Zgoraj desno"
143
 Basic.TransformWindow.Alignment.CenterLeft="Na sredini levo"
144
 Basic.TransformWindow.Alignment.Center="Sredina"
145
 Basic.TransformWindow.Alignment.CenterRight="Na sredini desno"
146
 Basic.TransformWindow.Alignment.BottomLeft="Spodaj levo"
147
-Basic.TransformWindow.Alignment.BottomCenter="Spodaj na sredino"
148
+Basic.TransformWindow.Alignment.BottomCenter="Sredina spodaj"
149
 Basic.TransformWindow.Alignment.BottomRight="Spodaj desno"
150
 Basic.TransformWindow.BoundsType.None="Neomejeno"
151
 Basic.TransformWindow.BoundsType.MaxOnly="Samo največja velikost"
152
@@ -442,6 +488,8 @@
153
 Basic.TransformWindow.BoundsType.ScaleToWidth="Prilagodi širini meje"
154
 Basic.TransformWindow.BoundsType.ScaleToHeight="Prilagodi višini meje"
155
 Basic.TransformWindow.BoundsType.Stretch="Raztegni do meje"
156
+Basic.TransformWindow.Title="Uredi transformacijo za '%1'"
157
+Basic.TransformWindow.NoSelectedSource="Noben vir ni izbran"
158
 Basic.Main.AddSourceHelp.Title="Ni mogoče dodati vira"
159
 Basic.Main.AddSourceHelp.Text="Potrebujete vsaj 1 prizor, da lahko dodate vir."
160
 Basic.Main.Scenes="Prizori"
161
@@ -453,19 +501,23 @@
162
 Basic.Main.StartReplayBuffer="Zaženi medpomnilnik za ponovitev"
163
 Basic.Main.SaveReplay="Shrani ponovitev"
164
 Basic.Main.StartStreaming="Začni pretakati"
165
+Basic.Main.StartBroadcast="Pojdi v živo"
166
 Basic.Main.StartVirtualCam="Zagon virtualne kamere"
167
-Basic.Main.StopRecording="Prenehaj snemati"
168
+Basic.Main.StopRecording="Zaustavi snemanje"
169
 Basic.Main.PauseRecording="Premor snemanja"
170
 Basic.Main.UnpauseRecording="Nadaljuj snemanje"
171
-Basic.Main.StoppingRecording="Ustavljanje snemanja …"
172
-Basic.Main.StopReplayBuffer="Ustavi medpomnilnik ponovitve"
173
-Basic.Main.StoppingReplayBuffer="Ustavljanje medp. ponovitve..."
174
+Basic.Main.StoppingRecording="Zaustavljanje snemanja …"
175
+Basic.Main.StopReplayBuffer="Zaustavi medpomnilnik za ponovitve"
176
+Basic.Main.StoppingReplayBuffer="Zaustavljanje medp. ponovitve..."
177
+Basic.Main.SetupBroadcast="Upravljaj oddajanje"
178
 Basic.Main.StopStreaming="Prenehaj pretakati"
179
+Basic.Main.StopBroadcast="Končaj z oddajanjem"
180
+Basic.Main.AutoStopEnabled="(samodejna zaustavitev)"
181
 Basic.Main.StoppingStreaming="Ustavljanje pretoka …"
182
 Basic.Main.ForceStopStreaming="Prenehaj pretakati (zavrzi zakasnitev)"
183
 Basic.Main.ShowContextBar="Pokaži orodno vrstico vira"
184
 Basic.Main.HideContextBar="Skrij orodno vrstico vira"
185
-Basic.Main.StopVirtualCam="Zaustavitev virtualne kamere"
186
+Basic.Main.StopVirtualCam="Zaustavi virtualne kamere"
187
 Basic.Main.Group="%1. skupina"
188
 Basic.Main.GroupItems="Združi izbrane predmete"
189
 Basic.Main.Ungroup="Razdruži"
190
@@ -479,6 +531,7 @@
191
 Basic.MainMenu.File.Settings="Na&stavitve"
192
 Basic.MainMenu.File.ShowSettingsFolder="Prikaži mapo z nastavitvami"
193
 Basic.MainMenu.File.ShowProfileFolder="Prikaži mapo s profili"
194
+Basic.MainMenu.File.ShowMissingFiles="Preveri manjkajoče datoteke"
195
 Basic.MainMenu.AlwaysOnTop="Vedno n&a vrhu"
196
 Basic.MainMenu.File.Exit="Izhod (&X)"
197
 Basic.MainMenu.Edit="Ur&edi"
198
@@ -503,7 +556,7 @@
199
 Basic.MainMenu.Edit.Transform.FlipVertical="Zrcali na&vpično"
200
 Basic.MainMenu.Edit.Transform.FitToScreen="Prilagodi zaslonu (&F)"
201
 Basic.MainMenu.Edit.Transform.StretchToScreen="Raztegni na veliko&st zaslona"
202
-Basic.MainMenu.Edit.Transform.CenterToScreen="Usredini na zaslon (&C)"
203
+Basic.MainMenu.Edit.Transform.CenterToScreen="Na %sredino zaslona"
204
 Basic.MainMenu.Edit.Transform.VerticalCenter="Usredini navpično"
205
 Basic.MainMenu.Edit.Transform.HorizontalCenter="Usredini vodoravno"
206
 Basic.MainMenu.Edit.Order="Zap&oredje"
207
@@ -556,8 +609,8 @@
208
 Basic.Settings.General.EnableAutoUpdates="Ob zagonu samodejno preveri za posodobitve"
209
 Basic.Settings.General.OpenStatsOnStartup="Ob zagonu odpri pogovorno okno s statistiko"
210
 Basic.Settings.General.WarnBeforeStartingStream="Prikaži potrditveno okno pred začetkom pretakanja"
211
-Basic.Settings.General.WarnBeforeStoppingStream="Prikaži potrditveno okno pred končanjem pretakanja"
212
-Basic.Settings.General.WarnBeforeStoppingRecord="Prikaži potrditveno okno ob končanju snemanja"
213
+Basic.Settings.General.WarnBeforeStoppingStream="Prikaži potrditveno okno pred zaustavitvijo pretoka"
214
+Basic.Settings.General.WarnBeforeStoppingRecord="Prikaži potrditveno okno ob zaustavljanju snemanja"
215
 Basic.Settings.General.Projectors="Projektorji"
216
 Basic.Settings.General.HideProjectorCursor="Skrij kazalec nad projektorji"
217
 Basic.Settings.General.ProjectorAlwaysOnTop="Projektorje prikaži vedno na vrhu"
218
@@ -569,7 +622,7 @@
219
 Basic.Settings.General.RecordWhenStreaming="Samodejno snemaj med pretakanjem"
220
 Basic.Settings.General.KeepRecordingWhenStreamStops="Obdrži posnetek, ko se pretok zaustavi"
221
 Basic.Settings.General.ReplayBufferWhileStreaming="Med pretakanjem samodejno zaženi medpomnilnik za ponovno predvajanje"
222
-Basic.Settings.General.KeepReplayBufferStreamStops="Medpomnilnik za ponovitev naj bo po zaustavitvi pretakanja še naprej dejaven"
223
+Basic.Settings.General.KeepReplayBufferStreamStops="Medpomnilnik za ponovitve naj bo po zaustavitvi pretakanja še naprej dejaven"
224
 Basic.Settings.General.SysTray="Sistemska vrstica"
225
 Basic.Settings.General.SysTrayWhenStarted="Skrči v sistemsko vrstico ob zagonu"
226
 Basic.Settings.General.SystemTrayHideMinimize="Vedno skrči v sistemsko vrstico namesto v opravilno"
227
@@ -592,6 +645,7 @@
228
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Vodoravno spodaj (8 prizorov)"
229
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Navpično levo (8 prizorov)"
230
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Navpično desno (8 prizorov)"
231
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Vodoravno, zgoraj (18 prizorov)"
232
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Vodoravno zgoraj (24 prizorov)"
233
 Basic.Settings.Stream="Pretok"
234
 Basic.Settings.Stream.StreamType="Vrsta pretoka"
235
@@ -891,9 +945,74 @@
236
 ContextBar.FitToCanvas="Prilagodi na sliko"
237
 ContextBar.MediaControls.PlayMedia="Predvajaj"
238
 ContextBar.MediaControls.PauseMedia="Pavziraj"
239
-ContextBar.MediaControls.StopMedia="Ustavi"
240
+ContextBar.MediaControls.StopMedia="Zaustavi"
241
 ContextBar.MediaControls.RestartMedia="Ponovno žaženi"
242
 ContextBar.MediaControls.PlaylistNext="Naprej na seznamu predvajanja"
243
 ContextBar.MediaControls.PlaylistPrevious="Prejšnje na seznamu predvajanja"
244
 ContextBar.MediaControls.MediaProperties="Lastnosti medijev"
245
 ContextBar.MediaControls.BlindSeek="Pripomoček za iskanje medijev"
246
+YouTube.Auth.Ok="Uspešna overitev.\nZdaj lahko zaprete to stran"
247
+YouTube.Auth.NoCode="Postopek overitve je bil zaključen."
248
+YouTube.Auth.NoChannels="Za izbrani račun ni kanalov"
249
+YouTube.Auth.WaitingAuth.Title="Overjanje Youtube uporabnika"
250
+YouTube.Auth.WaitingAuth.Text="Zaključite postopek overjanja v zunanjem brskalniku.<br>Če se zunanji brskalnik ne odpre, sledite tej povezavi in zaključite overitev:<br>%1"
251
+YouTube.AuthError.Text="Ni bilo mogoče pridobiti podatkov o kanalu: %1."
252
+YouTube.Actions.WindowTitle="Nastavljanje oddajanja preko You Tube - Kanal: %1"
253
+YouTube.Actions.CreateNewEvent="Ustvari novo oddajanje"
254
+YouTube.Actions.ChooseEvent="Izberi obstoječe oddajanje"
255
+YouTube.Actions.Title="Naslov*"
256
+YouTube.Actions.MyBroadcast="Moje oddajanje"
257
+YouTube.Actions.Description="Opis"
258
+YouTube.Actions.Privacy="Zasebnost*"
259
+YouTube.Actions.Privacy.Private="Zasebno"
260
+YouTube.Actions.Privacy.Public="Javno"
261
+YouTube.Actions.Privacy.Unlisted="Ni na seznamu"
262
+YouTube.Actions.Category="Kategorija"
263
+YouTube.Actions.Thumbnail="Predogledna slika"
264
+YouTube.Actions.Thumbnail.SelectFile="Izberi datoteko ..."
265
+YouTube.Actions.Thumbnail.NoFileSelected="Nobena datoteka ni izbrana"
266
+YouTube.Actions.Thumbnail.ClearFile="Počisti"
267
+YouTube.Actions.MadeForKids="Je ta video narejen za otroke?*"
268
+YouTube.Actions.MadeForKids.Yes="Da, narejen je za otroke"
269
+YouTube.Actions.MadeForKids.No="Ne, ni narejen za otroke"
270
+YouTube.Actions.AdditionalSettings="Dodatne nastavitve:"
271
+YouTube.Actions.Latency="Zakasnitev"
272
+YouTube.Actions.Latency.Normal="običajna"
273
+YouTube.Actions.Latency.Low="majhna"
274
+YouTube.Actions.Latency.UltraLow="zelo majhna"
275
+YouTube.Actions.EnableAutoStart="Omogoči samodejni zagon"
276
+YouTube.Actions.EnableAutoStop="Omogoči samodejno zaustavitev"
277
+YouTube.Actions.AutoStartStop.TT="Prikazuje ali naj se načrtovano oddajanje začne samodejno"
278
+YouTube.Actions.EnableDVR="Omogoči DVR"
279
+YouTube.Actions.ScheduleForLater="Načrtuj za kasneje"
280
+YouTube.Actions.RememberSettings="Zapomni si te nastavitve"
281
+YouTube.Actions.Create_Ready="Ustvari oddajanje"
282
+YouTube.Actions.Create_GoLive="Ustvari oddajanje in zaženi pretok"
283
+YouTube.Actions.Choose_Ready="Izberi oddajanje"
284
+YouTube.Actions.Choose_GoLive="Izberi oddajanje in zaženi pretok"
285
+YouTube.Actions.Create_Schedule="Načrtuj oddajanje"
286
+YouTube.Actions.Create_Schedule_Ready="Načrtuj in izberi oddajanje"
287
+YouTube.Actions.Dashboard="Odpri YouTube Studio"
288
+YouTube.Actions.Error.Title="Napaka pri ustvarjanju oddajanja v živo"
289
+YouTube.Actions.Error.Text="Napaka pri dostopu do Youtube '%1'.<br/>Podroben opis napake je mogoče najti na <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
290
+YouTube.Actions.Error.General="Napak pri dostopu do Youtube. Preverite omrežno povezavo ali dostonost Youtube strežnika."
291
+YouTube.Actions.Error.NoBroadcastCreated="Napaka pri ustvarjanju oddaje '%1'.<br/>Podroben opis napake je mogoče najti na <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
292
+YouTube.Actions.Error.NoStreamCreated="Pretok ni bil ustvarjen. Ponovno povežite svoj račun."
293
+YouTube.Actions.Error.YouTubeApi="Youtube API napaka. Poglejte si beležke dnevnika za več podatkov."
294
+YouTube.Actions.Error.BroadcastNotFound="Izbrano oddajanje ni bilo najdeno."
295
+YouTube.Actions.Error.FileMissing="Izbrana datoteka ne obstaja"
296
+YouTube.Actions.Error.FileOpeningFailed="Napaka pri odpiranju izbrane datoteke"
297
+YouTube.Actions.Error.FileTooLarge="Izbrana datoteka je prevelika (Omejitev: 2 MiB)."
298
+YouTube.Actions.EventsLoading="Nalaganje seznama dogodkov..."
299
+YouTube.Actions.EventCreated.Title="Dogodek je ustvarjen"
300
+YouTube.Actions.EventCreated.Text="Dogodek je bil uspešno ustvarjen"
301
+YouTube.Actions.Stream="Pretok"
302
+YouTube.Actions.Stream.ScheduledFor="Načrtovan za %1"
303
+YouTube.Actions.Stream.Resume="Ponovno zaženi prekinjen pretok"
304
+YouTube.Actions.Stream.YTStudio="Samodejno ustvarjeno z Youtube Studio"
305
+YouTube.Actions.Notify.CreatingBroadcast="Ustvarjanje novega oddajanja v živo. Počakajte..."
306
+YouTube.Actions.AutoStartStreamingWarning.Title="Zahteva ročni zagon"
307
+YouTube.Actions.AutoStartStreamingWarning="Samodejni zagon za ta dogodek je onemogočen. Klknite na \"Pojdi v živo\", da začnete z oddajanjem."
308
+YouTube.Actions.AutoStopStreamingWarning="Ponovne povezave ne bo mogoče vzpostaviti.<br>Vaš pretokse bo zaustavil in ne boste več oddajali v živo."
309
+YouTube.Errors.liveStreamingNotEnabled="Pretakanje v živo ni omogočeno na izbranem Youtube kanalu.<br/><br/>Glej<a href='https://www.youtube.com/features'>youtube.com/features</a> za več informacij."
310
+YouTube.Errors.livePermissionBlocked="Pretakanje v živo ni na voljo na izbranem Youtube kanalu.<br/>Lahko traja do 24 ur po vklopu funkcije v nastavitvah kanala, da postane aktivno.<br/><br/>Glej<a href='https://www.youtube.com/features'>youtube.com/features</a> za podrobnosti."
311
obs-studio-27.0.1.tar.xz/UI/data/locale/sq-AL.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/sq-AL.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-Language="Gjuha Angleze"
3
+Language="Shqip"
4
 Apply="Aplikoni"
5
 Cancel="Anuloni"
6
 Close="Mbylle"
7
obs-studio-27.0.1.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/sv-SE.ini Changed
351
 
1
@@ -81,7 +81,7 @@
2
 Default="(Standard)"
3
 Calculating="Beräknar..."
4
 Fullscreen="Fullskärm"
5
-Windowed="I fönster"
6
+Windowed="Fönsterläge"
7
 Percent="Procent"
8
 RefreshBrowser="Uppdatera"
9
 AspectRatio="Bildförhållande <b>%1:%2</b>"
10
@@ -104,17 +104,18 @@
11
 Auth.Authing.Text="Autentiserar med %1, var god vänta..."
12
 Auth.AuthFailure.Title="Autentiseringsfel"
13
 Auth.AuthFailure.Text="Misslyckades att autentisera med %1:\n\n%2: %3"
14
-Auth.InvalidScope.Title="Verifiering krävs"
15
+Auth.InvalidScope.Title="Autentisering krävs"
16
 Auth.InvalidScope.Text="Autentiseringskraven för %1 har ändrats. Vissa funktioner kanske inte är tillgängliga."
17
 Auth.LoadingChannel.Title="Läser in kanalinformation..."
18
 Auth.LoadingChannel.Text="Läser in kanalinformation för %1, var god vänta..."
19
+Auth.LoadingChannel.Error="Kunde inte hämta kanalinformation."
20
 Auth.ChannelFailure.Title="Misslyckades att läsa in kanal"
21
 Auth.ChannelFailure.Text="Misslyckades att läsa in kanalinformation för %1\n\n%2: %3"
22
 Auth.Chat="Chatt"
23
 Auth.StreamInfo="Ströminformation"
24
 TwitchAuth.Stats="Twitch-statistik"
25
-TwitchAuth.Feed="Aktivitetsflöde för Twitch"
26
-TwitchAuth.TwoFactorFail.Title="Kunde inte efterfråga strömnyckel"
27
+TwitchAuth.Feed="Twitch-aktivitetsflöde"
28
+TwitchAuth.TwoFactorFail.Title="Kunde inte begära strömnyckel"
29
 TwitchAuth.TwoFactorFail.Text="OBS kunde inte ansluta till ditt Twitch-konto. Se till att tvåfaktorsautentiseringen har ställts in i <a href='https://www.twitch.tv/settings/security'>säkerhetsinställningarna på Twitch</a> då detta är nödvändigt för att kunna strömma."
30
 RestreamAuth.Channels="Restream-kanaler"
31
 Copy.Filters="Kopiera filter"
32
@@ -149,12 +150,14 @@
33
 Basic.AutoConfig.StreamPage.GetStreamKey="Hämta strömnyckel"
34
 Basic.AutoConfig.StreamPage.MoreInfo="Mer information"
35
 Basic.AutoConfig.StreamPage.UseStreamKey="Använd strömnyckel"
36
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Använd strömnyckel (avancerad)"
37
 Basic.AutoConfig.StreamPage.Service="Tjänst"
38
 Basic.AutoConfig.StreamPage.Service.ShowAll="Visa alla..."
39
 Basic.AutoConfig.StreamPage.Service.Custom="Anpassad..."
40
 Basic.AutoConfig.StreamPage.StreamKey="Strömnyckel"
41
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Länk)"
42
 Basic.AutoConfig.StreamPage.EncoderKey="Kodarnyckel"
43
+Basic.AutoConfig.StreamPage.ConnectedAccount="Anslutet konto"
44
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Uppskatta bithastighetens med ett bandbreddstest (kan ta några minuter)"
45
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Föredra hårdvarukodning"
46
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hårdvarukodning eliminerar den mesta processoranvändningen, men kan kräva mer bithastighet för att uppnå samma kvalitetsnivå."
47
@@ -214,7 +217,7 @@
48
 QuickTransitions.SwapScenes="Byt plats på Förhandsvisnings-/utdatascenerna efter skifte"
49
 QuickTransitions.SwapScenesTT="Byter plats på förhandsvisnings- och utdatascenerna efter övergång (om utdatans originalscen fortfarande finns). \nDet här kommer inte att ångra några förändringar i utdatans originalscen."
50
 QuickTransitions.DuplicateScene="Duplicera scen"
51
-QuickTransitions.DuplicateSceneTT="När du redigerar samma scen kan du redigera transformering/synligheten för källor utan att modifiera utmatningen.\nFör att redigera egenskaper för källor utan att modifiera utmatningen aktiverar du 'Duplicera källor'.\nNär detta värde ändras kommer den aktuella utmatningsscenen återställas (om den fortfarande finns)."
52
+QuickTransitions.DuplicateSceneTT="När du redigerar samma scen kan du redigera transformering/synligheten för källor utan att modifiera utmatningen.\nFör att redigera egenskaper för källor utan att modifiera utmatningen aktiverar du \"Duplicera källor\".\nNär detta värde ändras kommer den aktuella utmatningsscenen återställas (om den fortfarande finns)."
53
 QuickTransitions.EditProperties="Duplicera källor"
54
 QuickTransitions.EditPropertiesTT="När du redigerar samma scen kan du redigera egenskaperna för källor utan att modifiera utmatningen.\nDetta fungerar endast om 'Duplicera scen' är aktiverad.\nVissa källor (som mediakällor) stöder inte detta och kan inte redigeras separat.\nNär detta värde ändras kommer den aktuella utmatningsscenen återställas (om den fortfarande finns).\n\nVarning: Eftersom källor kommer att dupliceras kan detta kräva extra system- eller videoresurser."
55
 QuickTransitions.HotkeyName="Snabb övergång: %1"
56
@@ -226,50 +229,50 @@
57
 Basic.TogglePreviewProgramMode="Studioläge"
58
 Undo.Undo="Ångra"
59
 Undo.Redo="Gör om"
60
-Undo.Add="Lägg till '%1'"
61
-Undo.Delete="Radera '%1'"
62
-Undo.Rename="Byt namn '%1'"
63
-Undo.SceneCollection.Switch="Byt till '%1'"
64
+Undo.Add="Lägg till \"%1\""
65
+Undo.Delete="Radera \"%1\""
66
+Undo.Rename="Byt namn på \"%1\""
67
+Undo.SceneCollection.Switch="Byt till \"%1\""
68
 Undo.Item.Undo="Ångra %1"
69
 Undo.Item.Redo="Gör om %1"
70
 Undo.Sources.Multi="Radera %1 källor"
71
-Undo.Filters="Filtrera ändringar på '%1'"
72
-Undo.Filters.Paste.Single="Klistra in filter '%1' till '%2'"
73
-Undo.Filters.Paste.Multiple="Kopiera filter från '%1' till '%2'"
74
-Undo.Transform="Transformera källor i '%1'"
75
-Undo.Transform.Paste="Klistra in Transformation i '%1'"
76
-Undo.Transform.Rotate="Rotation i '%1'"
77
-Undo.Transform.Reset="Återställ Transformation i '%1'"
78
-Undo.Transform.HFlip="Vänd horisontellt i '%1'"
79
-Undo.Transform.VFlip="Vänd vertikalt i '%1'"
80
+Undo.Filters="Filtrera ändringar på \"%1\""
81
+Undo.Filters.Paste.Single="Klistra in filtret \"%1\" till \"%2\""
82
+Undo.Filters.Paste.Multiple="Kopiera filter från \"%1\" till \"%2\""
83
+Undo.Transform="Omvandla källor i \"%1\""
84
+Undo.Transform.Paste="Klistra in omvandling i \"%1\""
85
+Undo.Transform.Rotate="Rotation i \"%1\""
86
+Undo.Transform.Reset="Återställ omvandling i \"%1\""
87
+Undo.Transform.HFlip="Horisontell spegelvändning i \"%1\""
88
+Undo.Transform.VFlip="Vertikal spegelvändning i \"%1\""
89
 Undo.Transform.FitToScreen="Anpassa till skärm i \"%1\""
90
-Undo.Transform.StretchToScreen="Sträck till skärmen i '%1'"
91
-Undo.Transform.Center="Centrera på skärmen i '%1'"
92
-Undo.Transform.VCenter="Centrera vertikalt till skärmen i '%1'"
93
-Undo.Transform.HCenter="Centrera horisontellt till skärmen i '%1'"
94
-Undo.Volume.Change="Volymförändring på '%1'"
95
-Undo.Volume.Mute="Tysta '%1'"
96
-Undo.Volume.Unmute="Slå på ljud '%1'"
97
-Undo.Balance.Change="Ändra ljudbalans på '%1'"
98
-Undo.SyncOffset.Change="Ändra synkförskjutning av ljudet på '%1'"
99
-Undo.MonitoringType.Change="Ändra ljudmonitor på '%1'"
100
-Undo.Mixers.Change="Ändra ljudmixer på '%1'"
101
-Undo.ForceMono.On="Aktivera tvingat Mono för '%1'"
102
-Undo.ForceMono.Off="Inaktivera tvingat Mono för '%1'"
103
-Undo.Properties="Egenskapsändring på '%1'"
104
-Undo.Scene.Duplicate="Duplicera scen '%1'"
105
+Undo.Transform.StretchToScreen="Sträck ut till skärmen i \"%1\""
106
+Undo.Transform.Center="Centrera på skärmen i \"%1\""
107
+Undo.Transform.VCenter="Centrera vertikalt till skärmen i \"%1\""
108
+Undo.Transform.HCenter="Centrera horisontellt till skärmen i \"%1\""
109
+Undo.Volume.Change="Volymförändring på \"%1\""
110
+Undo.Volume.Mute="Stäng av ljud för \"%1\""
111
+Undo.Volume.Unmute="Slå på ljud för \"%1\""
112
+Undo.Balance.Change="Ändra ljudbalans på \"%1\""
113
+Undo.SyncOffset.Change="Ändra synkförskjutning av ljudet på \"%1\""
114
+Undo.MonitoringType.Change="Ändra ljudmonitor på \"%1\""
115
+Undo.Mixers.Change="Ändra ljudmixrar på \"%1\""
116
+Undo.ForceMono.On="Aktivera tvingad mono för \"%1\""
117
+Undo.ForceMono.Off="Inaktivera tvingad mono för \"%1\""
118
+Undo.Properties="Egenskapsändring på \"%1\""
119
+Undo.Scene.Duplicate="Duplicera scen \"%1\""
120
 Undo.ShowTransition="Visa övergång på \"%1\""
121
 Undo.HideTransition="Dölj övergång på \"%1\""
122
 Undo.ShowSceneItem="Visa \"%1\" i \"%2\""
123
 Undo.HideSceneItem="Dölj \"%1\" i \"%2\""
124
 Undo.ReorderSources="Ordna om källor i \"%1\""
125
-Undo.MoveUp="Flytta \"%1\" upp i '%2'"
126
-Undo.MoveDown="Flytta \"%1\" ned i '%2'"
127
-Undo.MoveToTop="Flytta \"%1\" längst upp i '%2'"
128
-Undo.MoveToBottom="Flytta \"%1\" längst ned i '%2'"
129
-Undo.PasteSource="Klistra in käll(or) i '%1'"
130
-Undo.PasteSourceRef="Klistra in källreferenser i '%1'"
131
-Undo.GroupItems="Gruppera in objekt i '%1'"
132
+Undo.MoveUp="Flytta \"%1\" upp i \"%2\""
133
+Undo.MoveDown="Flytta \"%1\" ned i \"%2\""
134
+Undo.MoveToTop="Flytta \"%1\" längst upp i \"%2\""
135
+Undo.MoveToBottom="Flytta \"%1\" längst ned i \"%2\""
136
+Undo.PasteSource="Klistra in källor i \"%1\""
137
+Undo.PasteSourceRef="Klistra in källreferenser i \"%1\""
138
+Undo.GroupItems="Gruppera objekt till \"%1\""
139
 TransitionNameDlg.Text="Var god ange övergångens namn"
140
 TransitionNameDlg.Title="Övergångsnamn"
141
 TitleBar.Profile="Profil"
142
@@ -287,10 +290,10 @@
143
 ConfirmBWTest.Title="Starta bandbreddstest?"
144
 ConfirmBWTest.Text="Du har konfigurerat OBS i testläge för bandbredd. Detta läge låter dig testa nätverket utan att din kanal direktsänder. När du har testat färdigt behöver du inaktivera den för att att tittare ska kunna se din ström.\n\nVill du fortsätta?"
145
 ConfirmExit.Title="Avsluta OBS?"
146
-ConfirmExit.Text="OBS är aktivt. Alla strömmar/inspelningar kommer att stängas av. Är du säker på att du vill avsluta?"
147
+ConfirmExit.Text="OBS körs för tillfället. Alla strömmar/inspelningar kommer att stängas av. Är du säker på att du vill avsluta?"
148
 ConfirmRemove.Title="Bekräfta borttagning"
149
 ConfirmRemove.Text="Vill du verkligen ta bort \"$1\"?"
150
-ConfirmRemove.TextMultiple="Är du säker på att du vill ta bort %1 poster?"
151
+ConfirmRemove.TextMultiple="Är du säker på att du vill ta bort %1 objekt?"
152
 Output.StartStreamFailed="Misslyckades att starta strömning"
153
 Output.StartRecordingFailed="Misslyckades att starta inspelning"
154
 Output.StartReplayFailed="Misslyckades att starta reprisbuffert"
155
@@ -314,6 +317,8 @@
156
 Output.RecordError.EncodeErrorMsg="Ett kodarfel uppstod under inspelning."
157
 Output.BadPath.Title="Ogiltig sökväg"
158
 Output.BadPath.Text="Den angivna sökvägen för utmatningsfil är ogiltig. Kontrollera att dina inställningar är korrekta och att en giltig sökväg har angetts."
159
+Output.NoBroadcast.Title="Ingen sändning har konfigurerats"
160
+Output.NoBroadcast.Text="Du måste konfigurera en sändning innan du kan börja strömma."
161
 LogReturnDialog="Loggfilen laddades upp utan problem."
162
 LogReturnDialog.Description="Din loggfil har laddats upp. Du kan nu dela webbadressen för felsökning eller support."
163
 LogReturnDialog.Description.Crash="Din kraschrapport har laddats upp. Du kan nu dela webbadressen för felsökning eller support."
164
@@ -337,7 +342,7 @@
165
 Remux.ExitUnfinished="Remuxing är inte klar, stoppas det nu kan göra målfilen oanvändbar.\nÄr du säker på att du vill stoppa remuxing?"
166
 Remux.HelpText="Släpp filer att göra en remux på i detta fönster eller välj en tom tabellcell under \"OBS-inspelning\" för att bläddra efter en fil."
167
 MissingFiles="Filer saknas"
168
-MissingFiles.MissingFile="Filer saknas"
169
+MissingFiles.MissingFile="Fil saknas"
170
 MissingFiles.NewFile="Ny fil"
171
 MissingFiles.HelpText="Några filer saknas sedan du senast använde OBS."
172
 MissingFiles.Clear="<rensades>"
173
@@ -352,6 +357,8 @@
174
 MissingFiles.Found="Hittades"
175
 MissingFiles.AutoSearch="Ytterligare filmatchningar hittades"
176
 MissingFiles.AutoSearchText="OBS har hittat ytterligare matchningar för saknade filer i denna katalog. Vill du lägga till dem?"
177
+MissingFiles.NoMissing.Title="Kontroll av saknade filer"
178
+MissingFiles.NoMissing.Text="Inga filer verkar saknas."
179
 UpdateAvailable="Ny uppdatering tillgänglig"
180
 UpdateAvailable.Text="Version %1.%2.%3 finns nu tillgänglig. <a href='%4'>Klicka här för att ladda ner</a>"
181
 Basic.DesktopDevice1="Skrivbordsljud"
182
@@ -373,7 +380,7 @@
183
 Deinterlacing.Linear2x="Linjär 2x"
184
 Deinterlacing.TopFieldFirst="Övre fältet först"
185
 Deinterlacing.BottomFieldFirst="Nedre fältet först"
186
-VolControl.SliderUnmuted="Volymreglage för '%1':"
187
+VolControl.SliderUnmuted="Volymreglage för \"%1\":"
188
 VolControl.SliderMuted="Volymreglage för \"%1\": (tyst för tillfället)"
189
 VolControl.Mute="Tysta \"%1\""
190
 VolControl.Properties="Egenskaper för \"%1\""
191
@@ -415,6 +422,9 @@
192
 Basic.PropertiesView.FPS.Simple="Enkla bildfrekvensvärden"
193
 Basic.PropertiesView.FPS.Rational="Rationella bildfrekvensvärden"
194
 Basic.PropertiesView.FPS.ValidFPSRanges="Giltiga bildfrekvensintervall:"
195
+Basic.PropertiesView.UrlButton.Text="Öppna denna länk i din standardwebbläsare?"
196
+Basic.PropertiesView.UrlButton.Text.Url="Webbadress: %1"
197
+Basic.PropertiesView.UrlButton.OpenUrl="Öppna webbadress"
198
 Basic.InteractionWindow="Interagerar med \"%1\""
199
 Basic.StatusBar.Reconnecting="Frånkopplad, återansluter om %2 sekund(er) (försök %1)"
200
 Basic.StatusBar.AttemptingReconnect="Försöker att återansluta... (försök %1)"
201
@@ -434,7 +444,9 @@
202
 Basic.Filters.Title="Filter för \"%1\""
203
 Basic.Filters.AddFilter.Title="Filternamn"
204
 Basic.Filters.AddFilter.Text="Vänligen ange namnet på filtret"
205
-Basic.TransformWindow="Scenföremålsomvandling"
206
+Basic.TransformWindow="Omvandla scenobjekt"
207
+Basic.TransformWindow.PositionX="X-position"
208
+Basic.TransformWindow.PositionY="Y-position"
209
 Basic.TransformWindow.Size="Storlek"
210
 Basic.TransformWindow.Width="Bredd"
211
 Basic.TransformWindow.Height="Höjd"
212
@@ -450,13 +462,13 @@
213
 Basic.TransformWindow.CropTop="Beskär överkant"
214
 Basic.TransformWindow.CropBottom="Beskär nederkant"
215
 Basic.TransformWindow.Alignment.TopLeft="Överst till vänster"
216
-Basic.TransformWindow.Alignment.TopCenter="Centrerad mot övre kant"
217
+Basic.TransformWindow.Alignment.TopCenter="Överst i mitten"
218
 Basic.TransformWindow.Alignment.TopRight="Överst till höger"
219
-Basic.TransformWindow.Alignment.CenterLeft="Centrerad mot vänster kant"
220
+Basic.TransformWindow.Alignment.CenterLeft="Centrerad till vänster"
221
 Basic.TransformWindow.Alignment.Center="Centrerad"
222
-Basic.TransformWindow.Alignment.CenterRight="Centrerad mot höger kant"
223
+Basic.TransformWindow.Alignment.CenterRight="Centrerad till höger"
224
 Basic.TransformWindow.Alignment.BottomLeft="Nederst till vänster"
225
-Basic.TransformWindow.Alignment.BottomCenter="Centrerad mot nedre kant"
226
+Basic.TransformWindow.Alignment.BottomCenter="Nederst i mitten"
227
 Basic.TransformWindow.Alignment.BottomRight="Nederst till höger"
228
 Basic.TransformWindow.BoundsType.None="Ingen avgränsning"
229
 Basic.TransformWindow.BoundsType.MaxOnly="Överskrid inte källans grundstorlek"
230
@@ -465,6 +477,8 @@
231
 Basic.TransformWindow.BoundsType.ScaleToWidth="Skala till avgränsningsramens bredd"
232
 Basic.TransformWindow.BoundsType.ScaleToHeight="Skala till avgränsningsramens höjd"
233
 Basic.TransformWindow.BoundsType.Stretch="Anpassa till avgränsningsramens storlek"
234
+Basic.TransformWindow.Title="Redigera omvandling för \"%1\""
235
+Basic.TransformWindow.NoSelectedSource="Inga valda källor"
236
 Basic.Main.AddSourceHelp.Title="Kan inte lägga till källa"
237
 Basic.Main.AddSourceHelp.Text="Du måste ha minst 1 scen för att kunna lägga till en källa."
238
 Basic.Main.Scenes="Scener"
239
@@ -476,6 +490,7 @@
240
 Basic.Main.StartReplayBuffer="Starta reprisbuffert"
241
 Basic.Main.SaveReplay="Spara repris"
242
 Basic.Main.StartStreaming="Börja strömma"
243
+Basic.Main.StartBroadcast="Direktsänd"
244
 Basic.Main.StartVirtualCam="Starta virtuell kamera"
245
 Basic.Main.StopRecording="Sluta spela in"
246
 Basic.Main.PauseRecording="Pausa inspelning"
247
@@ -483,14 +498,17 @@
248
 Basic.Main.StoppingRecording="Slutar spela in..."
249
 Basic.Main.StopReplayBuffer="Stoppa reprisbuffert"
250
 Basic.Main.StoppingReplayBuffer="Stoppar reprisbuffert..."
251
+Basic.Main.SetupBroadcast="Hantera sändning"
252
 Basic.Main.StopStreaming="Sluta strömma"
253
+Basic.Main.StopBroadcast="Avsluta sändning"
254
+Basic.Main.AutoStopEnabled="(stoppa automatiskt)"
255
 Basic.Main.StoppingStreaming="Slutar strömma..."
256
 Basic.Main.ForceStopStreaming="Sluta strömma (ignorera fördröjning)"
257
 Basic.Main.ShowContextBar="Visa verktygsfält för källor"
258
 Basic.Main.HideContextBar="Dölj verktygsfält för källor"
259
 Basic.Main.StopVirtualCam="Stoppa virtuell kamera"
260
 Basic.Main.Group="Grupp %1"
261
-Basic.Main.GroupItems="Gruppera markerade föremål"
262
+Basic.Main.GroupItems="Gruppera markerade objekt"
263
 Basic.Main.Ungroup="Avgruppera"
264
 Basic.Main.GridMode="Rutnätsläge"
265
 Basic.Main.ListMode="Listläge"
266
@@ -502,6 +520,7 @@
267
 Basic.MainMenu.File.Settings="&Inställningar"
268
 Basic.MainMenu.File.ShowSettingsFolder="Visa inställningsmapp"
269
 Basic.MainMenu.File.ShowProfileFolder="Visa profilmapp"
270
+Basic.MainMenu.File.ShowMissingFiles="Sök efter saknade filer"
271
 Basic.MainMenu.AlwaysOnTop="&Alltid överst"
272
 Basic.MainMenu.File.Exit="Avsl&uta"
273
 Basic.MainMenu.Edit="&Redigera"
274
@@ -615,6 +634,7 @@
275
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horisontal, nederkant (8 scener)"
276
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikal, vänsterkant (8 scener)"
277
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertikal, högerkant (8 scener)"
278
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Horisontal, överkant (18 scener)"
279
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Horisontal, överkant (24 scener)"
280
 Basic.Settings.Stream="Ström"
281
 Basic.Settings.Stream.StreamType="Strömtyp"
282
@@ -903,3 +923,68 @@
283
 ContextBar.MediaControls.PlaylistPrevious="Föregående i spellistan"
284
 ContextBar.MediaControls.MediaProperties="Mediaegenskaper"
285
 ContextBar.MediaControls.BlindSeek="Widget för mediasökning"
286
+YouTube.Auth.Ok="Auktoriseringen slutförd.\nDu kan nu stänga denna sida."
287
+YouTube.Auth.NoCode="Auktoriseringsprocessen slutfördes inte."
288
+YouTube.Auth.NoChannels="Ingen kanal(er) är tillgängliga på det valda kontot"
289
+YouTube.Auth.WaitingAuth.Title="Auktorisering av YouTube-användare"
290
+YouTube.Auth.WaitingAuth.Text="Vänligen slutför auktoriseringen i din externa webbläsare.<br>Om den externa webbläsaren inte öppnas, följ denna länk och slutför auktoriseringen:<br>%1"
291
+YouTube.AuthError.Text="Misslyckades att hämta kanalinformation: %1."
292
+YouTube.Actions.WindowTitle="Konfiguration för Youtube-sändning - Kanal: %1"
293
+YouTube.Actions.CreateNewEvent="Skapa ny sändning"
294
+YouTube.Actions.ChooseEvent="Välj befintlig sändning"
295
+YouTube.Actions.Title="Titel*"
296
+YouTube.Actions.MyBroadcast="Min sändning"
297
+YouTube.Actions.Description="Beskrivning"
298
+YouTube.Actions.Privacy="Integritet*"
299
+YouTube.Actions.Privacy.Private="Privat"
300
+YouTube.Actions.Privacy.Public="Offentlig"
301
+YouTube.Actions.Privacy.Unlisted="Olistad"
302
+YouTube.Actions.Category="Kategori"
303
+YouTube.Actions.Thumbnail="Miniatyr"
304
+YouTube.Actions.Thumbnail.SelectFile="Välj fil..."
305
+YouTube.Actions.Thumbnail.NoFileSelected="Ingen fil har valts"
306
+YouTube.Actions.Thumbnail.ClearFile="Rensa"
307
+YouTube.Actions.MadeForKids="Är den här videon gjord för barn?*"
308
+YouTube.Actions.MadeForKids.Yes="Ja, den är gjord för barn"
309
+YouTube.Actions.MadeForKids.No="Nej, den är inte gjord för barn"
310
+YouTube.Actions.AdditionalSettings="Ytterligare inställningar:"
311
+YouTube.Actions.Latency="Latens"
312
+YouTube.Actions.Latency.Low="Låg"
313
+YouTube.Actions.Latency.UltraLow="Ultralåg"
314
+YouTube.Actions.EnableAutoStart="Aktivera auto-start"
315
+YouTube.Actions.EnableAutoStop="Aktivera auto-stopp"
316
+YouTube.Actions.AutoStartStop.TT="Indikerar om denna schemalagda sändning ska starta automatiskt"
317
+YouTube.Actions.EnableDVR="Aktivera DVR"
318
+YouTube.Actions.360Video="360-video"
319
+YouTube.Actions.ScheduleForLater="Schemalägg till senare"
320
+YouTube.Actions.RememberSettings="Kom ihåg dessa inställningar"
321
+YouTube.Actions.Create_Ready="Skapa sändning"
322
+YouTube.Actions.Create_GoLive="Skapa sändning och börja strömma"
323
+YouTube.Actions.Choose_Ready="Välj sändning"
324
+YouTube.Actions.Choose_GoLive="Välj sändning och börja strömma"
325
+YouTube.Actions.Create_Schedule="Schemalägg sändning"
326
+YouTube.Actions.Create_Schedule_Ready="Schemalägg och välj sändning"
327
+YouTube.Actions.Dashboard="Öppna YouTube Studio"
328
+YouTube.Actions.Error.Title="Fel vid skapande av livesändning"
329
+YouTube.Actions.Error.Text="YouTube-åtkomstfel \"%1\".<br/>Detaljerad felbeskrivning kan hittas på <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
330
+YouTube.Actions.Error.General="Fel vid åtkomst till YouTube. Kontrollera din nätverksanslutning eller din åtkomst till YouTube-servern."
331
+YouTube.Actions.Error.NoBroadcastCreated="Fel vid skapande av sändning \"%1\".<br/>Detaljerad felbeskrivning kan hittas på <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
332
+YouTube.Actions.Error.NoStreamCreated="Ingen ström skapades. Var god länka om ditt konto."
333
+YouTube.Actions.Error.YouTubeApi="Fel i YouTubes API. Se loggfilen för mer information."
334
+YouTube.Actions.Error.BroadcastNotFound="Den valda sändningen hittades inte."
335
+YouTube.Actions.Error.FileMissing="Vald fil finns inte."
336
+YouTube.Actions.Error.FileOpeningFailed="Misslyckades att öppna vald fil."
337
+YouTube.Actions.Error.FileTooLarge="Vald fil är för stor (max: 2 MiB)."
338
+YouTube.Actions.EventsLoading="Läser in lista över händelser..."
339
+YouTube.Actions.EventCreated.Title="Händelse skapades"
340
+YouTube.Actions.EventCreated.Text="Händelse redigerades."
341
+YouTube.Actions.Stream="Strömma"
342
+YouTube.Actions.Stream.ScheduledFor="Schemalagd för %1"
343
+YouTube.Actions.Stream.Resume="Återuppta avbruten ström"
344
+YouTube.Actions.Stream.YTStudio="Skapades automatiskt av YouTube Studio"
345
+YouTube.Actions.Notify.CreatingBroadcast="Skapar en ny direktsändning, var god vänta..."
346
+YouTube.Actions.AutoStartStreamingWarning.Title="Manuell start krävs"
347
+YouTube.Actions.AutoStartStreamingWarning="Automatisk start har inaktiverats för denna händelse, klicka på \"Direktsänd\" för att starta din sändning."
348
+YouTube.Actions.AutoStopStreamingWarning="Du kommer inte att kunna återansluta.<br>Din ström kommer att stoppas och du kommer inte längre direktsända."
349
+YouTube.Errors.liveStreamingNotEnabled="Direktsändning har inte aktiverats på den valda YouTube-kanalen.<br/><br/>Se <a href='https://www.youtube.com/features'>youtube.com/features</a> för mer information."
350
+YouTube.Errors.livePermissionBlocked="Direktsändning är inte tillgänglig på den valda YouTube-kanalen.<br/>Observera att det kan ta upp till 24 timmar för direktsändning att bli tillgänglig efter att ha aktiverat det i dina kanalinställningar.<br/><br/>Se <a href='https://www.youtube.com/features'>youtube.com/features</a> för detaljer."
351
obs-studio-27.1.3.tar.xz/UI/data/locale/szl-PL.ini Added
813
 
1
@@ -0,0 +1,811 @@
2
+Language="ślōnsko"
3
+Apply="Zastosuj"
4
+Cancel="Pociep"
5
+Close="Zawrzij"
6
+Save="Zapisz"
7
+Discard="Ôdciep"
8
+Disable="wyłōnczōne"
9
+Yes="Ja"
10
+No="Niy"
11
+Add="Przidej"
12
+Remove="Wyciep"
13
+Rename="Zmiyń miano"
14
+Interact="Włōncz interakcyjo"
15
+Filters="Filtry"
16
+Properties="Właściwości"
17
+MoveUp="Przeniyś na wiyrch"
18
+MoveDown="Przeniyś na spodek"
19
+Settings="Ôpcyje"
20
+Display="Ekran"
21
+Name="Miano"
22
+Exit="Zawrzij"
23
+Mixer="Mikser klangu"
24
+Browse="Przeglōndej"
25
+DroppedFrames="Stracōne klotki %1 (%2%)"
26
+StudioProgramProjector="Wyświytlanie na połnym ekranie (program)"
27
+PreviewProjector="Wyświytlanie na połnym ekranie (podglōnd)"
28
+SceneProjector="Wyświytlanie na połnym ekranie (bina)"
29
+SourceProjector="Wyświytlanie na połnym ekranie (zdrzōdło)"
30
+StudioProgramWindow="Podglōnd we ôknie (program)"
31
+PreviewWindow="Podglōnd we ôknie (podglōnd)"
32
+SceneWindow="Podglōnd we ôknie (bina)"
33
+SourceWindow="Podglōnd we ôknie (zdrzōdło)"
34
+MultiviewProjector="Multiview (połny ekran)"
35
+MultiviewWindowed="Multiview (we ôknie)"
36
+ResizeProjectorWindowToContent="Napasuj ôkno do zawartości"
37
+Clear="Wypucuj"
38
+Revert="Prziwrōć"
39
+Show="Pokoż"
40
+Hide="Skryj"
41
+UnhideAll="Pokoż wszyjske"
42
+Untitled="Bez tytułu"
43
+New="Nowy"
44
+Duplicate="Zrōb tuplikat"
45
+Enable="Włōncz"
46
+DisableOSXVSync="Wyłōncz piōnowo synchrōnizacyjo macOS"
47
+ResetOSXVSyncOnExit="Prziwrōć piōnowo synchrōnizacyjo macOS po zawrzyniu aplikacyje"
48
+HighResourceUsage="Enkodowanie je przeciōnżōne! Zmiyń ôpcyje wideo abo użyj gibszego presetu kodowania."
49
+Transition="Przejście"
50
+QuickTransitions="Gibke przejścia"
51
+FadeToBlack="Zanikanie do czyrni"
52
+Left="Lewo"
53
+Right="Prawo"
54
+Top="Wiyrch"
55
+Bottom="Spodek"
56
+Hours="Godziny"
57
+Minutes="Minuty"
58
+Seconds="Sekōndy"
59
+Deprecated="Wycofowane"
60
+ReplayBuffer="Nagrowanie powtōrek"
61
+Import="Importuj"
62
+Export="Eksportuj"
63
+Copy="Kopiyruj"
64
+Paste="Wkludź"
65
+PasteReference="Wkludź (referyncyjo)"
66
+PasteDuplicate="Wkludź (tuplikat)"
67
+RemuxRecordings="Przepakuj nagrania"
68
+Next="Niyskorniyjszy"
69
+Back="Nazod"
70
+Defaults="Sztandardowe"
71
+HideMixer="Skryj we mikserze"
72
+TransitionOverride="Zastōmpiynie przejścio"
73
+ShowTransition="Pokoż przejście"
74
+HideTransition="Skryj przejście"
75
+None="Brak"
76
+StudioMode.Preview="Podglōnd"
77
+ShowInMultiview="Pokoż we Multiview"
78
+VerticalLayout="Ukłod piōnowy"
79
+Group="Skupina"
80
+DoNotShowAgain="Niy pokazuj zaś"
81
+Default="(Sztandardowo)"
82
+Calculating="Rachowanie..."
83
+Fullscreen="Połny ekran"
84
+Windowed="We ôknie"
85
+RefreshBrowser="Ôdświyż"
86
+AspectRatio="Spōłczynnik proporcyje <b>%1:%2</b>"
87
+LockVolume="Zaszperuj głośność"
88
+LogViewer="Podglōnd logōw"
89
+ShowOnStartup="Pokoż na sztarcie"
90
+OpenFile="Ôtwōrz zbiōr"
91
+AddValue="Przidej %1"
92
+AlreadyRunning.Title="OBS już je sztartniynty"
93
+AlreadyRunning.Text="OBS już je sztartniynty! Dej pozōr na wszyjske sztartniynte wystōmpiynia OBS nim sztartniesz go zaś. Jeźli OBS je zminimalizowany do zasobnika systymowego, ôbejzdrzij eli niyma ôn sztartniynty tyż sam."
94
+AlreadyRunning.LaunchAnyway="Sztartnij krōm tego"
95
+ChromeOS.Title="Niypodpiyrano platforma"
96
+ChromeOS.Text="Snodź OBS je sztartniynty jako kōntynyr we systymie ChromeOS. Platforma ta niyma ôbsugowano."
97
+DockCloseWarning.Title="Zawrzij ôkno dokowalne"
98
+DockCloseWarning.Text="Zawrziłś ôkno dowajōnce sie dokować. Jeźli chcesz go zasik pokozać, to użyj myni Widok → Doki na pasku myni."
99
+ExtraBrowsers="Panele przeziyroczki"
100
+ExtraBrowsers.Info="Przidej panele bez ôkryślynie ônych miana a adresa URL a potym kliknij Zastosuj abo Zawrzij by jy ôtworzić. Panele idzie przidać i wyciepać w kożdyj chwili."
101
+ExtraBrowsers.DockName="Miano panelu"
102
+Auth.Authing.Title="Uwierzitelnianie..."
103
+Auth.Authing.Text="Doczkej. Trwo uwierzitelnianie we %1..."
104
+Auth.AuthFailure.Title="Feler przi uwierzitelniyniu"
105
+Auth.AuthFailure.Text="Niy idzie uwierzitelnić we %1:\n\n%2: %3"
106
+Auth.InvalidScope.Title="Wymogane uwierzitelniynie"
107
+Auth.InvalidScope.Text="Zmiyniyły sie wymogania uwierzitelnianio dlo %1. Niykere funkcyje mogōm być niydostympne."
108
+Auth.LoadingChannel.Title="Ladowanie informacyje ô kanale..."
109
+Auth.LoadingChannel.Text="Doczkej. Trwo ladowanie informacyje ô kanale w zerwisie %1..."
110
+Auth.ChannelFailure.Title="Niy idzie zaladować informacyje ô kanale"
111
+Auth.ChannelFailure.Text="Niy idzie zaladować informacyje ô kanale w zerwisie %1\n\n%2: %3"
112
+Auth.Chat="Czat"
113
+Auth.StreamInfo="Informacyjo ô streamie"
114
+TwitchAuth.Stats="Sztatystyki Twitch"
115
+TwitchAuth.Feed="Wykoz aktywności Twitch"
116
+TwitchAuth.TwoFactorFail.Title="Niy idzie pobrać klucza streamu"
117
+TwitchAuth.TwoFactorFail.Text="Feler przi powiōnzaniu Twojigo kōnta Twitch we OBS. Ôbejzdrzij, eli mosz włōnczōne uwierzitelnianie dwuskładnikowe we <a href='https://www.twitch.tv/settings/security'>ôpcyjach bezpiyczyństwa Twitcha</a>. Wymogane je to do streamowania bez ta platforma."
118
+RestreamAuth.Channels="Kanały Restream"
119
+Copy.Filters="Kopiyruj filtry"
120
+Paste.Filters="Wkludź filtry"
121
+BrowserPanelInit.Title="Inicjacyjo przeziyroczki..."
122
+BrowserPanelInit.Text="Inicjacyjo przeziyroczki, doczkej..."
123
+BandwidthTest.Region="Regiōn"
124
+BandwidthTest.Region.US="Zjednoczōne Sztaty"
125
+BandwidthTest.Region.EU="Ojropa"
126
+BandwidthTest.Region.Asia="Azyjo"
127
+BandwidthTest.Region.Other="Inkszy"
128
+Basic.AutoConfig="Kryatōr autōmatycznyj kōnfiguracyje"
129
+Basic.AutoConfig.ApplySettings="Zastosuj ustawiynia"
130
+Basic.AutoConfig.StartPage="Informacyje ô używaniu"
131
+Basic.AutoConfig.StartPage.SubTitle="Ôkryśl jak chcesz używać aplikacyje"
132
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Ôptymalizacyjo pod streaming, a nagrowanie je drugorzyndne"
133
+Basic.AutoConfig.StartPage.PrioritizeRecording="Ôptymalizacyjo pod nagrowanie, niy byda streamować"
134
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="Byda używać ino wirtualnyj kamery"
135
+Basic.AutoConfig.VideoPage="Ôpcyje wideo"
136
+Basic.AutoConfig.VideoPage.SubTitle="Ôkryśl ustawiynia wideo, kere chcesz użyć"
137
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Użyj teroźnyj (%1x%2)"
138
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Mōnitōr %1 (%2x%3)"
139
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Użyj teroźnego (%1)"
140
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 abo 30, nale wola 60"
141
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 abo 30, nale wola lepszo rozdzielczość"
142
+Basic.AutoConfig.VideoPage.CanvasExplanation="Bazowo rozdzielczość niy musi być rozdzielczościōm dlo wynikowego nagranio abo streamu. Ta drugo może być efektym skalowanio ku cylu zmyńszynio wymogań poziōmu przepływności abo dostympności zasobōw przidajnych do kōmpresyje."
143
+Basic.AutoConfig.StreamPage="Informacyjo ô streamie"
144
+Basic.AutoConfig.StreamPage.SubTitle="Podej informacyje ô streamie"
145
+Basic.AutoConfig.StreamPage.ConnectAccount="Podłōncz kōnto (rekōmandowane)"
146
+Basic.AutoConfig.StreamPage.DisconnectAccount="Ôdłōncz kōnto"
147
+Basic.AutoConfig.StreamPage.DisconnectAccount.Confirm.Title="Ôdłōnczyć kōnto?"
148
+Basic.AutoConfig.StreamPage.GetStreamKey="Pobier klucz"
149
+Basic.AutoConfig.StreamPage.MoreInfo="Wiyncyj info"
150
+Basic.AutoConfig.StreamPage.UseStreamKey="Użyj klucza streamu"
151
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Użyj klucza streamu (zaawansowane)"
152
+Basic.AutoConfig.StreamPage.Service="Zerwis"
153
+Basic.AutoConfig.StreamPage.Service.ShowAll="Pokoż wszyjske..."
154
+Basic.AutoConfig.StreamPage.Service.Custom="Niysztandardowy..."
155
+Basic.AutoConfig.StreamPage.Server="Serwer"
156
+Basic.AutoConfig.StreamPage.StreamKey="Klucz streamu"
157
+Basic.AutoConfig.StreamPage.EncoderKey="Klucz enkodera"
158
+Basic.AutoConfig.StreamPage.ConnectedAccount="Połōnczōne kōnto"
159
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Wola enkodowanie sprzyntowe"
160
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Ôstrzeżynie"
161
+Basic.AutoConfig.TestPage="Wyniki kōńcowe"
162
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testowanie zakōńczōne"
163
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Łōnczynie ze: %1..."
164
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testuja przepustowość dlo: %1"
165
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testuja enkoder streamu, może to chwila potrwać..."
166
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testuja enkoder nagrowanio, może to chwila potrwać..."
167
+Basic.AutoConfig.TestPage.TestingRes="Testuja rozdzielczość, może to chwila potrwać..."
168
+Basic.AutoConfig.TestPage.TestingRes.Fail="Niy idzie sztartnōńć enkodera"
169
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testuja %1x%2 %3 FPS..."
170
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Enkoder streamu"
171
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Enkoder nagrowanio"
172
+Basic.AutoConfig.TestPage.Result.Header="Aplikacyjo ôbsztalowała te ustawiynia za nojbarzij idyalne dlo Ciebie:"
173
+Basic.Stats="Sztatystyki"
174
+Basic.Stats.CPUUsage="Użycie procesōra"
175
+Basic.Stats.HDDSpaceAvailable="Dostympny plac na dysku"
176
+Basic.Stats.MemoryUsage="Użycie spamiyńci"
177
+Basic.Stats.AverageTimeToRender="Strzedni czas na rynderowanie klotki"
178
+Basic.Stats.SkippedFrames="Pōminiynte klotki skirz ôpōźniyń enkodera"
179
+Basic.Stats.MissedFrames="Pōminiynte klotki skirz ôpōźniyń rynderowanio"
180
+Basic.Stats.Output.Recording="Nagrowanie"
181
+Basic.Stats.Status="Sztatus"
182
+Basic.Stats.Status.Recording="Nagrowanie"
183
+Basic.Stats.Status.Reconnecting="Pōnowne łōnczynie"
184
+Basic.Stats.Status.Inactive="Niyaktywne"
185
+Basic.Stats.Status.Active="Aktywne"
186
+Basic.Stats.DroppedFrames="Stracōne klotki (nec)"
187
+Basic.Stats.MegabytesSent="Cołke dane wychodowe"
188
+Basic.Stats.DiskFullIn="Dysk bydzie połny za (kole)"
189
+Basic.Stats.ResetStats="Resetuj sztatystyki"
190
+ResetUIWarning.Title="Chcesz zresetować wyglōnd aplikacyje?"
191
+ResetUIWarning.Text="Reset ôpcyji wyglōndu aplikacyje skryje ekstra ôkynka. Wymogane bydzie prziwrōcynie ônych z myni wyglōndu, jeźli majōm być widzialne.\n\nChcesz zresetować wyglōnd aplikacyje?"
192
+Updater.Title="Nowo aktualizacyjo je dostympno"
193
+Updater.Text="Nowo aktualizacyjo je dostympno:"
194
+Updater.UpdateNow="Aktualizuj teroz"
195
+Updater.RemindMeLater="Spōmnij mi niyskorzij"
196
+Updater.Skip="Pōmiń ta wersyjo"
197
+Updater.Running.Title="Aplikacyjo je sztartniynto"
198
+Updater.Running.Text="Wyjścia sōm aktualnie aktywne, zawrzij wszyjske aktywne wyjścia przed napoczyńciym procesu aktualizacyje"
199
+Updater.NoUpdatesAvailable.Title="Brak dostympnych aktualizacyji"
200
+Updater.NoUpdatesAvailable.Text="Brak dostympnych aktualizacyji"
201
+Updater.FailedToLaunch="Feler przi sztartowaniu aktualizacyje"
202
+Updater.GameCaptureActive.Title="Przechytywanie szpilu je aktywne"
203
+Updater.GameCaptureActive.Text="Bibliotyka zaczepiajōnco przechytywanie szpilu je używano. Zawrzij wszyjske przechytywane szpile abo inksze programy (ewyntualnie zresztartuj systym) i sprōbuj zaś."
204
+QuickTransitions.SwapScenes="Umiyń podglōnd/wyjście bin po przejściu"
205
+QuickTransitions.SwapScenesTT="Umiynio podglōnd i wyjście bin po przejściu (jeźli istniyje wyjście ôryginalnyj biny).\nNiy prziwroco to zmian jake bōły dokōnane we ôryginalnyj binie."
206
+QuickTransitions.DuplicateScene="Tupluj bina"
207
+QuickTransitions.DuplicateSceneTT="Kej edytujesz ta sama bina, ôpcyjo ta przizwolo na edycyjo przejścio/widzialności zdrzōdeł bez modyfikacyje wyjścio.\nCoby edytować włosności zdrzōdeł bez modyfikacyje wyjścio trza włōnczyć ôpcyjo 'Tupluj zdrzōdła'.\nZmiana tyj ôpcyje zresetuje wyjście teroźnyj biny, jeźli ôna istniyje."
208
+QuickTransitions.EditProperties="Tupluj zdrzōdła"
209
+QuickTransitions.EditPropertiesTT="Kej edytujesz ta sama bina, ôpcyjo ta przizwolo na edycyjo zdrzōdeł bez modyfikacyje wyjścio biny.\nMożliwe to je jyno przi włōnczōnyj ôpcyje 'Tupluj bina'.\nNiykere zdrzōdła (na bajszpil przechytywanie ôbrazu abo zdrzōdła mydiōw) tego niy ôbsugujōm i niy mogōm być edytowane ôsobno.\nZmiana tyj ôpcyje zresetuje wyjście teroźnyj biny, jeźli istniyje.\n\nPozōr: Pōniywŏż zdrzōdła sōm tuplowane, może to ôznaczać zwiynkszynie ôciōnżyniŏ kōmputra i zdrzōdeł."
210
+QuickTransitions.HotkeyName="Gibke przejście: %1"
211
+Basic.AddTransition="Przidej kōnfigurowalne przejście"
212
+Basic.RemoveTransition="Wyciep kōnfigurowalne przejście"
213
+Basic.TransitionProperties="Włosności przejścio"
214
+Basic.SceneTransitions="Przejścia biny"
215
+Basic.TransitionDuration="Czas trwanio"
216
+Basic.TogglePreviewProgramMode="Tryb sztudia"
217
+Undo.Undo="Cofej"
218
+Undo.Redo="Wrōć"
219
+Undo.Add="Przidej %1'"
220
+Undo.Delete="Wyciep '%1'"
221
+Undo.Rename="Zmiyń miano '%1'"
222
+Undo.SceneCollection.Switch="Przeszaltruj na '%1'"
223
+Undo.Item.Undo="Cofej %1"
224
+Undo.Item.Redo="Wrōć %1"
225
+Undo.Sources.Multi="Wyciep zdrzōdła: %1"
226
+Undo.Filters="Zmiany filtra we '%1'"
227
+Undo.Filters.Paste.Single="Wkludź filtr '%1' do '%2'"
228
+Undo.Filters.Paste.Multiple="Kopiyruj filtry z '%1' do '%2'"
229
+Undo.Transform="Przekształć zdrzōdło(a) we '%1'"
230
+Undo.Transform.Paste="Wkludź przekształcynie we '%1'"
231
+Undo.Transform.Rotate="Rotacyjo we '%1'"
232
+Undo.Transform.Reset="Reset przekształcyń we '%1'"
233
+Undo.Transform.HFlip="Ôdwrōć w poziōmie we '%1'"
234
+Undo.Transform.VFlip="Ôdwrōć w piōnie we '%1'"
235
+Undo.Transform.FitToScreen="Napasuj do ekranu we '%1'"
236
+Undo.Transform.StretchToScreen="Rozciōngnij do ekranu we '%1'"
237
+Undo.Transform.Center="Wypostrzodkuj na ekranie we '%1'"
238
+Undo.Transform.VCenter="Wypostrzodkuj w piōnie we '%1'"
239
+Undo.Transform.HCenter="Wypostrzodkuj w poziōmie we '%1'"
240
+Undo.Volume.Change="Zmiana głośności na '%1'"
241
+Undo.Volume.Mute="Wycisz '%1'"
242
+Undo.Volume.Unmute="Wyłōncz wyciszynie '%1'"
243
+Undo.Balance.Change="Zmiana balansu klangu na '%1'"
244
+Undo.SyncOffset.Change="Zmiana cofniyńco klangu na '%1'"
245
+Undo.MonitoringType.Change="Zmiana mōnitorowanio klangu na '%1'"
246
+Undo.Mixers.Change="Zmiana we miksyrze klangu na '%1'"
247
+Undo.ForceMono.On="Włōncz wymuszynie klangu mono na '%1'"
248
+Undo.ForceMono.Off="Wyłōncz wymuszynie klangu mono na '%1'"
249
+Undo.Properties="Zmiana włosności we '%1'"
250
+Undo.Scene.Duplicate="Tupluj bina '%1'"
251
+Undo.ShowTransition="Pokoż przejście na '%1'"
252
+Undo.HideTransition="Skryj przejście na '%1'"
253
+Undo.ShowSceneItem="Pokoż '%1' we '%2'"
254
+Undo.HideSceneItem="Skryj '%1' we '%2'"
255
+Undo.ReorderSources="Zmiyń porzōndek zdrzōdeł we '%1'"
256
+Undo.MoveUp="Przeniyś '%1' w gōra we '%2'"
257
+Undo.MoveDown="Przeniyś '%1' we dōł we '%2'"
258
+Undo.MoveToTop="Przeniyś '%1' na wiyrch we '%2'"
259
+Undo.MoveToBottom="Przeniyś '%1' na spodek we '%2'"
260
+Undo.PasteSource="Wkludź zdrzōdło(a) we '%1'"
261
+Undo.PasteSourceRef="Wkludź ôdniesiynie(a) do zdrzōdła we '%1'"
262
+Undo.GroupItems="Grupuj we '%1'"
263
+TransitionNameDlg.Text="Podej miano przejścio"
264
+TransitionNameDlg.Title="Miano przejścio"
265
+TitleBar.Profile="Profil"
266
+TitleBar.Scenes="Biny"
267
+NameExists.Title="Miano już istniyje"
268
+NameExists.Text="Miano je już używane."
269
+NoNameEntered.Title="Wkludź dobre miano"
270
+NoNameEntered.Text="Miano niy może być prōżne."
271
+ConfirmStart.Title="Sztartnōńć stream?"
272
+ConfirmStart.Text="Chcesz sztartnōńć streamowanie?"
273
+ConfirmStop.Title="Zasztopować stream?"
274
+ConfirmStop.Text="Chcesz zakōńczyć streamowanie?"
275
+ConfirmStopRecord.Title="Zasztopować nagrowanie?"
276
+ConfirmStopRecord.Text="Chcesz zakończyć nagrowanie?"
277
+ConfirmBWTest.Title="Sztartnōńć test przepustowości?"
278
+ConfirmExit.Title="Wyjść z OBS?"
279
+ConfirmRemove.Title="Potwiyrdź wyciepniyńcie"
280
+ConfirmRemove.Text="Pewnikym chcesz wyciepnōńć '$1'?"
281
+Output.StartStreamFailed="Niy podarziło sie sztartnōńć streamowanio"
282
+Output.StartRecordingFailed="Niy podarziło sie sztartnōńć nagrowanio"
283
+Output.StartReplayFailed="Niy podarziło sie sztartnōńć nagrowanio powtōrek"
284
+Output.ReplayBuffer.PauseWarning.Title="Niy idzie zapisać powtōrek w czasie pauzy nagrowanio"
285
+Output.ReplayBuffer.PauseWarning.Text="Pozōr: Powtōrki niy mogōm być zapisane, kej nagrowanie je spauzowane."
286
+Output.ConnectFail.Title="Niy idzie połōnczyć"
287
+Output.ConnectFail.BadPath="Niynoleżno cesta abo adresa URL ôd połōnczynio. Dej pozōr na noleżność ustawiyń."
288
+Output.ConnectFail.ConnectFailed="Niy podarziło sie połōnczyć z serwerym"
289
+Output.ConnectFail.Disconnected="Stracōne połōnczynie z serwerym."
290
+Output.StreamEncodeError.Title="Feler przi enkodowaniu"
291
+Output.StreamEncodeError.Msg="Feler enkodowanio wystōmpiōł w czasie transmisyje."
292
+Output.RecordFail.Title="Niy idzie sztartnōńć nagrowanio"
293
+Output.RecordNoSpace.Title="Za mało placu na dysku"
294
+Output.RecordError.Title="Feler przi nagrowaniu"
295
+Output.BadPath.Title="Zło ściyżka zbioru"
296
+LogReturnDialog.CopyURL="Skopiyruj adresa URL"
297
+LogReturnDialog.AnalyzeURL="Analizuj"
298
+LogReturnDialog.ErrorUploadingLog="Feler przi wysyłaniu zbioru dziynnika"
299
+Remux.SourceFile="Zbiōr nagranio z OBS"
300
+Remux.TargetFile="Zbiōr docelowy"
301
+Remux.Stop="Zasztopuj remux"
302
+Remux.ClearFinished="Wyciep zakōńczōne auftragi"
303
+Remux.ClearAll="Wyciep wszyjske auftragi"
304
+Remux.OBSRecording="Zbiōr nagranio z OBS"
305
+Remux.FinishedTitle="Remux zakōńczōny"
306
+Remux.SelectRecording="Ôbier nagranie OBS..."
307
+Remux.SelectTarget="Ôbier zbiōr docelowy..."
308
+Remux.FileExistsTitle="Docelowy zbiōr istniyje"
309
+Remux.FileExists="Te zbiory już istniyjōm. Chcesz jy nadpisać?"
310
+Remux.ExitUnfinishedTitle="Remux w ciōngu"
311
+MissingFiles="Brakujōnce zbiory"
312
+MissingFiles.MissingFile="Brakujōncy zbiōr"
313
+MissingFiles.NewFile="Nowy zbiōr"
314
+MissingFiles.HelpText="Ôd piyrwyjszego użycio OBS brakuje niykerych zbiorōw."
315
+MissingFiles.Clear="<wyciepniynty>"
316
+MissingFiles.NumFound="Znodniynte $1 ze $2"
317
+MissingFiles.Search="Przeszukej katalog..."
318
+MissingFiles.SelectFile="Ôbier zbiōr..."
319
+MissingFiles.SelectDir="Ôbier folder do przeszukanio"
320
+MissingFiles.State="Sztatus"
321
+MissingFiles.Missing="Brakujōncy"
322
+MissingFiles.Replaced="Zastōmpiōny"
323
+MissingFiles.Cleared="Wyciepniynty"
324
+MissingFiles.Found="Znodniynty"
325
+MissingFiles.AutoSearch="Znodniynte inksze napasowanie zbiorōw"
326
+MissingFiles.AutoSearchText="OBS znod inksze napasowania zbiorōw, kerych brak w tym katalogu. Chcesz jy przidać?"
327
+UpdateAvailable="Nowo aktualizacyjo je dostympno"
328
+UpdateAvailable.Text="Wersyjo %1.%2.%3 je dostympno. <a href='%4'>Kliknij tukej coby pobrać</a>"
329
+Basic.DesktopDevice1="Maszina audio"
330
+Basic.DesktopDevice2="Maszina audio 2"
331
+Basic.AuxDevice1="Mikrofōn/Wchōd linijowy"
332
+Basic.AuxDevice2="Mikrofōn/Wchōd linijowy 2"
333
+Basic.AuxDevice3="Mikrofōn/Wchōd linijowy 3"
334
+Basic.AuxDevice4="Mikrofōn/Wchōd linijowy 4"
335
+Basic.Scene="Bina"
336
+Basic.DisplayCapture="Przechytywanie ekranu"
337
+Basic.Main.PreviewConextMenu.Enable="Włōncz podglōnd"
338
+Basic.Main.Preview.Disable="Wyłōncz podglōnd"
339
+ScaleFiltering="Filtrowanie skalowanio"
340
+ScaleFiltering.Point="Pōnktowe"
341
+ScaleFiltering.Bilinear="Dwulinijowe"
342
+ScaleFiltering.Bicubic="Dwusześciynne"
343
+ScaleFiltering.Area="Przestrzyństwo"
344
+Deinterlacing="Wyciepowanie przeplotu"
345
+Deinterlacing.Discard="Ôdciep"
346
+Deinterlacing.Blend="Wtapianie"
347
+Deinterlacing.Blend2x="Wtapianie 2x"
348
+Deinterlacing.Linear="Linijowe"
349
+Deinterlacing.Linear2x="Linijowe 2x"
350
+Deinterlacing.TopFieldFirst="Nojprzōd pole wiyrchnie"
351
+Deinterlacing.BottomFieldFirst="Nojprzōd pole spodnie"
352
+VolControl.SliderUnmuted="Szalter głośności dlo '%1':"
353
+VolControl.SliderMuted="Szalter głośności dlo %1': (teroźnie wyciszōny)"
354
+VolControl.Mute="Wycisz '%1'"
355
+VolControl.Properties="Włosności dlo '%1'"
356
+Basic.Main.AddSceneDlg.Title="Przidej bina"
357
+Basic.Main.AddSceneDlg.Text="Podej miano biny"
358
+Basic.Main.DefaultSceneName.Text="Bina %1"
359
+Basic.Main.AddSceneCollection.Title="Przidej zbiōr bin"
360
+Basic.Main.RenameSceneCollection.Title="Zmiyń miano zbioru bin"
361
+AddProfile.Title="Przidej profil"
362
+AddProfile.Text="Podej miano profilu"
363
+RenameProfile.Title="Zmiyń miano profilu"
364
+Basic.Main.MixerRename.Title="Zmiana miana zdrzōdła klangu"
365
+Basic.Main.PreviewDisabled="Podglōnd je niyaktywny"
366
+Basic.SourceSelect="Stwōrz/Ôbier zdrzōdło"
367
+Basic.SourceSelect.CreateNew="Stwōrz nowo"
368
+Basic.SourceSelect.AddExisting="Przidej istniyjōnco"
369
+Basic.SourceSelect.AddVisible="Zdrzōdło widzialne"
370
+Basic.Main.Sources.Visibility="Widzialność"
371
+Basic.Main.Sources.Lock="Szpera"
372
+Basic.PropertiesWindow="Włosności dlo '%1'"
373
+Basic.PropertiesWindow.AutoSelectFormat="%1 (ôbiōr autōmatyczny: %2)"
374
+Basic.PropertiesWindow.SelectColor="Ôbier farba"
375
+Basic.PropertiesWindow.SelectFont="Ôbier pismo"
376
+Basic.PropertiesWindow.ConfirmTitle="Ôpcyje zmiyniōne"
377
+Basic.PropertiesWindow.Confirm="Mosz niyzapisane zmiany. Chcesz jy zachować?"
378
+Basic.PropertiesWindow.NoProperties="Brak włosności"
379
+Basic.PropertiesWindow.AddFiles="Przidej zbiory"
380
+Basic.PropertiesWindow.AddDir="Przidej folder"
381
+Basic.PropertiesWindow.AddURL="Przidej ściyżka/adresa URL"
382
+Basic.PropertiesWindow.AddEditableListDir="Przidej folder do '%1'"
383
+Basic.PropertiesWindow.AddEditableListFiles="Przidej zbiory do '%1'"
384
+Basic.PropertiesWindow.AddEditableListEntry="Przidej wpis do '%1'"
385
+Basic.PropertiesWindow.EditEditableListEntry="Edytuj wpis we '%1'"
386
+Basic.PropertiesView.FPS.Simple="Ajnfachowe wartości FPS"
387
+Basic.PropertiesView.FPS.Rational="Ułōmkowe wartości FPS"
388
+Basic.PropertiesView.FPS.ValidFPSRanges="Noleżne zakrysy FPS:"
389
+Basic.PropertiesView.UrlButton.Text="Ôtworzić tyn link we internetowyj przeziyroczce?"
390
+Basic.PropertiesView.UrlButton.OpenUrl="Ôtwōrz URL"
391
+Basic.InteractionWindow="Interakcyjo ze '%1'"
392
+Basic.StatusBar.Delay="Ôpōźniynie (%1 s)"
393
+Basic.StatusBar.DelayStartingIn="Ôpōźniynie (sztart za %1 s)"
394
+Basic.StatusBar.DelayStoppingIn="Ôpōźniynie (sztop za %1 s)"
395
+Basic.StatusBar.DelayStartingStoppingIn="Ôpōźniynie (sztop za %1 s, sztart za %2 s)"
396
+Basic.StatusBar.RecordingSavedTo="Nagranie zapisane we '%1'"
397
+Basic.StatusBar.ReplayBufferSavedTo="Bufōr powtōrki zapisany we '%1'"
398
+Basic.StatusBar.ScreenshotSavedTo="Screenshot zapisany we '%1'"
399
+Basic.Filters="Filtry"
400
+Basic.Filters.AsyncFilters="Filtry audio/wideo"
401
+Basic.Filters.AudioFilters="Filtry audio"
402
+Basic.Filters.EffectFilters="Filtry efektōw"
403
+Basic.Filters.Title="Filtry dlo '%1'"
404
+Basic.Filters.AddFilter.Title="Miano filtra"
405
+Basic.Filters.AddFilter.Text="Wpisz miano filtra"
406
+Basic.TransformWindow="Przekształcanie elymyntu biny"
407
+Basic.TransformWindow.Position="Pozycyjo"
408
+Basic.TransformWindow.PositionX="Pozycyjo X"
409
+Basic.TransformWindow.PositionY="Pozycyjo Y"
410
+Basic.TransformWindow.Rotation="Rotacyjo"
411
+Basic.TransformWindow.Size="Miara"
412
+Basic.TransformWindow.Width="Szyrokość"
413
+Basic.TransformWindow.Height="Wysokość"
414
+Basic.TransformWindow.Alignment="Wyrōwnanie"
415
+Basic.TransformWindow.BoundsType="Zorta ukrōcynio"
416
+Basic.TransformWindow.BoundsAlignment="Wyrōwnanie we ôbwiedni"
417
+Basic.TransformWindow.Bounds="Miara ôbwiedni"
418
+Basic.TransformWindow.BoundsWidth="Szyrokość ôbwiedni"
419
+Basic.TransformWindow.BoundsHeight="Wysokość ôbwiedni"
420
+Basic.TransformWindow.Crop="Przicinanie"
421
+Basic.TransformWindow.CropLeft="Przitnij ôd lewyj"
422
+Basic.TransformWindow.CropRight="Przitnij ôd prawyj"
423
+Basic.TransformWindow.CropTop="Przitnij ôd wiyrchni"
424
+Basic.TransformWindow.CropBottom="Przitnij ôd spodka"
425
+Basic.TransformWindow.Alignment.TopLeft="Lewy/wiyrchni"
426
+Basic.TransformWindow.Alignment.TopCenter="Postrzodek/wiyrchni"
427
+Basic.TransformWindow.Alignment.TopRight="Prawy/wiyrchni"
428
+Basic.TransformWindow.Alignment.CenterLeft="Lewy/postrzodek"
429
+Basic.TransformWindow.Alignment.Center="Wypostrzodkuj"
430
+Basic.TransformWindow.Alignment.CenterRight="Prawy/postrzodek"
431
+Basic.TransformWindow.Alignment.BottomLeft="Lewy/spodni"
432
+Basic.TransformWindow.Alignment.BottomCenter="Postrzodek/spodni"
433
+Basic.TransformWindow.Alignment.BottomRight="Prawy/spodni"
434
+Basic.TransformWindow.BoundsType.None="Brak ôbwiedni"
435
+Basic.TransformWindow.BoundsType.MaxOnly="Ino maksymalno miara"
436
+Basic.TransformWindow.BoundsType.ScaleInner="Skaluj do granic wnyntrznych"
437
+Basic.TransformWindow.BoundsType.ScaleOuter="Skaluj do granic zewnyntrznych"
438
+Basic.TransformWindow.BoundsType.ScaleToWidth="Skaluj do dugości granic"
439
+Basic.TransformWindow.BoundsType.ScaleToHeight="Skaluj do wysokości granic"
440
+Basic.TransformWindow.BoundsType.Stretch="Rozciōngnij do granic"
441
+Basic.Main.AddSourceHelp.Title="Niy idzie przidać zdrzōdła"
442
+Basic.Main.AddSourceHelp.Text="Wymogano je chocioż jedna bina, coby przidać zdrzōdło."
443
+Basic.Main.Scenes="Biny"
444
+Basic.Main.Sources="Zdrzōdła ôbrazu"
445
+Basic.Main.Source="Zdrzōdło"
446
+Basic.Main.Controls="Panel kerujōncy"
447
+Basic.Main.Connecting="Łōnczynie..."
448
+Basic.Main.StartRecording="Sztartnij nagrowanie"
449
+Basic.Main.StartReplayBuffer="Sztartnij nagrowanie powtōrek"
450
+Basic.Main.SaveReplay="Zapisz powtōrka"
451
+Basic.Main.StartStreaming="Sztartnij stream"
452
+Basic.Main.StartVirtualCam="Sztartnij Wirtualno Kamera"
453
+Basic.Main.StopRecording="Zasztopuj nagrowanie"
454
+Basic.Main.PauseRecording="Pauzuj nagrowanie"
455
+Basic.Main.UnpauseRecording="Znōw nagrowanie"
456
+Basic.Main.StoppingRecording="Sztopowanie nagrowanio..."
457
+Basic.Main.StopReplayBuffer="Sztopuj nagrowanie powtōrek"
458
+Basic.Main.StoppingReplayBuffer="Sztopuja nagrowanie powtōrek..."
459
+Basic.Main.StopStreaming="Zakōńcz stream"
460
+Basic.Main.StoppingStreaming="Kōńcza streamowanie..."
461
+Basic.Main.ForceStopStreaming="Kōńcz stream (pociep ôpōźniynie)"
462
+Basic.Main.Group="Skupina %1"
463
+Basic.Main.Ungroup="Rozgrupuj"
464
+Basic.Main.GridMode="Widok necu"
465
+Basic.Main.ListMode="Widok wykozu"
466
+Basic.MainMenu.File="Zbiōr (&F)"
467
+Basic.MainMenu.File.Export="&Eksport"
468
+Basic.MainMenu.File.Settings="&Ôpcyje"
469
+Basic.MainMenu.File.Exit="Zakōńcz (&X)"
470
+Basic.MainMenu.Edit="&Edycyjo"
471
+Basic.MainMenu.Edit.Undo="&Cofej"
472
+Basic.MainMenu.Edit.Redo="&Wrōć"
473
+Basic.MainMenu.Edit.UndoAction="&Cofej $1"
474
+Basic.MainMenu.Edit.RedoAction="&Wrōć $1"
475
+Basic.MainMenu.Edit.LockPreview="&Zaszperuj podglōnd"
476
+Basic.MainMenu.Edit.Scale.Canvas="Cwelich (%1x%2)"
477
+Basic.MainMenu.Edit.Scale.Output="Wyjście (%1x%2)"
478
+Basic.MainMenu.Edit.Transform="Przeksz&tałcanie ôbrazu"
479
+Basic.MainMenu.Edit.Transform.EditTransform="&Edycyjo przekształcyń..."
480
+Basic.MainMenu.Edit.Transform.CopyTransform="Skopiyruj transformacyje"
481
+Basic.MainMenu.Edit.Transform.PasteTransform="Wkludź transformacyje"
482
+Basic.MainMenu.Edit.Transform.ResetTransform="&Reset przekształcyń"
483
+Basic.MainMenu.Edit.Transform.Rotate90CW="Ôbrōć ô 90 stopiyni zgodnie z ruchym skozōwek zygora"
484
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Ôbrōć ô 90 stopiyni przeciwnie do ruchu skozōwek zygora"
485
+Basic.MainMenu.Edit.Transform.Rotate180="Ôbrōć ô 180 stopiyni"
486
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Przeciep w poziōmie (&H)"
487
+Basic.MainMenu.Edit.Transform.FlipVertical="Przeciep w piōnie (&V)"
488
+Basic.MainMenu.Edit.Transform.FitToScreen="Napasuj do ekranu (&F)"
489
+Basic.MainMenu.Edit.Transform.StretchToScreen="Rozciōngnij do ekranu (&S)"
490
+Basic.MainMenu.Edit.Transform.CenterToScreen="Wypostrzodkuj na ekranie (&C)"
491
+Basic.MainMenu.Edit.Transform.VerticalCenter="Wypostrzodkuj w piōnie"
492
+Basic.MainMenu.Edit.Transform.HorizontalCenter="Wypostrzodkuj w poziōmie"
493
+Basic.MainMenu.Edit.Order="&Porzōndek"
494
+Basic.MainMenu.Edit.Order.MoveUp="Przeniyś na &wiyrch"
495
+Basic.MainMenu.Edit.Order.MoveDown="Przeniyś na &spodek"
496
+Basic.MainMenu.Edit.Order.MoveToTop="Przeniyś na &wiyrch"
497
+Basic.MainMenu.Edit.Order.MoveToBottom="Przeniyś na &spodek"
498
+Basic.MainMenu.Edit.AdvAudio="&Zaawansowane ôpcyje klangu"
499
+Basic.MainMenu.View="&Widok"
500
+Basic.MainMenu.View.Toolbars="Paski noczyń (&T)"
501
+Basic.MainMenu.View.Docks="Panele"
502
+Basic.MainMenu.View.Docks.ResetUI="Resetuj interfejs"
503
+Basic.MainMenu.View.Docks.LockUI="Zaszperuj interfejs"
504
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Panele przeziyroczki..."
505
+Basic.MainMenu.View.ListboxToolbars="Knefle pod wykazym bin / zdrzōdeł ôbrazu"
506
+Basic.MainMenu.View.ContextBar="Pasek noczyniowy zdrzōdła"
507
+Basic.MainMenu.View.SceneTransitions="Efekty przejś&cio bin"
508
+Basic.MainMenu.View.SourceIcons="&Ikōny zdrzōdłowe"
509
+Basic.MainMenu.View.StatusBar="Pasek &statusu"
510
+Basic.MainMenu.View.Fullscreen.Interface="Połnoekranowy interfejs"
511
+Basic.MainMenu.SceneCollection="Zbiōr &bin"
512
+Basic.MainMenu.Profile="&Profil"
513
+Basic.MainMenu.Profile.Import="Importuj profil"
514
+Basic.MainMenu.Profile.Export="Eksportuj profil"
515
+Basic.MainMenu.SceneCollection.Import="Importuj kolekcyje biny"
516
+Basic.MainMenu.SceneCollection.Export="Eksportuj kolekcyjo bin"
517
+Basic.MainMenu.Profile.Exists="Profil już istniyje"
518
+Basic.MainMenu.SceneCollection.Exists="Kolekcyjo biny już istniyje"
519
+Basic.MainMenu.Tools="Noczynia (&T)"
520
+Basic.MainMenu.Help="Pōmoc (&H)"
521
+Basic.MainMenu.Help.HelpPortal="&Portal pōmocy"
522
+Basic.MainMenu.Help.Website="Ôbejzdrzij nasza zajta"
523
+Basic.MainMenu.Help.Discord="Prziwstōń do serwera &Discord"
524
+Basic.MainMenu.Help.Logs="Z&biory dziynnika"
525
+Basic.MainMenu.Help.Logs.ShowLogs="Pokoż zbiory dziynnika (&s)"
526
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Wyślij teroźny zbiōr dziynnika (&C)"
527
+Basic.MainMenu.Help.Logs.UploadLastLog="Wyś&lij ôstatni zbiōr dziynnika"
528
+Basic.MainMenu.Help.Logs.ViewCurrentLog="Podglōnd aktywnego zbioru dziynnika (&V)"
529
+Basic.MainMenu.Help.CheckForUpdates="Zobocz czy sōm aktualizacyje"
530
+Basic.MainMenu.Help.CrashLogs="&Reporty ô awaryjach"
531
+Basic.MainMenu.Help.CrashLogs.ShowLogs="Pokoż reporty ô awaryjach (&S)"
532
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Wyś&lij ôstatni report ô awaryjach"
533
+Basic.MainMenu.Help.About="&Info ô programie"
534
+Basic.Settings.ProgramRestart="Coby te ustawiynia zaczły ôbowiōnzować, trza resztartnōńć program."
535
+Basic.Settings.ConfirmTitle="Potwiyrdź zmiany"
536
+Basic.Settings.Confirm="Mosz niyzapisane zmiany. Chcesz jy zapisać?"
537
+Basic.Settings.General="Bazowe"
538
+Basic.Settings.General.Theme="Motyw"
539
+Basic.Settings.General.Language="Godka"
540
+Basic.Settings.General.EnableAutoUpdates="Autōmatycznie wybaduj dostympność aktualizacyji"
541
+Basic.Settings.General.OpenStatsOnStartup="Ôtwōrz sztatystyki przi sztarcie aplikacyje"
542
+Basic.Settings.General.Projectors="Projektory"
543
+Basic.Settings.General.HideProjectorCursor="Skryj kursōr podglōndu na połnym ekranie"
544
+Basic.Settings.General.ProjectorAlwaysOnTop="Podglōnd na połnym ekranie dycki na wiyrchu"
545
+Basic.Settings.General.SnapDistance="Czułość prziciōnganio"
546
+Basic.Settings.General.KeepRecordingWhenStreamStops="Zachowej nagranie po zasztopowaniu streamu"
547
+Basic.Settings.General.SysTray="Zasobnik systymowy"
548
+Basic.Settings.General.SysTrayWhenStarted="Minimalizuj do zasobnika systymowego w czasie sztartowanio"
549
+Basic.Settings.General.SaveProjectors="Zapisz projektory przi wyjściu"
550
+Basic.Settings.General.Preview="Podglōnd"
551
+Basic.Settings.General.OverflowHidden="Skryj przepełniynie"
552
+Basic.Settings.General.OverflowAlwaysVisible="Przepełniynie dycki widzialne"
553
+Basic.Settings.General.Importers="Importowanie"
554
+Basic.Settings.General.StudioPortraitLayout="Włōncz ukłod piōnowy"
555
+Basic.Settings.General.TogglePreviewProgramLabels="Pokoż etykety podglōndu/programu"
556
+Basic.Settings.General.Multiview.DrawSourceNames="Pokoż miana bin"
557
+Basic.Settings.General.Multiview.DrawSafeAreas="Rysowanie bezpiycznych przestrzyństw (EBU R 95)"
558
+Basic.Settings.General.MultiviewLayout="Ukłod Multiview"
559
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="Poziōmo, Wiyrch (8 bin)"
560
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Poziōmo, Spodek (8 bin)"
561
+Basic.Settings.General.MultiviewLayout.Vertical.Left="Piōnowo, Lewo (8 bin)"
562
+Basic.Settings.General.MultiviewLayout.Vertical.Right="Piōnowo, Prawo (8 bin)"
563
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Poziōmo, Wiyrch (18 bin)"
564
+Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Poziōmo, Wiyrch (24 biny)"
565
+Basic.Settings.Stream.StreamType="Zorta streamu"
566
+Basic.Settings.Stream.Custom.UseAuthentication="Użyj uwierzitelnianio"
567
+Basic.Settings.Stream.Custom.Username="Miano używocza"
568
+Basic.Settings.Stream.Custom.Password="Hasło"
569
+Basic.Settings.Stream.BandwidthTestMode="Włōncz tryb testu przepustowości"
570
+Basic.Settings.Stream.TTVAddon="Przidowki czata Twitch"
571
+Basic.Settings.Stream.TTVAddon.None="Brak"
572
+Basic.Settings.Stream.TTVAddon.Both="BetterTTV i FrankerFaceZ"
573
+Basic.Settings.Stream.MissingSettingAlert="Brak kōnfiguracyje streamu"
574
+Basic.Settings.Stream.StreamSettingsWarning="Ôtwōrz Ôpcyje"
575
+Basic.Settings.Stream.IgnoreRecommended.Warn.Title="Nadpisz rekōmandowane ustawiynia"
576
+Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maksymalny bitrate: %1 kbps"
577
+Basic.Settings.Stream.Recommended.MaxResolution="Maksymalno rozdzielczość: %1"
578
+Basic.Settings.Stream.Recommended.MaxFPS="Maksymalno wielość FPS: %1"
579
+Basic.Settings.Output="Wyjście"
580
+Basic.Settings.Output.Format="Format nagrowanio"
581
+Basic.Settings.Output.Encoder="Enkoder"
582
+Basic.Settings.Output.SelectFile="Ôbier zbiōr nagranio"
583
+Basic.Settings.Output.Mode="Tryb wyjścio"
584
+Basic.Settings.Output.Mode.Simple="Ajnfachowe"
585
+Basic.Settings.Output.Mode.Adv="Zaawansowane"
586
+Basic.Settings.Output.Mode.FFmpeg="Wyjście FFmpeg"
587
+Basic.Settings.Output.UseReplayBuffer="Włōncz nagrowanie powtōrek"
588
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Maksymalny czas nagranio"
589
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maksymalno wielość spamiyńci (w megabajtach)"
590
+Basic.Settings.Output.ReplayBuffer.Estimate="Szacowane użycie spamiyńci: %1 MB"
591
+Basic.Settings.Output.ReplayBuffer.Suffix="Sufiks"
592
+Basic.Settings.Output.Simple.SavePath="Ściyżka zbioru"
593
+Basic.Settings.Output.Simple.RecordingQuality="Jakość nagrowanio"
594
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Idyntycznie jak stream"
595
+Basic.Settings.Output.Simple.RecordingQuality.Small="Wysoko jakość a strzednio woga zbioru"
596
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Jakość niy do ôdrōżniynio, srogo woga zbioru"
597
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Ôstrzeżynie ô bezstratnyj jakości!"
598
+Basic.Settings.Output.Simple.Encoder.Software="Programowy (x264)"
599
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Sprzyntowy (QSV)"
600
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Sprzyntowy (AMD)"
601
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Sprzyntowy (NVENC)"
602
+Basic.Settings.Output.Warn.EnforceResolutionFPS.Resolution="Rozdzielczość: %1"
603
+Basic.Settings.Output.VideoBitrate="Bitrate ôbrazu"
604
+Basic.Settings.Output.AudioBitrate="Bitrate klangu"
605
+Basic.Settings.Output.Reconnect="Pōnowne łōnczynie"
606
+Basic.Settings.Output.RetryDelay="Prōbuj połōnczyć co"
607
+Basic.Settings.Output.MaxRetries="Maksymalno wielość pōnownych prōb"
608
+Basic.Settings.Output.EncoderPreset="Ôpcyje enkodera"
609
+Basic.Settings.Output.CustomEncoderSettings="Niysztandardowe ôpcyje enkodera"
610
+Basic.Settings.Output.CustomMuxerSettings="Włosne ôpcyje muxera"
611
+Basic.Settings.Output.NoSpaceFileName="Gyneruj miano zbioru beze spacyje"
612
+Basic.Settings.Output.Adv.Rescale="Przeskaluj wychodowy ôbroz"
613
+Basic.Settings.Output.Adv.AudioTrack="Ściyżki klangowe"
614
+Basic.Settings.Output.Adv.Audio.Track1="Ściyżka 1"
615
+Basic.Settings.Output.Adv.Audio.Track2="Ściyżka 2"
616
+Basic.Settings.Output.Adv.Audio.Track3="Ściyżka 3"
617
+Basic.Settings.Output.Adv.Audio.Track4="Ściyżka 4"
618
+Basic.Settings.Output.Adv.Audio.Track5="Ściyżka 5"
619
+Basic.Settings.Output.Adv.Audio.Track6="Ściyżka 6"
620
+Basic.Settings.Output.Adv.TwitchVodTrack="Ściyżka Twitch VOD"
621
+Basic.Settings.Output.Adv.Recording="Nagrowanie"
622
+Basic.Settings.Output.Adv.Recording.RecType="Zorta nagranio"
623
+Basic.Settings.Output.Adv.Recording.Type="Zorta"
624
+Basic.Settings.Output.Adv.Recording.Type.Standard="Sztandardowe"
625
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Niysztandardowe ustawiynia (FFmpeg)"
626
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Użyj enkodera streamu)"
627
+Basic.Settings.Output.Adv.Recording.Filename="Format miana zbioru"
628
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Nadpisz istniyjōncy zbiōr"
629
+Basic.Settings.Output.Adv.FFmpeg.Type="Tryb wyjścio FFmpeg"
630
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Wyjście do adresy URL"
631
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Wyjście do zbioru"
632
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Popularne formaty zbiorōw nagrań"
633
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Wszyjske Zbiory"
634
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Ściyżka abo adresa URL"
635
+Basic.Settings.Output.Adv.FFmpeg.Format="Format zbioru kōntynyra"
636
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Klang"
637
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Ôbroz"
638
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Format sztandardowy"
639
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Ôpis formatu zbioru kōntynyra"
640
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Kodeki klangu i ôbrazu ôdczytane ze zbioru abo adresy URL"
641
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Sztandardowy enkoder"
642
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Niyaktywny enkoder"
643
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Enkoder ôbrazu"
644
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Ôpcyje enkodera wideo (jeźli sōm)"
645
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Enkoder klangu"
646
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Ôpcyje enkodera audio (jeźli sōm)"
647
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Ôpcyje muxera (jeźli sōm)"
648
+Screenshot="Ściepniyńcie ekranu - ekran wychodowy"
649
+Screenshot.SourceHotkey="Ściepniyńcie ekranu - ôbrane zdrzōdło"
650
+Screenshot.StudioProgram="Ściepniyńcie ekranu (program)"
651
+Screenshot.Preview="Ściepniyńcie ekranu (podglōnd)"
652
+Screenshot.Scene="Ściepniyńcie ekranu (bina)"
653
+Screenshot.Source="Ściepniyńcie ekranu (zdrzōdło)"
654
+FilenameFormatting.TT="%CCYY   Rok, sztyry cyfry\n%YY      Rok, dwie ôstatnie cyfry (00-99)\n%MM       Miesiōnc numerym dziesiyntnym (01-12)\n%DD      Dziyń, z nulym przed 1-9 (01-31)\n%hh       Godzina we formacie 24 godzinnym (00-23)\n%mm       Minuta (00-59)\n%ss     Sekōnda (00-61)\n%%     % znak\n%a      Ukrōcōne miano dnia tydnia\n%A      Połne miano dnia tydnia\n%b     Ukrōcōne miano dnia miesiōnca\n%B       Połne miano dnia miesiōnca\n%d      Dziyń, z nulym przed 1-9 (01-31)\n%H        Godzina we formacie 24 godzinnym (00-23)\n%I        Godzina we formacie 12 godzinnym (01-12)\n%m        Miesiōnc numerym dziesiyntnym (01-12)\n%M       Minuta (00-59)\n%p      Ôkryślynie AM abo PM \n%S       Sekōnda (00-61)\n%y     Rok, dwie ôstatnie cyfry (00-99)\n%Y        Rok\n%z     Cofniyńcie ISO 8601 wzglyndym czasowyj cōuny UTCj\n%Z       Miano abo skrōt ôd czasowyj cōuny\n%FPS     Rōmek na sekōnda\n%CRES     Rozdzielczość bazy aza(kanwy)\n%ORES        Rozdzielczość wychodowo (skalowano)\n%VF        Format wideo"
655
+Basic.Settings.Video="Ôbroz"
656
+Basic.Settings.Video.Adapter="Szkarta graficzno"
657
+Basic.Settings.Video.BaseResolution="Bazowo rozdzielczość (ôbroz)"
658
+Basic.Settings.Video.DownscaleFilter="Filtr skalujōncy"
659
+Basic.Settings.Video.DisableAeroWindows="Wyłōncz Aero (ino Windows)"
660
+Basic.Settings.Video.FPSCommon="Ajnfachowe wartości FPS"
661
+Basic.Settings.Video.FPSInteger="Cołke wartości FPS"
662
+Basic.Settings.Video.FPSFraction="Ułōmkowe wartości FPS"
663
+Basic.Settings.Video.Numerator="Rachownik"
664
+Basic.Settings.Video.Denominator="Mianownik"
665
+Basic.Settings.Video.Renderer="Renderowanie"
666
+Basic.Settings.Video.DisableAero="Zastow Aero"
667
+Basic.Settings.Video.DownscaleFilter.Bilinear="Dwulinijowy (Nojgibszy, nale rozmyty jeźli skalowany)"
668
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Ôstrzyjsze skalowanie, 16 prōbek)"
669
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Ôstrzyjsze skalowanie, 36 prōbki)"
670
+Basic.Settings.Audio="Klang"
671
+Basic.Settings.Audio.SampleRate="Frekwyncyjo prōbkowanio"
672
+Basic.Settings.Audio.Channels="Kanały"
673
+Basic.Settings.Audio.Meters="Rachowniki"
674
+Basic.Settings.Audio.MeterDecayRate="Czas zanikanio"
675
+Basic.Settings.Audio.MeterDecayRate.Fast="Gibko"
676
+Basic.Settings.Audio.MeterDecayRate.Medium="Strzednio (PPM zorty I)"
677
+Basic.Settings.Audio.MeterDecayRate.Slow="Poleku (PPM zorty II)"
678
+Basic.Settings.Audio.PeakMeterType.SamplePeak="Poziōm szpicowy prōbkowany"
679
+Basic.Settings.Audio.PeakMeterType.TruePeak="Prawo szpica (wiynksze użycie CPU)"
680
+Basic.Settings.Audio.MultiChannelWarning.Enabled="Pozōr: Przestrzynny klang je włōnczōny."
681
+Basic.Settings.Audio.MultichannelWarning.Title="Włōnczyć przestrzynny klang?"
682
+Basic.Settings.Audio.DesktopDevice="Maszina audio"
683
+Basic.Settings.Audio.DesktopDevice2="Maszina audio 2"
684
+Basic.Settings.Audio.AuxDevice="Mikrofōn/ekstra maszina audio"
685
+Basic.Settings.Audio.AuxDevice2="Mikrofōn/ekstra maszina audio 2"
686
+Basic.Settings.Audio.AuxDevice3="Mikrofōn/ekstra maszina audio 3"
687
+Basic.Settings.Audio.AuxDevice4="Mikrofōn/ekstra maszina audio 4"
688
+Basic.Settings.Audio.PushToMuteDelay="Ôpōźniynie \"naciś-coby-wyciszyć\""
689
+Basic.Settings.Audio.EnablePushToTalk="Włōncz \"naciś-coby-godać\""
690
+Basic.Settings.Audio.PushToTalkDelay="Ôpōźniynie \"naciś-coby-godać\""
691
+Basic.Settings.Audio.UnknownAudioDevice="[Maszina niydostympno abo niypodłōnczōno]"
692
+Basic.Settings.Audio.Disabled="Wyłōnczōne"
693
+Basic.Settings.Advanced="Zaawansowane"
694
+Basic.Settings.Advanced.General.ProcessPriority="Priorytet procesu"
695
+Basic.Settings.Advanced.General.ProcessPriority.High="Wysoki"
696
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Powyżyj normalnego"
697
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normalny"
698
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Pōniżyj normalnego"
699
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Bezczynny"
700
+Basic.Settings.Advanced.Audio.BufferingTime="Czas buforowanio klangu"
701
+Basic.Settings.Advanced.Video.ColorFormat="Format farby"
702
+Basic.Settings.Advanced.Video.ColorSpace="Przestrzyństwo farb"
703
+Basic.Settings.Advanced.Video.ColorRange="Zakrys farb"
704
+Basic.Settings.Advanced.Video.ColorRange.Partial="Niyblank"
705
+Basic.Settings.Advanced.Video.ColorRange.Full="Połny"
706
+Basic.Settings.Advanced.Audio.MonitoringDevice="Maszina do mōnitorowanio audio"
707
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Sztandardowe"
708
+Basic.Settings.Advanced.StreamDelay="Ôpōźniynie streamu"
709
+Basic.Settings.Advanced.StreamDelay.Duration="Ôpōźniynie"
710
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Szacowane użycie spamiyńci: %1 MB"
711
+Basic.Settings.Advanced.Network="Nec"
712
+Basic.Settings.Advanced.Network.BindToIP="Przipisane IP"
713
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Włōncz necowe ôptymalizacyje"
714
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Włōncz regulacyjo tympa TCP"
715
+Basic.Settings.Advanced.AutoRemux="Autōmatyczny remux do mp4"
716
+Basic.Settings.Advanced.AutoRemux.MP4="(nagrowej jako mkv)"
717
+Basic.AdvAudio.ActiveOnly="Ino aktywne zdrzōdła"
718
+Basic.AdvAudio.Name="Miano"
719
+Basic.AdvAudio.Volume="Głośność"
720
+Basic.AdvAudio.VolumeSource="Głośność dlo '%1'"
721
+Basic.AdvAudio.MonoSource="Miks do mono dlo '%1'"
722
+Basic.AdvAudio.Balance="Balans"
723
+Basic.AdvAudio.BalanceSource="Balans dlo '%1'"
724
+Basic.AdvAudio.SyncOffset="Cofniyńcie klangu"
725
+Basic.AdvAudio.SyncOffsetSource="Cofniyńcie synchrōnizacyje dlo '%1'"
726
+Basic.AdvAudio.Monitoring="Mōnitorowanie audio"
727
+Basic.AdvAudio.Monitoring.None="Wyłōnczōne"
728
+Basic.AdvAudio.Monitoring.MonitorOnly="Ino mōnitorowanie (wyjście wyłōnczōne)"
729
+Basic.AdvAudio.Monitoring.Both="Mōnitorowanie i przekazowanie na wyjście"
730
+Basic.AdvAudio.MonitoringSource="Mōnitorowanie klangu dlo '%1'"
731
+Basic.AdvAudio.AudioTracks="Ściyżki"
732
+Basic.Settings.Hotkeys="Skrōty kneflowe"
733
+Basic.Settings.Hotkeys.Pair="Kōmbinacyje knefli spōlne ze '%1' fungujōm za szaltry"
734
+Basic.Settings.Hotkeys.Filter="Filtruj"
735
+Basic.Hotkeys.SelectScene="Przeszaltruj na bina"
736
+Basic.SystemTray.Show="Pokoż"
737
+Basic.SystemTray.Hide="Skryj"
738
+Basic.SystemTray.Message.Reconnecting="Rozłōnczōny. Łōncza zaś..."
739
+Hotkeys.Left="Fajlik w lewo"
740
+Hotkeys.Right="Fajlik w prawo"
741
+Hotkeys.Up="W gōra"
742
+Hotkeys.Down="W dōł"
743
+Hotkeys.Menu="Myni"
744
+Hotkeys.Space="Spacyjo"
745
+Hotkeys.NumpadMultiply="* (Numpad)"
746
+Hotkeys.NumpadDivide="/ (Numpad)"
747
+Hotkeys.NumpadAdd="+ (Numpad)"
748
+Hotkeys.NumpadSubtract="- (Numpad)"
749
+Hotkeys.NumpadDecimal=". (Numpad)"
750
+Hotkeys.MouseButton="Mysza %1"
751
+Mute="Wyciszynie"
752
+Unmute="Wyłōncz wyciszynie"
753
+Push-to-mute="Naciś-coby-wyciszyć"
754
+Push-to-talk="Naciś-coby-godać"
755
+SceneItemShow="Pokoż '%1'"
756
+SceneItemHide="Skryj '%1'"
757
+OutputWarnings.NoTracksSelected="Musisz ôbrać chocioż jedna ściyżka"
758
+FinalScene.Title="Wyciep bina"
759
+NoSources.Title="Brak zdrzōdeł"
760
+ChangeBG="Ustow farba"
761
+CustomColor="Niysztandardowo farba"
762
+About="Info ô programie"
763
+About.Info="OBS Studio to je darmowy program ze ôtwartym zdrzōdłym do nagrowanio i streamowania wideo."
764
+About.Donate="Dōnacyjo"
765
+About.GetInvolved="Spōmōż nos"
766
+About.Authors="Autory"
767
+About.License="Licyncyjo"
768
+About.Contribute="Spōmōż projekt OBS"
769
+AddUrl.Title="Przidej zdrzōdło z adresy URL"
770
+ResizeOutputSizeOfSource.Continue="Chcesz kōntynuować?"
771
+PreviewTransition="Podglōnd przejścio"
772
+Importer.Collection="Zbiōr bin"
773
+Importer.Path="Ściyżka kolekcyje"
774
+Importer.Program="Wykryto aplikacyjo"
775
+Restart="Resztart"
776
+NeedsRestart="Trza zaś sztartnōńć OBS Studio. Chcesz teroz resztartować?"
777
+ContextBar.NoSelectedSource="Brak zdrzōdła"
778
+ContextBar.ResetTransform="Reset przekształcyń"
779
+ContextBar.FitToCanvas="Napasuj do cwelichu"
780
+ContextBar.MediaControls.PlayMedia="Ôdtworzej"
781
+ContextBar.MediaControls.PauseMedia="Pauza"
782
+ContextBar.MediaControls.StopMedia="Zasztopej"
783
+ContextBar.MediaControls.RestartMedia="Resztart"
784
+ContextBar.MediaControls.PlaylistNext="Niyskorniyjszy na playliście"
785
+ContextBar.MediaControls.PlaylistPrevious="Piyrwyjszy na playliście"
786
+ContextBar.MediaControls.MediaProperties="Włosności zbioru"
787
+ContextBar.MediaControls.BlindSeek="Pasek postympu ôdtwŏrzanio"
788
+YouTube.Auth.WaitingAuth.Title="Autoryzacyjo używocza YouTube"
789
+YouTube.Actions.Title="Tytuł*"
790
+YouTube.Actions.MyBroadcast="Moja transmisyjo"
791
+YouTube.Actions.Description="Ôpis"
792
+YouTube.Actions.Privacy="Widzialność*"
793
+YouTube.Actions.Privacy.Private="Prywatny"
794
+YouTube.Actions.Privacy.Public="Publiczny"
795
+YouTube.Actions.Privacy.Unlisted="Niypubliczny"
796
+YouTube.Actions.Category="Kategoryjo"
797
+YouTube.Actions.MadeForKids="Je film przeznaczōny dlo bajtli?*"
798
+YouTube.Actions.MadeForKids.Yes="Ja, ôn je przeznaczōny dlo bajtli"
799
+YouTube.Actions.MadeForKids.No="Niy, ôn niy je przeznaczōny dlo bajtli"
800
+YouTube.Actions.AdditionalSettings="Ekstra ôpcyje:"
801
+YouTube.Actions.Latency="Ôpōźniynie"
802
+YouTube.Actions.Latency.Normal="Normalne"
803
+YouTube.Actions.Latency.Low="Niske"
804
+YouTube.Actions.Latency.UltraLow="Ultra niske"
805
+YouTube.Actions.EnableAutoStart="Włōncz auto-sztart"
806
+YouTube.Actions.EnableAutoStop="Włōncz auto-sztop"
807
+YouTube.Actions.EnableDVR="Włōncz DVR"
808
+YouTube.Actions.360Video="Wideo 360 stopiyni"
809
+YouTube.Actions.ScheduleForLater="Zaplanuj na niyskorzij"
810
+YouTube.Actions.EventCreated.Title="Trefiynie utworzōne"
811
+YouTube.Actions.EventCreated.Text="Trefiynie utworzōne"
812
+YouTube.Actions.AutoStopStreamingWarning="Niy bydziesz mōg sie zaś połōnczyć.<br>Twōj stream sie zasztopuje i niy bydziesz nadować."
813
obs-studio-27.0.1.tar.xz/UI/data/locale/th-TH.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/th-TH.ini Changed
190
 
1
@@ -73,6 +73,8 @@
2
 Defaults="ค่ามาตรฐาน"
3
 HideMixer="ซ่อนในมิกซ์เซอร์"
4
 TransitionOverride="แทนที่การสลับฉาก"
5
+ShowTransition="แสดงทรานซิชัน"
6
+HideTransition="ซ่อนทรานซิชัน"
7
 None="ไม่มี"
8
 StudioMode.Preview="แสดงตัวอย่าง"
9
 StudioMode.Program="โปรแกรม"
10
@@ -110,6 +112,7 @@
11
 Auth.InvalidScope.Text="ข้อกำหนดการตรวจสอบสิทธิ์สำหรับ %1 มีการเปลี่ยนแปลง, คุณสมบัติบางอย่างอาจไม่สามารถใช้งานได้."
12
 Auth.LoadingChannel.Title="กำลังโหลดรายละเอียดของช่อง..."
13
 Auth.LoadingChannel.Text="กำลังโหลดรายละเอียดของช่องสำหรับ %1, โปรดรอสักครู่..."
14
+Auth.LoadingChannel.Error="ไม่สามารถส่งข้อมูล channel ได้"
15
 Auth.ChannelFailure.Title="ไม่สามารถโหลดช่อง"
16
 Auth.ChannelFailure.Text="ไม่สามารถโหลดรายละเอียดของช่องสำหรับ %1\n\n%2: %3"
17
 Auth.Chat="ห้องสนทนา"
18
@@ -134,7 +137,9 @@
19
 Basic.AutoConfig.StartPage.SubTitle="ระบุสิ่งที่คุณต้องการใช้โปรแกรมสำหรับ"
20
 Basic.AutoConfig.StartPage.PrioritizeStreaming="เพิ่มประสิทธิภาพสำหรับการสตรีม บันทึกเป็นรอง"
21
 Basic.AutoConfig.StartPage.PrioritizeRecording="เพิ่มประสิทธิภาพสำหรับการบันทึก ฉันจะไม่สามารถส่งข้อมูล Steam"
22
+Basic.AutoConfig.StartPage.PrioritizeVirtualCam="ฉันจะใช้เพียงกล้องเสมือนจริงเท่านั้น"
23
 Basic.AutoConfig.VideoPage="กำหนดค่าวีดีโอ"
24
+Basic.AutoConfig.VideoPage.SubTitle="ระบุการตั้งค่าวีดีโอที่คุณต้องการใช้งาน"
25
 Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="ใช้ค่าปัจจุบัน (%1x%2)"
26
 Basic.AutoConfig.VideoPage.BaseResolution.Display="จอภาพ %1 (%2x%3)"
27
 Basic.AutoConfig.VideoPage.FPS.UseCurrent="ใช้ค่าปัจจุบัน (%1)"
28
@@ -150,20 +155,38 @@
29
 Basic.AutoConfig.StreamPage.GetStreamKey="รับรหัสสตรีม"
30
 Basic.AutoConfig.StreamPage.MoreInfo="ข้อมูลเพิ่มเติม"
31
 Basic.AutoConfig.StreamPage.UseStreamKey="ใช้รหัสสตรีม"
32
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="ใช้ Stream Key (ขั้นสูง)"
33
 Basic.AutoConfig.StreamPage.Service="บริการ"
34
 Basic.AutoConfig.StreamPage.Service.ShowAll="แสดงทั้งหมด..."
35
 Basic.AutoConfig.StreamPage.Service.Custom="กำหนดเอง..."
36
 Basic.AutoConfig.StreamPage.Server="เซิร์ฟเวอร์"
37
 Basic.AutoConfig.StreamPage.StreamKey="รหัสสตรีม"
38
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(เชื่อมโยง)"
39
+Basic.AutoConfig.StreamPage.EncoderKey="เข้ารหัสคีย์"
40
+Basic.AutoConfig.StreamPage.ConnectedAccount="บัญชีเชื่อมต่อแล้ว"
41
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="ทดสอบการประเมินค่าบิตเรตกับแบนด์วิดท์ (อาจใช้เวลาสักพัก)"
42
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="กำหนดการเข้ารหัสด้วยฮาร์ดแวร์"
43
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="การเข้ารหัสฮาร์ดแวร์ช่วยขจัดการใช้งานพื้นที่ส่วนใหญ่ของ CPU แต่อาจต้องใช้บิตเรตมากขึ้นเพื่อให้ได้คุณภาพในระดับเดียวกัน"
44
+Basic.AutoConfig.StreamPage.StreamWarning.Title="คำเตือนถ่ายทอดสด"
45
+Basic.AutoConfig.StreamPage.StreamWarning.Text="การทดสอบแบนด์วิดท์กำลังจะสตรีมข้อมูลวิดีโอแบบสุ่มโดยไม่มีเสียงไปยังช่องของคุณ หากทำได้ ขอแนะนำให้ปิดการบันทึกวิดีโอสตรีมชั่วคราวและตั้งค่าสตรีมเป็นแบบส่วนตัวจนกว่าการทดสอบจะเสร็จสิ้น ดำเนินการต่อหรือไม่?"
46
+Basic.AutoConfig.TestPage="ผลสรุป"
47
+Basic.AutoConfig.TestPage.SubTitle.Testing="ขณะนี้โปรแกรมกำลังดำเนินการทดสอบชุดหนึ่งเพื่อประเมินการตั้งค่าที่เหมาะสมที่สุด"
48
 Basic.AutoConfig.TestPage.SubTitle.Complete="การทดสอบเสร็จสมบูรณ์"
49
+Basic.AutoConfig.TestPage.TestingBandwidth="กำลังดำเนินการทดสอบแบนด์วิดท์ อาจใช้เวลาสักครู่..."
50
 Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="กำลังเชื่อมต่อไปยัง: %1"
51
 Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="ไม่สามารถเชื่อมต่อกับเซิร์ฟได้, โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณแล้วลองอีกครั้ง."
52
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="ทดสอบแบนด์วิดท์สำหรับ: %1"
53
+Basic.AutoConfig.TestPage.TestingStreamEncoder="กำลังทดสอบตัวลงรหัสสตรีม อาจใช้เวลาสักครู่..."
54
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="กำลังทดสอบการลงรหัสบันทึกเทป อาจใช้เวลาสักครู่..."
55
+Basic.AutoConfig.TestPage.TestingRes="กำลังทดสอบความละเอียด อาจใช้เวลาสักครู่..."
56
+Basic.AutoConfig.TestPage.TestingRes.Fail="เริ่มการทำงานลงรหัสผิดพลาด"
57
 Basic.AutoConfig.TestPage.TestingRes.Resolution="กำลังทดสอบที่ %1x%2 %3 FPS..."
58
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="ตัวลงรหัสสตรีมมิง"
59
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="ตัวลงรหัสบันทึกเทป"
60
+Basic.AutoConfig.TestPage.Result.Header="การประมาณการการตั้งค่าโดยโปรแกรมได้พิจารณาแล้วว่าสิ่งเหล่านี้เหมาะสำหรับคุณ:"
61
 Basic.Stats="สถานะ"
62
 Basic.Stats.CPUUsage="การใช้ CPU"
63
+Basic.Stats.HDDSpaceAvailable="มีพื้นที่ว่างในดิสก์"
64
 Basic.Stats.MemoryUsage="หน่วยความจำที่ใช้ไป"
65
 Basic.Stats.Output.Stream="สตรีม"
66
 Basic.Stats.Output.Recording="การบันทึก"
67
@@ -172,8 +195,10 @@
68
 Basic.Stats.Status.Live="ออกอากาศ"
69
 Basic.Stats.Status.Reconnecting="กำลังเชื่อมต่อใหม่"
70
 Basic.Stats.Status.Inactive="ไม่ใช้งาน"
71
+Basic.Stats.Status.Active="กำลังใช้งาน"
72
 Basic.Stats.Bitrate="บิตเรต"
73
 Basic.Stats.DiskFullIn="พื้นที่จัดเก็บเต็ม"
74
+ResetUIWarning.Title="คุณแน่ใจหรือไม่ว่าต้องการคืนค่า UI?"
75
 Updater.Title="มีการอัปเดตใหม่"
76
 Updater.Text="มีการอัปเดตใหม่:"
77
 Updater.UpdateNow="อัปเดตเดี๋ยวนี้"
78
@@ -190,6 +215,43 @@
79
 Basic.SceneTransitions="รูปแบบการสลับฉาก"
80
 Basic.TransitionDuration="ระยะเวลา"
81
 Basic.TogglePreviewProgramMode="โหมดสตูดิโอ"
82
+Undo.Undo="เลิกทำ"
83
+Undo.Redo="ทำซ้ำ"
84
+Undo.Add="เพิ่ม '%1'"
85
+Undo.Delete="ลบ '%1'"
86
+Undo.Rename="เปลี่ยนชื่อ '%1'"
87
+Undo.SceneCollection.Switch="เปลี่ยนเป็น '%1'"
88
+Undo.Item.Undo="ย้อนกลับ %1"
89
+Undo.Item.Redo="ทำใหม่ %1"
90
+Undo.Sources.Multi="ล้าง %1 ที่มา"
91
+Undo.Filters="เปลี่ยนฟิลเตอร์ %1"
92
+Undo.Filters.Paste.Single="วางฟิลเตอร์ %1 ถึง %2"
93
+Undo.Filters.Paste.Multiple="คัดลอกฟิลเตอร์จาก %1 ถึง %2"
94
+Undo.Transform="แปลงค่าแหล่งที่มา ใน %1"
95
+Undo.Transform.Paste="วางการแปลงค่า ใน %1"
96
+Undo.Transform.Rotate="การหมุน ใน %1"
97
+Undo.Transform.Reset="การแปลงค่ากลับค่าเดิม ใน %1"
98
+Undo.Transform.HFlip="พลิกแนวนอน %1"
99
+Undo.Transform.VFlip="พลิกแนวตั้ง%1"
100
+Undo.Transform.FitToScreen="พอดีจอ %1"
101
+Undo.Transform.StretchToScreen="ขยายเท่าจอ %1"
102
+Undo.Transform.Center="กึ่งกลางจอ %1"
103
+Undo.Transform.VCenter="กึ่งกลางแนวตั้งของจอ %1"
104
+Undo.Transform.HCenter="กึ่งกลางแนวนอนของจอ %1"
105
+Undo.Volume.Change="ปรับระดับเสียง %1"
106
+Undo.Volume.Mute="ปิดเสียง %1"
107
+Undo.Volume.Unmute="เปิดเสียง %1"
108
+Undo.Scene.Duplicate="คัดลอกฉาก %1"
109
+Undo.ShowTransition="แสดงทรานซิชัน %1"
110
+Undo.HideTransition="ซ่อนทรานซิชัน %1"
111
+Undo.ShowSceneItem="แสดง %1 ใน %2"
112
+Undo.HideSceneItem="ซ่อน %1 ใน %2"
113
+Undo.MoveUp="ย้ายขึ้น %1 %2"
114
+Undo.MoveDown="ย้ายลง %1 %2"
115
+Undo.MoveToTop="ย้ายขึ้นมาไว้บนสุด %1 %2"
116
+Undo.MoveToBottom="ย้ายลงไปล่างสุด %1 %2"
117
+Undo.PasteSource="วางแหล่งที่มา %1"
118
+Undo.GroupItems="รวมรายการเป็นกลุ่ม %1"
119
 TransitionNameDlg.Text="โปรดกำหนดชื่อสำหรับรูปแบบการสลับฉาก"
120
 TransitionNameDlg.Title="ชื่อรูปแบบการสลับฉาก"
121
 TitleBar.Profile="โปรไฟล์"
122
@@ -215,11 +277,13 @@
123
 Output.ConnectFail.ConnectFailed="ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์"
124
 Output.ConnectFail.Disconnected="ถูกตัดออกจากเซิร์ฟเวอร์"
125
 Output.StreamEncodeError.Title="ข้อผิดพลาดในการเข้ารหัส"
126
+Output.RecordFail.Title="การเริ่มบันทึกล้มเหลว"
127
 Output.RecordNoSpace.Title="พื้นที่เก็บข้อมูลไม่เพียงพอ"
128
 Output.RecordError.Title="บันทึกข้อผิดพลาด"
129
 Output.BadPath.Title="เส้นทางของแฟ้มไม่ถูกต้อง"
130
 LogReturnDialog="อัพโหลดไฟล์ Log สำเร็จ"
131
 LogReturnDialog.CopyURL="คัดลอก URL"
132
+LogReturnDialog.AnalyzeURL="วิเคราะห์"
133
 LogReturnDialog.ErrorUploadingLog="มีข้อผิดพลาดในการอัปโหลด Log File"
134
 Remux.ClearFinished="ล้างรายการที่เสร็จแล้ว"
135
 Remux.ClearAll="ล้างรายการทั้งหมด"
136
@@ -262,6 +326,8 @@
137
 Basic.PropertiesWindow.Confirm="มีการเปลี่ยนแปลงที่ยังไม่ได้บันทึก, คุณต้องการบันทึกตอนนี้เลยไหม?"
138
 Basic.PropertiesWindow.NoProperties="ไม่มีคุณสมบัติ"
139
 Basic.PropertiesWindow.AddFiles="เพิ่มไฟล์"
140
+Basic.PropertiesWindow.AddEditableListFiles="เพิ่มไฟล์ %1"
141
+Basic.PropertiesView.UrlButton.OpenUrl="เปิด URL"
142
 Basic.StatusBar.Reconnecting="ตัดการเชื่อมต่อแล้ว, จะเชื่อมต่อใหม่ในอีก %2 วินาที (พยายาม %1)"
143
 Basic.StatusBar.AttemptingReconnect="กำลังพยายามเชื่อมต่อใหม่... (พยายาม %1)"
144
 Basic.StatusBar.ReconnectSuccessful="เชื่อมต่อใหม่สำเร็จ"
145
@@ -277,7 +343,13 @@
146
 Basic.TransformWindow.Position="ตำแหน่ง"
147
 Basic.TransformWindow.Rotation="การหมุน"
148
 Basic.TransformWindow.Size="ขนาด"
149
+Basic.TransformWindow.Width="ความกว้าง"
150
+Basic.TransformWindow.Height="ความสูง"
151
 Basic.TransformWindow.Crop="ครอบตัด"
152
+Basic.TransformWindow.CropLeft="ครอบตัดซ้าย"
153
+Basic.TransformWindow.CropRight="ครอบตัดขวา"
154
+Basic.TransformWindow.CropTop="ครอบตัดด้านบน"
155
+Basic.TransformWindow.CropBottom="ครอบตัดด้านล่าง"
156
 Basic.TransformWindow.Alignment.TopLeft="ด้านบนซ้าย"
157
 Basic.TransformWindow.Alignment.TopCenter="ด้านบนกลาง"
158
 Basic.TransformWindow.Alignment.TopRight="ด้านบนขวา"
159
@@ -288,6 +360,7 @@
160
 Basic.TransformWindow.Alignment.BottomCenter="ตรงกลางด้านล่าง"
161
 Basic.TransformWindow.Alignment.BottomRight="ขวาล่าง"
162
 Basic.TransformWindow.BoundsType.None="ไม่มีขอบ"
163
+Basic.TransformWindow.BoundsType.MaxOnly="สำหรับขนาดสูงสุดเท่านั้น"
164
 Basic.Main.Scenes="ฉาก"
165
 Basic.Main.Sources="แหล่งสัญญาณ"
166
 Basic.Main.Controls="ตัวควบคุม"
167
@@ -319,8 +392,22 @@
168
 Basic.MainMenu.Edit.UndoAction="$เลิกทำ $1"
169
 Basic.MainMenu.Edit.RedoAction="$ทำซ้ำ $1"
170
 Basic.MainMenu.Edit.LockPreview="&ล็อกหน้าตัวอย่าง"
171
+Basic.MainMenu.Edit.Transform.FlipHorizontal="พลิก & แนวนอน"
172
+Basic.MainMenu.Edit.Transform.FlipVertical="พลิก & แนวตั้ง"
173
+Basic.MainMenu.Edit.Transform.FitToScreen="&พอดีจอ"
174
+Basic.MainMenu.Edit.Transform.StretchToScreen="&ขยายเต็มจอ"
175
+Basic.MainMenu.Edit.Transform.CenterToScreen="&วางกึ่งกลางจอ"
176
+Basic.MainMenu.Edit.Transform.VerticalCenter="กึ่งกลางแนวตั้ง"
177
+Basic.MainMenu.Edit.Transform.HorizontalCenter="กึ่งกลางแนวนอน"
178
 Basic.MainMenu.Edit.Order="&ลำดับ"
179
+Basic.MainMenu.Edit.Order.MoveUp="ย้าย &ขึ้น"
180
+Basic.MainMenu.Edit.Order.MoveDown="ย้าย &ลง"
181
+Basic.MainMenu.Edit.Order.MoveToTop="ย้ายขึ้นข้างบน"
182
+Basic.MainMenu.Edit.Order.MoveToBottom="ย้ายลงข้างล่าง"
183
+Basic.MainMenu.Edit.AdvAudio="&คุณสมบัติเสียงขั้นสูง"
184
 Basic.MainMenu.View="&มุมมอง"
185
+Basic.MainMenu.View.Toolbars="แถบเครื่องมือ"
186
+Basic.MainMenu.View.Docks="แถบรายการโปรด"
187
 Basic.MainMenu.View.Docks.ResetUI="รีเซ็ต UI"
188
 Basic.MainMenu.View.Docks.LockUI="ล็อค UI"
189
 Basic.MainMenu.View.Fullscreen.Interface="อินเตอร์เฟซแบบเต็มจอ"
190
obs-studio-27.0.1.tar.xz/UI/data/locale/tl-PH.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/tl-PH.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-Language="Ingles"
3
+Language="Tagalog"
4
 Apply="Gamitin"
5
 Cancel="Kanselahin"
6
 Close="Isara"
7
obs-studio-27.0.1.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/tr-TR.ini Changed
134
 
1
@@ -109,6 +109,7 @@
2
 Auth.InvalidScope.Text="%1 için kimlik doğrulama gereksinimleri değişti. Bazı özellikler kullanılamayabilir."
3
 Auth.LoadingChannel.Title="Kanal bilgileri yükleniyor..."
4
 Auth.LoadingChannel.Text="%1 için kanal bilgileri yükleniyor, lütfen bekleyin..."
5
+Auth.LoadingChannel.Error="Kanal bilgisi alınamadı."
6
 Auth.ChannelFailure.Title="Kanal yüklenemedi"
7
 Auth.ChannelFailure.Text="%1 için kanal bilgisi yüklenemedi\n\n%2: %3"
8
 Auth.Chat="Sohbet"
9
@@ -151,6 +152,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Yayın Anahtarını Al"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Daha Fazla Bilgi"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Yayın Anahtarını Kullan"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Yayın Anahtarını Kullan (gelişmiş)"
14
 Basic.AutoConfig.StreamPage.Service="Hizmet"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Tümünü Göster..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="Özel..."
17
@@ -158,6 +160,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Yayın Anahtarı"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Bağlantı)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Kodlayıcı Anahtarı"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Bağlı hesap"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bant genişliği testi ile bit hızını tahmin et (birkaç dakika alabilir)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Donanım kodlamayı tercih et"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Donanım Kodlama çoğu CPU kullanımını ortadan kaldırır, ancak aynı kalite düzeyini elde etmek için daha fazla bit hızı gerektirebilir."
25
@@ -356,6 +359,8 @@
26
 MissingFiles.Found="Bulundu"
27
 MissingFiles.AutoSearch="Ek dosya eşleşmeleri bulundu"
28
 MissingFiles.AutoSearchText="OBS, bu dizinde kayıp dosyalar için ek eşleşmeler buldu. Onları eklemek ister misin?"
29
+MissingFiles.NoMissing.Title="Kayıp Dosya Kontrolü"
30
+MissingFiles.NoMissing.Text="Herhangi bir kayıp dosya görünmüyor."
31
 UpdateAvailable="Yeni Güncelleştirme Mevcut"
32
 UpdateAvailable.Text="%1.%2.%3 sürümü şimdi kullanılabilir. <a href='%4'>İndirmek için tıklayın</a>"
33
 Basic.DesktopDevice1="Masaüstü Ses"
34
@@ -412,6 +417,8 @@
35
 Basic.PropertiesView.FPS.Simple="Basit FPS Değerleri"
36
 Basic.PropertiesView.FPS.Rational="Rasyonel FPS Değerleri"
37
 Basic.PropertiesView.FPS.ValidFPSRanges="Geçerli Kare Aralıkları:"
38
+Basic.PropertiesView.UrlButton.Text="Bu bağlantı varsayılan web tarayıcınızda açılsın mı?"
39
+Basic.PropertiesView.UrlButton.OpenUrl="URL Aç"
40
 Basic.InteractionWindow="Etkileşime geçilen '%1'"
41
 Basic.StatusBar.Reconnecting="Bağlantı koptu, %2 saniye içinde yeniden bağlanılacak (%1. deneme)"
42
 Basic.StatusBar.AttemptingReconnect="Yeniden bağlanmaya çalışılıyor... (%1. deneme)"
43
@@ -466,6 +473,8 @@
44
 Basic.TransformWindow.BoundsType.ScaleToWidth="Sınır genişliğinde boyutlandır"
45
 Basic.TransformWindow.BoundsType.ScaleToHeight="Sınır yüksekliğinde boyutlandır"
46
 Basic.TransformWindow.BoundsType.Stretch="Sınırlara genişlet"
47
+Basic.TransformWindow.Title="'%1' için dönüşüm düzenleme"
48
+Basic.TransformWindow.NoSelectedSource="Kaynak seçilmedi"
49
 Basic.Main.AddSourceHelp.Title="Kaynak Eklenemiyor"
50
 Basic.Main.AddSourceHelp.Text="Kaynağa eklemek için en az 1 sahneye ihtiyacın var."
51
 Basic.Main.Scenes="Sahneler"
52
@@ -477,6 +486,7 @@
53
 Basic.Main.StartReplayBuffer="Tekrar Oynatma Arabelleğini Başlat"
54
 Basic.Main.SaveReplay="Yeniden Oynatmayı Kaydet"
55
 Basic.Main.StartStreaming="Yayını Başlat"
56
+Basic.Main.StartBroadcast="Canlı Yayına Geç"
57
 Basic.Main.StartVirtualCam="Sanal Kamerayı Başlat"
58
 Basic.Main.StopRecording="Kaydı Durdur"
59
 Basic.Main.PauseRecording="Kaydı Duraklat"
60
@@ -485,6 +495,7 @@
61
 Basic.Main.StopReplayBuffer="Tekrar Oynatma Arabelleğini Durdur"
62
 Basic.Main.StoppingReplayBuffer="Tekrar Oynatma Arabelleği Durduruluyor..."
63
 Basic.Main.StopStreaming="Yayını Durdur"
64
+Basic.Main.StopBroadcast="Yayını bitir"
65
 Basic.Main.StoppingStreaming="Canlı Yayın Durduruluyor..."
66
 Basic.Main.ForceStopStreaming="Yayını Durdur (gecikmeyi yoksay)"
67
 Basic.Main.ShowContextBar="Kaynak menüsünü göster"
68
@@ -503,6 +514,7 @@
69
 Basic.MainMenu.File.Settings="Ayarlar (&S)"
70
 Basic.MainMenu.File.ShowSettingsFolder="Ayarlar Dosyasını Göster"
71
 Basic.MainMenu.File.ShowProfileFolder="Profil Dosyasını Göster"
72
+Basic.MainMenu.File.ShowMissingFiles="Kayıp dosyaları kontrol et"
73
 Basic.MainMenu.AlwaysOnTop="Her Z&aman Üstte"
74
 Basic.MainMenu.File.Exit="Çıkış (&X)"
75
 Basic.MainMenu.Edit="Düz&enle"
76
@@ -616,6 +628,7 @@
77
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Yatay, Alt (8 Sahne)"
78
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Dikey, Sol (8 Sahne)"
79
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Dikey, Sağ (8 Sahne)"
80
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Yatay, Üst (18 Sahne)"
81
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Yatay, Üst (24 Sahne)"
82
 Basic.Settings.Stream="Yayın"
83
 Basic.Settings.Stream.StreamType="Yayın Türü"
84
@@ -911,3 +924,49 @@
85
 ContextBar.MediaControls.PlaylistPrevious="Önceki oynatma listesi"
86
 ContextBar.MediaControls.MediaProperties="Medya ayarları"
87
 ContextBar.MediaControls.BlindSeek="Medya Arama Widget'ı"
88
+YouTube.Auth.Ok="Yetkilendirme başarıyla tamamlandı.\nArtık bu sayfayı kapatabilirsiniz."
89
+YouTube.Auth.NoCode="Yetkilendirme işlemi tamamlanmadı."
90
+YouTube.Auth.NoChannels="Seçili hesap için uygun kanal bulunamadı"
91
+YouTube.Auth.WaitingAuth.Title="YouTube Kullanıcı Yetkilendirmesi"
92
+YouTube.Auth.WaitingAuth.Text="Lütfen harici tarayıcınızda yetkilendirmeyi tamamlayın.<br>Harici tarayıcı açılmazsa bu bağlantıyı takip edin ve yetkilendirmeyi tamamlayın:<br>%1"
93
+YouTube.AuthError.Text="Kanal bilgisi alınamadı: %1."
94
+YouTube.Actions.Title="Başlık*"
95
+YouTube.Actions.MyBroadcast="Yayınım"
96
+YouTube.Actions.Description="Açıklama"
97
+YouTube.Actions.Privacy="Gizlilik*"
98
+YouTube.Actions.Privacy.Private="Gizli"
99
+YouTube.Actions.Privacy.Public="Herkese Açık"
100
+YouTube.Actions.Privacy.Unlisted="Liste dışı"
101
+YouTube.Actions.Category="Kategori"
102
+YouTube.Actions.MadeForKids="Bu video çocuklar için mi yapılmış?*"
103
+YouTube.Actions.MadeForKids.Yes="Evet, çocuklar için yapıldı"
104
+YouTube.Actions.MadeForKids.No="Hayır, çocuklar için yapılmadı"
105
+YouTube.Actions.AdditionalSettings="Ek Ayarlar:"
106
+YouTube.Actions.Latency="Gecikme"
107
+YouTube.Actions.Latency.Low="Düşük"
108
+YouTube.Actions.Latency.UltraLow="Ultra Düşük"
109
+YouTube.Actions.EnableAutoStart="Otomatik Başlatmayı Etkinleştir"
110
+YouTube.Actions.EnableAutoStop="Otomatik Durdurmayı Etkinleştir"
111
+YouTube.Actions.AutoStartStop.TT="Bu planlı yayının otomatik başlayıp başlamayacağını gösterir"
112
+YouTube.Actions.EnableDVR="DVR'ı Etkinleştir"
113
+YouTube.Actions.ScheduleForLater="Daha sonra planlayın"
114
+YouTube.Actions.Error.Title="Canlı yayın oluşturma hatası"
115
+YouTube.Actions.Error.Text="YouTube erişim hatası '%1'.<br/>Ayrıntılı hata açıklamasına <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> buradan ulaşabilirsiniz"
116
+YouTube.Actions.Error.General="YouTube erişim hatası. Lütfen ağ bağlantınızı veya YouTube sunucu erişiminizi kontrol edin."
117
+YouTube.Actions.Error.NoBroadcastCreated="Yayın oluşturma hatası '%1'.<br/> Ayrıntılı hata açıklamasına <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a> buradan ulaşabilirsiniz"
118
+YouTube.Actions.Error.NoStreamCreated="Yayın oluşturulmadı. Lütfen hesabınızı yeniden bağlayın."
119
+YouTube.Actions.Error.YouTubeApi="YouTube API Hatası. Daha fazla bilgi için lütfen günlüğe bakın."
120
+YouTube.Actions.Error.BroadcastNotFound="Seçili yayın bulunamadı."
121
+YouTube.Actions.EventsLoading="Etkinlik listesi yükleniyor..."
122
+YouTube.Actions.EventCreated.Title="Etkinlik oluşturuldu"
123
+YouTube.Actions.EventCreated.Text="Etkinlik başarıyla oluşturuldu."
124
+YouTube.Actions.Stream="Yayın"
125
+YouTube.Actions.Stream.ScheduledFor="%1 için planlandı"
126
+YouTube.Actions.Stream.Resume="Kesilmiş yayını devam ettir"
127
+YouTube.Actions.Stream.YTStudio="Youtube Studio tarafından otomatik olarak oluşturuldu"
128
+YouTube.Actions.Notify.CreatingBroadcast="Yeni bir Canlı Yayın oluşturuluyor, lütfen bekleyin..."
129
+YouTube.Actions.AutoStartStreamingWarning.Title="Manuel başlatma gerekli"
130
+YouTube.Actions.AutoStartStreamingWarning="Bu etkinlik için otomatik başlatma devre dışı, Yayına Geç'e tıklayıp yayınınızı başlatın."
131
+YouTube.Actions.AutoStopStreamingWarning="Canlı yayınınınız duracak ve tekrar bağlanamayacaksınız."
132
+YouTube.Errors.liveStreamingNotEnabled="Seçili YouTube kanalı için canlı yayın yapma aktif değil.<br/><br/><a href='https://www.youtube.com/features'>youtube.com/features</a>'u inceleyerek daha fazla bilgi edinebilirsiniz."
133
+YouTube.Errors.livePermissionBlocked="Seçili YouTube kanalı için canlı yayın yapma uygun değil. <br/>Kanal ayarlarınızda bu özelliği aktifleştirdiğinizde değişikliğin yansıması 24 saati bulabilir.<br/><br/><a href='https://www.youtube.com/features'>youtube.com/features</a>'u inceleyerek daha fazla bilgi edinebilirsiniz."
134
obs-studio-27.0.1.tar.xz/UI/data/locale/uk-UA.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/uk-UA.ini Changed
166
 
1
@@ -111,6 +111,7 @@
2
 Auth.InvalidScope.Text="Вимоги до перевірки автентичності з %1 змінилися. Деякі функції можуть бути недоступними."
3
 Auth.LoadingChannel.Title="Завантаження інформації про канал…"
4
 Auth.LoadingChannel.Text="Завантажується інформація про канал з %1, будь ласка, зачекайте…"
5
+Auth.LoadingChannel.Error="Не вдалося отримати дані про канал."
6
 Auth.ChannelFailure.Title="Не вдалося завантажити канал"
7
 Auth.ChannelFailure.Text="Не вдалося завантажити інформацію про канал з %1\n\n%2: %3"
8
 Auth.Chat="Чат"
9
@@ -153,6 +154,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="Отримати ключ трансляції"
11
 Basic.AutoConfig.StreamPage.MoreInfo="Докладніше"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="Використати ключ трансляції"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Використати ключ трансляції (розширено)"
14
 Basic.AutoConfig.StreamPage.Service="Сервіс"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="Показати всі…"
16
 Basic.AutoConfig.StreamPage.Service.Custom="Користувацький…"
17
@@ -160,6 +162,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="Ключ трансляції"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Посилання)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="Ключ кодувальника"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="Підключений обліковий запис"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Оцінити бітрейт за допомогою тесту пропускної здатності (може зайняти кілька хвилин)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Віддавати перевагу апаратному кодуванню"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Апаратне кодування зменшує використання ЦП, але для отримання такої ж якості відео може знадобитись більший бітрейт."
25
@@ -320,6 +323,8 @@
26
 Output.RecordError.EncodeErrorMsg="Під час запису відбулася помилка кодувальника."
27
 Output.BadPath.Title="Неправильний шлях до файлу"
28
 Output.BadPath.Text="Вибрано неприпустимий вихідний шлях. Перевірте налаштування та переконайтеся, що припустимий шлях вибрано."
29
+Output.NoBroadcast.Title="Трансляції не налаштовано"
30
+Output.NoBroadcast.Text="Перш ніж почати трансляцію, необхідно її налаштувати."
31
 LogReturnDialog="Файл журналу успішно вивантажено"
32
 LogReturnDialog.Description="Ваш файл журналу було завантажено. Ви тепер можете поділитися URL з метою налагодження чи підтримки."
33
 LogReturnDialog.Description.Crash="Ваш звіт про падіння було завантажено. Ви тепер можете поділитися URL з метою налагодження."
34
@@ -359,6 +364,8 @@
35
 MissingFiles.Found="Знайдено"
36
 MissingFiles.AutoSearch="Знайдено додаткові файли"
37
 MissingFiles.AutoSearchText="OBS знайшов додаткові збіги для файлів, відсутніх у цій теці. Бажаєте додати їх?"
38
+MissingFiles.NoMissing.Title="Перевірка відсутності файлів"
39
+MissingFiles.NoMissing.Text="Відсутності файлів не виявлено."
40
 UpdateAvailable="Доступне оновлення"
41
 UpdateAvailable.Text="Доступна версія %1.%2.%3. <a href='%4'>Клацніть тут, щоб завантажити</a>"
42
 Basic.DesktopDevice1="Пристрій відтворення"
43
@@ -422,6 +429,8 @@
44
 Basic.PropertiesView.FPS.Simple="Прості значення FPS"
45
 Basic.PropertiesView.FPS.Rational="Раціональні значення FPS"
46
 Basic.PropertiesView.FPS.ValidFPSRanges="Допустимі діапазони FPS:"
47
+Basic.PropertiesView.UrlButton.Text="Відкрити це посилання у стандартному браузері?"
48
+Basic.PropertiesView.UrlButton.OpenUrl="Відкрити URL"
49
 Basic.InteractionWindow="Взаємодія із '%1'"
50
 Basic.StatusBar.Reconnecting="Роз'єднано, повторна спроба під'єднання за %2 секунд(и) (спроба %1)"
51
 Basic.StatusBar.AttemptingReconnect="Спроба повторного підключення… (спроба %1)"
52
@@ -476,6 +485,8 @@
53
 Basic.TransformWindow.BoundsType.ScaleToWidth="Масштабувати до ширини границь"
54
 Basic.TransformWindow.BoundsType.ScaleToHeight="Масштабувати до висоти границь"
55
 Basic.TransformWindow.BoundsType.Stretch="Розтягнути до границь"
56
+Basic.TransformWindow.Title="Редагувати перетворення для '%1'"
57
+Basic.TransformWindow.NoSelectedSource="Джерела не вибрано"
58
 Basic.Main.AddSourceHelp.Title="Неможливо додати джерело"
59
 Basic.Main.AddSourceHelp.Text="Щоб додати джерело, потрібно мати принаймні одну сцену."
60
 Basic.Main.Scenes="Сцени"
61
@@ -487,6 +498,7 @@
62
 Basic.Main.StartReplayBuffer="Запустити буфер повторів"
63
 Basic.Main.SaveReplay="Зберегти повтор"
64
 Basic.Main.StartStreaming="Почати трансляцію"
65
+Basic.Main.StartBroadcast="Розпочати трансляцію"
66
 Basic.Main.StartVirtualCam="Запустити віртуальну камеру"
67
 Basic.Main.StopRecording="Зупинити записування"
68
 Basic.Main.PauseRecording="Призупинити запис"
69
@@ -494,7 +506,10 @@
70
 Basic.Main.StoppingRecording="Припинення запису…"
71
 Basic.Main.StopReplayBuffer="Зупинити буфер повторів"
72
 Basic.Main.StoppingReplayBuffer="Зупинення буферу повторів…"
73
+Basic.Main.SetupBroadcast="Керування трансляціями"
74
 Basic.Main.StopStreaming="Зупинити трансляцію"
75
+Basic.Main.StopBroadcast="Закінчити трансляцію"
76
+Basic.Main.AutoStopEnabled="(Автозупинка)"
77
 Basic.Main.StoppingStreaming="Зупинення трансляції…"
78
 Basic.Main.ForceStopStreaming="Зупинити трансляцію (миттєво)"
79
 Basic.Main.ShowContextBar="Показати панель джерела"
80
@@ -513,6 +528,7 @@
81
 Basic.MainMenu.File.Settings="Налаштування (&S)"
82
 Basic.MainMenu.File.ShowSettingsFolder="Показати каталог налаштувань"
83
 Basic.MainMenu.File.ShowProfileFolder="Показати каталог профілю"
84
+Basic.MainMenu.File.ShowMissingFiles="Перевірити відсутність файлів"
85
 Basic.MainMenu.AlwaysOnTop="Поверх інших вікон (&A)"
86
 Basic.MainMenu.File.Exit="Вийти (&X)"
87
 Basic.MainMenu.Edit="Редагування (&E)"
88
@@ -626,6 +642,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Горизонтально, знизу (8 сцен)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Вертикально, ліворуч (8 сцен)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Вертикально, праворуч (8 сцен)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Горизонтально, вгорі (18 сцен)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Горизонтально, зверху (24 сцени)"
94
 Basic.Settings.Stream="Трансляція"
95
 Basic.Settings.Stream.StreamType="Тип трансляції"
96
@@ -909,3 +926,69 @@
97
 ContextBar.MediaControls.PlaylistPrevious="Попередній у списку відтворення"
98
 ContextBar.MediaControls.MediaProperties="Властивості медіафайлу"
99
 ContextBar.MediaControls.BlindSeek="Віджет пошуку медіафайлів"
100
+YouTube.Auth.Ok="Авторизацію виконано успішно.\nМожете закрити цю сторінку."
101
+YouTube.Auth.NoCode="Процес авторизації не виконано."
102
+YouTube.Auth.NoChannels="Вибраний обліковий запис не має доступних каналів"
103
+YouTube.Auth.WaitingAuth.Title="Авторизація користувача YouTube"
104
+YouTube.Auth.WaitingAuth.Text="Будь ласка, завершіть авторизацію у браузері.<br>Якщо браузер не відкрито, перейдіть за цим посиланням і завершіть авторизацію:<br>%1"
105
+YouTube.AuthError.Text="Не вдалося отримати інформацію про канал: %1."
106
+YouTube.Actions.WindowTitle="Налаштування YouTube Broadcast - Канал: %1"
107
+YouTube.Actions.CreateNewEvent="Створити нову трансляцію"
108
+YouTube.Actions.ChooseEvent="Виберіть наявну трансляцію"
109
+YouTube.Actions.Title="Назва*"
110
+YouTube.Actions.MyBroadcast="Моя трансляція"
111
+YouTube.Actions.Description="Опис"
112
+YouTube.Actions.Privacy="Приватність*"
113
+YouTube.Actions.Privacy.Private="Приватне"
114
+YouTube.Actions.Privacy.Public="Загальнодоступне"
115
+YouTube.Actions.Privacy.Unlisted="Поза списком"
116
+YouTube.Actions.Category="Категорія"
117
+YouTube.Actions.Thumbnail="Мініатюра"
118
+YouTube.Actions.Thumbnail.SelectFile="Вибрати файл..."
119
+YouTube.Actions.Thumbnail.NoFileSelected="Файл не вибрано"
120
+YouTube.Actions.Thumbnail.ClearFile="Очистити"
121
+YouTube.Actions.MadeForKids="Це відео створено для дітей?*"
122
+YouTube.Actions.MadeForKids.Yes="Так, його створено для дітей"
123
+YouTube.Actions.MadeForKids.No="Ні, його створено не для дітей"
124
+YouTube.Actions.AdditionalSettings="Додаткові налаштування:"
125
+YouTube.Actions.Latency="Затримка"
126
+YouTube.Actions.Latency.Normal="Звичайнa"
127
+YouTube.Actions.Latency.Low="Низька"
128
+YouTube.Actions.Latency.UltraLow="Дуже низька"
129
+YouTube.Actions.EnableAutoStart="Увімкнути автозапуск"
130
+YouTube.Actions.EnableAutoStop="Увімкнути автостоп"
131
+YouTube.Actions.AutoStartStop.TT="Вказує на те, чи має ця запланована трансляція починатися автоматично"
132
+YouTube.Actions.EnableDVR="Увімкнути відеозаписувач"
133
+YouTube.Actions.360Video="360 відео"
134
+YouTube.Actions.ScheduleForLater="Запланувати на потім"
135
+YouTube.Actions.RememberSettings="Запам'ятати налаштування"
136
+YouTube.Actions.Create_Ready="Створити трансляцію"
137
+YouTube.Actions.Create_GoLive="Створити і почати трансляцію"
138
+YouTube.Actions.Choose_Ready="Вибрати трансляцію"
139
+YouTube.Actions.Choose_GoLive="Вибрати і почати трансляцію"
140
+YouTube.Actions.Create_Schedule="Запланувати трансляцію"
141
+YouTube.Actions.Create_Schedule_Ready="Запланувати та вибрати трансляцію"
142
+YouTube.Actions.Dashboard="Відкрити Студію YouTube"
143
+YouTube.Actions.Error.Title="Помилка при створенні трансляції"
144
+YouTube.Actions.Error.Text="Помилка доступу до YouTube '%1'.<br/>Докладний опис помилки можна знайти на <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
145
+YouTube.Actions.Error.General="Помилка доступу до YouTube. Перевірте з'єднання з інтернетом чи доступ до сервера YouTube."
146
+YouTube.Actions.Error.NoBroadcastCreated="Помилка створення трансляції '%1'.<br/>Докладний опис помилок можна знайти на <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
147
+YouTube.Actions.Error.NoStreamCreated="Стрім не створено. Повторно під'єднайте обліковий запис."
148
+YouTube.Actions.Error.YouTubeApi="Помилка YouTube API. Перегляньте додаткові відомості у файлі журналу."
149
+YouTube.Actions.Error.BroadcastNotFound="Вибрану трансляцію не знайдено."
150
+YouTube.Actions.Error.FileMissing="Вибраний файл не існує."
151
+YouTube.Actions.Error.FileOpeningFailed="Не вдалося відкрити вибраний файл."
152
+YouTube.Actions.Error.FileTooLarge="Вибраний файл завеликий (межа: 2 МіБ)."
153
+YouTube.Actions.EventsLoading="Завантаження списку подій..."
154
+YouTube.Actions.EventCreated.Title="Подію створено"
155
+YouTube.Actions.EventCreated.Text="Подію успішно створено."
156
+YouTube.Actions.Stream="Трансляція"
157
+YouTube.Actions.Stream.ScheduledFor="Заплановано на %1"
158
+YouTube.Actions.Stream.Resume="Поновити перерваний потік"
159
+YouTube.Actions.Stream.YTStudio="Автоматично створено YouTube Studio"
160
+YouTube.Actions.Notify.CreatingBroadcast="Створюється нова трансляція наживо, зачекайте..."
161
+YouTube.Actions.AutoStartStreamingWarning.Title="Потрібен ручний запуск"
162
+YouTube.Actions.AutoStartStreamingWarning="Автозапуск для цієї події вимкнено, щоб почати трансляцію, натисніть \"Розпочати трансляцію\"."
163
+YouTube.Actions.AutoStopStreamingWarning="Ви не зможете відновити з'єднання.<br>Ваш стрім буде зупинено, і ви більше не будете у прямому етері."
164
+YouTube.Errors.liveStreamingNotEnabled="На вибраному каналі YouTube пряму трансляцію не увімкнено.<br/><br/>Щоб отримати додаткові відомості, див. <a href='https://www.youtube.com/features'>youtube.com/features</a>."
165
+YouTube.Errors.livePermissionBlocked="На вибраному каналі YouTube пряма трансляція недоступна.<br/>Зверніть увагу, що після увімкнення її в налаштуваннях каналу, трансляція стане доступною протягом 24 годин.<br/><br/>Докладніше див. <a href='https://www.youtube.com/features'>youtube.com/features</a>."
166
obs-studio-27.0.1.tar.xz/UI/data/locale/ur-PK.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/ur-PK.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-Language="اردو"
3
+Language="اُردُو"
4
 OK="ٹھیک ہے"
5
 Apply="لاگو کریں"
6
 Cancel="رہنے دو"
7
obs-studio-27.0.1.tar.xz/UI/data/locale/vi-VN.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/vi-VN.ini Changed
313
 
1
@@ -1,4 +1,4 @@
2
-Language="Tiếng Anh"
3
+Language="Tiếng Việt"
4
 OK="Đồng ý"
5
 Apply="Áp dụng"
6
 Cancel="Hùy"
7
@@ -25,22 +25,23 @@
8
 Mono="Âm thanh đơn"
9
 Stereo="Âm thanh nổi"
10
 DroppedFrames="Khung bị rớt %1 (%2%)"
11
-PreviewProjector="Toàn màn hình (xem trước)"
12
-SceneProjector="Toàn màn hình (cảnh)"
13
-SourceProjector="Toàn màn hình (nguồn)"
14
-StudioProgramWindow="Hình chiếu dạng cửa sổ (đầu ra cuối)"
15
-PreviewWindow="Hình chiếu dạng cửa sổ (xem trước)"
16
-SceneWindow="Hình chiếu dạng cửa sổ (phần cảnh)"
17
-SourceWindow="Hình chiếu dạng cửa sổ (phần nguồn)"
18
-MultiviewProjector="Giao diện nhiều lớp (Toàn màn hình)"
19
-MultiviewWindowed="Đa góc nhìn (chỉ cửa sổ)"
20
+StudioProgramProjector="Khung chiếu toàn màn hình (Đầu ra cuối)"
21
+PreviewProjector="Khung chiếu toàn màn hình (Xem trước)"
22
+SceneProjector="Khung chiếu toàn màn hình (Cảnh)"
23
+SourceProjector="Khung chiếu toàn màn hình (Nguồn)"
24
+StudioProgramWindow="Khung chiếu dạng cửa sổ (Đầu ra cuối)"
25
+PreviewWindow="Khung chiếu dạng cửa sổ (Xem trước)"
26
+SceneWindow="Khung chiếu dạng cửa sổ (Cảnh)"
27
+SourceWindow="Khung chiếu dạng cửa sổ (Nguồn)"
28
+MultiviewProjector="Nhiều góc nhìn (Toàn màn hình)"
29
+MultiviewWindowed="Nhiều góc nhìn (Dạng cửa sổ)"
30
 ResizeProjectorWindowToContent="Chỉnh cửa sổ vừa với nội dung"
31
 Clear="Xóa"
32
 Revert="Phục hồi"
33
 Show="Hiện"
34
 Hide="Ẩn"
35
 UnhideAll="Bỏ ẩn tất cả"
36
-Untitled="Chưa Đặt Tên"
37
+Untitled="Không tên"
38
 New="Mới"
39
 Duplicate="Tạo bản sao"
40
 Enable="Bật"
41
@@ -77,8 +78,8 @@
42
 None="Không"
43
 StudioMode.Preview="Xem trước"
44
 StudioMode.Program="Chương trình"
45
-ShowInMultiview="Xem trong Đa góc nhìn"
46
-VerticalLayout="Chiều dọc"
47
+ShowInMultiview="Xem trong Nhiều góc nhìn"
48
+VerticalLayout="Bố cục dọc"
49
 Group="Nhóm"
50
 DoNotShowAgain="Không hiện thị lại"
51
 Default="(Mặc định)"
52
@@ -99,10 +100,10 @@
53
 ChromeOS.Title="Nền tảng không được hỗ trợ"
54
 ChromeOS.Text="Có vẻ như OBS đang được chạy trên ChromeOS. Nền tảng này không được hỗ trợ"
55
 DockCloseWarning.Title="Đóng cửa sổ cố định được"
56
-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ụ."
57
-ExtraBrowsers="Trình duyệt tùy chỉnh cố định"
58
-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."
59
-ExtraBrowsers.DockName="Tên cố định"
60
+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, vào bảng chọn Hiển thị → Giá đỡ trên thanh bảng chọn."
61
+ExtraBrowsers="Giá đỡ trình duyệt tùy chỉnh"
62
+ExtraBrowsers.Info="Thêm giá đỡ bằng cách đặt tên và URL, rồi chọn Áp dụng hoặc Đóng để mở giá đỡ. Bạn có thể thêm hoặc xóa giá đỡ bất kỳ lúc nào."
63
+ExtraBrowsers.DockName="Tên giá đỡ"
64
 Auth.Authing.Title="Đang xác thực..."
65
 Auth.Authing.Text="Đang xác thực với %1, vui lòng chờ..."
66
 Auth.AuthFailure.Title="Xác thực không thành công"
67
@@ -111,6 +112,7 @@
68
 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."
69
 Auth.LoadingChannel.Title="Đang tải thông tin kênh..."
70
 Auth.LoadingChannel.Text="Đang tải thông tin về kênh cho %1, chờ lát..."
71
+Auth.LoadingChannel.Error="Không thể lấy được thông tin về kênh."
72
 Auth.ChannelFailure.Title="Bị lỗi khi nạp kênh"
73
 Auth.ChannelFailure.Text="Không tải được thông tin kênh cho %1\n\n%2: %3"
74
 Auth.Chat="Tán gẫu"
75
@@ -153,6 +155,7 @@
76
 Basic.AutoConfig.StreamPage.GetStreamKey="Lấy khóa luồng"
77
 Basic.AutoConfig.StreamPage.MoreInfo="Thêm thông tin"
78
 Basic.AutoConfig.StreamPage.UseStreamKey="Dùng khóa luồng phát"
79
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="Dùng khoá luồng (nâng cao)"
80
 Basic.AutoConfig.StreamPage.Service="Dịch vụ"
81
 Basic.AutoConfig.StreamPage.Service.ShowAll="Hiện tất cả..."
82
 Basic.AutoConfig.StreamPage.Service.Custom="Tự chọn..."
83
@@ -160,6 +163,7 @@
84
 Basic.AutoConfig.StreamPage.StreamKey="Khóa luồng"
85
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Liên kết)"
86
 Basic.AutoConfig.StreamPage.EncoderKey="Khoá của bộ biên mã"
87
+Basic.AutoConfig.StreamPage.ConnectedAccount="Tài khoản được kết nối"
88
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="Ước tính tốc đọ bit với bài kiểm tra băng thông (có thể mất vài phút)"
89
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Ưu tiên mã hóa bằng phần cứng"
90
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Mã hóa bằng phần cứng giúp loại bỏ hầu hết sử dụng CPU nhưng có thể yêu cầu thêm tốc độ bit để có được chất lượng tương đương."
91
@@ -182,7 +186,7 @@
92
 Basic.AutoConfig.TestPage.Result.Header="Chương trình đã xác định được cài đặt lý tưởng nhất dành cho bạn:"
93
 Basic.AutoConfig.TestPage.Result.Footer="Để sử dụng các thiết đặt này, nhấp vào Áp dụng thiết đặt. Để cấu hình lại và thử lại, bấm Lùi lại. Để cấu hình thiết đặt bằng tay, bấm Hủy bỏ và mở Thiết đặt."
94
 Basic.AutoConfig.Info="Thuật sĩ tự cấu hình sẽ xác định các thiết đặt tốt nhất dựa trên đặc tả máy tính và tốc độ internet của bạn."
95
-Basic.AutoConfig.RunAnytime="Có thể chạy bất kì lúc nào bằng cách vào Bảng Công cụ."
96
+Basic.AutoConfig.RunAnytime="Có thể chạy bất kì lúc nào bằng cách vào bảng chọn Công cụ."
97
 Basic.Stats="Thống kê"
98
 Basic.Stats.CPUUsage="Sử dụng CPU"
99
 Basic.Stats.HDDSpaceAvailable="Không gian đĩa còn trống"
100
@@ -204,7 +208,7 @@
101
 Basic.Stats.DiskFullIn="Địa đầy trong (xấp xỉ)"
102
 Basic.Stats.ResetStats="Đặt lại thống kê"
103
 ResetUIWarning.Title="Bạn có chắc bạn muốn thiết lập lại giao diện người dùng?"
104
-ResetUIWarning.Text="Việc đặt lại giao diện người dùng (UI) sẽ ẩn các thanh đế nâng cao. Bạn cần hiện lại chúng từ trình đơn Hiển thị nếu muốn nhìn thấy chúng.\n\nBạn có chắc là muốn đặt lại UI không?"
105
+ResetUIWarning.Text="Việc đặt lại giao diện người dùng (UI) sẽ ẩn các giá đỡ bổ sung. Bạn cần hiện lại chúng từ bảng chọn Hiển thị nếu muốn nhìn thấy chúng.\n\nBạn có chắc là muốn đặt lại UI không?"
106
 Updater.Title="Có bản cập nhật mới"
107
 Updater.Text="Có sẵn một bản cập nhật mới:"
108
 Updater.UpdateNow="Cập nhật ngay"
109
@@ -216,7 +220,7 @@
110
 Updater.NoUpdatesAvailable.Text="Không có bản cập nhật mới"
111
 Updater.FailedToLaunch="Thất bại khi mở trình cập nhật"
112
 Updater.GameCaptureActive.Title="Quay video đang hoạt động"
113
-Updater.GameCaptureActive.Text="Thư viện móc quay game hiện đang hoạt động. Xin vui lòng đóng tất cả các game/chương trình hiện đang quay (hoặc khởi động lại Windows) và thử lại."
114
+Updater.GameCaptureActive.Text="Thư viện móc quay trò chơi hiện đang hoạt động. Xin vui lòng đóng tất cả các trò chơi/chương trình hiện đang quay (hoặc khởi động lại Windows) và thử lại."
115
 QuickTransitions.SwapScenes="Hoán đổi cảnh Xem trước/Đầu ra sau khi Chuyển cảnh"
116
 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."
117
 QuickTransitions.DuplicateScene="Tạo bản sao cảnh"
118
@@ -363,7 +367,7 @@
119
 Basic.DesktopDevice1="Âm thanh máy tính để bàn"
120
 Basic.DesktopDevice2="Máy tính để bàn âm thanh 2"
121
 Basic.Scene="Màn hình"
122
-Basic.DisplayCapture="Chụp màn hình"
123
+Basic.DisplayCapture="Quay màn hình"
124
 Basic.Main.PreviewConextMenu.Enable="Bật xem trước"
125
 Basic.Main.Preview.Disable="Tắt xem trước"
126
 ScaleFiltering.Area="Khu vực"
127
@@ -410,6 +414,8 @@
128
 Basic.PropertiesView.FPS.Simple="Giá trị đơn giản FPS"
129
 Basic.PropertiesView.FPS.Rational="Giá trị hợp lý FPS"
130
 Basic.PropertiesView.FPS.ValidFPSRanges="Phạm vi FPS hợp lệ:"
131
+Basic.PropertiesView.UrlButton.Text="Mở liên kết này trên trình duyệt web mặc định của bạn nhé?"
132
+Basic.PropertiesView.UrlButton.OpenUrl="Mở URL"
133
 Basic.InteractionWindow="Tương tác với '%1'"
134
 Basic.StatusBar.Reconnecting="Ngắt kết nối, kết nối lại trong %2 second(s) (cố gắng %1)"
135
 Basic.StatusBar.AttemptingReconnect="Cố gắng kết nối lại... (cố gắng %1)"
136
@@ -458,12 +464,14 @@
137
 Basic.TransformWindow.Alignment.BottomCenter="Phía dưới trung tâm"
138
 Basic.TransformWindow.Alignment.BottomRight="Góc dưới bên phải"
139
 Basic.TransformWindow.BoundsType.None="Không có giới hạn"
140
-Basic.TransformWindow.BoundsType.MaxOnly="Kích thước tối đa chỉ"
141
+Basic.TransformWindow.BoundsType.MaxOnly="Chỉ kích thước tối đa"
142
 Basic.TransformWindow.BoundsType.ScaleInner="Co dãn theo bên trong giới hạn"
143
 Basic.TransformWindow.BoundsType.ScaleOuter="Co dãn theo bên ngoài giới hạn"
144
 Basic.TransformWindow.BoundsType.ScaleToWidth="Co dãn theo chiều rộng của giới hạn"
145
 Basic.TransformWindow.BoundsType.ScaleToHeight="Co dãn theo chiều cao của giới hạn"
146
 Basic.TransformWindow.BoundsType.Stretch="Trải dài đến giới hạn"
147
+Basic.TransformWindow.Title="Sửa phép biến hình cho '%1'"
148
+Basic.TransformWindow.NoSelectedSource="Không có nguồn nào được chọn"
149
 Basic.Main.AddSourceHelp.Title="Không thể thêm nguồn"
150
 Basic.Main.AddSourceHelp.Text="Bạn cần phải có ít nhất 1 cảnh để thêm một nguồn."
151
 Basic.Main.Scenes="Cảnh"
152
@@ -475,6 +483,7 @@
153
 Basic.Main.StartReplayBuffer="Bắt đầu Replay Buffer"
154
 Basic.Main.SaveReplay="Lưu bản phát lại"
155
 Basic.Main.StartStreaming="Bắt đầu phát luồng"
156
+Basic.Main.StartBroadcast="Bắt đầu"
157
 Basic.Main.StartVirtualCam="Bắt đầu máy quay ảo"
158
 Basic.Main.StopRecording="Dừng ghi"
159
 Basic.Main.PauseRecording="Tạm dừng ghi hình"
160
@@ -483,6 +492,7 @@
161
 Basic.Main.StopReplayBuffer="Dừng Replay Buffer"
162
 Basic.Main.StoppingReplayBuffer="Đang dừng Replay Buffer..."
163
 Basic.Main.StopStreaming="Ngừng phát luồng"
164
+Basic.Main.StopBroadcast="Kết thúc phát sóng"
165
 Basic.Main.StoppingStreaming="Đang dừng phát luồng..."
166
 Basic.Main.ForceStopStreaming="Ngừng phát luồng (huỷ chậm trễ)"
167
 Basic.Main.ShowContextBar="Hiển thị Thanh công cụ Nguồn"
168
@@ -536,10 +546,10 @@
169
 Basic.MainMenu.Edit.AdvAudio="Các thuộc tính âm th&anh nâng cao"
170
 Basic.MainMenu.View="Hiển thị (&V)"
171
 Basic.MainMenu.View.Toolbars="&Thanh công cụ"
172
-Basic.MainMenu.View.Docks="Thanh đế"
173
+Basic.MainMenu.View.Docks="Giá đỡ"
174
 Basic.MainMenu.View.Docks.ResetUI="Đặt lại UI"
175
 Basic.MainMenu.View.Docks.LockUI="Khóa UI"
176
-Basic.MainMenu.View.Docks.CustomBrowserDocks="Thanh đế trình duyệt tùy chỉnh..."
177
+Basic.MainMenu.View.Docks.CustomBrowserDocks="Giá đỡ trình duyệt tùy chỉnh..."
178
 Basic.MainMenu.View.ListboxToolbars="Danh sách nút Cảnh/Nguồn"
179
 Basic.MainMenu.View.ContextBar="Thanh công cụ Nguồn"
180
 Basic.MainMenu.View.SceneTransitions="Chuyển cảnh"
181
@@ -580,9 +590,9 @@
182
 Basic.Settings.General.WarnBeforeStartingStream="Hiển thị hộp thoại xác nhận khi bắt đầu phát luồng"
183
 Basic.Settings.General.WarnBeforeStoppingStream="Hiển thị hộp thoại xác nhận khi dừng phát luồng"
184
 Basic.Settings.General.WarnBeforeStoppingRecord="Hiển thị hộp thoại xác nhận khi dừng ghi hình"
185
-Basic.Settings.General.Projectors="Máy chiếu"
186
-Basic.Settings.General.HideProjectorCursor="Ẩn con trỏ chuột trên màn chiếu"
187
-Basic.Settings.General.ProjectorAlwaysOnTop="Làm cho màn chiếu luôn luôn trên đầu"
188
+Basic.Settings.General.Projectors="Khung chiếu"
189
+Basic.Settings.General.HideProjectorCursor="Ẩn con trỏ chuột trên khung chiếu"
190
+Basic.Settings.General.ProjectorAlwaysOnTop="Làm cho khung chiếu luôn luôn trên cùng"
191
 Basic.Settings.General.Snapping="Chụp liên kết nguồn"
192
 Basic.Settings.General.ScreenSnapping="Nguồn Snap đến cạnh màn hình"
193
 Basic.Settings.General.CenterSnapping="Chụp nguồn vào trung tâm ngang và dọc"
194
@@ -595,7 +605,7 @@
195
 Basic.Settings.General.SysTray="Khay hệ thống"
196
 Basic.Settings.General.SysTrayWhenStarted="Thu nhỏ về khay hệ thống khi bắt đầu"
197
 Basic.Settings.General.SystemTrayHideMinimize="Luôn luôn thu nhỏ về khay hệ thống thay vì thanh tác vụ"
198
-Basic.Settings.General.SaveProjectors="Lưu màn hình chiếu khi thoát"
199
+Basic.Settings.General.SaveProjectors="Lưu khung chiếu khi thoát"
200
 Basic.Settings.General.Preview="Xem trước"
201
 Basic.Settings.General.OverflowHidden="Ẩn phần tràn"
202
 Basic.Settings.General.OverflowAlwaysVisible="Luôn hiện thị tràn khung hình"
203
@@ -603,17 +613,18 @@
204
 Basic.Settings.General.Importers="Bộ nhập"
205
 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"
206
 Basic.Settings.General.SwitchOnDoubleClick="Nháy đúp chuột để chuyển cảnh"
207
-Basic.Settings.General.StudioPortraitLayout="Bật bố cục theo chiều ngang/dọc"
208
+Basic.Settings.General.StudioPortraitLayout="Bật bố cục theo chiều dọc"
209
 Basic.Settings.General.TogglePreviewProgramLabels="Hiện nhãn của xem trước/chương trình"
210
-Basic.Settings.General.Multiview="Đa góc nhìn"
211
-Basic.Settings.General.Multiview.MouseSwitch="Click để chuyển cảnh"
212
+Basic.Settings.General.Multiview="Nhiều góc nhìn"
213
+Basic.Settings.General.Multiview.MouseSwitch="Nháy chuột để chuyển cảnh"
214
 Basic.Settings.General.Multiview.DrawSourceNames="Hiện tên cảnh"
215
 Basic.Settings.General.Multiview.DrawSafeAreas="Vẽ khu vực an toàn (EBU R 95)"
216
-Basic.Settings.General.MultiviewLayout="Giao diện nhiều lớp"
217
+Basic.Settings.General.MultiviewLayout="Bố cục nhiều góc nhìn"
218
 Basic.Settings.General.MultiviewLayout.Horizontal.Top="Chiều ngang, trên (8 cảnh)"
219
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Chiều ngang, dưới (8 cảnh)"
220
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Chiều dọc, trái (8 cảnh)"
221
 Basic.Settings.General.MultiviewLayout.Vertical.Right="Chiều dọc, phải (8 cảnh)"
222
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="Chiều ngang, trên (18 cảnh)"
223
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="Chiều ngang, trên (24 cảnh)"
224
 Basic.Settings.Stream="Luồng"
225
 Basic.Settings.Stream.StreamType="Kiểu luồng"
226
@@ -658,9 +669,9 @@
227
 Basic.Settings.Output.Simple.SavePath="Đường dẫn ghi hình"
228
 Basic.Settings.Output.Simple.RecordingQuality="Chất lượng ghi hình"
229
 Basic.Settings.Output.Simple.RecordingQuality.Stream="Giống như luồng"
230
-Basic.Settings.Output.Simple.RecordingQuality.Small="Chất lượng cao, Trung bình kích thước"
231
-Basic.Settings.Output.Simple.RecordingQuality.HQ="Không thể phân biệt chất lượng, lớn kích thước"
232
-Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless chất lượng, rất lớn tập tin kích thước"
233
+Basic.Settings.Output.Simple.RecordingQuality.Small="Chất lượng cao, Kích thước tệp trung bình"
234
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Chất lượng không phân biệt được, kích thước tệp lớn"
235
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Chất lượng không hao tổn, kích thước tệp lớn khủng khiếp"
236
 Basic.Settings.Output.Simple.Warn.VideoBitrate="Cảnh báo: Tốc độ bit video phát luồng sẽ được đặt thành %1, đây là giới hạn trên cho dịch vụ phát luồng hiện tại."
237
 Basic.Settings.Output.Simple.Warn.AudioBitrate="Cảnh báo: Tốc độ bit âm thanh phát luồng sẽ được đặt thành %1, đây là giới hạn trên cho dịch vụ phát luồng hiện tại."
238
 Basic.Settings.Output.Simple.Warn.CannotPause="Cảnh báo: Việc ghi hình không thể được dừng lại nếu chất lượng ghi hình được đặt là \"Giống như luồng\"."
239
@@ -672,7 +683,7 @@
240
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Phần cứng (QSV)"
241
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Phần cứng (AMD)"
242
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Phần cứng (NVENC)"
243
-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)"
244
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Phần mềm (x 264 sử dụng CPU thấp, tăng kích thước tệp)"
245
 Basic.Settings.Output.Simple.TwitchVodTrack="Rãnh âm Twitch VOD (Sử dụng rãnh âm 2)"
246
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Title="Tốc độ khung hình / độ phân giải không tương thích"
247
 Basic.Settings.Output.Warn.EnforceResolutionFPS.Msg="Dịch vụ phát luồng này không hỗ trợ độ phân giải đầu ra và/hoặc tốc độ khung hình hiện tại của bạn. Chúng sẽ được thay đổi thành giá trị tương thích gần nhất: \n\n%1\n\nBạn có muốn tiếp tục không?"
248
@@ -697,7 +708,7 @@
249
 Basic.Settings.Output.Adv.Audio.Track5="Rãnh âm 5"
250
 Basic.Settings.Output.Adv.Audio.Track6="Rãnh âm 6"
251
 Basic.Settings.Output.Adv.TwitchVodTrack="Rãnh âm Twitch VOD"
252
-Basic.Settings.Output.Adv.Recording="Đang ghi"
253
+Basic.Settings.Output.Adv.Recording="Ghi hình"
254
 Basic.Settings.Output.Adv.Recording.RecType="Loại ghi hình"
255
 Basic.Settings.Output.Adv.Recording.Type="Loại"
256
 Basic.Settings.Output.Adv.Recording.Type.Standard="Chuản"
257
@@ -733,7 +744,7 @@
258
 Screenshot.Source="Chụp màn hình (Nguồn)"
259
 FilenameFormatting.TT="%CCYY   Năm, bốn chữ số\n%YY        Năm, hai chữ số cuối (00-99)\n%MM       Tháng dưới dạng số (01-12)\n%DD     Ngày trong tháng, được lót thêm số không (01-31)\n%hh       Giờ theo định dạng 24 giờ (00-23)\n%mm      Phút (00-59)\n%ss       Giây (00-61)\n%%        A % sign\n%a        Tên thứ viết tắt\n%A        Tên thứ đầy đủ\n%b      Tên tháng viết tắt\n%B      Tên tháng đầy đủ\n%d        Ngày trong tháng, được lót thêm số không (01-31)\n%H        Giờ theo định dạng 24 giờ (00-23)\n%I       Giờ theo định dạng 12 giờ (01-12)\n%m       Tháng dưới dạng số (01-12)\n%M      Phút (00-59)\n%p        Ghi rõ sáng (AM) hoặc chiều (PM)\n%S        Giây (00-61)\n%y        Năm, hai chữ số cuối (00-99)\n%Y        Năm\n%z     Phần bù ISO 8601 từ UTC trong múi giờ\n%Z       Tên hoặc viết tắt của múi giờ\n%FPS     Khung hình trên giây\n%CRES     Độ phân giải cơ sở (bức vẽ)\n%ORES      Độ phân giải đầu ra\n%VF        Định dạng video"
260
 Basic.Settings.Video.BaseResolution="Độ phân giải cơ sở (bức vẽ)"
261
-Basic.Settings.Video.ScaledResolution="Độ phân giải (Kích thước) đầu ra"
262
+Basic.Settings.Video.ScaledResolution="Độ phân giải (Được thu phóng) đầu ra"
263
 Basic.Settings.Video.DownscaleFilter="Downscale lọc"
264
 Basic.Settings.Video.DisableAeroWindows="Vô hiệu hóa hàng không (Windows only)"
265
 Basic.Settings.Video.FPSCommon="Giá trị phổ biến khung hình/giây"
266
@@ -845,7 +856,7 @@
267
 Hotkeys.Right="Phải"
268
 Hotkeys.Up="Lên"
269
 Hotkeys.Down="Xuống"
270
-Hotkeys.Menu="Danh Mục"
271
+Hotkeys.Menu="Bảng chọn"
272
 Hotkeys.Space="Khoảng trắng"
273
 Hotkeys.NumpadMultiply="Numpad nhân"
274
 Hotkeys.NumpadDivide="Numpad chia"
275
@@ -913,3 +924,37 @@
276
 ContextBar.MediaControls.PlaylistPrevious="Trước trong danh sách"
277
 ContextBar.MediaControls.MediaProperties="Cấu hình phương tiện"
278
 ContextBar.MediaControls.BlindSeek="Công cụ tìm phương tiện"
279
+YouTube.Auth.Ok="Đã uỷ quyền thành công.\nBạn có thể đóng trang này lại rồi."
280
+YouTube.Auth.NoCode="Quá trình uỷ quyền đã không được hoàn tất."
281
+YouTube.Auth.WaitingAuth.Title="Uỷ quyền người dùng YouTube"
282
+YouTube.Actions.Title="Tiêu đề*"
283
+YouTube.Actions.MyBroadcast="Phát sóng của tôi"
284
+YouTube.Actions.Description="Mô tả"
285
+YouTube.Actions.Privacy="Sự riêng tư*"
286
+YouTube.Actions.Privacy.Private="Riêng tư"
287
+YouTube.Actions.Privacy.Public="Công khai"
288
+YouTube.Actions.Privacy.Unlisted="Không công khai"
289
+YouTube.Actions.Category="Phân loại"
290
+YouTube.Actions.MadeForKids="Video này có dành cho trẻ em không?*"
291
+YouTube.Actions.MadeForKids.Yes="Có, video này dành cho trẻ em"
292
+YouTube.Actions.MadeForKids.No="Không, video này không dành cho trẻ em"
293
+YouTube.Actions.AdditionalSettings="Thiết đặt bổ sung:"
294
+YouTube.Actions.Latency="Độ trễ"
295
+YouTube.Actions.Latency.Normal="Trung bình"
296
+YouTube.Actions.Latency.Low="Thấp"
297
+YouTube.Actions.Latency.UltraLow="Siêu thấp"
298
+YouTube.Actions.EnableAutoStart="Bật tự bắt đầu"
299
+YouTube.Actions.EnableAutoStop="Bật tự dừng lại"
300
+YouTube.Actions.EnableDVR="Bật DVR"
301
+YouTube.Actions.360Video="video 360"
302
+YouTube.Actions.ScheduleForLater="Lên lịch cho sau này"
303
+YouTube.Actions.Error.Title="Lỗi tạo phát sóng trực tiếp"
304
+YouTube.Actions.Error.General="Lỗi truy cập YouTube. Hãy kiểm tra kết nối mạng của bạn hoặc truy cập máy chủ YouTube của bạn."
305
+YouTube.Actions.Error.NoStreamCreated="Không có luồng nào được tạo ra. Xin vui lòng liên kết lại tài khoản của bạn."
306
+YouTube.Actions.Error.YouTubeApi="Lỗi API YouTube. Xin vui lòng xem tệp nhật kí để biết thêm thông tin."
307
+YouTube.Actions.EventsLoading="Đang tải danh sách sự kiện..."
308
+YouTube.Actions.EventCreated.Title="Sự kiện được tạo"
309
+YouTube.Actions.EventCreated.Text="Sự kiện đã được tạo thành công."
310
+YouTube.Actions.Stream="Luồng"
311
+YouTube.Actions.Stream.ScheduledFor="Đã được lên lịch vào %1"
312
+YouTube.Actions.Notify.CreatingBroadcast="Đang tạo một Phát sóng trực tiếp, xin chờ..."
313
obs-studio-27.0.1.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/zh-CN.ini Changed
166
 
1
@@ -112,6 +112,7 @@
2
 Auth.InvalidScope.Text="%1 的身份验证要求已更改。某些功能可能不可用。"
3
 Auth.LoadingChannel.Title="正在加载频道信息…"
4
 Auth.LoadingChannel.Text="正在加载 %1 的频道信息,请稍候…"
5
+Auth.LoadingChannel.Error="无法获取频道信息。"
6
 Auth.ChannelFailure.Title="无法加载频道"
7
 Auth.ChannelFailure.Text="为 %1 加载频道信息失败\n\n%2: %3"
8
 Auth.Chat="聊天"
9
@@ -154,6 +155,7 @@
10
 Basic.AutoConfig.StreamPage.GetStreamKey="获取串流密钥"
11
 Basic.AutoConfig.StreamPage.MoreInfo="更多信息"
12
 Basic.AutoConfig.StreamPage.UseStreamKey="使用串流密钥"
13
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="使用流密钥(高级)"
14
 Basic.AutoConfig.StreamPage.Service="服务"
15
 Basic.AutoConfig.StreamPage.Service.ShowAll="显示全部..."
16
 Basic.AutoConfig.StreamPage.Service.Custom="自定义..."
17
@@ -161,6 +163,7 @@
18
 Basic.AutoConfig.StreamPage.StreamKey="串流密钥"
19
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(链接)"
20
 Basic.AutoConfig.StreamPage.EncoderKey="编码器密钥"
21
+Basic.AutoConfig.StreamPage.ConnectedAccount="已连接的帐户"
22
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="通过带宽测试估计比特率(可能需要几分钟)"
23
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="优先选择硬件编码"
24
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="硬件编码可大量降低 CPU 的使用率,但要获得与软件编码相同的质量,可能需要更多的比特率。"
25
@@ -321,6 +324,8 @@
26
 Output.RecordError.EncodeErrorMsg="录制时发生了编码器错误。"
27
 Output.BadPath.Title="文件路径错误"
28
 Output.BadPath.Text="输出路径无效。请检查您的设置,并确认文件路径有效。"
29
+Output.NoBroadcast.Title="直播未设置"
30
+Output.NoBroadcast.Text="您需要先设置直播才能开始推流。"
31
 LogReturnDialog="日志上传成功"
32
 LogReturnDialog.Description="您的日志文件已上传。您现在可以分享URL用来调试。"
33
 LogReturnDialog.Description.Crash="您的崩溃报告已上传。您现在可以分享URL用来调试。"
34
@@ -360,6 +365,8 @@
35
 MissingFiles.Found="已找到"
36
 MissingFiles.AutoSearch="找到其他匹配的文件"
37
 MissingFiles.AutoSearchText="OBS 在文件夹中找到了其他匹配的缺失文件。您想要添加它们吗?"
38
+MissingFiles.NoMissing.Title="缺失文件检查"
39
+MissingFiles.NoMissing.Text="看起来没有缺少文件。"
40
 UpdateAvailable="有可用的更新"
41
 UpdateAvailable.Text="新的版本 %1.%2.%3 已可用。<a href='%4'> 点击这里下载</a>"
42
 Basic.DesktopDevice1="桌面音频"
43
@@ -423,6 +430,8 @@
44
 Basic.PropertiesView.FPS.Simple="简单的 FPS 值"
45
 Basic.PropertiesView.FPS.Rational="有理数 FPS 值"
46
 Basic.PropertiesView.FPS.ValidFPSRanges="FPS 的有效范围:"
47
+Basic.PropertiesView.UrlButton.Text="使用默认网络浏览器打开此链接?"
48
+Basic.PropertiesView.UrlButton.OpenUrl="打开网址"
49
 Basic.InteractionWindow="与'%1'交互"
50
 Basic.StatusBar.Reconnecting="断开, 重新连接在 %2 秒内 (尝试 %1)"
51
 Basic.StatusBar.AttemptingReconnect="尝试重新连接... (尝试 %1)"
52
@@ -477,6 +486,8 @@
53
 Basic.TransformWindow.BoundsType.ScaleToWidth="等比缩放到边框宽度"
54
 Basic.TransformWindow.BoundsType.ScaleToHeight="等比缩放到边框高度"
55
 Basic.TransformWindow.BoundsType.Stretch="拉伸"
56
+Basic.TransformWindow.Title="编辑 '%1 ' 的变换"
57
+Basic.TransformWindow.NoSelectedSource="未选择来源"
58
 Basic.Main.AddSourceHelp.Title="无法添加源"
59
 Basic.Main.AddSourceHelp.Text="你需要至少一个场景才能添加源。"
60
 Basic.Main.Scenes="场景"
61
@@ -488,6 +499,7 @@
62
 Basic.Main.StartReplayBuffer="开始回放缓存"
63
 Basic.Main.SaveReplay="保存回放"
64
 Basic.Main.StartStreaming="开始推流"
65
+Basic.Main.StartBroadcast="开始直播"
66
 Basic.Main.StartVirtualCam="启动虚拟摄像机"
67
 Basic.Main.StopRecording="停止录制"
68
 Basic.Main.PauseRecording="暂停录制"
69
@@ -495,7 +507,10 @@
70
 Basic.Main.StoppingRecording="停止录制..."
71
 Basic.Main.StopReplayBuffer="停止回放缓存"
72
 Basic.Main.StoppingReplayBuffer="正在停止回放缓存..."
73
+Basic.Main.SetupBroadcast="管理直播"
74
 Basic.Main.StopStreaming="停止推流"
75
+Basic.Main.StopBroadcast="结束直播"
76
+Basic.Main.AutoStopEnabled="(自动停止)"
77
 Basic.Main.StoppingStreaming="停止推流..."
78
 Basic.Main.ForceStopStreaming="停止流 (放弃延迟)"
79
 Basic.Main.ShowContextBar="显示源工具栏"
80
@@ -514,6 +529,7 @@
81
 Basic.MainMenu.File.Settings="设置(&S)"
82
 Basic.MainMenu.File.ShowSettingsFolder="打开设置文件夹"
83
 Basic.MainMenu.File.ShowProfileFolder="打开配置文件文件夹"
84
+Basic.MainMenu.File.ShowMissingFiles="检查缺少的文件"
85
 Basic.MainMenu.AlwaysOnTop="窗口置顶(&A)"
86
 Basic.MainMenu.File.Exit="退出(&X)"
87
 Basic.MainMenu.Edit="编辑(&E)"
88
@@ -627,6 +643,7 @@
89
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="横向平铺,底部(8 场景)"
90
 Basic.Settings.General.MultiviewLayout.Vertical.Left="纵向平铺,左侧(8 场景)"
91
 Basic.Settings.General.MultiviewLayout.Vertical.Right="纵向平铺,右侧(8 场景)"
92
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="横向平铺,顶部(18 场景)"
93
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="横向平铺,顶部(24 场景)"
94
 Basic.Settings.Stream="推流"
95
 Basic.Settings.Stream.StreamType="推流类型"
96
@@ -921,3 +938,69 @@
97
 ContextBar.MediaControls.PlaylistPrevious="播放列表中的上一项"
98
 ContextBar.MediaControls.MediaProperties="媒体属性"
99
 ContextBar.MediaControls.BlindSeek="媒体跳转小工具"
100
+YouTube.Auth.Ok="认证成功。\n您现在可以关闭此页面。"
101
+YouTube.Auth.NoCode="认证过程尚未完成。"
102
+YouTube.Auth.NoChannels="所选帐户上没有可用的频道"
103
+YouTube.Auth.WaitingAuth.Title="YouTube用户认证授权"
104
+YouTube.Auth.WaitingAuth.Text="请在您的外部浏览器中完成授权。<br>如果外部浏览器打不开,请前往此链接完成授权:<br>%1"
105
+YouTube.AuthError.Text="获取频道信息失败: %1"
106
+YouTube.Actions.WindowTitle="YouTube 直播设置 - 频道: %1"
107
+YouTube.Actions.CreateNewEvent="建立新直播"
108
+YouTube.Actions.ChooseEvent="选择现有直播"
109
+YouTube.Actions.Title="标题*"
110
+YouTube.Actions.MyBroadcast="我的直播"
111
+YouTube.Actions.Description="描述"
112
+YouTube.Actions.Privacy="隐私*"
113
+YouTube.Actions.Privacy.Private="私享"
114
+YouTube.Actions.Privacy.Public="公开"
115
+YouTube.Actions.Privacy.Unlisted="不公开列出"
116
+YouTube.Actions.Category="类别"
117
+YouTube.Actions.Thumbnail="缩略图"
118
+YouTube.Actions.Thumbnail.SelectFile="选择文件..."
119
+YouTube.Actions.Thumbnail.NoFileSelected="未选择文件"
120
+YouTube.Actions.Thumbnail.ClearFile="清除"
121
+YouTube.Actions.MadeForKids="此视频是面向儿童的内容吗?*"
122
+YouTube.Actions.MadeForKids.Yes="是,内容是面向儿童的"
123
+YouTube.Actions.MadeForKids.No="否,内容不是面向儿童的"
124
+YouTube.Actions.AdditionalSettings="其他设置:"
125
+YouTube.Actions.Latency="延迟"
126
+YouTube.Actions.Latency.Normal="正常"
127
+YouTube.Actions.Latency.Low="低"
128
+YouTube.Actions.Latency.UltraLow="极低"
129
+YouTube.Actions.EnableAutoStart="启用自动开始"
130
+YouTube.Actions.EnableAutoStop="启用自动停止"
131
+YouTube.Actions.AutoStartStop.TT="表示该预约的直播是否自动开始"
132
+YouTube.Actions.EnableDVR="启用 DVR"
133
+YouTube.Actions.360Video="360° 视频"
134
+YouTube.Actions.ScheduleForLater="计划稍后进行"
135
+YouTube.Actions.RememberSettings="记住这些设置"
136
+YouTube.Actions.Create_Ready="建立直播"
137
+YouTube.Actions.Create_GoLive="建立直播并开始推流"
138
+YouTube.Actions.Choose_Ready="选择直播"
139
+YouTube.Actions.Choose_GoLive="选择直播并开始串流"
140
+YouTube.Actions.Create_Schedule="计划直播"
141
+YouTube.Actions.Create_Schedule_Ready="计划并选择直播"
142
+YouTube.Actions.Dashboard="打开 YouTube Studio"
143
+YouTube.Actions.Error.Title="创建实时直播时出错"
144
+YouTube.Actions.Error.Text="访问 YouTube 时出现错误 '%1'.<br/>详细错误描述请在<a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>上查询"
145
+YouTube.Actions.Error.General="YouTube 访问错误。请检查您的网络连接或 YouTube 服务器能否访问。"
146
+YouTube.Actions.Error.NoBroadcastCreated="创建直播时发生错误 '%1'.<br/>详细错误描述请在<a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>上查询"
147
+YouTube.Actions.Error.NoStreamCreated="流未创建。请重新链接您的帐户。"
148
+YouTube.Actions.Error.YouTubeApi="YouTube API 错误。请查看日志文件以获取更多信息。"
149
+YouTube.Actions.Error.BroadcastNotFound="未找到所选择的广播。"
150
+YouTube.Actions.Error.FileMissing="选定的文件不存在。"
151
+YouTube.Actions.Error.FileOpeningFailed="打开选定文件失败。"
152
+YouTube.Actions.Error.FileTooLarge="选定的文件太大 (限制: 2 MiB)。"
153
+YouTube.Actions.EventsLoading="正在加载事件列表..."
154
+YouTube.Actions.EventCreated.Title="事件已创建"
155
+YouTube.Actions.EventCreated.Text="事件已成功创建。"
156
+YouTube.Actions.Stream="串流"
157
+YouTube.Actions.Stream.ScheduledFor="计划于 %1"
158
+YouTube.Actions.Stream.Resume="恢复中断的串流"
159
+YouTube.Actions.Stream.YTStudio="由 YouTube Studio 自动创建"
160
+YouTube.Actions.Notify.CreatingBroadcast="创建实时直播,请稍候..."
161
+YouTube.Actions.AutoStartStreamingWarning.Title="需要手动启动"
162
+YouTube.Actions.AutoStartStreamingWarning="此事件已禁用自动启动,请单击“开始直播”来开始。"
163
+YouTube.Actions.AutoStopStreamingWarning="您将无法重新连接。<br>您的串流将会停止并下线。"
164
+YouTube.Errors.liveStreamingNotEnabled="所选 YouTube 频道上未启用直播。<br/><br/>请访问 <a href='https://www.youtube.com/features'>youtube.com/features</a> 以获取更多信息。"
165
+YouTube.Errors.livePermissionBlocked="在选定的 YouTube 频道上直播不可用。<br/>请注意,在您的频道设置启用后可能需要等待长达24小时才能使用直播功能。<br/><br/>详情请查看 <a href='https://www.youtube.com/features'>youtube.com/features</a>。"
166
obs-studio-27.0.1.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-27.1.3.tar.xz/UI/data/locale/zh-TW.ini Changed
176
 
1
@@ -112,6 +112,7 @@
2
 Auth.InvalidScope.Text="已變更 %1 的認證要求。可能無法使用部份功能。"
3
 Auth.LoadingChannel.Title="正在載入頻道資訊…"
4
 Auth.LoadingChannel.Text="正在載入 %1 的頻道資訊,請稍候…"
5
+Auth.LoadingChannel.Error="無法取得頻道資訊。"
6
 Auth.ChannelFailure.Title="讀取頻道資訊失敗"
7
 Auth.ChannelFailure.Text="無法讀取 %1 頻道資訊\n\n%2: %3"
8
 Auth.Chat="聊天室"
9
@@ -134,7 +135,7 @@
10
 Basic.AutoConfig.ApplySettings="套用設定"
11
 Basic.AutoConfig.StartPage="用量資訊"
12
 Basic.AutoConfig.StartPage.SubTitle="指定想運用的場合"
13
-Basic.AutoConfig.StartPage.PrioritizeStreaming="為串流最佳化,錄影為次要的"
14
+Basic.AutoConfig.StartPage.PrioritizeStreaming="為串流最佳化,錄影為其次"
15
 Basic.AutoConfig.StartPage.PrioritizeRecording="僅為錄影最佳化,不會用於串流"
16
 Basic.AutoConfig.StartPage.PrioritizeVirtualCam="我只會使用虛擬相機"
17
 Basic.AutoConfig.VideoPage="影像設定"
18
@@ -154,6 +155,7 @@
19
 Basic.AutoConfig.StreamPage.GetStreamKey="取得串流金鑰"
20
 Basic.AutoConfig.StreamPage.MoreInfo="更多資訊"
21
 Basic.AutoConfig.StreamPage.UseStreamKey="使用串流金鑰"
22
+Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced="使用串流金鑰(進階設定)"
23
 Basic.AutoConfig.StreamPage.Service="服務"
24
 Basic.AutoConfig.StreamPage.Service.ShowAll="全部顯示..."
25
 Basic.AutoConfig.StreamPage.Service.Custom="自訂…"
26
@@ -161,6 +163,7 @@
27
 Basic.AutoConfig.StreamPage.StreamKey="串流金鑰"
28
 Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(連結)"
29
 Basic.AutoConfig.StreamPage.EncoderKey="編碼器金鑰"
30
+Basic.AutoConfig.StreamPage.ConnectedAccount="連結的帳號"
31
 Basic.AutoConfig.StreamPage.PerformBandwidthTest="藉由頻寬測試估計位元速率(可能需要幾分鐘)"
32
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="優先使用硬體編碼"
33
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="硬體編碼去除了大多數的 CPU 使用率,但可能需要更多的位元率以獲得同等的品質。"
34
@@ -321,6 +324,8 @@
35
 Output.RecordError.EncodeErrorMsg="錄影時編碼器發生錯誤。"
36
 Output.BadPath.Title="無效的路徑"
37
 Output.BadPath.Text="無效的輸出路徑。 請確認您的檔案路徑是正確的。"
38
+Output.NoBroadcast.Title="未設定直播"
39
+Output.NoBroadcast.Text="在開始串流前,您需要先設定直播。"
40
 LogReturnDialog="上傳 Log 成功"
41
 LogReturnDialog.Description="已上傳您的記錄檔。您現在可以透過分享這個 URL 來偵錯及尋求支援。"
42
 LogReturnDialog.Description.Crash="已上傳您的當機報告。您現在可以透過分享這個 URL 來偵錯。"
43
@@ -360,6 +365,8 @@
44
 MissingFiles.Found="找到"
45
 MissingFiles.AutoSearch="找到其他符合的檔案"
46
 MissingFiles.AutoSearchText="OBS 在資料夾中發現到其他符合的遺失檔案。是否加入?"
47
+MissingFiles.NoMissing.Title="遺失檔案檢查"
48
+MissingFiles.NoMissing.Text="似乎沒遺失檔案。"
49
 UpdateAvailable="現有新版本更新"
50
 UpdateAvailable.Text="版本 %1.%2.%3 已釋出。 <a href='%4'>請點此下載</a>"
51
 Basic.DesktopDevice1="輸出音效 1"
52
@@ -428,6 +435,9 @@
53
 Basic.PropertiesView.FPS.Simple="常用 FPS 值"
54
 Basic.PropertiesView.FPS.Rational="有理數 FPS 值"
55
 Basic.PropertiesView.FPS.ValidFPSRanges="FPS 的有效範圍:"
56
+Basic.PropertiesView.UrlButton.Text="您是否要在您的預設網頁瀏覽器開啟此連結?"
57
+Basic.PropertiesView.UrlButton.Text.Url="網址:%1"
58
+Basic.PropertiesView.UrlButton.OpenUrl="開啟網址"
59
 Basic.InteractionWindow="與「%1」互動"
60
 Basic.StatusBar.Reconnecting="已斷線,將在%2秒後重新連線 (已嘗試%1次)"
61
 Basic.StatusBar.AttemptingReconnect="嘗試重新連線... (已嘗試%1次)"
62
@@ -482,6 +492,8 @@
63
 Basic.TransformWindow.BoundsType.ScaleToWidth="等比例縮放至符合寬度"
64
 Basic.TransformWindow.BoundsType.ScaleToHeight="等比例縮放至符合高度"
65
 Basic.TransformWindow.BoundsType.Stretch="依外框變型"
66
+Basic.TransformWindow.Title="編輯「%1」的變型設定"
67
+Basic.TransformWindow.NoSelectedSource="未選擇來源"
68
 Basic.Main.AddSourceHelp.Title="無法新增來源"
69
 Basic.Main.AddSourceHelp.Text="您必須擁有至少一個場景才能新增來源。"
70
 Basic.Main.Scenes="場景"
71
@@ -493,6 +505,7 @@
72
 Basic.Main.StartReplayBuffer="開始重播緩衝"
73
 Basic.Main.SaveReplay="儲存重播"
74
 Basic.Main.StartStreaming="開始串流"
75
+Basic.Main.StartBroadcast="開始直播"
76
 Basic.Main.StartVirtualCam="啟動虛擬相機"
77
 Basic.Main.StopRecording="停止錄製"
78
 Basic.Main.PauseRecording="暫停錄影"
79
@@ -500,7 +513,10 @@
80
 Basic.Main.StoppingRecording="停止錄製..."
81
 Basic.Main.StopReplayBuffer="停止重播緩衝"
82
 Basic.Main.StoppingReplayBuffer="正在停止重播緩衝..."
83
+Basic.Main.SetupBroadcast="管理直播"
84
 Basic.Main.StopStreaming="停止串流"
85
+Basic.Main.StopBroadcast="結束直播"
86
+Basic.Main.AutoStopEnabled="(自動停止)"
87
 Basic.Main.StoppingStreaming="停止串流..."
88
 Basic.Main.ForceStopStreaming="停止實況(丟棄延遲)"
89
 Basic.Main.ShowContextBar="顯示來源工具列"
90
@@ -519,6 +535,7 @@
91
 Basic.MainMenu.File.Settings="設定 (&S)"
92
 Basic.MainMenu.File.ShowSettingsFolder="顯示設定資料夾"
93
 Basic.MainMenu.File.ShowProfileFolder="顯示設定檔資料夾"
94
+Basic.MainMenu.File.ShowMissingFiles="檢查遺失檔案"
95
 Basic.MainMenu.AlwaysOnTop="總是在最上層(&A)"
96
 Basic.MainMenu.File.Exit="離開 (&X)"
97
 Basic.MainMenu.Edit="編輯 (&E)"
98
@@ -632,6 +649,7 @@
99
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="橫排、底部(八個場景)"
100
 Basic.Settings.General.MultiviewLayout.Vertical.Left="直行、靠左(八個場景)"
101
 Basic.Settings.General.MultiviewLayout.Vertical.Right="直行、靠右(八個場景)"
102
+Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top="橫排、頂部(18 個場景)"
103
 Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top="橫排、頂部(24 個場景)"
104
 Basic.Settings.Stream="串流"
105
 Basic.Settings.Stream.StreamType="串流類型"
106
@@ -944,3 +962,69 @@
107
 ContextBar.MediaControls.PlaylistPrevious="播放清單中上一個"
108
 ContextBar.MediaControls.MediaProperties="媒體屬性"
109
 ContextBar.MediaControls.BlindSeek="媒體跳轉元件"
110
+YouTube.Auth.Ok="授權成功。\n您現可關閉本頁面。"
111
+YouTube.Auth.NoCode="授權程序未完成。"
112
+YouTube.Auth.NoChannels="選取帳戶沒有頻道"
113
+YouTube.Auth.WaitingAuth.Title="YouTube 使用者授權"
114
+YouTube.Auth.WaitingAuth.Text="請在 OBS 外的瀏覽器完成授權程序。<br>倘若未彈出瀏覽器視窗,請前往本連結完成授權程序:<br>%1"
115
+YouTube.AuthError.Text="無法取得頻道資訊:%1。"
116
+YouTube.Actions.WindowTitle="YouTube 直播設定-頻道:%1"
117
+YouTube.Actions.CreateNewEvent="建立新直播"
118
+YouTube.Actions.ChooseEvent="選擇現有直播"
119
+YouTube.Actions.Title="標題*"
120
+YouTube.Actions.MyBroadcast="我的直播"
121
+YouTube.Actions.Description="描述"
122
+YouTube.Actions.Privacy="瀏覽權限*"
123
+YouTube.Actions.Privacy.Private="私人"
124
+YouTube.Actions.Privacy.Public="公開"
125
+YouTube.Actions.Privacy.Unlisted="不公開"
126
+YouTube.Actions.Category="分類"
127
+YouTube.Actions.Thumbnail="縮圖"
128
+YouTube.Actions.Thumbnail.SelectFile="選擇檔案⋯"
129
+YouTube.Actions.Thumbnail.NoFileSelected="未選擇檔案"
130
+YouTube.Actions.Thumbnail.ClearFile="清除"
131
+YouTube.Actions.MadeForKids="這部影片是為兒童打造的嗎?*"
132
+YouTube.Actions.MadeForKids.Yes="是,這是為兒童打造的影片"
133
+YouTube.Actions.MadeForKids.No="否,這不是為兒童打造的影片"
134
+YouTube.Actions.AdditionalSettings="其他設定:"
135
+YouTube.Actions.Latency="延遲"
136
+YouTube.Actions.Latency.Normal="正常延遲"
137
+YouTube.Actions.Latency.Low="低延遲"
138
+YouTube.Actions.Latency.UltraLow="超低延遲"
139
+YouTube.Actions.EnableAutoStart="啟用自動開始功能"
140
+YouTube.Actions.EnableAutoStop="啟用自動停止功能"
141
+YouTube.Actions.AutoStartStop.TT="表示這個排定直播是否該自動開始"
142
+YouTube.Actions.EnableDVR="啟用 DVR 功能"
143
+YouTube.Actions.360Video="360 影片"
144
+YouTube.Actions.ScheduleForLater="排定稍後串流"
145
+YouTube.Actions.RememberSettings="記住這些設定"
146
+YouTube.Actions.Create_Ready="建立直播"
147
+YouTube.Actions.Create_GoLive="建立直播,開始串流"
148
+YouTube.Actions.Choose_Ready="選擇直播"
149
+YouTube.Actions.Choose_GoLive="選擇直播,開始串流"
150
+YouTube.Actions.Create_Schedule="排定直播"
151
+YouTube.Actions.Create_Schedule_Ready="排定及選擇直播"
152
+YouTube.Actions.Dashboard="開啟 YouTube Studio"
153
+YouTube.Actions.Error.Title="建立 Live 直播時發生錯誤"
154
+YouTube.Actions.Error.Text="存取 YouTube 時發生「%1」錯誤。<br/>詳細錯誤資訊請參閱 <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
155
+YouTube.Actions.Error.General="存取 YouTube 時發生錯誤。請檢查網路連線,並確認是否可以連線到 YouTube 伺服器。"
156
+YouTube.Actions.Error.NoBroadcastCreated="建立直播時發生「%1」錯誤。<br/>詳細錯誤資訊請參閱 <a href='https://developers.google.com/youtube/v3/live/docs/errors'>https://developers.google.com/youtube/v3/live/docs/errors</a>"
157
+YouTube.Actions.Error.NoStreamCreated="未建立串流。請重新連接您的帳號。"
158
+YouTube.Actions.Error.YouTubeApi="YouTube API 發生錯誤。請查看 Log 檔取得更多資訊。"
159
+YouTube.Actions.Error.BroadcastNotFound="找不到選取廣播。"
160
+YouTube.Actions.Error.FileMissing="找不到選取檔案。"
161
+YouTube.Actions.Error.FileOpeningFailed="開啟選取檔案時發生錯誤。"
162
+YouTube.Actions.Error.FileTooLarge="選取檔案大小過大(上限:2 MiB)。"
163
+YouTube.Actions.EventsLoading="正在載入事件清單⋯⋯"
164
+YouTube.Actions.EventCreated.Title="活動已建立"
165
+YouTube.Actions.EventCreated.Text="活動建立成功。"
166
+YouTube.Actions.Stream="串流"
167
+YouTube.Actions.Stream.ScheduledFor="已排程 %1"
168
+YouTube.Actions.Stream.Resume="繼續被中斷的直播"
169
+YouTube.Actions.Stream.YTStudio="YouTube Studio 自動建立"
170
+YouTube.Actions.Notify.CreatingBroadcast="正在建立 Live 直播,請稍候⋯⋯"
171
+YouTube.Actions.AutoStartStreamingWarning.Title="需要自行啟動"
172
+YouTube.Actions.AutoStartStreamingWarning="已停用本活動的「自動開始」功能。請點選「開始直播」進行直播。"
173
+YouTube.Actions.AutoStopStreamingWarning="您之後會無法重新連線。<br>您的串流會停止,而您本人則會進入離線狀態。"
174
+YouTube.Errors.liveStreamingNotEnabled="未在選取的 YouTube 頻道啟用即時串流功能。<br/><br/>請查閱 <a href='https://www.youtube.com/features'>youtube.com/features</a> 深入了解。"
175
+YouTube.Errors.livePermissionBlocked="選取的 YouTube 頻道不支援「即時串流」功能。<br/>請注意,在頻道設定啟用即時串流功能後,可能需要等待至多 24 小時才能使用串流功能。<br/><br/>請查閱 <a href='https://www.youtube.com/features'>youtube.com/features</a> 深入了解。"
176
obs-studio-27.0.1.tar.xz/UI/data/themes/Acri.qss -> obs-studio-27.1.3.tar.xz/UI/data/themes/Acri.qss Changed
747
 
1
@@ -1,44 +1,44 @@
2
 /* OBSTheme, main QApplication palette and QML values */
3
 OBSTheme {
4
-    window: #181819;
5
+    window: rgb(24,24,25);
6
     windowText: rgb(225,224,225);
7
     base: rgb(18,18,21);
8
     alternateBase: rgb(0,0,0);
9
     text: rgb(225,224,225);
10
-    button: #162458;
11
+    button: rgb(22,36,88);
12
     buttonText: rgb(225,224,225);
13
-    brightText: #484848;
14
+    brightText: rgb(72,72,72);
15
 
16
-    light: #162458;
17
-    mid: #181819;
18
+    light: rgb(22,36,88);
19
+    mid: rgb(24,24,25);
20
     dark: rgb(18,18,21);
21
     shadow: rgb(0,0,0);
22
 
23
-    highlight: #252458;
24
-    highlightText: #FFFFFF;
25
+    highlight: rgb(37,36,88);
26
+    highlightedText: rgb(255,255,255);
27
 
28
-    link: #605ee6;
29
-    linkVisited: #605ee6;
30
+    link: rgb(96,94,230);
31
+    linkVisited: rgb(96,94,230);
32
 }
33
 
34
 OBSTheme::disabled {
35
-    text: #484848;
36
-    buttonText: #484848;
37
-    brightText: #484848;
38
+    text: rgb(72,72,72);
39
+    buttonText: rgb(72,72,72);
40
+    brightText: rgb(72,72,72);
41
 }
42
 
43
 OBSTheme::inactive {
44
     highlight: rgb(48,47,48);
45
-    highlightText: rgb(255, 255, 255);
46
+    highlightedText: rgb(255,255,255);
47
 }
48
 
49
 /* General style, we override only what is needed. */
50
 QWidget {
51
-   background-color: #181819;
52
-   alternate-background-color: rgb(18,18,21);
53
-   color: rgb(225,224,225);
54
-   selection-background-color: #252458;
55
-   selection-color: white;
56
+   background-color: palette(window);
57
+   alternate-background-color: palette(base);
58
+   color: palette(text);
59
+   selection-background-color: palette(highlight);
60
+   selection-color: palette(highlighted-text);
61
    outline: none;
62
    font-family: "Open Sans", "Tahoma", "Arial", sans-serif;
63
    font-size: 12px;
64
@@ -49,11 +49,11 @@
65
 }
66
 
67
 QLabel:link {
68
-   color: #2a3a75;
69
+   color: rgb(42,58,117);
70
 }
71
 
72
 QMenu {
73
-   border: 1px solid #333336;
74
+   border: 1px solid rgb(51,51,54);
75
    padding: 4px;
76
 }
77
 
78
@@ -64,7 +64,7 @@
79
 
80
 * [frameShape="2"],
81
 * [frameShape="4"] {
82
-   border: 1px solid #333336;
83
+   border: 1px solid rgb(51,51,54);
84
 }
85
 
86
 
87
@@ -76,27 +76,27 @@
88
 /* Misc */
89
 
90
 QWidget::disabled {
91
-   color: #484848;
92
+   color: palette(bright-text);
93
 }
94
 
95
 * [themeID="error"] {
96
-   color: #d91740;
97
+   color: rgb(217,23,64);
98
 }
99
 
100
 * [themeID="warning"] {
101
-   color: #d9af17;
102
+   color: rgb(217,175,23);
103
 }
104
 
105
 /* Dropdown menus, Scenes box, Sources box */
106
 QAbstractItemView {
107
-   background-color: #181819;
108
-   border: 1px solid #333336;
109
+   background-color: palette(window);
110
+   border: 1px solid rgb(51,51,54);
111
 }
112
 
113
 /* Group Box */
114
 
115
 QGroupBox {
116
-   border: 2px solid #2f2f2f;
117
+   border: 2px solid rgb(47,47,47);
118
    margin-bottom: 8px;
119
    padding-top: 32px;
120
    font-weight: bold;
121
@@ -119,20 +119,20 @@
122
 
123
 /* Tooltips */
124
 QToolTip {
125
-   background-color: #212121;
126
+   background-color: rgb(33,33,33);
127
    color: rgb(205,205,205);
128
-   border: 1px solid #343335;
129
+   border: 1px solid rgb(52,51,53);
130
    border-radius: 4px;
131
 }
132
 
133
 /* Top Menu Bar Items */
134
 QMenuBar::item {
135
-   background-color: rgb(24,24,25);
136
+   background-color: palette(window);
137
    padding: 6px;
138
 }
139
 
140
 QMenuBar::item:selected {
141
-   background: #2a3a75;
142
+   background: rgb(42,58,117);
143
 }
144
 
145
 /* Listbox item */
146
@@ -160,15 +160,15 @@
147
 }
148
 
149
 QDockWidget {
150
-   background: #181819;
151
+   background: palette(window);
152
    border: none;
153
    font-size: 14px;
154
    font-weight: bold;
155
-   border-bottom: 2px solid #2f2f2f;
156
+   border-bottom: 2px solid rgb(47,47,47);
157
 }
158
 
159
 QDockWidget::title {
160
-   border-bottom: 2px solid #2f2f2f;
161
+   border-bottom: 2px solid rgb(47,47,47);
162
    margin-left: 5px;
163
    margin-right: 5px;
164
    padding-top: 0px;
165
@@ -198,16 +198,16 @@
166
 QListWidget#scenes,
167
 SourceListWidget {
168
    border: none;
169
-   border-bottom: 2px solid #2f2f2f;
170
+   border-bottom: 2px solid rgb(47,47,47);
171
 }
172
 
173
 SourceTree {
174
    border: none;
175
-   border-bottom: 1px solid #2f2f2f;
176
+   border-bottom: 1px solid rgb(47,47,47);
177
 }
178
 
179
 SourceTree QLineEdit {
180
-   background-color: #0c101e;
181
+   background-color: rgb(12,16,30);
182
    padding: 2px;
183
    margin: -2px 6px -2px 3px;
184
    font-size: 12px;
185
@@ -237,15 +237,15 @@
186
 /* Listbox item selected, unfocused */
187
 QListWidget::item:hover,
188
 SourceTree::item:hover {
189
-   background-color: #212121;
190
-   border: 1px solid #333336;
191
+   background-color: rgb(33,33,33);
192
+   border: 1px solid rgb(51,51,54);
193
 }
194
 
195
 /* Listbox item selected */
196
 QListWidget::item:selected,
197
 SourceTree::item:selected {
198
-   background-color: #131a30;
199
-   border: 1px solid #252a45;
200
+   background-color: rgb(19,26,48);
201
+   border: 1px solid rgb(37,42,69);
202
 }
203
 
204
 /* ScrollBars */
205
@@ -264,7 +264,7 @@
206
 }
207
 
208
 QScrollBar::handle:vertical {
209
-   background-color: #2f2f2f;
210
+   background-color: rgb(47,47,47);
211
    min-height: 20px;
212
    margin: 0px 3px;
213
    border-radius: 0px;
214
@@ -292,7 +292,7 @@
215
 }
216
 
217
 QScrollBar::handle:horizontal {
218
-   background-color: #2f2f2f;
219
+   background-color: rgb(47,47,47);
220
    min-width: 20px;
221
    margin: 3px 0px;
222
    border-radius: 0px;
223
@@ -332,18 +332,18 @@
224
 /* Scenes and Sources toolbar */
225
 
226
 QToolBar {
227
-   background-color: rgb(24,24,25);
228
+   background-color: palette(window);
229
    margin-top: 4px;
230
 }
231
 
232
 QToolButton:hover {
233
-   background-color: #2a3a75;
234
-   border: 1px solid #233166;
235
+   background-color: rgb(42,58,117);
236
+   border: 1px solid rgb(35,49,102);
237
    border-radius: none;
238
 }
239
 
240
 QToolButton:pressed {
241
-   background-color: #161f41;
242
+   background-color: rgb(22,31,65);
243
    border-radius: none;
244
 }
245
 
246
@@ -382,7 +382,7 @@
247
 /* Tab Widget */
248
 
249
 QTabWidget::pane { /* The tab widget frame */
250
-   border-top: 1px solid #2f2f2f;
251
+   border-top: 1px solid rgb(47,47,47);
252
 }
253
 
254
 QTabWidget::tab-bar {
255
@@ -390,8 +390,8 @@
256
 }
257
 
258
 QTabBar::tab {
259
-   background-color: #212121;
260
-   border: 1px solid #333336;
261
+   background-color: rgb(33,33,33);
262
+   border: 1px solid rgb(51,51,54);
263
    min-width: 8ex;
264
    padding-top: 4px;
265
    padding-bottom: 4px;
266
@@ -403,21 +403,22 @@
267
 }
268
 
269
 QTabBar::tab:selected {
270
-   background-color: #131a30;
271
-   border-color: #252a45;
272
+   background-color: rgb(19,26,48);
273
+   border-color: rgb(37,42,69);
274
 }
275
 
276
 QTabBar::tab:hover {
277
-   background-color: #233166;
278
-   border-color: #364683;
279
+   background-color: rgb(35,49,102);
280
+   border-color: rgb(54,70,131);
281
 }
282
 
283
 QTabBar::tab:pressed {
284
-   background-color: #161f41;
285
+   background-color: rgb(22,31,65);
286
 }
287
 
288
 /* ComboBox */
289
 
290
+QDateTimeEdit,
291
 QComboBox {
292
    background-color: rgb(40,40,42);
293
    border-style: solid;
294
@@ -427,32 +428,43 @@
295
    padding-left: 10px;
296
 }
297
 
298
+QDateTimeEdit:hover,
299
+QComboBox:hover {
300
+    background-color: rgb(61,61,63);
301
+}
302
+
303
+QDateTimeEdit::drop-down,
304
 QComboBox::drop-down {
305
    border:none;
306
    border-left: 1px solid rgba(31,30,31,155);
307
    width: 20px;
308
 }
309
 
310
+QDateTimeEdit::down-arrow,
311
 QComboBox::down-arrow {
312
    qproperty-alignment: AlignTop;
313
    image: url(./Dark/updown.svg);
314
    width: 100%;
315
 }
316
 
317
+QDateTimeEdit:on,
318
 QComboBox:on {
319
-   background-color: #2a3a75;
320
+   background-color: rgb(42,58,117);
321
 }
322
 
323
+QDateTimeEdit:editable,
324
 QComboBox:editable {
325
    border-top-left-radius: 0px;
326
    border-bottom-left-radius: 0px;
327
 }
328
 
329
+QDateTimeEdit::drop-down:editable,
330
 QComboBox::drop-down:editable {
331
    border-top-right-radius: 3px;
332
    border-bottom-right-radius: 3px;
333
 }
334
 
335
+QDateTimeEdit::down-arrow:editable,
336
 QComboBox::down-arrow:editable {
337
    qproperty-alignment: AlignTop;
338
    image: url(./Dark/down.svg);
339
@@ -509,15 +521,15 @@
340
 }
341
 
342
 QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed {
343
-   background-color: rgb(24,24,25);
344
+   background-color: palette(window);
345
 }
346
 
347
 QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off {
348
-   background-color: rgb(24,24,25);
349
+   background-color: palette(window);
350
 }
351
 
352
 QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off {
353
-   background-color: rgb(24,24,25);
354
+   background-color: palette(window);
355
 }
356
 
357
 QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
358
@@ -534,35 +546,45 @@
359
 /* Buttons */
360
 
361
 QPushButton {
362
-   color: rgb(225,224,225);
363
-   background-color: #162458;
364
-   border: 1px solid #233166;
365
+   color: palette(text);
366
+   background-color: palette(button);
367
+   border: 1px solid rgb(35,49,102);
368
    padding: 6px 20px;
369
    margin: 1px;
370
 }
371
 
372
 QPushButton::flat {
373
-   background-color: rgb(24,24,25);
374
+   background-color: palette(window);
375
    border: none;
376
 }
377
 
378
 QPushButton:checked {
379
-   background-color: #581624;
380
-   border-color: #84162d;
381
+   background-color: rgb(88,22,36);
382
+   border-color: rgb(132,22,45);
383
 }
384
 
385
 QPushButton:hover {
386
-   background-color: #2a3a75;
387
-   border: 1px solid #364683;
388
+   background-color: rgb(42,58,117);
389
+   border: 1px solid rgb(54,70,131);
390
+}
391
+
392
+QPushButton:checked:hover {
393
+   background-color: rgb(116,32,49);
394
+   border-color: rgb(176,12,47);
395
 }
396
 
397
 QPushButton:pressed {
398
-   background-color: #161f41;
399
+   background-color: rgb(22,31,65);
400
+}
401
+
402
+QPushButton:checked:pressed {
403
+   background-color: rgb(63,21,30);
404
+   border-color: rgb(132,22,45);
405
 }
406
 
407
 QPushButton:disabled {
408
-   border: 1px solid #232426;
409
-   background-color: #1a1a1b;
410
+   border: 1px solid rgb(35,36,38);
411
+   background-color: rgb(26,26,27);
412
 }
413
 
414
 QPushButton::flat:hover,
415
@@ -573,14 +595,14 @@
416
 /* Progress Bar */
417
 
418
 QProgressBar {
419
-   background: #101010;
420
-   border: 2px solid #363636;
421
+   background: rgb(16,16,16);
422
+   border: 2px solid rgb(54,54,54);
423
    border-radius: 0px;
424
    text-align: center;
425
 }
426
 
427
 QProgressBar::chunk {
428
-   background-color: #2a3a75;
429
+   background-color: rgb(42,58,117);
430
 }
431
 
432
 /* Sliders */
433
@@ -588,7 +610,7 @@
434
 QSlider::groove:horizontal {
435
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
436
        stop: 0 rgb(31,30,31),
437
-       stop: 0.75 rgb(50, 49, 50));
438
+       stop: 0.75 rgb(50,49,50));
439
    height: 4px;
440
    border: none;
441
    border-radius: 2px;
442
@@ -599,7 +621,7 @@
443
        stop: 0 rgb(240,239,240),
444
        stop: 0.25 rgb(200,199,200),
445
        stop: 1 rgb(162,161,162));
446
-   border: 1px solid rgb(24,24,25);
447
+   border: 1px solid palette(window);
448
    border-radius: 3px;
449
    height: 10px;
450
    width: 18px;
451
@@ -614,20 +636,20 @@
452
 }
453
 
454
 QSlider::sub-page:horizontal {
455
-   background-color: #2a3a75;
456
+   background-color: rgb(42,58,117);
457
 }
458
 
459
 QSlider::sub-page:horizontal:disabled {
460
    background-color: QLinearGradient(x1: 0, y1: 1, x2: 0, y2: 0,
461
        stop: 0 rgb(26,25,26),
462
-       stop: 0.75 rgb(10, 10, 10));
463
+       stop: 0.75 rgb(10,10,10));
464
    border-radius: 2px;
465
 }
466
 
467
 QSlider::groove:vertical {
468
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0,
469
        stop: 0 rgb(31,30,31),
470
-       stop: 0.75 rgb(50, 49, 50));
471
+       stop: 0.75 rgb(50,49,50));
472
    width: 4px;
473
    border: none;
474
    border-radius: 2px;
475
@@ -638,7 +660,7 @@
476
        stop: 0 rgb(240,239,240),
477
        stop: 0.25 rgb(200,199,200),
478
        stop: 1 rgb(162,161,162));
479
-   border: 1px solid rgb(24,24,25);
480
+   border: 1px solid palette(window);
481
    border-radius: 3px;
482
    width: 10px;
483
    height: 18px;
484
@@ -653,13 +675,13 @@
485
 }
486
 
487
 QSlider::add-page:vertical {
488
-   background-color: #2a3a75;
489
+   background-color: rgb(42,58,117);
490
 }
491
 
492
 QSlider::add-page:vertical:disabled {
493
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0,
494
        stop: 0 rgb(26,25,26),
495
-       stop: 0.75 rgb(10, 10, 10));
496
+       stop: 0.75 rgb(10,10,10));
497
    border-radius: 2px;
498
 }
499
 
500
@@ -675,15 +697,15 @@
501
 
502
 VolumeMeter {
503
 
504
-   qproperty-backgroundNominalColor: #42740c;
505
-   qproperty-backgroundWarningColor: #988F0F;
506
-   qproperty-backgroundErrorColor: #802004;
507
-   qproperty-foregroundNominalColor: #84D82B;
508
-   qproperty-foregroundWarningColor: #E4D717;
509
-   qproperty-foregroundErrorColor: #D74116;
510
-   qproperty-magnitudeColor: rgb(49, 54, 59); /* Blue-gray */
511
-   qproperty-majorTickColor: rgb(239, 240, 241); /* White */
512
-   qproperty-minorTickColor: rgb(118, 121, 124); /* Light Gray */
513
+   qproperty-backgroundNominalColor: rgb(66,116,12);
514
+   qproperty-backgroundWarningColor: rgb(152,143,15);
515
+   qproperty-backgroundErrorColor: rgb(128,32,4);
516
+   qproperty-foregroundNominalColor: rgb(132,216,43);
517
+   qproperty-foregroundWarningColor: rgb(228,215,23);
518
+   qproperty-foregroundErrorColor: rgb(215,65,22);
519
+   qproperty-magnitudeColor: rgb(49,54,59); /* Blue-gray */
520
+   qproperty-majorTickColor: rgb(239,240,241); /* White */
521
+   qproperty-minorTickColor: rgb(118,121,124); /* Light Gray */
522
    qproperty-peakDecayRate: 23.4; /* Override of the standard PPM Type I rate. */
523
 }
524
 
525
@@ -852,12 +874,12 @@
526
 /* Label warning/error */
527
 
528
 QLabel#warningLabel {
529
-   color: rgb(192, 128, 0);
530
+   color: rgb(192,128,0);
531
    font-weight: bold;
532
 }
533
 
534
 QLabel#errorLabel {
535
-   color: rgb(192, 0, 0);
536
+   color: rgb(192,0,0);
537
    font-weight: bold;
538
 }
539
 
540
@@ -872,7 +894,7 @@
541
 OBSBasicProperties,
542
 #OBSBasicSettings,
543
 #OBSBasicFilters {
544
-   background: #101010;
545
+   background: rgb(16,16,16);
546
 }
547
 
548
 FocusList::item {
549
@@ -917,13 +939,13 @@
550
 }
551
 
552
 * [themeID="aboutHLayout"] {
553
-   background-color: rgb(8, 8, 11);
554
+   background-color: rgb(8,8,11);
555
 }
556
 
557
 /* Preview background color */
558
 
559
 OBSQTDisplay {
560
-   qproperty-displayBackgroundColor: #28282A;
561
+   qproperty-displayBackgroundColor: rgb(40,40,42);
562
 }
563
 
564
 /* Preview/Program labels */
565
@@ -954,15 +976,15 @@
566
 /* Table */
567
 
568
 QTableView {
569
-    gridline-color: #333336;
570
+    gridline-color: rgb(51,51,54);
571
 }
572
 
573
 QHeaderView {
574
     border: none;
575
 }
576
 QHeaderView::section {
577
-    background-color: #101010;
578
-    border: 1px solid #333336;
579
+    background-color: rgb(16,16,16);
580
+    border: 1px solid rgb(51,51,54);
581
     border-left: none;
582
 }
583
 *[themeID="trashIcon"] {
584
@@ -1041,11 +1063,11 @@
585
 }
586
 
587
 QPushButton#extraPanelDelete:hover {
588
-     background-color: #2a3a75;
589
+     background-color: rgb(42,58,117);
590
 }
591
 
592
 QPushButton#extraPanelDelete:pressed {
593
-    background-color: #161f41;
594
+    background-color: rgb(22,31,65);
595
 }
596
 
597
 OBSMissingFiles {
598
@@ -1084,7 +1106,7 @@
599
 }
600
 
601
 *[gridMode="false"] SceneTree#scenes {
602
-   border-bottom: 2px solid #2f2f2f;
603
+   border-bottom: 2px solid rgb(47,47,47);
604
 }
605
 
606
 *[gridMode="true"] SceneTree::item {
607
@@ -1110,7 +1132,7 @@
608
    height: 5px;
609
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
610
        stop: 0 rgb(31,30,31),
611
-       stop: 0.75 rgb(50, 49, 50));
612
+       stop: 0.75 rgb(50,49,50));
613
    border: none;
614
    border-radius: 2px;
615
 }
616
@@ -1119,13 +1141,13 @@
617
    height: 5px;
618
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
619
        stop: 0 rgb(31,30,31),
620
-       stop: 0.75 rgb(50, 49, 50));
621
+       stop: 0.75 rgb(50,49,50));
622
    border: none;
623
    border-radius: 2px;
624
 }
625
 
626
 QSlider::handle:horizontal[themeID="tBarSlider"] {
627
-   background-color: #d2d2d2;
628
+   background-color: rgb(210,210,210);
629
    width: 14px;
630
    height: 28px;
631
    margin: -28px 0px;
632
@@ -1156,3 +1178,113 @@
633
 * [themeID="previousIcon"] {
634
     qproperty-icon: url(./Dark/media/media_previous.svg);
635
 }
636
+
637
+/* YouTube Integration */
638
+OBSYoutubeActions {
639
+    qproperty-thumbPlaceholder: url(./Dark/sources/image.svg);
640
+}
641
+
642
+#thumbnailPreview {
643
+   background-color: rgb(40,40,42);
644
+}
645
+
646
+#ytEventList QLabel {
647
+    color: rgb(225,224,225);
648
+   background-color: #162458;
649
+   border: 1px solid #233166;
650
+   padding: 6px 20px;
651
+   margin: 1px;
652
+}
653
+
654
+#ytEventList QLabel:hover {
655
+    background-color: #2a3a75;
656
+   border: 1px solid #364683;
657
+}
658
+
659
+#ytEventList QLabel[isSelectedEvent=true] {
660
+    background-color: #581624;
661
+   border-color: #84162d;
662
+}
663
+
664
+/* Calendar Widget */
665
+QDateTimeEdit::down-arrow {
666
+    qproperty-alignment: AlignTop;
667
+    image: url(./Dark/down.svg);
668
+    width: 100%;
669
+}
670
+
671
+/* Calendar Top Bar */
672
+QCalendarWidget QWidget#qt_calendar_navigationbar {
673
+    background-color: rgb(58,57,58);
674
+    padding: 4px 8px;
675
+}
676
+
677
+/* Calendar Top Bar Buttons */
678
+QCalendarWidget QToolButton {
679
+    color: rgb(225,224,225);
680
+   background-color: #162458;
681
+   border: 1px solid #233166;
682
+   padding: 6px 20px;
683
+   margin: 1px;
684
+}
685
+
686
+#qt_calendar_monthbutton::menu-indicator {
687
+    image: url(./Dark/down.svg);
688
+    subcontrol-position: right;
689
+    padding-top: 2px;
690
+    padding-right: 8px;
691
+    height: 10px;
692
+    width: 10px;
693
+}
694
+
695
+QCalendarWidget #qt_calendar_prevmonth {
696
+    padding: 6px;
697
+    qproperty-icon: url(./Dark/left.svg);
698
+    icon-size: 16px, 16px;
699
+}
700
+
701
+QCalendarWidget #qt_calendar_nextmonth {
702
+    padding: 6px;
703
+    qproperty-icon: url(./Dark/expand.svg);
704
+    icon-size: 16px, 16px;
705
+}
706
+
707
+QCalendarWidget QToolButton:hover {
708
+    background-color: #2a3a75;
709
+   border: 1px solid #364683;
710
+}
711
+
712
+QCalendarWidget QToolButton:pressed {
713
+    background-color: #161f41;
714
+}
715
+
716
+/* Month Dropdown Menu */
717
+QCalendarWidget QMenu {
718
+    
719
+}
720
+/* Year spinbox */
721
+QCalendarWidget QSpinBox {
722
+    background-color: rgb(8,8,11);
723
+    border: none;
724
+    margin: 0px 3px 0px 0px;
725
+    padding: 4px 16px;
726
+}
727
+
728
+QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; }
729
+QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;}
730
+QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; }
731
+QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; }
732
+
733
+/* Days of the Week Bar */
734
+QCalendarWidget QWidget { alternate-background-color: #131a30; }
735
+
736
+QCalendarWidget QAbstractItemView:enabled {
737
+    background-color: rgb(31,30,31);
738
+    color: rgb(225,224,225);
739
+    selection-background-color: rgb(25,51,75);
740
+    selection-color: rgb(225,224,225);
741
+}
742
+
743
+QCalendarWidget QAbstractItemView:disabled {
744
+    color: rgb(122,121,122);
745
+}
746
\ No newline at end of file
747
obs-studio-27.0.1.tar.xz/UI/data/themes/Dark.qss -> obs-studio-27.1.3.tar.xz/UI/data/themes/Dark.qss Changed
629
 
1
@@ -49,10 +49,10 @@
2
     shadow: rgb(11,10,11); /* veryVeryDark */
3
 
4
     highlight: rgb(42,130,218); /* blue */
5
-    highlightText: rgb(0,0,0);
6
+    highlightedText: rgb(0,0,0);
7
 
8
-    link: rgb(114, 162, 255); /* OBS blue */
9
-    linkVisited: rgb(114, 162, 255); /* OBS blue */
10
+    link: rgb(114,162,255); /* OBS blue */
11
+    linkVisited: rgb(114,162,255); /* OBS blue */
12
 }
13
 
14
 OBSTheme::disabled {
15
@@ -63,47 +63,47 @@
16
 
17
 OBSTheme::inactive {
18
     highlight: rgb(48,47,48);
19
-    highlightText: rgb(255, 255, 255);
20
+    highlightedText: rgb(255,255,255);
21
 }
22
 
23
 
24
 /* General style, we override only what is needed. */
25
 QWidget {
26
-    background-color: rgb(58,57,58); /* dark */
27
-    alternate-background-color: rgb(31,30,31); /* veryDark */
28
-    color: rgb(225,224,225); /* veryLight */
29
-    selection-background-color: rgb(42,130,218); /* blue */
30
-    selection-color: black;
31
+    background-color: palette(window);
32
+    alternate-background-color: palette(base);
33
+    color: palette(window-text);
34
+    selection-background-color: palette(highlight);
35
+    selection-color: palette(highlighted-text);
36
 }
37
 
38
 * [frameShape="1"], * [frameShape="2"], * [frameShape="3"], * [frameShape="4"], * [frameShape="5"], * [frameShape="6"] {
39
-    border: 1px solid rgb(31,30,31);
40
+    border: 1px solid palette(base);
41
 }
42
 
43
 
44
 /* Misc */
45
 
46
 QWidget::disabled {
47
-    color: 2px solid rgb(200,199,200); /* lighter */
48
+    color: 2px solid palette(bright-text);
49
 }
50
 
51
 QAbstractItemView, QStackedWidget#stackedMixerArea QWidget {
52
-    background-color: rgb(31,30,31); /* veryDark */
53
+    background-color: palette(base);
54
 }
55
 
56
 QToolTip {
57
-    background-color: rgb(31,30,31); /* veryDark */
58
+    background-color: palette(base);
59
     color: rgb(205,205,205);
60
     border: none;
61
 }
62
 
63
 QMenuBar::item {
64
-    background-color: rgb(58,57,58); /* dark */
65
+    background-color: palette(window);
66
 }
67
 
68
 QListWidget::item:selected:!active,
69
 SourceTree::item:selected:!active {
70
-    color: rgb(255, 255, 255);
71
+    color: rgb(255,255,255);
72
     background-color: rgb(48,47,48);
73
 }
74
 
75
@@ -146,7 +146,7 @@
76
 /* Group Box */
77
 
78
 QGroupBox {
79
-    border: 1px solid rgb(31,30,31); /* veryDark */;
80
+    border: 1px solid palette(base);
81
     border-radius: 5px;
82
     padding-top: 24px;
83
     font-weight: bold;
84
@@ -162,12 +162,12 @@
85
 /* ScrollBars */
86
 
87
 ::corner {
88
-    background-color: rgb(58,57,58); /* dark */
89
+    background-color: palette(window);
90
     border: none;
91
 }
92
 
93
 QScrollBar:vertical {
94
-    background-color: rgb(58,57,58);
95
+    background-color: palette(window);
96
     width: 14px;
97
     margin: 0px;
98
 }
99
@@ -194,7 +194,7 @@
100
 }
101
 
102
 QScrollBar:horizontal {
103
-    background-color: rgb(58,57,58); /* dark */
104
+    background-color: palette(window);
105
     height: 14px;
106
     margin: 0px;
107
 }
108
@@ -241,7 +241,7 @@
109
 /* Scenes and Sources toolbar */
110
 
111
 QToolBar {
112
-    background-color: rgb(58,57,58); /* dark */
113
+    background-color: palette(window);
114
     border: none;
115
 }
116
 
117
@@ -251,7 +251,7 @@
118
 }
119
 
120
 QToolButton:pressed {
121
-    background-color: rgb(31,30,31); /* veryDark */
122
+    background-color: palette(base);
123
     border-radius: none;
124
 }
125
 
126
@@ -291,7 +291,7 @@
127
 /* Tab Widget */
128
 
129
 QTabWidget::pane { /* The tab widget frame */
130
-    border-top: 1px solid rgb(31,30,31); /* veryDark */
131
+    border-top: 1px solid palette(base); /* veryDark */
132
 }
133
 
134
 QTabWidget::tab-bar {
135
@@ -322,7 +322,7 @@
136
 }
137
 
138
 QTabBar::tab:selected {
139
-    background-color: rgb(31,30,31); /* veryDark */
140
+    background-color: palette(base);
141
 }
142
 
143
 QTabBar::tab:hover {
144
@@ -330,12 +330,13 @@
145
 }
146
 
147
 QTabBar::tab:pressed {
148
-    background-color: rgb(31,30,31); /* veryDark */
149
+    background-color: palette(base);
150
 }
151
 
152
 
153
 /* ComboBox */
154
 
155
+QDateTimeEdit,
156
 QComboBox {
157
     background-color: rgb(76,76,76);
158
     border-style: solid;
159
@@ -346,36 +347,43 @@
160
     padding-left: 10px;
161
 }
162
 
163
+QDateTimeEdit:hover,
164
 QComboBox:hover {
165
-    background-color: rgb(88,87,88);
166
+    background-color: palette(button);
167
 }
168
 
169
+QDateTimeEdit::drop-down,
170
 QComboBox::drop-down {
171
     border:none;
172
     border-left: 1px solid rgba(31,30,31,155); /* veryDark */
173
     width: 20px;
174
 }
175
 
176
+QDateTimeEdit::down-arrow,
177
 QComboBox::down-arrow {
178
     qproperty-alignment: AlignTop;
179
     image: url(./Dark/updown.svg);
180
     width: 100%;
181
 }
182
 
183
+QDateTimeEdit:on,
184
 QComboBox:on {
185
-    background-color: rgb(31,30,31); /* veryDark */
186
+    background-color: palette(base);
187
 }
188
 
189
+QDateTimeEdit:editable,
190
 QComboBox:editable {
191
     border-top-left-radius: 0px;
192
     border-bottom-left-radius: 0px;
193
 }
194
 
195
+QDateTimeEdit::drop-down:editable,
196
 QComboBox::drop-down:editable {
197
     border-top-right-radius: 3px;
198
     border-bottom-right-radius: 3px;
199
 }
200
 
201
+QDateTimeEdit::down-arrow:editable,
202
 QComboBox::down-arrow:editable {
203
     qproperty-alignment: AlignTop;
204
     image: url(./Dark/down.svg);
205
@@ -386,7 +394,7 @@
206
 /* Textedits etc */
207
 
208
 QLineEdit, QTextEdit, QPlainTextEdit {
209
-    background-color: rgb(31,30,31); /* veryDark */
210
+    background-color: palette(base);
211
     border: none;
212
     border-radius: 3px;
213
     padding: 2px 2px 3px 7px;
214
@@ -395,7 +403,7 @@
215
 /* Spinbox and doubleSpinbox */
216
 
217
 QSpinBox, QDoubleSpinBox {
218
-    background-color: rgb(31,30,31); /* veryDark */
219
+    background-color: palette(base);
220
     border: none;
221
     border-radius: 3px;
222
     margin: 0px 3px 0px 0px;
223
@@ -407,7 +415,7 @@
224
     subcontrol-position: top right; /* position at the top right corner */
225
 
226
     background-color: rgb(76,76,76);
227
-    border: 1px solid rgb(31,30,31); /* veryDark */
228
+    border: 1px solid palette(base);
229
     border-radius: 3px;
230
     border-width: 0;
231
     border-bottom-left-radius: 0;
232
@@ -419,7 +427,7 @@
233
     subcontrol-origin: margin;
234
     subcontrol-position: bottom right; /* position at the top right corner */
235
     background-color: rgb(76,76,76);
236
-    border: 1px solid rgb(31,30,31); /* veryDark */
237
+    border: 1px solid palette(base);
238
     border-radius: 3px;
239
     border-width: 0;
240
     border-top-left-radius: 0;
241
@@ -432,15 +440,15 @@
242
 }
243
 
244
 QSpinBox::up-button:pressed, QSpinBox::down-button:pressed, QDoubleSpinBox::up-button:pressed, QDoubleSpinBox::down-button:pressed {
245
-    background-color: rgb(58,57,58); /* dark */
246
+    background-color: palette(window);
247
 }
248
 
249
 QSpinBox::up-button:disabled, QSpinBox::up-button:off, QSpinBox::down-button:disabled, QSpinBox::down-button:off {
250
-    background-color: rgb(58,57,58); /* dark */
251
+    background-color: palette(window);
252
 }
253
 
254
 QDoubleSpinBox::up-button:disabled, QDoubleSpinBox::up-button:off, QDoubleSpinBox::down-button:disabled, QDoubleSpinBox::down-button:off {
255
-    background-color: rgb(58,57,58); /* dark */
256
+    background-color: palette(window);
257
 }
258
 
259
 QSpinBox::up-arrow, QDoubleSpinBox::up-arrow {
260
@@ -457,7 +465,7 @@
261
 /* Buttons */
262
 
263
 QPushButton {
264
-    color: rgb(225,224,225); /* veryLight */
265
+    color: palette(window-text);
266
     background-color: rgb(76,76,76);
267
     border: none;
268
     border-radius: 3px;
269
@@ -467,7 +475,11 @@
270
 }
271
 
272
 QPushButton::flat {
273
-    background-color: rgb(58,57,58); /* dark */
274
+    background-color: palette(window);
275
+}
276
+
277
+QPushButton:checked {
278
+    background-color: palette(base);
279
 }
280
 
281
 QPushButton:hover {
282
@@ -475,11 +487,11 @@
283
 }
284
 
285
 QPushButton:pressed {
286
-    background-color: rgb(31,30,31); /* veryDark */
287
+    background-color: palette(base);
288
 }
289
 
290
-QPushButton:checked {
291
-    background-color: rgb(122,121,122); /* light */
292
+QPushButton:disabled {
293
+    background-color: rgb(46,45,46);
294
 }
295
 
296
 QPushButton::menu-indicator {
297
@@ -499,8 +511,8 @@
298
 }
299
 
300
 QSlider::handle:horizontal {
301
-    background-color: #d2d2d2;
302
-    border: 1px solid rgb(58,57,58);
303
+    background-color: rgb(210,210,210);
304
+    border: 1px solid palette(window);
305
     border-radius: 3px;
306
     height: 10px;
307
     width: 18px;
308
@@ -508,16 +520,16 @@
309
 }
310
 
311
 QSlider::handle:horizontal:pressed {
312
-    background-color: #d2d2d2;
313
+    background-color: rgb(210,210,210);
314
 }
315
 
316
 QSlider::sub-page:horizontal {
317
-    background-color: rgb(42,130,218); /* blue */
318
+    background-color: palette(highlight);
319
     border-radius: 2px;
320
 }
321
 
322
 QSlider::sub-page:horizontal:disabled {
323
-    background-color: rgb(50, 49, 50); /* dark */
324
+    background-color: rgb(50,49,50); /* dark */
325
     border-radius: 2px;
326
 }
327
 
328
@@ -529,8 +541,8 @@
329
 }
330
 
331
 QSlider::handle:vertical {
332
-    background-color: #d2d2d2;
333
-    border: 1px solid rgb(58,57,58);
334
+    background-color: rgb(210,210,210);
335
+    border: 1px solid palette(window);
336
     border-radius: 3px;
337
     width: 10px;
338
     height: 18px;
339
@@ -538,21 +550,21 @@
340
 }
341
 
342
 QSlider::handle:vertical:pressed {
343
-    background-color: #d2d2d2;
344
+    background-color: rgb(210,210,210);
345
 }
346
 
347
 QSlider::add-page:vertical {
348
-    background-color: rgb(42,130,218); /* blue */
349
+    background-color: palette(highlight);
350
     border-radius: 2px;
351
 }
352
 
353
 QSlider::add-page:vertical:disabled {
354
-    background-color: rgb(50, 49, 50); /* dark */
355
+    background-color: rgb(50,49,50); /* dark */
356
     border-radius: 2px;
357
 }
358
 
359
 QSlider::handle:hover {
360
-    background-color: rgb(200,199,200); /* veryLight */
361
+    background-color: palette(bright-text);
362
 }
363
 
364
 QSlider::handle:disabled {
365
@@ -562,14 +574,14 @@
366
 /* Volume Control */
367
 
368
 VolumeMeter {
369
-    qproperty-backgroundNominalColor: rgb(38, 127, 38);
370
-    qproperty-backgroundWarningColor: rgb(127, 127, 38);
371
-    qproperty-backgroundErrorColor: rgb(127, 38, 38);
372
-    qproperty-foregroundNominalColor: rgb(76, 255, 76);
373
-    qproperty-foregroundWarningColor: rgb(255, 255, 76);
374
-    qproperty-foregroundErrorColor: rgb(255, 76, 76);
375
-    qproperty-magnitudeColor: rgb(0, 0, 0);
376
-    qproperty-majorTickColor: rgb(225,224,225); /* veryLight */
377
+    qproperty-backgroundNominalColor: rgb(38,127,38);
378
+    qproperty-backgroundWarningColor: rgb(127,127,38);
379
+    qproperty-backgroundErrorColor: rgb(127,38,38);
380
+    qproperty-foregroundNominalColor: rgb(76,255,76);
381
+    qproperty-foregroundWarningColor: rgb(255,255,76);
382
+    qproperty-foregroundErrorColor: rgb(255,76,76);
383
+    qproperty-magnitudeColor: rgb(0,0,0);
384
+    qproperty-majorTickColor: palette(window-text);
385
     qproperty-minorTickColor: rgb(122,121,122); /* light */
386
 }
387
 
388
@@ -583,13 +595,13 @@
389
 /* Table View */
390
 
391
 QTableView {
392
-    gridline-color: rgb(88,87,88); /* kindaDark */
393
+    gridline-color: palette(light);
394
 }
395
 
396
 QHeaderView::section {
397
-    background-color: rgb(58,57,58); /* dark */
398
-    color: rgb(225,224,225); /* veryLight */
399
-    border: 1px solid rgb(31,30,31); /* veryDark */;
400
+    background-color: palette(window);
401
+    color: palette(window-text);
402
+    border: 1px solid palette(base);
403
     border-radius: 5px;
404
 }
405
 
406
@@ -648,27 +660,27 @@
407
 /* Label warning/error */
408
 
409
 QLabel#warningLabel {
410
-    color: rgb(192, 128, 0);
411
+    color: rgb(192,128,0);
412
     font-weight: bold;
413
 }
414
 
415
 QLabel#errorLabel {
416
-    color: rgb(192, 0, 0);
417
+    color: rgb(192,0,0);
418
     font-weight: bold;
419
 }
420
 
421
 * [themeID="warning"] {
422
-    color: rgb(192, 128, 0);
423
+    color: rgb(192,128,0);
424
     font-weight: bold;
425
 }
426
 
427
 * [themeID="error"] {
428
-    color: rgb(192, 0, 0);
429
+    color: rgb(192,0,0);
430
     font-weight: bold;
431
 }
432
 
433
 * [themeID="good"] {
434
-    color: rgb(0, 192, 0);
435
+    color: rgb(0,192,0);
436
     font-weight: bold;
437
 }
438
 
439
@@ -689,13 +701,13 @@
440
 }
441
 
442
 * [themeID="aboutHLayout"] {
443
-    background-color: rgb(31, 30, 31); /* veryDark */
444
+    background-color: palette(base);
445
 }
446
 
447
 /* Preview background color */
448
 
449
 OBSQTDisplay {
450
-   qproperty-displayBackgroundColor: rgb(76, 76, 76);
451
+   qproperty-displayBackgroundColor: rgb(76,76,76);
452
 }
453
 
454
 /* Preview/Program labels */
455
@@ -762,7 +774,7 @@
456
 }
457
 
458
 QPushButton#extraPanelDelete {
459
-    background-color: rgb(31, 30, 31);
460
+    background-color: palette(base);
461
 }
462
 
463
 QPushButton#extraPanelDelete:hover {
464
@@ -770,7 +782,7 @@
465
 }
466
 
467
 QPushButton#extraPanelDelete:pressed {
468
-    background-color: rgb(31,30,31);
469
+    background-color: palette(base);
470
 }
471
 
472
 OBSMissingFiles {
473
@@ -805,7 +817,7 @@
474
 }
475
 
476
 *[gridMode="true"] SceneTree::item {
477
-    color: rgb(225,224,225); /* veryLight */
478
+    color: palette(window-text);
479
     background-color: rgb(76,76,76);
480
     border: none;
481
     border-radius: 3px;
482
@@ -824,7 +836,7 @@
483
 }
484
 
485
 *[gridMode="true"] SceneTree::item:pressed {
486
-    background-color: rgb(31,30,31); /* veryDark */
487
+    background-color: palette(base);
488
 }
489
 
490
 *[gridMode="true"] SceneTree::item:checked {
491
@@ -844,18 +856,18 @@
492
 }
493
 
494
 QSlider::groove:horizontal[themeID="tBarSlider"] {
495
-   border: 1px solid #4c4c4c;
496
+   border: 1px solid rgb(76,76,76);
497
    height: 5px;
498
-   background: rgb(31,30,31);
499
+   background: palette(base);
500
 }
501
 
502
 QSlider::sub-page:horizontal[themeID="tBarSlider"] {
503
-   background: rgb(31,30,31);;
504
-   border: 1px solid #4c4c4c;
505
+   background: palette(base);;
506
+   border: 1px solid rgb(76,76,76);
507
 }
508
 
509
 QSlider::handle:horizontal[themeID="tBarSlider"] {
510
-   background-color: #d2d2d2;
511
+   background-color: rgb(210,210,210);
512
    width: 12px;
513
    height: 24px;
514
    margin: -24px 0px;
515
@@ -886,3 +898,112 @@
516
 * [themeID="previousIcon"] {
517
     qproperty-icon: url(./Dark/media/media_previous.svg);
518
 }
519
+
520
+/* YouTube Integration */
521
+OBSYoutubeActions {
522
+    qproperty-thumbPlaceholder: url(./Dark/sources/image.svg);
523
+}
524
+
525
+#ytEventList QLabel {
526
+    color: rgb(225,224,225); /* veryLight */
527
+    background-color: rgb(76,76,76);
528
+    border: none;
529
+    border-radius: 3px;
530
+    padding: 4px 20px;
531
+}
532
+
533
+#ytEventList QLabel:hover {
534
+    background: rgb(122,121,122);
535
+}
536
+
537
+#ytEventList QLabel[isSelectedEvent=true] {
538
+    background: rgb(31,30,31);
539
+    border: none;
540
+}
541
+
542
+/* Calendar Widget */
543
+QDateTimeEdit::down-arrow {
544
+    qproperty-alignment: AlignTop;
545
+    image: url(./Dark/down.svg);
546
+    width: 100%;
547
+}
548
+
549
+QDateTimeEdit:on {
550
+    background-color: rgb(31,30,31); /* veryDark */
551
+}
552
+
553
+/* Calendar Top Bar */
554
+QCalendarWidget QWidget#qt_calendar_navigationbar {
555
+    background-color: rgb(58,57,58);
556
+    padding: 4px 8px;
557
+}
558
+
559
+/* Calendar Top Bar Buttons */
560
+QCalendarWidget QToolButton {
561
+    background-color: rgb(76,76,76);
562
+    padding: 2px 16px;
563
+    border-radius: 3px;
564
+    margin: 2px;
565
+}
566
+
567
+#qt_calendar_monthbutton::menu-indicator {
568
+    image: url(./Dark/down.svg);
569
+    subcontrol-position: right;
570
+    padding-top: 2px;
571
+    padding-right: 6px;
572
+    height: 10px;
573
+    width: 10px;
574
+}
575
+
576
+QCalendarWidget #qt_calendar_prevmonth {
577
+    padding: 2px;
578
+    qproperty-icon: url(./Dark/left.svg);
579
+    icon-size: 16px, 16px;
580
+}
581
+
582
+QCalendarWidget #qt_calendar_nextmonth {
583
+    padding: 2px;
584
+    qproperty-icon: url(./Dark/expand.svg);
585
+    icon-size: 16px, 16px;
586
+}
587
+
588
+QCalendarWidget QToolButton:hover {
589
+    background-color: rgb(122,121,122);
590
+    border-radius: 3px;
591
+}
592
+
593
+QCalendarWidget QToolButton:pressed {
594
+    background-color: rgb(31,30,31); /* veryDark */
595
+}
596
+
597
+/* Month Dropdown Menu */
598
+QCalendarWidget QMenu {
599
+    
600
+}
601
+/* Year spinbox */
602
+QCalendarWidget QSpinBox {
603
+    background-color: rgb(31,30,31); /* veryDark */
604
+    border: none;
605
+    border-radius: 3px;
606
+    margin: 0px 3px 0px 0px;
607
+    padding: 4px 16px;
608
+}
609
+
610
+QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; }
611
+QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;}
612
+QCalendarWidget QSpinBox::up-arrow { width: 10px; height: 10px; }
613
+QCalendarWidget QSpinBox::down-arrow { width: 10px; height: 10px; }
614
+
615
+/* Days of the Week Bar */
616
+QCalendarWidget QWidget { alternate-background-color: rgb(70,69,70); }
617
+
618
+QCalendarWidget QAbstractItemView:enabled {
619
+    background-color: rgb(31,30,31);
620
+    color: rgb(225,224,225);
621
+    selection-background-color: rgb(25,51,75);
622
+    selection-color: rgb(225,224,225);
623
+}
624
+
625
+QCalendarWidget QAbstractItemView:disabled {
626
+    color: rgb(122,121,122);
627
+}
628
\ No newline at end of file
629
obs-studio-27.1.3.tar.xz/UI/data/themes/Dark/left.svg Added
4
 
1
@@ -0,0 +1,1 @@
2
+<svg class="feather feather-chevron-down" fill="none" stroke="#d2d2d2" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><polyline transform="matrix(0.0000 -1.7072 -1.7538 0 32.495 32.495)" points="6 9 12 15 18 9"/></svg>
3
\ No newline at end of file
4
obs-studio-27.0.1.tar.xz/UI/data/themes/Rachni.qss -> obs-studio-27.1.3.tar.xz/UI/data/themes/Rachni.qss Changed
771
 
1
@@ -60,7 +60,7 @@
2
    shadow: rgb(35, 38, 41); /* Dark Gray */
3
 
4
    highlight: rgb(98, 238, 255); /* Light Cyan (Primary Light) */
5
-   highlightText: rgb(0,0,0);
6
+   highlightedText: rgb(0,0,0);
7
 
8
    link: rgb(98, 238, 255); /* Light Cyan (Primary Light) */
9
    linkVisited: rgb(98, 238, 255); /* Light Cyan (Primary Light) */
10
@@ -74,7 +74,7 @@
11
 
12
 OBSTheme::inactive {
13
    highlight: rgb(0, 188, 212); /* Cyan (Primary) */
14
-   highlightText: rgb(239, 240, 241); /* White */
15
+   highlightedText: rgb(239, 240, 241); /* White */
16
 }
17
 
18
 
19
@@ -83,7 +83,7 @@
20
 /************************/
21
 
22
 SourceTree::item:selected:!active {
23
-   color: rgb(239, 240, 241); /* White */
24
+   color: palette(window-text);
25
    background-color: rgba(255, 148, 194, 0.25); /* Light Pink (Secondary Light) */
26
    border: none;
27
 }
28
@@ -96,8 +96,8 @@
29
 SourceTree::item:hover,
30
 SourceTree::item:disabled:hover,
31
 SourceTree::item:hover:!active {
32
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
33
-   color: rgb(239, 240, 241); /* White */
34
+   background-color: palette(button);
35
+   color: palette(window-text);
36
    border: none;
37
 }
38
 
39
@@ -117,10 +117,10 @@
40
 QMainWindow,
41
 QDialog,
42
 QWidget {
43
-   background-color: rgb(49, 54, 59); /* Blue-gray */
44
-   color: rgb(239, 240, 241); /* White */
45
-   selection-background-color: rgb(0, 188, 212); /* Cyan (Primary) */
46
-   selection-color: rgb(239, 240, 241); /* White */
47
+   background-color: palette(window);
48
+   color: palette(window-text);
49
+   selection-background-color: palette(button);
50
+   selection-color: palette(window-text);
51
    outline: none;
52
    font-family: Noto Sans, Tahoma;
53
    font-size: 11px;
54
@@ -131,8 +131,8 @@
55
 }
56
 
57
 QWidget:item:hover {
58
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
59
-   color: rgb(118, 121, 124); /* Light Gray */
60
+   background-color: palette(button);
61
+   color: palette(mid);
62
 }
63
 
64
 QComboBox:hover,
65
@@ -142,8 +142,8 @@
66
 QPlainTextEdit:hover,
67
 QAbstractView:hover,
68
 QTreeView:hover {
69
-   border: 1px solid rgb(0, 188, 212); /* Cyan (Primary) */
70
-   color: rgb(239, 240, 241); /* White */
71
+   border: 1px solid palette(button);
72
+   color: palette(window-text);
73
 }
74
 
75
 QSizeGrip {
76
@@ -166,7 +166,7 @@
77
 /***********************/
78
 
79
 QListWidget::item:selected:!active {
80
-   color: rgb(239, 240, 241); /* White */
81
+   color: palette(window-text);
82
    background-color: rgba(255, 148, 194, 0.25); /* Light Pink (Secondary Light) */
83
    border: none;
84
 }
85
@@ -179,8 +179,8 @@
86
 QListWidget::item:hover,
87
 QListWidget::item:disabled:hover,
88
 QListWidget::item:hover:!active {
89
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
90
-   color: rgb(239, 240, 241); /* White */
91
+   background-color: palette(button);
92
+   color: palette(window-text);
93
    border: none;
94
 }
95
 
96
@@ -194,13 +194,13 @@
97
 }
98
 
99
 QDockWidget {
100
-   background: rgb(49, 54, 59); /* Blue-gray */
101
+   background: palette(window);
102
    border: 1px solid rgb(58, 64, 69); /* Light Blue-gray */
103
 }
104
 
105
 QDockWidget::title {
106
    text-align: left;
107
-   background: rgb(35, 38, 41); /* Dark Gray */
108
+   background: palette(shadow);
109
    padding-left: 5px;
110
 }
111
 
112
@@ -227,7 +227,7 @@
113
 
114
 QGroupBox {
115
    font-size: 13px;
116
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
117
+   border: 1px solid palette(mid);
118
    border-radius: 2px;
119
    padding-top: 16px;
120
    margin-top: 20px;
121
@@ -246,8 +246,8 @@
122
 /*****************/
123
 
124
 QMenuBar {
125
-   background-color: rgb(49, 54, 59); /* Blue-gray */
126
-   color: rgb(239, 240, 241); /* White */
127
+   background-color: palette(window);
128
+   color: palette(window-text);
129
 }
130
 
131
 QMenuBar::item {
132
@@ -261,7 +261,7 @@
133
 
134
 QMenuBar::item:pressed {
135
    border: none;
136
-   background-color: rgb(0, 188, 212);
137
+   background-color: palette(button);
138
    margin-bottom: -1px;
139
    padding-bottom: 1px;
140
 }
141
@@ -275,11 +275,11 @@
142
    margin: 3px 15px 3px 15px;
143
    border: 1px transparent;
144
    border-radius: 4px;
145
-   background-color: rgb(35, 38, 41); /* Dark Gray */
146
+   background-color: palette(shadow);
147
 }
148
 
149
 QScrollBar::handle:horizontal {
150
-   background-color: rgb(118, 121, 124); /* Light Gray */
151
+   background-color: palette(mid);
152
    min-width: 5px;
153
    border-radius: 4px;
154
 }
155
@@ -331,7 +331,7 @@
156
 }
157
 
158
 QScrollBar:vertical {
159
-   background-color: rgb(35, 38, 41); /* Dark Gray */
160
+   background-color: palette(shadow);
161
    width: 15px;
162
    margin: 15px 3px 15px 3px;
163
    border: 1px transparent;
164
@@ -339,7 +339,7 @@
165
 }
166
 
167
 QScrollBar::handle:vertical {
168
-   background-color: rgb(118, 121, 124); /* Light Gray */
169
+   background-color: palette(mid);
170
    min-height: 5px;
171
    border-radius: 4px;
172
 }
173
@@ -399,7 +399,7 @@
174
 }
175
 
176
 QTabWidget::pane {
177
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
178
+   border: 1px solid palette(mid);
179
    padding: 5px;
180
    margin: 0;
181
 }
182
@@ -436,8 +436,8 @@
183
 }
184
 
185
 QTabBar::tab {
186
-   color: rgb(239, 240, 241); /* White */
187
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
188
+   color: palette(window-text);
189
+   border: 1px solid palette(mid); /* Light Gray */
190
    background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
191
    padding: 5px;
192
    min-width: 50px;
193
@@ -457,12 +457,12 @@
194
 }
195
 
196
 QTabBar::tab:!selected {
197
-   color: rgb(239, 240, 241); /* White */
198
-   background-color: rgb(84, 87, 91); /* Gray */
199
+   color: palette(window-text);
200
+   background-color: palette(dark);
201
 }
202
 
203
 QTabBar::tab:!selected:hover {
204
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
205
+   background-color: palette(button);
206
 }
207
 
208
 /********************/
209
@@ -470,7 +470,7 @@
210
 /********************/
211
 
212
 QToolBar {
213
-   background-color: rgb(49, 54, 59); /* Blue-gray */
214
+   background-color: palette(window);
215
    border: none;
216
 }
217
 
218
@@ -521,8 +521,8 @@
219
 /***********************/
220
 
221
 QComboBox {
222
-   background-color: rgb(35, 38, 41); /* Dark Gray */
223
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
224
+   background-color: palette(shadow);
225
+   border: 1px solid palette(mid);
226
    border-radius: 2px;
227
    padding: 5px;
228
    min-width: 75px;
229
@@ -534,9 +534,9 @@
230
 }
231
 
232
 QComboBox QAbstractItemView {
233
-   background-color: rgb(35, 38, 41); /* Dark Gray */
234
+   background-color: palette(shadow);
235
    border-radius: 2px;
236
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
237
+   border: 1px solid palette(mid);
238
 }
239
 
240
 QComboBox::drop-down {
241
@@ -568,9 +568,9 @@
242
 
243
 QAbstractSpinBox {
244
    padding: 5px;
245
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
246
-   background-color: rgb(35, 38, 41); /* Dark Gray */
247
-   color: rgb(239, 240, 241); /* White */
248
+   border: 1px solid palette(mid);
249
+   background-color: palette(shadow);
250
+   color: palette(window-text);
251
    border-radius: 2px;
252
    min-width: 75px;
253
 }
254
@@ -616,11 +616,11 @@
255
 /**********************/
256
 
257
 QLineEdit {
258
-   background-color: rgb(35, 38, 41); /* Dark Gray */
259
+   background-color: palette(shadow);
260
    padding: 5px;
261
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
262
+   border: 1px solid palette(mid);
263
    border-radius: 2px;
264
-   color: rgb(239, 240, 241); /* White */
265
+   color: palette(window-text);
266
 }
267
 
268
 /**********************/
269
@@ -630,7 +630,7 @@
270
 QCheckBox {
271
    spacing: 5px;
272
    outline: none;
273
-   color: rgb(239, 240, 241); /* White */
274
+   color: palette(window-text);
275
    margin-bottom: 2px;
276
 }
277
 
278
@@ -639,7 +639,7 @@
279
 }
280
 
281
 QCheckBox:disabled {
282
-   color: rgb(118, 121, 124); /* Light Gray */
283
+   color: palette(mid);
284
 }
285
 
286
 QCheckBox::indicator,
287
@@ -689,12 +689,12 @@
288
 QRadioButton {
289
    spacing: 5px;
290
    outline: none;
291
-   color: rgb(239, 240, 241); /* White */
292
+   color: palette(window-text);
293
    margin-bottom: 2px;
294
 }
295
 
296
 QRadioButton:disabled {
297
-   color: rgb(118, 121, 124); /* Light Gray */
298
+   color: palette(mid);
299
 }
300
 
301
 QRadioButton::indicator {
302
@@ -808,13 +808,13 @@
303
 /*************************/
304
 
305
 QProgressBar {
306
-   border: 2px solid rgb(118, 121, 124); /* Light Gray */
307
+   border: 2px solid palette(mid);
308
    border-radius: 5px;
309
    text-align: center;
310
 }
311
 
312
 QProgressBar::chunk {
313
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
314
+   background-color: palette(button);
315
 }
316
 
317
 /**************************/
318
@@ -828,9 +828,9 @@
319
    qproperty-foregroundNominalColor: rgb(119, 255, 143);
320
    qproperty-foregroundWarningColor: rgb(255, 157, 76);
321
    qproperty-foregroundErrorColor: rgb(255, 89, 76);
322
-   qproperty-magnitudeColor: rgb(49, 54, 59); /* Blue-gray */
323
-   qproperty-majorTickColor: rgb(239, 240, 241); /* White */
324
-   qproperty-minorTickColor: rgb(118, 121, 124); /* Light Gray */
325
+   qproperty-magnitudeColor: palette(window);
326
+   qproperty-majorTickColor: palette(window-text);
327
+   qproperty-minorTickColor: palette(mid);
328
 }
329
 
330
 /*******************/
331
@@ -838,10 +838,10 @@
332
 /*******************/
333
 
334
 QPushButton {
335
-   background-color: rgb(0, 188, 212);; /* Cyan (Primary) */
336
-   color: rgb(239, 240, 241); /* White */
337
+   background-color: palette(button);
338
+   color: palette(window-text);
339
    border-radius: 2px;
340
-   border: 1px solid rgb(0, 188, 212); /* Cyan (Primary) */
341
+   border: 1px solid palette(button);
342
    padding: 4px;
343
    padding-left: 15px;
344
    padding-right: 15px;
345
@@ -871,9 +871,9 @@
346
 }
347
 
348
 QPushButton:disabled {
349
-   background-color: rgb(0, 139, 163); /* Dark Cyan (Primary Dark) */
350
-   border: 1px solid rgb(0, 139, 163); /* Dark Cyan (Primary Dark) */
351
-   color: rgb(162, 161, 162); /* Lighter Gray */
352
+   background-color: palette(base);
353
+   border: 1px solid palette(base);
354
+   color: palette(light);
355
 }
356
 
357
 QPushButton::menu-indicator {
358
@@ -893,7 +893,7 @@
359
 /******************************/
360
 
361
 QDialogButtonBox QPushButton {
362
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
363
+   background-color: palette(button);
364
 }
365
 
366
 QDialogButtonBox QPushButton:hover {
367
@@ -906,9 +906,9 @@
368
 }
369
 
370
 QDialogButtonBox QPushButton:disabled {
371
-   background-color: rgb(0, 139, 163); /* Dark Cyan (Primary Dark) */
372
-   border: 1px solid rgb(0, 139, 163); /* Dark Cyan (Primary Dark) */
373
-   color: rgb(162, 161, 162); /* Lighter Gray */
374
+   background-color: palette(base);
375
+   border: 1px solid palette(base);
376
+   color: palette(light);
377
 }
378
 
379
 /*******************************/
380
@@ -928,7 +928,7 @@
381
 QPushButton#modeSwitch,
382
 QPushButton#settingsButton,
383
 QPushButton#exitButton {
384
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
385
+   background-color: palette(button);
386
 }
387
 
388
 QPushButton#recordButton {
389
@@ -993,7 +993,7 @@
390
 QPushButton#moveAsyncFilterDown,
391
 QPushButton#moveEffectFilterDown,
392
 QPushButton#moveEffectFilterUp {
393
-   background-color: rgb(49, 54, 59); /* Blue-gray */
394
+   background-color: palette(window);
395
    border: none;
396
 }
397
 
398
@@ -1037,12 +1037,12 @@
399
 
400
 /* warning and error */
401
 QLabel#warningLabel {
402
-   color: rgb(255, 148, 194); /* Light Pink (Secondary Light) */
403
+   color: palette(bright-text);
404
    font-weight: bold;
405
 }
406
 
407
 QLabel#errorLabel {
408
-   color: rgb(186, 45, 101); /* Dark Pink (Secondary Dark) */
409
+   color: palette(alternate-base);
410
    font-weight: bold;
411
 }
412
 
413
@@ -1057,7 +1057,7 @@
414
 /****************************/
415
 
416
 QSplitter::handle {
417
-   border: 1px dashed rgb(118, 121, 124); /* Light Gray */
418
+   border: 1px dashed palette(mid);
419
 }
420
 
421
 QSplitter::handle:hover {
422
@@ -1083,7 +1083,7 @@
423
 
424
 QSlider::groove:horizontal {
425
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
426
-   stop: 0 rgb(35, 38, 41), /* Dark Gray */
427
+   stop: 0 palette(shadow), /* Dark Gray */
428
    stop: 0.75 rgb(50, 49, 50));
429
    height: 4px;
430
    border: none;
431
@@ -1094,7 +1094,7 @@
432
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
433
    stop: 0 rgb(240, 239, 240),
434
    stop: 0.25 rgb(200, 199, 200),
435
-   stop: 1 rgb(162, 161, 162));
436
+   stop: 1 palette(light));
437
    border: 1px solid rgb(58, 57, 58);
438
    border-radius: 3px;
439
    height: 10px;
440
@@ -1106,24 +1106,24 @@
441
    background-color: QLinearGradient(x1: 0, y1: 1, x2: 0, y2: 0,
442
    stop: 0 rgb(240, 239, 240),
443
    stop: 0.25 rgb(200, 199, 200),
444
-   stop: 1 rgb(162, 161, 162));
445
+   stop: 1 palette(light));
446
 }
447
 
448
 QSlider::sub-page:horizontal {
449
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
450
+   background-color: palette(button);
451
    border-radius: 2px;
452
 }
453
 
454
 QSlider::sub-page:horizontal:disabled {
455
    background-color: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1,
456
-   stop: 0 rgb(35, 38, 41), /* Dark Gray */
457
-   stop: 0.75 rgb(35, 38, 41)); /* Dark Gray */
458
+   stop: 0 palette(shadow),
459
+   stop: 0.75 palette(shadow));
460
    border-radius: 2px;
461
 }
462
 
463
 QSlider::groove:vertical {
464
    background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
465
-   stop: 0 rgb(35, 38, 41), /* Dark Gray */
466
+   stop: 0 palette(shadow),
467
    stop: 0.75 rgb(50, 49, 50));
468
    width: 4px;
469
    border: none;
470
@@ -1134,7 +1134,7 @@
471
    background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
472
    stop: 0 rgb(240, 239, 240),
473
    stop: 0.25 rgb(200, 199, 200),
474
-   stop: 1 rgb(162, 161, 162));
475
+   stop: 1 palette(light));
476
    border: 1px solid rgb(58, 57, 58);
477
    border-radius: 3px;
478
    width: 10px;
479
@@ -1146,18 +1146,18 @@
480
    background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
481
    stop: 0 rgb(240, 239, 240),
482
    stop: 0.25 rgb(200, 199, 200),
483
-   stop: 1 rgb(162, 161, 162));
484
+   stop: 1 palette(light));
485
 }
486
 
487
 QSlider::add-page:vertical {
488
-   background-color: rgb(0, 188, 212); /* Cyan (Primary) */
489
+   background-color: palette(button);
490
    border-radius: 2px;
491
 }
492
 
493
 QSlider::add-page:vertical:disabled {
494
    background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
495
-   stop: 0 rgb(35, 38, 41), /* Dark Gray */
496
-   stop: 0.75 rgb(35, 38, 41)); /* Dark Gray */
497
+   stop: 0 palette(shadow),
498
+   stop: 0.75 palette(shadow));
499
    border-radius: 2px;
500
 }
501
 
502
@@ -1173,13 +1173,13 @@
503
 /**********************/
504
 
505
 QTableView {
506
-    gridline-color: rgb(118, 121, 124); /* Light Gray */
507
+    gridline-color: palette(mid);
508
 }
509
 
510
 QHeaderView::section {
511
-    background-color: rgb(35, 38, 41); /* Dark Gray */
512
-    color: rgb(239, 240, 241); /* "White" */
513
-    border: 1px solid rgb(118, 121, 124); /* Light Gray */
514
+    background-color: palette(shadow);
515
+    color: palette(window-text);
516
+    border: 1px solid palette(mid);
517
     border-radius: 2px;
518
     padding: 4px;
519
 }
520
@@ -1200,8 +1200,8 @@
521
 * [frameShape="4"],
522
 * [frameShape="5"],
523
 * [frameShape="6"] {
524
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
525
-   background-color: rgb(35, 38, 41); /* Dark Gray */
526
+   border: 1px solid palette(mid);
527
+   background-color: palette(shadow);
528
 }
529
 
530
 QFrame[frameShape="0"] {
531
@@ -1215,7 +1215,7 @@
532
 }
533
 
534
 * [themeID="warning"] {
535
-   color: rgb(255, 148, 194); /* Light Pink (Secondary Light) */
536
+   color: palette(bright-text);
537
 }
538
 
539
 QStatusBar::item {
540
@@ -1223,12 +1223,12 @@
541
 }
542
 
543
 QAbstractItemView {
544
-   background-color: rgb(35, 38, 41); /* Dark Gray */
545
+   background-color: palette(shadow);
546
 }
547
 
548
 QToolTip {
549
-   border: 1px solid rgb(118, 121, 124); /* Light Gray */
550
-   background-color: rgb(49, 54, 59); /* Blue-gray */
551
+   border: 1px solid palette(mid);
552
+   background-color: palette(window);
553
    color: rgb(240, 98, 146); /* Pink (Secondary) */
554
 }
555
 
556
@@ -1249,13 +1249,13 @@
557
 }
558
 
559
 * [themeID="aboutHLayout"] {
560
-   background-color: rgb(35, 38, 41); /* Dark Gray */
561
+   background-color: palette(shadow);
562
 }
563
 
564
 /* Preview background color */
565
 
566
 OBSQTDisplay {
567
-   qproperty-displayBackgroundColor: rgb(35, 38, 41);
568
+   qproperty-displayBackgroundColor: palette(shadow);
569
 }
570
 
571
 /* Preview/Program labels */
572
@@ -1263,7 +1263,7 @@
573
 * [themeID="previewProgramLabels"] {
574
    font-size: 18px;
575
    font-weight: bold;
576
-   color: rgb(122,121,122);
577
+   color: rgb(122, 121, 122);
578
 }
579
 
580
 /* Settings Icons */
581
@@ -1348,7 +1348,7 @@
582
 }
583
 
584
 QPushButton#extraPanelDelete {
585
-    background-color: rgb(35, 38, 41);
586
+    background-color: palette(shadow);
587
 }
588
 
589
 QPushButton#extraPanelDelete:hover {
590
@@ -1405,7 +1405,7 @@
591
 QSlider::groove:horizontal[themeID="tBarSlider"] {
592
    height: 5px;
593
    background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
594
-       stop: 0 rgb(35, 38, 41), /* Dark Gray */
595
+       stop: 0 palette(shadow),
596
        stop: 0.75 rgb(50, 49, 50));
597
    border: none;
598
    border-radius: 2px;
599
@@ -1414,14 +1414,14 @@
600
 QSlider::sub-page:horizontal[themeID="tBarSlider"] {
601
    height: 5px;
602
    background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0,
603
-       stop: 0 rgb(35, 38, 41), /* Dark Gray */
604
+       stop: 0 palette(shadow),
605
        stop: 0.75 rgb(50, 49, 50));
606
    border: none;
607
    border-radius: 2px;
608
 }
609
 
610
 QSlider::handle:horizontal[themeID="tBarSlider"] {
611
-   background-color: #d2d2d2;
612
+   background-color: rgb(210, 210, 210);
613
    width: 12px;
614
    height: 24px;
615
    margin: -24px 0px;
616
@@ -1463,3 +1463,153 @@
617
 * [themeID="nextIcon"] {
618
     qproperty-icon: url(./Dark/media/media_next.svg);
619
 }
620
+
621
+/* YouTube Integration */
622
+OBSYoutubeActions {
623
+    qproperty-thumbPlaceholder: url(./Dark/sources/image.svg);
624
+}
625
+
626
+#ytEventList QLabel {
627
+    background-color: rgb(0, 188, 212);; /* Cyan (Primary) */
628
+   color: rgb(239, 240, 241); /* White */
629
+   border-radius: 2px;
630
+   border: 1px solid rgb(0, 188, 212); /* Cyan (Primary) */
631
+   padding: 4px;
632
+   padding-left: 15px;
633
+   padding-right: 15px;
634
+}
635
+
636
+#ytEventList QLabel:hover {
637
+    background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
638
+   border: 1px solid rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
639
+}
640
+
641
+#ytEventList QLabel[isSelectedEvent=true] {
642
+   background-color: rgb(240, 98, 146); /* Pink (Secondary) */
643
+    border: 1px solid rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
644
+}
645
+
646
+#ytEventList QLabel[isSelectedEvent=true]:hover {
647
+   background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
648
+}
649
+
650
+/* Calendar Widget */
651
+QDateTimeEdit {
652
+   background-color: rgb(35, 38, 41); /* Dark Gray */
653
+   border: 1px solid rgb(118, 121, 124); /* Light Gray */
654
+   border-radius: 2px;
655
+   padding: 5px;
656
+   min-width: 75px;
657
+}
658
+
659
+QDateTimeEdit:on {
660
+   padding-top: 3px;
661
+   padding-left: 4px;
662
+}
663
+
664
+QDateTimeEdit::drop-down {
665
+   subcontrol-origin: padding;
666
+   subcontrol-position: top right;
667
+   width: 15px;
668
+
669
+   border-left-width: 0;
670
+   border-left-color: rgb(169, 169, 169);
671
+   border-left-style: solid;
672
+   border-top-right-radius: 3px;
673
+   border-bottom-right-radius: 3px;
674
+}
675
+
676
+QDateTimeEdit::down-arrow,
677
+QDateTimeEdit::down-arrow:pressed,
678
+QDateTimeEdit::down-arrow:focus {
679
+   image: url(./Rachni/down_arrow_disabled.png);
680
+}
681
+
682
+QDateTimeEdit::down-arrow:on,
683
+QDateTimeEdit::down-arrow:hover {
684
+   image: url(./Rachni/down_arrow.png);
685
+}
686
+
687
+QDateTimeEdit::down-arrow {
688
+    qproperty-alignment: AlignTop;
689
+    image: url(./Rachni/down_arrow.png);
690
+    width: 100%;
691
+}
692
+
693
+/* Calendar Top Bar */
694
+QCalendarWidget QWidget#qt_calendar_navigationbar {
695
+    background-color: #181819;
696
+    padding: 2px 8px;
697
+}
698
+
699
+/* Calendar Top Bar Buttons */
700
+QCalendarWidget QToolButton {
701
+    background-color: rgb(0, 188, 212);; /* Cyan (Primary) */
702
+   color: rgb(239, 240, 241); /* White */
703
+   border-radius: 2px;
704
+   border: 1px solid rgb(0, 188, 212); /* Cyan (Primary) */
705
+   padding: 2px;
706
+   padding-left: 15px;
707
+   padding-right: 15px;
708
+   margin: 2px;
709
+}
710
+
711
+#qt_calendar_monthbutton::menu-indicator {
712
+    image: url(./Dark/down.svg);
713
+    subcontrol-position: right;
714
+    padding-top: 2px;
715
+    padding-right: 4px;
716
+    height: 10px;
717
+    width: 10px;
718
+}
719
+
720
+QCalendarWidget #qt_calendar_prevmonth {
721
+    padding: 2px;
722
+    qproperty-icon: url(./Dark/left.svg);
723
+    icon-size: 16px, 16px;
724
+}
725
+
726
+QCalendarWidget #qt_calendar_nextmonth {
727
+    padding: 2px;
728
+    qproperty-icon: url(./Dark/expand.svg);
729
+    icon-size: 16px, 16px;
730
+}
731
+
732
+QCalendarWidget QToolButton:hover {
733
+    background-color: rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
734
+   border: 1px solid rgba(240, 98, 146, 0.5); /* Pink (Secondary) */
735
+}
736
+
737
+QCalendarWidget QToolButton:pressed {
738
+    background-color: rgb(240, 98, 146); /* Pink (Secondary) */
739
+   border: 1px solid rgb(240, 98, 146); /* Pink (Secondary) */
740
+}
741
+
742
+/* Year spinbox */
743
+QCalendarWidget QSpinBox {
744
+    padding: 5px;
745
+   border: 1px solid rgb(118, 121, 124); /* Light Gray */
746
+   background-color: rgb(35, 38, 41); /* Dark Gray */
747
+   color: rgb(239, 240, 241); /* White */
748
+   border-radius: 2px;
749
+   min-width: 0px;
750
+}
751
+
752
+QCalendarWidget QSpinBox::up-button { subcontrol-origin: border; subcontrol-position: top right; width: 16px; }
753
+QCalendarWidget QSpinBox::down-button {subcontrol-origin: border; subcontrol-position: bottom right; width: 16px;}
754
+QCalendarWidget QSpinBox::up-arrow { width: 16px; height: 10px; }
755
+QCalendarWidget QSpinBox::down-arrow { width: 16px; height: 10px; }
756
+
757
+/* Days of the Week Bar */
758
+QCalendarWidget QWidget { alternate-background-color: #232629; }
759
+
760
+QCalendarWidget QAbstractItemView:enabled {
761
+    background-color: rgb(31,30,31);
762
+    color: rgb(225,224,225);
763
+    selection-background-color: rgb(25,51,75);
764
+    selection-color: rgb(225,224,225);
765
+}
766
+
767
+QCalendarWidget QAbstractItemView:disabled {
768
+    color: rgb(122,121,122);
769
+}
770
\ No newline at end of file
771
obs-studio-27.0.1.tar.xz/UI/data/themes/System.qss -> obs-studio-27.1.3.tar.xz/UI/data/themes/System.qss Changed
57
 
1
@@ -300,3 +300,54 @@
2
 * [themeID="previousIcon"] {
3
     qproperty-icon: url(./Dark/media/media_previous.svg);
4
 }
5
+
6
+/* YouTube Integration */
7
+OBSYoutubeActions {
8
+    qproperty-thumbPlaceholder: url(:res/images/sources/image.svg);
9
+}
10
+
11
+#ytEventList QLabel {
12
+   background-color: #e1e1e1;
13
+   border: 1px solid #ddd;
14
+}
15
+
16
+#ytEventList QLabel:hover {
17
+    background-color: #eee;
18
+   border: 1px solid #777;
19
+}
20
+
21
+#ytEventList QLabel[isSelectedEvent=true] {
22
+    background-color: #ccc;
23
+   border: 1px solid #444;
24
+}
25
+
26
+/* Calendar Widget */
27
+QCalendarWidget QToolButton {
28
+    padding: 0px 12px;
29
+}
30
+
31
+#qt_calendar_monthbutton::menu-indicator {
32
+    image: url(./Dark/down.svg);
33
+    subcontrol-position: right;
34
+    padding-top: 2px;
35
+    padding-right: 2px;
36
+    height: 8px;
37
+    width: 8px;
38
+}
39
+
40
+#qt_calendar_monthbutton::menu-indicator:hover {
41
+    image: url(:/res/images/down.svg);
42
+    color: red;
43
+}
44
+
45
+QCalendarWidget #qt_calendar_prevmonth {
46
+    padding: 2px;
47
+    qproperty-icon: url(./Dark/left.svg);
48
+    icon-size: 16px, 16px;
49
+}
50
+
51
+QCalendarWidget #qt_calendar_nextmonth {
52
+    padding: 2px;
53
+    qproperty-icon: url(./Dark/expand.svg);
54
+    icon-size: 16px, 16px;
55
+}
56
\ No newline at end of file
57
obs-studio-27.0.1.tar.xz/UI/display-helpers.hpp -> obs-studio-27.1.3.tar.xz/UI/display-helpers.hpp Changed
110
 
1
@@ -17,9 +17,8 @@
2
 
3
 #pragma once
4
 
5
-#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
6
-#define SUPPORTS_FRACTIONAL_SCALING
7
-#endif
8
+#include <graphics/vec4.h>
9
+#include <graphics/matrix4.h>
10
 
11
 static inline void GetScaleAndCenterPos(int baseCX, int baseCY, int windowCX,
12
                    int windowCY, int &x, int &y,
13
@@ -55,9 +54,92 @@
14
 
15
 static inline QSize GetPixelSize(QWidget *widget)
16
 {
17
-#ifdef SUPPORTS_FRACTIONAL_SCALING
18
    return widget->size() * widget->devicePixelRatioF();
19
-#else
20
-   return widget->size() * widget->devicePixelRatio();
21
-#endif
22
+}
23
+
24
+#define OUTLINE_COLOR 0xFFD0D0D0
25
+#define LINE_LENGTH 0.1f
26
+
27
+// Rec. ITU-R BT.1848-1 / EBU R 95
28
+#define ACTION_SAFE_PERCENT 0.035f       // 3.5%
29
+#define GRAPHICS_SAFE_PERCENT 0.05f      // 5.0%
30
+#define FOURBYTHREE_SAFE_PERCENT 0.1625f // 16.25%
31
+
32
+static inline void InitSafeAreas(gs_vertbuffer_t **actionSafeMargin,
33
+                gs_vertbuffer_t **graphicsSafeMargin,
34
+                gs_vertbuffer_t **fourByThreeSafeMargin,
35
+                gs_vertbuffer_t **leftLine,
36
+                gs_vertbuffer_t **topLine,
37
+                gs_vertbuffer_t **rightLine)
38
+{
39
+   obs_enter_graphics();
40
+
41
+   // All essential action should be placed inside this area
42
+   gs_render_start(true);
43
+   gs_vertex2f(ACTION_SAFE_PERCENT, ACTION_SAFE_PERCENT);
44
+   gs_vertex2f(ACTION_SAFE_PERCENT, 1 - ACTION_SAFE_PERCENT);
45
+   gs_vertex2f(1 - ACTION_SAFE_PERCENT, 1 - ACTION_SAFE_PERCENT);
46
+   gs_vertex2f(1 - ACTION_SAFE_PERCENT, ACTION_SAFE_PERCENT);
47
+   gs_vertex2f(ACTION_SAFE_PERCENT, ACTION_SAFE_PERCENT);
48
+   *actionSafeMargin = gs_render_save();
49
+
50
+   // All graphics should be placed inside this area
51
+   gs_render_start(true);
52
+   gs_vertex2f(GRAPHICS_SAFE_PERCENT, GRAPHICS_SAFE_PERCENT);
53
+   gs_vertex2f(GRAPHICS_SAFE_PERCENT, 1 - GRAPHICS_SAFE_PERCENT);
54
+   gs_vertex2f(1 - GRAPHICS_SAFE_PERCENT, 1 - GRAPHICS_SAFE_PERCENT);
55
+   gs_vertex2f(1 - GRAPHICS_SAFE_PERCENT, GRAPHICS_SAFE_PERCENT);
56
+   gs_vertex2f(GRAPHICS_SAFE_PERCENT, GRAPHICS_SAFE_PERCENT);
57
+   *graphicsSafeMargin = gs_render_save();
58
+
59
+   // 4:3 safe area for widescreen
60
+   gs_render_start(true);
61
+   gs_vertex2f(FOURBYTHREE_SAFE_PERCENT, GRAPHICS_SAFE_PERCENT);
62
+   gs_vertex2f(1 - FOURBYTHREE_SAFE_PERCENT, GRAPHICS_SAFE_PERCENT);
63
+   gs_vertex2f(1 - FOURBYTHREE_SAFE_PERCENT, 1 - GRAPHICS_SAFE_PERCENT);
64
+   gs_vertex2f(FOURBYTHREE_SAFE_PERCENT, 1 - GRAPHICS_SAFE_PERCENT);
65
+   gs_vertex2f(FOURBYTHREE_SAFE_PERCENT, GRAPHICS_SAFE_PERCENT);
66
+   *fourByThreeSafeMargin = gs_render_save();
67
+
68
+   gs_render_start(true);
69
+   gs_vertex2f(0.0f, 0.5f);
70
+   gs_vertex2f(LINE_LENGTH, 0.5f);
71
+   *leftLine = gs_render_save();
72
+
73
+   gs_render_start(true);
74
+   gs_vertex2f(0.5f, 0.0f);
75
+   gs_vertex2f(0.5f, LINE_LENGTH);
76
+   *topLine = gs_render_save();
77
+
78
+   gs_render_start(true);
79
+   gs_vertex2f(1.0f, 0.5f);
80
+   gs_vertex2f(1 - LINE_LENGTH, 0.5f);
81
+   *rightLine = gs_render_save();
82
+
83
+   obs_leave_graphics();
84
+}
85
+
86
+static inline void RenderSafeAreas(gs_vertbuffer_t *vb, int cx, int cy)
87
+{
88
+   if (!vb)
89
+       return;
90
+
91
+   matrix4 transform;
92
+   matrix4_identity(&transform);
93
+   transform.x.x = cx;
94
+   transform.y.y = cy;
95
+
96
+   gs_load_vertexbuffer(vb);
97
+
98
+   gs_matrix_push();
99
+   gs_matrix_mul(&transform);
100
+
101
+   gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
102
+   gs_eparam_t *color = gs_effect_get_param_by_name(solid, "color");
103
+
104
+   gs_effect_set_color(color, OUTLINE_COLOR);
105
+   while (gs_effect_loop(solid, "Solid"))
106
+       gs_draw(GS_LINESTRIP, 0, 0);
107
+
108
+   gs_matrix_pop();
109
 }
110
obs-studio-27.0.1.tar.xz/UI/forms/AutoConfigStreamPage.ui -> obs-studio-27.1.3.tar.xz/UI/forms/AutoConfigStreamPage.ui Changed
120
 
1
@@ -30,7 +30,7 @@
2
     <number>0</number>
3
    </property>
4
    <item>
5
-    <widget class="QWidget" name="widget">
6
+    <widget class="QFrame" name="widget">
7
      <property name="sizePolicy">
8
       <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
9
        <horstretch>0</horstretch>
10
@@ -74,7 +74,7 @@
11
        </widget>
12
       </item>
13
       <item row="1" column="1">
14
-       <widget class="QWidget" name="serviceWidget">
15
+       <widget class="QFrame" name="serviceWidget">
16
         <layout class="QHBoxLayout" name="serviceWidgetLayout">
17
          <property name="leftMargin">
18
           <number>0</number>
19
@@ -286,7 +286,7 @@
20
         </widget>
21
        </item>
22
        <item row="1" column="1">
23
-        <widget class="QWidget" name="streamKeyWidget">
24
+        <widget class="QFrame" name="streamKeyWidget">
25
          <layout class="QHBoxLayout" name="horizontalLayout_4">
26
           <property name="leftMargin">
27
            <number>0</number>
28
@@ -349,7 +349,7 @@
29
           <number>500</number>
30
          </property>
31
          <property name="maximum">
32
-          <number>10000</number>
33
+          <number>51000</number>
34
          </property>
35
          <property name="value">
36
           <number>2500</number>
37
@@ -418,15 +418,11 @@
38
        </item>
39
        <item row="7" column="1">
40
         <widget class="QPushButton" name="connectAccount2">
41
-         <property name="text">
42
-          <string>Basic.AutoConfig.StreamPage.ConnectAccount</string>
43
+         <property name="cursor">
44
+          <cursorShape>PointingHandCursor</cursorShape>
45
          </property>
46
-        </widget>
47
-       </item>
48
-       <item row="8" column="1">
49
-        <widget class="QPushButton" name="disconnectAccount">
50
          <property name="text">
51
-          <string>Basic.AutoConfig.StreamPage.DisconnectAccount</string>
52
+          <string>Basic.AutoConfig.StreamPage.ConnectAccount</string>
53
          </property>
54
         </widget>
55
        </item>
56
@@ -443,6 +439,63 @@
57
          </property>
58
         </spacer>
59
        </item>
60
+       <item row="8" column="1">
61
+        <layout class="QHBoxLayout" name="horizontalLayout_6">
62
+         <property name="leftMargin">
63
+          <number>7</number>
64
+         </property>
65
+         <property name="rightMargin">
66
+          <number>7</number>
67
+         </property>
68
+         <item>
69
+          <widget class="QLabel" name="connectedAccountText">
70
+           <property name="font">
71
+            <font>
72
+             <weight>75</weight>
73
+             <bold>true</bold>
74
+            </font>
75
+           </property>
76
+           <property name="text">
77
+            <string>Auth.LoadingChannel.Title</string>
78
+           </property>
79
+          </widget>
80
+         </item>
81
+         <item>
82
+          <widget class="QPushButton" name="disconnectAccount">
83
+           <property name="text">
84
+            <string>Basic.AutoConfig.StreamPage.DisconnectAccount</string>
85
+           </property>
86
+          </widget>
87
+         </item>
88
+        </layout>
89
+       </item>
90
+       <item row="8" column="0">
91
+        <widget class="QLabel" name="connectedAccountLabel">
92
+         <property name="text">
93
+          <string>Basic.AutoConfig.StreamPage.ConnectedAccount</string>
94
+         </property>
95
+        </widget>
96
+       </item>
97
+       <item row="9" column="0">
98
+        <spacer name="horizontalSpacer">
99
+         <property name="orientation">
100
+          <enum>Qt::Horizontal</enum>
101
+         </property>
102
+         <property name="sizeHint" stdset="0">
103
+          <size>
104
+           <width>40</width>
105
+           <height>20</height>
106
+          </size>
107
+         </property>
108
+        </spacer>
109
+       </item>
110
+       <item row="9" column="1">
111
+        <widget class="QPushButton" name="useStreamKeyAdv">
112
+         <property name="text">
113
+          <string>Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced</string>
114
+         </property>
115
+        </widget>
116
+       </item>
117
       </layout>
118
      </widget>
119
     </widget>
120
obs-studio-27.0.1.tar.xz/UI/forms/OBSAbout.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSAbout.ui Changed
10
 
1
@@ -149,7 +149,7 @@
2
     </layout>
3
    </item>
4
    <item>
5
-    <widget class="QWidget" name="widget">
6
+    <widget class="QFrame" name="widget">
7
      <property name="minimumSize">
8
       <size>
9
        <width>0</width>
10
obs-studio-27.0.1.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSBasic.ui Changed
427
 
1
@@ -61,7 +61,7 @@
2
          <number>2</number>
3
         </property>
4
         <item>
5
-         <widget class="QWidget" name="previewDisabledWidget">
6
+         <widget class="QFrame" name="previewDisabledWidget">
7
           <property name="sizePolicy">
8
            <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
9
             <horstretch>0</horstretch>
10
@@ -196,7 +196,7 @@
11
      </layout>
12
     </item>
13
     <item>
14
-     <widget class="QWidget" name="contextContainer">
15
+     <widget class="QFrame" name="contextContainer">
16
       <property name="sizePolicy">
17
        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
18
         <horstretch>0</horstretch>
19
@@ -205,13 +205,7 @@
20
       </property>
21
       <property name="minimumSize">
22
        <size>
23
-        <width>0</width>
24
-        <height>30</height>
25
-       </size>
26
-      </property>
27
-      <property name="maximumSize">
28
-       <size>
29
-        <width>16777215</width>
30
+        <width>740</width>
31
         <height>30</height>
32
        </size>
33
       </property>
34
@@ -235,7 +229,7 @@
35
         <number>4</number>
36
        </property>
37
        <item>
38
-        <widget class="QWidget" name="contextSubContainer">
39
+        <widget class="QFrame" name="contextSubContainer">
40
          <property name="sizePolicy">
41
           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
42
            <horstretch>0</horstretch>
43
@@ -265,6 +259,31 @@
44
            <number>0</number>
45
           </property>
46
           <item>
47
+           <widget class="QLabel" name="contextSourceIcon">
48
+            <property name="sizePolicy">
49
+             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
50
+              <horstretch>0</horstretch>
51
+              <verstretch>0</verstretch>
52
+             </sizepolicy>
53
+            </property>
54
+            <property name="minimumSize">
55
+             <size>
56
+              <width>22</width>
57
+              <height>22</height>
58
+             </size>
59
+            </property>
60
+            <property name="maximumSize">
61
+             <size>
62
+              <width>22</width>
63
+              <height>22</height>
64
+             </size>
65
+            </property>
66
+            <property name="text">
67
+             <string/>
68
+            </property>
69
+           </widget>
70
+          </item>
71
+          <item>
72
            <widget class="QLabel" name="contextSourceLabel">
73
             <property name="sizePolicy">
74
              <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
75
@@ -274,13 +293,13 @@
76
             </property>
77
             <property name="minimumSize">
78
              <size>
79
-              <width>250</width>
80
+              <width>160</width>
81
               <height>22</height>
82
              </size>
83
             </property>
84
             <property name="maximumSize">
85
              <size>
86
-              <width>250</width>
87
+              <width>160</width>
88
               <height>22</height>
89
              </size>
90
             </property>
91
@@ -290,6 +309,31 @@
92
            </widget>
93
           </item>
94
           <item>
95
+           <widget class="QLabel" name="contextSourceIconSpacer">
96
+            <property name="sizePolicy">
97
+             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
98
+              <horstretch>0</horstretch>
99
+              <verstretch>0</verstretch>
100
+             </sizepolicy>
101
+            </property>
102
+            <property name="minimumSize">
103
+             <size>
104
+              <width>22</width>
105
+              <height>22</height>
106
+             </size>
107
+            </property>
108
+            <property name="maximumSize">
109
+             <size>
110
+              <width>22</width>
111
+              <height>22</height>
112
+             </size>
113
+            </property>
114
+            <property name="text">
115
+             <string/>
116
+            </property>
117
+           </widget>
118
+          </item>
119
+          <item>
120
            <widget class="Line" name="line_3">
121
             <property name="orientation">
122
              <enum>Qt::Vertical</enum>
123
@@ -310,12 +354,6 @@
124
               <height>22</height>
125
              </size>
126
             </property>
127
-            <property name="maximumSize">
128
-             <size>
129
-              <width>16777215</width>
130
-              <height>22</height>
131
-             </size>
132
-            </property>
133
             <property name="toolTip">
134
              <string>Properties</string>
135
             </property>
136
@@ -342,12 +380,6 @@
137
               <height>22</height>
138
              </size>
139
             </property>
140
-            <property name="maximumSize">
141
-             <size>
142
-              <width>16777215</width>
143
-              <height>22</height>
144
-             </size>
145
-            </property>
146
             <property name="toolTip">
147
              <string>Filters</string>
148
             </property>
149
@@ -374,12 +406,6 @@
150
               <height>22</height>
151
              </size>
152
             </property>
153
-            <property name="maximumSize">
154
-             <size>
155
-              <width>16777215</width>
156
-              <height>22</height>
157
-             </size>
158
-            </property>
159
             <property name="text">
160
              <string>Interact</string>
161
             </property>
162
@@ -406,9 +432,9 @@
163
         </widget>
164
        </item>
165
        <item>
166
-        <widget class="QWidget" name="emptySpace">
167
+        <widget class="QFrame" name="emptySpace">
168
          <property name="sizePolicy">
169
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
170
+          <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
171
            <horstretch>0</horstretch>
172
            <verstretch>0</verstretch>
173
           </sizepolicy>
174
@@ -419,12 +445,6 @@
175
            <height>22</height>
176
           </size>
177
          </property>
178
-         <property name="maximumSize">
179
-          <size>
180
-           <width>16777215</width>
181
-           <height>22</height>
182
-          </size>
183
-         </property>
184
          <layout class="QHBoxLayout" name="horizontalLayout_6">
185
           <property name="spacing">
186
            <number>0</number>
187
@@ -627,6 +647,8 @@
188
     <addaction name="actionImportSceneCollection"/>
189
     <addaction name="actionExportSceneCollection"/>
190
     <addaction name="separator"/>
191
+    <addaction name="actionShowMissingFiles"/>
192
+    <addaction name="separator"/>
193
    </widget>
194
    <widget class="QMenu" name="viewMenu">
195
     <property name="title">
196
@@ -1004,7 +1026,7 @@
197
           <rect>
198
            <x>0</x>
199
            <y>0</y>
200
-           <width>94</width>
201
+           <width>67</width>
202
            <height>16</height>
203
           </rect>
204
          </property>
205
@@ -1116,7 +1138,7 @@
206
       <number>4</number>
207
      </property>
208
      <item>
209
-      <widget class="QWidget" name="transitionsContainer">
210
+      <widget class="QFrame" name="transitionsContainer">
211
        <layout class="QVBoxLayout" name="verticalLayout_2">
212
         <property name="spacing">
213
          <number>2</number>
214
@@ -1176,7 +1198,7 @@
215
             </property>
216
             <property name="icon">
217
              <iconset>
218
-              <normaloff>:/res/images/configuration21_16.png</normaloff>:/res/images/configuration21_16.png</iconset>
219
+              <normaloff>:/settings/images/settings/general.svg</normaloff>:/settings/images/settings/general.svg</iconset>
220
             </property>
221
             <property name="flat">
222
              <bool>true</bool>
223
@@ -1280,29 +1302,58 @@
224
       <number>4</number>
225
      </property>
226
      <item>
227
-      <widget class="QPushButton" name="streamButton">
228
-       <property name="enabled">
229
-        <bool>true</bool>
230
-       </property>
231
-       <property name="sizePolicy">
232
-        <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
233
-         <horstretch>0</horstretch>
234
-         <verstretch>0</verstretch>
235
-        </sizepolicy>
236
-       </property>
237
-       <property name="minimumSize">
238
-        <size>
239
-         <width>150</width>
240
-         <height>0</height>
241
-        </size>
242
-       </property>
243
-       <property name="text">
244
-        <string>Basic.Main.StartStreaming</string>
245
-       </property>
246
-       <property name="checkable">
247
-        <bool>true</bool>
248
-       </property>
249
-      </widget>
250
+      <layout class="QHBoxLayout" name="horizontalLayout_7">
251
+       <item>
252
+        <widget class="QPushButton" name="streamButton">
253
+         <property name="enabled">
254
+          <bool>true</bool>
255
+         </property>
256
+         <property name="sizePolicy">
257
+          <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
258
+           <horstretch>0</horstretch>
259
+           <verstretch>0</verstretch>
260
+          </sizepolicy>
261
+         </property>
262
+         <property name="minimumSize">
263
+          <size>
264
+           <width>150</width>
265
+           <height>0</height>
266
+          </size>
267
+         </property>
268
+         <property name="text">
269
+          <string>Basic.Main.StartStreaming</string>
270
+         </property>
271
+         <property name="checkable">
272
+          <bool>true</bool>
273
+         </property>
274
+        </widget>
275
+       </item>
276
+       <item>
277
+        <widget class="QPushButton" name="broadcastButton">
278
+         <property name="enabled">
279
+          <bool>true</bool>
280
+         </property>
281
+         <property name="sizePolicy">
282
+          <sizepolicy hsizetype="Ignored" vsizetype="Fixed">
283
+           <horstretch>0</horstretch>
284
+           <verstretch>0</verstretch>
285
+          </sizepolicy>
286
+         </property>
287
+         <property name="minimumSize">
288
+          <size>
289
+           <width>150</width>
290
+           <height>0</height>
291
+          </size>
292
+         </property>
293
+         <property name="text">
294
+          <string>Basic.Main.StartBroadcast</string>
295
+         </property>
296
+         <property name="checkable">
297
+          <bool>true</bool>
298
+         </property>
299
+        </widget>
300
+       </item>
301
+      </layout>
302
      </item>
303
      <item>
304
       <layout class="QHBoxLayout" name="recordingLayout">
305
@@ -1427,7 +1478,7 @@
306
   <action name="actionAddScene">
307
    <property name="icon">
308
     <iconset>
309
-     <normaloff>:/res/images/add.png</normaloff>:/res/images/add.png</iconset>
310
+     <normaloff>:/res/images/plus.svg</normaloff>:/res/images/plus.svg</iconset>
311
    </property>
312
    <property name="text">
313
     <string>Add</string>
314
@@ -1439,7 +1490,7 @@
315
   <action name="actionAddSource">
316
    <property name="icon">
317
     <iconset>
318
-     <normaloff>:/res/images/add.png</normaloff>:/res/images/add.png</iconset>
319
+     <normaloff>:/res/images/plus.svg</normaloff>:/res/images/plus.svg</iconset>
320
    </property>
321
    <property name="text">
322
     <string>Add</string>
323
@@ -1451,7 +1502,7 @@
324
   <action name="actionRemoveScene">
325
    <property name="icon">
326
     <iconset>
327
-     <normaloff>:/res/images/list_remove.png</normaloff>:/res/images/list_remove.png</iconset>
328
+     <normaloff>:/res/images/minus.svg</normaloff>:/res/images/minus.svg</iconset>
329
    </property>
330
    <property name="text">
331
     <string>Remove</string>
332
@@ -1469,7 +1520,7 @@
333
   <action name="actionRemoveSource">
334
    <property name="icon">
335
     <iconset>
336
-     <normaloff>:/res/images/list_remove.png</normaloff>:/res/images/list_remove.png</iconset>
337
+     <normaloff>:/res/images/minus.svg</normaloff>:/res/images/minus.svg</iconset>
338
    </property>
339
    <property name="text">
340
     <string>Remove</string>
341
@@ -1490,7 +1541,7 @@
342
    </property>
343
    <property name="icon">
344
     <iconset>
345
-     <normaloff>:/res/images/properties.png</normaloff>:/res/images/properties.png</iconset>
346
+     <normaloff>:/settings/images/settings/general.svg</normaloff>:/settings/images/settings/general.svg</iconset>
347
    </property>
348
    <property name="text">
349
     <string>Properties</string>
350
@@ -1502,7 +1553,7 @@
351
   <action name="actionSceneUp">
352
    <property name="icon">
353
     <iconset>
354
-     <normaloff>:/res/images/up.png</normaloff>:/res/images/up.png</iconset>
355
+     <normaloff>:/res/images/up.svg</normaloff>:/res/images/up.svg</iconset>
356
    </property>
357
    <property name="text">
358
     <string>MoveUp</string>
359
@@ -1517,7 +1568,7 @@
360
    </property>
361
    <property name="icon">
362
     <iconset>
363
-     <normaloff>:/res/images/up.png</normaloff>:/res/images/up.png</iconset>
364
+     <normaloff>:/res/images/up.svg</normaloff>:/res/images/up.svg</iconset>
365
    </property>
366
    <property name="text">
367
     <string>MoveUp</string>
368
@@ -1529,7 +1580,7 @@
369
   <action name="actionSceneDown">
370
    <property name="icon">
371
     <iconset>
372
-     <normaloff>:/res/images/down.png</normaloff>:/res/images/down.png</iconset>
373
+     <normaloff>:/res/images/down.svg</normaloff>:/res/images/down.svg</iconset>
374
    </property>
375
    <property name="text">
376
     <string>MoveDown</string>
377
@@ -1544,7 +1595,7 @@
378
    </property>
379
    <property name="icon">
380
     <iconset>
381
-     <normaloff>:/res/images/down.png</normaloff>:/res/images/down.png</iconset>
382
+     <normaloff>:/res/images/down.svg</normaloff>:/res/images/down.svg</iconset>
383
    </property>
384
    <property name="text">
385
     <string>MoveDown</string>
386
@@ -1779,6 +1830,11 @@
387
     <string>Export</string>
388
    </property>
389
   </action>
390
+  <action name="actionShowMissingFiles">
391
+   <property name="text">
392
+    <string>Basic.MainMenu.File.ShowMissingFiles</string>
393
+   </property>
394
+  </action>
395
   <action name="actionNewProfile">
396
    <property name="text">
397
     <string>New</string>
398
@@ -2042,19 +2098,19 @@
399
    <property name="enabled">
400
     <bool>false</bool>
401
    </property>
402
-    <property name="text">
403
-      <string>Undo.Undo</string>
404
-    </property>
405
+   <property name="text">
406
+    <string>Undo.Undo</string>
407
+   </property>
408
   </action>
409
   <action name="actionMainRedo">
410
    <property name="enabled">
411
     <bool>false</bool>
412
-    </property>
413
-    <property name="text">
414
-      <string>Undo.Redo</string>
415
-    </property>
416
-    </action>
417
-  </widget>
418
+   </property>
419
+   <property name="text">
420
+    <string>Undo.Redo</string>
421
+   </property>
422
+  </action>
423
+ </widget>
424
  <customwidgets>
425
   <customwidget>
426
    <class>OBSBasicPreview</class>
427
obs-studio-27.0.1.tar.xz/UI/forms/OBSBasicFilters.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSBasicFilters.ui Changed
392
 
1
@@ -15,20 +15,26 @@
2
   </property>
3
   <layout class="QVBoxLayout" name="verticalLayout">
4
    <item>
5
-    <layout class="QHBoxLayout" name="horizontalLayout">
6
+    <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,10">
7
      <property name="sizeConstraint">
8
       <enum>QLayout::SetMinimumSize</enum>
9
      </property>
10
      <item>
11
       <layout class="QVBoxLayout" name="verticalLayout_2">
12
        <item>
13
-        <widget class="QWidget" name="asyncWidget">
14
+        <widget class="QFrame" name="asyncWidget">
15
          <property name="sizePolicy">
16
           <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
17
            <horstretch>0</horstretch>
18
            <verstretch>0</verstretch>
19
           </sizepolicy>
20
          </property>
21
+         <property name="minimumSize">
22
+          <size>
23
+           <width>255</width>
24
+           <height>0</height>
25
+          </size>
26
+         </property>
27
          <layout class="QVBoxLayout" name="verticalLayout_3">
28
           <property name="leftMargin">
29
            <number>0</number>
30
@@ -62,8 +68,8 @@
31
             </property>
32
            </widget>
33
           </item>
34
-          <item alignment="Qt::AlignLeft">
35
-           <widget class="QWidget" name="widget">
36
+          <item>
37
+           <widget class="QFrame" name="widget">
38
             <layout class="QHBoxLayout" name="horizontalLayout_4">
39
              <property name="spacing">
40
               <number>4</number>
41
@@ -88,12 +94,15 @@
42
                  <height>22</height>
43
                 </size>
44
                </property>
45
+               <property name="accessibleName">
46
+                <string>Add</string>
47
+               </property>
48
                <property name="text">
49
                 <string notr="true"/>
50
                </property>
51
                <property name="icon">
52
-                <iconset resource="obs.qrc">
53
-                 <normaloff>:/res/images/add.png</normaloff>:/res/images/add.png</iconset>
54
+                <iconset>
55
+                 <normaloff>:/res/images/plus.svg</normaloff>:/res/images/plus.svg</iconset>
56
                </property>
57
                <property name="autoDefault">
58
                 <bool>false</bool>
59
@@ -104,9 +113,6 @@
60
                <property name="themeID" stdset="0">
61
                 <string>addIconSmall</string>
62
                </property>
63
-               <property name="accessibleName">
64
-                <string>Add</string>
65
-               </property>
66
               </widget>
67
              </item>
68
              <item>
69
@@ -117,12 +123,15 @@
70
                  <height>22</height>
71
                 </size>
72
                </property>
73
+               <property name="accessibleName">
74
+                <string>Remove</string>
75
+               </property>
76
                <property name="text">
77
                 <string notr="true"/>
78
                </property>
79
                <property name="icon">
80
-                <iconset resource="obs.qrc">
81
-                 <normaloff>:/res/images/list_remove.png</normaloff>:/res/images/list_remove.png</iconset>
82
+                <iconset>
83
+                 <normaloff>:/res/images/minus.svg</normaloff>:/res/images/minus.svg</iconset>
84
                </property>
85
                <property name="autoDefault">
86
                 <bool>false</bool>
87
@@ -133,9 +142,6 @@
88
                <property name="themeID" stdset="0">
89
                 <string>removeIconSmall</string>
90
                </property>
91
-               <property name="accessibleName">
92
-                <string>Remove</string>
93
-               </property>
94
               </widget>
95
              </item>
96
              <item>
97
@@ -146,12 +152,15 @@
98
                  <height>22</height>
99
                 </size>
100
                </property>
101
+               <property name="accessibleName">
102
+                <string>MoveUp</string>
103
+               </property>
104
                <property name="text">
105
                 <string notr="true"/>
106
                </property>
107
                <property name="icon">
108
-                <iconset resource="obs.qrc">
109
-                 <normaloff>:/res/images/up.png</normaloff>:/res/images/up.png</iconset>
110
+                <iconset>
111
+                 <normaloff>:/res/images/up.svg</normaloff>:/res/images/up.svg</iconset>
112
                </property>
113
                <property name="autoDefault">
114
                 <bool>false</bool>
115
@@ -162,9 +171,6 @@
116
                <property name="themeID" stdset="0">
117
                 <string>upArrowIconSmall</string>
118
                </property>
119
-               <property name="accessibleName">
120
-                <string>MoveUp</string>
121
-               </property>
122
               </widget>
123
              </item>
124
              <item>
125
@@ -175,12 +181,15 @@
126
                  <height>22</height>
127
                 </size>
128
                </property>
129
+               <property name="accessibleName">
130
+                <string>MoveDown</string>
131
+               </property>
132
                <property name="text">
133
                 <string notr="true"/>
134
                </property>
135
                <property name="icon">
136
-                <iconset resource="obs.qrc">
137
-                 <normaloff>:/res/images/down.png</normaloff>:/res/images/down.png</iconset>
138
+                <iconset>
139
+                 <normaloff>:/res/images/down.svg</normaloff>:/res/images/down.svg</iconset>
140
                </property>
141
                <property name="autoDefault">
142
                 <bool>false</bool>
143
@@ -191,11 +200,24 @@
144
                <property name="themeID" stdset="0">
145
                 <string>downArrowIconSmall</string>
146
                </property>
147
-               <property name="accessibleName">
148
-                <string>MoveDown</string>
149
-               </property>
150
               </widget>
151
              </item>
152
+             <item>
153
+              <spacer name="asyncToolbarSpacer">
154
+               <property name="orientation">
155
+                <enum>Qt::Horizontal</enum>
156
+               </property>
157
+               <property name="sizeType">
158
+                <enum>QSizePolicy::Expanding</enum>
159
+               </property>
160
+               <property name="sizeHint" stdset="0">
161
+                <size>
162
+                 <width>20</width>
163
+                 <height>0</height>
164
+                </size>
165
+               </property>
166
+              </spacer>
167
+             </item>
168
             </layout>
169
            </widget>
170
           </item>
171
@@ -210,13 +232,19 @@
172
         </widget>
173
        </item>
174
        <item>
175
-        <widget class="QWidget" name="effectWidget">
176
+        <widget class="QFrame" name="effectWidget">
177
          <property name="sizePolicy">
178
           <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
179
            <horstretch>0</horstretch>
180
            <verstretch>0</verstretch>
181
           </sizepolicy>
182
          </property>
183
+         <property name="minimumSize">
184
+          <size>
185
+           <width>255</width>
186
+           <height>0</height>
187
+          </size>
188
+         </property>
189
          <layout class="QVBoxLayout" name="verticalLayout_4">
190
           <property name="leftMargin">
191
            <number>0</number>
192
@@ -250,8 +278,8 @@
193
             </property>
194
            </widget>
195
           </item>
196
-          <item alignment="Qt::AlignLeft">
197
-           <widget class="QWidget" name="widget_2">
198
+          <item>
199
+           <widget class="QFrame" name="widget_2">
200
             <layout class="QHBoxLayout" name="horizontalLayout_6">
201
              <property name="spacing">
202
               <number>4</number>
203
@@ -276,12 +304,15 @@
204
                  <height>22</height>
205
                 </size>
206
                </property>
207
+               <property name="accessibleName">
208
+                <string>Add</string>
209
+               </property>
210
                <property name="text">
211
                 <string notr="true"/>
212
                </property>
213
                <property name="icon">
214
-                <iconset resource="obs.qrc">
215
-                 <normaloff>:/res/images/add.png</normaloff>:/res/images/add.png</iconset>
216
+                <iconset>
217
+                 <normaloff>:/res/images/plus.svg</normaloff>:/res/images/plus.svg</iconset>
218
                </property>
219
                <property name="autoDefault">
220
                 <bool>false</bool>
221
@@ -292,9 +323,6 @@
222
                <property name="themeID" stdset="0">
223
                 <string>addIconSmall</string>
224
                </property>
225
-               <property name="accessibleName">
226
-                <string>Add</string>
227
-               </property>
228
               </widget>
229
              </item>
230
              <item>
231
@@ -305,12 +333,15 @@
232
                  <height>22</height>
233
                 </size>
234
                </property>
235
+               <property name="accessibleName">
236
+                <string>Remove</string>
237
+               </property>
238
                <property name="text">
239
                 <string notr="true"/>
240
                </property>
241
                <property name="icon">
242
-                <iconset resource="obs.qrc">
243
-                 <normaloff>:/res/images/list_remove.png</normaloff>:/res/images/list_remove.png</iconset>
244
+                <iconset>
245
+                 <normaloff>:/res/images/minus.svg</normaloff>:/res/images/minus.svg</iconset>
246
                </property>
247
                <property name="autoDefault">
248
                 <bool>false</bool>
249
@@ -321,9 +352,6 @@
250
                <property name="themeID" stdset="0">
251
                 <string>removeIconSmall</string>
252
                </property>
253
-               <property name="accessibleName">
254
-                <string>Remove</string>
255
-               </property>
256
               </widget>
257
              </item>
258
              <item>
259
@@ -334,12 +362,15 @@
260
                  <height>22</height>
261
                 </size>
262
                </property>
263
+               <property name="accessibleName">
264
+                <string>MoveUp</string>
265
+               </property>
266
                <property name="text">
267
                 <string notr="true"/>
268
                </property>
269
                <property name="icon">
270
-                <iconset resource="obs.qrc">
271
-                 <normaloff>:/res/images/up.png</normaloff>:/res/images/up.png</iconset>
272
+                <iconset>
273
+                 <normaloff>:/res/images/up.svg</normaloff>:/res/images/up.svg</iconset>
274
                </property>
275
                <property name="autoDefault">
276
                 <bool>false</bool>
277
@@ -350,9 +381,6 @@
278
                <property name="themeID" stdset="0">
279
                 <string>upArrowIconSmall</string>
280
                </property>
281
-               <property name="accessibleName">
282
-                <string>MoveUp</string>
283
-               </property>
284
               </widget>
285
              </item>
286
              <item>
287
@@ -363,12 +391,15 @@
288
                  <height>22</height>
289
                 </size>
290
                </property>
291
+               <property name="accessibleName">
292
+                <string>MoveDown</string>
293
+               </property>
294
                <property name="text">
295
                 <string notr="true"/>
296
                </property>
297
                <property name="icon">
298
-                <iconset resource="obs.qrc">
299
-                 <normaloff>:/res/images/down.png</normaloff>:/res/images/down.png</iconset>
300
+                <iconset>
301
+                 <normaloff>:/res/images/down.svg</normaloff>:/res/images/down.svg</iconset>
302
                </property>
303
                <property name="autoDefault">
304
                 <bool>false</bool>
305
@@ -379,11 +410,24 @@
306
                <property name="themeID" stdset="0">
307
                 <string>downArrowIconSmall</string>
308
                </property>
309
-               <property name="accessibleName">
310
-                <string>MoveDown</string>
311
-               </property>
312
               </widget>
313
              </item>
314
+             <item>
315
+              <spacer name="effectToolbarSpacer">
316
+               <property name="orientation">
317
+                <enum>Qt::Horizontal</enum>
318
+               </property>
319
+               <property name="sizeType">
320
+                <enum>QSizePolicy::Expanding</enum>
321
+               </property>
322
+               <property name="sizeHint" stdset="0">
323
+                <size>
324
+                 <width>20</width>
325
+                 <height>0</height>
326
+                </size>
327
+               </property>
328
+              </spacer>
329
+             </item>
330
             </layout>
331
            </widget>
332
           </item>
333
@@ -397,7 +441,7 @@
334
        <item>
335
         <layout class="QVBoxLayout" name="rightLayout">
336
          <item>
337
-          <widget class="OBSQTDisplay" name="preview">
338
+          <widget class="OBSQTDisplay" name="preview" native="true">
339
            <property name="sizePolicy">
340
             <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
341
              <horstretch>0</horstretch>
342
@@ -438,7 +482,7 @@
343
          <item>
344
           <widget class="QDialogButtonBox" name="buttonBox">
345
            <property name="standardButtons">
346
-            <set>QDialogButtonBox::Reset|QDialogButtonBox::Close</set>
347
+            <set>QDialogButtonBox::Close|QDialogButtonBox::Reset</set>
348
            </property>
349
           </widget>
350
          </item>
351
@@ -451,8 +495,8 @@
352
   </layout>
353
   <action name="actionRemoveFilter">
354
    <property name="icon">
355
-    <iconset resource="obs.qrc">
356
-     <normaloff>:/res/images/list_remove.png</normaloff>:/res/images/list_remove.png</iconset>
357
+    <iconset>
358
+     <normaloff>:/res/images/minus.svg</normaloff>:/res/images/minus.svg</iconset>
359
    </property>
360
    <property name="text">
361
     <string>Remove</string>
362
@@ -463,8 +507,8 @@
363
   </action>
364
   <action name="actionMoveUp">
365
    <property name="icon">
366
-    <iconset resource="obs.qrc">
367
-     <normaloff>:/res/images/up.png</normaloff>:/res/images/up.png</iconset>
368
+    <iconset>
369
+     <normaloff>:/res/images/up.svg</normaloff>:/res/images/up.svg</iconset>
370
    </property>
371
    <property name="text">
372
     <string>Basic.MainMenu.Edit.Order.MoveUp</string>
373
@@ -475,8 +519,8 @@
374
   </action>
375
   <action name="actionMoveDown">
376
    <property name="icon">
377
-    <iconset resource="obs.qrc">
378
-     <normaloff>:/res/images/down.png</normaloff>:/res/images/down.png</iconset>
379
+    <iconset>
380
+     <normaloff>:/res/images/down.svg</normaloff>:/res/images/down.svg</iconset>
381
    </property>
382
    <property name="text">
383
     <string>Basic.MainMenu.Edit.Order.MoveDown</string>
384
@@ -502,6 +546,5 @@
385
  <resources>
386
   <include location="obs.qrc"/>
387
  </resources>
388
- <connections>
389
- </connections>
390
+ <connections/>
391
 </ui>
392
obs-studio-27.0.1.tar.xz/UI/forms/OBSBasicInteraction.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSBasicInteraction.ui Changed
10
 
1
@@ -18,7 +18,7 @@
2
   </property>
3
   <layout class="QVBoxLayout" name="verticalLayout">
4
    <item>
5
-    <widget class="OBSQTDisplay" name="preview">
6
+    <widget class="OBSQTDisplay" name="preview" native="true">
7
      <property name="sizePolicy">
8
       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
9
        <horstretch>0</horstretch>
10
obs-studio-27.0.1.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSBasicSettings.ui Changed
470
 
1
@@ -151,8 +151,8 @@
2
              <rect>
3
               <x>0</x>
4
               <y>0</y>
5
-              <width>803</width>
6
-              <height>1026</height>
7
+              <width>806</width>
8
+              <height>1181</height>
9
              </rect>
10
             </property>
11
             <layout class="QVBoxLayout" name="verticalLayout_19">
12
@@ -168,8 +168,8 @@
13
              <property name="bottomMargin">
14
               <number>9</number>
15
              </property>
16
-             <item alignment="Qt::AlignTop">
17
-              <widget class="QWidget" name="widget_2">
18
+             <item>
19
+              <widget class="QFrame" name="widget_2">
20
                <layout class="QVBoxLayout" name="verticalLayout_20">
21
                 <item>
22
                  <widget class="QGroupBox" name="groupBox_15">
23
@@ -595,6 +595,13 @@
24
                      </property>
25
                     </widget>
26
                    </item>
27
+                   <item row="3" column="1">
28
+                    <widget class="QCheckBox" name="previewSafeAreas">
29
+                     <property name="text">
30
+                      <string>Basic.Settings.General.Multiview.DrawSafeAreas</string>
31
+                     </property>
32
+                    </widget>
33
+                   </item>
34
                    <item row="0" column="1">
35
                     <widget class="QCheckBox" name="overflowHide">
36
                      <property name="text">
37
@@ -799,7 +806,7 @@
38
           <number>0</number>
39
          </property>
40
          <item>
41
-          <widget class="QWidget" name="widget_5">
42
+          <widget class="QFrame" name="widget_5">
43
            <property name="sizePolicy">
44
             <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
45
              <horstretch>0</horstretch>
46
@@ -824,7 +831,7 @@
47
              </widget>
48
             </item>
49
             <item row="3" column="1">
50
-             <widget class="QWidget" name="serviceWidget">
51
+             <widget class="QFrame" name="serviceWidget">
52
               <layout class="QHBoxLayout" name="serviceWidgetLayout" stretch="0,0">
53
                <property name="leftMargin">
54
                 <number>0</number>
55
@@ -1052,7 +1059,7 @@
56
               </widget>
57
              </item>
58
              <item row="1" column="1">
59
-              <widget class="QWidget" name="streamKeyWidget">
60
+              <widget class="QFrame" name="streamKeyWidget">
61
                <layout class="QHBoxLayout" name="horizontalLayout_11">
62
                 <property name="leftMargin">
63
                  <number>0</number>
64
@@ -1115,33 +1122,28 @@
65
                </property>
66
               </spacer>
67
              </item>
68
-             <item row="3" column="1">
69
-              <layout class="QHBoxLayout" name="horizontalLayout_15">
70
+             <item row="4" column="1">
71
+              <layout class="QHBoxLayout" name="horizontalLayout_23">
72
+               <property name="spacing">
73
+                <number>8</number>
74
+               </property>
75
+               <property name="leftMargin">
76
+                <number>7</number>
77
+               </property>
78
+               <property name="rightMargin">
79
+                <number>7</number>
80
+               </property>
81
                <item>
82
-                <widget class="QPushButton" name="connectAccount2">
83
+                <widget class="QLabel" name="connectedAccountText">
84
+                 <property name="styleSheet">
85
+                  <string notr="true">font-weight: bold</string>
86
+                 </property>
87
                  <property name="text">
88
-                  <string>Basic.AutoConfig.StreamPage.ConnectAccount</string>
89
+                  <string>Auth.LoadingChannel.Title</string>
90
                  </property>
91
                 </widget>
92
                </item>
93
                <item>
94
-                <spacer name="horizontalSpacer_19">
95
-                 <property name="orientation">
96
-                  <enum>Qt::Horizontal</enum>
97
-                 </property>
98
-                 <property name="sizeHint" stdset="0">
99
-                  <size>
100
-                   <width>40</width>
101
-                   <height>20</height>
102
-                  </size>
103
-                 </property>
104
-                </spacer>
105
-               </item>
106
-              </layout>
107
-             </item>
108
-             <item row="4" column="1">
109
-              <layout class="QHBoxLayout" name="horizontalLayout_23">
110
-               <item>
111
                 <widget class="QPushButton" name="disconnectAccount">
112
                  <property name="text">
113
                   <string>Basic.AutoConfig.StreamPage.DisconnectAccount</string>
114
@@ -1163,21 +1165,21 @@
115
                </item>
116
               </layout>
117
              </item>
118
-             <item row="5" column="1">
119
+             <item row="6" column="1">
120
               <widget class="QCheckBox" name="bandwidthTestEnable">
121
                <property name="text">
122
                 <string>Basic.Settings.Stream.BandwidthTestMode</string>
123
                </property>
124
               </widget>
125
              </item>
126
-             <item row="6" column="1">
127
+             <item row="7" column="1">
128
               <widget class="QCheckBox" name="useAuth">
129
                <property name="text">
130
                 <string>Basic.Settings.Stream.Custom.UseAuthentication</string>
131
                </property>
132
               </widget>
133
              </item>
134
-             <item row="8" column="0">
135
+             <item row="9" column="0">
136
               <widget class="QLabel" name="authUsernameLabel">
137
                <property name="text">
138
                 <string>Basic.Settings.Stream.Custom.Username</string>
139
@@ -1187,10 +1189,10 @@
140
                </property>
141
               </widget>
142
              </item>
143
-             <item row="8" column="1">
144
+             <item row="9" column="1">
145
               <widget class="QLineEdit" name="authUsername"/>
146
              </item>
147
-             <item row="9" column="0">
148
+             <item row="10" column="0">
149
               <widget class="QLabel" name="authPwLabel">
150
                <property name="text">
151
                 <string>Basic.Settings.Stream.Custom.Password</string>
152
@@ -1200,8 +1202,8 @@
153
                </property>
154
               </widget>
155
              </item>
156
-             <item row="9" column="1">
157
-              <widget class="QWidget" name="authPwWidget">
158
+             <item row="10" column="1">
159
+              <widget class="QFrame" name="authPwWidget">
160
                <layout class="QHBoxLayout" name="horizontalLayout_25">
161
                 <property name="leftMargin">
162
                  <number>0</number>
163
@@ -1232,10 +1234,10 @@
164
                </layout>
165
               </widget>
166
              </item>
167
-             <item row="7" column="1">
168
+             <item row="8" column="1">
169
               <widget class="QComboBox" name="twitchAddonDropdown"/>
170
              </item>
171
-             <item row="7" column="0">
172
+             <item row="8" column="0">
173
               <widget class="QLabel" name="twitchAddonLabel">
174
                <property name="text">
175
                 <string>Basic.Settings.Stream.TTVAddon</string>
176
@@ -1245,20 +1247,84 @@
177
                </property>
178
               </widget>
179
              </item>
180
-             <item row="10" column="1">
181
+             <item row="11" column="1">
182
               <widget class="QCheckBox" name="ignoreRecommended">
183
                <property name="text">
184
                 <string>Basic.Settings.Stream.IgnoreRecommended</string>
185
                </property>
186
               </widget>
187
              </item>
188
-             <item row="11" column="1">
189
+             <item row="12" column="1">
190
               <widget class="QLabel" name="enforceSettingsLabel">
191
                <property name="text">
192
                 <string notr="true"/>
193
                </property>
194
+               <property name="textFormat">
195
+                <enum>Qt::RichText</enum>
196
+               </property>
197
+               <property name="openExternalLinks">
198
+                <bool>true</bool>
199
+               </property>
200
+              </widget>
201
+             </item>
202
+             <item row="5" column="1">
203
+              <layout class="QHBoxLayout" name="horizontalLayout_28">
204
+               <item>
205
+                <widget class="QPushButton" name="useStreamKeyAdv">
206
+                 <property name="text">
207
+                  <string>Basic.AutoConfig.StreamPage.UseStreamKeyAdvanced</string>
208
+                 </property>
209
+                </widget>
210
+               </item>
211
+               <item>
212
+                <spacer name="horizontalSpacer_28">
213
+                 <property name="orientation">
214
+                  <enum>Qt::Horizontal</enum>
215
+                 </property>
216
+                 <property name="sizeHint" stdset="0">
217
+                  <size>
218
+                   <width>40</width>
219
+                   <height>20</height>
220
+                  </size>
221
+                 </property>
222
+                </spacer>
223
+               </item>
224
+              </layout>
225
+             </item>
226
+             <item row="4" column="0">
227
+              <widget class="QLabel" name="connectedAccountLabel">
228
+               <property name="text">
229
+                <string>Basic.AutoConfig.StreamPage.ConnectedAccount</string>
230
+               </property>
231
               </widget>
232
              </item>
233
+             <item row="3" column="1">
234
+              <layout class="QHBoxLayout" name="horizontalLayout_15">
235
+               <item>
236
+                <widget class="QPushButton" name="connectAccount2">
237
+                 <property name="cursor">
238
+                  <cursorShape>PointingHandCursor</cursorShape>
239
+                 </property>
240
+                 <property name="text">
241
+                  <string>Basic.AutoConfig.StreamPage.ConnectAccount</string>
242
+                 </property>
243
+                </widget>
244
+               </item>
245
+               <item>
246
+                <spacer name="horizontalSpacer_19">
247
+                 <property name="orientation">
248
+                  <enum>Qt::Horizontal</enum>
249
+                 </property>
250
+                 <property name="sizeHint" stdset="0">
251
+                  <size>
252
+                   <width>40</width>
253
+                   <height>20</height>
254
+                  </size>
255
+                 </property>
256
+                </spacer>
257
+               </item>
258
+              </layout>
259
+             </item>
260
             </layout>
261
            </widget>
262
           </widget>
263
@@ -1296,7 +1362,7 @@
264
               <x>0</x>
265
               <y>0</y>
266
               <width>820</width>
267
-              <height>677</height>
268
+              <height>679</height>
269
              </rect>
270
             </property>
271
             <layout class="QVBoxLayout" name="verticalLayout_21">
272
@@ -1312,8 +1378,8 @@
273
              <property name="bottomMargin">
274
               <number>9</number>
275
              </property>
276
-             <item alignment="Qt::AlignTop">
277
-              <widget class="QWidget" name="widget">
278
+             <item>
279
+              <widget class="QFrame" name="widget">
280
                <property name="sizePolicy">
281
                 <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
282
                  <horstretch>0</horstretch>
283
@@ -1829,8 +1895,8 @@
284
                    </property>
285
                   </spacer>
286
                  </item>
287
-                 <item alignment="Qt::AlignTop">
288
-                  <widget class="QWidget" name="simpleOutputContainer">
289
+                 <item>
290
+                  <widget class="QFrame" name="simpleOutputContainer">
291
                    <layout class="QVBoxLayout" name="verticalLayout_4">
292
                     <property name="leftMargin">
293
                      <number>0</number>
294
@@ -1888,8 +1954,8 @@
295
                      <property name="bottomMargin">
296
                       <number>9</number>
297
                      </property>
298
-                     <item alignment="Qt::AlignTop">
299
-                      <widget class="QWidget" name="widget_4">
300
+                     <item>
301
+                      <widget class="QFrame" name="widget_4">
302
                        <layout class="QVBoxLayout" name="verticalLayout_14">
303
                         <property name="spacing">
304
                          <number>0</number>
305
@@ -1907,7 +1973,7 @@
306
                          <number>0</number>
307
                         </property>
308
                         <item>
309
-                         <widget class="QWidget" name="advOutTopContainer">
310
+                         <widget class="QFrame" name="advOutTopContainer">
311
                           <property name="sizePolicy">
312
                            <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
313
                             <horstretch>0</horstretch>
314
@@ -1938,7 +2004,7 @@
315
                             </widget>
316
                            </item>
317
                            <item row="1" column="1">
318
-                            <widget class="QWidget" name="widget_8">
319
+                            <widget class="QFrame" name="widget_8">
320
                              <property name="sizePolicy">
321
                               <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
322
                                <horstretch>0</horstretch>
323
@@ -2071,7 +2137,7 @@
324
                       <number>9</number>
325
                      </property>
326
                      <item>
327
-                      <widget class="QWidget" name="advOutRecTypeContainer">
328
+                      <widget class="QFrame" name="advOutRecTypeContainer">
329
                        <layout class="QFormLayout" name="formLayout_9">
330
                         <property name="fieldGrowthPolicy">
331
                          <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
332
@@ -2141,7 +2207,7 @@
333
                           <number>0</number>
334
                          </property>
335
                          <item>
336
-                          <widget class="QWidget" name="advOutRecTopContainer">
337
+                          <widget class="QFrame" name="advOutRecTopContainer">
338
                            <property name="sizePolicy">
339
                             <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
340
                              <horstretch>0</horstretch>
341
@@ -2295,7 +2361,7 @@
342
                              </widget>
343
                             </item>
344
                             <item row="5" column="1">
345
-                             <widget class="QWidget" name="advOutRecRescaleContainer">
346
+                             <widget class="QFrame" name="advOutRecRescaleContainer">
347
                               <layout class="QHBoxLayout" name="horizontalLayout_4">
348
                                <property name="leftMargin">
349
                                 <number>0</number>
350
@@ -2465,8 +2531,8 @@
351
                            </layout>
352
                           </widget>
353
                          </item>
354
-                         <item alignment="Qt::AlignTop">
355
-                          <widget class="QWidget" name="widget_7">
356
+                         <item>
357
+                          <widget class="QFrame" name="widget_7">
358
                            <layout class="QVBoxLayout" name="verticalLayout_15">
359
                             <property name="leftMargin">
360
                              <number>0</number>
361
@@ -2820,7 +2886,7 @@
362
                           </widget>
363
                          </item>
364
                          <item row="13" column="1">
365
-                          <widget class="QWidget" name="widget_10">
366
+                          <widget class="QFrame" name="widget_10">
367
                            <property name="sizePolicy">
368
                             <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
369
                              <horstretch>0</horstretch>
370
@@ -2957,8 +3023,8 @@
371
                      <property name="bottomMargin">
372
                       <number>0</number>
373
                      </property>
374
-                     <item alignment="Qt::AlignTop">
375
-                      <widget class="QWidget" name="widget_3">
376
+                     <item>
377
+                      <widget class="QFrame" name="widget_3">
378
                        <property name="sizePolicy">
379
                         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
380
                          <horstretch>0</horstretch>
381
@@ -3804,8 +3870,8 @@
382
              <rect>
383
               <x>0</x>
384
               <y>0</y>
385
-              <width>555</width>
386
-              <height>469</height>
387
+              <width>820</width>
388
+              <height>641</height>
389
              </rect>
390
             </property>
391
             <layout class="QVBoxLayout" name="verticalLayout_50">
392
@@ -3821,8 +3887,8 @@
393
              <property name="bottomMargin">
394
               <number>9</number>
395
              </property>
396
-             <item alignment="Qt::AlignTop">
397
-              <widget class="QWidget" name="widget_50">
398
+             <item>
399
+              <widget class="QFrame" name="widget_50">
400
                <layout class="QVBoxLayout" name="verticalLayout_51">
401
                 <item>
402
                  <widget class="QGroupBox" name="audioGeneralGroupBox">
403
@@ -4226,6 +4292,19 @@
404
                   </layout>
405
                  </widget>
406
                 </item>
407
+                <item>
408
+                 <spacer name="verticalSpacer_4">
409
+                  <property name="orientation">
410
+                   <enum>Qt::Vertical</enum>
411
+                  </property>
412
+                  <property name="sizeHint" stdset="0">
413
+                   <size>
414
+                    <width>20</width>
415
+                    <height>0</height>
416
+                   </size>
417
+                  </property>
418
+                 </spacer>
419
+                </item>
420
                </layout>
421
               </widget>
422
              </item>
423
@@ -4660,8 +4739,8 @@
424
              <rect>
425
               <x>0</x>
426
               <y>0</y>
427
-              <width>602</width>
428
-              <height>781</height>
429
+              <width>609</width>
430
+              <height>870</height>
431
              </rect>
432
             </property>
433
             <layout class="QVBoxLayout" name="verticalLayout_23">
434
@@ -4678,7 +4757,7 @@
435
               <number>9</number>
436
              </property>
437
              <item>
438
-              <widget class="QWidget" name="widget_11">
439
+              <widget class="QFrame" name="widget_11">
440
                <layout class="QVBoxLayout" name="verticalLayout_24">
441
                 <item>
442
                  <widget class="QGroupBox" name="advancedGeneralGroupBox">
443
@@ -5071,7 +5150,7 @@
444
                     </widget>
445
                    </item>
446
                    <item row="1" column="1">
447
-                    <widget class="QWidget" name="widget_12">
448
+                    <widget class="QFrame" name="widget_12">
449
                      <property name="enabled">
450
                       <bool>true</bool>
451
                      </property>
452
@@ -5206,6 +5285,9 @@
453
                        <property name="suffix">
454
                         <string> s</string>
455
                        </property>
456
+                       <property name="minimum">
457
+                        <number>1</number>
458
+                       </property>
459
                        <property name="maximum">
460
                         <number>30</number>
461
                        </property>
462
@@ -5505,6 +5587,7 @@
463
   <tabstop>overflowHide</tabstop>
464
   <tabstop>overflowAlwaysVisible</tabstop>
465
   <tabstop>overflowSelectionHide</tabstop>
466
+  <tabstop>previewSafeAreas</tabstop>
467
   <tabstop>automaticSearch</tabstop>
468
   <tabstop>doubleClickSwitch</tabstop>
469
   <tabstop>studioPortraitLayout</tabstop>
470
obs-studio-27.0.1.tar.xz/UI/forms/OBSBasicTransform.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSBasicTransform.ui Changed
417
 
1
@@ -7,13 +7,13 @@
2
     <x>0</x>
3
     <y>0</y>
4
     <width>564</width>
5
-    <height>241</height>
6
+    <height>313</height>
7
    </rect>
8
   </property>
9
   <property name="windowTitle">
10
    <string>Basic.TransformWindow</string>
11
   </property>
12
-  <layout class="QVBoxLayout" name="verticalLayout">
13
+  <layout class="QVBoxLayout" name="verticalLayout" stretch="0,5,0">
14
    <item>
15
     <layout class="QFormLayout" name="formLayout">
16
      <property name="fieldGrowthPolicy">
17
@@ -36,10 +36,10 @@
18
          <height>0</height>
19
         </size>
20
        </property>
21
-       <property name="text">
22
+       <property name="accessibleName">
23
         <string>Basic.TransformWindow.Position</string>
24
        </property>
25
-       <property name="accessibleName">
26
+       <property name="text">
27
         <string>Basic.TransformWindow.Position</string>
28
        </property>
29
        <property name="alignment">
30
@@ -48,7 +48,7 @@
31
       </widget>
32
      </item>
33
      <item row="0" column="1">
34
-      <widget class="QWidget" name="widget">
35
+      <widget class="QFrame" name="widget">
36
        <property name="sizePolicy">
37
         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
38
          <horstretch>0</horstretch>
39
@@ -76,6 +76,9 @@
40
             <height>0</height>
41
            </size>
42
           </property>
43
+          <property name="accessibleName">
44
+           <string>Basic.TransformWindow.PositionX</string>
45
+          </property>
46
           <property name="decimals">
47
            <number>4</number>
48
           </property>
49
@@ -85,9 +88,6 @@
50
           <property name="maximum">
51
            <double>90001.000000000000000</double>
52
           </property>
53
-          <property name="accessibleName">
54
-           <string>Basic.TransformWindow.PositionX</string>
55
-          </property>
56
          </widget>
57
         </item>
58
         <item>
59
@@ -98,6 +98,9 @@
60
             <height>0</height>
61
            </size>
62
           </property>
63
+          <property name="accessibleName">
64
+           <string>Basic.TransformWindow.PositionY</string>
65
+          </property>
66
           <property name="decimals">
67
            <number>4</number>
68
           </property>
69
@@ -107,9 +110,6 @@
70
           <property name="maximum">
71
            <double>90001.000000000000000</double>
72
           </property>
73
-          <property name="accessibleName">
74
-           <string>Basic.TransformWindow.PositionY</string>
75
-          </property>
76
          </widget>
77
         </item>
78
        </layout>
79
@@ -117,10 +117,10 @@
80
      </item>
81
      <item row="1" column="0">
82
       <widget class="QLabel" name="label_2">
83
-       <property name="text">
84
+       <property name="accessibleName">
85
         <string>Basic.TransformWindow.Rotation</string>
86
        </property>
87
-       <property name="accessibleName">
88
+       <property name="text">
89
         <string>Basic.TransformWindow.Rotation</string>
90
        </property>
91
       </widget>
92
@@ -139,6 +139,9 @@
93
          <height>0</height>
94
         </size>
95
        </property>
96
+       <property name="accessibleName">
97
+        <string>Basic.TransformWindow.Rotation</string>
98
+       </property>
99
        <property name="minimum">
100
         <double>-360.000000000000000</double>
101
        </property>
102
@@ -148,23 +151,20 @@
103
        <property name="singleStep">
104
         <double>0.100000000000000</double>
105
        </property>
106
-       <property name="accessibleName">
107
-        <string>Basic.TransformWindow.Rotation</string>
108
-       </property>
109
       </widget>
110
      </item>
111
      <item row="2" column="0">
112
       <widget class="QLabel" name="label_3">
113
-       <property name="text">
114
+       <property name="accessibleName">
115
         <string>Basic.TransformWindow.Size</string>
116
        </property>
117
-       <property name="accessibleName">
118
+       <property name="text">
119
         <string>Basic.TransformWindow.Size</string>
120
        </property>
121
       </widget>
122
      </item>
123
      <item row="2" column="1">
124
-      <widget class="QWidget" name="widget_2">
125
+      <widget class="QFrame" name="widget_2">
126
        <property name="sizePolicy">
127
         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
128
          <horstretch>0</horstretch>
129
@@ -192,6 +192,9 @@
130
             <height>0</height>
131
            </size>
132
           </property>
133
+          <property name="accessibleName">
134
+           <string>Basic.TransformWindow.Width</string>
135
+          </property>
136
           <property name="decimals">
137
            <number>4</number>
138
           </property>
139
@@ -204,9 +207,6 @@
140
           <property name="singleStep">
141
            <double>1.000000000000000</double>
142
           </property>
143
-          <property name="accessibleName">
144
-           <string>Basic.TransformWindow.Width</string>
145
-          </property>
146
          </widget>
147
         </item>
148
         <item>
149
@@ -217,6 +217,9 @@
150
             <height>0</height>
151
            </size>
152
           </property>
153
+          <property name="accessibleName">
154
+           <string>Basic.TransformWindow.Height</string>
155
+          </property>
156
           <property name="decimals">
157
            <number>4</number>
158
           </property>
159
@@ -229,9 +232,6 @@
160
           <property name="singleStep">
161
            <double>1.000000000000000</double>
162
           </property>
163
-          <property name="accessibleName">
164
-           <string>Basic.TransformWindow.Height</string>
165
-          </property>
166
          </widget>
167
         </item>
168
        </layout>
169
@@ -239,22 +239,22 @@
170
      </item>
171
      <item row="3" column="0">
172
       <widget class="QLabel" name="label_4">
173
-       <property name="text">
174
+       <property name="accessibleName">
175
         <string>Basic.TransformWindow.Alignment</string>
176
        </property>
177
-       <property name="accessibleName">
178
+       <property name="text">
179
         <string>Basic.TransformWindow.Alignment</string>
180
        </property>
181
       </widget>
182
      </item>
183
      <item row="3" column="1">
184
       <widget class="QComboBox" name="align">
185
-       <property name="currentText">
186
-        <string>Basic.TransformWindow.Alignment.TopLeft</string>
187
-       </property>
188
        <property name="accessibleName">
189
         <string>Basic.TransformWindow.Alignment</string>
190
        </property>
191
+       <property name="currentText">
192
+        <string>Basic.TransformWindow.Alignment.TopLeft</string>
193
+       </property>
194
        <item>
195
         <property name="text">
196
          <string>Basic.TransformWindow.Alignment.TopLeft</string>
197
@@ -317,10 +317,10 @@
198
      </item>
199
      <item row="5" column="0">
200
       <widget class="QLabel" name="label_5">
201
-       <property name="text">
202
+       <property name="accessibleName">
203
         <string>Basic.TransformWindow.BoundsType</string>
204
        </property>
205
-       <property name="accessibleName">
206
+       <property name="text">
207
         <string>Basic.TransformWindow.BoundsType</string>
208
        </property>
209
       </widget>
210
@@ -369,10 +369,10 @@
211
      </item>
212
      <item row="6" column="0">
213
       <widget class="QLabel" name="label_6">
214
-       <property name="text">
215
+       <property name="accessibleName">
216
         <string>Basic.TransformWindow.BoundsAlignment</string>
217
        </property>
218
-       <property name="accessibleName">
219
+       <property name="text">
220
         <string>Basic.TransformWindow.BoundsAlignment</string>
221
        </property>
222
       </widget>
223
@@ -382,12 +382,12 @@
224
        <property name="enabled">
225
         <bool>false</bool>
226
        </property>
227
-       <property name="currentText">
228
-        <string>Basic.TransformWindow.Alignment.TopLeft</string>
229
-       </property>
230
        <property name="accessibleName">
231
         <string>Basic.TransformWindow.BoundsAlignment</string>
232
        </property>
233
+       <property name="currentText">
234
+        <string>Basic.TransformWindow.Alignment.TopLeft</string>
235
+       </property>
236
        <item>
237
         <property name="text">
238
          <string>Basic.TransformWindow.Alignment.TopLeft</string>
239
@@ -437,16 +437,16 @@
240
      </item>
241
      <item row="7" column="0">
242
       <widget class="QLabel" name="label_7">
243
-       <property name="text">
244
+       <property name="accessibleName">
245
         <string>Basic.TransformWindow.Bounds</string>
246
        </property>
247
-       <property name="accessibleName">
248
+       <property name="text">
249
         <string>Basic.TransformWindow.Bounds</string>
250
        </property>
251
       </widget>
252
      </item>
253
      <item row="7" column="1">
254
-      <widget class="QWidget" name="widget_3">
255
+      <widget class="QFrame" name="widget_3">
256
        <property name="sizePolicy">
257
         <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
258
          <horstretch>0</horstretch>
259
@@ -477,6 +477,9 @@
260
             <height>0</height>
261
            </size>
262
           </property>
263
+          <property name="accessibleName">
264
+           <string>Basic.TransformWindow.BoundsWidth</string>
265
+          </property>
266
           <property name="decimals">
267
            <number>4</number>
268
           </property>
269
@@ -486,9 +489,6 @@
270
           <property name="maximum">
271
            <double>90001.000000000000000</double>
272
           </property>
273
-          <property name="accessibleName">
274
-           <string>Basic.TransformWindow.BoundsWidth</string>
275
-          </property>
276
          </widget>
277
         </item>
278
         <item>
279
@@ -502,6 +502,9 @@
280
             <height>0</height>
281
            </size>
282
           </property>
283
+          <property name="accessibleName">
284
+           <string>Basic.TransformWindow.BoundsHeight</string>
285
+          </property>
286
           <property name="decimals">
287
            <number>4</number>
288
           </property>
289
@@ -511,9 +514,6 @@
290
           <property name="maximum">
291
            <double>90001.000000000000000</double>
292
           </property>
293
-          <property name="accessibleName">
294
-           <string>Basic.TransformWindow.BoundsHeight</string>
295
-          </property>
296
          </widget>
297
         </item>
298
        </layout>
299
@@ -534,10 +534,10 @@
300
      </item>
301
      <item row="9" column="0">
302
       <widget class="QLabel" name="label_8">
303
-       <property name="text">
304
+       <property name="accessibleName">
305
         <string>Basic.TransformWindow.Crop</string>
306
        </property>
307
-       <property name="accessibleName">
308
+       <property name="text">
309
         <string>Basic.TransformWindow.Crop</string>
310
        </property>
311
       </widget>
312
@@ -558,12 +558,12 @@
313
            <height>0</height>
314
           </size>
315
          </property>
316
-         <property name="maximum">
317
-          <number>100000</number>
318
-         </property>
319
          <property name="accessibleName">
320
           <string>Basic.TransformWindow.CropLeft</string>
321
          </property>
322
+         <property name="maximum">
323
+          <number>100000</number>
324
+         </property>
325
         </widget>
326
        </item>
327
        <item row="0" column="3">
328
@@ -580,12 +580,12 @@
329
            <height>0</height>
330
           </size>
331
          </property>
332
-         <property name="maximum">
333
-          <number>100000</number>
334
-         </property>
335
          <property name="accessibleName">
336
           <string>Basic.TransformWindow.CropRight</string>
337
          </property>
338
+         <property name="maximum">
339
+          <number>100000</number>
340
+         </property>
341
         </widget>
342
        </item>
343
        <item row="0" column="0">
344
@@ -628,12 +628,12 @@
345
            <height>0</height>
346
           </size>
347
          </property>
348
-         <property name="maximum">
349
-          <number>100000</number>
350
-         </property>
351
          <property name="accessibleName">
352
           <string>Basic.TransformWindow.CropTop</string>
353
          </property>
354
+         <property name="maximum">
355
+          <number>100000</number>
356
+         </property>
357
         </widget>
358
        </item>
359
        <item row="1" column="3">
360
@@ -650,12 +650,12 @@
361
            <height>0</height>
362
           </size>
363
          </property>
364
-         <property name="maximum">
365
-          <number>100000</number>
366
-         </property>
367
          <property name="accessibleName">
368
           <string>Basic.TransformWindow.CropBottom</string>
369
          </property>
370
+         <property name="maximum">
371
+          <number>100000</number>
372
+         </property>
373
         </widget>
374
        </item>
375
        <item row="1" column="0">
376
@@ -702,9 +702,22 @@
377
     </layout>
378
    </item>
379
    <item>
380
+    <spacer name="transformSpacer">
381
+     <property name="orientation">
382
+      <enum>Qt::Vertical</enum>
383
+     </property>
384
+     <property name="sizeHint" stdset="0">
385
+      <size>
386
+       <width>0</width>
387
+       <height>10</height>
388
+      </size>
389
+     </property>
390
+    </spacer>
391
+   </item>
392
+   <item>
393
     <widget class="QDialogButtonBox" name="buttonBox">
394
      <property name="standardButtons">
395
-      <set>QDialogButtonBox::Reset|QDialogButtonBox::Close</set>
396
+      <set>QDialogButtonBox::Close|QDialogButtonBox::Reset</set>
397
      </property>
398
     </widget>
399
    </item>
400
@@ -717,6 +730,16 @@
401
    <signal>rejected()</signal>
402
    <receiver>OBSBasicTransform</receiver>
403
    <slot>reject()</slot>
404
+   <hints>
405
+    <hint type="sourcelabel">
406
+     <x>20</x>
407
+     <y>20</y>
408
+    </hint>
409
+    <hint type="destinationlabel">
410
+     <x>20</x>
411
+     <y>20</y>
412
+    </hint>
413
+   </hints>
414
   </connection>
415
  </connections>
416
 </ui>
417
obs-studio-27.0.1.tar.xz/UI/forms/OBSExtraBrowsers.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSExtraBrowsers.ui Changed
14
 
1
@@ -29,10 +29,10 @@
2
      <property name="selectionMode">
3
       <enum>QAbstractItemView::NoSelection</enum>
4
      </property>
5
-     <attribute name="horizontalHeaderDefaultSectionSize">
6
+     <attribute name="horizontalHeaderMinimumSectionSize">
7
       <number>23</number>
8
      </attribute>
9
-     <attribute name="horizontalHeaderMinimumSectionSize">
10
+     <attribute name="horizontalHeaderDefaultSectionSize">
11
       <number>23</number>
12
      </attribute>
13
      <attribute name="verticalHeaderVisible">
14
obs-studio-27.0.1.tar.xz/UI/forms/OBSImporter.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSImporter.ui Changed
23
 
1
@@ -29,7 +29,7 @@
2
      <item>
3
       <widget class="QDialogButtonBox" name="buttonBox">
4
        <property name="standardButtons">
5
-        <set>QDialogButtonBox::Close|QDialogButtonBox::Open|QDialogButtonBox::Ok</set>
6
+        <set>QDialogButtonBox::Close|QDialogButtonBox::Ok|QDialogButtonBox::Open</set>
7
        </property>
8
       </widget>
9
      </item>
10
@@ -40,10 +40,10 @@
11
      <property name="selectionMode">
12
       <enum>QAbstractItemView::NoSelection</enum>
13
      </property>
14
-     <attribute name="horizontalHeaderDefaultSectionSize">
15
+     <attribute name="horizontalHeaderMinimumSectionSize">
16
       <number>23</number>
17
      </attribute>
18
-     <attribute name="horizontalHeaderMinimumSectionSize">
19
+     <attribute name="horizontalHeaderDefaultSectionSize">
20
       <number>23</number>
21
      </attribute>
22
      <attribute name="verticalHeaderVisible">
23
obs-studio-27.0.1.tar.xz/UI/forms/OBSMissingFiles.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSMissingFiles.ui Changed
33
 
1
@@ -20,6 +20,7 @@
2
       <widget class="QLabel" name="warningIcon">
3
        <property name="minimumSize">
4
         <size>
5
+         <width>0</width>
6
          <height>20</height>
7
         </size>
8
        </property>
9
@@ -45,10 +46,10 @@
10
      <property name="selectionMode">
11
       <enum>QAbstractItemView::NoSelection</enum>
12
      </property>
13
-     <attribute name="horizontalHeaderDefaultSectionSize">
14
+     <attribute name="horizontalHeaderMinimumSectionSize">
15
       <number>23</number>
16
      </attribute>
17
-     <attribute name="horizontalHeaderMinimumSectionSize">
18
+     <attribute name="horizontalHeaderDefaultSectionSize">
19
       <number>23</number>
20
      </attribute>
21
      <attribute name="verticalHeaderVisible">
22
@@ -108,8 +109,8 @@
23
          </item>
24
         </layout>
25
        </item>
26
-       </layout>
27
-      </item>
28
+      </layout>
29
+     </item>
30
     </layout>
31
    </item>
32
   </layout>
33
obs-studio-27.0.1.tar.xz/UI/forms/OBSRemux.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSRemux.ui Changed
14
 
1
@@ -40,10 +40,10 @@
2
      <property name="selectionMode">
3
       <enum>QAbstractItemView::NoSelection</enum>
4
      </property>
5
-     <attribute name="horizontalHeaderDefaultSectionSize">
6
+     <attribute name="horizontalHeaderMinimumSectionSize">
7
       <number>23</number>
8
      </attribute>
9
-     <attribute name="horizontalHeaderMinimumSectionSize">
10
+     <attribute name="horizontalHeaderDefaultSectionSize">
11
       <number>23</number>
12
      </attribute>
13
      <attribute name="verticalHeaderVisible">
14
obs-studio-27.0.1.tar.xz/UI/forms/OBSUpdate.ui -> obs-studio-27.1.3.tar.xz/UI/forms/OBSUpdate.ui Changed
10
 
1
@@ -34,7 +34,7 @@
2
 &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
3
      </property>
4
      <property name="openExternalLinks">
5
-        <bool>true</bool>
6
+      <bool>true</bool>
7
      </property>
8
     </widget>
9
    </item>
10
obs-studio-27.1.3.tar.xz/UI/forms/OBSYoutubeActions.ui Added
733
 
1
@@ -0,0 +1,731 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>OBSYoutubeActions</class>
5
+ <widget class="QDialog" name="OBSYoutubeActions">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>616</width>
11
+    <height>645</height>
12
+   </rect>
13
+  </property>
14
+  <property name="sizePolicy">
15
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
16
+    <horstretch>0</horstretch>
17
+    <verstretch>0</verstretch>
18
+   </sizepolicy>
19
+  </property>
20
+  <property name="minimumSize">
21
+   <size>
22
+    <width>0</width>
23
+    <height>0</height>
24
+   </size>
25
+  </property>
26
+  <property name="maximumSize">
27
+   <size>
28
+    <width>720</width>
29
+    <height>880</height>
30
+   </size>
31
+  </property>
32
+  <property name="windowTitle">
33
+   <string>YouTube.Actions.WindowTitle</string>
34
+  </property>
35
+  <layout class="QVBoxLayout" name="verticalLayout">
36
+   <item>
37
+    <widget class="QTabWidget" name="tabWidget">
38
+     <property name="sizePolicy">
39
+      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
40
+       <horstretch>0</horstretch>
41
+       <verstretch>0</verstretch>
42
+      </sizepolicy>
43
+     </property>
44
+     <property name="currentIndex">
45
+      <number>0</number>
46
+     </property>
47
+     <widget class="QWidget" name="ytEventCreate">
48
+      <attribute name="title">
49
+       <string>YouTube.Actions.CreateNewEvent</string>
50
+      </attribute>
51
+      <layout class="QFormLayout" name="formLayout">
52
+       <property name="fieldGrowthPolicy">
53
+        <enum>QFormLayout::ExpandingFieldsGrow</enum>
54
+       </property>
55
+       <property name="labelAlignment">
56
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
57
+       </property>
58
+       <item row="0" column="0">
59
+        <widget class="QLabel" name="label">
60
+         <property name="text">
61
+          <string>YouTube.Actions.Title</string>
62
+         </property>
63
+         <property name="buddy">
64
+          <cstring>title</cstring>
65
+         </property>
66
+        </widget>
67
+       </item>
68
+       <item row="0" column="1">
69
+        <widget class="QLineEdit" name="title">
70
+         <property name="text">
71
+          <string>YouTube.Actions.MyBroadcast</string>
72
+         </property>
73
+         <property name="maxLength">
74
+          <number>100</number>
75
+         </property>
76
+        </widget>
77
+       </item>
78
+       <item row="1" column="0">
79
+        <widget class="QLabel" name="label_2">
80
+         <property name="text">
81
+          <string>YouTube.Actions.Description</string>
82
+         </property>
83
+         <property name="buddy">
84
+          <cstring>description</cstring>
85
+         </property>
86
+        </widget>
87
+       </item>
88
+       <item row="1" column="1">
89
+        <widget class="QPlainTextEdit" name="description">
90
+         <property name="tabChangesFocus">
91
+          <bool>true</bool>
92
+         </property>
93
+        </widget>
94
+       </item>
95
+       <item row="2" column="0">
96
+        <widget class="QLabel" name="label_4">
97
+         <property name="text">
98
+          <string>YouTube.Actions.Privacy</string>
99
+         </property>
100
+         <property name="buddy">
101
+          <cstring>privacyBox</cstring>
102
+         </property>
103
+        </widget>
104
+       </item>
105
+       <item row="2" column="1">
106
+        <widget class="QComboBox" name="privacyBox">
107
+         <property name="sizePolicy">
108
+          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
109
+           <horstretch>0</horstretch>
110
+           <verstretch>0</verstretch>
111
+          </sizepolicy>
112
+         </property>
113
+         <property name="sizeAdjustPolicy">
114
+          <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
115
+         </property>
116
+        </widget>
117
+       </item>
118
+       <item row="3" column="0">
119
+        <widget class="QLabel" name="label_5">
120
+         <property name="text">
121
+          <string>YouTube.Actions.Category</string>
122
+         </property>
123
+         <property name="buddy">
124
+          <cstring>categoryBox</cstring>
125
+         </property>
126
+        </widget>
127
+       </item>
128
+       <item row="3" column="1">
129
+        <widget class="QComboBox" name="categoryBox">
130
+         <property name="sizePolicy">
131
+          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
132
+           <horstretch>0</horstretch>
133
+           <verstretch>0</verstretch>
134
+          </sizepolicy>
135
+         </property>
136
+        </widget>
137
+       </item>
138
+       <item row="4" column="0">
139
+        <widget class="QLabel" name="label_8">
140
+         <property name="text">
141
+          <string>YouTube.Actions.MadeForKids</string>
142
+         </property>
143
+        </widget>
144
+       </item>
145
+       <item row="4" column="1">
146
+        <layout class="QHBoxLayout" name="horizontalLayout_5">
147
+         <item>
148
+          <widget class="QRadioButton" name="notMakeForKids">
149
+           <property name="text">
150
+            <string>YouTube.Actions.MadeForKids.No</string>
151
+           </property>
152
+          </widget>
153
+         </item>
154
+         <item>
155
+          <widget class="QLabel" name="helpMadeForKids">
156
+           <property name="sizePolicy">
157
+            <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
158
+             <horstretch>0</horstretch>
159
+             <verstretch>0</verstretch>
160
+            </sizepolicy>
161
+           </property>
162
+           <property name="text">
163
+            <string>YouTube.Actions.MadeForKids.Help</string>
164
+           </property>
165
+           <property name="textFormat">
166
+            <enum>Qt::RichText</enum>
167
+           </property>
168
+          </widget>
169
+         </item>
170
+        </layout>
171
+       </item>
172
+       <item row="5" column="0">
173
+        <spacer name="horizontalSpacer_5">
174
+         <property name="orientation">
175
+          <enum>Qt::Horizontal</enum>
176
+         </property>
177
+         <property name="sizeHint" stdset="0">
178
+          <size>
179
+           <width>40</width>
180
+           <height>20</height>
181
+          </size>
182
+         </property>
183
+        </spacer>
184
+       </item>
185
+       <item row="5" column="1">
186
+        <layout class="QHBoxLayout" name="horizontalLayout_8">
187
+         <item>
188
+          <widget class="QRadioButton" name="yesMakeForKids">
189
+           <property name="text">
190
+            <string>YouTube.Actions.MadeForKids.Yes</string>
191
+           </property>
192
+          </widget>
193
+         </item>
194
+        </layout>
195
+       </item>
196
+       <item row="6" column="0">
197
+        <widget class="QLabel" name="label_6">
198
+         <property name="text">
199
+          <string>YouTube.Actions.Thumbnail</string>
200
+         </property>
201
+        </widget>
202
+       </item>
203
+       <item row="9" column="0">
204
+        <widget class="QLabel" name="label_7">
205
+         <property name="text">
206
+          <string>YouTube.Actions.AdditionalSettings</string>
207
+         </property>
208
+        </widget>
209
+       </item>
210
+       <item row="9" column="1">
211
+        <spacer name="horizontalSpacer_2">
212
+         <property name="orientation">
213
+          <enum>Qt::Horizontal</enum>
214
+         </property>
215
+         <property name="sizeHint" stdset="0">
216
+          <size>
217
+           <width>40</width>
218
+           <height>20</height>
219
+          </size>
220
+         </property>
221
+        </spacer>
222
+       </item>
223
+       <item row="10" column="0">
224
+        <spacer name="horizontalSpacer_7">
225
+         <property name="orientation">
226
+          <enum>Qt::Horizontal</enum>
227
+         </property>
228
+         <property name="sizeHint" stdset="0">
229
+          <size>
230
+           <width>40</width>
231
+           <height>20</height>
232
+          </size>
233
+         </property>
234
+        </spacer>
235
+       </item>
236
+       <item row="10" column="1">
237
+        <layout class="QHBoxLayout" name="horizontalLayout">
238
+         <item>
239
+          <widget class="QLabel" name="label_3">
240
+           <property name="text">
241
+            <string>YouTube.Actions.Latency</string>
242
+           </property>
243
+           <property name="buddy">
244
+            <cstring>latencyBox</cstring>
245
+           </property>
246
+          </widget>
247
+         </item>
248
+         <item>
249
+          <widget class="QComboBox" name="latencyBox">
250
+           <property name="sizePolicy">
251
+            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
252
+             <horstretch>0</horstretch>
253
+             <verstretch>0</verstretch>
254
+            </sizepolicy>
255
+           </property>
256
+          </widget>
257
+         </item>
258
+        </layout>
259
+       </item>
260
+       <item row="11" column="0">
261
+        <spacer name="horizontalSpacer_14">
262
+         <property name="orientation">
263
+          <enum>Qt::Horizontal</enum>
264
+         </property>
265
+         <property name="sizeHint" stdset="0">
266
+          <size>
267
+           <width>40</width>
268
+           <height>20</height>
269
+          </size>
270
+         </property>
271
+        </spacer>
272
+       </item>
273
+       <item row="11" column="1">
274
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
275
+         <item>
276
+          <widget class="QCheckBox" name="checkDVR">
277
+           <property name="text">
278
+            <string>YouTube.Actions.EnableDVR</string>
279
+           </property>
280
+           <property name="checked">
281
+            <bool>true</bool>
282
+           </property>
283
+          </widget>
284
+         </item>
285
+        </layout>
286
+       </item>
287
+       <item row="12" column="0">
288
+        <spacer name="horizontalSpacer_8">
289
+         <property name="orientation">
290
+          <enum>Qt::Horizontal</enum>
291
+         </property>
292
+         <property name="sizeHint" stdset="0">
293
+          <size>
294
+           <width>40</width>
295
+           <height>20</height>
296
+          </size>
297
+         </property>
298
+        </spacer>
299
+       </item>
300
+       <item row="12" column="1">
301
+        <layout class="QHBoxLayout" name="horizontalLayout_7">
302
+         <item>
303
+          <widget class="QCheckBox" name="check360Video">
304
+           <property name="text">
305
+            <string>YouTube.Actions.360Video</string>
306
+           </property>
307
+          </widget>
308
+         </item>
309
+         <item>
310
+          <widget class="QLabel" name="help360Video">
311
+           <property name="sizePolicy">
312
+            <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
313
+             <horstretch>0</horstretch>
314
+             <verstretch>0</verstretch>
315
+            </sizepolicy>
316
+           </property>
317
+           <property name="text">
318
+            <string>YouTube.Actions.360Video.Help</string>
319
+           </property>
320
+           <property name="textFormat">
321
+            <enum>Qt::RichText</enum>
322
+           </property>
323
+          </widget>
324
+         </item>
325
+         <item>
326
+          <spacer name="horizontalSpacer_10">
327
+           <property name="orientation">
328
+            <enum>Qt::Horizontal</enum>
329
+           </property>
330
+           <property name="sizeHint" stdset="0">
331
+            <size>
332
+             <width>40</width>
333
+             <height>20</height>
334
+            </size>
335
+           </property>
336
+          </spacer>
337
+         </item>
338
+        </layout>
339
+       </item>
340
+       <item row="13" column="0">
341
+        <spacer name="horizontalSpacer_12">
342
+         <property name="orientation">
343
+          <enum>Qt::Horizontal</enum>
344
+         </property>
345
+         <property name="sizeHint" stdset="0">
346
+          <size>
347
+           <width>40</width>
348
+           <height>20</height>
349
+          </size>
350
+         </property>
351
+        </spacer>
352
+       </item>
353
+       <item row="13" column="1">
354
+        <layout class="QHBoxLayout" name="horizontalLayout_9">
355
+         <item>
356
+          <widget class="QCheckBox" name="checkScheduledLater">
357
+           <property name="enabled">
358
+            <bool>true</bool>
359
+           </property>
360
+           <property name="text">
361
+            <string>YouTube.Actions.ScheduleForLater</string>
362
+           </property>
363
+          </widget>
364
+         </item>
365
+        </layout>
366
+       </item>
367
+       <item row="14" column="0">
368
+        <spacer name="horizontalSpacer_6">
369
+         <property name="orientation">
370
+          <enum>Qt::Horizontal</enum>
371
+         </property>
372
+         <property name="sizeHint" stdset="0">
373
+          <size>
374
+           <width>40</width>
375
+           <height>20</height>
376
+          </size>
377
+         </property>
378
+        </spacer>
379
+       </item>
380
+       <item row="14" column="1">
381
+        <layout class="QHBoxLayout" name="horizontalLayout_6">
382
+         <item>
383
+          <widget class="QCheckBox" name="checkAutoStart">
384
+           <property name="enabled">
385
+            <bool>true</bool>
386
+           </property>
387
+           <property name="text">
388
+            <string>YouTube.Actions.EnableAutoStart</string>
389
+           </property>
390
+           <property name="checkable">
391
+            <bool>true</bool>
392
+           </property>
393
+           <property name="checked">
394
+            <bool>true</bool>
395
+           </property>
396
+          </widget>
397
+         </item>
398
+         <item>
399
+          <widget class="QLabel" name="helpAutoStartStop">
400
+           <property name="sizePolicy">
401
+            <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
402
+             <horstretch>0</horstretch>
403
+             <verstretch>0</verstretch>
404
+            </sizepolicy>
405
+           </property>
406
+           <property name="text">
407
+            <string notr="true">&lt;a href=&quot;.&quot;&gt;(?)&lt;/a&gt;</string>
408
+           </property>
409
+           <property name="textFormat">
410
+            <enum>Qt::RichText</enum>
411
+           </property>
412
+          </widget>
413
+         </item>
414
+         <item>
415
+          <spacer name="horizontalSpacer_9">
416
+           <property name="orientation">
417
+            <enum>Qt::Horizontal</enum>
418
+           </property>
419
+           <property name="sizeHint" stdset="0">
420
+            <size>
421
+             <width>40</width>
422
+             <height>20</height>
423
+            </size>
424
+           </property>
425
+          </spacer>
426
+         </item>
427
+        </layout>
428
+       </item>
429
+       <item row="15" column="0">
430
+        <spacer name="horizontalSpacer_3">
431
+         <property name="orientation">
432
+          <enum>Qt::Horizontal</enum>
433
+         </property>
434
+         <property name="sizeHint" stdset="0">
435
+          <size>
436
+           <width>40</width>
437
+           <height>20</height>
438
+          </size>
439
+         </property>
440
+        </spacer>
441
+       </item>
442
+       <item row="15" column="1">
443
+        <layout class="QHBoxLayout" name="horizontalLayout_4">
444
+         <item>
445
+          <widget class="QCheckBox" name="checkAutoStop">
446
+           <property name="enabled">
447
+            <bool>true</bool>
448
+           </property>
449
+           <property name="text">
450
+            <string>YouTube.Actions.EnableAutoStop</string>
451
+           </property>
452
+           <property name="checked">
453
+            <bool>true</bool>
454
+           </property>
455
+          </widget>
456
+         </item>
457
+        </layout>
458
+       </item>
459
+       <item row="16" column="0">
460
+        <spacer name="horizontalSpacer_13">
461
+         <property name="orientation">
462
+          <enum>Qt::Horizontal</enum>
463
+         </property>
464
+         <property name="sizeHint" stdset="0">
465
+          <size>
466
+           <width>40</width>
467
+           <height>20</height>
468
+          </size>
469
+         </property>
470
+        </spacer>
471
+       </item>
472
+       <item row="16" column="1">
473
+        <layout class="QHBoxLayout" name="horizontalLayout_10">
474
+         <item>
475
+          <widget class="QDateTimeEdit" name="scheduledTime">
476
+           <property name="enabled">
477
+            <bool>true</bool>
478
+           </property>
479
+           <property name="sizePolicy">
480
+            <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
481
+             <horstretch>0</horstretch>
482
+             <verstretch>0</verstretch>
483
+            </sizepolicy>
484
+           </property>
485
+           <property name="calendarPopup">
486
+            <bool>true</bool>
487
+           </property>
488
+          </widget>
489
+         </item>
490
+        </layout>
491
+       </item>
492
+       <item row="17" column="1">
493
+        <layout class="QHBoxLayout" name="horizontalLayout_12">
494
+         <item>
495
+          <widget class="QCheckBox" name="checkRememberSettings">
496
+           <property name="text">
497
+            <string>YouTube.Actions.RememberSettings</string>
498
+           </property>
499
+          </widget>
500
+         </item>
501
+        </layout>
502
+       </item>
503
+       <item row="17" column="0">
504
+        <spacer name="horizontalSpacer">
505
+         <property name="orientation">
506
+          <enum>Qt::Horizontal</enum>
507
+         </property>
508
+         <property name="sizeHint" stdset="0">
509
+          <size>
510
+           <width>40</width>
511
+           <height>20</height>
512
+          </size>
513
+         </property>
514
+        </spacer>
515
+       </item>
516
+       <item row="8" column="1">
517
+        <layout class="QHBoxLayout" name="horizontalLayout_13">
518
+         <property name="rightMargin">
519
+          <number>0</number>
520
+         </property>
521
+         <property name="bottomMargin">
522
+          <number>0</number>
523
+         </property>
524
+         <item>
525
+          <widget class="QPushButton" name="selectFileButton">
526
+           <property name="text">
527
+            <string>YouTube.Actions.Thumbnail.SelectFile</string>
528
+           </property>
529
+          </widget>
530
+         </item>
531
+         <item>
532
+          <widget class="QLabel" name="selectedFileName">
533
+           <property name="text">
534
+            <string>YouTube.Actions.Thumbnail.NoFileSelected</string>
535
+           </property>
536
+          </widget>
537
+         </item>
538
+        </layout>
539
+       </item>
540
+       <item row="6" column="1">
541
+        <widget class="ClickableLabel" name="thumbnailPreview">
542
+         <property name="enabled">
543
+          <bool>true</bool>
544
+         </property>
545
+         <property name="sizePolicy">
546
+          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
547
+           <horstretch>0</horstretch>
548
+           <verstretch>0</verstretch>
549
+          </sizepolicy>
550
+         </property>
551
+         <property name="minimumSize">
552
+          <size>
553
+           <width>162</width>
554
+           <height>92</height>
555
+          </size>
556
+         </property>
557
+         <property name="maximumSize">
558
+          <size>
559
+           <width>162</width>
560
+           <height>92</height>
561
+          </size>
562
+         </property>
563
+         <property name="frameShape">
564
+          <enum>QFrame::Box</enum>
565
+         </property>
566
+         <property name="text">
567
+          <string/>
568
+         </property>
569
+         <property name="alignment">
570
+          <set>Qt::AlignCenter</set>
571
+         </property>
572
+        </widget>
573
+       </item>
574
+      </layout>
575
+     </widget>
576
+     <widget class="QWidget" name="ytEventList">
577
+      <attribute name="title">
578
+       <string>YouTube.Actions.ChooseEvent</string>
579
+      </attribute>
580
+      <layout class="QVBoxLayout" name="verticalLayout_3">
581
+       <item>
582
+        <widget class="QScrollArea" name="scrollArea">
583
+         <property name="verticalScrollBarPolicy">
584
+          <enum>Qt::ScrollBarAlwaysOn</enum>
585
+         </property>
586
+         <property name="widgetResizable">
587
+          <bool>true</bool>
588
+         </property>
589
+         <widget class="QWidget" name="scrollAreaWidgetContents">
590
+          <property name="geometry">
591
+           <rect>
592
+            <x>0</x>
593
+            <y>0</y>
594
+            <width>555</width>
595
+            <height>192</height>
596
+           </rect>
597
+          </property>
598
+          <property name="sizePolicy">
599
+           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
600
+            <horstretch>0</horstretch>
601
+            <verstretch>0</verstretch>
602
+           </sizepolicy>
603
+          </property>
604
+          <layout class="QVBoxLayout" name="verticalLayout_4">
605
+           <item>
606
+            <widget class="QLabel" name="label_11">
607
+             <property name="styleSheet">
608
+              <string notr="true">border: 1px solid black;</string>
609
+             </property>
610
+             <property name="text">
611
+              <string>&lt;big&gt;Friday Fortnite Stream&lt;/big&gt;&lt;br/&gt;scheduled for 11/11/20 2:00pm</string>
612
+             </property>
613
+             <property name="textFormat">
614
+              <enum>Qt::RichText</enum>
615
+             </property>
616
+             <property name="alignment">
617
+              <set>Qt::AlignCenter</set>
618
+             </property>
619
+             <property name="margin">
620
+              <number>4</number>
621
+             </property>
622
+            </widget>
623
+           </item>
624
+           <item>
625
+            <widget class="QLabel" name="label_12">
626
+             <property name="styleSheet">
627
+              <string notr="true">border: 1px solid black;</string>
628
+             </property>
629
+             <property name="text">
630
+              <string>&lt;big&gt;Friday Fortnite Stream&lt;/big&gt;&lt;br/&gt;scheduled for 11/11/20 2:00pm</string>
631
+             </property>
632
+             <property name="textFormat">
633
+              <enum>Qt::RichText</enum>
634
+             </property>
635
+             <property name="alignment">
636
+              <set>Qt::AlignCenter</set>
637
+             </property>
638
+             <property name="margin">
639
+              <number>4</number>
640
+             </property>
641
+            </widget>
642
+           </item>
643
+           <item>
644
+            <widget class="QLabel" name="label_13">
645
+             <property name="styleSheet">
646
+              <string notr="true">border: 1px solid black;</string>
647
+             </property>
648
+             <property name="text">
649
+              <string>&lt;big&gt;Friday Fortnite Stream&lt;/big&gt;&lt;br/&gt;scheduled for 11/11/20 2:00pm</string>
650
+             </property>
651
+             <property name="textFormat">
652
+              <enum>Qt::RichText</enum>
653
+             </property>
654
+             <property name="alignment">
655
+              <set>Qt::AlignCenter</set>
656
+             </property>
657
+             <property name="margin">
658
+              <number>4</number>
659
+             </property>
660
+            </widget>
661
+           </item>
662
+           <item>
663
+            <widget class="QLabel" name="label_14">
664
+             <property name="styleSheet">
665
+              <string notr="true">border: 1px solid black;</string>
666
+             </property>
667
+             <property name="text">
668
+              <string>&lt;big&gt;Friday Fortnite Stream&lt;/big&gt;&lt;br/&gt;scheduled for 11/11/20 2:00pm</string>
669
+             </property>
670
+             <property name="textFormat">
671
+              <enum>Qt::RichText</enum>
672
+             </property>
673
+             <property name="alignment">
674
+              <set>Qt::AlignCenter</set>
675
+             </property>
676
+             <property name="margin">
677
+              <number>4</number>
678
+             </property>
679
+            </widget>
680
+           </item>
681
+          </layout>
682
+         </widget>
683
+        </widget>
684
+       </item>
685
+      </layout>
686
+     </widget>
687
+    </widget>
688
+   </item>
689
+   <item>
690
+    <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,2,0,6">
691
+     <item>
692
+      <widget class="QPushButton" name="cancelButton">
693
+       <property name="text">
694
+        <string>Cancel</string>
695
+       </property>
696
+      </widget>
697
+     </item>
698
+     <item>
699
+      <widget class="QPushButton" name="pushButton">
700
+       <property name="text">
701
+        <string>YouTube.Actions.Dashboard</string>
702
+       </property>
703
+      </widget>
704
+     </item>
705
+     <item>
706
+      <widget class="QPushButton" name="saveButton">
707
+       <property name="text">
708
+        <string>YouTube.Actions.Create_Ready</string>
709
+       </property>
710
+      </widget>
711
+     </item>
712
+     <item>
713
+      <widget class="QPushButton" name="okButton">
714
+       <property name="text">
715
+        <string>YouTube.Actions.Create_GoLive</string>
716
+       </property>
717
+      </widget>
718
+     </item>
719
+    </layout>
720
+   </item>
721
+  </layout>
722
+ </widget>
723
+ <customwidgets>
724
+  <customwidget>
725
+   <class>ClickableLabel</class>
726
+   <extends>QLabel</extends>
727
+   <header>clickable-label.hpp</header>
728
+  </customwidget>
729
+ </customwidgets>
730
+ <resources/>
731
+ <connections/>
732
+</ui>
733
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/browser-source-toolbar.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/browser-source-toolbar.ui Changed
36
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,12 +22,6 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>22</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
@@ -52,12 +46,6 @@
24
        <height>22</height>
25
       </size>
26
      </property>
27
-     <property name="maximumSize">
28
-      <size>
29
-       <width>16777215</width>
30
-       <height>22</height>
31
-      </size>
32
-     </property>
33
      <property name="text">
34
       <string>RefreshBrowser</string>
35
      </property>
36
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/color-source-toolbar.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/color-source-toolbar.ui Changed
49
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,12 +22,6 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>22</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
@@ -58,12 +52,6 @@
24
        <height>22</height>
25
       </size>
26
      </property>
27
-     <property name="maximumSize">
28
-      <size>
29
-       <width>16777215</width>
30
-       <height>22</height>
31
-      </size>
32
-     </property>
33
      <property name="text">
34
       <string notr="true">color here</string>
35
      </property>
36
@@ -80,12 +68,6 @@
37
        <height>22</height>
38
       </size>
39
      </property>
40
-     <property name="maximumSize">
41
-      <size>
42
-       <width>16777215</width>
43
-       <height>22</height>
44
-      </size>
45
-     </property>
46
      <property name="text">
47
       <string>Basic.PropertiesWindow.SelectColor</string>
48
      </property>
49
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/device-select-toolbar.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/device-select-toolbar.ui Changed
100
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,16 +22,10 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>22</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
-  <layout class="QHBoxLayout" name="horizontalLayout_2">
24
+  <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1,0,0">
25
    <property name="sizeConstraint">
26
     <enum>QLayout::SetNoConstraint</enum>
27
    </property>
28
@@ -50,7 +44,7 @@
29
    <item>
30
     <widget class="QLabel" name="deviceLabel">
31
      <property name="sizePolicy">
32
-      <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
33
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
34
        <horstretch>0</horstretch>
35
        <verstretch>0</verstretch>
36
       </sizepolicy>
37
@@ -61,12 +55,6 @@
38
        <height>22</height>
39
       </size>
40
      </property>
41
-     <property name="maximumSize">
42
-      <size>
43
-       <width>16777215</width>
44
-       <height>22</height>
45
-      </size>
46
-     </property>
47
      <property name="text">
48
       <string notr="true">Device</string>
49
      </property>
50
@@ -91,8 +79,8 @@
51
      </property>
52
      <property name="maximumSize">
53
       <size>
54
-       <width>16777215</width>
55
-       <height>22</height>
56
+       <width>600</width>
57
+       <height>16777215</height>
58
       </size>
59
      </property>
60
      <property name="currentText">
61
@@ -105,18 +93,18 @@
62
    </item>
63
    <item>
64
     <widget class="QPushButton" name="activateButton">
65
+     <property name="sizePolicy">
66
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
67
+       <horstretch>0</horstretch>
68
+       <verstretch>0</verstretch>
69
+      </sizepolicy>
70
+     </property>
71
      <property name="minimumSize">
72
       <size>
73
        <width>0</width>
74
        <height>22</height>
75
       </size>
76
      </property>
77
-     <property name="maximumSize">
78
-      <size>
79
-       <width>16777215</width>
80
-       <height>22</height>
81
-      </size>
82
-     </property>
83
      <property name="text">
84
       <string notr="true">Activate</string>
85
      </property>
86
@@ -127,9 +115,12 @@
87
      <property name="orientation">
88
       <enum>Qt::Horizontal</enum>
89
      </property>
90
+     <property name="sizeType">
91
+      <enum>QSizePolicy::Expanding</enum>
92
+     </property>
93
      <property name="sizeHint" stdset="0">
94
       <size>
95
-       <width>40</width>
96
+       <width>0</width>
97
        <height>20</height>
98
       </size>
99
      </property>
100
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/game-capture-toolbar.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/game-capture-toolbar.ui Changed
123
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,16 +22,10 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>24</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
-  <layout class="QHBoxLayout" name="horizontalLayout">
24
+  <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,4,0,5,0">
25
    <property name="leftMargin">
26
     <number>0</number>
27
    </property>
28
@@ -58,12 +52,6 @@
29
        <height>22</height>
30
       </size>
31
      </property>
32
-     <property name="maximumSize">
33
-      <size>
34
-       <width>16777215</width>
35
-       <height>22</height>
36
-      </size>
37
-     </property>
38
      <property name="text">
39
       <string notr="true">Mode</string>
40
      </property>
41
@@ -74,16 +62,22 @@
42
    </item>
43
    <item>
44
     <widget class="QComboBox" name="mode">
45
+     <property name="sizePolicy">
46
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
47
+       <horstretch>0</horstretch>
48
+       <verstretch>0</verstretch>
49
+      </sizepolicy>
50
+     </property>
51
      <property name="minimumSize">
52
       <size>
53
-       <width>0</width>
54
+       <width>120</width>
55
        <height>22</height>
56
       </size>
57
      </property>
58
      <property name="maximumSize">
59
       <size>
60
-       <width>16777215</width>
61
-       <height>22</height>
62
+       <width>400</width>
63
+       <height>16777215</height>
64
       </size>
65
      </property>
66
      <property name="currentText">
67
@@ -105,12 +99,6 @@
68
        <height>22</height>
69
       </size>
70
      </property>
71
-     <property name="maximumSize">
72
-      <size>
73
-       <width>16777215</width>
74
-       <height>22</height>
75
-      </size>
76
-     </property>
77
      <property name="text">
78
       <string notr="true">Window</string>
79
      </property>
80
@@ -129,14 +117,14 @@
81
      </property>
82
      <property name="minimumSize">
83
       <size>
84
-       <width>0</width>
85
+       <width>120</width>
86
        <height>22</height>
87
       </size>
88
      </property>
89
      <property name="maximumSize">
90
       <size>
91
-       <width>16777215</width>
92
-       <height>22</height>
93
+       <width>600</width>
94
+       <height>16777215</height>
95
       </size>
96
      </property>
97
      <property name="currentText">
98
@@ -148,14 +136,17 @@
99
     </widget>
100
    </item>
101
    <item>
102
-    <widget class="QWidget" name="empty">
103
-     <property name="sizePolicy">
104
-      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
105
-       <horstretch>0</horstretch>
106
-       <verstretch>0</verstretch>
107
-      </sizepolicy>
108
+    <spacer name="empty">
109
+     <property name="orientation">
110
+      <enum>Qt::Horizontal</enum>
111
      </property>
112
-    </widget>
113
+     <property name="sizeHint" stdset="0">
114
+      <size>
115
+       <width>0</width>
116
+       <height>20</height>
117
+      </size>
118
+     </property>
119
+    </spacer>
120
    </item>
121
   </layout>
122
  </widget>
123
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/image-source-toolbar.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/image-source-toolbar.ui Changed
83
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,16 +22,10 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>22</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
-  <layout class="QHBoxLayout" name="horizontalLayout">
24
+  <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,0,0">
25
    <property name="leftMargin">
26
     <number>0</number>
27
    </property>
28
@@ -58,12 +52,6 @@
29
        <height>22</height>
30
       </size>
31
      </property>
32
-     <property name="maximumSize">
33
-      <size>
34
-       <width>16777215</width>
35
-       <height>22</height>
36
-      </size>
37
-     </property>
38
      <property name="text">
39
       <string notr="true">Image File</string>
40
      </property>
41
@@ -82,8 +70,8 @@
42
      </property>
43
      <property name="maximumSize">
44
       <size>
45
-       <width>16777215</width>
46
-       <height>22</height>
47
+       <width>400</width>
48
+       <height>16777215</height>
49
       </size>
50
      </property>
51
      <property name="text">
52
@@ -108,17 +96,24 @@
53
        <height>22</height>
54
       </size>
55
      </property>
56
-     <property name="maximumSize">
57
-      <size>
58
-       <width>16777215</width>
59
-       <height>22</height>
60
-      </size>
61
-     </property>
62
      <property name="text">
63
       <string>Browse</string>
64
      </property>
65
     </widget>
66
    </item>
67
+   <item>
68
+    <spacer name="horizontalSpacer">
69
+     <property name="orientation">
70
+      <enum>Qt::Horizontal</enum>
71
+     </property>
72
+     <property name="sizeHint" stdset="0">
73
+      <size>
74
+       <width>0</width>
75
+       <height>20</height>
76
+      </size>
77
+     </property>
78
+    </spacer>
79
+   </item>
80
   </layout>
81
  </widget>
82
  <resources/>
83
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/media-controls.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/media-controls.ui Changed
178
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,12 +22,6 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>22</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
@@ -61,12 +55,6 @@
24
        <height>22</height>
25
       </size>
26
      </property>
27
-     <property name="maximumSize">
28
-      <size>
29
-       <width>22</width>
30
-       <height>22</height>
31
-      </size>
32
-     </property>
33
      <property name="toolTip">
34
       <string>ContextBar.MediaControls.RestartMedia</string>
35
      </property>
36
@@ -89,6 +77,9 @@
37
      <property name="flat">
38
       <bool>true</bool>
39
      </property>
40
+     <property name="themeID2" stdset="0">
41
+      <string notr="true">contextBarButton</string>
42
+     </property>
43
     </widget>
44
    </item>
45
    <item>
46
@@ -121,12 +112,6 @@
47
        <height>22</height>
48
       </size>
49
      </property>
50
-     <property name="maximumSize">
51
-      <size>
52
-       <width>22</width>
53
-       <height>22</height>
54
-      </size>
55
-     </property>
56
      <property name="toolTip">
57
       <string>ContextBar.MediaControls.PlaylistPrevious</string>
58
      </property>
59
@@ -149,6 +134,9 @@
60
      <property name="flat">
61
       <bool>true</bool>
62
      </property>
63
+     <property name="themeID2" stdset="0">
64
+      <string notr="true">contextBarButton</string>
65
+     </property>
66
     </widget>
67
    </item>
68
    <item>
69
@@ -165,12 +153,6 @@
70
        <height>22</height>
71
       </size>
72
      </property>
73
-     <property name="maximumSize">
74
-      <size>
75
-       <width>22</width>
76
-       <height>22</height>
77
-      </size>
78
-     </property>
79
      <property name="toolTip">
80
       <string>ContextBar.MediaControls.StopMedia</string>
81
      </property>
82
@@ -193,6 +175,9 @@
83
      <property name="flat">
84
       <bool>true</bool>
85
      </property>
86
+     <property name="themeID2" stdset="0">
87
+      <string notr="true">contextBarButton</string>
88
+     </property>
89
     </widget>
90
    </item>
91
    <item>
92
@@ -209,12 +194,6 @@
93
        <height>22</height>
94
       </size>
95
      </property>
96
-     <property name="maximumSize">
97
-      <size>
98
-       <width>22</width>
99
-       <height>22</height>
100
-      </size>
101
-     </property>
102
      <property name="toolTip">
103
       <string>ContextBar.MediaControls.PlaylistNext</string>
104
      </property>
105
@@ -237,6 +216,9 @@
106
      <property name="flat">
107
       <bool>true</bool>
108
      </property>
109
+     <property name="themeID2" stdset="0">
110
+      <string notr="true">contextBarButton</string>
111
+     </property>
112
     </widget>
113
    </item>
114
    <item>
115
@@ -247,12 +229,6 @@
116
        <height>22</height>
117
       </size>
118
      </property>
119
-     <property name="maximumSize">
120
-      <size>
121
-       <width>16777215</width>
122
-       <height>22</height>
123
-      </size>
124
-     </property>
125
      <property name="accessibleName">
126
       <string>ContextBar.MediaControls.BlindSeek</string>
127
      </property>
128
@@ -297,12 +273,6 @@
129
        <height>22</height>
130
       </size>
131
      </property>
132
-     <property name="maximumSize">
133
-      <size>
134
-       <width>16777215</width>
135
-       <height>22</height>
136
-      </size>
137
-     </property>
138
      <property name="text">
139
       <string>--:--:--</string>
140
      </property>
141
@@ -338,12 +308,6 @@
142
        <height>22</height>
143
       </size>
144
      </property>
145
-     <property name="maximumSize">
146
-      <size>
147
-       <width>16777215</width>
148
-       <height>22</height>
149
-      </size>
150
-     </property>
151
      <property name="text">
152
       <string>/</string>
153
      </property>
154
@@ -379,21 +343,15 @@
155
        <height>22</height>
156
       </size>
157
      </property>
158
-     <property name="maximumSize">
159
-      <size>
160
-       <width>16777215</width>
161
-       <height>22</height>
162
-      </size>
163
-     </property>
164
      <property name="text">
165
       <string>--:--:--</string>
166
      </property>
167
     </widget>
168
    </item>
169
    <item>
170
-    <widget class="QWidget" name="emptySpaceAgain">
171
+    <widget class="QFrame" name="emptySpaceAgain">
172
      <property name="sizePolicy">
173
-      <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
174
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
175
        <horstretch>0</horstretch>
176
        <verstretch>0</verstretch>
177
       </sizepolicy>
178
obs-studio-27.0.1.tar.xz/UI/forms/source-toolbar/text-source-toolbar.ui -> obs-studio-27.1.3.tar.xz/UI/forms/source-toolbar/text-source-toolbar.ui Changed
70
 
1
@@ -11,7 +11,7 @@
2
    </rect>
3
   </property>
4
   <property name="sizePolicy">
5
-   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
6
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
7
     <horstretch>0</horstretch>
8
     <verstretch>0</verstretch>
9
    </sizepolicy>
10
@@ -22,12 +22,6 @@
11
     <height>22</height>
12
    </size>
13
   </property>
14
-  <property name="maximumSize">
15
-   <size>
16
-    <width>16777215</width>
17
-    <height>22</height>
18
-   </size>
19
-  </property>
20
   <property name="windowTitle">
21
    <string notr="true">Form</string>
22
   </property>
23
@@ -52,12 +46,6 @@
24
        <height>22</height>
25
       </size>
26
      </property>
27
-     <property name="maximumSize">
28
-      <size>
29
-       <width>16777215</width>
30
-       <height>22</height>
31
-      </size>
32
-     </property>
33
      <property name="text">
34
       <string>Basic.PropertiesWindow.SelectFont</string>
35
      </property>
36
@@ -71,19 +59,13 @@
37
        <height>22</height>
38
       </size>
39
      </property>
40
-     <property name="maximumSize">
41
-      <size>
42
-       <width>16777215</width>
43
-       <height>22</height>
44
-      </size>
45
-     </property>
46
      <property name="text">
47
       <string>Basic.PropertiesWindow.SelectColor</string>
48
      </property>
49
     </widget>
50
    </item>
51
    <item>
52
-    <widget class="QWidget" name="emptySpace">
53
+    <widget class="QFrame" name="emptySpace">
54
      <property name="sizePolicy">
55
       <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
56
        <horstretch>0</horstretch>
57
@@ -100,12 +82,6 @@
58
        <height>22</height>
59
       </size>
60
      </property>
61
-     <property name="maximumSize">
62
-      <size>
63
-       <width>16777215</width>
64
-       <height>22</height>
65
-      </size>
66
-     </property>
67
     </widget>
68
    </item>
69
   </layout>
70
obs-studio-27.0.1.tar.xz/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/UI/frontend-plugins/decklink-output-ui/CMakeLists.txt Changed
9
 
1
@@ -42,6 +42,7 @@
2
    )
3
 
4
 if(WIN32)
5
+   add_definitions(-DNOMINMAX)
6
    set(MODULE_DESCRIPTION "OBS DeckLink Output UI")
7
    configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in decklink-ouput-ui.rc)
8
    list(APPEND decklink-ouput-ui_SOURCES
9
obs-studio-27.0.1.tar.xz/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp -> obs-studio-27.1.3.tar.xz/UI/frontend-plugins/decklink-output-ui/decklink-ui-main.cpp Changed
61
 
1
@@ -14,6 +14,8 @@
2
 
3
 DecklinkOutputUI *doUI;
4
 
5
+bool shutting_down = false;
6
+
7
 bool main_output_running = false;
8
 bool preview_output_running = false;
9
 
10
@@ -56,7 +58,9 @@
11
    obs_output_stop(output);
12
    obs_output_release(output);
13
    main_output_running = false;
14
-   doUI->OutputStateChanged(false);
15
+
16
+   if (!shutting_down)
17
+       doUI->OutputStateChanged(false);
18
 }
19
 
20
 void output_start()
21
@@ -71,7 +75,8 @@
22
 
23
        main_output_running = started;
24
 
25
-       doUI->OutputStateChanged(started);
26
+       if (!shutting_down)
27
+           doUI->OutputStateChanged(started);
28
 
29
        if (!started)
30
            output_stop();
31
@@ -135,7 +140,9 @@
32
    obs_remove_tick_callback(preview_tick, &context);
33
 
34
    preview_output_running = false;
35
-   doUI->PreviewOutputStateChanged(false);
36
+
37
+   if (!shutting_down)
38
+       doUI->PreviewOutputStateChanged(false);
39
 }
40
 
41
 void preview_output_start()
42
@@ -191,7 +198,8 @@
43
        bool started = obs_output_start(context.output);
44
 
45
        preview_output_running = started;
46
-       doUI->PreviewOutputStateChanged(started);
47
+       if (!shutting_down)
48
+           doUI->PreviewOutputStateChanged(started);
49
 
50
        if (!started)
51
            preview_output_stop();
52
@@ -333,6 +341,8 @@
53
 
54
 void obs_module_unload(void)
55
 {
56
+   shutting_down = true;
57
+
58
    if (preview_output_running)
59
        preview_output_stop();
60
 
61
obs-studio-27.0.1.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt Changed
9
 
1
@@ -73,6 +73,7 @@
2
 endif()
3
 
4
 if(WIN32)
5
+   add_definitions(-DNOMINMAX)
6
    set(MODULE_DESCRIPTION "OBS Frontend Tools")
7
    configure_file(${CMAKE_SOURCE_DIR}/cmake/winrc/obs-module.rc.in frontend-tools.rc)
8
    set(frontend-tools_PLATFORM_SOURCES
9
obs-studio-27.0.1.tar.xz/UI/frontend-plugins/frontend-tools/scripts.cpp -> obs-studio-27.1.3.tar.xz/UI/frontend-plugins/frontend-tools/scripts.cpp Changed
19
 
1
@@ -568,9 +568,15 @@
2
        delete scriptsWindow;
3
        delete scriptLogWindow;
4
 
5
+       scriptData = nullptr;
6
+       scriptsWindow = nullptr;
7
+       scriptLogWindow = nullptr;
8
+
9
    } else if (event == OBS_FRONTEND_EVENT_SCENE_COLLECTION_CLEANUP) {
10
-       scriptLogWindow->hide();
11
-       scriptLogWindow->Clear();
12
+       if (scriptLogWindow) {
13
+           scriptLogWindow->hide();
14
+           scriptLogWindow->Clear();
15
+       }
16
 
17
        delete scriptData;
18
        scriptData = new ScriptData;
19
obs-studio-27.0.1.tar.xz/UI/installer/mp-installer.nsi -> obs-studio-27.1.3.tar.xz/UI/installer/mp-installer.nsi Changed
110
 
1
@@ -10,6 +10,10 @@
2
 ; have replaced every OBS specific check, whether process names,
3
 ; application names, files, registry entries, etc.
4
 ;
5
+; To auto-install required Visual C++ components, download from
6
+; https://support.microsoft.com/en-us/topic/the-latest-supported-visual-c-downloads-2647da03-1eea-4433-9aff-95f26a218cc0
7
+; and copy to this directory (UI/installer/)
8
+;
9
 ; This script also requires OBSInstallerUtils for additional
10
 ; functions. You can find it at
11
 ; https://github.com/notr1ch/OBSInstallerUtils
12
@@ -109,45 +113,6 @@
13
        Quit
14
    ${EndIf}
15
 
16
-!ifdef INSTALL64
17
-   ; 64 bit Visual Studio 2019 runtime check
18
-   ClearErrors
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
-       IfSilent +1 +3
26
-           SetErrorLevel 4
27
-           Quit
28
-       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
29
-       vs2019true_64:
30
-           ExecShell "open" "https://obsproject.com/visual-studio-2019-runtimes-64-bit"
31
-       vs2019false_64:
32
-       Quit
33
-   vs2019OK_64:
34
-   ClearErrors
35
-!else
36
-   ; 32 bit Visual Studio 2019 runtime check
37
-   ClearErrors
38
-   GetDLLVersion "vcruntime140.DLL" $R0 $R1
39
-   GetDLLVersion "msvcp140.DLL" $R0 $R1
40
-   GetDLLVersion "msvcp140_1.DLL" $R0 $R1
41
-   IfErrors vs2019Missing_32 vs2019OK_32
42
-   vs2019Missing_32:
43
-       IfSilent +1 +3
44
-           SetErrorLevel 4
45
-           Quit
46
-       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
47
-       vs2019true_32:
48
-           ExecShell "open" "https://obsproject.com/visual-studio-2019-runtimes-32-bit"
49
-       vs2019false_32:
50
-       Quit
51
-   vs2019OK_32:
52
-   ClearErrors
53
-!endif
54
-
55
    ; DirectX Version Check
56
    ClearErrors
57
    GetDLLVersion "D3DCompiler_33.dll" $R0 $R1
58
@@ -307,6 +272,36 @@
59
    File /r "new\core\obs-plugins\32bit"
60
 !endif
61
 
62
+!ifdef INSTALL64
63
+   ; 64 bit Visual Studio 2019 runtime check
64
+   ClearErrors
65
+   SetOutPath "$PLUGINSDIR"
66
+   File check_for_64bit_visual_studio_2019_runtimes.exe
67
+   ExecWait "$PLUGINSDIR\check_for_64bit_visual_studio_2019_runtimes.exe" $R0
68
+   Delete "$PLUGINSDIR\check_for_64bit_visual_studio_2019_runtimes.exe"
69
+   IntCmp $R0 126 vs2019Missing_64 vs2019OK_64
70
+   vs2019Missing_64:
71
+       File VC_redist.x64.exe
72
+       ExecWait '"$PLUGINSDIR\VC_redist.x64.exe" /quiet /norestart'
73
+       Delete "$PLUGINSDIR\VC_redist.x64.exe"
74
+   vs2019OK_64:
75
+   ClearErrors
76
+!else
77
+   ; 32 bit Visual Studio 2019 runtime check
78
+   ClearErrors
79
+   SetOutPath "$PLUGINSDIR"
80
+   GetDLLVersion "vcruntime140.DLL" $R0 $R1
81
+   GetDLLVersion "msvcp140.DLL" $R0 $R1
82
+   GetDLLVersion "msvcp140_1.DLL" $R0 $R1
83
+   IfErrors vs2019Missing_32 vs2019OK_32
84
+   vs2019Missing_32:
85
+       File VC_redist.x86.exe
86
+       ExecWait '"$PLUGINSDIR\VC_redist.x86.exe" /quiet /norestart'
87
+       Delete "$PLUGINSDIR\VC_redist.x86.exe"
88
+   vs2019OK_32:
89
+   ClearErrors
90
+!endif
91
+
92
    # ----------------------------
93
 
94
    SetShellVarContext all
95
@@ -458,12 +453,14 @@
96
    Delete "$INSTDIR\uninstall.exe"
97
 
98
    ; Delete Shortcuts
99
+   SetShellVarContext all
100
    Delete "$DESKTOP\OBS Studio.lnk"
101
    Delete "$SMPROGRAMS\OBS Studio\OBS Studio (32bit).lnk"
102
    Delete "$SMPROGRAMS\OBS Studio\Uninstall.lnk"
103
    ${if} ${RunningX64}
104
        Delete "$SMPROGRAMS\OBS Studio\OBS Studio (64bit).lnk"
105
    ${endif}
106
+   SetShellVarContext current
107
 
108
    IfFileExists "$INSTDIR\data\obs-plugins\win-ivcam\seg_service.exe" UnregisterSegService SkipUnreg
109
    UnregisterSegService:
110
obs-studio-27.0.1.tar.xz/UI/log-viewer.cpp -> obs-studio-27.1.3.tar.xz/UI/log-viewer.cpp Changed
18
 
1
@@ -16,6 +16,7 @@
2
 {
3
    setWindowFlags(windowFlags() & Qt::WindowMaximizeButtonHint &
4
               ~Qt::WindowContextHelpButtonHint);
5
+   setAttribute(Qt::WA_DeleteOnClose);
6
 
7
    QVBoxLayout *layout = new QVBoxLayout();
8
    layout->setContentsMargins(0, 0, 0, 0);
9
@@ -35,7 +36,7 @@
10
    connect(openButton, &QPushButton::clicked, this,
11
        &OBSLogViewer::OpenFile);
12
    QPushButton *closeButton = new QPushButton(QTStr("Close"));
13
-   connect(closeButton, &QPushButton::clicked, this, &QDialog::hide);
14
+   connect(closeButton, &QPushButton::clicked, this, &QDialog::close);
15
 
16
    bool showLogViewerOnStartup = config_get_bool(
17
        App()->GlobalConfig(), "LogViewer", "ShowLogStartup");
18
obs-studio-27.0.1.tar.xz/UI/obs-app.cpp -> obs-studio-27.1.3.tar.xz/UI/obs-app.cpp Changed
174
 
1
@@ -90,6 +90,7 @@
2
 bool opt_always_on_top = false;
3
 bool opt_disable_high_dpi_scaling = false;
4
 bool opt_disable_updater = false;
5
+bool opt_disable_missing_files_check = false;
6
 string opt_starting_collection;
7
 string opt_starting_profile;
8
 string opt_starting_scene;
9
@@ -166,7 +167,11 @@
10
        };
11
 
12
        auto key_event = [&](QKeyEvent *event) {
13
-           if (!App()->HotkeysEnabledInFocus())
14
+           int key = event->key();
15
+           bool enabledInFocus = App()->HotkeysEnabledInFocus();
16
+
17
+           if (key != Qt::Key_Enter && key != Qt::Key_Escape &&
18
+               key != Qt::Key_Return && !enabledInFocus)
19
                return true;
20
 
21
            QDialog *dialog = qobject_cast<QDialog *>(obj);
22
@@ -174,7 +179,7 @@
23
            obs_key_combination_t hotkey = {0, OBS_KEY_NONE};
24
            bool pressed = event->type() == QEvent::KeyPress;
25
 
26
-           switch (event->key()) {
27
+           switch (key) {
28
            case Qt::Key_Shift:
29
            case Qt::Key_Control:
30
            case Qt::Key_Alt:
31
@@ -194,6 +199,8 @@
32
            case Qt::Key_Return:
33
                if (dialog && pressed)
34
                    return false;
35
+               if (!enabledInFocus)
36
+                   return true;
37
                /* Falls through. */
38
            default:
39
                hotkey.key = obs_key_from_virtual_key(
40
@@ -817,6 +824,11 @@
41
 
42
    locale = lang;
43
 
44
+   // set basic default application locale
45
+   if (!locale.empty())
46
+       QLocale::setDefault(QLocale(
47
+           QString::fromStdString(locale).replace('-', '_')));
48
+
49
    string englishPath;
50
    if (!GetDataFilePath("locale/" DEFAULT_LANG ".ini", englishPath)) {
51
        OBSErrorBox(NULL, "Failed to find locale/" DEFAULT_LANG ".ini");
52
@@ -855,6 +867,13 @@
53
            blog(LOG_INFO, "Using preferred locale '%s'",
54
                 locale_.c_str());
55
            locale = locale_;
56
+
57
+           // set application default locale to the new choosen one
58
+           if (!locale.empty())
59
+               QLocale::setDefault(QLocale(
60
+                   QString::fromStdString(locale).replace(
61
+                       '-', '_')));
62
+
63
            return true;
64
        }
65
 
66
@@ -1098,8 +1117,8 @@
67
 
68
    QString mpath = QString("file:///") + path.c_str();
69
    setPalette(defaultPalette);
70
-   setStyleSheet(mpath);
71
    ParseExtraThemeData(path.c_str());
72
+   setStyleSheet(mpath);
73
 
74
    emit StyleChanged();
75
    return true;
76
@@ -1497,6 +1516,11 @@
77
    return opt_disable_updater;
78
 }
79
 
80
+bool OBSApp::IsMissingFilesCheckDisabled()
81
+{
82
+   return opt_disable_missing_files_check;
83
+}
84
+
85
 #ifdef __APPLE__
86
 #define INPUT_AUDIO_SOURCE "coreaudio_input_capture"
87
 #define OUTPUT_AUDIO_SOURCE "coreaudio_output_capture"
88
@@ -1768,13 +1792,27 @@
89
 {
90
    string f;
91
 
92
+   f = format;
93
+
94
    if (prefix && *prefix) {
95
-       f += prefix;
96
-       if (f.back() != ' ')
97
-           f += " ";
98
-   }
99
+       string str_prefix = prefix;
100
 
101
-   f += format;
102
+       if (str_prefix.back() != ' ')
103
+           str_prefix += " ";
104
+
105
+       size_t insert_pos = 0;
106
+       size_t tmp;
107
+
108
+       tmp = f.find_last_of('/');
109
+       if (tmp != string::npos && tmp > insert_pos)
110
+           insert_pos = tmp + 1;
111
+
112
+       tmp = f.find_last_of('\\');
113
+       if (tmp != string::npos && tmp > insert_pos)
114
+           insert_pos = tmp + 1;
115
+
116
+       f.insert(insert_pos, str_prefix);
117
+   }
118
 
119
    if (suffix && *suffix) {
120
        if (*suffix != ' ')
121
@@ -1977,6 +2015,18 @@
122
    InstallNSApplicationSubclass();
123
 #endif
124
 
125
+#if !defined(_WIN32) && !defined(__APPLE__) && defined(USE_XDG) && \
126
+   defined(ENABLE_WAYLAND)
127
+   /* NOTE: Qt doesn't use the Wayland platform on GNOME, so we have to
128
+    * force it using the QT_QPA_PLATFORM env var. It's still possible to
129
+    * use other QPA platforms using this env var, or the -platform command
130
+    * line option. */
131
+
132
+   const char *session_type = getenv("XDG_SESSION_TYPE");
133
+   if (session_type && strcmp(session_type, "wayland") == 0)
134
+       setenv("QT_QPA_PLATFORM", "wayland", false);
135
+#endif
136
+
137
    OBSApp program(argc, argv, profilerNameStore.get());
138
    try {
139
        QAccessible::installFactory(accessibleFactory);
140
@@ -2697,6 +2747,10 @@
141
        } else if (arg_is(argv[i], "--disable-updater", nullptr)) {
142
            opt_disable_updater = true;
143
 
144
+       } else if (arg_is(argv[i], "--disable-missing-files-check",
145
+                 nullptr)) {
146
+           opt_disable_missing_files_check = true;
147
+
148
        } else if (arg_is(argv[i], "--disable-high-dpi-scaling",
149
                  nullptr)) {
150
            opt_disable_high_dpi_scaling = true;
151
@@ -2720,6 +2774,7 @@
152
                "--always-on-top: Start in 'always on top' mode.\n\n"
153
                "--unfiltered_log: Make log unfiltered.\n\n"
154
                "--disable-updater: Disable built-in updater (Windows/Mac only)\n\n"
155
+               "--disable-missing-files-check: Disable the missing files dialog which can appear on startup.\n\n"
156
                "--disable-high-dpi-scaling: Disable automatic high-DPI scaling\n\n";
157
 
158
 #ifdef _WIN32
159
@@ -2752,6 +2807,14 @@
160
            os_file_exists(BASE_PATH "/disable_updater") ||
161
            os_file_exists(BASE_PATH "/disable_updater.txt");
162
    }
163
+
164
+   if (!opt_disable_missing_files_check) {
165
+       opt_disable_missing_files_check =
166
+           os_file_exists(BASE_PATH
167
+                      "/disable_missing_files_check") ||
168
+           os_file_exists(BASE_PATH
169
+                      "/disable_missing_files_check.txt");
170
+   }
171
 #endif
172
 
173
    upgrade_settings();
174
obs-studio-27.0.1.tar.xz/UI/obs-app.hpp -> obs-studio-27.1.3.tar.xz/UI/obs-app.hpp Changed
9
 
1
@@ -150,6 +150,7 @@
2
    std::string GetVersionString() const;
3
    bool IsPortableMode();
4
    bool IsUpdaterDisabled();
5
+   bool IsMissingFilesCheckDisabled();
6
 
7
    const char *InputAudioSource() const;
8
    const char *OutputAudioSource() const;
9
obs-studio-27.0.1.tar.xz/UI/obs-frontend-api/obs-frontend-api.cpp -> obs-studio-27.1.3.tar.xz/UI/obs-frontend-api/obs-frontend-api.cpp Changed
54
 
1
@@ -204,12 +204,36 @@
2
                   : nullptr;
3
 }
4
 
5
+char *obs_frontend_get_current_profile_path(void)
6
+{
7
+   return !!callbacks_valid() ? c->obs_frontend_get_current_profile_path()
8
+                  : nullptr;
9
+}
10
+
11
 void obs_frontend_set_current_profile(const char *profile)
12
 {
13
    if (callbacks_valid())
14
        c->obs_frontend_set_current_profile(profile);
15
 }
16
 
17
+void obs_frontend_create_profile(const char *name)
18
+{
19
+   if (callbacks_valid())
20
+       c->obs_frontend_create_profile(name);
21
+}
22
+
23
+void obs_frontend_duplicate_profile(const char *name)
24
+{
25
+   if (callbacks_valid())
26
+       c->obs_frontend_duplicate_profile(name);
27
+}
28
+
29
+void obs_frontend_delete_profile(const char *profile)
30
+{
31
+   if (callbacks_valid())
32
+       c->obs_frontend_delete_profile(profile);
33
+}
34
+
35
 void obs_frontend_streaming_start(void)
36
 {
37
    if (callbacks_valid())
38
@@ -510,3 +534,15 @@
39
    if (callbacks_valid())
40
        c->obs_frontend_reset_video();
41
 }
42
+
43
+void obs_frontend_open_source_properties(obs_source_t *source)
44
+{
45
+   if (callbacks_valid())
46
+       c->obs_frontend_open_source_properties(source);
47
+}
48
+
49
+void obs_frontend_open_source_filters(obs_source_t *source)
50
+{
51
+   if (callbacks_valid())
52
+       c->obs_frontend_open_source_filters(source);
53
+}
54
obs-studio-27.0.1.tar.xz/UI/obs-frontend-api/obs-frontend-api.h -> obs-studio-27.1.3.tar.xz/UI/obs-frontend-api/obs-frontend-api.h Changed
23
 
1
@@ -117,7 +117,11 @@
2
 
3
 EXPORT char **obs_frontend_get_profiles(void);
4
 EXPORT char *obs_frontend_get_current_profile(void);
5
+EXPORT char *obs_frontend_get_current_profile_path(void);
6
 EXPORT void obs_frontend_set_current_profile(const char *profile);
7
+EXPORT void obs_frontend_create_profile(const char *name);
8
+EXPORT void obs_frontend_duplicate_profile(const char *name);
9
+EXPORT void obs_frontend_delete_profile(const char *profile);
10
 
11
 typedef void (*obs_frontend_cb)(void *private_data);
12
 
13
@@ -211,6 +215,9 @@
14
 
15
 EXPORT void obs_frontend_reset_video(void);
16
 
17
+EXPORT void obs_frontend_open_source_properties(obs_source_t *source);
18
+EXPORT void obs_frontend_open_source_filters(obs_source_t *source);
19
+
20
 /* ------------------------------------------------------------------------- */
21
 
22
 #ifdef __cplusplus
23
obs-studio-27.0.1.tar.xz/UI/obs-frontend-api/obs-frontend-internal.hpp -> obs-studio-27.1.3.tar.xz/UI/obs-frontend-api/obs-frontend-internal.hpp Changed
24
 
1
@@ -37,7 +37,11 @@
2
    virtual void
3
    obs_frontend_get_profiles(std::vector<std::string> &strings) = 0;
4
    virtual char *obs_frontend_get_current_profile(void) = 0;
5
+   virtual char *obs_frontend_get_current_profile_path(void) = 0;
6
    virtual void obs_frontend_set_current_profile(const char *profile) = 0;
7
+   virtual void obs_frontend_create_profile(const char *name) = 0;
8
+   virtual void obs_frontend_duplicate_profile(const char *name) = 0;
9
+   virtual void obs_frontend_delete_profile(const char *profile) = 0;
10
 
11
    virtual void obs_frontend_streaming_start(void) = 0;
12
    virtual void obs_frontend_streaming_stop(void) = 0;
13
@@ -130,6 +134,10 @@
14
    virtual bool obs_frontend_virtualcam_active(void) = 0;
15
 
16
    virtual void obs_frontend_reset_video(void) = 0;
17
+
18
+   virtual void
19
+   obs_frontend_open_source_properties(obs_source_t *source) = 0;
20
+   virtual void obs_frontend_open_source_filters(obs_source_t *source) = 0;
21
 };
22
 
23
 EXPORT void
24
obs-studio-27.0.1.tar.xz/UI/platform-windows.cpp -> obs-studio-27.1.3.tar.xz/UI/platform-windows.cpp Changed
24
 
1
@@ -368,17 +368,17 @@
2
    }
3
 
4
    UINT32 numPath, numMode;
5
-   if (!GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &numPath,
6
-                    &numMode) == ERROR_SUCCESS) {
7
+   if (GetDisplayConfigBufferSizes(QDC_ONLY_ACTIVE_PATHS, &numPath,
8
+                   &numMode) != ERROR_SUCCESS) {
9
        return GENERIC_MONITOR_NAME;
10
    }
11
 
12
    std::vector<DISPLAYCONFIG_PATH_INFO> paths(numPath);
13
    std::vector<DISPLAYCONFIG_MODE_INFO> modes(numMode);
14
 
15
-   if (!QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &numPath, paths.data(),
16
-               &numMode, modes.data(),
17
-               nullptr) == ERROR_SUCCESS) {
18
+   if (QueryDisplayConfig(QDC_ONLY_ACTIVE_PATHS, &numPath, paths.data(),
19
+                  &numMode, modes.data(),
20
+                  nullptr) != ERROR_SUCCESS) {
21
        return GENERIC_MONITOR_NAME;
22
    }
23
 
24
obs-studio-27.0.1.tar.xz/UI/properties-view.cpp -> obs-studio-27.1.3.tar.xz/UI/properties-view.cpp Changed
45
 
1
@@ -17,10 +17,12 @@
2
 #include <QPlainTextEdit>
3
 #include <QDialogButtonBox>
4
 #include <QMenu>
5
+#include <QMessageBox>
6
 #include <QStackedWidget>
7
 #include <QDir>
8
 #include <QGroupBox>
9
 #include <QObject>
10
+#include <QDesktopServices>
11
 #include "double-slider.hpp"
12
 #include "slider-ignorewheel.hpp"
13
 #include "spinbox-ignorewheel.hpp"
14
@@ -1881,6 +1883,30 @@
15
 
16
 void WidgetInfo::ButtonClicked()
17
 {
18
+   obs_button_type type = obs_property_button_type(property);
19
+   const char *savedUrl = obs_property_button_url(property);
20
+
21
+   if (type == OBS_BUTTON_URL && strcmp(savedUrl, "") != 0) {
22
+       QUrl url(savedUrl, QUrl::StrictMode);
23
+       if (url.isValid() && (url.scheme().compare("http") == 0 ||
24
+                     url.scheme().compare("https") == 0)) {
25
+           QString msg(
26
+               QTStr("Basic.PropertiesView.UrlButton.Text"));
27
+           msg += "\n\n";
28
+           msg += QString(QTStr("Basic.PropertiesView.UrlButton.Text.Url"))
29
+                      .arg(savedUrl);
30
+
31
+           QMessageBox::StandardButton button = OBSMessageBox::question(
32
+               view->window(),
33
+               QTStr("Basic.PropertiesView.UrlButton.OpenUrl"),
34
+               msg, QMessageBox::Yes | QMessageBox::No,
35
+               QMessageBox::No);
36
+
37
+           if (button == QMessageBox::Yes)
38
+               QDesktopServices::openUrl(url);
39
+       }
40
+       return;
41
+   }
42
    if (obs_property_button_clicked(property, view->obj)) {
43
        QMetaObject::invokeMethod(view, "RefreshProperties",
44
                      Qt::QueuedConnection);
45
obs-studio-27.0.1.tar.xz/UI/remote-text.cpp -> obs-studio-27.1.3.tar.xz/UI/remote-text.cpp Changed
70
 
1
@@ -67,6 +67,7 @@
2
        curl_easy_setopt(curl.get(), CURLOPT_ACCEPT_ENCODING, "");
3
        curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, header);
4
        curl_easy_setopt(curl.get(), CURLOPT_ERRORBUFFER, error);
5
+       curl_easy_setopt(curl.get(), CURLOPT_FAILONERROR, 1L);
6
        curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION,
7
                 string_write);
8
        curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &str);
9
@@ -88,6 +89,9 @@
10
 
11
        code = curl_easy_perform(curl.get());
12
        if (code != CURLE_OK) {
13
+           blog(LOG_WARNING,
14
+                "RemoteTextThread: HTTP request failed. %s",
15
+                error);
16
            emit Result(QString(), QT_UTF8(error));
17
        } else {
18
            emit Result(QT_UTF8(str.c_str()), QString());
19
@@ -117,8 +121,10 @@
20
 
21
 bool GetRemoteFile(const char *url, std::string &str, std::string &error,
22
           long *responseCode, const char *contentType,
23
-          const char *postData, std::vector<std::string> extraHeaders,
24
-          std::string *signature, int timeoutSec)
25
+          std::string request_type, const char *postData,
26
+          std::vector<std::string> extraHeaders,
27
+          std::string *signature, int timeoutSec, bool fail_on_error,
28
+          int postDataSize)
29
 {
30
    vector<string> header_in_list;
31
    char error_in[CURL_ERROR_SIZE];
32
@@ -153,6 +159,8 @@
33
        curl_easy_setopt(curl.get(), CURLOPT_ACCEPT_ENCODING, "");
34
        curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, header);
35
        curl_easy_setopt(curl.get(), CURLOPT_ERRORBUFFER, error_in);
36
+       if (fail_on_error)
37
+           curl_easy_setopt(curl.get(), CURLOPT_FAILONERROR, 1L);
38
        curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION,
39
                 string_write);
40
        curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &str);
41
@@ -173,8 +181,27 @@
42
        // A lot of servers don't yet support ALPN
43
        curl_easy_setopt(curl.get(), CURLOPT_SSL_ENABLE_ALPN, 0);
44
 #endif
45
-
46
+       if (!request_type.empty()) {
47
+           if (request_type != "GET")
48
+               curl_easy_setopt(curl.get(),
49
+                        CURLOPT_CUSTOMREQUEST,
50
+                        request_type.c_str());
51
+
52
+           // Special case of "POST"
53
+           if (request_type == "POST") {
54
+               curl_easy_setopt(curl.get(), CURLOPT_POST, 1);
55
+               if (!postData)
56
+                   curl_easy_setopt(curl.get(),
57
+                            CURLOPT_POSTFIELDS,
58
+                            "{}");
59
+           }
60
+       }
61
        if (postData) {
62
+           if (postDataSize > 0) {
63
+               curl_easy_setopt(curl.get(),
64
+                        CURLOPT_POSTFIELDSIZE,
65
+                        (long)postDataSize);
66
+           }
67
            curl_easy_setopt(curl.get(), CURLOPT_POSTFIELDS,
68
                     postData);
69
        }
70
obs-studio-27.0.1.tar.xz/UI/remote-text.hpp -> obs-studio-27.1.3.tar.xz/UI/remote-text.hpp Changed
11
 
1
@@ -66,6 +66,7 @@
2
 bool GetRemoteFile(
3
    const char *url, std::string &str, std::string &error,
4
    long *responseCode = nullptr, const char *contentType = nullptr,
5
-   const char *postData = nullptr,
6
+   std::string request_type = "", const char *postData = nullptr,
7
    std::vector<std::string> extraHeaders = std::vector<std::string>(),
8
-   std::string *signature = nullptr, int timeoutSec = 0);
9
+   std::string *signature = nullptr, int timeoutSec = 0,
10
+   bool fail_on_error = true, int postDataSize = 0);
11
obs-studio-27.0.1.tar.xz/UI/source-tree.cpp -> obs-studio-27.1.3.tar.xz/UI/source-tree.cpp Changed
58
 
1
@@ -61,7 +61,8 @@
2
    OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
3
    const char *id = obs_source_get_id(source);
4
 
5
-   QLabel *iconLabel = nullptr;
6
+   bool sourceVisible = obs_sceneitem_visible(sceneitem);
7
+
8
    if (tree->iconsVisible) {
9
        QIcon icon;
10
 
11
@@ -77,13 +78,14 @@
12
        iconLabel = new QLabel();
13
        iconLabel->setPixmap(pixmap);
14
        iconLabel->setFixedSize(16, 16);
15
+       iconLabel->setEnabled(sourceVisible);
16
        iconLabel->setStyleSheet("background: none");
17
    }
18
 
19
    vis = new VisibilityCheckBox();
20
    vis->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
21
    vis->setFixedSize(16, 16);
22
-   vis->setChecked(obs_sceneitem_visible(sceneitem));
23
+   vis->setChecked(sourceVisible);
24
    vis->setStyleSheet("background: none");
25
    vis->setAccessibleName(QTStr("Basic.Main.Sources.Visibility"));
26
    vis->setAccessibleDescription(
27
@@ -102,6 +104,7 @@
28
    label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
29
    label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
30
    label->setAttribute(Qt::WA_TranslucentBackground);
31
+   label->setEnabled(sourceVisible);
32
 
33
 #ifdef __APPLE__
34
    vis->setAttribute(Qt::WA_LayoutUsesWidgetRect);
35
@@ -506,6 +509,10 @@
36
 
37
 void SourceTreeItem::VisibilityChanged(bool visible)
38
 {
39
+   if (iconLabel) {
40
+       iconLabel->setEnabled(visible);
41
+   }
42
+   label->setEnabled(visible);
43
    vis->setChecked(visible);
44
 }
45
 
46
@@ -883,11 +890,8 @@
47
    obs_sceneitem_t *item = items[index.row()];
48
    bool is_group = obs_sceneitem_is_group(item);
49
 
50
-   /* XXX: Disable drag/drop on Linux until Qt issues are fixed */
51
    return QAbstractListModel::flags(index) | Qt::ItemIsEditable |
52
-#if defined(_WIN32) || defined(__APPLE__)
53
           Qt::ItemIsDragEnabled |
54
-#endif
55
           (is_group ? Qt::ItemIsDropEnabled : Qt::NoItemFlags);
56
 }
57
 
58
obs-studio-27.0.1.tar.xz/UI/source-tree.hpp -> obs-studio-27.1.3.tar.xz/UI/source-tree.hpp Changed
9
 
1
@@ -62,6 +62,7 @@
2
 private:
3
    QSpacerItem *spacer = nullptr;
4
    QCheckBox *expand = nullptr;
5
+   QLabel *iconLabel = nullptr;
6
    VisibilityCheckBox *vis = nullptr;
7
    LockedCheckBox *lock = nullptr;
8
    QHBoxLayout *boxLayout = nullptr;
9
obs-studio-27.0.1.tar.xz/UI/ui-config.h.in -> obs-studio-27.1.3.tar.xz/UI/ui-config.h.in Changed
12
 
1
@@ -24,4 +24,10 @@
2
 #define RESTREAM_CLIENTID "@RESTREAM_CLIENTID@"
3
 #define RESTREAM_HASH     0x@RESTREAM_HASH@
4
 
5
+#define YOUTUBE_ENABLED       @YOUTUBE_ENABLED@
6
+#define YOUTUBE_CLIENTID      "@YOUTUBE_CLIENTID@"
7
+#define YOUTUBE_SECRET        "@YOUTUBE_SECRET@"
8
+#define YOUTUBE_CLIENTID_HASH 0x@YOUTUBE_CLIENTID_HASH@
9
+#define YOUTUBE_SECRET_HASH   0x@YOUTUBE_SECRET_HASH@
10
+
11
 #define DEFAULT_THEME "Dark"
12
obs-studio-27.0.1.tar.xz/UI/win-update/updater/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/UI/win-update/updater/CMakeLists.txt Changed
9
 
1
@@ -45,7 +45,6 @@
2
    ${STATIC_ZLIB_PATH}
3
    lzma
4
    blake2
5
-   psapi
6
    comctl32
7
    shell32
8
    winhttp
9
obs-studio-27.0.1.tar.xz/UI/win-update/win-update.cpp -> obs-studio-27.1.3.tar.xz/UI/win-update/win-update.cpp Changed
28
 
1
@@ -370,7 +370,7 @@
2
    string data;
3
 
4
    bool success = GetRemoteFile(url, data, error, &responseCode, nullptr,
5
-                    nullptr, extraHeaders, &signature);
6
+                    "", nullptr, extraHeaders, &signature);
7
 
8
    if (!success || (responseCode != 200 && responseCode != 304)) {
9
        if (responseCode == 404)
10
@@ -570,7 +570,7 @@
11
     * get manifest from server            */
12
 
13
    success = GetRemoteFile(WIN_MANIFEST_URL, text, error, &responseCode,
14
-               nullptr, nullptr, extraHeaders, &signature);
15
+               nullptr, "", nullptr, extraHeaders, &signature);
16
 
17
    if (!success || (responseCode != 200 && responseCode != 304)) {
18
        if (responseCode == 404)
19
@@ -766,7 +766,7 @@
20
     * get json from server                */
21
 
22
    success = GetRemoteFile(WIN_WHATSNEW_URL, text, error, &responseCode,
23
-               nullptr, nullptr, extraHeaders, &signature);
24
+               nullptr, "", nullptr, extraHeaders, &signature);
25
 
26
    if (!success || (responseCode != 200 && responseCode != 304)) {
27
        if (responseCode == 404)
28
obs-studio-27.0.1.tar.xz/UI/window-basic-auto-config-test.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-auto-config-test.cpp Changed
19
 
1
@@ -262,6 +262,9 @@
2
         * server */
3
        servers.erase(servers.begin() + 1);
4
        servers.resize(3);
5
+   } else if (wiz->service == AutoConfig::Service::YouTube) {
6
+       /* Only test first set of primary + backup servers */
7
+       servers.resize(2);
8
    }
9
 
10
    /* -----------------------------------*/
11
@@ -302,6 +305,7 @@
12
 
13
    obs_output_set_video_encoder(output, vencoder);
14
    obs_output_set_audio_encoder(output, aencoder, 0);
15
+   obs_output_set_reconnect_settings(output, 0, 0);
16
 
17
    obs_output_set_service(output, service);
18
 
19
obs-studio-27.0.1.tar.xz/UI/window-basic-auto-config.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-auto-config.cpp Changed
420
 
1
@@ -15,7 +15,12 @@
2
 
3
 #ifdef BROWSER_AVAILABLE
4
 #include <browser-panel.hpp>
5
+#endif
6
+
7
 #include "auth-oauth.hpp"
8
+#include "ui-config.h"
9
+#if YOUTUBE_ENABLED
10
+#include "youtube-api-wrappers.hpp"
11
 #endif
12
 
13
 struct QCef;
14
@@ -257,6 +262,9 @@
15
    ui->connectAccount2->setVisible(false);
16
    ui->disconnectAccount->setVisible(false);
17
 
18
+   ui->connectedAccountLabel->setVisible(false);
19
+   ui->connectedAccountText->setVisible(false);
20
+
21
    int vertSpacing = ui->topLayout->verticalSpacing();
22
 
23
    QMargins m = ui->topLayout->contentsMargins();
24
@@ -295,6 +303,9 @@
25
    connect(ui->service, SIGNAL(currentIndexChanged(int)), this,
26
        SLOT(UpdateMoreInfoLink()));
27
 
28
+   connect(ui->useStreamKeyAdv, &QPushButton::clicked, this,
29
+       [&]() { ui->streamKeyWidget->setVisible(true); });
30
+
31
    connect(ui->key, SIGNAL(textChanged(const QString &)), this,
32
        SLOT(UpdateCompleted()));
33
    connect(ui->regionUS, SIGNAL(toggled(bool)), this,
34
@@ -346,10 +357,23 @@
35
                        service_settings, nullptr);
36
    obs_service_release(service);
37
 
38
-   int bitrate = 10000;
39
+   int bitrate;
40
    if (!ui->doBandwidthTest->isChecked()) {
41
        bitrate = ui->bitrate->value();
42
        wiz->idealBitrate = bitrate;
43
+   } else {
44
+       /* Default test target is 10 Mbps */
45
+       bitrate = 10000;
46
+#if YOUTUBE_ENABLED
47
+       if (IsYouTubeService(wiz->serviceName)) {
48
+           /* Adjust upper bound to YouTube limits
49
+            * for resolutions above 1080p */
50
+           if (wiz->baseResolutionCY > 1440)
51
+               bitrate = 51000;
52
+           else if (wiz->baseResolutionCY > 1080)
53
+               bitrate = 18000;
54
+       }
55
+#endif
56
    }
57
 
58
    OBSData settings = obs_data_create();
59
@@ -358,7 +382,7 @@
60
    obs_service_apply_encoder_settings(service, settings, nullptr);
61
 
62
    if (wiz->customServer) {
63
-       QString server = ui->customServer->text();
64
+       QString server = ui->customServer->text().trimmed();
65
        wiz->server = wiz->serverName = QT_TO_UTF8(server);
66
    } else {
67
        wiz->serverName = QT_TO_UTF8(ui->server->currentText());
68
@@ -380,13 +404,19 @@
69
    if (!wiz->customServer) {
70
        if (wiz->serviceName == "Twitch")
71
            wiz->service = AutoConfig::Service::Twitch;
72
+#if YOUTUBE_ENABLED
73
+       else if (IsYouTubeService(wiz->serviceName))
74
+           wiz->service = AutoConfig::Service::YouTube;
75
+#endif
76
        else
77
            wiz->service = AutoConfig::Service::Other;
78
    } else {
79
        wiz->service = AutoConfig::Service::Other;
80
    }
81
 
82
-   if (wiz->service != AutoConfig::Service::Twitch && wiz->bandwidthTest) {
83
+   if (wiz->service != AutoConfig::Service::Twitch &&
84
+       wiz->service != AutoConfig::Service::YouTube &&
85
+       wiz->bandwidthTest) {
86
        QMessageBox::StandardButton button;
87
 #define WARNING_TEXT(x) QTStr("Basic.AutoConfig.StreamPage.StreamWarning." x)
88
        button = OBSMessageBox::question(this, WARNING_TEXT("Title"),
89
@@ -413,7 +443,6 @@
90
 
91
 void AutoConfigStreamPage::OnOAuthStreamKeyConnected()
92
 {
93
-#ifdef BROWSER_AVAILABLE
94
    OAuthStreamKey *a = reinterpret_cast<OAuthStreamKey *>(auth.get());
95
 
96
    if (a) {
97
@@ -422,15 +451,47 @@
98
        if (validKey)
99
            ui->key->setText(QT_UTF8(a->key().c_str()));
100
 
101
-       ui->streamKeyWidget->setVisible(!validKey);
102
-       ui->streamKeyLabel->setVisible(!validKey);
103
-       ui->connectAccount2->setVisible(!validKey);
104
-       ui->disconnectAccount->setVisible(validKey);
105
+       ui->streamKeyWidget->setVisible(false);
106
+       ui->streamKeyLabel->setVisible(false);
107
+       ui->connectAccount2->setVisible(false);
108
+       ui->disconnectAccount->setVisible(true);
109
+       ui->useStreamKeyAdv->setVisible(false);
110
+
111
+       ui->connectedAccountLabel->setVisible(false);
112
+       ui->connectedAccountText->setVisible(false);
113
+
114
+#if YOUTUBE_ENABLED
115
+       if (IsYouTubeService(a->service())) {
116
+           ui->key->clear();
117
+
118
+           ui->connectedAccountLabel->setVisible(true);
119
+           ui->connectedAccountText->setVisible(true);
120
+
121
+           ui->connectedAccountText->setText(
122
+               QTStr("Auth.LoadingChannel.Title"));
123
+
124
+           YoutubeApiWrappers *ytAuth =
125
+               reinterpret_cast<YoutubeApiWrappers *>(a);
126
+           ChannelDescription cd;
127
+           if (ytAuth->GetChannelDescription(cd)) {
128
+               ui->connectedAccountText->setText(cd.title);
129
+
130
+               /* Create throwaway stream key for bandwidth test */
131
+               if (ui->doBandwidthTest->isChecked()) {
132
+                   StreamDescription stream = {
133
+                       "", "",
134
+                       "OBS Studio Test Stream"};
135
+                   if (ytAuth->InsertStream(stream)) {
136
+                       ui->key->setText(stream.name);
137
+                   }
138
+               }
139
+           }
140
+       }
141
+#endif
142
    }
143
 
144
    ui->stackedWidget->setCurrentIndex((int)Section::StreamKey);
145
    UpdateCompleted();
146
-#endif
147
 }
148
 
149
 void AutoConfigStreamPage::OnAuthConnected()
150
@@ -438,22 +499,24 @@
151
    std::string service = QT_TO_UTF8(ui->service->currentText());
152
    Auth::Type type = Auth::AuthType(service);
153
 
154
-   if (type == Auth::Type::OAuth_StreamKey) {
155
+   if (type == Auth::Type::OAuth_StreamKey ||
156
+       type == Auth::Type::OAuth_LinkedAccount) {
157
        OnOAuthStreamKeyConnected();
158
    }
159
 }
160
 
161
 void AutoConfigStreamPage::on_connectAccount_clicked()
162
 {
163
-#ifdef BROWSER_AVAILABLE
164
    std::string service = QT_TO_UTF8(ui->service->currentText());
165
 
166
    OAuth::DeleteCookies(service);
167
 
168
    auth = OAuthStreamKey::Login(this, service);
169
-   if (!!auth)
170
+   if (!!auth) {
171
        OnAuthConnected();
172
-#endif
173
+
174
+       ui->useStreamKeyAdv->setVisible(false);
175
+   }
176
 }
177
 
178
 #define DISCONNECT_COMFIRM_TITLE \
179
@@ -483,11 +546,17 @@
180
    OAuth::DeleteCookies(service);
181
 #endif
182
 
183
+   reset_service_ui_fields(service);
184
+
185
    ui->streamKeyWidget->setVisible(true);
186
    ui->streamKeyLabel->setVisible(true);
187
-   ui->connectAccount2->setVisible(true);
188
-   ui->disconnectAccount->setVisible(false);
189
    ui->key->setText("");
190
+
191
+   ui->connectedAccountLabel->setVisible(false);
192
+   ui->connectedAccountText->setVisible(false);
193
+
194
+   /* Restore key link when disconnecting account */
195
+   UpdateKeyLink();
196
 }
197
 
198
 void AutoConfigStreamPage::on_useStreamKey_clicked()
199
@@ -501,6 +570,55 @@
200
    return Auth::AuthType(service) != Auth::Type::None;
201
 }
202
 
203
+static inline bool is_external_oauth(const std::string &service)
204
+{
205
+   return Auth::External(service);
206
+}
207
+
208
+void AutoConfigStreamPage::reset_service_ui_fields(std::string &service)
209
+{
210
+#if YOUTUBE_ENABLED
211
+   // when account is already connected:
212
+   OAuthStreamKey *a = reinterpret_cast<OAuthStreamKey *>(auth.get());
213
+   if (a && service == a->service() && IsYouTubeService(a->service())) {
214
+       ui->connectedAccountLabel->setVisible(true);
215
+       ui->connectedAccountText->setVisible(true);
216
+       ui->connectAccount2->setVisible(false);
217
+       ui->disconnectAccount->setVisible(true);
218
+       return;
219
+   }
220
+#endif
221
+
222
+   bool external_oauth = is_external_oauth(service);
223
+   if (external_oauth) {
224
+       ui->streamKeyWidget->setVisible(false);
225
+       ui->streamKeyLabel->setVisible(false);
226
+       ui->connectAccount2->setVisible(true);
227
+       ui->useStreamKeyAdv->setVisible(true);
228
+
229
+       ui->stackedWidget->setCurrentIndex((int)Section::StreamKey);
230
+
231
+   } else if (cef) {
232
+       QString key = ui->key->text();
233
+       bool can_auth = is_auth_service(service);
234
+       int page = can_auth && key.isEmpty() ? (int)Section::Connect
235
+                            : (int)Section::StreamKey;
236
+
237
+       ui->stackedWidget->setCurrentIndex(page);
238
+       ui->streamKeyWidget->setVisible(true);
239
+       ui->streamKeyLabel->setVisible(true);
240
+       ui->connectAccount2->setVisible(can_auth);
241
+       ui->useStreamKeyAdv->setVisible(false);
242
+   } else {
243
+       ui->connectAccount2->setVisible(false);
244
+       ui->useStreamKeyAdv->setVisible(false);
245
+   }
246
+
247
+   ui->connectedAccountLabel->setVisible(false);
248
+   ui->connectedAccountText->setVisible(false);
249
+   ui->disconnectAccount->setVisible(false);
250
+}
251
+
252
 void AutoConfigStreamPage::ServiceChanged()
253
 {
254
    bool showMore = ui->service->currentData().toInt() ==
255
@@ -513,30 +631,7 @@
256
    bool testBandwidth = ui->doBandwidthTest->isChecked();
257
    bool custom = IsCustomService();
258
 
259
-   ui->disconnectAccount->setVisible(false);
260
-
261
-#ifdef BROWSER_AVAILABLE
262
-   if (cef) {
263
-       if (lastService != service.c_str()) {
264
-           bool can_auth = is_auth_service(service);
265
-           int page = can_auth ? (int)Section::Connect
266
-                       : (int)Section::StreamKey;
267
-
268
-           ui->stackedWidget->setCurrentIndex(page);
269
-           ui->streamKeyWidget->setVisible(true);
270
-           ui->streamKeyLabel->setVisible(true);
271
-           ui->connectAccount2->setVisible(can_auth);
272
-           auth.reset();
273
-
274
-           if (lastService.isEmpty())
275
-               lastService = service.c_str();
276
-       }
277
-   } else {
278
-       ui->connectAccount2->setVisible(false);
279
-   }
280
-#else
281
-   ui->connectAccount2->setVisible(false);
282
-#endif
283
+   reset_service_ui_fields(service);
284
 
285
    /* Test three closest servers if "Auto" is available for Twitch */
286
    if (service == "Twitch" && wiz->twitchAuto)
287
@@ -569,15 +664,24 @@
288
    ui->bitrateLabel->setHidden(testBandwidth);
289
    ui->bitrate->setHidden(testBandwidth);
290
 
291
-#ifdef BROWSER_AVAILABLE
292
    OBSBasic *main = OBSBasic::Get();
293
 
294
-   if (!!main->auth &&
295
-       service.find(main->auth->service()) != std::string::npos) {
296
-       auth = main->auth;
297
-       OnAuthConnected();
298
-   }
299
+   if (main->auth) {
300
+       auto system_auth_service = main->auth->service();
301
+       bool service_check = service.find(system_auth_service) !=
302
+                    std::string::npos;
303
+#if YOUTUBE_ENABLED
304
+       service_check =
305
+           service_check ? service_check
306
+                     : IsYouTubeService(system_auth_service) &&
307
+                       IsYouTubeService(service);
308
 #endif
309
+       if (service_check) {
310
+           auth.reset();
311
+           auth = main->auth;
312
+           OnAuthConnected();
313
+       }
314
+   }
315
 
316
    UpdateCompleted();
317
 }
318
@@ -614,38 +718,23 @@
319
 void AutoConfigStreamPage::UpdateKeyLink()
320
 {
321
    QString serviceName = ui->service->currentText();
322
-   QString customServer = ui->customServer->text();
323
-   bool isYoutube = false;
324
+   QString customServer = ui->customServer->text().trimmed();
325
    QString streamKeyLink;
326
 
327
-   if (serviceName == "Twitch") {
328
-       streamKeyLink = "https://dashboard.twitch.tv/settings/stream";
329
-   } else if (serviceName.startsWith("YouTube")) {
330
-       streamKeyLink = "https://www.youtube.com/live_dashboard";
331
-       isYoutube = true;
332
-   } else if (serviceName.startsWith("Restream.io")) {
333
-       streamKeyLink =
334
-           "https://restream.io/settings/streaming-setup?from=OBS";
335
-   } else if (serviceName == "Luzento.com - RTMP") {
336
-       streamKeyLink =
337
-           "https://cms.luzento.com/dashboard/stream-key?from=OBS";
338
-   } else if (serviceName == "Facebook Live" ||
339
-          (customServer.contains("fbcdn.net") && IsCustomService())) {
340
+   obs_properties_t *props = obs_get_service_properties("rtmp_common");
341
+   obs_property_t *services = obs_properties_get(props, "service");
342
+
343
+   OBSData settings = obs_data_create();
344
+   obs_data_release(settings);
345
+
346
+   obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName));
347
+   obs_property_modified(services, settings);
348
+
349
+   streamKeyLink = obs_data_get_string(settings, "stream_key_link");
350
+
351
+   if (customServer.contains("fbcdn.net") && IsCustomService()) {
352
        streamKeyLink =
353
            "https://www.facebook.com/live/producer?ref=OBS";
354
-   } else if (serviceName.startsWith("Twitter")) {
355
-       streamKeyLink = "https://studio.twitter.com/producer/sources";
356
-   } else if (serviceName.startsWith("YouStreamer")) {
357
-       streamKeyLink = "https://www.app.youstreamer.com/stream/";
358
-   } else if (serviceName == "Trovo") {
359
-       streamKeyLink = "https://studio.trovo.live/mychannel/stream";
360
-   } else if (serviceName == "Glimesh") {
361
-       streamKeyLink = "https://glimesh.tv/users/settings/stream";
362
-   } else if (serviceName.startsWith("OPENREC.tv")) {
363
-       streamKeyLink =
364
-           "https://www.openrec.tv/login?keep_login=true&url=https://www.openrec.tv/dashboard/live?from=obs";
365
-   } else if (serviceName == "Brime Live") {
366
-       streamKeyLink = "https://brimelive.com/obs-stream-key-link";
367
    }
368
 
369
    if (serviceName == "Dacast") {
370
@@ -656,19 +745,14 @@
371
            QTStr("Basic.AutoConfig.StreamPage.StreamKey"));
372
    }
373
 
374
-   if (QString(streamKeyLink).isNull()) {
375
+   if (QString(streamKeyLink).isNull() ||
376
+       QString(streamKeyLink).isEmpty()) {
377
        ui->streamKeyButton->hide();
378
    } else {
379
        ui->streamKeyButton->setTargetUrl(QUrl(streamKeyLink));
380
        ui->streamKeyButton->show();
381
    }
382
-
383
-   if (isYoutube) {
384
-       ui->doBandwidthTest->setChecked(false);
385
-       ui->doBandwidthTest->setEnabled(false);
386
-   } else {
387
-       ui->doBandwidthTest->setEnabled(true);
388
-   }
389
+   obs_properties_destroy(props);
390
 }
391
 
392
 void AutoConfigStreamPage::LoadServices(bool showAll)
393
@@ -1002,7 +1086,12 @@
394
    if (!customServer)
395
        obs_data_set_string(settings, "service", serviceName.c_str());
396
    obs_data_set_string(settings, "server", server.c_str());
397
+#if YOUTUBE_ENABLED
398
+   if (!IsYouTubeService(serviceName))
399
+       obs_data_set_string(settings, "key", key.c_str());
400
+#else
401
    obs_data_set_string(settings, "key", key.c_str());
402
+#endif
403
 
404
    OBSService newService = obs_service_create(
405
        service_id, "default_service", settings, hotkeyData);
406
@@ -1014,8 +1103,12 @@
407
    main->SetService(newService);
408
    main->SaveService();
409
    main->auth = streamPage->auth;
410
-   if (!!main->auth)
411
+   if (!!main->auth) {
412
        main->auth->LoadUI();
413
+       main->SetBroadcastFlowEnabled(main->auth->broadcastFlow());
414
+   } else {
415
+       main->SetBroadcastFlowEnabled(false);
416
+   }
417
 
418
    /* ---------------------------------- */
419
    /* save stream settings               */
420
obs-studio-27.0.1.tar.xz/UI/window-basic-auto-config.hpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-auto-config.hpp Changed
18
 
1
@@ -38,6 +38,7 @@
2
 
3
    enum class Service {
4
        Twitch,
5
+       YouTube,
6
        Other,
7
    };
8
 
9
@@ -197,6 +198,8 @@
10
    void UpdateMoreInfoLink();
11
    void UpdateServerList();
12
    void UpdateCompleted();
13
+
14
+   void reset_service_ui_fields(std::string &service);
15
 };
16
 
17
 class AutoConfigTestPage : public QWizardPage {
18
obs-studio-27.0.1.tar.xz/UI/window-basic-interaction.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-interaction.cpp Changed
13
 
1
@@ -221,11 +221,7 @@
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
obs-studio-27.0.1.tar.xz/UI/window-basic-main-outputs.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-main-outputs.cpp Changed
18
 
1
@@ -1343,10 +1343,16 @@
2
 
3
    if (applyServiceSettings) {
4
        int bitrate = (int)obs_data_get_int(settings, "bitrate");
5
+       int keyint_sec = (int)obs_data_get_int(settings, "keyint_sec");
6
        obs_service_apply_encoder_settings(main->GetService(), settings,
7
                           nullptr);
8
        if (!enforceBitrate)
9
            obs_data_set_int(settings, "bitrate", bitrate);
10
+
11
+       int enforced_keyint_sec =
12
+           (int)obs_data_get_int(settings, "keyint_sec");
13
+       if (keyint_sec != 0 && keyint_sec < enforced_keyint_sec)
14
+           obs_data_set_int(settings, "keyint_sec", keyint_sec);
15
    }
16
 
17
    if (dynBitrate && astrcmpi(streamEncoder, "jim_nvenc") == 0)
18
obs-studio-27.0.1.tar.xz/UI/window-basic-main-profiles.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-main-profiles.cpp Changed
214
 
1
@@ -77,12 +77,13 @@
2
    os_globfree(glob);
3
 }
4
 
5
-static bool ProfileExists(const char *findName)
6
+static bool GetProfileDir(const char *findName, const char *&profileDir)
7
 {
8
    bool found = false;
9
-   auto func = [&](const char *name, const char *) {
10
+   auto func = [&](const char *name, const char *path) {
11
        if (strcmp(name, findName) == 0) {
12
            found = true;
13
+           profileDir = strrchr(path, '/') + 1;
14
            return false;
15
        }
16
        return true;
17
@@ -92,14 +93,17 @@
18
    return found;
19
 }
20
 
21
-static bool GetProfileName(QWidget *parent, std::string &name,
22
-              std::string &file, const char *title,
23
-              const char *text, const bool showWizard,
24
-              bool &wizardChecked, const char *oldName = nullptr)
25
+static bool ProfileExists(const char *findName)
26
 {
27
-   char path[512];
28
-   int ret;
29
+   const char *profileDir = nullptr;
30
+   return GetProfileDir(findName, profileDir);
31
+}
32
 
33
+static bool AskForProfileName(QWidget *parent, std::string &name,
34
+                 const char *title, const char *text,
35
+                 const bool showWizard, bool &wizardChecked,
36
+                 const char *oldName = nullptr)
37
+{
38
    for (;;) {
39
        bool success = false;
40
 
41
@@ -130,10 +134,23 @@
42
        }
43
        break;
44
    }
45
+   return true;
46
+}
47
+
48
+static bool FindSafeProfileDirName(const std::string &profileName,
49
+                  std::string &dirName)
50
+{
51
+   char path[512];
52
+   int ret;
53
+
54
+   if (ProfileExists(profileName.c_str())) {
55
+       blog(LOG_WARNING, "Profile '%s' exists", profileName.c_str());
56
+       return false;
57
+   }
58
 
59
-   if (!GetFileSafeName(name.c_str(), file)) {
60
+   if (!GetFileSafeName(profileName.c_str(), dirName)) {
61
        blog(LOG_WARNING, "Failed to create safe file name for '%s'",
62
-            name.c_str());
63
+            profileName.c_str());
64
        return false;
65
    }
66
 
67
@@ -143,15 +160,15 @@
68
        return false;
69
    }
70
 
71
-   file.insert(0, path);
72
+   dirName.insert(0, path);
73
 
74
-   if (!GetClosestUnusedFileName(file, nullptr)) {
75
+   if (!GetClosestUnusedFileName(dirName, nullptr)) {
76
        blog(LOG_WARNING, "Failed to get closest file name for %s",
77
-            file.c_str());
78
+            dirName.c_str());
79
        return false;
80
    }
81
 
82
-   file.erase(0, ret);
83
+   dirName.erase(0, ret);
84
    return true;
85
 }
86
 
87
@@ -200,16 +217,26 @@
88
 bool OBSBasic::AddProfile(bool create_new, const char *title, const char *text,
89
              const char *init_text, bool rename)
90
 {
91
-   std::string newName;
92
-   std::string newDir;
93
-   std::string newPath;
94
-   ConfigFile config;
95
+   std::string name;
96
 
97
    bool showWizardChecked = config_get_bool(App()->GlobalConfig(), "Basic",
98
                         "ConfigOnNewProfile");
99
 
100
-   if (!GetProfileName(this, newName, newDir, title, text, create_new,
101
-               showWizardChecked, init_text))
102
+   if (!AskForProfileName(this, name, title, text, create_new,
103
+                  showWizardChecked, init_text))
104
+       return false;
105
+
106
+   return CreateProfile(name, create_new, showWizardChecked, rename);
107
+}
108
+
109
+bool OBSBasic::CreateProfile(const std::string &newName, bool create_new,
110
+                bool showWizardChecked, bool rename)
111
+{
112
+   std::string newDir;
113
+   std::string newPath;
114
+   ConfigFile config;
115
+
116
+   if (!FindSafeProfileDirName(newName, newDir))
117
        return false;
118
 
119
    if (create_new) {
120
@@ -279,6 +306,8 @@
121
    config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
122
    UpdateTitleBar();
123
 
124
+   Auth::Load();
125
+
126
    // Run auto configuration setup wizard when a new profile is made to assist
127
    // setting up blank settings
128
    if (create_new && showWizardChecked) {
129
@@ -295,6 +324,16 @@
130
    return true;
131
 }
132
 
133
+bool OBSBasic::NewProfile(const QString &name)
134
+{
135
+   return CreateProfile(name.toStdString(), true, false, false);
136
+}
137
+
138
+bool OBSBasic::DuplicateProfile(const QString &name)
139
+{
140
+   return CreateProfile(name.toStdString(), false, false, false);
141
+}
142
+
143
 void OBSBasic::DeleteProfile(const char *profileName, const char *profileDir)
144
 {
145
    char profilePath[512];
146
@@ -345,6 +384,36 @@
147
    blog(LOG_INFO, "------------------------------------------------");
148
 }
149
 
150
+void OBSBasic::DeleteProfile(const QString &profileName)
151
+{
152
+   std::string name = profileName.toStdString();
153
+   const char *curName =
154
+       config_get_string(App()->GlobalConfig(), "Basic", "Profile");
155
+
156
+   if (strcmp(curName, name.c_str()) == 0) {
157
+       on_actionRemoveProfile_triggered(true);
158
+       return;
159
+   }
160
+
161
+   const char *profileDir = nullptr;
162
+   if (!GetProfileDir(name.c_str(), profileDir)) {
163
+       blog(LOG_WARNING, "Profile '%s' not found", name.c_str());
164
+       return;
165
+   }
166
+
167
+   if (!profileDir) {
168
+       blog(LOG_WARNING, "Failed to get profile dir for profile '%s'",
169
+            name.c_str());
170
+       return;
171
+   }
172
+
173
+   DeleteProfile(name.c_str(), profileDir);
174
+   RefreshProfiles();
175
+   config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
176
+   if (api)
177
+       api->on_event(OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED);
178
+}
179
+
180
 void OBSBasic::RefreshProfiles()
181
 {
182
    QList<QAction *> menuActions = ui->profileMenu->actions();
183
@@ -435,7 +504,7 @@
184
    }
185
 }
186
 
187
-void OBSBasic::on_actionRemoveProfile_triggered()
188
+void OBSBasic::on_actionRemoveProfile_triggered(bool skipConfirmation)
189
 {
190
    std::string newName;
191
    std::string newPath;
192
@@ -462,13 +531,15 @@
193
    if (newPath.empty())
194
        return;
195
 
196
-   QString text = QTStr("ConfirmRemove.Text");
197
-   text.replace("$1", QT_UTF8(oldName.c_str()));
198
+   if (!skipConfirmation) {
199
+       QString text = QTStr("ConfirmRemove.Text");
200
+       text.replace("$1", QT_UTF8(oldName.c_str()));
201
 
202
-   QMessageBox::StandardButton button = OBSMessageBox::question(
203
-       this, QTStr("ConfirmRemove.Title"), text);
204
-   if (button == QMessageBox::No)
205
-       return;
206
+       QMessageBox::StandardButton button = OBSMessageBox::question(
207
+           this, QTStr("ConfirmRemove.Title"), text);
208
+       if (button == QMessageBox::No)
209
+           return;
210
+   }
211
 
212
    size_t newPath_len = newPath.size();
213
    newPath += "/basic.ini";
214
obs-studio-27.0.1.tar.xz/UI/window-basic-main-transitions.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-main-transitions.cpp Changed
32
 
1
@@ -388,6 +388,11 @@
2
    }
3
 
4
    OBSSource transition = obs_get_output_source(0);
5
+   if (!transition) {
6
+       if (usingPreviewProgram && sceneDuplicationMode)
7
+           obs_scene_release(scene);
8
+       return;
9
+   }
10
    obs_source_release(transition);
11
 
12
    float t = obs_transition_get_time(transition);
13
@@ -1791,7 +1796,8 @@
14
    return transitions;
15
 }
16
 
17
-void OBSBasic::LoadTransitions(obs_data_array_t *transitions)
18
+void OBSBasic::LoadTransitions(obs_data_array_t *transitions,
19
+                  obs_load_source_cb cb, void *private_data)
20
 {
21
    size_t count = obs_data_array_count(transitions);
22
 
23
@@ -1806,6 +1812,8 @@
24
        if (!obs_obj_invalid(source)) {
25
            InitTransition(source);
26
            AddTransitionBeforeSeparator(QT_UTF8(name), source);
27
+           if (cb)
28
+               cb(private_data, source);
29
        }
30
 
31
        obs_data_release(settings);
32
obs-studio-27.0.1.tar.xz/UI/window-basic-main.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-main.cpp Changed
970
 
1
@@ -16,6 +16,7 @@
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
+#include "ui-config.h"
6
 
7
 #include <cstddef>
8
 #include <ctime>
9
@@ -54,6 +55,11 @@
10
 #include "window-log-reply.hpp"
11
 #include "window-projector.hpp"
12
 #include "window-remux.hpp"
13
+#if YOUTUBE_ENABLED
14
+#include "auth-youtube.hpp"
15
+#include "window-youtube-actions.hpp"
16
+#include "youtube-api-wrappers.hpp"
17
+#endif
18
 #include "qt-wrappers.hpp"
19
 #include "context-bar-controls.hpp"
20
 #include "obs-proxy-style.hpp"
21
@@ -203,6 +209,9 @@
22
 
23
 extern void RegisterTwitchAuth();
24
 extern void RegisterRestreamAuth();
25
+#if YOUTUBE_ENABLED
26
+extern void RegisterYoutubeAuth();
27
+#endif
28
 
29
 OBSBasic::OBSBasic(QWidget *parent)
30
    : OBSMainWindow(parent), undo_s(ui), ui(new Ui::OBSBasic)
31
@@ -220,6 +229,9 @@
32
 #if RESTREAM_ENABLED
33
    RegisterRestreamAuth();
34
 #endif
35
+#if YOUTUBE_ENABLED
36
+   RegisterYoutubeAuth();
37
+#endif
38
 
39
    setAcceptDrops(true);
40
 
41
@@ -232,11 +244,7 @@
42
    ui->setupUi(this);
43
    ui->previewDisabledWidget->setVisible(false);
44
    ui->contextContainer->setStyle(new OBSProxyStyle);
45
-
46
-   /* XXX: Disable drag/drop on Linux until Qt issues are fixed */
47
-#if !defined(_WIN32) && !defined(__APPLE__)
48
-   ui->scenes->setDragDropMode(QAbstractItemView::NoDragDrop);
49
-#endif
50
+   ui->broadcastButton->setVisible(false);
51
 
52
    startingDockLayout = saveState();
53
 
54
@@ -264,6 +272,8 @@
55
        }
56
    }
57
 
58
+   qRegisterMetaType<int64_t>("int64_t");
59
+   qRegisterMetaType<uint32_t>("uint32_t");
60
    qRegisterMetaType<OBSScene>("OBSScene");
61
    qRegisterMetaType<OBSSceneItem>("OBSSceneItem");
62
    qRegisterMetaType<OBSSource>("OBSSource");
63
@@ -376,7 +386,7 @@
64
    // Register shortcuts for Undo/Redo
65
    ui->actionMainUndo->setShortcut(Qt::CTRL + Qt::Key_Z);
66
    QList<QKeySequence> shrt;
67
-   shrt << QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Z)
68
+   shrt << QKeySequence(Qt::CTRL | Qt::SHIFT + Qt::Key_Z)
69
         << QKeySequence(Qt::CTRL + Qt::Key_Y);
70
    ui->actionMainRedo->setShortcuts(shrt);
71
 
72
@@ -445,6 +455,11 @@
73
 
74
    connect(ui->scenes, SIGNAL(scenesReordered()), this,
75
        SLOT(ScenesReordered()));
76
+
77
+   connect(ui->broadcastButton, &QPushButton::clicked, this,
78
+       &OBSBasic::BroadcastButtonClicked);
79
+
80
+   UpdatePreviewSafeAreas();
81
 }
82
 
83
 static void SaveAudioDevice(const char *name, int channel, obs_data_t *parent,
84
@@ -900,6 +915,16 @@
85
    int child_indent = 1 + indent_count;
86
    obs_source_enum_filters(source, LogFilter,
87
                (void *)(intptr_t)child_indent);
88
+
89
+   obs_source_t *show_tn = obs_sceneitem_get_show_transition(item);
90
+   obs_source_t *hide_tn = obs_sceneitem_get_hide_transition(item);
91
+   if (show_tn)
92
+       blog(LOG_INFO, "    %s- show: '%s' (%s)", indent.c_str(),
93
+            obs_source_get_name(show_tn), obs_source_get_id(show_tn));
94
+   if (hide_tn)
95
+       blog(LOG_INFO, "    %s- hide: '%s' (%s)", indent.c_str(),
96
+            obs_source_get_name(hide_tn), obs_source_get_id(hide_tn));
97
+
98
    if (obs_sceneitem_is_group(item))
99
        obs_sceneitem_group_enum_items(item, LogSceneItem,
100
                           (void *)(intptr_t)child_indent);
101
@@ -1024,7 +1049,7 @@
102
    obs_load_sources(sources, cb, files);
103
 
104
    if (transitions)
105
-       LoadTransitions(transitions);
106
+       LoadTransitions(transitions, cb, files);
107
    if (sceneOrder)
108
        LoadSceneListOrder(sceneOrder);
109
 
110
@@ -1161,7 +1186,8 @@
111
 
112
    LogScenes();
113
 
114
-   if (obs_missing_files_count(files) > 0) {
115
+   if (obs_missing_files_count(files) > 0 &&
116
+       !App()->IsMissingFilesCheckDisabled()) {
117
        /* the window hasn't fully initialized by this point on macOS,
118
         * so put this at the end of the current task queue. Fixes a
119
         * bug where the window be behind OBS on startup */
120
@@ -1279,13 +1305,8 @@
121
    uint32_t cx = primaryScreen->size().width();
122
    uint32_t cy = primaryScreen->size().height();
123
 
124
-#ifdef SUPPORTS_FRACTIONAL_SCALING
125
    cx *= devicePixelRatioF();
126
    cy *= devicePixelRatioF();
127
-#elif
128
-   cx *= devicePixelRatio();
129
-   cy *= devicePixelRatio();
130
-#endif
131
 
132
    bool oldResolutionDefaults = config_get_bool(
133
        App()->GlobalConfig(), "General", "Pre19Defaults");
134
@@ -1352,6 +1373,17 @@
135
    }
136
 
137
    /* ----------------------------------------------------- */
138
+   /* enforce minimum retry delay of 1 second prior to 27.1 */
139
+   if (config_has_user_value(basicConfig, "Output", "RetryDelay")) {
140
+       int retryDelay =
141
+           config_get_uint(basicConfig, "Output", "RetryDelay");
142
+       if (retryDelay < 1) {
143
+           config_set_uint(basicConfig, "Output", "RetryDelay", 1);
144
+           changed = true;
145
+       }
146
+   }
147
+
148
+   /* ----------------------------------------------------- */
149
 
150
    if (changed)
151
        config_save_safe(basicConfig, "tmp", nullptr);
152
@@ -1623,6 +1655,8 @@
153
    }
154
    circle = gs_render_save();
155
 
156
+   InitSafeAreas(&actionSafeMargin, &graphicsSafeMargin,
157
+             &fourByThreeSafeMargin, &leftLine, &topLine, &rightLine);
158
    obs_leave_graphics();
159
 }
160
 
161
@@ -1715,15 +1749,15 @@
162
 
163
    const char *sceneCollection = config_get_string(
164
        App()->GlobalConfig(), "Basic", "SceneCollectionFile");
165
-   char savePath[512];
166
-   char fileName[512];
167
+   char savePath[1024];
168
+   char fileName[1024];
169
    int ret;
170
 
171
    if (!sceneCollection)
172
        throw "Failed to get scene collection name";
173
 
174
-   ret = snprintf(fileName, 512, "obs-studio/basic/scenes/%s.json",
175
-              sceneCollection);
176
+   ret = snprintf(fileName, sizeof(fileName),
177
+              "obs-studio/basic/scenes/%s.json", sceneCollection);
178
    if (ret <= 0)
179
        throw "Failed to create scene collection file name";
180
 
181
@@ -2036,6 +2070,12 @@
182
 #endif
183
 #endif
184
 
185
+#ifdef __APPLE__
186
+   /* Remove OBS' Fullscreen Interface menu in favor of the one macOS adds by default */
187
+   delete ui->actionFullscreenInterface;
188
+   ui->actionFullscreenInterface = nullptr;
189
+#endif
190
+
191
 #if defined(_WIN32) || defined(__APPLE__)
192
    if (App()->IsUpdaterDisabled())
193
        ui->actionCheckForUpdates->setEnabled(false);
194
@@ -2073,11 +2113,8 @@
195
    bool showLogViewerOnStartup = config_get_bool(
196
        App()->GlobalConfig(), "LogViewer", "ShowLogStartup");
197
 
198
-   if (showLogViewerOnStartup) {
199
-       if (!logView)
200
-           logView = new OBSLogViewer();
201
-       logView->show();
202
-   }
203
+   if (showLogViewerOnStartup)
204
+       on_actionViewCurrentLog_triggered();
205
 }
206
 
207
 void OBSBasic::DeferredSysTrayLoad(int requeueCount)
208
@@ -2562,7 +2599,6 @@
209
        updateCheckThread->wait();
210
 
211
    delete screenshotData;
212
-   delete logView;
213
    delete multiviewProjectorMenu;
214
    delete previewProjector;
215
    delete studioProgramProjector;
216
@@ -2624,6 +2660,12 @@
217
    gs_vertexbuffer_destroy(boxRight);
218
    gs_vertexbuffer_destroy(boxBottom);
219
    gs_vertexbuffer_destroy(circle);
220
+   gs_vertexbuffer_destroy(actionSafeMargin);
221
+   gs_vertexbuffer_destroy(graphicsSafeMargin);
222
+   gs_vertexbuffer_destroy(fourByThreeSafeMargin);
223
+   gs_vertexbuffer_destroy(leftLine);
224
+   gs_vertexbuffer_destroy(topLine);
225
+   gs_vertexbuffer_destroy(rightLine);
226
    obs_leave_graphics();
227
 
228
    /* When shutting down, sometimes source references can get in to the
229
@@ -2709,15 +2751,16 @@
230
 
231
    const char *sceneCollection = config_get_string(
232
        App()->GlobalConfig(), "Basic", "SceneCollectionFile");
233
-   char savePath[512];
234
-   char fileName[512];
235
+
236
+   char savePath[1024];
237
+   char fileName[1024];
238
    int ret;
239
 
240
    if (!sceneCollection)
241
        return;
242
 
243
-   ret = snprintf(fileName, 512, "obs-studio/basic/scenes/%s.json",
244
-              sceneCollection);
245
+   ret = snprintf(fileName, sizeof(fileName),
246
+              "obs-studio/basic/scenes/%s.json", sceneCollection);
247
    if (ret <= 0)
248
        return;
249
 
250
@@ -3103,6 +3146,20 @@
251
            ui->emptySpace->layout()->addWidget(c);
252
        }
253
 
254
+       QIcon icon;
255
+
256
+       if (strcmp(id, "scene") == 0)
257
+           icon = GetSceneIcon();
258
+       else if (strcmp(id, "group") == 0)
259
+           icon = GetGroupIcon();
260
+       else
261
+           icon = GetSourceIcon(id);
262
+
263
+       QPixmap pixmap = icon.pixmap(QSize(16, 16));
264
+       ui->contextSourceIcon->setPixmap(pixmap);
265
+       ui->contextSourceIconSpacer->hide();
266
+       ui->contextSourceIcon->show();
267
+
268
        const char *name = obs_source_get_name(source);
269
        ui->contextSourceLabel->setText(name);
270
 
271
@@ -3110,6 +3167,8 @@
272
        ui->sourcePropertiesButton->setEnabled(
273
            obs_source_configurable(source));
274
    } else {
275
+       ui->contextSourceIcon->hide();
276
+       ui->contextSourceIconSpacer->show();
277
        ui->contextSourceLabel->setText(
278
            QTStr("ContextBar.NoSelectedSource"));
279
 
280
@@ -3733,6 +3792,24 @@
281
    obs_data_array_push_back(array, scene_data);
282
    obs_data_release(scene_data);
283
 
284
+   /* ----------------------------------------------- */
285
+   /* save all scenes and groups the scene is used in */
286
+
287
+   for (int i = 0; i < ui->scenes->count(); i++) {
288
+       QListWidgetItem *widget_item = ui->scenes->item(i);
289
+       auto item_scene = GetOBSRef<OBSScene>(widget_item);
290
+       if (scene == item_scene)
291
+           continue;
292
+       auto *item = obs_scene_find_source_recursive(
293
+           item_scene, obs_source_get_name(source));
294
+       if (item) {
295
+           scene_data = obs_save_source(obs_scene_get_source(
296
+               obs_sceneitem_get_scene(item)));
297
+           obs_data_array_push_back(array, scene_data);
298
+           obs_data_release(scene_data);
299
+       }
300
+   }
301
+
302
    /* --------------------------- */
303
    /* undo/redo                   */
304
 
305
@@ -3808,16 +3885,6 @@
306
        api->on_event(OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED);
307
 }
308
 
309
-void OBSBasic::RemoveSelectedSceneItem()
310
-{
311
-   OBSSceneItem item = GetCurrentSceneItem();
312
-   if (item) {
313
-       obs_source_t *source = obs_sceneitem_get_source(item);
314
-       if (QueryRemoveSource(source))
315
-           obs_sceneitem_remove(item);
316
-   }
317
-}
318
-
319
 void OBSBasic::ReorderSources(OBSScene scene)
320
 {
321
    if (scene != GetCurrentScene() || ui->sources->IgnoreReorder())
322
@@ -4029,6 +4096,19 @@
323
 
324
    window->ui->preview->DrawSceneEditing();
325
 
326
+   uint32_t targetCX = window->previewCX;
327
+   uint32_t targetCY = window->previewCY;
328
+
329
+   if (window->drawSafeAreas) {
330
+       RenderSafeAreas(window->actionSafeMargin, targetCX, targetCY);
331
+       RenderSafeAreas(window->graphicsSafeMargin, targetCX, targetCY);
332
+       RenderSafeAreas(window->fourByThreeSafeMargin, targetCX,
333
+               targetCY);
334
+       RenderSafeAreas(window->leftLine, targetCX, targetCY);
335
+       RenderSafeAreas(window->topLine, targetCX, targetCY);
336
+       RenderSafeAreas(window->rightLine, targetCX, targetCY);
337
+   }
338
+
339
    /* --------------------------------------- */
340
 
341
    gs_projection_pop();
342
@@ -4437,6 +4517,15 @@
343
        return;
344
    }
345
 
346
+#if YOUTUBE_ENABLED
347
+   /* Also don't close the window if the youtube stream check is active */
348
+   if (youtubeStreamCheckThread) {
349
+       QTimer::singleShot(1000, this, SLOT(close()));
350
+       event->ignore();
351
+       return;
352
+   }
353
+#endif
354
+
355
    if (isVisible())
356
        config_set_string(App()->GlobalConfig(), "BasicWindow",
357
                  "geometry",
358
@@ -4495,15 +4584,15 @@
359
    ClearExtraBrowserDocks();
360
 #endif
361
 
362
-   if (api)
363
-       api->on_event(OBS_FRONTEND_EVENT_EXIT);
364
-
365
    disableSaving++;
366
 
367
    /* Clear all scene data (dialogs, widgets, widget sub-items, scenes,
368
     * sources, etc) so that all references are released before shutdown */
369
    ClearSceneData();
370
 
371
+   if (api)
372
+       api->on_event(OBS_FRONTEND_EVENT_EXIT);
373
+
374
    App()->quit();
375
 }
376
 
377
@@ -4607,6 +4696,47 @@
378
    }
379
 }
380
 
381
+static inline void AddMissingFiles(void *data, obs_source_t *source)
382
+{
383
+   obs_missing_files_t *f = (obs_missing_files_t *)data;
384
+   obs_missing_files_t *sf = obs_source_get_missing_files(source);
385
+
386
+   obs_missing_files_append(f, sf);
387
+   obs_missing_files_destroy(sf);
388
+}
389
+
390
+void OBSBasic::on_actionShowMissingFiles_triggered()
391
+{
392
+   obs_missing_files_t *files = obs_missing_files_create();
393
+
394
+   auto cb_sources = [](void *data, obs_source_t *source) {
395
+       AddMissingFiles(data, source);
396
+       return true;
397
+   };
398
+   obs_enum_sources(cb_sources, files);
399
+
400
+   auto cb_transitions = [](void *data, obs_source_t *source) {
401
+       if (obs_source_get_type(source) != OBS_SOURCE_TYPE_TRANSITION)
402
+           return true;
403
+
404
+       AddMissingFiles(data, source);
405
+       return true;
406
+   };
407
+   obs_enum_all_sources(cb_transitions, files);
408
+
409
+   if (obs_missing_files_count(files) > 0) {
410
+       missDialog = new OBSMissingFiles(files, this);
411
+       missDialog->setAttribute(Qt::WA_DeleteOnClose, true);
412
+       missDialog->show();
413
+       missDialog->raise();
414
+   } else {
415
+       obs_missing_files_destroy(files);
416
+       OBSMessageBox::information(
417
+           this, QTStr("MissingFiles.NoMissing.Title"),
418
+           QTStr("MissingFiles.NoMissing.Text"));
419
+   }
420
+}
421
+
422
 void save_audio_source(int channel, obs_data_t *save)
423
 {
424
    obs_source_t *source = obs_get_output_source(channel);
425
@@ -4718,6 +4848,7 @@
426
    for (int i = 0; i < screens.size(); i++) {
427
        QScreen *screen = screens[i];
428
        QRect screenGeometry = screen->geometry();
429
+       qreal ratio = screen->devicePixelRatio();
430
        QString name = "";
431
 #ifdef _WIN32
432
        QTextStream fullname(&name);
433
@@ -4743,8 +4874,10 @@
434
        QString str =
435
            QString("%1: %2x%3 @ %4,%5")
436
                .arg(name,
437
-                    QString::number(screenGeometry.width()),
438
-                    QString::number(screenGeometry.height()),
439
+                    QString::number(screenGeometry.width() *
440
+                            ratio),
441
+                    QString::number(screenGeometry.height() *
442
+                            ratio),
443
                     QString::number(screenGeometry.x()),
444
                     QString::number(screenGeometry.y()));
445
 
446
@@ -5810,15 +5943,12 @@
447
    if (!logView)
448
        logView = new OBSLogViewer();
449
 
450
-   if (!logView->isVisible()) {
451
-       logView->setVisible(true);
452
-   } else {
453
-       logView->setWindowState(
454
-           (logView->windowState() & ~Qt::WindowMinimized) |
455
-           Qt::WindowActive);
456
-       logView->activateWindow();
457
-       logView->raise();
458
-   }
459
+   logView->show();
460
+   logView->setWindowState(
461
+       (logView->windowState() & ~Qt::WindowMinimized) |
462
+       Qt::WindowActive);
463
+   logView->activateWindow();
464
+   logView->raise();
465
 }
466
 
467
 void OBSBasic::on_actionShowCrashLogs_triggered()
468
@@ -5957,14 +6087,24 @@
469
    UNUSED_PARAMETER(endHint);
470
 }
471
 
472
-void OBSBasic::OpenFilters()
473
+void OBSBasic::OpenFilters(OBSSource source)
474
 {
475
-   OBSSceneItem item = GetCurrentSceneItem();
476
-   OBSSource source = obs_sceneitem_get_source(item);
477
-
478
+   if (source == nullptr) {
479
+       OBSSceneItem item = GetCurrentSceneItem();
480
+       source = obs_sceneitem_get_source(item);
481
+   }
482
    CreateFiltersWindow(source);
483
 }
484
 
485
+void OBSBasic::OpenProperties(OBSSource source)
486
+{
487
+   if (source == nullptr) {
488
+       OBSSceneItem item = GetCurrentSceneItem();
489
+       source = obs_sceneitem_get_source(item);
490
+   }
491
+   CreatePropertiesWindow(source);
492
+}
493
+
494
 void OBSBasic::OpenSceneFilters()
495
 {
496
    OBSScene scene = GetCurrentScene();
497
@@ -6007,6 +6147,115 @@
498
    QMessageBox::critical(this, QTStr("Output.StartStreamFailed"), message);
499
 }
500
 
501
+#if YOUTUBE_ENABLED
502
+void OBSBasic::YouTubeActionDialogOk(const QString &id, const QString &key,
503
+                    bool autostart, bool autostop,
504
+                    bool start_now)
505
+{
506
+   //blog(LOG_DEBUG, "Stream key: %s", QT_TO_UTF8(key));
507
+   obs_service_t *service_obj = GetService();
508
+   obs_data_t *settings = obs_service_get_settings(service_obj);
509
+
510
+   const std::string a_key = QT_TO_UTF8(key);
511
+   obs_data_set_string(settings, "key", a_key.c_str());
512
+
513
+   const std::string an_id = QT_TO_UTF8(id);
514
+   obs_data_set_string(settings, "stream_id", an_id.c_str());
515
+
516
+   obs_service_update(service_obj, settings);
517
+   autoStartBroadcast = autostart;
518
+   autoStopBroadcast = autostop;
519
+   broadcastReady = true;
520
+
521
+   obs_data_release(settings);
522
+
523
+   if (start_now)
524
+       QMetaObject::invokeMethod(this, "StartStreaming");
525
+}
526
+
527
+void OBSBasic::YoutubeStreamCheck(const std::string &key)
528
+{
529
+   YoutubeApiWrappers *apiYouTube(
530
+       dynamic_cast<YoutubeApiWrappers *>(GetAuth()));
531
+   if (!apiYouTube) {
532
+       /* technically we should never get here -Jim */
533
+       QMetaObject::invokeMethod(this, "ForceStopStreaming",
534
+                     Qt::QueuedConnection);
535
+       youtubeStreamCheckThread->deleteLater();
536
+       blog(LOG_ERROR, "==========================================");
537
+       blog(LOG_ERROR, "%s: Uh, hey, we got here", __FUNCTION__);
538
+       blog(LOG_ERROR, "==========================================");
539
+       return;
540
+   }
541
+
542
+   int timeout = 0;
543
+   json11::Json json;
544
+   QString id = key.c_str();
545
+
546
+   while (StreamingActive()) {
547
+       if (timeout == 14) {
548
+           QMetaObject::invokeMethod(this, "ForceStopStreaming",
549
+                         Qt::QueuedConnection);
550
+           break;
551
+       }
552
+
553
+       if (!apiYouTube->FindStream(id, json)) {
554
+           QMetaObject::invokeMethod(this,
555
+                         "DisplayStreamStartError",
556
+                         Qt::QueuedConnection);
557
+           QMetaObject::invokeMethod(this, "StopStreaming",
558
+                         Qt::QueuedConnection);
559
+           break;
560
+       }
561
+
562
+       auto item = json["items"][0];
563
+       auto status = item["status"]["streamStatus"].string_value();
564
+       if (status == "active") {
565
+           QMetaObject::invokeMethod(ui->broadcastButton,
566
+                         "setEnabled",
567
+                         Q_ARG(bool, true));
568
+           break;
569
+       } else {
570
+           QThread::sleep(1);
571
+           timeout++;
572
+       }
573
+   }
574
+
575
+   youtubeStreamCheckThread->deleteLater();
576
+}
577
+
578
+void OBSBasic::ShowYouTubeAutoStartWarning()
579
+{
580
+   auto msgBox = []() {
581
+       QMessageBox msgbox(App()->GetMainWindow());
582
+       msgbox.setWindowTitle(QTStr(
583
+           "YouTube.Actions.AutoStartStreamingWarning.Title"));
584
+       msgbox.setText(
585
+           QTStr("YouTube.Actions.AutoStartStreamingWarning"));
586
+       msgbox.setIcon(QMessageBox::Icon::Information);
587
+       msgbox.addButton(QMessageBox::Ok);
588
+
589
+       QCheckBox *cb = new QCheckBox(QTStr("DoNotShowAgain"));
590
+       msgbox.setCheckBox(cb);
591
+
592
+       msgbox.exec();
593
+
594
+       if (cb->isChecked()) {
595
+           config_set_bool(App()->GlobalConfig(), "General",
596
+                   "WarnedAboutYouTubeAutoStart", true);
597
+           config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
598
+       }
599
+   };
600
+
601
+   bool warned = config_get_bool(App()->GlobalConfig(), "General",
602
+                     "WarnedAboutYouTubeAutoStart");
603
+   if (!warned) {
604
+       QMetaObject::invokeMethod(App(), "Exec", Qt::QueuedConnection,
605
+                     Q_ARG(VoidFunc, msgBox));
606
+   }
607
+}
608
+#endif
609
+
610
 void OBSBasic::StartStreaming()
611
 {
612
    if (outputHandler->StreamingActive())
613
@@ -6014,6 +6263,30 @@
614
    if (disableOutputsRef)
615
        return;
616
 
617
+   if (auth && auth->broadcastFlow()) {
618
+       if (!broadcastActive && !broadcastReady) {
619
+           ui->streamButton->setChecked(false);
620
+
621
+           QMessageBox no_broadcast(this);
622
+           no_broadcast.setText(QTStr("Output.NoBroadcast.Text"));
623
+           QPushButton *SetupBroadcast = no_broadcast.addButton(
624
+               QTStr("Basic.Main.SetupBroadcast"),
625
+               QMessageBox::YesRole);
626
+           no_broadcast.setDefaultButton(SetupBroadcast);
627
+           no_broadcast.addButton(QTStr("Close"),
628
+                          QMessageBox::NoRole);
629
+           no_broadcast.setIcon(QMessageBox::Information);
630
+           no_broadcast.setWindowTitle(
631
+               QTStr("Output.NoBroadcast.Title"));
632
+           no_broadcast.exec();
633
+
634
+           if (no_broadcast.clickedButton() == SetupBroadcast)
635
+               QMetaObject::invokeMethod(this,
636
+                             "SetupBroadcast");
637
+           return;
638
+       }
639
+   }
640
+
641
    if (!outputHandler->SetupStreaming(service)) {
642
        DisplayStreamStartError();
643
        return;
644
@@ -6027,6 +6300,7 @@
645
    ui->streamButton->setEnabled(false);
646
    ui->streamButton->setChecked(false);
647
    ui->streamButton->setText(QTStr("Basic.Main.Connecting"));
648
+   ui->broadcastButton->setChecked(false);
649
 
650
    if (sysTrayStream) {
651
        sysTrayStream->setEnabled(false);
652
@@ -6038,6 +6312,24 @@
653
        return;
654
    }
655
 
656
+   if (!autoStartBroadcast) {
657
+       ui->broadcastButton->setText(
658
+           QTStr("Basic.Main.StartBroadcast"));
659
+       ui->broadcastButton->setProperty("broadcastState", "ready");
660
+       ui->broadcastButton->style()->unpolish(ui->broadcastButton);
661
+       ui->broadcastButton->style()->polish(ui->broadcastButton);
662
+       // well, we need to disable button while stream is not active
663
+       ui->broadcastButton->setEnabled(false);
664
+   } else if (!autoStopBroadcast) {
665
+       broadcastActive = true;
666
+       ui->broadcastButton->setText(QTStr("Basic.Main.StopBroadcast"));
667
+       ui->broadcastButton->setProperty("broadcastState", "active");
668
+       ui->broadcastButton->style()->unpolish(ui->broadcastButton);
669
+       ui->broadcastButton->style()->polish(ui->broadcastButton);
670
+   } else {
671
+       ui->broadcastButton->setEnabled(false);
672
+   }
673
+
674
    bool recordWhenStreaming = config_get_bool(
675
        GetGlobalConfig(), "BasicWindow", "RecordWhenStreaming");
676
    if (recordWhenStreaming)
677
@@ -6047,6 +6339,106 @@
678
        GetGlobalConfig(), "BasicWindow", "ReplayBufferWhileStreaming");
679
    if (replayBufferWhileStreaming)
680
        StartReplayBuffer();
681
+
682
+#if YOUTUBE_ENABLED
683
+   if (!autoStartBroadcast)
684
+       OBSBasic::ShowYouTubeAutoStartWarning();
685
+#endif
686
+}
687
+
688
+void OBSBasic::BroadcastButtonClicked()
689
+{
690
+   if (!broadcastReady ||
691
+       !broadcastActive && !outputHandler->StreamingActive()) {
692
+       SetupBroadcast();
693
+       if (broadcastReady)
694
+           ui->broadcastButton->setChecked(true);
695
+       return;
696
+   }
697
+
698
+   if (!autoStartBroadcast) {
699
+#if YOUTUBE_ENABLED
700
+       std::shared_ptr<YoutubeApiWrappers> ytAuth =
701
+           dynamic_pointer_cast<YoutubeApiWrappers>(auth);
702
+       if (ytAuth.get()) {
703
+           ytAuth->StartLatestBroadcast();
704
+       }
705
+#endif
706
+       broadcastActive = true;
707
+       autoStartBroadcast = true; // and clear the flag
708
+
709
+       if (!autoStopBroadcast) {
710
+           ui->broadcastButton->setText(
711
+               QTStr("Basic.Main.StopBroadcast"));
712
+       } else {
713
+           ui->broadcastButton->setText(
714
+               QTStr("Basic.Main.AutoStopEnabled"));
715
+           ui->broadcastButton->setEnabled(false);
716
+       }
717
+
718
+       ui->broadcastButton->setProperty("broadcastState", "active");
719
+       ui->broadcastButton->style()->unpolish(ui->broadcastButton);
720
+       ui->broadcastButton->style()->polish(ui->broadcastButton);
721
+   } else if (!autoStopBroadcast) {
722
+#if YOUTUBE_ENABLED
723
+       bool confirm = config_get_bool(GetGlobalConfig(), "BasicWindow",
724
+                          "WarnBeforeStoppingStream");
725
+       if (confirm && isVisible()) {
726
+           QMessageBox::StandardButton button = OBSMessageBox::question(
727
+               this, QTStr("ConfirmStop.Title"),
728
+               QTStr("YouTube.Actions.AutoStopStreamingWarning"),
729
+               QMessageBox::Yes | QMessageBox::No,
730
+               QMessageBox::No);
731
+
732
+           if (button == QMessageBox::No) {
733
+               ui->broadcastButton->setChecked(true);
734
+               return;
735
+           }
736
+       }
737
+
738
+       std::shared_ptr<YoutubeApiWrappers> ytAuth =
739
+           dynamic_pointer_cast<YoutubeApiWrappers>(auth);
740
+       if (ytAuth.get()) {
741
+           ytAuth->StopLatestBroadcast();
742
+       }
743
+#endif
744
+       broadcastActive = false;
745
+       broadcastReady = false;
746
+
747
+       autoStopBroadcast = true;
748
+       QMetaObject::invokeMethod(this, "StopStreaming");
749
+       SetBroadcastFlowEnabled(true);
750
+   }
751
+}
752
+
753
+void OBSBasic::SetBroadcastFlowEnabled(bool enabled)
754
+{
755
+   ui->broadcastButton->setEnabled(enabled);
756
+   ui->broadcastButton->setVisible(enabled);
757
+   ui->broadcastButton->setChecked(broadcastReady);
758
+   ui->broadcastButton->setProperty("broadcastState", "idle");
759
+   ui->broadcastButton->style()->unpolish(ui->broadcastButton);
760
+   ui->broadcastButton->style()->polish(ui->broadcastButton);
761
+   ui->broadcastButton->setText(QTStr("Basic.Main.SetupBroadcast"));
762
+}
763
+
764
+void OBSBasic::SetupBroadcast()
765
+{
766
+   Auth *auth = GetAuth();
767
+#if YOUTUBE_ENABLED
768
+   if (IsYouTubeService(auth->service())) {
769
+       OBSYoutubeActions *dialog;
770
+       dialog = new OBSYoutubeActions(this, auth, broadcastReady);
771
+       connect(dialog, &OBSYoutubeActions::ok, this,
772
+           &OBSBasic::YouTubeActionDialogOk);
773
+       int result = dialog->Valid() ? dialog->exec()
774
+                        : QDialog::Rejected;
775
+       if (result != QDialog::Accepted) {
776
+           if (!broadcastReady)
777
+               ui->broadcastButton->setChecked(false);
778
+       }
779
+   }
780
+#endif
781
 }
782
 
783
 #ifdef _WIN32
784
@@ -6155,6 +6547,20 @@
785
    if (outputHandler->StreamingActive())
786
        outputHandler->StopStreaming(streamingStopping);
787
 
788
+   // special case: force reset broadcast state if
789
+   // no autostart and no autostop selected
790
+   if (!autoStartBroadcast && !broadcastActive) {
791
+       broadcastActive = false;
792
+       autoStartBroadcast = true;
793
+       autoStopBroadcast = true;
794
+       broadcastReady = false;
795
+   }
796
+
797
+   if (autoStopBroadcast) {
798
+       broadcastActive = false;
799
+       broadcastReady = false;
800
+   }
801
+
802
    OnDeactivate();
803
 
804
    bool recordWhenStreaming = config_get_bool(
805
@@ -6181,6 +6587,20 @@
806
    if (outputHandler->StreamingActive())
807
        outputHandler->StopStreaming(true);
808
 
809
+   // special case: force reset broadcast state if
810
+   // no autostart and no autostop selected
811
+   if (!autoStartBroadcast && !broadcastActive) {
812
+       broadcastActive = false;
813
+       autoStartBroadcast = true;
814
+       autoStopBroadcast = true;
815
+       broadcastReady = false;
816
+   }
817
+
818
+   if (autoStopBroadcast) {
819
+       broadcastActive = false;
820
+       broadcastReady = false;
821
+   }
822
+
823
    OnDeactivate();
824
 
825
    bool recordWhenStreaming = config_get_bool(
826
@@ -6265,6 +6685,22 @@
827
        sysTrayStream->setEnabled(true);
828
    }
829
 
830
+#if YOUTUBE_ENABLED
831
+   if (!autoStartBroadcast) {
832
+       // get a current stream key
833
+       obs_service_t *service_obj = GetService();
834
+       obs_data_t *settings = obs_service_get_settings(service_obj);
835
+       std::string key = obs_data_get_string(settings, "stream_id");
836
+       if (!key.empty() && !youtubeStreamCheckThread) {
837
+           youtubeStreamCheckThread = CreateQThread(
838
+               [this, key] { YoutubeStreamCheck(key); });
839
+           youtubeStreamCheckThread->setObjectName(
840
+               "YouTubeStreamCheckThread");
841
+           youtubeStreamCheckThread->start();
842
+       }
843
+   }
844
+#endif
845
+
846
    if (api)
847
        api->on_event(OBS_FRONTEND_EVENT_STREAMING_STARTED);
848
 
849
@@ -6368,9 +6804,13 @@
850
        startStreamMenu->deleteLater();
851
        startStreamMenu = nullptr;
852
    }
853
+
854
+   // Reset broadcast button state/text
855
+   if (!broadcastActive)
856
+       SetBroadcastFlowEnabled(auth && auth->broadcastFlow());
857
 }
858
 
859
-void OBSBasic::AutoRemux()
860
+void OBSBasic::AutoRemux(QString input)
861
 {
862
    bool autoRemux = config_get_bool(Config(), "Video", "AutoRemux");
863
 
864
@@ -6384,7 +6824,6 @@
865
    if (ffmpegOutput)
866
        return;
867
 
868
-   QString input = outputHandler->lastRecordingPath.c_str();
869
    if (input.isEmpty())
870
        return;
871
 
872
@@ -6546,7 +6985,7 @@
873
    if (diskFullTimer->isActive())
874
        diskFullTimer->stop();
875
 
876
-   AutoRemux();
877
+   AutoRemux(outputHandler->lastRecordingPath.c_str());
878
 
879
    OnDeactivate();
880
    UpdatePause(false);
881
@@ -6696,6 +7135,8 @@
882
 
883
    if (api)
884
        api->on_event(OBS_FRONTEND_EVENT_REPLAY_BUFFER_SAVED);
885
+
886
+   AutoRemux(path);
887
 }
888
 
889
 void OBSBasic::ReplayBufferStop(int code)
890
@@ -6815,6 +7256,23 @@
891
        bool confirm = config_get_bool(GetGlobalConfig(), "BasicWindow",
892
                           "WarnBeforeStoppingStream");
893
 
894
+#if YOUTUBE_ENABLED
895
+       if (isVisible() && auth && IsYouTubeService(auth->service()) &&
896
+           autoStopBroadcast) {
897
+           QMessageBox::StandardButton button = OBSMessageBox::question(
898
+               this, QTStr("ConfirmStop.Title"),
899
+               QTStr("YouTube.Actions.AutoStopStreamingWarning"),
900
+               QMessageBox::Yes | QMessageBox::No,
901
+               QMessageBox::No);
902
+
903
+           if (button == QMessageBox::No) {
904
+               ui->streamButton->setChecked(true);
905
+               return;
906
+           }
907
+
908
+           confirm = false;
909
+       }
910
+#endif
911
        if (confirm && isVisible()) {
912
            QMessageBox::StandardButton button =
913
                OBSMessageBox::question(
914
@@ -6836,8 +7294,13 @@
915
            return;
916
        }
917
 
918
+       Auth *auth = GetAuth();
919
+
920
        auto action =
921
-           UIValidation::StreamSettingsConfirmation(this, service);
922
+           (auth && auth->external())
923
+               ? StreamSettingsAction::ContinueStream
924
+               : UIValidation::StreamSettingsConfirmation(
925
+                     this, service);
926
        switch (action) {
927
        case StreamSettingsAction::ContinueStream:
928
            break;
929
@@ -6860,6 +7323,10 @@
930
                obs_service_get_settings(service);
931
            bwtest = obs_data_get_bool(settings, "bwtest");
932
            obs_data_release(settings);
933
+           // Disable confirmation if this is going to open broadcast setup
934
+           if (auth && auth->broadcastFlow() && !broadcastReady &&
935
+               !broadcastActive)
936
+               confirm = false;
937
        }
938
 
939
        if (bwtest && isVisible()) {
940
@@ -8967,7 +9434,8 @@
941
 
942
 void OBSBasic::PauseRecording()
943
 {
944
-   if (!pause || !outputHandler || !outputHandler->fileOutput)
945
+   if (!pause || !outputHandler || !outputHandler->fileOutput ||
946
+       os_atomic_load_bool(&recording_paused))
947
        return;
948
 
949
    obs_output_t *output = outputHandler->fileOutput;
950
@@ -9006,7 +9474,8 @@
951
 
952
 void OBSBasic::UnpauseRecording()
953
 {
954
-   if (!pause || !outputHandler || !outputHandler->fileOutput)
955
+   if (!pause || !outputHandler || !outputHandler->fileOutput ||
956
+       !os_atomic_load_bool(&recording_paused))
957
        return;
958
 
959
    obs_output_t *output = outputHandler->fileOutput;
960
@@ -9283,3 +9752,9 @@
961
    ui->statusbar->clearMessage();
962
    ui->statusbar->showMessage(message, 10000);
963
 }
964
+
965
+void OBSBasic::UpdatePreviewSafeAreas()
966
+{
967
+   drawSafeAreas = config_get_bool(App()->GlobalConfig(), "BasicWindow",
968
+                   "ShowSafeAreas");
969
+}
970
obs-studio-27.0.1.tar.xz/UI/window-basic-main.hpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-main.hpp Changed
148
 
1
@@ -19,6 +19,7 @@
2
 
3
 #include <QBuffer>
4
 #include <QAction>
5
+#include <QThread>
6
 #include <QWidgetAction>
7
 #include <QSystemTrayIcon>
8
 #include <QStyledItemDelegate>
9
@@ -169,6 +170,7 @@
10
    friend class DeviceCaptureToolbar;
11
    friend class DeviceToolbarPropertiesThread;
12
    friend class OBSBasicSourceSelect;
13
+   friend class OBSYoutubeActions;
14
    friend struct BasicOutputHandler;
15
    friend struct OBSStudioAPI;
16
 
17
@@ -218,8 +220,7 @@
18
    QPointer<QDockWidget> statsDock;
19
    QPointer<OBSAbout> about;
20
    QPointer<OBSMissingFiles> missDialog;
21
-
22
-   OBSLogViewer *logView = nullptr;
23
+   QPointer<OBSLogViewer> logView;
24
 
25
    QPointer<QTimer> cpuUsageTimer;
26
    QPointer<QTimer> diskFullTimer;
27
@@ -242,6 +243,13 @@
28
    gs_vertbuffer_t *boxBottom = nullptr;
29
    gs_vertbuffer_t *circle = nullptr;
30
 
31
+   gs_vertbuffer_t *actionSafeMargin = nullptr;
32
+   gs_vertbuffer_t *graphicsSafeMargin = nullptr;
33
+   gs_vertbuffer_t *fourByThreeSafeMargin = nullptr;
34
+   gs_vertbuffer_t *leftLine = nullptr;
35
+   gs_vertbuffer_t *topLine = nullptr;
36
+   gs_vertbuffer_t *rightLine = nullptr;
37
+
38
    int previewX = 0, previewY = 0;
39
    int previewCX = 0, previewCY = 0;
40
    float previewScale = 0.0f;
41
@@ -380,6 +388,8 @@
42
    void ResetProfileData();
43
    bool AddProfile(bool create_new, const char *title, const char *text,
44
            const char *init_text = nullptr, bool rename = false);
45
+   bool CreateProfile(const std::string &newName, bool create_new,
46
+              bool showWizardChecked, bool rename = false);
47
    void DeleteProfile(const char *profile_name, const char *profile_dir);
48
    void RefreshProfiles();
49
    void ChangeProfile();
50
@@ -401,7 +411,8 @@
51
    obs_source_t *FindTransition(const char *name);
52
    OBSSource GetCurrentTransition();
53
    obs_data_array_t *SaveTransitions();
54
-   void LoadTransitions(obs_data_array_t *transitions);
55
+   void LoadTransitions(obs_data_array_t *transitions,
56
+                obs_load_source_cb cb, void *private_data);
57
 
58
    obs_source_t *fadeTransition;
59
    obs_source_t *cutTransition;
60
@@ -554,12 +565,32 @@
61
    void MoveSceneItem(enum obs_order_movement movement,
62
               const QString &action_name);
63
 
64
+   bool autoStartBroadcast = true;
65
+   bool autoStopBroadcast = true;
66
+   bool broadcastActive = false;
67
+   bool broadcastReady = false;
68
+   QPointer<QThread> youtubeStreamCheckThread;
69
+#if YOUTUBE_ENABLED
70
+   void YoutubeStreamCheck(const std::string &key);
71
+   void ShowYouTubeAutoStartWarning();
72
+   void YouTubeActionDialogOk(const QString &id, const QString &key,
73
+                  bool autostart, bool autostop,
74
+                  bool start_now);
75
+#endif
76
+   void BroadcastButtonClicked();
77
+   void SetBroadcastFlowEnabled(bool enabled);
78
+
79
+   void UpdatePreviewSafeAreas();
80
+   bool drawSafeAreas = false;
81
+
82
 public slots:
83
    void DeferSaveBegin();
84
    void DeferSaveEnd();
85
 
86
    void DisplayStreamStartError();
87
 
88
+   void SetupBroadcast();
89
+
90
    void StartStreaming();
91
    void StopStreaming();
92
    void ForceStopStreaming();
93
@@ -609,6 +640,10 @@
94
    bool AddSceneCollection(bool create_new,
95
                const QString &name = QString());
96
 
97
+   bool NewProfile(const QString &name);
98
+   bool DuplicateProfile(const QString &name);
99
+   void DeleteProfile(const QString &profileName);
100
+
101
    void UpdatePatronJson(const QString &text, const QString &error);
102
 
103
    void ShowContextBar();
104
@@ -631,7 +666,6 @@
105
 
106
    void DuplicateSelectedScene();
107
    void RemoveSelectedScene();
108
-   void RemoveSelectedSceneItem();
109
 
110
    void ToggleAlwaysOnTop();
111
 
112
@@ -739,7 +773,7 @@
113
 
114
    static void HotkeyTriggered(void *data, obs_hotkey_id id, bool pressed);
115
 
116
-   void AutoRemux();
117
+   void AutoRemux(QString input);
118
 
119
    void UpdatePause(bool activate = true);
120
    void UpdateReplayBuffer(bool activate = true);
121
@@ -889,6 +923,7 @@
122
    void on_actionShow_Recordings_triggered();
123
    void on_actionRemux_triggered();
124
    void on_action_Settings_triggered();
125
+   void on_actionShowMissingFiles_triggered();
126
    void on_actionAdvAudioProperties_triggered();
127
    void AdvAudioPropsClicked();
128
    void AdvAudioPropsDestroyed();
129
@@ -973,7 +1008,7 @@
130
    void on_actionNewProfile_triggered();
131
    void on_actionDupProfile_triggered();
132
    void on_actionRenameProfile_triggered();
133
-   void on_actionRemoveProfile_triggered();
134
+   void on_actionRemoveProfile_triggered(bool skipConfirmation = false);
135
    void on_actionImportProfile_triggered();
136
    void on_actionExportProfile_triggered();
137
 
138
@@ -1029,7 +1064,8 @@
139
                 QAbstractItemDelegate::EndEditHint endHint);
140
 
141
    void OpenSceneFilters();
142
-   void OpenFilters();
143
+   void OpenFilters(OBSSource source = nullptr);
144
+   void OpenProperties(OBSSource source = nullptr);
145
 
146
    void EnablePreviewDisplay(bool enable);
147
    void TogglePreview();
148
obs-studio-27.0.1.tar.xz/UI/window-basic-preview.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-preview.cpp Changed
59
 
1
@@ -13,9 +13,6 @@
2
 
3
 #define HANDLE_RADIUS 4.0f
4
 #define HANDLE_SEL_RADIUS (HANDLE_RADIUS * 1.5f)
5
-#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0)
6
-#define SUPPORTS_FRACTIONAL_SCALING
7
-#endif
8
 
9
 /* TODO: make C++ math classes and clean up code here later */
10
 
11
@@ -44,11 +41,7 @@
12
 vec2 OBSBasicPreview::GetMouseEventPos(QMouseEvent *event)
13
 {
14
    OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
15
-#ifdef SUPPORTS_FRACTIONAL_SCALING
16
    float pixelRatio = main->devicePixelRatioF();
17
-#else
18
-   float pixelRatio = main->devicePixelRatio();
19
-#endif
20
    float scale = pixelRatio / main->previewScale;
21
    vec2 pos;
22
    vec2_set(&pos,
23
@@ -406,11 +399,7 @@
24
    if (!scene)
25
        return;
26
 
27
-#ifdef SUPPORTS_FRACTIONAL_SCALING
28
    float scale = main->previewScale / main->devicePixelRatioF();
29
-#else
30
-   float scale = main->previewScale / main->devicePixelRatio();
31
-#endif
32
    vec2 scaled_pos = pos;
33
    vec2_divf(&scaled_pos, &scaled_pos, scale);
34
    HandleFindData data(scaled_pos, scale);
35
@@ -533,11 +522,7 @@
36
    }
37
 
38
    OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
39
-#ifdef SUPPORTS_FRACTIONAL_SCALING
40
    float pixelRatio = main->devicePixelRatioF();
41
-#else
42
-   float pixelRatio = main->devicePixelRatio();
43
-#endif
44
    float x = float(event->x()) - main->previewX / pixelRatio;
45
    float y = float(event->y()) - main->previewY / pixelRatio;
46
    Qt::KeyboardModifiers modifiers = QGuiApplication::keyboardModifiers();
47
@@ -1552,11 +1537,7 @@
48
            mousePos = pos;
49
            OBSBasic *main = reinterpret_cast<OBSBasic *>(
50
                App()->GetMainWindow());
51
-#ifdef SUPPORTS_FRACTIONAL_SCALING
52
            float scale = main->devicePixelRatioF();
53
-#else
54
-           float scale = main->devicePixelRatio();
55
-#endif
56
            float x = float(event->x()) - main->previewX / scale;
57
            float y = float(event->y()) - main->previewY / scale;
58
            vec2_set(&startPos, x, y);
59
obs-studio-27.0.1.tar.xz/UI/window-basic-properties.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-properties.cpp Changed
10
 
1
@@ -375,7 +375,7 @@
2
            obs_source_t *scene_source =
3
                obs_get_source_by_name(scene_name.c_str());
4
 
5
-           OBSBasic::Get()->SetCurrentScene(source, true);
6
+           OBSBasic::Get()->SetCurrentScene(scene_source, true);
7
 
8
            obs_source_release(scene_source);
9
 
10
obs-studio-27.0.1.tar.xz/UI/window-basic-settings-stream.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-settings-stream.cpp Changed
402
 
1
@@ -10,7 +10,14 @@
2
 
3
 #ifdef BROWSER_AVAILABLE
4
 #include <browser-panel.hpp>
5
+#endif
6
+
7
 #include "auth-oauth.hpp"
8
+
9
+#include "ui-config.h"
10
+
11
+#if YOUTUBE_ENABLED
12
+#include "youtube-api-wrappers.hpp"
13
 #endif
14
 
15
 struct QCef;
16
@@ -39,9 +46,13 @@
17
    ui->connectAccount2->setVisible(false);
18
    ui->disconnectAccount->setVisible(false);
19
    ui->bandwidthTestEnable->setVisible(false);
20
+
21
    ui->twitchAddonDropdown->setVisible(false);
22
    ui->twitchAddonLabel->setVisible(false);
23
 
24
+   ui->connectedAccountLabel->setVisible(false);
25
+   ui->connectedAccountText->setVisible(false);
26
+
27
    int vertSpacing = ui->topStreamLayout->verticalSpacing();
28
 
29
    QMargins m = ui->topStreamLayout->contentsMargins();
30
@@ -187,8 +198,9 @@
31
            settings, "server",
32
            QT_TO_UTF8(ui->server->currentData().toString()));
33
    } else {
34
-       obs_data_set_string(settings, "server",
35
-                   QT_TO_UTF8(ui->customServer->text()));
36
+       obs_data_set_string(
37
+           settings, "server",
38
+           QT_TO_UTF8(ui->customServer->text().trimmed()));
39
        obs_data_set_bool(settings, "use_auth",
40
                  ui->useAuth->isChecked());
41
        if (ui->useAuth->isChecked()) {
42
@@ -231,8 +243,12 @@
43
    main->SetService(newService);
44
    main->SaveService();
45
    main->auth = auth;
46
-   if (!!main->auth)
47
+   if (!!main->auth) {
48
        main->auth->LoadUI();
49
+       main->SetBroadcastFlowEnabled(main->auth->broadcastFlow());
50
+   } else {
51
+       main->SetBroadcastFlowEnabled(false);
52
+   }
53
 
54
    SaveCheckBox(ui->ignoreRecommended, "Stream1", "IgnoreRecommended");
55
 }
56
@@ -269,35 +285,23 @@
57
 void OBSBasicSettings::UpdateKeyLink()
58
 {
59
    QString serviceName = ui->service->currentText();
60
-   QString customServer = ui->customServer->text();
61
+   QString customServer = ui->customServer->text().trimmed();
62
    QString streamKeyLink;
63
-   if (serviceName == "Twitch") {
64
-       streamKeyLink = "https://dashboard.twitch.tv/settings/stream";
65
-   } else if (serviceName.startsWith("YouTube")) {
66
-       streamKeyLink = "https://www.youtube.com/live_dashboard";
67
-   } else if (serviceName.startsWith("Restream.io")) {
68
-       streamKeyLink =
69
-           "https://restream.io/settings/streaming-setup?from=OBS";
70
-   } else if (serviceName == "Luzento.com - RTMP") {
71
-       streamKeyLink =
72
-           "https://cms.luzento.com/dashboard/stream-key?from=OBS";
73
-   } else if (serviceName == "Facebook Live" ||
74
-          (customServer.contains("fbcdn.net") && IsCustomService())) {
75
+
76
+   obs_properties_t *props = obs_get_service_properties("rtmp_common");
77
+   obs_property_t *services = obs_properties_get(props, "service");
78
+
79
+   OBSData settings = obs_data_create();
80
+   obs_data_release(settings);
81
+
82
+   obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName));
83
+   obs_property_modified(services, settings);
84
+
85
+   streamKeyLink = obs_data_get_string(settings, "stream_key_link");
86
+
87
+   if (customServer.contains("fbcdn.net") && IsCustomService()) {
88
        streamKeyLink =
89
            "https://www.facebook.com/live/producer?ref=OBS";
90
-   } else if (serviceName.startsWith("Twitter")) {
91
-       streamKeyLink = "https://studio.twitter.com/producer/sources";
92
-   } else if (serviceName.startsWith("YouStreamer")) {
93
-       streamKeyLink = "https://app.youstreamer.com/stream/";
94
-   } else if (serviceName == "Trovo") {
95
-       streamKeyLink = "https://studio.trovo.live/mychannel/stream";
96
-   } else if (serviceName == "Glimesh") {
97
-       streamKeyLink = "https://glimesh.tv/users/settings/stream";
98
-   } else if (serviceName.startsWith("OPENREC.tv")) {
99
-       streamKeyLink =
100
-           "https://www.openrec.tv/login?keep_login=true&url=https://www.openrec.tv/dashboard/live?from=obs";
101
-   } else if (serviceName == "Brime Live") {
102
-       streamKeyLink = "https://brimelive.com/obs-stream-key-link";
103
    }
104
 
105
    if (serviceName == "Dacast") {
106
@@ -308,12 +312,14 @@
107
            QTStr("Basic.AutoConfig.StreamPage.StreamKey"));
108
    }
109
 
110
-   if (QString(streamKeyLink).isNull()) {
111
+   if (QString(streamKeyLink).isNull() ||
112
+       QString(streamKeyLink).isEmpty()) {
113
        ui->getStreamKeyButton->hide();
114
    } else {
115
        ui->getStreamKeyButton->setTargetUrl(QUrl(streamKeyLink));
116
        ui->getStreamKeyButton->show();
117
    }
118
+   obs_properties_destroy(props);
119
 }
120
 
121
 void OBSBasicSettings::LoadServices(bool showAll)
122
@@ -372,6 +378,65 @@
123
    return Auth::AuthType(service) != Auth::Type::None;
124
 }
125
 
126
+static inline bool is_external_oauth(const std::string &service)
127
+{
128
+   return Auth::External(service);
129
+}
130
+
131
+static void reset_service_ui_fields(Ui::OBSBasicSettings *ui,
132
+                   std::string &service, bool loading)
133
+{
134
+   bool external_oauth = is_external_oauth(service);
135
+   if (external_oauth) {
136
+       ui->streamKeyWidget->setVisible(false);
137
+       ui->streamKeyLabel->setVisible(false);
138
+       ui->connectAccount2->setVisible(true);
139
+       ui->useStreamKeyAdv->setVisible(true);
140
+       ui->streamStackWidget->setCurrentIndex((int)Section::StreamKey);
141
+   } else if (cef) {
142
+       QString key = ui->key->text();
143
+       bool can_auth = is_auth_service(service);
144
+       int page = can_auth && (!loading || key.isEmpty())
145
+                  ? (int)Section::Connect
146
+                  : (int)Section::StreamKey;
147
+
148
+       ui->streamStackWidget->setCurrentIndex(page);
149
+       ui->streamKeyWidget->setVisible(true);
150
+       ui->streamKeyLabel->setVisible(true);
151
+       ui->connectAccount2->setVisible(can_auth);
152
+       ui->useStreamKeyAdv->setVisible(false);
153
+   } else {
154
+       ui->connectAccount2->setVisible(false);
155
+       ui->useStreamKeyAdv->setVisible(false);
156
+   }
157
+
158
+   ui->connectedAccountLabel->setVisible(false);
159
+   ui->connectedAccountText->setVisible(false);
160
+   ui->disconnectAccount->setVisible(false);
161
+}
162
+
163
+#if YOUTUBE_ENABLED
164
+static void get_yt_ch_title(Ui::OBSBasicSettings *ui)
165
+{
166
+   const char *name = config_get_string(OBSBasic::Get()->Config(),
167
+                        "YouTube", "ChannelName");
168
+   if (name) {
169
+       ui->connectedAccountText->setText(name);
170
+   } else {
171
+       // if we still not changed the service page
172
+       if (IsYouTubeService(QT_TO_UTF8(ui->service->currentText()))) {
173
+           ui->connectedAccountText->setText(
174
+               QTStr("Auth.LoadingChannel.Error"));
175
+       }
176
+   }
177
+}
178
+#endif
179
+
180
+void OBSBasicSettings::UseStreamKeyAdvClicked()
181
+{
182
+   ui->streamKeyWidget->setVisible(true);
183
+}
184
+
185
 void OBSBasicSettings::on_service_currentIndexChanged(int)
186
 {
187
    bool showMore = ui->service->currentData().toInt() ==
188
@@ -387,26 +452,9 @@
189
    ui->twitchAddonDropdown->setVisible(false);
190
    ui->twitchAddonLabel->setVisible(false);
191
 
192
-#ifdef BROWSER_AVAILABLE
193
-   if (cef) {
194
-       if (lastService != service.c_str()) {
195
-           QString key = ui->key->text();
196
-           bool can_auth = is_auth_service(service);
197
-           int page = can_auth && (!loading || key.isEmpty())
198
-                      ? (int)Section::Connect
199
-                      : (int)Section::StreamKey;
200
-
201
-           ui->streamStackWidget->setCurrentIndex(page);
202
-           ui->streamKeyWidget->setVisible(true);
203
-           ui->streamKeyLabel->setVisible(true);
204
-           ui->connectAccount2->setVisible(can_auth);
205
-       }
206
-   } else {
207
-       ui->connectAccount2->setVisible(false);
208
+   if (lastService != service.c_str()) {
209
+       reset_service_ui_fields(ui.get(), service, loading);
210
    }
211
-#else
212
-   ui->connectAccount2->setVisible(false);
213
-#endif
214
 
215
    ui->useAuth->setVisible(custom);
216
    ui->authUsernameLabel->setVisible(custom);
217
@@ -426,15 +474,24 @@
218
        ui->serverStackedWidget->setCurrentIndex(0);
219
    }
220
 
221
-#ifdef BROWSER_AVAILABLE
222
    auth.reset();
223
 
224
-   if (!!main->auth &&
225
-       service.find(main->auth->service()) != std::string::npos) {
226
+   if (!main->auth) {
227
+       return;
228
+   }
229
+
230
+   auto system_auth_service = main->auth->service();
231
+   bool service_check = service.find(system_auth_service) !=
232
+                std::string::npos;
233
+#if YOUTUBE_ENABLED
234
+   service_check = service_check ? service_check
235
+                     : IsYouTubeService(system_auth_service) &&
236
+                       IsYouTubeService(service);
237
+#endif
238
+   if (service_check) {
239
        auth = main->auth;
240
        OnAuthConnected();
241
    }
242
-#endif
243
 }
244
 
245
 void OBSBasicSettings::UpdateServerList()
246
@@ -511,8 +568,9 @@
247
            settings, "server",
248
            QT_TO_UTF8(ui->server->currentData().toString()));
249
    } else {
250
-       obs_data_set_string(settings, "server",
251
-                   QT_TO_UTF8(ui->customServer->text()));
252
+       obs_data_set_string(
253
+           settings, "server",
254
+           QT_TO_UTF8(ui->customServer->text().trimmed()));
255
    }
256
    obs_data_set_string(settings, "key", QT_TO_UTF8(ui->key->text()));
257
 
258
@@ -525,7 +583,6 @@
259
 
260
 void OBSBasicSettings::OnOAuthStreamKeyConnected()
261
 {
262
-#ifdef BROWSER_AVAILABLE
263
    OAuthStreamKey *a = reinterpret_cast<OAuthStreamKey *>(auth.get());
264
 
265
    if (a) {
266
@@ -538,6 +595,10 @@
267
        ui->streamKeyLabel->setVisible(false);
268
        ui->connectAccount2->setVisible(false);
269
        ui->disconnectAccount->setVisible(true);
270
+       ui->useStreamKeyAdv->setVisible(false);
271
+
272
+       ui->connectedAccountLabel->setVisible(false);
273
+       ui->connectedAccountText->setVisible(false);
274
 
275
        if (strcmp(a->service(), "Twitch") == 0) {
276
            ui->bandwidthTestEnable->setVisible(true);
277
@@ -546,10 +607,22 @@
278
        } else {
279
            ui->bandwidthTestEnable->setChecked(false);
280
        }
281
+#if YOUTUBE_ENABLED
282
+       if (IsYouTubeService(a->service())) {
283
+           ui->key->clear();
284
+
285
+           ui->connectedAccountLabel->setVisible(true);
286
+           ui->connectedAccountText->setVisible(true);
287
+
288
+           ui->connectedAccountText->setText(
289
+               QTStr("Auth.LoadingChannel.Title"));
290
+
291
+           get_yt_ch_title(ui.get());
292
+       }
293
+#endif
294
    }
295
 
296
    ui->streamStackWidget->setCurrentIndex((int)Section::StreamKey);
297
-#endif
298
 }
299
 
300
 void OBSBasicSettings::OnAuthConnected()
301
@@ -557,7 +630,8 @@
302
    std::string service = QT_TO_UTF8(ui->service->currentText());
303
    Auth::Type type = Auth::AuthType(service);
304
 
305
-   if (type == Auth::Type::OAuth_StreamKey) {
306
+   if (type == Auth::Type::OAuth_StreamKey ||
307
+       type == Auth::Type::OAuth_LinkedAccount) {
308
        OnOAuthStreamKeyConnected();
309
    }
310
 
311
@@ -569,15 +643,16 @@
312
 
313
 void OBSBasicSettings::on_connectAccount_clicked()
314
 {
315
-#ifdef BROWSER_AVAILABLE
316
    std::string service = QT_TO_UTF8(ui->service->currentText());
317
 
318
    OAuth::DeleteCookies(service);
319
 
320
    auth = OAuthStreamKey::Login(this, service);
321
-   if (!!auth)
322
+   if (!!auth) {
323
        OnAuthConnected();
324
-#endif
325
+
326
+       ui->useStreamKeyAdv->setVisible(false);
327
+   }
328
 }
329
 
330
 #define DISCONNECT_COMFIRM_TITLE \
331
@@ -598,6 +673,7 @@
332
 
333
    main->auth.reset();
334
    auth.reset();
335
+   main->SetBroadcastFlowEnabled(false);
336
 
337
    std::string service = QT_TO_UTF8(ui->service->currentText());
338
 
339
@@ -607,14 +683,15 @@
340
 
341
    ui->bandwidthTestEnable->setChecked(false);
342
 
343
-   ui->streamKeyWidget->setVisible(true);
344
-   ui->streamKeyLabel->setVisible(true);
345
-   ui->connectAccount2->setVisible(true);
346
-   ui->disconnectAccount->setVisible(false);
347
+   reset_service_ui_fields(ui.get(), service, loading);
348
+
349
    ui->bandwidthTestEnable->setVisible(false);
350
    ui->twitchAddonDropdown->setVisible(false);
351
    ui->twitchAddonLabel->setVisible(false);
352
    ui->key->setText("");
353
+
354
+   ui->connectedAccountLabel->setVisible(false);
355
+   ui->connectedAccountText->setVisible(false);
356
 }
357
 
358
 void OBSBasicSettings::on_useStreamKey_clicked()
359
@@ -752,13 +829,13 @@
360
                .arg(QString::number(vbitrate));
361
    if (abitrate) {
362
        if (!text.isEmpty())
363
-           text += "\n";
364
+           text += "<br>";
365
        text += ENFORCE_TEXT("MaxAudioBitrate")
366
                .arg(QString::number(abitrate));
367
    }
368
    if (res_count) {
369
        if (!text.isEmpty())
370
-           text += "\n";
371
+           text += "<br>";
372
 
373
        obs_service_resolution best_res = {};
374
        int best_res_pixels = 0;
375
@@ -779,12 +856,25 @@
376
    }
377
    if (fps) {
378
        if (!text.isEmpty())
379
-           text += "\n";
380
+           text += "<br>";
381
 
382
        text += ENFORCE_TEXT("MaxFPS").arg(QString::number(fps));
383
    }
384
 #undef ENFORCE_TEXT
385
 
386
+#if YOUTUBE_ENABLED
387
+   if (IsYouTubeService(QT_TO_UTF8(ui->service->currentText()))) {
388
+       if (!text.isEmpty())
389
+           text += "<br><br>";
390
+
391
+       text += "<a href=\"https://www.youtube.com/t/terms\">"
392
+           "YouTube Terms of Service</a><br>"
393
+           "<a href=\"http://www.google.com/policies/privacy\">"
394
+           "Google Privacy Policy</a><br>"
395
+           "<a href=\"https://security.google.com/settings/security/permissions\">"
396
+           "Google Third-Party Permissions</a>";
397
+   }
398
+#endif
399
    ui->enforceSettingsLabel->setText(text);
400
 }
401
 
402
obs-studio-27.0.1.tar.xz/UI/window-basic-settings.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-settings.cpp Changed
72
 
1
@@ -408,6 +408,7 @@
2
    HookWidget(ui->overflowHide,         CHECK_CHANGED,  GENERAL_CHANGED);
3
    HookWidget(ui->overflowAlwaysVisible,CHECK_CHANGED,  GENERAL_CHANGED);
4
    HookWidget(ui->overflowSelectionHide,CHECK_CHANGED,  GENERAL_CHANGED);
5
+   HookWidget(ui->previewSafeAreas,     CHECK_CHANGED,  GENERAL_CHANGED);
6
    HookWidget(ui->automaticSearch,      CHECK_CHANGED,  GENERAL_CHANGED);
7
    HookWidget(ui->doubleClickSwitch,    CHECK_CHANGED,  GENERAL_CHANGED);
8
    HookWidget(ui->studioPortraitLayout, CHECK_CHANGED,  GENERAL_CHANGED);
9
@@ -908,6 +909,9 @@
10
    QValidator *validator = new QRegularExpressionValidator(rx, this);
11
    ui->baseResolution->lineEdit()->setValidator(validator);
12
    ui->outputResolution->lineEdit()->setValidator(validator);
13
+
14
+   connect(ui->useStreamKeyAdv, SIGNAL(clicked()), this,
15
+       SLOT(UseStreamKeyAdvClicked()));
16
 }
17
 
18
 OBSBasicSettings::~OBSBasicSettings()
19
@@ -1310,6 +1314,10 @@
20
        GetGlobalConfig(), "BasicWindow", "OverflowSelectionHidden");
21
    ui->overflowSelectionHide->setChecked(overflowSelectionHide);
22
 
23
+   bool safeAreas = config_get_bool(GetGlobalConfig(), "BasicWindow",
24
+                    "ShowSafeAreas");
25
+   ui->previewSafeAreas->setChecked(safeAreas);
26
+
27
    bool automaticSearch = config_get_bool(GetGlobalConfig(), "General",
28
                           "AutomaticCollectionSearch");
29
    ui->automaticSearch->setChecked(automaticSearch);
30
@@ -1351,11 +1359,15 @@
31
        QTStr("Basic.Settings.General.MultiviewLayout.Vertical.Right"),
32
        static_cast<int>(MultiviewLayout::VERTICAL_RIGHT_8_SCENES));
33
    ui->multiviewLayout->addItem(
34
+       QTStr("Basic.Settings.General.MultiviewLayout.Horizontal.18Scene.Top"),
35
+       static_cast<int>(MultiviewLayout::HORIZONTAL_TOP_18_SCENES));
36
+   ui->multiviewLayout->addItem(
37
        QTStr("Basic.Settings.General.MultiviewLayout.Horizontal.Extended.Top"),
38
        static_cast<int>(MultiviewLayout::HORIZONTAL_TOP_24_SCENES));
39
 
40
-   ui->multiviewLayout->setCurrentIndex(config_get_int(
41
-       GetGlobalConfig(), "BasicWindow", "MultiviewLayout"));
42
+   ui->multiviewLayout->setCurrentIndex(ui->multiviewLayout->findData(
43
+       QVariant::fromValue(config_get_int(
44
+           GetGlobalConfig(), "BasicWindow", "MultiviewLayout"))));
45
 
46
    prevLangIndex = ui->language->currentIndex();
47
 
48
@@ -2618,7 +2630,9 @@
49
 template<typename Func, typename T>
50
 static QLabel *makeLabel(T &t, Func &&getName)
51
 {
52
-   return new QLabel(getName(t));
53
+   QLabel *label = new QLabel(getName(t));
54
+   label->setStyleSheet("font-weight: bold;");
55
+   return label;
56
 }
57
 
58
 template<typename Func>
59
@@ -3012,6 +3026,12 @@
60
        config_set_bool(GetGlobalConfig(), "BasicWindow",
61
                "OverflowSelectionHidden",
62
                ui->overflowSelectionHide->isChecked());
63
+   if (WidgetChanged(ui->previewSafeAreas)) {
64
+       config_set_bool(GetGlobalConfig(), "BasicWindow",
65
+               "ShowSafeAreas",
66
+               ui->previewSafeAreas->isChecked());
67
+       main->UpdatePreviewSafeAreas();
68
+   }
69
    if (WidgetChanged(ui->doubleClickSwitch))
70
        config_set_bool(GetGlobalConfig(), "BasicWindow",
71
                "TransitionOnDoubleClick",
72
obs-studio-27.0.1.tar.xz/UI/window-basic-settings.hpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-settings.hpp Changed
10
 
1
@@ -399,6 +399,8 @@
2
    void SetHotkeysIcon(const QIcon &icon);
3
    void SetAdvancedIcon(const QIcon &icon);
4
 
5
+   void UseStreamKeyAdvClicked();
6
+
7
 protected:
8
    virtual void closeEvent(QCloseEvent *event) override;
9
    void reject() override;
10
obs-studio-27.0.1.tar.xz/UI/window-basic-source-select.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-source-select.cpp Changed
25
 
1
@@ -269,6 +269,11 @@
2
        obs_data_set_bool(wrapper, "visible", visible);
3
 
4
        auto redo = [scene_name, main](const std::string &data) {
5
+           obs_source_t *scene_source =
6
+               obs_get_source_by_name(scene_name.c_str());
7
+           main->SetCurrentScene(scene_source, true);
8
+           obs_source_release(scene_source);
9
+
10
            obs_data_t *dat =
11
                obs_data_create_from_json(data.c_str());
12
            OBSSource source;
13
@@ -280,11 +285,6 @@
14
            obs_sceneitem_set_id(item, (int64_t)obs_data_get_int(
15
                               dat, "item_id"));
16
 
17
-           obs_source_t *scene_source =
18
-               obs_get_source_by_name(scene_name.c_str());
19
-           main->SetCurrentScene(scene_source, true);
20
-           obs_source_release(scene_source);
21
-
22
            main->RefreshSources(main->GetCurrentScene());
23
            obs_data_release(dat);
24
            obs_sceneitem_release(item);
25
obs-studio-27.0.1.tar.xz/UI/window-basic-transform.cpp -> obs-studio-27.1.3.tar.xz/UI/window-basic-transform.cpp Changed
34
 
1
@@ -73,6 +73,9 @@
2
    SetScene(scene);
3
    SetItem(item);
4
 
5
+   std::string name = obs_source_get_name(obs_sceneitem_get_source(item));
6
+   setWindowTitle(QTStr("Basic.TransformWindow.Title").arg(name.c_str()));
7
+
8
    obs_data_t *wrapper =
9
        obs_scene_save_transform_states(main->GetCurrentScene(), false);
10
    undo_data = std::string(obs_data_get_json(wrapper));
11
@@ -204,8 +207,11 @@
12
    OBSScene scene = (obs_scene_t *)calldata_ptr(data, "scene");
13
    OBSSceneItem item = (obs_sceneitem_t *)calldata_ptr(data, "item");
14
 
15
-   if (item == window->item)
16
+   if (item == window->item) {
17
+       window->setWindowTitle(
18
+           QTStr("Basic.TransformWindow.NoSelectedSource"));
19
        window->SetItem(FindASelectedItem(scene));
20
+   }
21
 }
22
 
23
 static const uint32_t listToAlign[] = {OBS_ALIGN_TOP | OBS_ALIGN_LEFT,
24
@@ -266,6 +272,9 @@
25
    ui->cropTop->setValue(int(crop.top));
26
    ui->cropBottom->setValue(int(crop.bottom));
27
    ignoreItemChange = false;
28
+
29
+   std::string name = obs_source_get_name(source);
30
+   setWindowTitle(QTStr("Basic.TransformWindow.Title").arg(name.c_str()));
31
 }
32
 
33
 void OBSBasicTransform::OnBoundsType(int index)
34
obs-studio-27.0.1.tar.xz/UI/window-projector.cpp -> obs-studio-27.1.3.tar.xz/UI/window-projector.cpp Changed
216
 
1
@@ -70,58 +70,9 @@
2
        &OBSProjector::ScreenRemoved);
3
 
4
    if (type == ProjectorType::Multiview) {
5
-       obs_enter_graphics();
6
-
7
-       // All essential action should be placed inside this area
8
-       gs_render_start(true);
9
-       gs_vertex2f(actionSafePercentage, actionSafePercentage);
10
-       gs_vertex2f(actionSafePercentage, 1 - actionSafePercentage);
11
-       gs_vertex2f(1 - actionSafePercentage, 1 - actionSafePercentage);
12
-       gs_vertex2f(1 - actionSafePercentage, actionSafePercentage);
13
-       gs_vertex2f(actionSafePercentage, actionSafePercentage);
14
-       actionSafeMargin = gs_render_save();
15
-
16
-       // All graphics should be placed inside this area
17
-       gs_render_start(true);
18
-       gs_vertex2f(graphicsSafePercentage, graphicsSafePercentage);
19
-       gs_vertex2f(graphicsSafePercentage, 1 - graphicsSafePercentage);
20
-       gs_vertex2f(1 - graphicsSafePercentage,
21
-               1 - graphicsSafePercentage);
22
-       gs_vertex2f(1 - graphicsSafePercentage, graphicsSafePercentage);
23
-       gs_vertex2f(graphicsSafePercentage, graphicsSafePercentage);
24
-       graphicsSafeMargin = gs_render_save();
25
-
26
-       // 4:3 safe area for widescreen
27
-       gs_render_start(true);
28
-       gs_vertex2f(fourByThreeSafePercentage, graphicsSafePercentage);
29
-       gs_vertex2f(1 - fourByThreeSafePercentage,
30
-               graphicsSafePercentage);
31
-       gs_vertex2f(1 - fourByThreeSafePercentage,
32
-               1 - graphicsSafePercentage);
33
-       gs_vertex2f(fourByThreeSafePercentage,
34
-               1 - graphicsSafePercentage);
35
-       gs_vertex2f(fourByThreeSafePercentage, graphicsSafePercentage);
36
-       fourByThreeSafeMargin = gs_render_save();
37
-
38
-       gs_render_start(true);
39
-       gs_vertex2f(0.0f, 0.5f);
40
-       gs_vertex2f(lineLength, 0.5f);
41
-       leftLine = gs_render_save();
42
-
43
-       gs_render_start(true);
44
-       gs_vertex2f(0.5f, 0.0f);
45
-       gs_vertex2f(0.5f, lineLength);
46
-       topLine = gs_render_save();
47
-
48
-       gs_render_start(true);
49
-       gs_vertex2f(1.0f, 0.5f);
50
-       gs_vertex2f(1 - lineLength, 0.5f);
51
-       rightLine = gs_render_save();
52
-       obs_leave_graphics();
53
-
54
-       solid = obs_get_base_effect(OBS_EFFECT_SOLID);
55
-       color = gs_effect_get_param_by_name(solid, "color");
56
-
57
+       InitSafeAreas(&actionSafeMargin, &graphicsSafeMargin,
58
+                 &fourByThreeSafeMargin, &leftLine, &topLine,
59
+                 &rightLine);
60
        UpdateMultiview();
61
 
62
        multiviewProjectors.push_back(this);
63
@@ -246,6 +197,9 @@
64
 
65
    int n; // Number of scenes per row
66
    switch (multiviewLayout) {
67
+   case MultiviewLayout::HORIZONTAL_TOP_18_SCENES:
68
+       n = 6;
69
+       break;
70
    case MultiviewLayout::HORIZONTAL_TOP_24_SCENES:
71
        n = 6;
72
        break;
73
@@ -294,31 +248,13 @@
74
    OBSSource programSrc = main->GetProgramSource();
75
    bool studioMode = main->IsPreviewProgramMode();
76
 
77
-   auto renderVB = [&](gs_vertbuffer_t *vb, int cx, int cy,
78
-               uint32_t colorVal) {
79
-       if (!vb)
80
-           return;
81
-
82
-       matrix4 transform;
83
-       matrix4_identity(&transform);
84
-       transform.x.x = cx;
85
-       transform.y.y = cy;
86
-
87
-       gs_load_vertexbuffer(vb);
88
-
89
-       gs_matrix_push();
90
-       gs_matrix_mul(&transform);
91
-
92
-       gs_effect_set_color(window->color, colorVal);
93
-       while (gs_effect_loop(window->solid, "Solid"))
94
-           gs_draw(GS_LINESTRIP, 0, 0);
95
-
96
-       gs_matrix_pop();
97
-   };
98
-
99
    auto drawBox = [&](float cx, float cy, uint32_t colorVal) {
100
-       gs_effect_set_color(window->color, colorVal);
101
-       while (gs_effect_loop(window->solid, "Solid"))
102
+       gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
103
+       gs_eparam_t *color =
104
+           gs_effect_get_param_by_name(solid, "color");
105
+
106
+       gs_effect_set_color(color, colorVal);
107
+       while (gs_effect_loop(solid, "Solid"))
108
            gs_draw_sprite(nullptr, 0, (uint32_t)cx, (uint32_t)cy);
109
    };
110
 
111
@@ -338,6 +274,11 @@
112
 
113
    auto calcBaseSource = [&](size_t i) {
114
        switch (multiviewLayout) {
115
+       case MultiviewLayout::HORIZONTAL_TOP_18_SCENES:
116
+           window->sourceX = (i % 6) * window->scenesCX;
117
+           window->sourceY =
118
+               window->pvwprgCY + (i / 6) * window->scenesCY;
119
+           break;
120
        case MultiviewLayout::HORIZONTAL_TOP_24_SCENES:
121
            window->sourceX = (i % 6) * window->scenesCX;
122
            window->sourceY =
123
@@ -423,7 +364,7 @@
124
                window->labelX += window->pvwprgCX;
125
            }
126
            break;
127
-       default: // MultiviewLayout::HORIZONTAL_TOP_8_SCENES:
128
+       default: // MultiviewLayout::HORIZONTAL_TOP_8_SCENES and 18_SCENES
129
            window->sourceX = window->thickness;
130
            window->sourceY = window->thickness;
131
            window->labelX = window->offset;
132
@@ -541,17 +482,17 @@
133
        obs_source_video_render(previewSrc);
134
    else
135
        obs_render_main_texture();
136
+
137
    if (drawSafeArea) {
138
-       renderVB(window->actionSafeMargin, targetCX, targetCY,
139
-            outerColor);
140
-       renderVB(window->graphicsSafeMargin, targetCX, targetCY,
141
-            outerColor);
142
-       renderVB(window->fourByThreeSafeMargin, targetCX, targetCY,
143
-            outerColor);
144
-       renderVB(window->leftLine, targetCX, targetCY, outerColor);
145
-       renderVB(window->topLine, targetCX, targetCY, outerColor);
146
-       renderVB(window->rightLine, targetCX, targetCY, outerColor);
147
+       RenderSafeAreas(window->actionSafeMargin, targetCX, targetCY);
148
+       RenderSafeAreas(window->graphicsSafeMargin, targetCX, targetCY);
149
+       RenderSafeAreas(window->fourByThreeSafeMargin, targetCX,
150
+               targetCY);
151
+       RenderSafeAreas(window->leftLine, targetCX, targetCY);
152
+       RenderSafeAreas(window->topLine, targetCX, targetCY);
153
+       RenderSafeAreas(window->rightLine, targetCX, targetCY);
154
    }
155
+
156
    endRegion();
157
    gs_matrix_pop();
158
 
159
@@ -703,6 +644,24 @@
160
    int maxY = cy;
161
 
162
    switch (multiviewLayout) {
163
+   case MultiviewLayout::HORIZONTAL_TOP_18_SCENES:
164
+       if (float(cx) / float(cy) > ratio) {
165
+           int validX = cy * ratio;
166
+           minX = (cx / 2) - (validX / 2);
167
+           maxX = (cx / 2) + (validX / 2);
168
+       } else {
169
+           int validY = cx / ratio;
170
+           maxY = (cy / 2) + (validY / 2);
171
+       }
172
+       minY = cy / 2;
173
+
174
+       if (x < minX || x > maxX || y < minY || y > maxY)
175
+           break;
176
+
177
+       pos = (x - minX) / ((maxX - minX) / 6);
178
+       pos += ((y - minY) / ((maxY - minY) / 3)) * 6;
179
+
180
+       break;
181
    case MultiviewLayout::HORIZONTAL_TOP_24_SCENES:
182
        if (float(cx) / float(cy) > ratio) {
183
            int validX = cy * ratio;
184
@@ -929,6 +888,12 @@
185
        GetGlobalConfig(), "BasicWindow", "TransitionOnDoubleClick");
186
 
187
    switch (multiviewLayout) {
188
+   case MultiviewLayout::HORIZONTAL_TOP_18_SCENES:
189
+       pvwprgCX = fw / 2;
190
+       pvwprgCY = fh / 2;
191
+
192
+       maxSrcs = 18;
193
+       break;
194
    case MultiviewLayout::HORIZONTAL_TOP_24_SCENES:
195
        pvwprgCX = fw / 3;
196
        pvwprgCY = fh / 3;
197
@@ -947,8 +912,16 @@
198
    ppiScaleX = (pvwprgCX - thicknessx2) / fw;
199
    ppiScaleY = (pvwprgCY - thicknessx2) / fh;
200
 
201
-   scenesCX = pvwprgCX / 2;
202
-   scenesCY = pvwprgCY / 2;
203
+   switch (multiviewLayout) {
204
+   case MultiviewLayout::HORIZONTAL_TOP_18_SCENES:
205
+       scenesCX = pvwprgCX / 3;
206
+       scenesCY = pvwprgCY / 3;
207
+       break;
208
+   default:
209
+       scenesCX = pvwprgCX / 2;
210
+       scenesCY = pvwprgCY / 2;
211
+   }
212
+
213
    siCX = scenesCX - thicknessx2;
214
    siCY = scenesCY - thicknessx2;
215
    siScaleX = (scenesCX - thicknessx2) / fw;
216
obs-studio-27.0.1.tar.xz/UI/window-projector.hpp -> obs-studio-27.1.3.tar.xz/UI/window-projector.hpp Changed
30
 
1
@@ -19,6 +19,7 @@
2
    VERTICAL_LEFT_8_SCENES = 2,
3
    VERTICAL_RIGHT_8_SCENES = 3,
4
    HORIZONTAL_TOP_24_SCENES = 4,
5
+   HORIZONTAL_TOP_18_SCENES = 5,
6
 };
7
 
8
 class OBSProjector : public OBSQTDisplay {
9
@@ -48,8 +49,6 @@
10
    gs_vertbuffer_t *leftLine = nullptr;
11
    gs_vertbuffer_t *topLine = nullptr;
12
    gs_vertbuffer_t *rightLine = nullptr;
13
-   gs_effect_t *solid = nullptr;
14
-   gs_eparam_t *color = nullptr;
15
    // Multiview position helpers
16
    float thickness = 4;
17
    float offset, thicknessx2 = thickness * 2, pvwprgCX, pvwprgCY, sourceX,
18
@@ -57,11 +56,6 @@
19
              siX, siY, siCX, siCY, ppiScaleX, ppiScaleY, siScaleX,
20
              siScaleY, fw, fh, ratio;
21
 
22
-   float lineLength = 0.1f;
23
-   // Rec. ITU-R BT.1848-1 / EBU R 95
24
-   float actionSafePercentage = 0.035f;       // 3.5%
25
-   float graphicsSafePercentage = 0.05f;      // 5.0%
26
-   float fourByThreeSafePercentage = 0.1625f; // 16.25%
27
    bool ready = false;
28
 
29
    // argb colors
30
obs-studio-27.0.1.tar.xz/UI/window-remux.cpp -> obs-studio-27.1.3.tar.xz/UI/window-remux.cpp Changed
12
 
1
@@ -864,8 +864,9 @@
2
 void OBSRemux::AutoRemux(QString inFile, QString outFile)
3
 {
4
    if (inFile != "" && outFile != "" && autoRemux) {
5
+       ui->progressBar->setVisible(true);
6
        emit remux(inFile, outFile);
7
-       autoRemuxFile = inFile;
8
+       autoRemuxFile = outFile;
9
    }
10
 }
11
 
12
obs-studio-27.1.3.tar.xz/UI/window-youtube-actions.cpp Added
852
 
1
@@ -0,0 +1,850 @@
2
+#include "window-basic-main.hpp"
3
+#include "window-youtube-actions.hpp"
4
+
5
+#include "obs-app.hpp"
6
+#include "qt-wrappers.hpp"
7
+#include "youtube-api-wrappers.hpp"
8
+
9
+#include <QToolTip>
10
+#include <QDateTime>
11
+#include <QDesktopServices>
12
+#include <QFileInfo>
13
+#include <QStandardPaths>
14
+#include <QImageReader>
15
+
16
+const QString SchedulDateAndTimeFormat = "yyyy-MM-dd'T'hh:mm:ss'Z'";
17
+const QString RepresentSchedulDateAndTimeFormat = "dddd, MMMM d, yyyy h:m";
18
+const QString IndexOfGamingCategory = "20";
19
+
20
+OBSYoutubeActions::OBSYoutubeActions(QWidget *parent, Auth *auth,
21
+                    bool broadcastReady)
22
+   : QDialog(parent),
23
+     ui(new Ui::OBSYoutubeActions),
24
+     apiYouTube(dynamic_cast<YoutubeApiWrappers *>(auth)),
25
+     workerThread(new WorkerThread(apiYouTube)),
26
+     broadcastReady(broadcastReady)
27
+{
28
+   setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
29
+   ui->setupUi(this);
30
+
31
+   ui->privacyBox->addItem(QTStr("YouTube.Actions.Privacy.Public"),
32
+               "public");
33
+   ui->privacyBox->addItem(QTStr("YouTube.Actions.Privacy.Unlisted"),
34
+               "unlisted");
35
+   ui->privacyBox->addItem(QTStr("YouTube.Actions.Privacy.Private"),
36
+               "private");
37
+
38
+   ui->latencyBox->addItem(QTStr("YouTube.Actions.Latency.Normal"),
39
+               "normal");
40
+   ui->latencyBox->addItem(QTStr("YouTube.Actions.Latency.Low"), "low");
41
+   ui->latencyBox->addItem(QTStr("YouTube.Actions.Latency.UltraLow"),
42
+               "ultraLow");
43
+
44
+   UpdateOkButtonStatus();
45
+
46
+   connect(ui->title, &QLineEdit::textChanged, this,
47
+       [&](const QString &) { this->UpdateOkButtonStatus(); });
48
+   connect(ui->privacyBox, &QComboBox::currentTextChanged, this,
49
+       [&](const QString &) { this->UpdateOkButtonStatus(); });
50
+   connect(ui->yesMakeForKids, &QRadioButton::toggled, this,
51
+       [&](bool) { this->UpdateOkButtonStatus(); });
52
+   connect(ui->notMakeForKids, &QRadioButton::toggled, this,
53
+       [&](bool) { this->UpdateOkButtonStatus(); });
54
+   connect(ui->tabWidget, &QTabWidget::currentChanged, this,
55
+       [&](int) { this->UpdateOkButtonStatus(); });
56
+   connect(ui->pushButton, &QPushButton::clicked, this,
57
+       &OBSYoutubeActions::OpenYouTubeDashboard);
58
+
59
+   connect(ui->helpAutoStartStop, &QLabel::linkActivated, this,
60
+       [](const QString &) {
61
+           QToolTip::showText(
62
+               QCursor::pos(),
63
+               QTStr("YouTube.Actions.AutoStartStop.TT"));
64
+       });
65
+   connect(ui->help360Video, &QLabel::linkActivated, this,
66
+       [](const QString &link) { QDesktopServices::openUrl(link); });
67
+   connect(ui->helpMadeForKids, &QLabel::linkActivated, this,
68
+       [](const QString &link) { QDesktopServices::openUrl(link); });
69
+
70
+   ui->scheduledTime->setVisible(false);
71
+   connect(ui->checkScheduledLater, &QCheckBox::stateChanged, this,
72
+       [&](int state) {
73
+           ui->scheduledTime->setVisible(state);
74
+           if (state) {
75
+               ui->checkAutoStart->setVisible(true);
76
+               ui->checkAutoStop->setVisible(true);
77
+               ui->helpAutoStartStop->setVisible(true);
78
+
79
+               ui->checkAutoStart->setChecked(false);
80
+               ui->checkAutoStop->setChecked(false);
81
+           } else {
82
+               ui->checkAutoStart->setVisible(false);
83
+               ui->checkAutoStop->setVisible(false);
84
+               ui->helpAutoStartStop->setVisible(false);
85
+
86
+               ui->checkAutoStart->setChecked(true);
87
+               ui->checkAutoStop->setChecked(true);
88
+           }
89
+           UpdateOkButtonStatus();
90
+       });
91
+
92
+   ui->checkAutoStart->setVisible(false);
93
+   ui->checkAutoStop->setVisible(false);
94
+   ui->helpAutoStartStop->setVisible(false);
95
+
96
+   ui->scheduledTime->setDateTime(QDateTime::currentDateTime());
97
+
98
+   auto thumbSelectionHandler = [&]() {
99
+       if (thumbnailFile.isEmpty()) {
100
+           QString filePath = OpenFile(
101
+               this,
102
+               QTStr("YouTube.Actions.Thumbnail.SelectFile"),
103
+               QStandardPaths::writableLocation(
104
+                   QStandardPaths::PicturesLocation),
105
+               QString("Images (*.png *.jpg *.jpeg *.gif)"));
106
+
107
+           if (!filePath.isEmpty()) {
108
+               QFileInfo tFile(filePath);
109
+               if (!tFile.exists()) {
110
+                   return ShowErrorDialog(
111
+                       this,
112
+                       QTStr("YouTube.Actions.Error.FileMissing"));
113
+               } else if (tFile.size() > 2 * 1024 * 1024) {
114
+                   return ShowErrorDialog(
115
+                       this,
116
+                       QTStr("YouTube.Actions.Error.FileTooLarge"));
117
+               }
118
+
119
+               thumbnailFile = filePath;
120
+               ui->selectedFileName->setText(thumbnailFile);
121
+               ui->selectFileButton->setText(QTStr(
122
+                   "YouTube.Actions.Thumbnail.ClearFile"));
123
+
124
+               QImageReader imgReader(filePath);
125
+               imgReader.setAutoTransform(true);
126
+               const QImage newImage = imgReader.read();
127
+               ui->thumbnailPreview->setPixmap(
128
+                   QPixmap::fromImage(newImage).scaled(
129
+                       160, 90, Qt::KeepAspectRatio));
130
+           }
131
+       } else {
132
+           thumbnailFile.clear();
133
+           ui->selectedFileName->setText(QTStr(
134
+               "YouTube.Actions.Thumbnail.NoFileSelected"));
135
+           ui->selectFileButton->setText(
136
+               QTStr("YouTube.Actions.Thumbnail.SelectFile"));
137
+           ui->thumbnailPreview->setPixmap(
138
+               GetPlaceholder().pixmap(QSize(16, 16)));
139
+       }
140
+   };
141
+
142
+   connect(ui->selectFileButton, &QPushButton::clicked, this,
143
+       thumbSelectionHandler);
144
+   connect(ui->thumbnailPreview, &ClickableLabel::clicked, this,
145
+       thumbSelectionHandler);
146
+
147
+   if (!apiYouTube) {
148
+       blog(LOG_DEBUG, "YouTube API auth NOT found.");
149
+       Cancel();
150
+       return;
151
+   }
152
+
153
+   const char *name = config_get_string(OBSBasic::Get()->Config(),
154
+                        "YouTube", "ChannelName");
155
+   this->setWindowTitle(QTStr("YouTube.Actions.WindowTitle").arg(name));
156
+
157
+   QVector<CategoryDescription> category_list;
158
+   if (!apiYouTube->GetVideoCategoriesList(category_list)) {
159
+       ShowErrorDialog(
160
+           parent,
161
+           apiYouTube->GetLastError().isEmpty()
162
+               ? QTStr("YouTube.Actions.Error.General")
163
+               : QTStr("YouTube.Actions.Error.Text")
164
+                     .arg(apiYouTube->GetLastError()));
165
+       Cancel();
166
+       return;
167
+   }
168
+   for (auto &category : category_list) {
169
+       ui->categoryBox->addItem(category.title, category.id);
170
+       if (category.id == IndexOfGamingCategory) {
171
+           ui->categoryBox->setCurrentText(category.title);
172
+       }
173
+   }
174
+
175
+   connect(ui->okButton, &QPushButton::clicked, this,
176
+       &OBSYoutubeActions::InitBroadcast);
177
+   connect(ui->saveButton, &QPushButton::clicked, this,
178
+       &OBSYoutubeActions::ReadyBroadcast);
179
+   connect(ui->cancelButton, &QPushButton::clicked, this, [&]() {
180
+       blog(LOG_DEBUG, "YouTube live broadcast creation cancelled.");
181
+       // Close the dialog.
182
+       Cancel();
183
+   });
184
+
185
+   qDeleteAll(ui->scrollAreaWidgetContents->findChildren<QWidget *>(
186
+       QString(), Qt::FindDirectChildrenOnly));
187
+
188
+   // Add label indicating loading state
189
+   QLabel *loadingLabel = new QLabel();
190
+   loadingLabel->setTextFormat(Qt::RichText);
191
+   loadingLabel->setAlignment(Qt::AlignHCenter);
192
+   loadingLabel->setText(
193
+       QString("<big>%1</big>")
194
+           .arg(QTStr("YouTube.Actions.EventsLoading")));
195
+   ui->scrollAreaWidgetContents->layout()->addWidget(loadingLabel);
196
+
197
+   // Delete "loading..." label on completion
198
+   connect(workerThread, &WorkerThread::finished, this, [&] {
199
+       QLayoutItem *item =
200
+           ui->scrollAreaWidgetContents->layout()->takeAt(0);
201
+       item->widget()->deleteLater();
202
+   });
203
+
204
+   connect(workerThread, &WorkerThread::failed, this, [&]() {
205
+       auto last_error = apiYouTube->GetLastError();
206
+       if (last_error.isEmpty())
207
+           last_error = QTStr("YouTube.Actions.Error.YouTubeApi");
208
+
209
+       if (!apiYouTube->GetTranslatedError(last_error))
210
+           last_error = QTStr("YouTube.Actions.Error.Text")
211
+                        .arg(last_error);
212
+
213
+       ShowErrorDialog(this, last_error);
214
+       QDialog::reject();
215
+   });
216
+
217
+   connect(workerThread, &WorkerThread::new_item, this,
218
+       [&](const QString &title, const QString &dateTimeString,
219
+           const QString &broadcast, const QString &status,
220
+           bool astart, bool astop) {
221
+           ClickableLabel *label = new ClickableLabel();
222
+           label->setTextFormat(Qt::RichText);
223
+
224
+           if (status == "live" || status == "testing") {
225
+               // Resumable stream
226
+               label->setText(
227
+                   QString("<big>%1</big><br/>%2")
228
+                       .arg(title,
229
+                            QTStr("YouTube.Actions.Stream.Resume")));
230
+
231
+           } else if (dateTimeString.isEmpty()) {
232
+               // The broadcast created by YouTube Studio has no start time.
233
+               // Yes this does violate the restrictions set in YouTube's API
234
+               // But why would YouTube care about consistency?
235
+               label->setText(
236
+                   QString("<big>%1</big><br/>%2")
237
+                       .arg(title,
238
+                            QTStr("YouTube.Actions.Stream.YTStudio")));
239
+           } else {
240
+               label->setText(
241
+                   QString("<big>%1</big><br/>%2")
242
+                       .arg(title,
243
+                            QTStr("YouTube.Actions.Stream.ScheduledFor")
244
+                                .arg(dateTimeString)));
245
+           }
246
+
247
+           label->setAlignment(Qt::AlignHCenter);
248
+           label->setMargin(4);
249
+
250
+           connect(label, &ClickableLabel::clicked, this,
251
+               [&, label, broadcast, astart, astop]() {
252
+                   for (QWidget *i :
253
+                        ui->scrollAreaWidgetContents->findChildren<
254
+                            QWidget *>(
255
+                            QString(),
256
+                            Qt::FindDirectChildrenOnly)) {
257
+
258
+                       i->setProperty(
259
+                           "isSelectedEvent",
260
+                           "false");
261
+                       i->style()->unpolish(i);
262
+                       i->style()->polish(i);
263
+                   }
264
+                   label->setProperty("isSelectedEvent",
265
+                              "true");
266
+                   label->style()->unpolish(label);
267
+                   label->style()->polish(label);
268
+
269
+                   this->selectedBroadcast = broadcast;
270
+                   this->autostart = astart;
271
+                   this->autostop = astop;
272
+                   UpdateOkButtonStatus();
273
+               });
274
+           ui->scrollAreaWidgetContents->layout()->addWidget(
275
+               label);
276
+
277
+           if (selectedBroadcast == broadcast)
278
+               label->clicked();
279
+       });
280
+   workerThread->start();
281
+
282
+   OBSBasic *main = OBSBasic::Get();
283
+   bool rememberSettings = config_get_bool(main->basicConfig, "YouTube",
284
+                       "RememberSettings");
285
+   if (rememberSettings)
286
+       LoadSettings();
287
+
288
+   // Switch to events page and select readied broadcast once loaded
289
+   if (broadcastReady) {
290
+       ui->tabWidget->setCurrentIndex(1);
291
+       selectedBroadcast = apiYouTube->GetBroadcastId();
292
+   }
293
+
294
+#ifdef __APPLE__
295
+   // MacOS theming issues
296
+   this->resize(this->width() + 200, this->height() + 120);
297
+#endif
298
+   valid = true;
299
+}
300
+
301
+void OBSYoutubeActions::showEvent(QShowEvent *event)
302
+{
303
+   QDialog::showEvent(event);
304
+   if (thumbnailFile.isEmpty())
305
+       ui->thumbnailPreview->setPixmap(
306
+           GetPlaceholder().pixmap(QSize(16, 16)));
307
+}
308
+
309
+OBSYoutubeActions::~OBSYoutubeActions()
310
+{
311
+   workerThread->stop();
312
+   workerThread->wait();
313
+
314
+   delete workerThread;
315
+}
316
+
317
+void WorkerThread::run()
318
+{
319
+   if (!pending)
320
+       return;
321
+   json11::Json broadcasts;
322
+
323
+   for (QString broadcastStatus : {"active", "upcoming"}) {
324
+       if (!apiYouTube->GetBroadcastsList(broadcasts, "",
325
+                          broadcastStatus)) {
326
+           emit failed();
327
+           return;
328
+       }
329
+
330
+       while (pending) {
331
+           auto items = broadcasts["items"].array_items();
332
+           for (auto item : items) {
333
+               QString status = QString::fromStdString(
334
+                   item["status"]["lifeCycleStatus"]
335
+                       .string_value());
336
+
337
+               if (status == "live" || status == "testing") {
338
+                   // Check that the attached liveStream is offline (reconnectable)
339
+                   QString stream_id = QString::fromStdString(
340
+                       item["contentDetails"]
341
+                           ["boundStreamId"]
342
+                               .string_value());
343
+                   json11::Json stream;
344
+                   if (!apiYouTube->FindStream(stream_id,
345
+                                   stream))
346
+                       continue;
347
+                   if (stream["status"]["streamStatus"] ==
348
+                       "active")
349
+                       continue;
350
+               }
351
+
352
+               QString title = QString::fromStdString(
353
+                   item["snippet"]["title"].string_value());
354
+               QString scheduledStartTime =
355
+                   QString::fromStdString(
356
+                       item["snippet"]
357
+                           ["scheduledStartTime"]
358
+                               .string_value());
359
+               QString broadcast = QString::fromStdString(
360
+                   item["id"].string_value());
361
+
362
+               // Treat already started streams as autostart for UI purposes
363
+               bool astart =
364
+                   status == "live" ||
365
+                   item["contentDetails"]["enableAutoStart"]
366
+                       .bool_value();
367
+               bool astop =
368
+                   item["contentDetails"]["enableAutoStop"]
369
+                       .bool_value();
370
+
371
+               QDateTime utcDTime = QDateTime::fromString(
372
+                   scheduledStartTime,
373
+                   SchedulDateAndTimeFormat);
374
+               // DateTime parser means that input datetime is a local, so we need to move it
375
+               QDateTime dateTime = utcDTime.addSecs(
376
+                   utcDTime.offsetFromUtc());
377
+
378
+               QString dateTimeString = QLocale().toString(
379
+                   dateTime,
380
+                   QString("%1  %2").arg(
381
+                       QLocale().dateFormat(
382
+                           QLocale::LongFormat),
383
+                       QLocale().timeFormat(
384
+                           QLocale::ShortFormat)));
385
+
386
+               emit new_item(title, dateTimeString, broadcast,
387
+                         status, astart, astop);
388
+           }
389
+
390
+           auto nextPageToken =
391
+               broadcasts["nextPageToken"].string_value();
392
+           if (nextPageToken.empty() || items.empty())
393
+               break;
394
+           else {
395
+               if (!pending)
396
+                   return;
397
+               if (!apiYouTube->GetBroadcastsList(
398
+                       broadcasts,
399
+                       QString::fromStdString(
400
+                           nextPageToken),
401
+                       broadcastStatus)) {
402
+                   emit failed();
403
+                   return;
404
+               }
405
+           }
406
+       }
407
+   }
408
+
409
+   emit ready();
410
+}
411
+
412
+void OBSYoutubeActions::UpdateOkButtonStatus()
413
+{
414
+   bool enable = false;
415
+
416
+   if (ui->tabWidget->currentIndex() == 0) {
417
+       enable = !ui->title->text().isEmpty() &&
418
+            !ui->privacyBox->currentText().isEmpty() &&
419
+            (ui->yesMakeForKids->isChecked() ||
420
+             ui->notMakeForKids->isChecked());
421
+       ui->okButton->setEnabled(enable);
422
+       ui->saveButton->setEnabled(enable);
423
+
424
+       if (ui->checkScheduledLater->checkState() == Qt::Checked) {
425
+           ui->okButton->setText(
426
+               QTStr("YouTube.Actions.Create_Schedule"));
427
+           ui->saveButton->setText(
428
+               QTStr("YouTube.Actions.Create_Schedule_Ready"));
429
+       } else {
430
+           ui->okButton->setText(
431
+               QTStr("YouTube.Actions.Create_GoLive"));
432
+           ui->saveButton->setText(
433
+               QTStr("YouTube.Actions.Create_Ready"));
434
+       }
435
+       ui->pushButton->setVisible(false);
436
+   } else {
437
+       enable = !selectedBroadcast.isEmpty();
438
+       ui->okButton->setEnabled(enable);
439
+       ui->saveButton->setEnabled(enable);
440
+       ui->okButton->setText(QTStr("YouTube.Actions.Choose_GoLive"));
441
+       ui->saveButton->setText(QTStr("YouTube.Actions.Choose_Ready"));
442
+
443
+       ui->pushButton->setVisible(true);
444
+   }
445
+}
446
+bool OBSYoutubeActions::CreateEventAction(YoutubeApiWrappers *api,
447
+                     StreamDescription &stream,
448
+                     bool stream_later,
449
+                     bool ready_broadcast)
450
+{
451
+   YoutubeApiWrappers *apiYouTube = api;
452
+   BroadcastDescription broadcast = {};
453
+   UiToBroadcast(broadcast);
454
+
455
+   if (stream_later) {
456
+       // DateTime parser means that input datetime is a local, so we need to move it
457
+       auto dateTime = ui->scheduledTime->dateTime();
458
+       auto utcDTime = dateTime.addSecs(-dateTime.offsetFromUtc());
459
+       broadcast.schedul_date_time =
460
+           utcDTime.toString(SchedulDateAndTimeFormat);
461
+   } else {
462
+       // stream now is always autostart/autostop
463
+       broadcast.auto_start = true;
464
+       broadcast.auto_stop = true;
465
+       broadcast.schedul_date_time =
466
+           QDateTime::currentDateTimeUtc().toString(
467
+               SchedulDateAndTimeFormat);
468
+   }
469
+
470
+   autostart = broadcast.auto_start;
471
+   autostop = broadcast.auto_stop;
472
+
473
+   blog(LOG_DEBUG, "Scheduled date and time: %s",
474
+        broadcast.schedul_date_time.toStdString().c_str());
475
+   if (!apiYouTube->InsertBroadcast(broadcast)) {
476
+       blog(LOG_DEBUG, "No broadcast created.");
477
+       return false;
478
+   }
479
+   if (!apiYouTube->SetVideoCategory(broadcast.id, broadcast.title,
480
+                     broadcast.description,
481
+                     broadcast.category.id)) {
482
+       blog(LOG_DEBUG, "No category set.");
483
+       return false;
484
+   }
485
+   if (!thumbnailFile.isEmpty()) {
486
+       blog(LOG_INFO, "Uploading thumbnail file \"%s\"...",
487
+            thumbnailFile.toStdString().c_str());
488
+       if (!apiYouTube->SetVideoThumbnail(broadcast.id,
489
+                          thumbnailFile)) {
490
+           blog(LOG_DEBUG, "No thumbnail set.");
491
+           return false;
492
+       }
493
+   }
494
+
495
+   if (!stream_later || ready_broadcast) {
496
+       stream = {"", "", "OBS Studio Video Stream"};
497
+       if (!apiYouTube->InsertStream(stream)) {
498
+           blog(LOG_DEBUG, "No stream created.");
499
+           return false;
500
+       }
501
+       if (!apiYouTube->BindStream(broadcast.id, stream.id)) {
502
+           blog(LOG_DEBUG, "No stream binded.");
503
+           return false;
504
+       }
505
+
506
+       if (broadcast.privacy != "private")
507
+           apiYouTube->SetChatId(broadcast.id);
508
+       else
509
+           apiYouTube->ResetChat();
510
+   }
511
+
512
+   return true;
513
+}
514
+
515
+bool OBSYoutubeActions::ChooseAnEventAction(YoutubeApiWrappers *api,
516
+                       StreamDescription &stream)
517
+{
518
+   YoutubeApiWrappers *apiYouTube = api;
519
+
520
+   json11::Json json;
521
+   if (!apiYouTube->FindBroadcast(selectedBroadcast, json)) {
522
+       blog(LOG_DEBUG, "No broadcast found.");
523
+       return false;
524
+   }
525
+
526
+   std::string boundStreamId =
527
+       json["items"]
528
+           .array_items()[0]["contentDetails"]["boundStreamId"]
529
+           .string_value();
530
+   std::string broadcastPrivacy =
531
+       json["items"]
532
+           .array_items()[0]["status"]["privacyStatus"]
533
+           .string_value();
534
+
535
+   stream.id = boundStreamId.c_str();
536
+   if (!stream.id.isEmpty() && apiYouTube->FindStream(stream.id, json)) {
537
+       auto item = json["items"].array_items()[0];
538
+       auto streamName = item["cdn"]["ingestionInfo"]["streamName"]
539
+                     .string_value();
540
+       auto title = item["snippet"]["title"].string_value();
541
+
542
+       stream.name = streamName.c_str();
543
+       stream.title = title.c_str();
544
+       api->SetBroadcastId(selectedBroadcast);
545
+   } else {
546
+       stream = {"", "", "OBS Studio Video Stream"};
547
+       if (!apiYouTube->InsertStream(stream)) {
548
+           blog(LOG_DEBUG, "No stream created.");
549
+           return false;
550
+       }
551
+       if (!apiYouTube->BindStream(selectedBroadcast, stream.id)) {
552
+           blog(LOG_DEBUG, "No stream binded.");
553
+           return false;
554
+       }
555
+   }
556
+
557
+   if (broadcastPrivacy != "private")
558
+       apiYouTube->SetChatId(selectedBroadcast);
559
+   else
560
+       apiYouTube->ResetChat();
561
+
562
+   return true;
563
+}
564
+
565
+void OBSYoutubeActions::ShowErrorDialog(QWidget *parent, QString text)
566
+{
567
+   QMessageBox dlg(parent);
568
+   dlg.setWindowFlags(dlg.windowFlags() & ~Qt::WindowCloseButtonHint);
569
+   dlg.setWindowTitle(QTStr("YouTube.Actions.Error.Title"));
570
+   dlg.setText(text);
571
+   dlg.setTextFormat(Qt::RichText);
572
+   dlg.setIcon(QMessageBox::Warning);
573
+   dlg.setStandardButtons(QMessageBox::StandardButton::Ok);
574
+   dlg.exec();
575
+}
576
+
577
+void OBSYoutubeActions::InitBroadcast()
578
+{
579
+   StreamDescription stream;
580
+   QMessageBox msgBox(this);
581
+   msgBox.setWindowFlags(msgBox.windowFlags() &
582
+                 ~Qt::WindowCloseButtonHint);
583
+   msgBox.setWindowTitle(QTStr("YouTube.Actions.Notify.Title"));
584
+   msgBox.setText(QTStr("YouTube.Actions.Notify.CreatingBroadcast"));
585
+   msgBox.setStandardButtons(QMessageBox::StandardButtons());
586
+
587
+   bool success = false;
588
+   auto action = [&]() {
589
+       if (ui->tabWidget->currentIndex() == 0) {
590
+           success = this->CreateEventAction(
591
+               apiYouTube, stream,
592
+               ui->checkScheduledLater->isChecked());
593
+       } else {
594
+           success = this->ChooseAnEventAction(apiYouTube, stream);
595
+       };
596
+       QMetaObject::invokeMethod(&msgBox, "accept",
597
+                     Qt::QueuedConnection);
598
+   };
599
+   QScopedPointer<QThread> thread(CreateQThread(action));
600
+   thread->start();
601
+   msgBox.exec();
602
+   thread->wait();
603
+
604
+   if (success) {
605
+       if (ui->tabWidget->currentIndex() == 0) {
606
+           // Stream later usecase.
607
+           if (ui->checkScheduledLater->isChecked()) {
608
+               QMessageBox msg(this);
609
+               msg.setWindowTitle(QTStr(
610
+                   "YouTube.Actions.EventCreated.Title"));
611
+               msg.setText(QTStr(
612
+                   "YouTube.Actions.EventCreated.Text"));
613
+               msg.setStandardButtons(QMessageBox::Ok);
614
+               msg.exec();
615
+               // Close dialog without start streaming.
616
+               Cancel();
617
+           } else {
618
+               // Stream now usecase.
619
+               blog(LOG_DEBUG, "New valid stream: %s",
620
+                    QT_TO_UTF8(stream.name));
621
+               emit ok(QT_TO_UTF8(stream.id),
622
+                   QT_TO_UTF8(stream.name), true, true,
623
+                   true);
624
+               Accept();
625
+           }
626
+       } else {
627
+           // Stream to precreated broadcast usecase.
628
+           emit ok(QT_TO_UTF8(stream.id), QT_TO_UTF8(stream.name),
629
+               autostart, autostop, true);
630
+           Accept();
631
+       }
632
+   } else {
633
+       // Fail.
634
+       auto last_error = apiYouTube->GetLastError();
635
+       if (last_error.isEmpty())
636
+           last_error = QTStr("YouTube.Actions.Error.YouTubeApi");
637
+       if (!apiYouTube->GetTranslatedError(last_error))
638
+           last_error =
639
+               QTStr("YouTube.Actions.Error.NoBroadcastCreated")
640
+                   .arg(last_error);
641
+
642
+       ShowErrorDialog(this, last_error);
643
+   }
644
+}
645
+
646
+void OBSYoutubeActions::ReadyBroadcast()
647
+{
648
+   StreamDescription stream;
649
+   QMessageBox msgBox(this);
650
+   msgBox.setWindowFlags(msgBox.windowFlags() &
651
+                 ~Qt::WindowCloseButtonHint);
652
+   msgBox.setWindowTitle(QTStr("YouTube.Actions.Notify.Title"));
653
+   msgBox.setText(QTStr("YouTube.Actions.Notify.CreatingBroadcast"));
654
+   msgBox.setStandardButtons(QMessageBox::StandardButtons());
655
+
656
+   bool success = false;
657
+   auto action = [&]() {
658
+       if (ui->tabWidget->currentIndex() == 0) {
659
+           success = this->CreateEventAction(
660
+               apiYouTube, stream,
661
+               ui->checkScheduledLater->isChecked(), true);
662
+       } else {
663
+           success = this->ChooseAnEventAction(apiYouTube, stream);
664
+       };
665
+       QMetaObject::invokeMethod(&msgBox, "accept",
666
+                     Qt::QueuedConnection);
667
+   };
668
+   QScopedPointer<QThread> thread(CreateQThread(action));
669
+   thread->start();
670
+   msgBox.exec();
671
+   thread->wait();
672
+
673
+   if (success) {
674
+       emit ok(QT_TO_UTF8(stream.id), QT_TO_UTF8(stream.name),
675
+           autostart, autostop, false);
676
+       Accept();
677
+   } else {
678
+       // Fail.
679
+       auto last_error = apiYouTube->GetLastError();
680
+       if (last_error.isEmpty())
681
+           last_error = QTStr("YouTube.Actions.Error.YouTubeApi");
682
+       if (!apiYouTube->GetTranslatedError(last_error))
683
+           last_error =
684
+               QTStr("YouTube.Actions.Error.NoBroadcastCreated")
685
+                   .arg(last_error);
686
+
687
+       ShowErrorDialog(this, last_error);
688
+   }
689
+}
690
+
691
+void OBSYoutubeActions::UiToBroadcast(BroadcastDescription &broadcast)
692
+{
693
+   broadcast.title = ui->title->text();
694
+   // ToDo: UI warning rather than silent truncation
695
+   broadcast.description = ui->description->toPlainText().left(5000);
696
+   broadcast.privacy = ui->privacyBox->currentData().toString();
697
+   broadcast.category.title = ui->categoryBox->currentText();
698
+   broadcast.category.id = ui->categoryBox->currentData().toString();
699
+   broadcast.made_for_kids = ui->yesMakeForKids->isChecked();
700
+   broadcast.latency = ui->latencyBox->currentData().toString();
701
+   broadcast.auto_start = ui->checkAutoStart->isChecked();
702
+   broadcast.auto_stop = ui->checkAutoStop->isChecked();
703
+   broadcast.dvr = ui->checkDVR->isChecked();
704
+   broadcast.schedul_for_later = ui->checkScheduledLater->isChecked();
705
+   broadcast.projection = ui->check360Video->isChecked() ? "360"
706
+                                 : "rectangular";
707
+
708
+   if (ui->checkRememberSettings->isChecked())
709
+       SaveSettings(broadcast);
710
+}
711
+
712
+void OBSYoutubeActions::SaveSettings(BroadcastDescription &broadcast)
713
+{
714
+   OBSBasic *main = OBSBasic::Get();
715
+
716
+   config_set_string(main->basicConfig, "YouTube", "Title",
717
+             QT_TO_UTF8(broadcast.title));
718
+   config_set_string(main->basicConfig, "YouTube", "Description",
719
+             QT_TO_UTF8(broadcast.description));
720
+   config_set_string(main->basicConfig, "YouTube", "Privacy",
721
+             QT_TO_UTF8(broadcast.privacy));
722
+   config_set_string(main->basicConfig, "YouTube", "CategoryID",
723
+             QT_TO_UTF8(broadcast.category.id));
724
+   config_set_string(main->basicConfig, "YouTube", "Latency",
725
+             QT_TO_UTF8(broadcast.latency));
726
+   config_set_bool(main->basicConfig, "YouTube", "MadeForKids",
727
+           broadcast.made_for_kids);
728
+   config_set_bool(main->basicConfig, "YouTube", "AutoStart",
729
+           broadcast.auto_start);
730
+   config_set_bool(main->basicConfig, "YouTube", "AutoStop",
731
+           broadcast.auto_start);
732
+   config_set_bool(main->basicConfig, "YouTube", "DVR", broadcast.dvr);
733
+   config_set_bool(main->basicConfig, "YouTube", "ScheduleForLater",
734
+           broadcast.schedul_for_later);
735
+   config_set_string(main->basicConfig, "YouTube", "Projection",
736
+             QT_TO_UTF8(broadcast.projection));
737
+   config_set_string(main->basicConfig, "YouTube", "ThumbnailFile",
738
+             QT_TO_UTF8(thumbnailFile));
739
+   config_set_bool(main->basicConfig, "YouTube", "RememberSettings", true);
740
+}
741
+
742
+void OBSYoutubeActions::LoadSettings()
743
+{
744
+   OBSBasic *main = OBSBasic::Get();
745
+
746
+   const char *title =
747
+       config_get_string(main->basicConfig, "YouTube", "Title");
748
+   ui->title->setText(QT_UTF8(title));
749
+
750
+   const char *desc =
751
+       config_get_string(main->basicConfig, "YouTube", "Description");
752
+   ui->description->setPlainText(QT_UTF8(desc));
753
+
754
+   const char *priv =
755
+       config_get_string(main->basicConfig, "YouTube", "Privacy");
756
+   int index = ui->privacyBox->findData(priv);
757
+   ui->privacyBox->setCurrentIndex(index);
758
+
759
+   const char *catID =
760
+       config_get_string(main->basicConfig, "YouTube", "CategoryID");
761
+   index = ui->categoryBox->findData(catID);
762
+   ui->categoryBox->setCurrentIndex(index);
763
+
764
+   const char *latency =
765
+       config_get_string(main->basicConfig, "YouTube", "Latency");
766
+   index = ui->latencyBox->findData(latency);
767
+   ui->latencyBox->setCurrentIndex(index);
768
+
769
+   bool dvr = config_get_bool(main->basicConfig, "YouTube", "DVR");
770
+   ui->checkDVR->setChecked(dvr);
771
+
772
+   bool forKids =
773
+       config_get_bool(main->basicConfig, "YouTube", "MadeForKids");
774
+   if (forKids)
775
+       ui->yesMakeForKids->setChecked(true);
776
+   else
777
+       ui->notMakeForKids->setChecked(true);
778
+
779
+   bool schedLater = config_get_bool(main->basicConfig, "YouTube",
780
+                     "ScheduleForLater");
781
+   ui->checkScheduledLater->setChecked(schedLater);
782
+
783
+   bool autoStart =
784
+       config_get_bool(main->basicConfig, "YouTube", "AutoStart");
785
+   ui->checkAutoStart->setChecked(autoStart);
786
+
787
+   bool autoStop =
788
+       config_get_bool(main->basicConfig, "YouTube", "AutoStop");
789
+   ui->checkAutoStop->setChecked(autoStop);
790
+
791
+   const char *projection =
792
+       config_get_string(main->basicConfig, "YouTube", "Projection");
793
+   if (projection && *projection) {
794
+       if (strcmp(projection, "360") == 0)
795
+           ui->check360Video->setChecked(true);
796
+       else
797
+           ui->check360Video->setChecked(false);
798
+   }
799
+
800
+   const char *thumbFile = config_get_string(main->basicConfig, "YouTube",
801
+                         "ThumbnailFile");
802
+   if (thumbFile && *thumbFile) {
803
+       QFileInfo tFile(thumbFile);
804
+       // Re-check validity before setting path again
805
+       if (tFile.exists() && tFile.size() <= 2 * 1024 * 1024) {
806
+           thumbnailFile = tFile.absoluteFilePath();
807
+           ui->selectedFileName->setText(thumbnailFile);
808
+           ui->selectFileButton->setText(
809
+               QTStr("YouTube.Actions.Thumbnail.ClearFile"));
810
+
811
+           QImageReader imgReader(thumbnailFile);
812
+           imgReader.setAutoTransform(true);
813
+           const QImage newImage = imgReader.read();
814
+           ui->thumbnailPreview->setPixmap(
815
+               QPixmap::fromImage(newImage).scaled(
816
+                   160, 90, Qt::KeepAspectRatio));
817
+       }
818
+   }
819
+}
820
+
821
+void OBSYoutubeActions::OpenYouTubeDashboard()
822
+{
823
+   ChannelDescription channel;
824
+   if (!apiYouTube->GetChannelDescription(channel)) {
825
+       blog(LOG_DEBUG, "Could not get channel description.");
826
+       ShowErrorDialog(
827
+           this,
828
+           apiYouTube->GetLastError().isEmpty()
829
+               ? QTStr("YouTube.Actions.Error.General")
830
+               : QTStr("YouTube.Actions.Error.Text")
831
+                     .arg(apiYouTube->GetLastError()));
832
+       return;
833
+   }
834
+
835
+   //https://studio.youtube.com/channel/UCA9bSfH3KL186kyiUsvi3IA/videos/live?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D
836
+   QString uri =
837
+       QString("https://studio.youtube.com/channel/%1/videos/live?filter=[]&sort={\"columnType\"%3A\"date\"%2C\"sortOrder\"%3A\"DESCENDING\"}")
838
+           .arg(channel.id);
839
+   QDesktopServices::openUrl(uri);
840
+}
841
+
842
+void OBSYoutubeActions::Cancel()
843
+{
844
+   workerThread->stop();
845
+   reject();
846
+}
847
+void OBSYoutubeActions::Accept()
848
+{
849
+   workerThread->stop();
850
+   accept();
851
+}
852
obs-studio-27.1.3.tar.xz/UI/window-youtube-actions.hpp Added
84
 
1
@@ -0,0 +1,82 @@
2
+#pragma once
3
+
4
+#include <QDialog>
5
+#include <QString>
6
+#include <QThread>
7
+
8
+#include "ui_OBSYoutubeActions.h"
9
+#include "youtube-api-wrappers.hpp"
10
+
11
+class WorkerThread : public QThread {
12
+   Q_OBJECT
13
+public:
14
+   WorkerThread(YoutubeApiWrappers *api) : QThread(), apiYouTube(api) {}
15
+
16
+   void stop() { pending = false; }
17
+
18
+protected:
19
+   YoutubeApiWrappers *apiYouTube;
20
+   bool pending = true;
21
+
22
+public slots:
23
+   void run() override;
24
+signals:
25
+   void ready();
26
+   void new_item(const QString &title, const QString &dateTimeString,
27
+             const QString &broadcast, const QString &status,
28
+             bool astart, bool astop);
29
+   void failed();
30
+};
31
+
32
+class OBSYoutubeActions : public QDialog {
33
+   Q_OBJECT
34
+   Q_PROPERTY(QIcon thumbPlaceholder READ GetPlaceholder WRITE
35
+              SetPlaceholder DESIGNABLE true)
36
+
37
+   std::unique_ptr<Ui::OBSYoutubeActions> ui;
38
+
39
+signals:
40
+   void ok(const QString &id, const QString &key, bool autostart,
41
+       bool autostop, bool start_now);
42
+
43
+protected:
44
+   void showEvent(QShowEvent *event);
45
+   void UpdateOkButtonStatus();
46
+
47
+   bool CreateEventAction(YoutubeApiWrappers *api,
48
+                  StreamDescription &stream, bool stream_later,
49
+                  bool ready_broadcast = false);
50
+   bool ChooseAnEventAction(YoutubeApiWrappers *api,
51
+                StreamDescription &stream);
52
+
53
+   void ShowErrorDialog(QWidget *parent, QString text);
54
+
55
+public:
56
+   explicit OBSYoutubeActions(QWidget *parent, Auth *auth,
57
+                  bool broadcastReady);
58
+   virtual ~OBSYoutubeActions() override;
59
+
60
+   bool Valid() { return valid; };
61
+
62
+private:
63
+   void InitBroadcast();
64
+   void ReadyBroadcast();
65
+   void UiToBroadcast(BroadcastDescription &broadcast);
66
+   void OpenYouTubeDashboard();
67
+   void Cancel();
68
+   void Accept();
69
+   void SaveSettings(BroadcastDescription &broadcast);
70
+   void LoadSettings();
71
+
72
+   QIcon GetPlaceholder() { return thumbPlaceholder; }
73
+   void SetPlaceholder(const QIcon &icon) { thumbPlaceholder = icon; }
74
+
75
+   QString selectedBroadcast;
76
+   bool autostart, autostop;
77
+   bool valid = false;
78
+   bool broadcastReady = false;
79
+   YoutubeApiWrappers *apiYouTube;
80
+   WorkerThread *workerThread;
81
+   QString thumbnailFile;
82
+   QIcon thumbPlaceholder;
83
+};
84
obs-studio-27.0.1.tar.xz/UI/xdg-data/com.obsproject.Studio.desktop -> obs-studio-27.1.3.tar.xz/UI/xdg-data/com.obsproject.Studio.desktop Changed
64
 
1
@@ -11,6 +11,8 @@
2
 StartupNotify=true
3
 StartupWMClass=obs
4
 
5
+GenericName[an_ES]=Programa de retransmisión/gravación
6
+Comment[an_ES]=Program de retransmisión/gravación libre y de codigo ubierto
7
 GenericName[ar_SA]=برامج البث / التسجيل
8
 Comment[ar_SA]=برنامج بث / تسجيل مجاني ومفتوح المصدر
9
 GenericName[bn_BD]=স্ট্রিমিং/রেকর্ডিং সফটওয়্যার
10
@@ -27,12 +29,14 @@
11
 Comment[el_GR]=Δωρεαν Λογισμικό Streaming/Kαταγραφή ανοιχτου κωδικα
12
 GenericName[en_GB]=Streaming/Recording Software
13
 Comment[en_GB]=Free and Open Source Streaming/Recording Software
14
-GenericName[es_ES]=Software de retransmisión/grabación
15
-Comment[es_ES]=Software de retransmisión/grabación de código abierto y gratuito
16
+GenericName[es_ES]=Disfusion digital/ Software de grabacion
17
+Comment[es_ES]=Difusion Digital/Software de grabacion Gratis y con Fuentes Abiertas
18
 GenericName[et_EE]=Video voogesituse ja salvestuse tarkvara
19
 Comment[et_EE]=Tasuta ja avatud lähtekoodiga video voogesituse ja salvestuse tarkvara
20
 GenericName[fa_IR]=نرم افزار جریان/ضبط
21
 Comment[fa_IR]=نرم افزار منبع باز و رایگان جریان/ضبط
22
+GenericName[fi_FI]=Striimaus-/tallennusohjelmisto
23
+Comment[fi_FI]=Ilmainen ja avoimen lähdekoodin striimaus-/tallennusohjelmisto
24
 GenericName[fil_PH]=Software para sa Streaming/Recording
25
 Comment[fil_PH]=Libre at Open Source na Streaming/Recording Software
26
 GenericName[fr_FR]=Logiciel de diffusion/enregistrement
27
@@ -43,20 +47,26 @@
28
 Comment[he_IL]=תכנה חינמית בקוד פתוח לשידורים חיים ולהקלטה
29
 GenericName[hi_IN]=स्ट्रीमिंग/रिकॉर्डिंग सॉफ्टवेयर
30
 Comment[hi_IN]=स्वतंत्र एवं खुले स्रोत वाला स्ट्रीमिंग/रिकॉर्डिंग सॉफ्टवेयर
31
+GenericName[hr_HR]=Softver za emitiranje/snimanje
32
+Comment[hr_HR]=Slobodan softver otvorenog koda za emitiranje/snimanje
33
 GenericName[hu_HU]=Közvetítő/rögzítő szoftver
34
 Comment[hu_HU]=Szabad és nyílt forráskódú közvetítő/rögzítő szoftver
35
 GenericName[id_ID]=Perangkat Lunak Streaming/Perekaman
36
 Comment[id_ID]=Perangkat Lunak Streaming/Perekaman Gratis dan Sumber Terbuka
37
-GenericName[it_IT]=Streaming/Software Di Registrazione
38
+GenericName[it_IT]=Software per dirette e registrazione schermo
39
 Comment[it_IT]=Software Libero e Open Source Streaming/Registrazione
40
 GenericName[ja_JP]=配信/録画ソフトウェア
41
 Comment[ja_JP]=無料のオープンソース配信/録画ソフトウェア
42
 GenericName[ka_GE]=ვიდეოს ეთერში გამშვები/ჩამწერი პროგრამა
43
 Comment[ka_GE]=თავისუფალი და ღია წყაროს მქონე, ვიდეოს ეთერში გამშვები/ჩამწერი პროგრამა
44
+GenericName[kmr_TR]=Nermalava weşandin/tomarkirin-ê
45
+Comment[kmr_TR]=Nermalava weşandin/tomarkirin-ê belaş û çavkaniya azad
46
 GenericName[ko_KR]=방송 및 녹화 프로그램
47
 Comment[ko_KR]=무료 오픈소스 방송 및 녹화 프로그램
48
 GenericName[ms_MY]=Perisian Penstriman/Rakaman
49
 Comment[ms_MY]=Perisian Penstriman/Rakaman Bersumber Terbuka dan Bebas
50
+GenericName[nb_NO]=Strømming- og Opptaksprogramvare
51
+Comment[nb_NO]=Gratis Strømming- og Opptaksprogramvare med Åpen Kildekode
52
 GenericName[nl_NL]=Streaming/Opname Software
53
 Comment[nl_NL]=Vrij en Open Source Streaming/Opname Sofware
54
 GenericName[pl_PL]=Oprogramowanie do transmisji strumieniowej/nagrywania
55
@@ -71,6 +81,8 @@
56
 Comment[ru_RU]=Свободное и открытое ПО для видеостриминга и видеозаписи
57
 GenericName[sk_SK]=Streamovací/Nahrávací Software
58
 Comment[sk_SK]=Bezplatný a otvorený streamovací/nahrávací software
59
+GenericName[sl_SI]=Pretočna/snemalna programska oprema
60
+Comment[sl_SI]=Brezplačni in odprtokodna programska oprema za pretakanje/snemanje
61
 GenericName[sv_SE]=Programvara för strömning/inspelning
62
 Comment[sv_SE]=Fri programvara för strömning/inspelning med öppen källkod
63
 GenericName[tr_TR]=Yayın/Kayıt Yazılımı
64
obs-studio-27.1.3.tar.xz/UI/youtube-api-wrappers.cpp Added
564
 
1
@@ -0,0 +1,562 @@
2
+#include "youtube-api-wrappers.hpp"
3
+
4
+#include <QUrl>
5
+#include <QMimeDatabase>
6
+#include <QFile>
7
+
8
+#include <string>
9
+#include <iostream>
10
+
11
+#include "auth-youtube.hpp"
12
+#include "obs-app.hpp"
13
+#include "qt-wrappers.hpp"
14
+#include "remote-text.hpp"
15
+#include "ui-config.h"
16
+#include "obf.h"
17
+
18
+using namespace json11;
19
+
20
+/* ------------------------------------------------------------------------- */
21
+#define YOUTUBE_LIVE_API_URL "https://www.googleapis.com/youtube/v3"
22
+
23
+#define YOUTUBE_LIVE_STREAM_URL YOUTUBE_LIVE_API_URL "/liveStreams"
24
+#define YOUTUBE_LIVE_BROADCAST_URL YOUTUBE_LIVE_API_URL "/liveBroadcasts"
25
+#define YOUTUBE_LIVE_BROADCAST_TRANSITION_URL \
26
+   YOUTUBE_LIVE_BROADCAST_URL "/transition"
27
+#define YOUTUBE_LIVE_BROADCAST_BIND_URL YOUTUBE_LIVE_BROADCAST_URL "/bind"
28
+
29
+#define YOUTUBE_LIVE_CHANNEL_URL YOUTUBE_LIVE_API_URL "/channels"
30
+#define YOUTUBE_LIVE_TOKEN_URL "https://oauth2.googleapis.com/token"
31
+#define YOUTUBE_LIVE_VIDEOCATEGORIES_URL YOUTUBE_LIVE_API_URL "/videoCategories"
32
+#define YOUTUBE_LIVE_VIDEOS_URL YOUTUBE_LIVE_API_URL "/videos"
33
+#define YOUTUBE_LIVE_THUMBNAIL_URL \
34
+   "https://www.googleapis.com/upload/youtube/v3/thumbnails/set"
35
+
36
+#define DEFAULT_BROADCASTS_PER_QUERY \
37
+   "50" // acceptable values are 0 to 50, inclusive
38
+/* ------------------------------------------------------------------------- */
39
+
40
+bool IsYouTubeService(const std::string &service)
41
+{
42
+   auto it = find_if(youtubeServices.begin(), youtubeServices.end(),
43
+             [&service](const Auth::Def &yt) {
44
+                 return service == yt.service;
45
+             });
46
+   return it != youtubeServices.end();
47
+}
48
+
49
+bool YoutubeApiWrappers::GetTranslatedError(QString &error_message)
50
+{
51
+   QString translated =
52
+       QTStr("YouTube.Errors." + lastErrorReason.toUtf8());
53
+   // No translation found
54
+   if (translated.startsWith("YouTube.Errors."))
55
+       return false;
56
+   error_message = translated;
57
+   return true;
58
+}
59
+
60
+YoutubeApiWrappers::YoutubeApiWrappers(const Def &d) : YoutubeAuth(d) {}
61
+
62
+bool YoutubeApiWrappers::TryInsertCommand(const char *url,
63
+                     const char *content_type,
64
+                     std::string request_type,
65
+                     const char *data, Json &json_out,
66
+                     long *error_code, int data_size)
67
+{
68
+   long httpStatusCode = 0;
69
+
70
+#ifdef _DEBUG
71
+   blog(LOG_DEBUG, "YouTube API command URL: %s", url);
72
+   if (data && data[0] == '{') // only log JSON data
73
+       blog(LOG_DEBUG, "YouTube API command data: %s", data);
74
+#endif
75
+   if (token.empty())
76
+       return false;
77
+   std::string output;
78
+   std::string error;
79
+   // Increase timeout by the time it takes to transfer `data_size` at 1 Mbps
80
+   int timeout = 5 + data_size / 125000;
81
+   bool success = GetRemoteFile(url, output, error, &httpStatusCode,
82
+                    content_type, request_type, data,
83
+                    {"Authorization: Bearer " + token},
84
+                    nullptr, timeout, false, data_size);
85
+   if (error_code)
86
+       *error_code = httpStatusCode;
87
+
88
+   if (!success || output.empty())
89
+       return false;
90
+   json_out = Json::parse(output, error);
91
+#ifdef _DEBUG
92
+   blog(LOG_DEBUG, "YouTube API command answer: %s",
93
+        json_out.dump().c_str());
94
+#endif
95
+   if (!error.empty()) {
96
+       return false;
97
+   }
98
+   return httpStatusCode < 400;
99
+}
100
+
101
+bool YoutubeApiWrappers::UpdateAccessToken()
102
+{
103
+   if (refresh_token.empty()) {
104
+       return false;
105
+   }
106
+
107
+   std::string clientid = YOUTUBE_CLIENTID;
108
+   std::string secret = YOUTUBE_SECRET;
109
+   deobfuscate_str(&clientid[0], YOUTUBE_CLIENTID_HASH);
110
+   deobfuscate_str(&secret[0], YOUTUBE_SECRET_HASH);
111
+
112
+   std::string r_token =
113
+       QUrl::toPercentEncoding(refresh_token.c_str()).toStdString();
114
+   const QString url = YOUTUBE_LIVE_TOKEN_URL;
115
+   const QString data_template = "client_id=%1"
116
+                     "&client_secret=%2"
117
+                     "&refresh_token=%3"
118
+                     "&grant_type=refresh_token";
119
+   const QString data = data_template.arg(QString(clientid.c_str()),
120
+                          QString(secret.c_str()),
121
+                          QString(r_token.c_str()));
122
+   Json json_out;
123
+   bool success = TryInsertCommand(QT_TO_UTF8(url),
124
+                   "application/x-www-form-urlencoded", "",
125
+                   QT_TO_UTF8(data), json_out);
126
+
127
+   if (!success || json_out.object_items().find("error") !=
128
+               json_out.object_items().end())
129
+       return false;
130
+   token = json_out["access_token"].string_value();
131
+   return token.empty() ? false : true;
132
+}
133
+
134
+bool YoutubeApiWrappers::InsertCommand(const char *url,
135
+                      const char *content_type,
136
+                      std::string request_type,
137
+                      const char *data, Json &json_out,
138
+                      int data_size)
139
+{
140
+   long error_code;
141
+   bool success = TryInsertCommand(url, content_type, request_type, data,
142
+                   json_out, &error_code, data_size);
143
+
144
+   if (error_code == 401) {
145
+       // Attempt to update access token and try again
146
+       if (!UpdateAccessToken())
147
+           return false;
148
+       success = TryInsertCommand(url, content_type, request_type,
149
+                      data, json_out, &error_code,
150
+                      data_size);
151
+   }
152
+
153
+   if (json_out.object_items().find("error") !=
154
+       json_out.object_items().end()) {
155
+       blog(LOG_ERROR,
156
+            "YouTube API error:\n\tHTTP status: %d\n\tURL: %s\n\tJSON: %s",
157
+            error_code, url, json_out.dump().c_str());
158
+
159
+       lastError = json_out["error"]["code"].int_value();
160
+       lastErrorReason =
161
+           QString(json_out["error"]["errors"][0]["reason"]
162
+                   .string_value()
163
+                   .c_str());
164
+       lastErrorMessage = QString(
165
+           json_out["error"]["message"].string_value().c_str());
166
+
167
+       // The existence of an error implies non-success even if the HTTP status code disagrees.
168
+       success = false;
169
+   }
170
+   return success;
171
+}
172
+
173
+bool YoutubeApiWrappers::GetChannelDescription(
174
+   ChannelDescription &channel_description)
175
+{
176
+   lastErrorMessage.clear();
177
+   lastErrorReason.clear();
178
+   const QByteArray url = YOUTUBE_LIVE_CHANNEL_URL
179
+       "?part=snippet,contentDetails,statistics"
180
+       "&mine=true";
181
+   Json json_out;
182
+   if (!InsertCommand(url, "application/json", "", nullptr, json_out)) {
183
+       return false;
184
+   }
185
+
186
+   if (json_out["pageInfo"]["totalResults"].int_value() == 0) {
187
+       lastErrorMessage = QTStr("YouTube.Auth.NoChannels");
188
+       return false;
189
+   }
190
+
191
+   channel_description.id =
192
+       QString(json_out["items"][0]["id"].string_value().c_str());
193
+   channel_description.title = QString(
194
+       json_out["items"][0]["snippet"]["title"].string_value().c_str());
195
+   return channel_description.id.isEmpty() ? false : true;
196
+}
197
+
198
+bool YoutubeApiWrappers::InsertBroadcast(BroadcastDescription &broadcast)
199
+{
200
+   lastErrorMessage.clear();
201
+   lastErrorReason.clear();
202
+   const QByteArray url = YOUTUBE_LIVE_BROADCAST_URL
203
+       "?part=snippet,status,contentDetails";
204
+   const Json data = Json::object{
205
+       {"snippet",
206
+        Json::object{
207
+            {"title", QT_TO_UTF8(broadcast.title)},
208
+            {"description", QT_TO_UTF8(broadcast.description)},
209
+            {"scheduledStartTime",
210
+             QT_TO_UTF8(broadcast.schedul_date_time)},
211
+        }},
212
+       {"status",
213
+        Json::object{
214
+            {"privacyStatus", QT_TO_UTF8(broadcast.privacy)},
215
+            {"selfDeclaredMadeForKids", broadcast.made_for_kids},
216
+        }},
217
+       {"contentDetails",
218
+        Json::object{
219
+            {"latencyPreference", QT_TO_UTF8(broadcast.latency)},
220
+            {"enableAutoStart", broadcast.auto_start},
221
+            {"enableAutoStop", broadcast.auto_stop},
222
+            {"enableDvr", broadcast.dvr},
223
+            {"projection", QT_TO_UTF8(broadcast.projection)},
224
+            {
225
+                "monitorStream",
226
+                Json::object{
227
+                    {"enableMonitorStream", false},
228
+                },
229
+            },
230
+        }},
231
+   };
232
+   Json json_out;
233
+   if (!InsertCommand(url, "application/json", "", data.dump().c_str(),
234
+              json_out)) {
235
+       return false;
236
+   }
237
+   broadcast.id = QString(json_out["id"].string_value().c_str());
238
+   return broadcast.id.isEmpty() ? false : true;
239
+}
240
+
241
+bool YoutubeApiWrappers::InsertStream(StreamDescription &stream)
242
+{
243
+   lastErrorMessage.clear();
244
+   lastErrorReason.clear();
245
+   const QByteArray url = YOUTUBE_LIVE_STREAM_URL
246
+       "?part=snippet,cdn,status,contentDetails";
247
+   const Json data = Json::object{
248
+       {"snippet",
249
+        Json::object{
250
+            {"title", QT_TO_UTF8(stream.title)},
251
+        }},
252
+       {"cdn",
253
+        Json::object{
254
+            {"frameRate", "variable"},
255
+            {"ingestionType", "rtmp"},
256
+            {"resolution", "variable"},
257
+        }},
258
+       {"contentDetails", Json::object{{"isReusable", false}}},
259
+   };
260
+   Json json_out;
261
+   if (!InsertCommand(url, "application/json", "", data.dump().c_str(),
262
+              json_out)) {
263
+       return false;
264
+   }
265
+   stream.id = QString(json_out["id"].string_value().c_str());
266
+   stream.name = QString(json_out["cdn"]["ingestionInfo"]["streamName"]
267
+                     .string_value()
268
+                     .c_str());
269
+   return stream.id.isEmpty() ? false : true;
270
+}
271
+
272
+bool YoutubeApiWrappers::BindStream(const QString broadcast_id,
273
+                   const QString stream_id)
274
+{
275
+   lastErrorMessage.clear();
276
+   lastErrorReason.clear();
277
+   const QString url_template = YOUTUBE_LIVE_BROADCAST_BIND_URL
278
+       "?id=%1"
279
+       "&streamId=%2"
280
+       "&part=id,snippet,contentDetails,status";
281
+   const QString url = url_template.arg(broadcast_id, stream_id);
282
+   const Json data = Json::object{};
283
+   this->broadcast_id = broadcast_id;
284
+   Json json_out;
285
+   return InsertCommand(QT_TO_UTF8(url), "application/json", "",
286
+                data.dump().c_str(), json_out);
287
+}
288
+
289
+bool YoutubeApiWrappers::GetBroadcastsList(Json &json_out, const QString &page,
290
+                      const QString &status)
291
+{
292
+   lastErrorMessage.clear();
293
+   lastErrorReason.clear();
294
+   QByteArray url = YOUTUBE_LIVE_BROADCAST_URL
295
+       "?part=snippet,contentDetails,status"
296
+       "&broadcastType=all&maxResults=" DEFAULT_BROADCASTS_PER_QUERY;
297
+
298
+   if (status.isEmpty())
299
+       url += "&mine=true";
300
+   else
301
+       url += "&broadcastStatus=" + status.toUtf8();
302
+
303
+   if (!page.isEmpty())
304
+       url += "&pageToken=" + page.toUtf8();
305
+   return InsertCommand(url, "application/json", "", nullptr, json_out);
306
+}
307
+
308
+bool YoutubeApiWrappers::GetVideoCategoriesList(
309
+   QVector<CategoryDescription> &category_list_out)
310
+{
311
+   lastErrorMessage.clear();
312
+   lastErrorReason.clear();
313
+   const QString url_template = YOUTUBE_LIVE_VIDEOCATEGORIES_URL
314
+       "?part=snippet"
315
+       "&regionCode=%1"
316
+       "&hl=%2";
317
+   /*
318
+   * All OBS locale regions aside from "US" are missing category id 29
319
+   * ("Nonprofits & Activism"), but it is still available to channels
320
+   * set to those regions via the YouTube Studio website.
321
+   * To work around this inconsistency with the API all locales will
322
+   * use the "US" region and only set the language part for localisation.
323
+   * It is worth noting that none of the regions available on YouTube
324
+   * feature any category not also available to the "US" region.
325
+   */
326
+   QString url = url_template.arg("US", QLocale().name());
327
+
328
+   Json json_out;
329
+   if (!InsertCommand(QT_TO_UTF8(url), "application/json", "", nullptr,
330
+              json_out)) {
331
+       if (lastErrorReason != "unsupportedLanguageCode" &&
332
+           lastErrorReason != "invalidLanguage")
333
+           return false;
334
+       // Try again with en-US if YouTube error indicates an unsupported locale
335
+       url = url_template.arg("US", "en_US");
336
+       if (!InsertCommand(QT_TO_UTF8(url), "application/json", "",
337
+                  nullptr, json_out))
338
+           return false;
339
+   }
340
+   category_list_out = {};
341
+   for (auto &j : json_out["items"].array_items()) {
342
+       // Assignable only.
343
+       if (j["snippet"]["assignable"].bool_value()) {
344
+           category_list_out.push_back(
345
+               {j["id"].string_value().c_str(),
346
+                j["snippet"]["title"].string_value().c_str()});
347
+       }
348
+   }
349
+   return category_list_out.isEmpty() ? false : true;
350
+}
351
+
352
+bool YoutubeApiWrappers::SetVideoCategory(const QString &video_id,
353
+                     const QString &video_title,
354
+                     const QString &video_description,
355
+                     const QString &categorie_id)
356
+{
357
+   lastErrorMessage.clear();
358
+   lastErrorReason.clear();
359
+   const QByteArray url = YOUTUBE_LIVE_VIDEOS_URL "?part=snippet";
360
+   const Json data = Json::object{
361
+       {"id", QT_TO_UTF8(video_id)},
362
+       {"snippet",
363
+        Json::object{
364
+            {"title", QT_TO_UTF8(video_title)},
365
+            {"description", QT_TO_UTF8(video_description)},
366
+            {"categoryId", QT_TO_UTF8(categorie_id)},
367
+        }},
368
+   };
369
+   Json json_out;
370
+   return InsertCommand(url, "application/json", "PUT",
371
+                data.dump().c_str(), json_out);
372
+}
373
+
374
+bool YoutubeApiWrappers::SetVideoThumbnail(const QString &video_id,
375
+                      const QString &thumbnail_file)
376
+{
377
+   lastErrorMessage.clear();
378
+   lastErrorReason.clear();
379
+
380
+   // Make sure the file hasn't been deleted since originally selecting it
381
+   if (!QFile::exists(thumbnail_file)) {
382
+       lastErrorMessage = QTStr("YouTube.Actions.Error.FileMissing");
383
+       return false;
384
+   }
385
+
386
+   QFile thumbFile(thumbnail_file);
387
+   if (!thumbFile.open(QFile::ReadOnly)) {
388
+       lastErrorMessage =
389
+           QTStr("YouTube.Actions.Error.FileOpeningFailed");
390
+       return false;
391
+   }
392
+
393
+   const QByteArray fileContents = thumbFile.readAll();
394
+   const QString mime =
395
+       QMimeDatabase().mimeTypeForData(fileContents).name();
396
+
397
+   const QString url = YOUTUBE_LIVE_THUMBNAIL_URL "?videoId=" + video_id;
398
+   Json json_out;
399
+   return InsertCommand(QT_TO_UTF8(url), QT_TO_UTF8(mime), "POST",
400
+                fileContents.constData(), json_out,
401
+                fileContents.size());
402
+}
403
+
404
+bool YoutubeApiWrappers::StartBroadcast(const QString &broadcast_id)
405
+{
406
+   lastErrorMessage.clear();
407
+   lastErrorReason.clear();
408
+
409
+   if (!ResetBroadcast(broadcast_id))
410
+       return false;
411
+
412
+   const QString url_template = YOUTUBE_LIVE_BROADCAST_TRANSITION_URL
413
+       "?id=%1"
414
+       "&broadcastStatus=%2"
415
+       "&part=status";
416
+   const QString live = url_template.arg(broadcast_id, "live");
417
+   Json json_out;
418
+   return InsertCommand(QT_TO_UTF8(live), "application/json", "POST", "{}",
419
+                json_out);
420
+}
421
+
422
+bool YoutubeApiWrappers::StartLatestBroadcast()
423
+{
424
+   return StartBroadcast(this->broadcast_id);
425
+}
426
+
427
+bool YoutubeApiWrappers::StopBroadcast(const QString &broadcast_id)
428
+{
429
+   lastErrorMessage.clear();
430
+   lastErrorReason.clear();
431
+
432
+   const QString url_template = YOUTUBE_LIVE_BROADCAST_TRANSITION_URL
433
+       "?id=%1"
434
+       "&broadcastStatus=complete"
435
+       "&part=status";
436
+   const QString url = url_template.arg(broadcast_id);
437
+   Json json_out;
438
+   return InsertCommand(QT_TO_UTF8(url), "application/json", "POST", "{}",
439
+                json_out);
440
+}
441
+
442
+bool YoutubeApiWrappers::StopLatestBroadcast()
443
+{
444
+   return StopBroadcast(this->broadcast_id);
445
+}
446
+
447
+void YoutubeApiWrappers::SetBroadcastId(QString &broadcast_id)
448
+{
449
+   this->broadcast_id = broadcast_id;
450
+}
451
+
452
+QString YoutubeApiWrappers::GetBroadcastId()
453
+{
454
+   return this->broadcast_id;
455
+}
456
+
457
+bool YoutubeApiWrappers::ResetBroadcast(const QString &broadcast_id)
458
+{
459
+   lastErrorMessage.clear();
460
+   lastErrorReason.clear();
461
+
462
+   const QString url_template = YOUTUBE_LIVE_BROADCAST_URL
463
+       "?part=id,snippet,contentDetails,status"
464
+       "&id=%1";
465
+   const QString url = url_template.arg(broadcast_id);
466
+   Json json_out;
467
+
468
+   if (!InsertCommand(QT_TO_UTF8(url), "application/json", "", nullptr,
469
+              json_out))
470
+       return false;
471
+
472
+   const QString put = YOUTUBE_LIVE_BROADCAST_URL
473
+       "?part=id,snippet,contentDetails,status";
474
+
475
+   auto snippet = json_out["items"][0]["snippet"];
476
+   auto status = json_out["items"][0]["status"];
477
+   auto contentDetails = json_out["items"][0]["contentDetails"];
478
+   auto monitorStream = contentDetails["monitorStream"];
479
+
480
+   const Json data = Json::object{
481
+       {"id", QT_TO_UTF8(broadcast_id)},
482
+       {"snippet",
483
+        Json::object{
484
+            {"title", snippet["title"]},
485
+            {"description", snippet["description"]},
486
+            {"scheduledStartTime", snippet["scheduledStartTime"]},
487
+            {"scheduledEndTime", snippet["scheduledEndTime"]},
488
+        }},
489
+       {"status",
490
+        Json::object{
491
+            {"privacyStatus", status["privacyStatus"]},
492
+            {"madeForKids", status["madeForKids"]},
493
+            {"selfDeclaredMadeForKids",
494
+             status["selfDeclaredMadeForKids"]},
495
+        }},
496
+       {"contentDetails",
497
+        Json::object{
498
+            {
499
+                "monitorStream",
500
+                Json::object{
501
+                    {"enableMonitorStream", false},
502
+                    {"broadcastStreamDelayMs",
503
+                     monitorStream["broadcastStreamDelayMs"]},
504
+                },
505
+            },
506
+            {"enableAutoStart", contentDetails["enableAutoStart"]},
507
+            {"enableAutoStop", contentDetails["enableAutoStop"]},
508
+            {"enableClosedCaptions",
509
+             contentDetails["enableClosedCaptions"]},
510
+            {"enableDvr", contentDetails["enableDvr"]},
511
+            {"enableContentEncryption",
512
+             contentDetails["enableContentEncryption"]},
513
+            {"enableEmbed", contentDetails["enableEmbed"]},
514
+            {"recordFromStart", contentDetails["recordFromStart"]},
515
+            {"startWithSlate", contentDetails["startWithSlate"]},
516
+        }},
517
+   };
518
+   return InsertCommand(QT_TO_UTF8(put), "application/json", "PUT",
519
+                data.dump().c_str(), json_out);
520
+}
521
+
522
+bool YoutubeApiWrappers::FindBroadcast(const QString &id,
523
+                      json11::Json &json_out)
524
+{
525
+   lastErrorMessage.clear();
526
+   lastErrorReason.clear();
527
+   QByteArray url = YOUTUBE_LIVE_BROADCAST_URL
528
+       "?part=id,snippet,contentDetails,status"
529
+       "&broadcastType=all&maxResults=1";
530
+   url += "&id=" + id.toUtf8();
531
+
532
+   if (!InsertCommand(url, "application/json", "", nullptr, json_out))
533
+       return false;
534
+
535
+   auto items = json_out["items"].array_items();
536
+   if (items.size() != 1) {
537
+       lastErrorMessage =
538
+           QTStr("YouTube.Actions.Error.BroadcastNotFound");
539
+       return false;
540
+   }
541
+
542
+   return true;
543
+}
544
+
545
+bool YoutubeApiWrappers::FindStream(const QString &id, json11::Json &json_out)
546
+{
547
+   lastErrorMessage.clear();
548
+   lastErrorReason.clear();
549
+   QByteArray url = YOUTUBE_LIVE_STREAM_URL "?part=id,snippet,cdn,status"
550
+                        "&maxResults=1";
551
+   url += "&id=" + id.toUtf8();
552
+
553
+   if (!InsertCommand(url, "application/json", "", nullptr, json_out))
554
+       return false;
555
+
556
+   auto items = json_out["items"].array_items();
557
+   if (items.size() != 1) {
558
+       lastErrorMessage = "No active broadcast found.";
559
+       return false;
560
+   }
561
+
562
+   return true;
563
+}
564
obs-studio-27.1.3.tar.xz/UI/youtube-api-wrappers.hpp Added
94
 
1
@@ -0,0 +1,92 @@
2
+#pragma once
3
+
4
+#include "auth-youtube.hpp"
5
+
6
+#include <json11.hpp>
7
+#include <QString>
8
+
9
+struct ChannelDescription {
10
+   QString id;
11
+   QString title;
12
+};
13
+
14
+struct StreamDescription {
15
+   QString id;
16
+   QString name;
17
+   QString title;
18
+};
19
+
20
+struct CategoryDescription {
21
+   QString id;
22
+   QString title;
23
+};
24
+
25
+struct BroadcastDescription {
26
+   QString id;
27
+   QString title;
28
+   QString description;
29
+   QString privacy;
30
+   CategoryDescription category;
31
+   QString latency;
32
+   bool made_for_kids;
33
+   bool auto_start;
34
+   bool auto_stop;
35
+   bool dvr;
36
+   bool schedul_for_later;
37
+   QString schedul_date_time;
38
+   QString projection;
39
+};
40
+
41
+bool IsYouTubeService(const std::string &service);
42
+
43
+class YoutubeApiWrappers : public YoutubeAuth {
44
+   Q_OBJECT
45
+
46
+   bool TryInsertCommand(const char *url, const char *content_type,
47
+                 std::string request_type, const char *data,
48
+                 json11::Json &ret, long *error_code = nullptr,
49
+                 int data_size = 0);
50
+   bool UpdateAccessToken();
51
+   bool InsertCommand(const char *url, const char *content_type,
52
+              std::string request_type, const char *data,
53
+              json11::Json &ret, int data_size = 0);
54
+
55
+public:
56
+   YoutubeApiWrappers(const Def &d);
57
+
58
+   bool GetChannelDescription(ChannelDescription &channel_description);
59
+   bool InsertBroadcast(BroadcastDescription &broadcast);
60
+   bool InsertStream(StreamDescription &stream);
61
+   bool BindStream(const QString broadcast_id, const QString stream_id);
62
+   bool GetBroadcastsList(json11::Json &json_out, const QString &page,
63
+                  const QString &status);
64
+   bool
65
+   GetVideoCategoriesList(QVector<CategoryDescription> &category_list_out);
66
+   bool SetVideoCategory(const QString &video_id,
67
+                 const QString &video_title,
68
+                 const QString &video_description,
69
+                 const QString &categorie_id);
70
+   bool SetVideoThumbnail(const QString &video_id,
71
+                  const QString &thumbnail_file);
72
+   bool StartBroadcast(const QString &broadcast_id);
73
+   bool StopBroadcast(const QString &broadcast_id);
74
+   bool ResetBroadcast(const QString &broadcast_id);
75
+   bool StartLatestBroadcast();
76
+   bool StopLatestBroadcast();
77
+
78
+   void SetBroadcastId(QString &broadcast_id);
79
+   QString GetBroadcastId();
80
+
81
+   bool FindBroadcast(const QString &id, json11::Json &json_out);
82
+   bool FindStream(const QString &id, json11::Json &json_out);
83
+
84
+   QString GetLastError() { return lastErrorMessage; };
85
+   bool GetTranslatedError(QString &error_message);
86
+
87
+private:
88
+   QString broadcast_id;
89
+
90
+   int lastError;
91
+   QString lastErrorMessage;
92
+   QString lastErrorReason;
93
+};
94
obs-studio-27.1.3.tar.xz/additional_install_files/.gitignore Added
18
 
1
@@ -0,0 +1,16 @@
2
+*
3
+!.gitignore
4
+!data/
5
+!exec32/
6
+!exec32r/
7
+!exec32d/
8
+!exec64/
9
+!exec64r/
10
+!exec64d/
11
+!libs32/
12
+!libs32r/
13
+!libs32d/
14
+!libs64/
15
+!libs64r/
16
+!libs64d/
17
+!misc/
18
obs-studio-27.1.3.tar.xz/additional_install_files/data/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/exec32/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/exec32d/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/exec32r/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/exec64/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/exec64d/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/exec64r/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/libs32/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/libs32d/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/libs32r/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/libs64/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/libs64d/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/libs64r/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.1.3.tar.xz/additional_install_files/misc/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*
3
+!.gitignore
4
obs-studio-27.0.1.tar.xz/cmake/Modules/CopyMSVCBins.cmake -> obs-studio-27.1.3.tar.xz/cmake/Modules/CopyMSVCBins.cmake Changed
32
 
1
@@ -173,7 +173,9 @@
2
 file(GLOB QT_DEBUG_ICONENGINE_BIN_FILES
3
    "${Qt5Core_DIR}/../../../plugins/iconengines/qsvgicond.dll")
4
 file(GLOB QT_DEBUG_IMAGEFORMATS_BIN_FILES
5
-   "${Qt5Core_DIR}/../../../plugins/imageformats/qsvgd.dll")
6
+   "${Qt5Core_DIR}/../../../plugins/imageformats/qsvgd.dll"
7
+   "${Qt5Core_DIR}/../../../plugins/imageformats/qgifd.dll"
8
+   "${Qt5Core_DIR}/../../../plugins/imageformats/qjpegd.dll")
9
 
10
 
11
 file(GLOB QT_BIN_FILES
12
@@ -192,7 +194,9 @@
13
 file(GLOB QT_ICONENGINE_BIN_FILES
14
    "${Qt5Core_DIR}/../../../plugins/iconengines/qsvgicon.dll") 
15
 file(GLOB QT_IMAGEFORMATS_BIN_FILES
16
-   "${Qt5Core_DIR}/../../../plugins/imageformats/qsvg.dll")    
17
+   "${Qt5Core_DIR}/../../../plugins/imageformats/qsvg.dll"
18
+   "${Qt5Core_DIR}/../../../plugins/imageformats/qgif.dll"
19
+   "${Qt5Core_DIR}/../../../plugins/imageformats/qjpeg.dll")
20
 
21
 file(GLOB QT_ICU_BIN_FILES
22
    "${Qt5Core_DIR}/../../../bin/icu*.dll")
23
@@ -236,7 +240,7 @@
24
 set(ALL_IMAGEFORMATS_REL_BIN_FILES
25
    ${QT_IMAGEFORMATS_BIN_FILES})
26
 set(ALL_IMAGEFORMATS_DBG_BIN_FILES
27
-   ${QT_DEBUG_ICONENGINE_BIN_FILES})
28
+   ${QT_DEBUG_IMAGEFORMATS_BIN_FILES})
29
 
30
 foreach(list
31
        ALL_BASE_BIN_FILES ALL_REL_BIN_FILES ALL_DBG_BIN_FILES
32
obs-studio-27.1.3.tar.xz/cmake/Modules/FindLibdrm.cmake Added
35
 
1
@@ -0,0 +1,33 @@
2
+# Once done these will be defined:
3
+#
4
+#  LIBDRM_FOUND
5
+#  LIBDRM_INCLUDE_DIRS
6
+#  LIBDRM_LIBRARIES
7
+
8
+find_package(PkgConfig QUIET)
9
+if (PKG_CONFIG_FOUND)
10
+   pkg_check_modules(_LIBDRM QUIET libdrm)
11
+endif()
12
+
13
+find_path(LIBDRM_INCLUDE_DIR
14
+   NAMES libdrm/drm_fourcc.h
15
+   HINTS
16
+       ${_LIBDRM_INCLUDE_DIRS}
17
+   PATHS
18
+       /usr/include /usr/local/include /opt/local/include)
19
+
20
+find_library(LIBDRM_LIB
21
+   NAMES drm libdrm
22
+   HINTS
23
+       ${_LIBDRM_LIBRARY_DIRS}
24
+   PATHS
25
+       /usr/lib /usr/local/lib /opt/local/lib)
26
+
27
+include(FindPackageHandleStandardArgs)
28
+find_package_handle_standard_args(Libdrm DEFAULT_MSG LIBDRM_LIB LIBDRM_INCLUDE_DIR)
29
+mark_as_advanced(LIBDRM_INCLUDE_DIR LIBDRM_LIB)
30
+
31
+if(LIBDRM_FOUND)
32
+   set(LIBDRM_INCLUDE_DIRS ${LIBDRM_INCLUDE_DIR})
33
+   set(LIBDRM_LIBRARIES ${LIBDRM_LIB})
34
+endif()
35
obs-studio-27.1.3.tar.xz/deps/jansson/.gitignore Added
32
 
1
@@ -0,0 +1,30 @@
2
+*~
3
+*.o
4
+*.a
5
+.libs
6
+.deps
7
+Makefile
8
+Makefile.in
9
+aclocal.m4
10
+autom4te.cache
11
+config.guess
12
+config.h
13
+config.h.in
14
+config.log
15
+config.status
16
+config.sub
17
+configure
18
+depcomp
19
+install-sh
20
+libtool
21
+ltmain.sh
22
+missing
23
+compile
24
+test-driver
25
+*.lo
26
+*.la
27
+stamp-h1
28
+*.pyc
29
+*.pc
30
+/src/jansson_config.h
31
+*.exe
32
obs-studio-27.1.3.tar.xz/deps/jansson/doc/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+_build/
3
obs-studio-27.1.3.tar.xz/deps/jansson/test/.gitignore Added
23
 
1
@@ -0,0 +1,21 @@
2
+logs
3
+bin/json_process
4
+suites/api/test_array
5
+suites/api/test_copy
6
+suites/api/test_cpp
7
+suites/api/test_dump
8
+suites/api/test_dump_callback
9
+suites/api/test_equal
10
+suites/api/test_load
11
+suites/api/test_loadb
12
+suites/api/test_memory_funcs
13
+suites/api/test_number
14
+suites/api/test_object
15
+suites/api/test_pack
16
+suites/api/test_simple
17
+suites/api/test_unpack
18
+suites/api/test_load_callback
19
+run-suites.log
20
+run-suites.trs
21
+test-suite.log
22
+
23
obs-studio-27.1.3.tar.xz/deps/libcaption/.gitignore Added
59
 
1
@@ -0,0 +1,57 @@
2
+# Object files
3
+*.o
4
+*.ko
5
+*.obj
6
+*.elf
7
+
8
+# Precompiled Headers
9
+*.gch
10
+*.pch
11
+
12
+# Libraries
13
+*.lib
14
+*.a
15
+*.la
16
+*.lo
17
+
18
+# Shared objects (inc. Windows DLLs)
19
+*.dll
20
+*.so
21
+*.so.*
22
+*.dylib
23
+
24
+# Executables
25
+*.exe
26
+*.out
27
+*.app
28
+*.i*86
29
+*.x86_64
30
+*.hex
31
+
32
+# Debug files
33
+*.dSYM/
34
+
35
+# cmake files
36
+Makefile
37
+CMakeFiles
38
+CMakeCache.txt
39
+cmake_install.cmake
40
+
41
+# Bin
42
+scc2srt
43
+srt2vtt
44
+flv2srt
45
+ts2srt
46
+flv+srt
47
+srtdump
48
+party
49
+rtmpspit
50
+
51
+# Autogenerated files
52
+# src/eia608.c
53
+
54
+# Mac
55
+.DS_Store
56
+
57
+#Doc
58
+Doxyfile
59
obs-studio-27.0.1.tar.xz/deps/media-playback/media-playback/decode.c -> obs-studio-27.1.3.tar.xz/deps/media-playback/media-playback/decode.c Changed
7
 
1
@@ -435,4 +435,5 @@
2
    d->eof = false;
3
    d->frame_pts = 0;
4
    d->frame_ready = false;
5
+   d->next_pts = 0;
6
 }
7
obs-studio-27.0.1.tar.xz/deps/media-playback/media-playback/media.c -> obs-studio-27.1.3.tar.xz/deps/media-playback/media-playback/media.c Changed
75
 
1
@@ -301,9 +301,13 @@
2
    return base_ts;
3
 }
4
 
5
+/* maximum timestamp variance in nanoseconds */
6
+#define MAX_TS_VAR 2000000000LL
7
+
8
 static inline bool mp_media_can_play_frame(mp_media_t *m, struct mp_decode *d)
9
 {
10
-   return d->frame_ready && d->frame_pts <= m->next_pts_ns;
11
+   return d->frame_ready && (d->frame_pts <= m->next_pts_ns ||
12
+                 (d->frame_pts - m->next_pts_ns > MAX_TS_VAR));
13
 }
14
 
15
 static void mp_media_next_audio(mp_media_t *m)
16
@@ -501,8 +505,6 @@
17
    bool stopping;
18
    bool active;
19
 
20
-   seek_to(m, m->fmt->start_time);
21
-
22
    int64_t next_ts = mp_media_get_base_pts(m);
23
    int64_t offset = next_ts - m->next_pts_ns;
24
 
25
@@ -510,6 +512,8 @@
26
    m->base_ts += next_ts;
27
    m->seek_next_ts = false;
28
 
29
+   seek_to(m, m->fmt->start_time);
30
+
31
    pthread_mutex_lock(&m->mutex);
32
    stopping = m->stopping;
33
    active = m->active;
34
@@ -540,21 +544,22 @@
35
    return true;
36
 }
37
 
38
-static inline bool mp_media_sleepto(mp_media_t *m)
39
+static inline bool mp_media_sleep(mp_media_t *m)
40
 {
41
    bool timeout = false;
42
 
43
    if (!m->next_ns) {
44
        m->next_ns = os_gettime_ns();
45
    } else {
46
-       uint64_t t = os_gettime_ns();
47
-       const uint64_t timeout_ns = 200000000;
48
-
49
-       if (m->next_ns > t && (m->next_ns - t) > timeout_ns) {
50
-           os_sleepto_ns(t + timeout_ns);
51
-           timeout = true;
52
-       } else {
53
-           os_sleepto_ns(m->next_ns);
54
+       const uint64_t t = os_gettime_ns();
55
+       if (m->next_ns > t) {
56
+           const uint32_t delta_ms =
57
+               (uint32_t)((m->next_ns - t + 500000) / 1000000);
58
+           if (delta_ms > 0) {
59
+               static const uint32_t timeout_ms = 200;
60
+               timeout = delta_ms > timeout_ms;
61
+               os_sleep_ms(timeout ? timeout_ms : delta_ms);
62
+           }
63
        }
64
    }
65
 
66
@@ -695,7 +700,7 @@
67
            if (pause)
68
                reset_ts(m);
69
        } else {
70
-           timeout = mp_media_sleepto(m);
71
+           timeout = mp_media_sleep(m);
72
        }
73
 
74
        pthread_mutex_lock(&m->mutex);
75
obs-studio-27.0.1.tar.xz/deps/obs-scripting/obs-scripting-lua-source.c -> obs-studio-27.1.3.tar.xz/deps/obs-scripting/obs-scripting-lua-source.c Changed
14
 
1
@@ -641,11 +641,7 @@
2
    if (!existing) {
3
        ls.data = current_lua_script;
4
 
5
-       pthread_mutexattr_t mutexattr;
6
-       pthread_mutexattr_init(&mutexattr);
7
-       pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
8
-       pthread_mutex_init(&ls.definition_mutex, &mutexattr);
9
-       pthread_mutexattr_destroy(&mutexattr);
10
+       pthread_mutex_init_recursive(&ls.definition_mutex);
11
 
12
        info.type_data = bmemdup(&ls, sizeof(ls));
13
        info.free_type_data = obs_lua_source_free_type_data;
14
obs-studio-27.0.1.tar.xz/deps/obs-scripting/obs-scripting-lua.c -> obs-studio-27.1.3.tar.xz/deps/obs-scripting/obs-scripting-lua.c Changed
51
 
1
@@ -55,10 +55,10 @@
2
 
3
 static char *startup_script = NULL;
4
 
5
-static pthread_mutex_t tick_mutex = PTHREAD_MUTEX_INITIALIZER;
6
+static pthread_mutex_t tick_mutex;
7
 static struct obs_lua_script *first_tick_script = NULL;
8
 
9
-pthread_mutex_t lua_source_def_mutex = PTHREAD_MUTEX_INITIALIZER;
10
+pthread_mutex_t lua_source_def_mutex;
11
 
12
 #define ls_get_libobs_obj(type, lua_index, obs_obj)                      \
13
    ls_get_libobs_obj_(script, #type " *", lua_index, obs_obj, NULL, \
14
@@ -242,7 +242,7 @@
15
    uint64_t interval;
16
 };
17
 
18
-static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER;
19
+static pthread_mutex_t timer_mutex;
20
 static struct lua_obs_timer *first_timer = NULL;
21
 
22
 static inline void lua_obs_timer_init(struct lua_obs_timer *timer)
23
@@ -1119,12 +1119,9 @@
24
    data->base.type = OBS_SCRIPT_LANG_LUA;
25
    data->tick = LUA_REFNIL;
26
 
27
-   pthread_mutexattr_t attr;
28
-   pthread_mutexattr_init(&attr);
29
    pthread_mutex_init_value(&data->mutex);
30
-   pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
31
 
32
-   if (pthread_mutex_init(&data->mutex, &attr) != 0) {
33
+   if (pthread_mutex_init_recursive(&data->mutex) != 0) {
34
        bfree(data);
35
        return NULL;
36
    }
37
@@ -1300,12 +1297,8 @@
38
    struct dstr dep_paths = {0};
39
    struct dstr tmp = {0};
40
 
41
-   pthread_mutexattr_t attr;
42
-   pthread_mutexattr_init(&attr);
43
-   pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
44
-
45
    pthread_mutex_init(&tick_mutex, NULL);
46
-   pthread_mutex_init(&timer_mutex, &attr);
47
+   pthread_mutex_init_recursive(&timer_mutex);
48
    pthread_mutex_init(&lua_source_def_mutex, NULL);
49
 
50
    /* ---------------------------------------------- */
51
obs-studio-27.0.1.tar.xz/deps/obs-scripting/obs-scripting-python.c -> obs-studio-27.1.3.tar.xz/deps/obs-scripting/obs-scripting-python.c Changed
58
 
1
@@ -53,8 +53,9 @@
2
 
3
 DARRAY(char *) python_paths;
4
 static bool python_loaded = false;
5
+static bool mutexes_loaded = false;
6
 
7
-static pthread_mutex_t tick_mutex = PTHREAD_MUTEX_INITIALIZER;
8
+static pthread_mutex_t tick_mutex;
9
 static struct obs_python_script *first_tick_script = NULL;
10
 
11
 static PyObject *py_obspython = NULL;
12
@@ -378,7 +379,7 @@
13
    uint64_t interval;
14
 };
15
 
16
-static pthread_mutex_t timer_mutex = PTHREAD_MUTEX_INITIALIZER;
17
+static pthread_mutex_t timer_mutex;
18
 static struct python_obs_timer *first_timer = NULL;
19
 
20
 static inline void python_obs_timer_init(struct python_obs_timer *timer)
21
@@ -1570,12 +1571,10 @@
22
 {
23
    da_init(python_paths);
24
 
25
-   pthread_mutexattr_t attr;
26
-   pthread_mutexattr_init(&attr);
27
-   pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
28
-
29
    pthread_mutex_init(&tick_mutex, NULL);
30
-   pthread_mutex_init(&timer_mutex, &attr);
31
+   pthread_mutex_init_recursive(&timer_mutex);
32
+
33
+   mutexes_loaded = true;
34
 }
35
 
36
 extern void add_python_frontend_funcs(PyObject *module);
37
@@ -1702,6 +1701,11 @@
38
 
39
 void obs_python_unload(void)
40
 {
41
+   if (mutexes_loaded) {
42
+       pthread_mutex_destroy(&tick_mutex);
43
+       pthread_mutex_destroy(&timer_mutex);
44
+   }
45
+
46
    if (!python_loaded_at_all)
47
        return;
48
 
49
@@ -1720,8 +1724,6 @@
50
        bfree(python_paths.array[i]);
51
    da_free(python_paths);
52
 
53
-   pthread_mutex_destroy(&tick_mutex);
54
-   pthread_mutex_destroy(&timer_mutex);
55
    dstr_free(&cur_py_log_chunk);
56
 
57
    python_loaded_at_all = false;
58
obs-studio-27.1.3.tar.xz/docs/sphinx/_build/.gitignore Added
obs-studio-27.1.3.tar.xz/docs/sphinx/_static/.gitignore Added
obs-studio-27.1.3.tar.xz/docs/sphinx/_templates/.gitignore Added
obs-studio-27.0.1.tar.xz/docs/sphinx/reference-frontend-api.rst -> obs-studio-27.1.3.tar.xz/docs/sphinx/reference-frontend-api.rst Changed
70
 
1
@@ -60,6 +60,10 @@
2
 
3
      Triggered when the current transition has changed by the user.
4
 
5
+   - **OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED**
6
+
7
+     Triggered when the transition duration has been changed by the user.
8
+
9
    - **OBS_FRONTEND_EVENT_TRANSITION_STOPPED**
10
 
11
      Triggered when a transition has completed.
12
@@ -314,12 +318,37 @@
13
 
14
 ---------------------------------------
15
 
16
+.. function:: char *obs_frontend_get_current_profile_path(void)
17
+
18
+   :return: A new pointer to the current profile's path on the filesystem. Free
19
+            with :c:func:`bfree()`.
20
+
21
+---------------------------------------
22
+
23
 .. function:: void obs_frontend_set_current_profile(const char *profile)
24
 
25
    :param profile: Name of the profile to activate.
26
 
27
 ---------------------------------------
28
 
29
+.. function:: bool obs_frontend_create_profile(const char *name)
30
+
31
+   :param name: Name of the new profile to create (must be unique).
32
+
33
+---------------------------------------
34
+
35
+.. function:: bool obs_frontend_duplicate_profile(const char *name)
36
+
37
+   :param name: Name of the duplicate profile to create (must be unique).
38
+
39
+---------------------------------------
40
+
41
+.. function:: void obs_frontend_delete_profile(const char *profile)
42
+
43
+   :param profile: Name of the profile to delete.
44
+
45
+---------------------------------------
46
+
47
 .. function:: void obs_frontend_add_event_callback(obs_frontend_event_cb callback, void *private_data)
48
 
49
    Adds a callback that will be called when a frontend event occurs.
50
@@ -623,3 +652,19 @@
51
 
52
    :return: The value of the position of the T-bar to, with a value in 0-1023.
53
    :rtype: int
54
+
55
+---------------------------------------
56
+
57
+.. function:: void *obs_frontend_open_properties(obs_source_t *source)
58
+
59
+   Opens the properties window of the specified source.
60
+
61
+   :param source: The source to open the properties window of.
62
+   
63
+---------------------------------------
64
+
65
+.. function:: void *obs_frontend_open_filters(obs_source_t *source)
66
+
67
+   Opens the filters window of the specified source.
68
+
69
+   :param source: The source to open the filters window of.
70
obs-studio-27.0.1.tar.xz/docs/sphinx/reference-libobs-graphics-graphics.rst -> obs-studio-27.1.3.tar.xz/docs/sphinx/reference-libobs-graphics-graphics.rst Changed
11
 
1
@@ -980,6 +980,9 @@
2
    careful to always try and match the formats correctly, otherwise textures
3
    can fail to be created or rendered.
4
 
5
+   All modifiers passed in the modifiers array must be equal. Passing different
6
+   modifiers for each plane is unsupported.
7
+
8
    :param width:        Width of the texture
9
    :param height:       Height of the texture
10
    :param drm_format:   DRM format of the DMA-BUF buffer
11
obs-studio-27.0.1.tar.xz/docs/sphinx/reference-properties.rst -> obs-studio-27.1.3.tar.xz/docs/sphinx/reference-properties.rst Changed
51
 
1
@@ -240,6 +240,11 @@
2
    :param    description: Localized name shown to user
3
    :return:               The property
4
 
5
+   Important Related Functions:
6
+
7
+      - :c:func:`obs_property_button_set_type`
8
+      - :c:func:`obs_property_button_set_url`
9
+
10
    Relevant data types used with this function:
11
 
12
 .. code:: cpp
13
@@ -512,6 +517,19 @@
14
 
15
 ---------------------
16
 
17
+.. function:: enum obs_button_type obs_property_button_type(obs_property_t *p)
18
+
19
+   :return: One of the following values:
20
+
21
+             - OBS_BUTTON_DEFAULT
22
+             - OBS_BUTTON_URL
23
+
24
+---------------------
25
+
26
+.. function:: const char *obs_property_button_url(obs_property_t *p)
27
+
28
+---------------------
29
+
30
 .. function:: enum obs_group_type obs_property_group_type(obs_property_t *p)
31
 
32
   :return: One of the following values:
33
@@ -658,3 +676,17 @@
34
 ---------------------
35
 
36
 .. function:: void obs_property_frame_rate_fps_range_insert(obs_property_t *p, size_t idx, struct media_frames_per_second min, struct media_frames_per_second max)
37
+
38
+---------------------
39
+
40
+.. function:: void obs_property_button_set_type(obs_property_t *p, enum obs_button_type type)
41
+
42
+   :param   type: Can be one of the following values:
43
+
44
+                  - **OBS_BUTTON_DEFAULT** - Standard button
45
+                  - **OBS_BUTTON_URL** - Button that opens a URL
46
+   :return:       The property
47
+
48
+---------------------
49
+
50
+.. function:: void obs_property_button_set_url(obs_property_t *p, char *url)
51
obs-studio-27.0.1.tar.xz/docs/sphinx/reference-sources.rst -> obs-studio-27.1.3.tar.xz/docs/sphinx/reference-sources.rst Changed
16
 
1
@@ -847,6 +847,14 @@
2
 
3
 ---------------------
4
 
5
+.. function:: bool obs_source_get_texcoords_centered(obs_source_t *source)
6
+
7
+   Hints whether or not the source will blend texels.
8
+
9
+   :return: Whether or not the source will blend texels
10
+
11
+---------------------
12
+
13
 .. function:: obs_data_t *obs_source_get_settings(const obs_source_t *source)
14
 
15
    :return: The settings string for a source.  The reference counter of the
16
obs-studio-27.0.1.tar.xz/libobs-d3d11/d3d11-duplicator.cpp -> obs-studio-27.1.3.tar.xz/libobs-d3d11/d3d11-duplicator.cpp Changed
16
 
1
@@ -218,9 +218,12 @@
2
        d->texture->height != desc.Height) {
3
 
4
        delete d->texture;
5
+       const gs_color_format format =
6
+           ConvertDXGITextureFormat(desc.Format);
7
+       const gs_color_format srgb_format =
8
+           gs_generalize_format(format);
9
        d->texture = (gs_texture_2d *)gs_texture_create(
10
-           desc.Width, desc.Height,
11
-           ConvertDXGITextureFormat(desc.Format), 1, nullptr, 0);
12
+           desc.Width, desc.Height, srgb_format, 1, nullptr, 0);
13
    }
14
 
15
    if (!!d->texture)
16
obs-studio-27.0.1.tar.xz/libobs-d3d11/d3d11-rebuild.cpp -> obs-studio-27.1.3.tar.xz/libobs-d3d11/d3d11-rebuild.cpp Changed
16
 
1
@@ -471,10 +471,10 @@
2
    context->ClearState();
3
    context->Flush();
4
 
5
-   context.Release();
6
-   device.Release();
7
-   adapter.Release();
8
-   factory.Release();
9
+   context.Clear();
10
+   device.Clear();
11
+   adapter.Clear();
12
+   factory.Clear();
13
 
14
    /* ----------------------------------------------------------------- */
15
 
16
obs-studio-27.0.1.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-27.1.3.tar.xz/libobs-d3d11/d3d11-subsystem.cpp Changed
287
 
1
@@ -15,6 +15,7 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
+#include <cassert>
6
 #include <cinttypes>
7
 #include <util/base.h>
8
 #include <util/platform.h>
9
@@ -49,12 +50,6 @@
10
    }
11
 }
12
 
13
-static const IID dxgiFactory2 = {0x50c83a1c,
14
-                0xe072,
15
-                0x4c48,
16
-                {0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6,
17
-                 0xd0}};
18
-
19
 gs_obj::gs_obj(gs_device_t *device_, gs_type type)
20
    : device(device_), obj_type(type)
21
 {
22
@@ -74,17 +69,20 @@
23
 }
24
 
25
 static inline void make_swap_desc(DXGI_SWAP_CHAIN_DESC &desc,
26
-                 const gs_init_data *data)
27
+                 const gs_init_data *data,
28
+                 DXGI_SWAP_EFFECT effect, UINT flags)
29
 {
30
    memset(&desc, 0, sizeof(desc));
31
-   desc.BufferCount = data->num_backbuffers;
32
-   desc.BufferDesc.Format = ConvertGSTextureFormatView(data->format);
33
    desc.BufferDesc.Width = data->cx;
34
    desc.BufferDesc.Height = data->cy;
35
+   desc.BufferDesc.Format = ConvertGSTextureFormatView(data->format);
36
+   desc.SampleDesc.Count = 1;
37
    desc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
38
+   desc.BufferCount = data->num_backbuffers;
39
    desc.OutputWindow = (HWND)data->window.hwnd;
40
-   desc.SampleDesc.Count = 1;
41
-   desc.Windowed = true;
42
+   desc.Windowed = TRUE;
43
+   desc.SwapEffect = effect;
44
+   desc.Flags = flags;
45
 }
46
 
47
 void gs_swap_chain::InitTarget(uint32_t cx, uint32_t cy)
48
@@ -154,7 +152,8 @@
49
            cy = clientRect.bottom;
50
    }
51
 
52
-   hr = swap->ResizeBuffers(numBuffers, cx, cy, DXGI_FORMAT_UNKNOWN, 0);
53
+   hr = swap->ResizeBuffers(swapDesc.BufferCount, cx, cy,
54
+                DXGI_FORMAT_UNKNOWN, swapDesc.Flags);
55
    if (FAILED(hr))
56
        throw HRError("Failed to resize swap buffers", hr);
57
 
58
@@ -182,24 +181,75 @@
59
 
60
 gs_swap_chain::gs_swap_chain(gs_device *device, const gs_init_data *data)
61
    : gs_obj(device, gs_type::gs_swap_chain),
62
-     numBuffers(data->num_backbuffers),
63
      hwnd((HWND)data->window.hwnd),
64
      initData(*data)
65
 {
66
-   HRESULT hr;
67
+   struct win_version_info ver;
68
+   get_win_ver(&ver);
69
+
70
+   constexpr win_version_info minimum = [] {
71
+       win_version_info ver{};
72
+       ver.major = 10;
73
+       ver.minor = 0;
74
+       ver.build = 22000;
75
+       ver.revis = 0;
76
+       return ver;
77
+   }();
78
+
79
+   DXGI_SWAP_EFFECT effect = DXGI_SWAP_EFFECT_DISCARD;
80
+   UINT flags = 0;
81
+
82
+   if (win_version_compare(&ver, &minimum) >= 0) {
83
+       initData.num_backbuffers = max(data->num_backbuffers, 2);
84
+
85
+       effect = DXGI_SWAP_EFFECT_FLIP_DISCARD;
86
+       flags |= DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT;
87
+
88
+       ComPtr<IDXGIFactory5> factory5;
89
+       factory5 = ComQIPtr<IDXGIFactory5>(device->factory);
90
+       if (factory5) {
91
+           BOOL featureSupportData = FALSE;
92
+           const HRESULT hr = factory5->CheckFeatureSupport(
93
+               DXGI_FEATURE_PRESENT_ALLOW_TEARING,
94
+               &featureSupportData,
95
+               sizeof(featureSupportData));
96
+           if (SUCCEEDED(hr) && featureSupportData) {
97
+               presentFlags |= DXGI_PRESENT_ALLOW_TEARING;
98
+
99
+               flags |= DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING;
100
+           }
101
+       }
102
+   }
103
 
104
-   make_swap_desc(swapDesc, data);
105
-   hr = device->factory->CreateSwapChain(device->device, &swapDesc,
106
-                         swap.Assign());
107
+   make_swap_desc(swapDesc, &initData, effect, flags);
108
+   HRESULT hr = device->factory->CreateSwapChain(device->device, &swapDesc,
109
+                             swap.Assign());
110
    if (FAILED(hr))
111
        throw HRError("Failed to create swap chain", hr);
112
 
113
    /* Ignore Alt+Enter */
114
    device->factory->MakeWindowAssociation(hwnd, DXGI_MWA_NO_ALT_ENTER);
115
 
116
+   if (flags & DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT) {
117
+       ComPtr<IDXGISwapChain2> swap2 = ComQIPtr<IDXGISwapChain2>(swap);
118
+       hWaitable = swap2->GetFrameLatencyWaitableObject();
119
+       if (hWaitable) {
120
+           hr = swap2->SetMaximumFrameLatency(40);
121
+           if (FAILED(hr))
122
+               throw HRError("Could not relax frame latency",
123
+                         hr);
124
+       }
125
+   }
126
+
127
    Init();
128
 }
129
 
130
+gs_swap_chain::~gs_swap_chain()
131
+{
132
+   if (hWaitable)
133
+       CloseHandle(hWaitable);
134
+}
135
+
136
 void gs_device::InitCompiler()
137
 {
138
    char d3dcompiler[40] = {};
139
@@ -234,11 +284,7 @@
140
 
141
 void gs_device::InitFactory()
142
 {
143
-   HRESULT hr;
144
-   IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2
145
-                       : __uuidof(IDXGIFactory1);
146
-
147
-   hr = CreateDXGIFactory1(factoryIID, (void **)factory.Assign());
148
+   HRESULT hr = CreateDXGIFactory1(IID_PPV_ARGS(&factory));
149
    if (FAILED(hr))
150
        throw UnsupportedHWError("Failed to create DXGIFactory", hr);
151
 }
152
@@ -864,10 +910,7 @@
153
    HRESULT hr;
154
    UINT i;
155
 
156
-   IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2
157
-                       : __uuidof(IDXGIFactory1);
158
-
159
-   hr = CreateDXGIFactory1(factoryIID, (void **)factory.Assign());
160
+   hr = CreateDXGIFactory1(IID_PPV_ARGS(&factory));
161
    if (FAILED(hr))
162
        throw HRError("Failed to create DXGIFactory", hr);
163
 
164
@@ -1009,10 +1052,7 @@
165
 
166
    blog(LOG_INFO, "Available Video Adapters: ");
167
 
168
-   IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2
169
-                       : __uuidof(IDXGIFactory1);
170
-
171
-   hr = CreateDXGIFactory1(factoryIID, (void **)factory.Assign());
172
+   hr = CreateDXGIFactory1(IID_PPV_ARGS(&factory));
173
    if (FAILED(hr))
174
        throw HRError("Failed to create DXGIFactory", hr);
175
 
176
@@ -1439,24 +1479,28 @@
177
        curVertexShader == lastVertexShader)
178
        return;
179
 
180
-   vector<ID3D11Buffer *> buffers;
181
-   vector<uint32_t> strides;
182
-   vector<uint32_t> offsets;
183
+   ID3D11Buffer *buffers[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
184
+   uint32_t strides[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
185
+   uint32_t offsets[D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT];
186
+   UINT numBuffers{};
187
+
188
+   assert(curVertexShader->NumBuffersExpected() <= _countof(buffers));
189
+   assert(curVertexShader->NumBuffersExpected() <= _countof(strides));
190
+   assert(curVertexShader->NumBuffersExpected() <= _countof(offsets));
191
 
192
    if (curVertexBuffer && curVertexShader) {
193
-       curVertexBuffer->MakeBufferList(curVertexShader, buffers,
194
-                       strides);
195
+       numBuffers = curVertexBuffer->MakeBufferList(curVertexShader,
196
+                                buffers, strides);
197
    } else {
198
-       size_t buffersToClear =
199
-           curVertexShader ? curVertexShader->NumBuffersExpected()
200
-                   : 0;
201
-       buffers.resize(buffersToClear);
202
-       strides.resize(buffersToClear);
203
+       numBuffers = curVertexShader
204
+                    ? curVertexShader->NumBuffersExpected()
205
+                    : 0;
206
+       std::fill_n(buffers, numBuffers, nullptr);
207
+       std::fill_n(strides, numBuffers, 0);
208
    }
209
 
210
-   offsets.resize(buffers.size());
211
-   context->IASetVertexBuffers(0, (UINT)buffers.size(), buffers.data(),
212
-                   strides.data(), offsets.data());
213
+   std::fill_n(offsets, numBuffers, 0);
214
+   context->IASetVertexBuffers(0, numBuffers, buffers, strides, offsets);
215
 
216
    lastVertexBuffer = curVertexBuffer;
217
    lastVertexShader = curVertexShader;
218
@@ -1768,6 +1812,20 @@
219
    }
220
 }
221
 
222
+static DXGI_FORMAT get_copy_compare_format(gs_color_format format)
223
+{
224
+   switch (format) {
225
+   case GS_RGBA_UNORM:
226
+       return DXGI_FORMAT_R8G8B8A8_TYPELESS;
227
+   case GS_BGRX_UNORM:
228
+       return DXGI_FORMAT_B8G8R8X8_TYPELESS;
229
+   case GS_BGRA_UNORM:
230
+       return DXGI_FORMAT_B8G8R8A8_TYPELESS;
231
+   default:
232
+       return ConvertGSTextureFormatResource(format);
233
+   }
234
+}
235
+
236
 void device_copy_texture_region(gs_device_t *device, gs_texture_t *dst,
237
                uint32_t dst_x, uint32_t dst_y,
238
                gs_texture_t *src, uint32_t src_x,
239
@@ -1784,7 +1842,8 @@
240
        if (src->type != GS_TEXTURE_2D || dst->type != GS_TEXTURE_2D)
241
            throw "Source and destination textures must be a 2D "
242
                  "textures";
243
-       if (dst->format != src->format)
244
+       if (get_copy_compare_format(dst->format) !=
245
+           get_copy_compare_format(src->format))
246
            throw "Source and destination formats do not match";
247
 
248
        /* apparently casting to the same type that the variable
249
@@ -1976,13 +2035,18 @@
250
 
251
 void device_present(gs_device_t *device)
252
 {
253
-   HRESULT hr;
254
-
255
-   if (device->curSwapChain) {
256
-       hr = device->curSwapChain->swap->Present(0, 0);
257
-       if (hr == DXGI_ERROR_DEVICE_REMOVED ||
258
-           hr == DXGI_ERROR_DEVICE_RESET) {
259
-           device->RebuildDevice();
260
+   gs_swap_chain *const curSwapChain = device->curSwapChain;
261
+   if (curSwapChain) {
262
+       /* Skip Present at frame limit to avoid stall */
263
+       const HANDLE hWaitable = curSwapChain->hWaitable;
264
+       if ((hWaitable == NULL) ||
265
+           WaitForSingleObject(hWaitable, 0) == WAIT_OBJECT_0) {
266
+           const HRESULT hr = curSwapChain->swap->Present(
267
+               0, curSwapChain->presentFlags);
268
+           if (hr == DXGI_ERROR_DEVICE_REMOVED ||
269
+               hr == DXGI_ERROR_DEVICE_RESET) {
270
+               device->RebuildDevice();
271
+           }
272
        }
273
    } else {
274
        blog(LOG_WARNING, "device_present (D3D11): No active swap");
275
@@ -2915,10 +2979,8 @@
276
 {
277
    uint32_t count = 0;
278
 
279
-   const IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2
280
-                             : __uuidof(IDXGIFactory1);
281
    ComPtr<IDXGIFactory1> factory;
282
-   HRESULT hr = CreateDXGIFactory1(factoryIID, (void **)factory.Assign());
283
+   HRESULT hr = CreateDXGIFactory1(IID_PPV_ARGS(&factory));
284
    if (SUCCEEDED(hr)) {
285
        ComPtr<IDXGIAdapter1> adapter;
286
        for (UINT i = 0;
287
obs-studio-27.0.1.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-27.1.3.tar.xz/libobs-d3d11/d3d11-subsystem.hpp Changed
57
 
1
@@ -25,8 +25,7 @@
2
 #include <memory>
3
 
4
 #include <windows.h>
5
-#include <dxgi.h>
6
-#include <dxgi1_2.h>
7
+#include <dxgi1_5.h>
8
 #include <d3d11_1.h>
9
 #include <d3dcompiler.h>
10
 
11
@@ -364,9 +363,8 @@
12
 
13
    void FlushBuffer(ID3D11Buffer *buffer, void *array, size_t elementSize);
14
 
15
-   void MakeBufferList(gs_vertex_shader *shader,
16
-               vector<ID3D11Buffer *> &buffers,
17
-               vector<uint32_t> &strides);
18
+   UINT MakeBufferList(gs_vertex_shader *shader, ID3D11Buffer **buffers,
19
+               uint32_t *strides);
20
 
21
    void InitBuffer(const size_t elementSize, const size_t numVerts,
22
            void *array, ID3D11Buffer **buffer);
23
@@ -795,14 +793,15 @@
24
 };
25
 
26
 struct gs_swap_chain : gs_obj {
27
-   uint32_t numBuffers;
28
    HWND hwnd;
29
    gs_init_data initData;
30
    DXGI_SWAP_CHAIN_DESC swapDesc = {};
31
+   UINT presentFlags = 0;
32
 
33
    gs_texture_2d target;
34
    gs_zstencil_buffer zs;
35
    ComPtr<IDXGISwapChain> swap;
36
+   HANDLE hWaitable = NULL;
37
 
38
    void InitTarget(uint32_t cx, uint32_t cy);
39
    void InitZStencilBuffer(uint32_t cx, uint32_t cy);
40
@@ -815,10 +814,15 @@
41
    {
42
        target.Release();
43
        zs.Release();
44
-       swap.Release();
45
+       if (hWaitable) {
46
+           CloseHandle(hWaitable);
47
+           hWaitable = NULL;
48
+       }
49
+       swap.Clear();
50
    }
51
 
52
    gs_swap_chain(gs_device *device, const gs_init_data *data);
53
+   virtual ~gs_swap_chain();
54
 };
55
 
56
 struct BlendState {
57
obs-studio-27.0.1.tar.xz/libobs-d3d11/d3d11-vertexbuffer.cpp -> obs-studio-27.1.3.tar.xz/libobs-d3d11/d3d11-vertexbuffer.cpp Changed
70
 
1
@@ -19,13 +19,15 @@
2
 #include <graphics/vec3.h>
3
 #include "d3d11-subsystem.hpp"
4
 
5
-static inline void PushBuffer(vector<ID3D11Buffer *> &buffers,
6
-                 vector<uint32_t> &strides, ID3D11Buffer *buffer,
7
+static inline void PushBuffer(UINT *refNumBuffers, ID3D11Buffer **buffers,
8
+                 uint32_t *strides, ID3D11Buffer *buffer,
9
                  size_t elementSize, const char *name)
10
 {
11
+   const UINT numBuffers = *refNumBuffers;
12
    if (buffer) {
13
-       buffers.push_back(buffer);
14
-       strides.push_back((uint32_t)elementSize);
15
+       buffers[numBuffers] = buffer;
16
+       strides[numBuffers] = (uint32_t)elementSize;
17
+       *refNumBuffers = numBuffers + 1;
18
    } else {
19
        blog(LOG_ERROR, "This vertex shader requires a %s buffer",
20
             name);
21
@@ -46,25 +48,27 @@
22
    device->context->Unmap(buffer, 0);
23
 }
24
 
25
-void gs_vertex_buffer::MakeBufferList(gs_vertex_shader *shader,
26
-                     vector<ID3D11Buffer *> &buffers,
27
-                     vector<uint32_t> &strides)
28
+UINT gs_vertex_buffer::MakeBufferList(gs_vertex_shader *shader,
29
+                     ID3D11Buffer **buffers, uint32_t *strides)
30
 {
31
-   PushBuffer(buffers, strides, vertexBuffer, sizeof(vec3), "point");
32
+   UINT numBuffers = 0;
33
+   PushBuffer(&numBuffers, buffers, strides, vertexBuffer, sizeof(vec3),
34
+          "point");
35
 
36
    if (shader->hasNormals)
37
-       PushBuffer(buffers, strides, normalBuffer, sizeof(vec3),
38
-              "normal");
39
+       PushBuffer(&numBuffers, buffers, strides, normalBuffer,
40
+              sizeof(vec3), "normal");
41
    if (shader->hasColors)
42
-       PushBuffer(buffers, strides, colorBuffer, sizeof(uint32_t),
43
-              "color");
44
+       PushBuffer(&numBuffers, buffers, strides, colorBuffer,
45
+              sizeof(uint32_t), "color");
46
    if (shader->hasTangents)
47
-       PushBuffer(buffers, strides, tangentBuffer, sizeof(vec3),
48
-              "tangent");
49
+       PushBuffer(&numBuffers, buffers, strides, tangentBuffer,
50
+              sizeof(vec3), "tangent");
51
    if (shader->nTexUnits <= uvBuffers.size()) {
52
        for (size_t i = 0; i < shader->nTexUnits; i++) {
53
-           buffers.push_back(uvBuffers[i]);
54
-           strides.push_back((uint32_t)uvSizes[i]);
55
+           buffers[numBuffers] = uvBuffers[i];
56
+           strides[numBuffers] = (uint32_t)uvSizes[i];
57
+           ++numBuffers;
58
        }
59
    } else {
60
        blog(LOG_ERROR,
61
@@ -72,6 +76,8 @@
62
             "texture buffers.",
63
             (uint32_t)shader->nTexUnits);
64
    }
65
+
66
+   return numBuffers;
67
 }
68
 
69
 void gs_vertex_buffer::InitBuffer(const size_t elementSize,
70
obs-studio-27.1.3.tar.xz/libobs-opengl/.gitignore Added
obs-studio-27.0.1.tar.xz/libobs-opengl/gl-subsystem.h -> obs-studio-27.1.3.tar.xz/libobs-opengl/gl-subsystem.h Changed
10
 
1
@@ -150,7 +150,7 @@
2
    case GS_BGRA:
3
        return GL_UNSIGNED_BYTE;
4
    case GS_R10G10B10A2:
5
-       return GL_UNSIGNED_INT_10_10_10_2;
6
+       return GL_UNSIGNED_INT_2_10_10_10_REV;
7
    case GS_RGBA16:
8
        return GL_UNSIGNED_SHORT;
9
    case GS_R16:
10
obs-studio-27.0.1.tar.xz/libobs-opengl/gl-wayland-egl.c -> obs-studio-27.1.3.tar.xz/libobs-opengl/gl-wayland-egl.c Changed
16
 
1
@@ -209,8 +209,14 @@
2
        goto fail_load_gl;
3
    }
4
 
5
+   if (!gladLoadEGL()) {
6
+       blog(LOG_ERROR, "Unable to load EGL entry functions.");
7
+       goto fail_load_egl;
8
+   }
9
+
10
    goto success;
11
 
12
+fail_load_egl:
13
 fail_load_gl:
14
    egl_context_destroy(plat);
15
 fail_context_create:
16
obs-studio-27.0.1.tar.xz/libobs-winrt/winrt-capture.cpp -> obs-studio-27.1.3.tar.xz/libobs-winrt/winrt-capture.cpp Changed
261
 
1
@@ -19,12 +19,12 @@
2
        IsApiContractPresent(L"Windows.Foundation.UniversalApiContract",
3
                     8);
4
 } catch (const winrt::hresult_error &err) {
5
-   blog(LOG_ERROR, "winrt_capture_supported (0x%08X): %ls", err.to_abi(),
6
-        err.message().c_str());
7
+   blog(LOG_ERROR, "winrt_capture_supported (0x%08X): %ls",
8
+        err.code().value, err.message().c_str());
9
    return false;
10
 } catch (...) {
11
    blog(LOG_ERROR, "winrt_capture_supported (0x%08X)",
12
-        winrt::to_hresult());
13
+        winrt::to_hresult().value);
14
    return false;
15
 }
16
 
17
@@ -36,11 +36,11 @@
18
            L"IsCursorCaptureEnabled");
19
 } catch (const winrt::hresult_error &err) {
20
    blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X): %ls",
21
-        err.to_abi(), err.message().c_str());
22
+        err.code().value, err.message().c_str());
23
    return false;
24
 } catch (...) {
25
    blog(LOG_ERROR, "winrt_capture_cursor_toggle_supported (0x%08X)",
26
-        winrt::to_hresult());
27
+        winrt::to_hresult().value);
28
    return false;
29
 }
30
 
31
@@ -239,20 +239,20 @@
32
    } catch (winrt::hresult_error &err) {
33
        blog(LOG_ERROR,
34
             "Direct3D11CaptureFramePool::Close (0x%08X): %ls",
35
-            err.to_abi(), err.message().c_str());
36
+            err.code().value, err.message().c_str());
37
    } catch (...) {
38
        blog(LOG_ERROR, "Direct3D11CaptureFramePool::Close (0x%08X)",
39
-            winrt::to_hresult());
40
+            winrt::to_hresult().value);
41
    }
42
 
43
    try {
44
        capture->session.Close();
45
    } catch (winrt::hresult_error &err) {
46
        blog(LOG_ERROR, "GraphicsCaptureSession::Close (0x%08X): %ls",
47
-            err.to_abi(), err.message().c_str());
48
+            err.code().value, err.message().c_str());
49
    } catch (...) {
50
        blog(LOG_ERROR, "GraphicsCaptureSession::Close (0x%08X)",
51
-            winrt::to_hresult());
52
+            winrt::to_hresult().value);
53
    }
54
 
55
    capture->session = nullptr;
56
@@ -262,7 +262,6 @@
57
    capture->item = nullptr;
58
 }
59
 
60
-#ifdef NTDDI_WIN10_FE
61
 static bool winrt_capture_border_toggle_supported()
62
 try {
63
    return winrt::Windows::Foundation::Metadata::ApiInformation::
64
@@ -271,14 +270,13 @@
65
            L"IsBorderRequired");
66
 } catch (const winrt::hresult_error &err) {
67
    blog(LOG_ERROR, "winrt_capture_border_toggle_supported (0x%08X): %ls",
68
-        err.to_abi(), err.message().c_str());
69
+        err.code().value, err.message().c_str());
70
    return false;
71
 } catch (...) {
72
    blog(LOG_ERROR, "winrt_capture_border_toggle_supported (0x%08X)",
73
-        winrt::to_hresult());
74
+        winrt::to_hresult().value);
75
    return false;
76
 }
77
-#endif
78
 
79
 static winrt::Windows::Graphics::Capture::GraphicsCaptureItem
80
 winrt_capture_create_item(IGraphicsCaptureItemInterop *const interop_factory,
81
@@ -297,10 +295,10 @@
82
                blog(LOG_ERROR, "CreateForWindow (0x%08X)", hr);
83
        } catch (winrt::hresult_error &err) {
84
            blog(LOG_ERROR, "CreateForWindow (0x%08X): %ls",
85
-                err.to_abi(), err.message().c_str());
86
+                err.code().value, err.message().c_str());
87
        } catch (...) {
88
            blog(LOG_ERROR, "CreateForWindow (0x%08X)",
89
-                winrt::to_hresult());
90
+                winrt::to_hresult().value);
91
        }
92
    } else {
93
        assert(monitor);
94
@@ -317,10 +315,10 @@
95
                     hr);
96
        } catch (winrt::hresult_error &err) {
97
            blog(LOG_ERROR, "CreateForMonitor (0x%08X): %ls",
98
-                err.to_abi(), err.message().c_str());
99
+                err.code().value, err.message().c_str());
100
        } catch (...) {
101
            blog(LOG_ERROR, "CreateForMonitor (0x%08X)",
102
-                winrt::to_hresult());
103
+                winrt::to_hresult().value);
104
        }
105
    }
106
 
107
@@ -362,7 +360,6 @@
108
    const winrt::Windows::Graphics::Capture::GraphicsCaptureSession session =
109
        frame_pool.CreateCaptureSession(item);
110
 
111
-#ifdef NTDDI_WIN10_FE
112
    if (winrt_capture_border_toggle_supported()) {
113
        winrt::Windows::Graphics::Capture::GraphicsCaptureAccess::
114
            RequestAccessAsync(
115
@@ -371,7 +368,6 @@
116
                .get();
117
        session.IsBorderRequired(false);
118
    }
119
-#endif
120
 
121
    if (winrt_capture_cursor_toggle_supported())
122
        session.IsCursorCaptureEnabled(capture->capture_cursor &&
123
@@ -390,10 +386,11 @@
124
        session.StartCapture();
125
        capture->active = TRUE;
126
    } catch (winrt::hresult_error &err) {
127
-       blog(LOG_ERROR, "StartCapture (0x%08X): %ls", err.to_abi(),
128
+       blog(LOG_ERROR, "StartCapture (0x%08X): %ls", err.code().value,
129
             err.message().c_str());
130
    } catch (...) {
131
-       blog(LOG_ERROR, "StartCapture (0x%08X)", winrt::to_hresult());
132
+       blog(LOG_ERROR, "StartCapture (0x%08X)",
133
+            winrt::to_hresult().value);
134
    }
135
 }
136
 
137
@@ -443,7 +440,6 @@
138
    const winrt::Windows::Graphics::Capture::GraphicsCaptureSession session =
139
        frame_pool.CreateCaptureSession(item);
140
 
141
-#ifdef NTDDI_WIN10_FE
142
    if (winrt_capture_border_toggle_supported()) {
143
        winrt::Windows::Graphics::Capture::GraphicsCaptureAccess::
144
            RequestAccessAsync(
145
@@ -452,7 +448,6 @@
146
                .get();
147
        session.IsBorderRequired(false);
148
    }
149
-#endif
150
 
151
    /* disable cursor capture if possible since ours performs better */
152
    const BOOL cursor_toggle_supported =
153
@@ -492,11 +487,12 @@
154
    return capture;
155
 
156
 } catch (const winrt::hresult_error &err) {
157
-   blog(LOG_ERROR, "winrt_capture_init (0x%08X): %ls", err.to_abi(),
158
+   blog(LOG_ERROR, "winrt_capture_init (0x%08X): %ls", err.code().value,
159
         err.message().c_str());
160
    return nullptr;
161
 } catch (...) {
162
-   blog(LOG_ERROR, "winrt_capture_init (0x%08X)", winrt::to_hresult());
163
+   blog(LOG_ERROR, "winrt_capture_init (0x%08X)",
164
+        winrt::to_hresult().value);
165
    return nullptr;
166
 }
167
 
168
@@ -541,11 +537,11 @@
169
        } catch (winrt::hresult_error &err) {
170
            blog(LOG_ERROR,
171
                 "Direct3D11CaptureFramePool::Close (0x%08X): %ls",
172
-                err.to_abi(), err.message().c_str());
173
+                err.code().value, err.message().c_str());
174
        } catch (...) {
175
            blog(LOG_ERROR,
176
                 "Direct3D11CaptureFramePool::Close (0x%08X)",
177
-                winrt::to_hresult());
178
+                winrt::to_hresult().value);
179
        }
180
 
181
        try {
182
@@ -553,35 +549,31 @@
183
        } catch (winrt::hresult_error &err) {
184
            blog(LOG_ERROR,
185
                 "GraphicsCaptureSession::Close (0x%08X): %ls",
186
-                err.to_abi(), err.message().c_str());
187
+                err.code().value, err.message().c_str());
188
        } catch (...) {
189
            blog(LOG_ERROR,
190
                 "GraphicsCaptureSession::Close (0x%08X)",
191
-                winrt::to_hresult());
192
+                winrt::to_hresult().value);
193
        }
194
 
195
        delete capture;
196
    }
197
 }
198
 
199
-static void draw_texture(struct winrt_capture *capture, gs_effect_t *effect)
200
+static void draw_texture(struct winrt_capture *capture)
201
 {
202
-   gs_texture_t *const texture = capture->texture;
203
+   gs_effect_t *const effect = obs_get_base_effect(OBS_EFFECT_OPAQUE);
204
    gs_technique_t *tech = gs_effect_get_technique(effect, "Draw");
205
    gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image");
206
-   size_t passes;
207
-
208
-   const bool linear_srgb = gs_get_linear_srgb();
209
 
210
    const bool previous = gs_framebuffer_srgb_enabled();
211
-   gs_enable_framebuffer_srgb(linear_srgb);
212
+   gs_enable_framebuffer_srgb(true);
213
+   gs_enable_blending(false);
214
 
215
-   if (linear_srgb)
216
-       gs_effect_set_texture_srgb(image, texture);
217
-   else
218
-       gs_effect_set_texture(image, texture);
219
+   gs_texture_t *const texture = capture->texture;
220
+   gs_effect_set_texture_srgb(image, texture);
221
 
222
-   passes = gs_technique_begin(tech);
223
+   const size_t passes = gs_technique_begin(tech);
224
    for (size_t i = 0; i < passes; i++) {
225
        if (gs_technique_begin_pass(tech, i)) {
226
            gs_draw_sprite(texture, 0, 0, 0);
227
@@ -591,6 +583,7 @@
228
    }
229
    gs_technique_end(tech);
230
 
231
+   gs_enable_blending(true);
232
    gs_enable_framebuffer_srgb(previous);
233
 }
234
 
235
@@ -617,21 +610,20 @@
236
    } catch (winrt::hresult_error &err) {
237
        blog(LOG_ERROR,
238
             "GraphicsCaptureSession::IsCursorCaptureEnabled (0x%08X): %ls",
239
-            err.to_abi(), err.message().c_str());
240
+            err.code().value, err.message().c_str());
241
    } catch (...) {
242
        blog(LOG_ERROR,
243
             "GraphicsCaptureSession::IsCursorCaptureEnabled (0x%08X)",
244
-            winrt::to_hresult());
245
+            winrt::to_hresult().value);
246
    }
247
 
248
    return success;
249
 }
250
 
251
-extern "C" EXPORT void winrt_capture_render(struct winrt_capture *capture,
252
-                       gs_effect_t *effect)
253
+extern "C" EXPORT void winrt_capture_render(struct winrt_capture *capture)
254
 {
255
    if (capture->texture_written)
256
-       draw_texture(capture, effect);
257
+       draw_texture(capture);
258
 }
259
 
260
 extern "C" EXPORT uint32_t
261
obs-studio-27.0.1.tar.xz/libobs-winrt/winrt-capture.h -> obs-studio-27.1.3.tar.xz/libobs-winrt/winrt-capture.h Changed
11
 
1
@@ -20,8 +20,7 @@
2
 EXPORT BOOL winrt_capture_active(const struct winrt_capture *capture);
3
 EXPORT BOOL winrt_capture_show_cursor(struct winrt_capture *capture,
4
                      BOOL visible);
5
-EXPORT void winrt_capture_render(struct winrt_capture *capture,
6
-                gs_effect_t *effect);
7
+EXPORT void winrt_capture_render(struct winrt_capture *capture);
8
 EXPORT uint32_t winrt_capture_width(const struct winrt_capture *capture);
9
 EXPORT uint32_t winrt_capture_height(const struct winrt_capture *capture);
10
 
11
obs-studio-27.0.1.tar.xz/libobs-winrt/winrt-dispatch.cpp -> obs-studio-27.1.3.tar.xz/libobs-winrt/winrt-dispatch.cpp Changed
27
 
1
@@ -43,10 +43,10 @@
2
        }
3
    } catch (const winrt::hresult_error &err) {
4
        blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X): %ls",
5
-            err.to_abi(), err.message().c_str());
6
+            (int32_t)err.code(), err.message().c_str());
7
    } catch (...) {
8
        blog(LOG_ERROR, "winrt_dispatcher_init (0x%08X)",
9
-            winrt::to_hresult());
10
+            (int32_t)winrt::to_hresult());
11
    }
12
 
13
    return dispatcher;
14
@@ -57,8 +57,9 @@
15
 try {
16
    delete dispatcher;
17
 } catch (const winrt::hresult_error &err) {
18
-   blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X): %ls", err.to_abi(),
19
-        err.message().c_str());
20
+   blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X): %ls",
21
+        (int32_t)err.code(), err.message().c_str());
22
 } catch (...) {
23
-   blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X)", winrt::to_hresult());
24
+   blog(LOG_ERROR, "winrt_dispatcher_free (0x%08X)",
25
+        (int32_t)winrt::to_hresult());
26
 }
27
obs-studio-27.0.1.tar.xz/libobs/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/libobs/CMakeLists.txt Changed
50
 
1
@@ -120,7 +120,7 @@
2
    set(libobs_audio_monitoring_HEADERS
3
        audio-monitoring/win32/wasapi-output.h
4
        )
5
-   set(libobs_PLATFORM_DEPS winmm psapi)
6
+   set(libobs_PLATFORM_DEPS winmm)
7
    if(MSVC)
8
        set(libobs_PLATFORM_DEPS
9
        ${libobs_PLATFORM_DEPS}
10
@@ -226,7 +226,8 @@
11
    endif()
12
    if(GIO_FOUND)
13
        set(libobs_PLATFORM_SOURCES ${libobs_PLATFORM_SOURCES}
14
-           util/platform-nix-dbus.c)
15
+           util/platform-nix-dbus.c
16
+           util/platform-nix-portal.c)
17
        include_directories(${GIO_INCLUDE_DIRS})
18
        add_definitions(
19
            ${GIO_DEFINITIONS})
20
@@ -407,7 +408,8 @@
21
    util/platform.h
22
    util/profiler.h
23
    util/profiler.hpp
24
-   util/bitstream.h)
25
+   util/bitstream.h
26
+   util/util.hpp)
27
 
28
 set(libobs_libobs_SOURCES
29
    ${libobs_PLATFORM_SOURCES}
30
@@ -537,9 +539,6 @@
31
    PUBLIC
32
    ${ARCH_SIMD_FLAGS})
33
 
34
-target_compile_options(libobs
35
-   PUBLIC
36
-       "${THREADS_DEFINITIONS}")
37
 target_include_directories(libobs
38
    PUBLIC
39
        "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
40
@@ -552,8 +551,7 @@
41
        ${OBS_JANSSON_IMPORT}
42
        ${FFMPEG_LIBRARIES}
43
        ${ZLIB_LIBRARIES}
44
-   PUBLIC
45
-       ${THREADS_LIBRARIES})
46
+       Threads::Threads)
47
 
48
 install_obs_core(libobs EXPORT LibObs)
49
 install_obs_data(libobs data libobs)
50
obs-studio-27.0.1.tar.xz/libobs/callback/signal.c -> obs-studio-27.1.3.tar.xz/libobs/callback/signal.c Changed
56
 
1
@@ -38,22 +38,13 @@
2
 
3
 static inline struct signal_info *signal_info_create(struct decl_info *info)
4
 {
5
-   pthread_mutexattr_t attr;
6
-   struct signal_info *si;
7
-
8
-   if (pthread_mutexattr_init(&attr) != 0)
9
-       return NULL;
10
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
11
-       return NULL;
12
-
13
-   si = bmalloc(sizeof(struct signal_info));
14
-
15
+   struct signal_info *si = bmalloc(sizeof(struct signal_info));
16
    si->func = *info;
17
    si->next = NULL;
18
    si->signalling = false;
19
    da_init(si->callbacks);
20
 
21
-   if (pthread_mutex_init(&si->mutex, &attr) != 0) {
22
+   if (pthread_mutex_init_recursive(&si->mutex) != 0) {
23
        blog(LOG_ERROR, "Could not create signal");
24
 
25
        decl_info_free(&si->func);
26
@@ -132,18 +123,13 @@
27
    handler->first = NULL;
28
    handler->refs = 1;
29
 
30
-   pthread_mutexattr_t attr;
31
-   if (pthread_mutexattr_init(&attr) != 0)
32
-       return NULL;
33
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
34
-       return NULL;
35
-
36
    if (pthread_mutex_init(&handler->mutex, NULL) != 0) {
37
        blog(LOG_ERROR, "Couldn't create signal handler mutex!");
38
        bfree(handler);
39
        return NULL;
40
    }
41
-   if (pthread_mutex_init(&handler->global_callbacks_mutex, &attr) != 0) {
42
+   if (pthread_mutex_init_recursive(&handler->global_callbacks_mutex) !=
43
+       0) {
44
        blog(LOG_ERROR, "Couldn't create signal handler global "
45
                "callbacks mutex!");
46
        pthread_mutex_destroy(&handler->mutex);
47
@@ -403,7 +389,7 @@
48
                      global_signal_callback_t callback,
49
                      void *data)
50
 {
51
-   struct global_callback_info cb_data = {callback, data, false};
52
+   struct global_callback_info cb_data = {callback, data, 0, false};
53
    size_t idx;
54
 
55
    if (!handler || !callback)
56
obs-studio-27.0.1.tar.xz/libobs/data/default.effect -> obs-studio-27.1.3.tar.xz/libobs/data/default.effect Changed
28
 
1
@@ -62,6 +62,13 @@
2
    return rgba;
3
 }
4
 
5
+float4 PSDrawSrgbDecompress(VertInOut vert_in) : TARGET
6
+{
7
+   float4 rgba = image.Sample(def_sampler, vert_in.uv);
8
+   rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb);
9
+   return rgba;
10
+}
11
+
12
 technique Draw
13
 {
14
    pass
15
@@ -88,3 +95,12 @@
16
        pixel_shader  = PSDrawNonlinearAlpha(vert_in);
17
    }
18
 }
19
+
20
+technique DrawSrgbDecompress
21
+{
22
+   pass
23
+   {
24
+       vertex_shader = VSDefault(vert_in);
25
+       pixel_shader  = PSDrawSrgbDecompress(vert_in);
26
+   }
27
+}
28
obs-studio-27.0.1.tar.xz/libobs/data/default_rect.effect -> obs-studio-27.1.3.tar.xz/libobs/data/default_rect.effect Changed
52
 
1
@@ -25,6 +25,28 @@
2
    return image.Sample(def_sampler, vert_in.uv);
3
 }
4
 
5
+float4 PSDrawOpaque(VertInOut vert_in) : TARGET
6
+{
7
+   return float4(image.Sample(def_sampler, vert_in.uv).rgb, 1.0);
8
+}
9
+
10
+float srgb_nonlinear_to_linear_channel(float u)
11
+{
12
+   return (u <= 0.04045) ? (u / 12.92) : pow((u + 0.055) / 1.055, 2.4);
13
+}
14
+
15
+float3 srgb_nonlinear_to_linear(float3 v)
16
+{
17
+   return float3(srgb_nonlinear_to_linear_channel(v.r), srgb_nonlinear_to_linear_channel(v.g), srgb_nonlinear_to_linear_channel(v.b));
18
+}
19
+
20
+float4 PSDrawSrgbDecompress(VertInOut vert_in) : TARGET
21
+{
22
+   float4 rgba = image.Sample(def_sampler, vert_in.uv);
23
+   rgba.rgb = srgb_nonlinear_to_linear(rgba.rgb);
24
+   return rgba;
25
+}
26
+
27
 technique Draw
28
 {
29
    pass
30
@@ -33,3 +55,21 @@
31
        pixel_shader  = PSDrawBare(vert_in);
32
    }
33
 }
34
+
35
+technique DrawOpaque
36
+{
37
+   pass
38
+   {
39
+       vertex_shader = VSDefault(vert_in);
40
+       pixel_shader  = PSDrawOpaque(vert_in);
41
+   }
42
+}
43
+
44
+technique DrawSrgbDecompress
45
+{
46
+   pass
47
+   {
48
+       vertex_shader = VSDefault(vert_in);
49
+       pixel_shader  = PSDrawSrgbDecompress(vert_in);
50
+   }
51
+}
52
obs-studio-27.0.1.tar.xz/libobs/graphics/effect-parser.c -> obs-studio-27.1.3.tar.xz/libobs/graphics/effect-parser.c Changed
34
 
1
@@ -1017,12 +1017,14 @@
2
        float f = (float)os_strtod(ep->cfp.cur_token->str.array);
3
        if (is_negative)
4
            f = -f;
5
-       da_push_back_array(param->default_val, &f, sizeof(float));
6
+       da_push_back_array(param->default_val, (uint8_t *)&f,
7
+                  sizeof(float));
8
    } else {
9
        long l = strtol(ep->cfp.cur_token->str.array, NULL, 10);
10
        if (is_negative)
11
            l = -l;
12
-       da_push_back_array(param->default_val, &l, sizeof(long));
13
+       da_push_back_array(param->default_val, (uint8_t *)&l,
14
+                  sizeof(long));
15
    }
16
 
17
    return PARSE_SUCCESS;
18
@@ -1036,11 +1038,13 @@
19
 
20
    if (cf_token_is(&ep->cfp, "true")) {
21
        long l = 1;
22
-       da_push_back_array(param->default_val, &l, sizeof(long));
23
+       da_push_back_array(param->default_val, (uint8_t *)&l,
24
+                  sizeof(long));
25
        return PARSE_SUCCESS;
26
    } else if (cf_token_is(&ep->cfp, "false")) {
27
        long l = 0;
28
-       da_push_back_array(param->default_val, &l, sizeof(long));
29
+       da_push_back_array(param->default_val, (uint8_t *)&l,
30
+                  sizeof(long));
31
        return PARSE_SUCCESS;
32
    }
33
 
34
obs-studio-27.0.1.tar.xz/libobs/graphics/effect-parser.h -> obs-studio-27.1.3.tar.xz/libobs/graphics/effect-parser.h Changed
16
 
1
@@ -223,10 +223,10 @@
2
    char *name, *ret_type, *mapping;
3
    struct dstr contents;
4
    DARRAY(struct ep_var) param_vars;
5
-   DARRAY(const char *) func_deps;
6
-   DARRAY(const char *) struct_deps;
7
-   DARRAY(const char *) param_deps;
8
-   DARRAY(const char *) sampler_deps;
9
+   DARRAY(char *) func_deps;
10
+   DARRAY(char *) struct_deps;
11
+   DARRAY(char *) param_deps;
12
+   DARRAY(char *) sampler_deps;
13
    bool written;
14
 };
15
 
16
obs-studio-27.0.1.tar.xz/libobs/graphics/effect.c -> obs-studio-27.1.3.tar.xz/libobs/graphics/effect.c Changed
10
 
1
@@ -129,7 +129,7 @@
2
    for (i = 0; i < effect->params.num; i++) {
3
        struct gs_effect_param *param = params + i;
4
 
5
-       da_free(param->cur_val);
6
+       da_resize(param->cur_val, 0);
7
        param->changed = false;
8
        if (param->next_sampler)
9
            param->next_sampler = NULL;
10
obs-studio-27.0.1.tar.xz/libobs/graphics/graphics.c -> obs-studio-27.1.3.tar.xz/libobs/graphics/graphics.c Changed
13
 
1
@@ -28,6 +28,11 @@
2
 #include "effect-parser.h"
3
 #include "effect.h"
4
 
5
+#ifdef _MSC_VER
6
+#undef near
7
+#undef far
8
+#endif
9
+
10
 static THREAD_LOCAL graphics_t *thread_graphics = NULL;
11
 
12
 static inline bool gs_obj_valid(const void *obj, const char *f,
13
obs-studio-27.0.1.tar.xz/libobs/graphics/graphics.h -> obs-studio-27.1.3.tar.xz/libobs/graphics/graphics.h Changed
23
 
1
@@ -1005,6 +1005,21 @@
2
    }
3
 }
4
 
5
+static inline enum gs_color_format
6
+gs_generalize_format(enum gs_color_format format)
7
+{
8
+   switch (format) {
9
+   case GS_RGBA_UNORM:
10
+       return GS_RGBA;
11
+   case GS_BGRX_UNORM:
12
+       return GS_BGRX;
13
+   case GS_BGRA_UNORM:
14
+       return GS_BGRA;
15
+   default:
16
+       return format;
17
+   }
18
+}
19
+
20
 static inline uint32_t gs_get_total_levels(uint32_t width, uint32_t height,
21
                       uint32_t depth)
22
 {
23
obs-studio-27.0.1.tar.xz/libobs/graphics/shader-parser.c -> obs-studio-27.1.3.tar.xz/libobs/graphics/shader-parser.c Changed
18
 
1
@@ -541,12 +541,14 @@
2
        float f = (float)os_strtod(sp->cfp.cur_token->str.array);
3
        if (is_negative)
4
            f = -f;
5
-       da_push_back_array(param->default_val, &f, sizeof(float));
6
+       da_push_back_array(param->default_val, (uint8_t *)&f,
7
+                  sizeof(float));
8
    } else {
9
        long l = strtol(sp->cfp.cur_token->str.array, NULL, 10);
10
        if (is_negative)
11
            l = -l;
12
-       da_push_back_array(param->default_val, &l, sizeof(long));
13
+       da_push_back_array(param->default_val, (uint8_t *)&l,
14
+                  sizeof(long));
15
    }
16
 
17
    return PARSE_SUCCESS;
18
obs-studio-27.0.1.tar.xz/libobs/media-io/audio-io.c -> obs-studio-27.1.3.tar.xz/libobs/media-io/audio-io.c Changed
68
 
1
@@ -354,7 +354,6 @@
2
 int audio_output_open(audio_t **audio, struct audio_output_info *info)
3
 {
4
    struct audio_output *out;
5
-   pthread_mutexattr_t attr;
6
    bool planar = is_audio_planar(info->format);
7
 
8
    if (!valid_audio_params(info))
9
@@ -362,7 +361,7 @@
10
 
11
    out = bzalloc(sizeof(struct audio_output));
12
    if (!out)
13
-       goto fail;
14
+       goto fail0;
15
 
16
    memcpy(&out->info, info, sizeof(struct audio_output_info));
17
    out->channels = get_audio_channels(info->speakers);
18
@@ -372,22 +371,22 @@
19
    out->block_size = (planar ? 1 : out->channels) *
20
              get_audio_bytes_per_channel(info->format);
21
 
22
-   if (pthread_mutexattr_init(&attr) != 0)
23
-       goto fail;
24
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
25
-       goto fail;
26
-   if (pthread_mutex_init(&out->input_mutex, &attr) != 0)
27
-       goto fail;
28
+   if (pthread_mutex_init_recursive(&out->input_mutex) != 0)
29
+       goto fail0;
30
    if (os_event_init(&out->stop_event, OS_EVENT_TYPE_MANUAL) != 0)
31
-       goto fail;
32
+       goto fail1;
33
    if (pthread_create(&out->thread, NULL, audio_thread, out) != 0)
34
-       goto fail;
35
+       goto fail2;
36
 
37
    out->initialized = true;
38
    *audio = out;
39
    return AUDIO_OUTPUT_SUCCESS;
40
 
41
-fail:
42
+fail2:
43
+   os_event_destroy(out->stop_event);
44
+fail1:
45
+   pthread_mutex_destroy(&out->input_mutex);
46
+fail0:
47
    audio_output_close(out);
48
    return AUDIO_OUTPUT_FAIL;
49
 }
50
@@ -402,6 +401,8 @@
51
    if (audio->initialized) {
52
        os_event_signal(audio->stop_event);
53
        pthread_join(audio->thread, &thread_ret);
54
+       os_event_destroy(audio->stop_event);
55
+       pthread_mutex_destroy(&audio->input_mutex);
56
    }
57
 
58
    for (size_t mix_idx = 0; mix_idx < MAX_AUDIO_MIXES; mix_idx++) {
59
@@ -412,8 +413,6 @@
60
 
61
        da_free(mix->inputs);
62
    }
63
-
64
-   os_event_destroy(audio->stop_event);
65
    bfree(audio);
66
 }
67
 
68
obs-studio-27.0.1.tar.xz/libobs/media-io/video-frame.c -> obs-studio-27.1.3.tar.xz/libobs/media-io/video-frame.c Changed
157
 
1
@@ -37,34 +37,40 @@
2
    case VIDEO_FORMAT_NONE:
3
        return;
4
 
5
-   case VIDEO_FORMAT_I420:
6
+   case VIDEO_FORMAT_I420: {
7
        size = width * height;
8
        ALIGN_SIZE(size, alignment);
9
        offsets[0] = size;
10
-       size += (width / 2) * (height / 2);
11
+       const uint32_t half_width = (width + 1) / 2;
12
+       const uint32_t half_height = (height + 1) / 2;
13
+       const uint32_t quarter_area = half_width * half_height;
14
+       size += quarter_area;
15
        ALIGN_SIZE(size, alignment);
16
        offsets[1] = size;
17
-       size += (width / 2) * (height / 2);
18
+       size += quarter_area;
19
        ALIGN_SIZE(size, alignment);
20
        frame->data[0] = bmalloc(size);
21
        frame->data[1] = (uint8_t *)frame->data[0] + offsets[0];
22
        frame->data[2] = (uint8_t *)frame->data[0] + offsets[1];
23
        frame->linesize[0] = width;
24
-       frame->linesize[1] = width / 2;
25
-       frame->linesize[2] = width / 2;
26
+       frame->linesize[1] = half_width;
27
+       frame->linesize[2] = half_width;
28
        break;
29
+   }
30
 
31
-   case VIDEO_FORMAT_NV12:
32
+   case VIDEO_FORMAT_NV12: {
33
        size = width * height;
34
        ALIGN_SIZE(size, alignment);
35
        offsets[0] = size;
36
-       size += (width / 2) * (height / 2) * 2;
37
+       const uint32_t cbcr_width = (width + 1) & (UINT32_MAX - 1);
38
+       size += cbcr_width * ((height + 1) / 2);
39
        ALIGN_SIZE(size, alignment);
40
        frame->data[0] = bmalloc(size);
41
        frame->data[1] = (uint8_t *)frame->data[0] + offsets[0];
42
        frame->linesize[0] = width;
43
-       frame->linesize[1] = width;
44
+       frame->linesize[1] = cbcr_width;
45
        break;
46
+   }
47
 
48
    case VIDEO_FORMAT_Y800:
49
        size = width * height;
50
@@ -75,12 +81,15 @@
51
 
52
    case VIDEO_FORMAT_YVYU:
53
    case VIDEO_FORMAT_YUY2:
54
-   case VIDEO_FORMAT_UYVY:
55
-       size = width * height * 2;
56
+   case VIDEO_FORMAT_UYVY: {
57
+       const uint32_t double_width =
58
+           ((width + 1) & (UINT32_MAX - 1)) * 2;
59
+       size = double_width * height;
60
        ALIGN_SIZE(size, alignment);
61
        frame->data[0] = bmalloc(size);
62
-       frame->linesize[0] = width * 2;
63
+       frame->linesize[0] = double_width;
64
        break;
65
+   }
66
 
67
    case VIDEO_FORMAT_RGBA:
68
    case VIDEO_FORMAT_BGRA:
69
@@ -110,31 +119,37 @@
70
        frame->linesize[0] = width * 3;
71
        break;
72
 
73
-   case VIDEO_FORMAT_I422:
74
+   case VIDEO_FORMAT_I422: {
75
        size = width * height;
76
        ALIGN_SIZE(size, alignment);
77
        offsets[0] = size;
78
-       size += (width / 2) * height;
79
+       const uint32_t half_width = (width + 1) / 2;
80
+       const uint32_t half_area = half_width * height;
81
+       size += half_area;
82
        ALIGN_SIZE(size, alignment);
83
        offsets[1] = size;
84
-       size += (width / 2) * height;
85
+       size += half_area;
86
        ALIGN_SIZE(size, alignment);
87
        frame->data[0] = bmalloc(size);
88
        frame->data[1] = (uint8_t *)frame->data[0] + offsets[0];
89
        frame->data[2] = (uint8_t *)frame->data[0] + offsets[1];
90
        frame->linesize[0] = width;
91
-       frame->linesize[1] = width / 2;
92
-       frame->linesize[2] = width / 2;
93
+       frame->linesize[1] = half_width;
94
+       frame->linesize[2] = half_width;
95
        break;
96
+   }
97
 
98
-   case VIDEO_FORMAT_I40A:
99
+   case VIDEO_FORMAT_I40A: {
100
        size = width * height;
101
        ALIGN_SIZE(size, alignment);
102
        offsets[0] = size;
103
-       size += (width / 2) * (height / 2);
104
+       const uint32_t half_width = (width + 1) / 2;
105
+       const uint32_t half_height = (height + 1) / 2;
106
+       const uint32_t quarter_area = half_width * half_height;
107
+       size += quarter_area;
108
        ALIGN_SIZE(size, alignment);
109
        offsets[1] = size;
110
-       size += (width / 2) * (height / 2);
111
+       size += quarter_area;
112
        ALIGN_SIZE(size, alignment);
113
        offsets[2] = size;
114
        size += width * height;
115
@@ -144,19 +159,22 @@
116
        frame->data[2] = (uint8_t *)frame->data[0] + offsets[1];
117
        frame->data[3] = (uint8_t *)frame->data[0] + offsets[2];
118
        frame->linesize[0] = width;
119
-       frame->linesize[1] = width / 2;
120
-       frame->linesize[2] = width / 2;
121
+       frame->linesize[1] = half_width;
122
+       frame->linesize[2] = half_width;
123
        frame->linesize[3] = width;
124
        break;
125
+   }
126
 
127
-   case VIDEO_FORMAT_I42A:
128
+   case VIDEO_FORMAT_I42A: {
129
        size = width * height;
130
        ALIGN_SIZE(size, alignment);
131
        offsets[0] = size;
132
-       size += (width / 2) * height;
133
+       const uint32_t half_width = (width + 1) / 2;
134
+       const uint32_t half_area = half_width * height;
135
+       size += half_area;
136
        ALIGN_SIZE(size, alignment);
137
        offsets[1] = size;
138
-       size += (width / 2) * height;
139
+       size += half_area;
140
        ALIGN_SIZE(size, alignment);
141
        offsets[2] = size;
142
        size += width * height;
143
@@ -166,10 +184,11 @@
144
        frame->data[2] = (uint8_t *)frame->data[0] + offsets[1];
145
        frame->data[3] = (uint8_t *)frame->data[0] + offsets[2];
146
        frame->linesize[0] = width;
147
-       frame->linesize[1] = width / 2;
148
-       frame->linesize[2] = width / 2;
149
+       frame->linesize[1] = half_width;
150
+       frame->linesize[2] = half_width;
151
        frame->linesize[3] = width;
152
        break;
153
+   }
154
 
155
    case VIDEO_FORMAT_YUVA:
156
        size = width * height;
157
obs-studio-27.0.1.tar.xz/libobs/media-io/video-io.c -> obs-studio-27.1.3.tar.xz/libobs/media-io/video-io.c Changed
76
 
1
@@ -225,32 +225,27 @@
2
 int video_output_open(video_t **video, struct video_output_info *info)
3
 {
4
    struct video_output *out;
5
-   pthread_mutexattr_t attr;
6
 
7
    if (!valid_video_params(info))
8
        return VIDEO_OUTPUT_INVALIDPARAM;
9
 
10
    out = bzalloc(sizeof(struct video_output));
11
    if (!out)
12
-       goto fail;
13
+       goto fail0;
14
 
15
    memcpy(&out->info, info, sizeof(struct video_output_info));
16
    out->frame_time =
17
        util_mul_div64(1000000000ULL, info->fps_den, info->fps_num);
18
    out->initialized = false;
19
 
20
-   if (pthread_mutexattr_init(&attr) != 0)
21
-       goto fail;
22
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
23
-       goto fail;
24
-   if (pthread_mutex_init(&out->data_mutex, &attr) != 0)
25
-       goto fail;
26
-   if (pthread_mutex_init(&out->input_mutex, &attr) != 0)
27
-       goto fail;
28
+   if (pthread_mutex_init_recursive(&out->data_mutex) != 0)
29
+       goto fail0;
30
+   if (pthread_mutex_init_recursive(&out->input_mutex) != 0)
31
+       goto fail1;
32
    if (os_sem_init(&out->update_semaphore, 0) != 0)
33
-       goto fail;
34
+       goto fail2;
35
    if (pthread_create(&out->thread, NULL, video_thread, out) != 0)
36
-       goto fail;
37
+       goto fail3;
38
 
39
    init_cache(out);
40
 
41
@@ -258,7 +253,13 @@
42
    *video = out;
43
    return VIDEO_OUTPUT_SUCCESS;
44
 
45
-fail:
46
+fail3:
47
+   os_sem_destroy(out->update_semaphore);
48
+fail2:
49
+   pthread_mutex_destroy(&out->input_mutex);
50
+fail1:
51
+   pthread_mutex_destroy(&out->data_mutex);
52
+fail0:
53
    video_output_close(out);
54
    return VIDEO_OUTPUT_FAIL;
55
 }
56
@@ -277,9 +278,6 @@
57
    for (size_t i = 0; i < video->info.cache_size; i++)
58
        video_frame_free((struct video_frame *)&video->cache[i]);
59
 
60
-   os_sem_destroy(video->update_semaphore);
61
-   pthread_mutex_destroy(&video->data_mutex);
62
-   pthread_mutex_destroy(&video->input_mutex);
63
    bfree(video);
64
 }
65
 
66
@@ -510,6 +508,9 @@
67
        video->stop = true;
68
        os_sem_post(video->update_semaphore);
69
        pthread_join(video->thread, &thread_ret);
70
+       os_sem_destroy(video->update_semaphore);
71
+       pthread_mutex_destroy(&video->data_mutex);
72
+       pthread_mutex_destroy(&video->input_mutex);
73
    }
74
 }
75
 
76
obs-studio-27.0.1.tar.xz/libobs/obs-audio.c -> obs-studio-27.1.3.tar.xz/libobs/obs-audio.c Changed
24
 
1
@@ -101,9 +101,10 @@
2
 
3
    if (num_floats) {
4
        /* round up the number of samples to drop */
5
-       size_t drop = util_mul_div64(start_ts - source->audio_ts - 1,
6
-                        sample_rate, 1000000000ULL) +
7
-                 1;
8
+       size_t drop =
9
+           (size_t)util_mul_div64(start_ts - source->audio_ts - 1,
10
+                          sample_rate, 1000000000ULL) +
11
+           1;
12
        if (drop > num_floats)
13
            drop = num_floats;
14
 
15
@@ -344,7 +345,7 @@
16
                            AUDIO_OUTPUT_FRAMES);
17
 
18
    while (ticks--) {
19
-       int cur_ticks = ++audio->buffering_wait_ticks;
20
+       const uint64_t cur_ticks = ++audio->buffering_wait_ticks;
21
 
22
        new_ts.end = new_ts.start;
23
        new_ts.start =
24
obs-studio-27.0.1.tar.xz/libobs/obs-config.h -> obs-studio-27.1.3.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 1
14
+#define LIBOBS_API_PATCH_VER 3
15
 
16
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
17
    ((major << 24) | (minor << 16) | patch)
18
obs-studio-27.0.1.tar.xz/libobs/obs-encoder.c -> obs-studio-27.1.3.tar.xz/libobs/obs-encoder.c Changed
75
 
1
@@ -44,23 +44,17 @@
2
 static bool init_encoder(struct obs_encoder *encoder, const char *name,
3
             obs_data_t *settings, obs_data_t *hotkey_data)
4
 {
5
-   pthread_mutexattr_t attr;
6
-
7
    pthread_mutex_init_value(&encoder->init_mutex);
8
    pthread_mutex_init_value(&encoder->callbacks_mutex);
9
    pthread_mutex_init_value(&encoder->outputs_mutex);
10
    pthread_mutex_init_value(&encoder->pause.mutex);
11
 
12
-   if (pthread_mutexattr_init(&attr) != 0)
13
-       return false;
14
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
15
-       return false;
16
    if (!obs_context_data_init(&encoder->context, OBS_OBJ_TYPE_ENCODER,
17
                   settings, name, hotkey_data, false))
18
        return false;
19
-   if (pthread_mutex_init(&encoder->init_mutex, &attr) != 0)
20
+   if (pthread_mutex_init_recursive(&encoder->init_mutex) != 0)
21
        return false;
22
-   if (pthread_mutex_init(&encoder->callbacks_mutex, &attr) != 0)
23
+   if (pthread_mutex_init_recursive(&encoder->callbacks_mutex) != 0)
24
        return false;
25
    if (pthread_mutex_init(&encoder->outputs_mutex, NULL) != 0)
26
        return false;
27
@@ -397,9 +391,12 @@
28
 
29
    obs_data_apply(encoder->context.settings, settings);
30
 
31
-   if (encoder->info.update && encoder->context.data)
32
-       encoder->info.update(encoder->context.data,
33
-                    encoder->context.settings);
34
+   // Note, we don't actually apply the changes to the encoder here
35
+   // as it may be active in another thread. Setting this to true
36
+   // makes the changes apply at the next possible moment in the
37
+   // encoder / GPU encoder thread.
38
+   if (encoder->info.update)
39
+       encoder->reconfigure_requested = true;
40
 }
41
 
42
 bool obs_encoder_get_extra_data(const obs_encoder_t *encoder,
43
@@ -885,15 +882,18 @@
44
    da_free(data);
45
 }
46
 
47
+static const char *send_packet_name = "send_packet";
48
 static inline void send_packet(struct obs_encoder *encoder,
49
                   struct encoder_callback *cb,
50
                   struct encoder_packet *packet)
51
 {
52
+   profile_start(send_packet_name);
53
    /* include SEI in first video packet */
54
    if (encoder->info.type == OBS_ENCODER_VIDEO && !cb->sent_first_packet)
55
        send_first_video_packet(encoder, cb, packet);
56
    else
57
        cb->new_packet(cb->param, packet);
58
+   profile_end(send_packet_name);
59
 }
60
 
61
 void full_stop(struct obs_encoder *encoder)
62
@@ -970,6 +970,12 @@
63
    bool received = false;
64
    bool success;
65
 
66
+   if (encoder->reconfigure_requested) {
67
+       encoder->reconfigure_requested = false;
68
+       encoder->info.update(encoder->context.data,
69
+                    encoder->context.settings);
70
+   }
71
+
72
    pkt.timebase_num = encoder->timebase_num;
73
    pkt.timebase_den = encoder->timebase_den;
74
    pkt.encoder = encoder;
75
obs-studio-27.0.1.tar.xz/libobs/obs-hotkey-name-map.c -> obs-studio-27.1.3.tar.xz/libobs/obs-hotkey-name-map.c Changed
12
 
1
@@ -15,6 +15,10 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
+#ifdef _MSC_VER
6
+#define WIN32_LEAN_AND_MEAN
7
+#endif
8
+
9
 #include <string.h>
10
 #include <assert.h>
11
 
12
obs-studio-27.0.1.tar.xz/libobs/obs-internal.h -> obs-studio-27.1.3.tar.xz/libobs/obs-internal.h Changed
39
 
1
@@ -330,7 +330,7 @@
2
 
3
    uint64_t buffered_ts;
4
    struct circlebuf buffered_timestamps;
5
-   int buffering_wait_ticks;
6
+   uint64_t buffering_wait_ticks;
7
    int total_buffering_ticks;
8
 
9
    float user_volume;
10
@@ -630,6 +630,9 @@
11
    /* used to temporarily disable sources if needed */
12
    bool enabled;
13
 
14
+   /* hint to allow sources to render more quickly */
15
+   bool texcoords_centered;
16
+
17
    /* timing (if video is present, is based upon video) */
18
    volatile bool timing_set;
19
    volatile uint64_t timing_adjust;
20
@@ -847,6 +850,8 @@
21
    }
22
 }
23
 
24
+extern void obs_source_set_texcoords_centered(obs_source_t *source,
25
+                         bool centered);
26
 extern void obs_source_activate(obs_source_t *source, enum view_type type);
27
 extern void obs_source_deactivate(obs_source_t *source, enum view_type type);
28
 extern void obs_source_video_tick(obs_source_t *source, float seconds);
29
@@ -1115,6 +1120,9 @@
30
 
31
    const char *profile_encoder_encode_name;
32
    char *last_error_message;
33
+
34
+   /* reconfigure encoder at next possible opportunity */
35
+   bool reconfigure_requested;
36
 };
37
 
38
 extern struct obs_encoder_info *find_encoder(const char *id);
39
obs-studio-27.0.1.tar.xz/libobs/obs-module.c -> obs-studio-27.1.3.tar.xz/libobs/obs-module.c Changed
44
 
1
@@ -594,8 +594,8 @@
2
        memcpy(&data, info,                                        \
3
               sizeof(data) < size_var ? sizeof(data) : size_var); \
4
                                                                            \
5
-       if (info->type_data && info->free_type_data)               \
6
-           info->free_type_data(info->type_data);             \
7
+       if (data.type_data && data.free_type_data)                 \
8
+           data.free_type_data(data.type_data);               \
9
    } while (false)
10
 
11
 #define source_warn(format, ...) \
12
@@ -631,6 +631,15 @@
13
        goto error;
14
    }
15
 
16
+   if (size > sizeof(data)) {
17
+       source_warn("Tried to register obs_source_info with size "
18
+               "%llu which is more than libobs currently "
19
+               "supports (%llu)",
20
+               (long long unsigned)size,
21
+               (long long unsigned)sizeof(data));
22
+       goto error;
23
+   }
24
+
25
    memcpy(&data, info, size);
26
 
27
    /* mark audio-only filters as an async filter categorically */
28
@@ -684,15 +693,6 @@
29
    }
30
 #undef CHECK_REQUIRED_VAL_
31
 
32
-   if (size > sizeof(data)) {
33
-       source_warn("Tried to register obs_source_info with size "
34
-               "%llu which is more than libobs currently "
35
-               "supports (%llu)",
36
-               (long long unsigned)size,
37
-               (long long unsigned)sizeof(data));
38
-       goto error;
39
-   }
40
-
41
    /* version-related stuff */
42
    data.unversioned_id = data.id;
43
    if (data.version) {
44
obs-studio-27.0.1.tar.xz/libobs/obs-nix.c -> obs-studio-27.1.3.tar.xz/libobs/obs-nix.c Changed
23
 
1
@@ -51,13 +51,18 @@
2
 #define BIT_STRING "32bit"
3
 #endif
4
 
5
-static const char *module_bin[] = {"../../obs-plugins/" BIT_STRING,
6
-                  OBS_INSTALL_PREFIX
7
-                  "/" OBS_PLUGIN_DESTINATION};
8
+#define FLATPAK_PLUGIN_PATH "/app/plugins"
9
+
10
+static const char *module_bin[] = {
11
+   "../../obs-plugins/" BIT_STRING,
12
+   OBS_INSTALL_PREFIX "/" OBS_PLUGIN_DESTINATION,
13
+   FLATPAK_PLUGIN_PATH "/" OBS_PLUGIN_DESTINATION,
14
+};
15
 
16
 static const char *module_data[] = {
17
    OBS_DATA_PATH "/obs-plugins/%module%",
18
    OBS_INSTALL_DATA_PATH "/obs-plugins/%module%",
19
+   FLATPAK_PLUGIN_PATH "/share/obs/obs-plugins/%module%",
20
 };
21
 
22
 static const int module_patterns_size =
23
obs-studio-27.0.1.tar.xz/libobs/obs-output.c -> obs-studio-27.1.3.tar.xz/libobs/obs-output.c Changed
10
 
1
@@ -1222,7 +1222,7 @@
2
    sei_init(&sei, 0.0);
3
 
4
    da_init(out_data);
5
-   da_push_back_array(out_data, &ref, sizeof(ref));
6
+   da_push_back_array(out_data, (uint8_t *)&ref, sizeof(ref));
7
    da_push_back_array(out_data, out->data, out->size);
8
 
9
    if (output->caption_data.size > 0) {
10
obs-studio-27.0.1.tar.xz/libobs/obs-properties.c -> obs-studio-27.1.3.tar.xz/libobs/obs-properties.c Changed
51
 
1
@@ -72,6 +72,8 @@
2
 
3
 struct button_data {
4
    obs_property_clicked_t callback;
5
+   enum obs_button_type type;
6
+   char *url;
7
 };
8
 
9
 struct frame_rate_option {
10
@@ -1102,6 +1104,24 @@
11
    data->monospace = monospace;
12
 }
13
 
14
+void obs_property_button_set_type(obs_property_t *p, enum obs_button_type type)
15
+{
16
+   struct button_data *data = get_type_data(p, OBS_PROPERTY_BUTTON);
17
+   if (!data)
18
+       return;
19
+
20
+   data->type = type;
21
+}
22
+
23
+void obs_property_button_set_url(obs_property_t *p, char *url)
24
+{
25
+   struct button_data *data = get_type_data(p, OBS_PROPERTY_BUTTON);
26
+   if (!data)
27
+       return;
28
+
29
+   data->url = url;
30
+}
31
+
32
 void obs_property_list_clear(obs_property_t *p)
33
 {
34
    struct list_data *data = get_list_data(p);
35
@@ -1435,3 +1455,15 @@
36
    struct group_data *data = get_type_data(p, OBS_PROPERTY_GROUP);
37
    return data ? data->content : NULL;
38
 }
39
+
40
+enum obs_button_type obs_property_button_type(obs_property_t *p)
41
+{
42
+   struct button_data *data = get_type_data(p, OBS_PROPERTY_BUTTON);
43
+   return data ? data->type : OBS_BUTTON_DEFAULT;
44
+}
45
+
46
+const char *obs_property_button_url(obs_property_t *p)
47
+{
48
+   struct button_data *data = get_type_data(p, OBS_PROPERTY_BUTTON);
49
+   return data ? data->url : "";
50
+}
51
obs-studio-27.0.1.tar.xz/libobs/obs-properties.h -> obs-studio-27.1.3.tar.xz/libobs/obs-properties.h Changed
34
 
1
@@ -101,6 +101,11 @@
2
    OBS_GROUP_CHECKABLE,
3
 };
4
 
5
+enum obs_button_type {
6
+   OBS_BUTTON_DEFAULT,
7
+   OBS_BUTTON_URL,
8
+};
9
+
10
 #define OBS_FONT_BOLD (1 << 0)
11
 #define OBS_FONT_ITALIC (1 << 1)
12
 #define OBS_FONT_UNDERLINE (1 << 2)
13
@@ -334,6 +339,10 @@
14
                      const char *suffix);
15
 EXPORT void obs_property_text_set_monospace(obs_property_t *p, bool monospace);
16
 
17
+EXPORT void obs_property_button_set_type(obs_property_t *p,
18
+                    enum obs_button_type type);
19
+EXPORT void obs_property_button_set_url(obs_property_t *p, char *url);
20
+
21
 EXPORT void obs_property_list_clear(obs_property_t *p);
22
 
23
 EXPORT size_t obs_property_list_add_string(obs_property_t *p, const char *name,
24
@@ -401,6 +410,9 @@
25
 EXPORT enum obs_group_type obs_property_group_type(obs_property_t *p);
26
 EXPORT obs_properties_t *obs_property_group_content(obs_property_t *p);
27
 
28
+EXPORT enum obs_button_type obs_property_button_type(obs_property_t *p);
29
+EXPORT const char *obs_property_button_url(obs_property_t *p);
30
+
31
 #ifndef SWIG
32
 OBS_DEPRECATED
33
 EXPORT enum obs_text_type obs_proprety_text_type(obs_property_t *p);
34
obs-studio-27.0.1.tar.xz/libobs/obs-scene.c -> obs-studio-27.1.3.tar.xz/libobs/obs-scene.c Changed
165
 
1
@@ -84,7 +84,6 @@
2
 
3
 static void *scene_create(obs_data_t *settings, struct obs_source *source)
4
 {
5
-   pthread_mutexattr_t attr;
6
    struct obs_scene *scene = bzalloc(sizeof(struct obs_scene));
7
    scene->source = source;
8
 
9
@@ -98,16 +97,12 @@
10
    signal_handler_add_array(obs_source_get_signal_handler(source),
11
                 obs_scene_signals);
12
 
13
-   if (pthread_mutexattr_init(&attr) != 0)
14
-       goto fail;
15
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
16
-       goto fail;
17
-   if (pthread_mutex_init(&scene->audio_mutex, &attr) != 0) {
18
+   if (pthread_mutex_init_recursive(&scene->audio_mutex) != 0) {
19
        blog(LOG_ERROR, "scene_create: Couldn't initialize audio "
20
                "mutex");
21
        goto fail;
22
    }
23
-   if (pthread_mutex_init(&scene->video_mutex, &attr) != 0) {
24
+   if (pthread_mutex_init_recursive(&scene->video_mutex) != 0) {
25
        blog(LOG_ERROR, "scene_create: Couldn't initialize video "
26
                "mutex");
27
        goto fail;
28
@@ -117,7 +112,6 @@
29
    return scene;
30
 
31
 fail:
32
-   pthread_mutexattr_destroy(&attr);
33
    bfree(scene);
34
    return NULL;
35
 }
36
@@ -561,6 +555,20 @@
37
    GS_DEBUG_MARKER_END();
38
 }
39
 
40
+static bool are_texcoords_centered(struct matrix4 *m)
41
+{
42
+   static const struct matrix4 identity = {
43
+       {1.0f, 0.0f, 0.0f, 0.0f},
44
+       {0.0f, 1.0f, 0.0f, 0.0f},
45
+       {0.0f, 0.0f, 1.0f, 0.0f},
46
+       {0.0f, 0.0f, 0.0f, 1.0f},
47
+   };
48
+   struct matrix4 copy = identity;
49
+   copy.t.x = floorf(m->t.x);
50
+   copy.t.y = floorf(m->t.y);
51
+   return memcmp(m, &copy, sizeof(*m)) == 0;
52
+}
53
+
54
 static inline void render_item(struct obs_scene_item *item)
55
 {
56
    GS_DEBUG_MARKER_BEGIN_FORMAT(GS_DEBUG_COLOR_ITEM, "Item: %s",
57
@@ -610,7 +618,11 @@
58
                            cx, cy);
59
                obs_source_video_render(item->hide_transition);
60
            } else {
61
+               obs_source_set_texcoords_centered(item->source,
62
+                                 true);
63
                obs_source_video_render(item->source);
64
+               obs_source_set_texcoords_centered(item->source,
65
+                                 false);
66
            }
67
 
68
            gs_texrender_end(item->item_render);
69
@@ -635,7 +647,11 @@
70
        obs_transition_set_size(item->hide_transition, cx, cy);
71
        obs_source_video_render(item->hide_transition);
72
    } else {
73
+       const bool centered =
74
+           are_texcoords_centered(&item->draw_transform);
75
+       obs_source_set_texcoords_centered(item->source, centered);
76
        obs_source_video_render(item->source);
77
+       obs_source_set_texcoords_centered(item->source, false);
78
    }
79
    gs_matrix_pop();
80
    gs_set_linear_srgb(previous);
81
@@ -1795,7 +1811,8 @@
82
 
83
 static obs_sceneitem_t *obs_scene_add_internal(obs_scene_t *scene,
84
                           obs_source_t *source,
85
-                          obs_sceneitem_t *insert_after)
86
+                          obs_sceneitem_t *insert_after,
87
+                          bool create_texture)
88
 {
89
    struct obs_scene_item *last;
90
    struct obs_scene_item *item;
91
@@ -1812,6 +1829,11 @@
92
        return NULL;
93
    }
94
 
95
+   if (source->removed) {
96
+       blog(LOG_WARNING, "Tried to add a removed source to a scene");
97
+       return NULL;
98
+   }
99
+
100
    if (pthread_mutex_init(&mutex, NULL) != 0) {
101
        blog(LOG_WARNING, "Failed to create scene item mutex");
102
        return NULL;
103
@@ -1850,7 +1872,7 @@
104
        item->visible = true;
105
    }
106
 
107
-   if (item_texture_enabled(item)) {
108
+   if (create_texture && item_texture_enabled(item)) {
109
        obs_enter_graphics();
110
        item->item_render = gs_texrender_create(GS_RGBA, GS_ZS_NONE);
111
        obs_leave_graphics();
112
@@ -1891,7 +1913,8 @@
113
 
114
 obs_sceneitem_t *obs_scene_add(obs_scene_t *scene, obs_source_t *source)
115
 {
116
-   obs_sceneitem_t *item = obs_scene_add_internal(scene, source, NULL);
117
+   obs_sceneitem_t *item =
118
+       obs_scene_add_internal(scene, source, NULL, true);
119
    struct calldata params;
120
    uint8_t stack[128];
121
 
122
@@ -2974,8 +2997,8 @@
123
    obs_scene_t *sub_scene = create_id("group", name);
124
    obs_sceneitem_t *last_item = items ? items[count - 1] : NULL;
125
 
126
-   obs_sceneitem_t *item =
127
-       obs_scene_add_internal(scene, sub_scene->source, last_item);
128
+   obs_sceneitem_t *item = obs_scene_add_internal(scene, sub_scene->source,
129
+                              last_item, true);
130
 
131
    obs_scene_release(sub_scene);
132
 
133
@@ -3086,7 +3109,8 @@
134
        obs_sceneitem_t *dst;
135
 
136
        remove_group_transform(item, last);
137
-       dst = obs_scene_add_internal(scene, last->source, insert_after);
138
+       dst = obs_scene_add_internal(scene, last->source, insert_after,
139
+                        false);
140
        duplicate_item_data(dst, last, true, true, true);
141
        apply_group_transform(last, item);
142
 
143
@@ -3189,7 +3213,9 @@
144
 
145
    obs_sceneitem_t *item = scene->first_item;
146
    while (item) {
147
-       da_push_back(items, &item);
148
+       struct obs_sceneitem_order_info info = {0};
149
+       info.item = item;
150
+       da_push_back(items, &info);
151
 
152
        if (item->is_group) {
153
            obs_scene_t *sub_scene = item->source->context.data;
154
@@ -3199,7 +3225,9 @@
155
            obs_sceneitem_t *sub_item = sub_scene->first_item;
156
 
157
            while (sub_item) {
158
-               da_push_back(items, &item);
159
+               info.group = item;
160
+               info.item = sub_item;
161
+               da_push_back(items, &info);
162
 
163
                sub_item = sub_item->next;
164
            }
165
obs-studio-27.0.1.tar.xz/libobs/obs-source.c -> obs-studio-27.1.3.tar.xz/libobs/obs-source.c Changed
292
 
1
@@ -172,8 +172,6 @@
2
 /* internal initialization */
3
 static bool obs_source_init(struct obs_source *source)
4
 {
5
-   pthread_mutexattr_t attr;
6
-
7
    source->user_volume = 1.0f;
8
    source->volume = 1.0f;
9
    source->sync_offset = 0;
10
@@ -186,11 +184,7 @@
11
    pthread_mutex_init_value(&source->audio_cb_mutex);
12
    pthread_mutex_init_value(&source->caption_cb_mutex);
13
 
14
-   if (pthread_mutexattr_init(&attr) != 0)
15
-       return false;
16
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
17
-       return false;
18
-   if (pthread_mutex_init(&source->filter_mutex, &attr) != 0)
19
+   if (pthread_mutex_init_recursive(&source->filter_mutex) != 0)
20
        return false;
21
    if (pthread_mutex_init(&source->audio_buf_mutex, NULL) != 0)
22
        return false;
23
@@ -1030,6 +1024,16 @@
24
    }
25
 }
26
 
27
+bool obs_source_get_texcoords_centered(obs_source_t *source)
28
+{
29
+   return source->texcoords_centered;
30
+}
31
+
32
+void obs_source_set_texcoords_centered(obs_source_t *source, bool centered)
33
+{
34
+   source->texcoords_centered = centered;
35
+}
36
+
37
 static void activate_source(obs_source_t *source)
38
 {
39
    if (source->context.data && source->info.activate)
40
@@ -1544,8 +1548,11 @@
41
 static inline bool set_packed422_sizes(struct obs_source *source,
42
                       const struct obs_source_frame *frame)
43
 {
44
-   source->async_convert_width[0] = frame->width / 2;
45
-   source->async_convert_height[0] = frame->height;
46
+   const uint32_t width = frame->width;
47
+   const uint32_t height = frame->height;
48
+   const uint32_t half_width = (width + 1) / 2;
49
+   source->async_convert_width[0] = half_width;
50
+   source->async_convert_height[0] = height;
51
    source->async_texture_formats[0] = GS_BGRA;
52
    source->async_channel_count = 1;
53
    return true;
54
@@ -1601,12 +1608,16 @@
55
 static inline bool set_planar420_sizes(struct obs_source *source,
56
                       const struct obs_source_frame *frame)
57
 {
58
-   source->async_convert_width[0] = frame->width;
59
-   source->async_convert_width[1] = frame->width / 2;
60
-   source->async_convert_width[2] = frame->width / 2;
61
-   source->async_convert_height[0] = frame->height;
62
-   source->async_convert_height[1] = frame->height / 2;
63
-   source->async_convert_height[2] = frame->height / 2;
64
+   const uint32_t width = frame->width;
65
+   const uint32_t height = frame->height;
66
+   const uint32_t half_width = (width + 1) / 2;
67
+   const uint32_t half_height = (height + 1) / 2;
68
+   source->async_convert_width[0] = width;
69
+   source->async_convert_width[1] = half_width;
70
+   source->async_convert_width[2] = half_width;
71
+   source->async_convert_height[0] = height;
72
+   source->async_convert_height[1] = half_height;
73
+   source->async_convert_height[2] = half_height;
74
    source->async_texture_formats[0] = GS_R8;
75
    source->async_texture_formats[1] = GS_R8;
76
    source->async_texture_formats[2] = GS_R8;
77
@@ -1618,14 +1629,18 @@
78
 set_planar420_alpha_sizes(struct obs_source *source,
79
              const struct obs_source_frame *frame)
80
 {
81
-   source->async_convert_width[0] = frame->width;
82
-   source->async_convert_width[1] = frame->width / 2;
83
-   source->async_convert_width[2] = frame->width / 2;
84
-   source->async_convert_width[3] = frame->width;
85
-   source->async_convert_height[0] = frame->height;
86
-   source->async_convert_height[1] = frame->height / 2;
87
-   source->async_convert_height[2] = frame->height / 2;
88
-   source->async_convert_height[3] = frame->height;
89
+   const uint32_t width = frame->width;
90
+   const uint32_t height = frame->height;
91
+   const uint32_t half_width = (width + 1) / 2;
92
+   const uint32_t half_height = (height + 1) / 2;
93
+   source->async_convert_width[0] = width;
94
+   source->async_convert_width[1] = half_width;
95
+   source->async_convert_width[2] = half_width;
96
+   source->async_convert_width[3] = width;
97
+   source->async_convert_height[0] = height;
98
+   source->async_convert_height[1] = half_height;
99
+   source->async_convert_height[2] = half_height;
100
+   source->async_convert_height[3] = height;
101
    source->async_texture_formats[0] = GS_R8;
102
    source->async_texture_formats[1] = GS_R8;
103
    source->async_texture_formats[2] = GS_R8;
104
@@ -1637,12 +1652,15 @@
105
 static inline bool set_planar422_sizes(struct obs_source *source,
106
                       const struct obs_source_frame *frame)
107
 {
108
-   source->async_convert_width[0] = frame->width;
109
-   source->async_convert_width[1] = frame->width / 2;
110
-   source->async_convert_width[2] = frame->width / 2;
111
-   source->async_convert_height[0] = frame->height;
112
-   source->async_convert_height[1] = frame->height;
113
-   source->async_convert_height[2] = frame->height;
114
+   const uint32_t width = frame->width;
115
+   const uint32_t height = frame->height;
116
+   const uint32_t half_width = (width + 1) / 2;
117
+   source->async_convert_width[0] = width;
118
+   source->async_convert_width[1] = half_width;
119
+   source->async_convert_width[2] = half_width;
120
+   source->async_convert_height[0] = height;
121
+   source->async_convert_height[1] = height;
122
+   source->async_convert_height[2] = height;
123
    source->async_texture_formats[0] = GS_R8;
124
    source->async_texture_formats[1] = GS_R8;
125
    source->async_texture_formats[2] = GS_R8;
126
@@ -1654,14 +1672,17 @@
127
 set_planar422_alpha_sizes(struct obs_source *source,
128
              const struct obs_source_frame *frame)
129
 {
130
-   source->async_convert_width[0] = frame->width;
131
-   source->async_convert_width[1] = frame->width / 2;
132
-   source->async_convert_width[2] = frame->width / 2;
133
-   source->async_convert_width[3] = frame->width;
134
-   source->async_convert_height[0] = frame->height;
135
-   source->async_convert_height[1] = frame->height;
136
-   source->async_convert_height[2] = frame->height;
137
-   source->async_convert_height[3] = frame->height;
138
+   const uint32_t width = frame->width;
139
+   const uint32_t height = frame->height;
140
+   const uint32_t half_width = (width + 1) / 2;
141
+   source->async_convert_width[0] = width;
142
+   source->async_convert_width[1] = half_width;
143
+   source->async_convert_width[2] = half_width;
144
+   source->async_convert_width[3] = width;
145
+   source->async_convert_height[0] = height;
146
+   source->async_convert_height[1] = height;
147
+   source->async_convert_height[2] = height;
148
+   source->async_convert_height[3] = height;
149
    source->async_texture_formats[0] = GS_R8;
150
    source->async_texture_formats[1] = GS_R8;
151
    source->async_texture_formats[2] = GS_R8;
152
@@ -1673,10 +1694,14 @@
153
 static inline bool set_nv12_sizes(struct obs_source *source,
154
                  const struct obs_source_frame *frame)
155
 {
156
-   source->async_convert_width[0] = frame->width;
157
-   source->async_convert_width[1] = frame->width / 2;
158
-   source->async_convert_height[0] = frame->height;
159
-   source->async_convert_height[1] = frame->height / 2;
160
+   const uint32_t width = frame->width;
161
+   const uint32_t height = frame->height;
162
+   const uint32_t half_width = (width + 1) / 2;
163
+   const uint32_t half_height = (height + 1) / 2;
164
+   source->async_convert_width[0] = width;
165
+   source->async_convert_width[1] = half_width;
166
+   source->async_convert_height[0] = height;
167
+   source->async_convert_height[1] = half_height;
168
    source->async_texture_formats[0] = GS_R8;
169
    source->async_texture_formats[1] = GS_R8G8;
170
    source->async_channel_count = 2;
171
@@ -2736,16 +2761,22 @@
172
    }
173
 
174
    switch (src->format) {
175
-   case VIDEO_FORMAT_I420:
176
-       copy_frame_data_plane(dst, src, 0, dst->height);
177
-       copy_frame_data_plane(dst, src, 1, dst->height / 2);
178
-       copy_frame_data_plane(dst, src, 2, dst->height / 2);
179
+   case VIDEO_FORMAT_I420: {
180
+       const uint32_t height = dst->height;
181
+       const uint32_t half_height = (height + 1) / 2;
182
+       copy_frame_data_plane(dst, src, 0, height);
183
+       copy_frame_data_plane(dst, src, 1, half_height);
184
+       copy_frame_data_plane(dst, src, 2, half_height);
185
        break;
186
+   }
187
 
188
-   case VIDEO_FORMAT_NV12:
189
-       copy_frame_data_plane(dst, src, 0, dst->height);
190
-       copy_frame_data_plane(dst, src, 1, dst->height / 2);
191
+   case VIDEO_FORMAT_NV12: {
192
+       const uint32_t height = dst->height;
193
+       const uint32_t half_height = (height + 1) / 2;
194
+       copy_frame_data_plane(dst, src, 0, height);
195
+       copy_frame_data_plane(dst, src, 1, half_height);
196
        break;
197
+   }
198
 
199
    case VIDEO_FORMAT_I444:
200
    case VIDEO_FORMAT_I422:
201
@@ -2767,12 +2798,15 @@
202
        copy_frame_data_plane(dst, src, 0, dst->height);
203
        break;
204
 
205
-   case VIDEO_FORMAT_I40A:
206
-       copy_frame_data_plane(dst, src, 0, dst->height);
207
-       copy_frame_data_plane(dst, src, 1, dst->height / 2);
208
-       copy_frame_data_plane(dst, src, 2, dst->height / 2);
209
-       copy_frame_data_plane(dst, src, 3, dst->height);
210
+   case VIDEO_FORMAT_I40A: {
211
+       const uint32_t height = dst->height;
212
+       const uint32_t half_height = (height + 1) / 2;
213
+       copy_frame_data_plane(dst, src, 0, height);
214
+       copy_frame_data_plane(dst, src, 1, half_height);
215
+       copy_frame_data_plane(dst, src, 2, half_height);
216
+       copy_frame_data_plane(dst, src, 3, height);
217
        break;
218
+   }
219
 
220
    case VIDEO_FORMAT_I42A:
221
    case VIDEO_FORMAT_YUVA:
222
@@ -2813,23 +2847,6 @@
223
    source->prev_async_frame = NULL;
224
 }
225
 
226
-#define MAX_UNUSED_FRAME_DURATION 5
227
-
228
-/* frees frame allocations if they haven't been used for a specific period
229
- * of time */
230
-static void clean_cache(obs_source_t *source)
231
-{
232
-   for (size_t i = source->async_cache.num; i > 0; i--) {
233
-       struct async_frame *af = &source->async_cache.array[i - 1];
234
-       if (!af->used) {
235
-           if (++af->unused_count == MAX_UNUSED_FRAME_DURATION) {
236
-               obs_source_frame_destroy(af->frame);
237
-               da_erase(source->async_cache, i - 1);
238
-           }
239
-       }
240
-   }
241
-}
242
-
243
 #define MAX_ASYNC_FRAMES 30
244
 //if return value is not null then do (os_atomic_dec_long(&output->refs) == 0) && obs_source_frame_destroy(output)
245
 static inline struct obs_source_frame *
246
@@ -2839,19 +2856,29 @@
247
 
248
    pthread_mutex_lock(&source->async_mutex);
249
 
250
-   if (source->async_frames.num >= MAX_ASYNC_FRAMES) {
251
-       free_async_cache(source);
252
-       source->last_frame_ts = 0;
253
-       pthread_mutex_unlock(&source->async_mutex);
254
-       return NULL;
255
-   }
256
-
257
    if (async_texture_changed(source, frame)) {
258
        free_async_cache(source);
259
        source->async_cache_width = frame->width;
260
        source->async_cache_height = frame->height;
261
    }
262
 
263
+   if (source->async_frames.num >= MAX_ASYNC_FRAMES) {
264
+       bool available = false;
265
+       for (size_t i = 0; i < source->async_cache.num; i++) {
266
+           struct async_frame *af = &source->async_cache.array[i];
267
+           if (!af->used) {
268
+               available = true;
269
+               break;
270
+           }
271
+       }
272
+
273
+       if (!available) {
274
+           source->last_frame_ts = 0;
275
+           pthread_mutex_unlock(&source->async_mutex);
276
+           return NULL;
277
+       }
278
+   }
279
+
280
    const enum video_format format = frame->format;
281
    source->async_cache_format = format;
282
    source->async_cache_full_range = frame->full_range;
283
@@ -2867,8 +2894,6 @@
284
        }
285
    }
286
 
287
-   clean_cache(source);
288
-
289
    if (!new_frame) {
290
        struct async_frame new_af;
291
 
292
obs-studio-27.0.1.tar.xz/libobs/obs-video-gpu-encode.c -> obs-studio-27.1.3.tar.xz/libobs/obs-video-gpu-encode.c Changed
14
 
1
@@ -90,6 +90,12 @@
2
            if (video_pause_check(&encoder->pause, timestamp))
3
                continue;
4
 
5
+           if (encoder->reconfigure_requested) {
6
+               encoder->reconfigure_requested = false;
7
+               encoder->info.update(encoder->context.data,
8
+                            encoder->context.settings);
9
+           }
10
+
11
            if (!encoder->start_ts)
12
                encoder->start_ts = timestamp;
13
 
14
obs-studio-27.0.1.tar.xz/libobs/obs.c -> obs-studio-27.1.3.tar.xz/libobs/obs.c Changed
161
 
1
@@ -386,7 +386,6 @@
2
 {
3
    struct obs_core_video *video = &obs->video;
4
    struct video_output_info vi;
5
-   pthread_mutexattr_t attr;
6
    int errorcode;
7
 
8
    make_video_info(&vi, ovi);
9
@@ -420,10 +419,6 @@
10
 
11
    gs_leave_context();
12
 
13
-   if (pthread_mutexattr_init(&attr) != 0)
14
-       return OBS_VIDEO_FAIL;
15
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
16
-       return OBS_VIDEO_FAIL;
17
    if (pthread_mutex_init(&video->gpu_encoder_mutex, NULL) < 0)
18
        return OBS_VIDEO_FAIL;
19
    if (pthread_mutex_init(&video->task_mutex, NULL) < 0)
20
@@ -570,15 +565,9 @@
21
    struct obs_core_audio *audio = &obs->audio;
22
    int errorcode;
23
 
24
-   pthread_mutexattr_t attr;
25
-
26
    pthread_mutex_init_value(&audio->monitoring_mutex);
27
 
28
-   if (pthread_mutexattr_init(&attr) != 0)
29
-       return false;
30
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
31
-       return false;
32
-   if (pthread_mutex_init(&audio->monitoring_mutex, &attr) != 0)
33
+   if (pthread_mutex_init_recursive(&audio->monitoring_mutex) != 0)
34
        return false;
35
 
36
    audio->user_volume = 1.0f;
37
@@ -597,6 +586,16 @@
38
    return false;
39
 }
40
 
41
+static void stop_audio(void)
42
+{
43
+   struct obs_core_audio *audio = &obs->audio;
44
+
45
+   if (audio->audio) {
46
+       audio_output_close(audio->audio);
47
+       audio->audio = NULL;
48
+   }
49
+}
50
+
51
 static void obs_free_audio(void)
52
 {
53
    struct obs_core_audio *audio = &obs->audio;
54
@@ -618,30 +617,25 @@
55
 static bool obs_init_data(void)
56
 {
57
    struct obs_core_data *data = &obs->data;
58
-   pthread_mutexattr_t attr;
59
 
60
    assert(data != NULL);
61
 
62
    pthread_mutex_init_value(&obs->data.displays_mutex);
63
    pthread_mutex_init_value(&obs->data.draw_callbacks_mutex);
64
 
65
-   if (pthread_mutexattr_init(&attr) != 0)
66
-       return false;
67
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
68
-       goto fail;
69
-   if (pthread_mutex_init(&data->sources_mutex, &attr) != 0)
70
+   if (pthread_mutex_init_recursive(&data->sources_mutex) != 0)
71
        goto fail;
72
-   if (pthread_mutex_init(&data->audio_sources_mutex, &attr) != 0)
73
+   if (pthread_mutex_init_recursive(&data->audio_sources_mutex) != 0)
74
        goto fail;
75
-   if (pthread_mutex_init(&data->displays_mutex, &attr) != 0)
76
+   if (pthread_mutex_init_recursive(&data->displays_mutex) != 0)
77
        goto fail;
78
-   if (pthread_mutex_init(&data->outputs_mutex, &attr) != 0)
79
+   if (pthread_mutex_init_recursive(&data->outputs_mutex) != 0)
80
        goto fail;
81
-   if (pthread_mutex_init(&data->encoders_mutex, &attr) != 0)
82
+   if (pthread_mutex_init_recursive(&data->encoders_mutex) != 0)
83
        goto fail;
84
-   if (pthread_mutex_init(&data->services_mutex, &attr) != 0)
85
+   if (pthread_mutex_init_recursive(&data->services_mutex) != 0)
86
        goto fail;
87
-   if (pthread_mutex_init(&obs->data.draw_callbacks_mutex, &attr) != 0)
88
+   if (pthread_mutex_init_recursive(&obs->data.draw_callbacks_mutex) != 0)
89
        goto fail;
90
    if (!obs_view_init(&data->main_view))
91
        goto fail;
92
@@ -650,7 +644,6 @@
93
    data->valid = true;
94
 
95
 fail:
96
-   pthread_mutexattr_destroy(&attr);
97
    return data->valid;
98
 }
99
 
100
@@ -754,7 +747,6 @@
101
 static inline bool obs_init_hotkeys(void)
102
 {
103
    struct obs_core_hotkeys *hotkeys = &obs->hotkeys;
104
-   pthread_mutexattr_t attr;
105
    bool success = false;
106
 
107
    assert(hotkeys != NULL);
108
@@ -772,11 +764,7 @@
109
    if (!obs_hotkeys_platform_init(hotkeys))
110
        return false;
111
 
112
-   if (pthread_mutexattr_init(&attr) != 0)
113
-       return false;
114
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
115
-       goto fail;
116
-   if (pthread_mutex_init(&hotkeys->mutex, &attr) != 0)
117
+   if (pthread_mutex_init_recursive(&hotkeys->mutex) != 0)
118
        goto fail;
119
 
120
    if (os_event_init(&hotkeys->stop_event, OS_EVENT_TYPE_MANUAL) != 0)
121
@@ -790,7 +778,6 @@
122
    success = true;
123
 
124
 fail:
125
-   pthread_mutexattr_destroy(&attr);
126
    return success;
127
 }
128
 
129
@@ -1026,6 +1013,7 @@
130
    da_free(obs->transition_types);
131
 
132
    stop_video();
133
+   stop_audio();
134
    stop_hotkeys();
135
 
136
    module = obs->first_module;
137
@@ -1036,8 +1024,8 @@
138
    }
139
    obs->first_module = NULL;
140
 
141
-   obs_free_audio();
142
    obs_free_data();
143
+   obs_free_audio();
144
    obs_free_video();
145
    obs_free_hotkeys();
146
    obs_free_graphics();
147
@@ -1526,6 +1514,13 @@
148
    pthread_mutex_unlock(mutex);
149
 }
150
 
151
+void obs_enum_all_sources(bool (*enum_proc)(void *, obs_source_t *),
152
+             void *param)
153
+{
154
+   obs_enum(&obs->data.first_source, &obs->data.sources_mutex, enum_proc,
155
+        param);
156
+}
157
+
158
 void obs_enum_outputs(bool (*enum_proc)(void *, obs_output_t *), void *param)
159
 {
160
    obs_enum(&obs->data.first_output, &obs->data.outputs_mutex, enum_proc,
161
obs-studio-27.0.1.tar.xz/libobs/obs.h -> obs-studio-27.1.3.tar.xz/libobs/obs.h Changed
22
 
1
@@ -612,6 +612,10 @@
2
 EXPORT void obs_enum_scenes(bool (*enum_proc)(void *, obs_source_t *),
3
                void *param);
4
 
5
+/** Enumerates all sources (regardless of type) */
6
+EXPORT void obs_enum_all_sources(bool (*enum_proc)(void *, obs_source_t *),
7
+                void *param);
8
+
9
 /** Enumerates outputs */
10
 EXPORT void obs_enum_outputs(bool (*enum_proc)(void *, obs_output_t *),
11
                 void *param);
12
@@ -958,6 +962,9 @@
13
 /** Gets the height of a source (if it has video) */
14
 EXPORT uint32_t obs_source_get_height(obs_source_t *source);
15
 
16
+/** Hints whether or not the source will blend texels */
17
+EXPORT bool obs_source_get_texcoords_centered(obs_source_t *source);
18
+
19
 /**
20
  * If the source is a filter, returns the parent source of the filter.  Only
21
  * guaranteed to be valid inside of the video_render, filter_audio,
22
obs-studio-27.0.1.tar.xz/libobs/util/array-serializer.c -> obs-studio-27.1.3.tar.xz/libobs/util/array-serializer.c Changed
10
 
1
@@ -20,7 +20,7 @@
2
 static size_t array_output_write(void *param, const void *data, size_t size)
3
 {
4
    struct array_output_data *output = param;
5
-   da_push_back_array(output->bytes, data, size);
6
+   da_push_back_array(output->bytes, (uint8_t *)data, size);
7
    return size;
8
 }
9
 
10
obs-studio-27.0.1.tar.xz/libobs/util/cf-lexer.h -> obs-studio-27.1.3.tar.xz/libobs/util/cf-lexer.h Changed
12
 
1
@@ -187,8 +187,9 @@
2
 cf_preprocessor_add_sys_include_dir(struct cf_preprocessor *pp,
3
                    const char *include_dir)
4
 {
5
+   char *str = bstrdup(include_dir);
6
    if (include_dir)
7
-       da_push_back(pp->sys_include_dirs, bstrdup(include_dir));
8
+       da_push_back(pp->sys_include_dirs, &str);
9
 }
10
 
11
 EXPORT void cf_preprocessor_add_def(struct cf_preprocessor *pp,
12
obs-studio-27.0.1.tar.xz/libobs/util/config-file.c -> obs-studio-27.1.3.tar.xz/libobs/util/config-file.c Changed
45
 
1
@@ -61,16 +61,6 @@
2
    pthread_mutex_t mutex;
3
 };
4
 
5
-static inline bool init_mutex(config_t *config)
6
-{
7
-   pthread_mutexattr_t attr;
8
-   if (pthread_mutexattr_init(&attr) != 0)
9
-       return false;
10
-   if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
11
-       return false;
12
-   return pthread_mutex_init(&config->mutex, &attr) == 0;
13
-}
14
-
15
 config_t *config_create(const char *file)
16
 {
17
    struct config_data *config;
18
@@ -83,7 +73,7 @@
19
 
20
    config = bzalloc(sizeof(struct config_data));
21
 
22
-   if (!init_mutex(config)) {
23
+   if (pthread_mutex_init_recursive(&config->mutex) != 0) {
24
        bfree(config);
25
        return NULL;
26
    }
27
@@ -302,7 +292,7 @@
28
    if (!*config)
29
        return CONFIG_ERROR;
30
 
31
-   if (!init_mutex(*config)) {
32
+   if (pthread_mutex_init_recursive(&(*config)->mutex) != 0) {
33
        bfree(*config);
34
        return CONFIG_ERROR;
35
    }
36
@@ -330,7 +320,7 @@
37
    if (!*config)
38
        return CONFIG_ERROR;
39
 
40
-   if (!init_mutex(*config)) {
41
+   if (pthread_mutex_init_recursive(&(*config)->mutex) != 0) {
42
        bfree(*config);
43
        return CONFIG_ERROR;
44
    }
45
obs-studio-27.0.1.tar.xz/libobs/util/darray.h -> obs-studio-27.1.3.tar.xz/libobs/util/darray.h Changed
126
 
1
@@ -494,33 +494,124 @@
2
 
3
 #define da_move(dst, src) darray_move(&dst.da, &src.da)
4
 
5
+#ifdef ENABLE_DARRAY_TYPE_TEST
6
+#ifdef __cplusplus
7
+#define da_type_test(v, item)                 \
8
+   ({                                    \
9
+       if (false) {                  \
10
+           auto _t = v.array;    \
11
+           _t = (item);          \
12
+           (void)_t;             \
13
+           *(v).array = *(item); \
14
+       }                             \
15
+   })
16
+#else
17
+#define da_type_test(v, item)                       \
18
+   ({                                          \
19
+       if (false) {                        \
20
+           const typeof(*v.array) *_t; \
21
+           _t = (item);                \
22
+           (void)_t;                   \
23
+           *(v).array = *(item);       \
24
+       }                                   \
25
+   })
26
+#endif
27
+#endif // ENABLE_DARRAY_TYPE_TEST
28
+
29
+#ifdef ENABLE_DARRAY_TYPE_TEST
30
+#define da_find(v, item, idx)                                    \
31
+   ({                                                       \
32
+       da_type_test(v, item);                           \
33
+       darray_find(sizeof(*v.array), &v.da, item, idx); \
34
+   })
35
+#else
36
 #define da_find(v, item, idx) darray_find(sizeof(*v.array), &v.da, item, idx)
37
+#endif
38
 
39
+#ifdef ENABLE_DARRAY_TYPE_TEST
40
+#define da_push_back(v, item)                                    \
41
+   ({                                                       \
42
+       da_type_test(v, item);                           \
43
+       darray_push_back(sizeof(*v.array), &v.da, item); \
44
+   })
45
+#else
46
 #define da_push_back(v, item) darray_push_back(sizeof(*v.array), &v.da, item)
47
+#endif
48
 
49
 #define da_push_back_new(v) darray_push_back_new(sizeof(*v.array), &v.da)
50
 
51
+#ifdef ENABLE_DARRAY_TYPE_TEST
52
+#define da_push_back_array(dst, src_array, n)                                  \
53
+   ({                                                                     \
54
+       da_type_test(dst, src_array);                                  \
55
+       darray_push_back_array(sizeof(*dst.array), &dst.da, src_array, \
56
+                      n);                                     \
57
+   })
58
+#else
59
 #define da_push_back_array(dst, src_array, n) \
60
    darray_push_back_array(sizeof(*dst.array), &dst.da, src_array, n)
61
+#endif
62
 
63
+#ifdef ENABLE_DARRAY_TYPE_TEST
64
+#define da_push_back_da(dst, src)                                              \
65
+   ({                                                                     \
66
+       da_type_test(dst, src.array);                                  \
67
+       darray_push_back_darray(sizeof(*dst.array), &dst.da, &src.da); \
68
+   })
69
+#else
70
 #define da_push_back_da(dst, src) \
71
    darray_push_back_darray(sizeof(*dst.array), &dst.da, &src.da)
72
+#endif
73
 
74
+#ifdef ENABLE_DARRAY_TYPE_TEST
75
+#define da_insert(v, idx, item)                                    \
76
+   ({                                                         \
77
+       da_type_test(v, item);                             \
78
+       darray_insert(sizeof(*v.array), &v.da, idx, item); \
79
+   })
80
+#else
81
 #define da_insert(v, idx, item) \
82
    darray_insert(sizeof(*v.array), &v.da, idx, item)
83
+#endif
84
 
85
 #define da_insert_new(v, idx) darray_insert_new(sizeof(*v.array), &v.da, idx)
86
 
87
+#ifdef ENABLE_DARRAY_TYPE_TEST
88
+#define da_insert_array(dst, idx, src_array, n)                       \
89
+   ({                                                            \
90
+       da_type_test(dst, src_array);                         \
91
+       darray_insert_array(sizeof(*dst.array), &dst.da, idx, \
92
+                   src_array, n);                    \
93
+   })
94
+#else
95
 #define da_insert_array(dst, idx, src_array, n) \
96
    darray_insert_array(sizeof(*dst.array), &dst.da, idx, src_array, n)
97
+#endif
98
 
99
+#ifdef ENABLE_DARRAY_TYPE_TEST
100
+#define da_insert_da(dst, idx, src)                                    \
101
+   ({                                                             \
102
+       da_type_test(dst, src.array);                          \
103
+       darray_insert_darray(sizeof(*dst.array), &dst.da, idx, \
104
+                    &src.da);                         \
105
+   })
106
+#else
107
 #define da_insert_da(dst, idx, src) \
108
    darray_insert_darray(sizeof(*dst.array), &dst.da, idx, &src.da)
109
+#endif
110
 
111
 #define da_erase(dst, idx) darray_erase(sizeof(*dst.array), &dst.da, idx)
112
 
113
+#ifdef ENABLE_DARRAY_TYPE_TEST
114
+#define da_erase_item(dst, item)                                      \
115
+   ({                                                            \
116
+       da_type_test(dst, item);                              \
117
+       darray_erase_item(sizeof(*dst.array), &dst.da, item); \
118
+   })
119
+#else
120
 #define da_erase_item(dst, item) \
121
    darray_erase_item(sizeof(*dst.array), &dst.da, item)
122
+#endif
123
 
124
 #define da_erase_range(dst, from, to) \
125
    darray_erase_range(sizeof(*dst.array), &dst.da, from, to)
126
obs-studio-27.1.3.tar.xz/libobs/util/platform-nix-portal.c Added
245
 
1
@@ -0,0 +1,243 @@
2
+/*
3
+ * Copyright (c) 2015 Hugh Bailey <obs.jim@gmail.com>
4
+ *               2021 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
5
+ *
6
+ * Permission to use, copy, modify, and distribute this software for any
7
+ * purpose with or without fee is hereby granted, provided that the above
8
+ * copyright notice and this permission notice appear in all copies.
9
+ *
10
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
+ */
18
+
19
+#include <assert.h>
20
+#include <gio/gio.h>
21
+#include "bmem.h"
22
+#include "dstr.h"
23
+
24
+#define PORTAL_NAME "org.freedesktop.portal.Desktop"
25
+
26
+struct portal_inhibit_info {
27
+   GDBusConnection *c;
28
+   GCancellable *cancellable;
29
+   unsigned int signal_id;
30
+   char *sender_name;
31
+   char *request_path;
32
+   bool active;
33
+};
34
+
35
+static void new_request(struct portal_inhibit_info *info, char **out_token,
36
+           char **out_path)
37
+{
38
+   struct dstr token;
39
+   struct dstr path;
40
+   uint32_t id;
41
+
42
+   id = rand();
43
+
44
+   dstr_init(&token);
45
+   dstr_printf(&token, "obs_inhibit_portal%u", id);
46
+   *out_token = token.array;
47
+
48
+   dstr_init(&path);
49
+   dstr_printf(&path, "/org/freedesktop/portal/desktop/request/%s/%s",
50
+           info->sender_name, token.array);
51
+   *out_path = path.array;
52
+}
53
+
54
+static inline void unsubscribe_from_request(struct portal_inhibit_info *info)
55
+{
56
+   if (info->signal_id > 0) {
57
+       g_dbus_connection_signal_unsubscribe(info->c, info->signal_id);
58
+       info->signal_id = 0;
59
+   }
60
+}
61
+
62
+static inline void remove_inhibit_data(struct portal_inhibit_info *info)
63
+{
64
+   g_clear_pointer(&info->request_path, bfree);
65
+   info->active = false;
66
+}
67
+
68
+static void response_received(GDBusConnection *bus, const char *sender_name,
69
+                 const char *object_path,
70
+                 const char *interface_name,
71
+                 const char *signal_name, GVariant *parameters,
72
+                 gpointer data)
73
+{
74
+   UNUSED_PARAMETER(bus);
75
+   UNUSED_PARAMETER(sender_name);
76
+   UNUSED_PARAMETER(object_path);
77
+   UNUSED_PARAMETER(interface_name);
78
+   UNUSED_PARAMETER(signal_name);
79
+
80
+   struct portal_inhibit_info *info = data;
81
+   g_autoptr(GVariant) ret = NULL;
82
+   uint32_t response;
83
+
84
+   g_variant_get(parameters, "(u@a{sv})", &response, &ret);
85
+
86
+   if (response != 0) {
87
+       if (response == 1)
88
+           blog(LOG_WARNING, "Inhibit denied by user");
89
+
90
+       remove_inhibit_data(info);
91
+   }
92
+
93
+   unsubscribe_from_request(info);
94
+}
95
+
96
+static void inhibited_cb(GObject *source_object, GAsyncResult *result,
97
+            gpointer user_data)
98
+{
99
+   UNUSED_PARAMETER(source_object);
100
+
101
+   struct portal_inhibit_info *info = user_data;
102
+   g_autoptr(GVariant) reply = NULL;
103
+   g_autoptr(GError) error = NULL;
104
+
105
+   reply = g_dbus_connection_call_finish(info->c, result, &error);
106
+
107
+   if (error != NULL) {
108
+       if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
109
+           blog(LOG_ERROR, "Failed to inhibit: %s",
110
+                error->message);
111
+       unsubscribe_from_request(info);
112
+       remove_inhibit_data(info);
113
+   }
114
+
115
+   g_clear_object(&info->cancellable);
116
+}
117
+
118
+static void do_inhibit(struct portal_inhibit_info *info, const char *reason)
119
+{
120
+   GVariantBuilder options;
121
+   uint32_t flags = 0xC;
122
+   char *token;
123
+
124
+   info->active = true;
125
+
126
+   new_request(info, &token, &info->request_path);
127
+
128
+   info->signal_id = g_dbus_connection_signal_subscribe(
129
+       info->c, PORTAL_NAME, "org.freedesktop.portal.Request",
130
+       "Response", info->request_path, NULL,
131
+       G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE, response_received, info,
132
+       NULL);
133
+
134
+   g_variant_builder_init(&options, G_VARIANT_TYPE_VARDICT);
135
+   g_variant_builder_add(&options, "{sv}", "handle_token",
136
+                 g_variant_new_string(token));
137
+   g_variant_builder_add(&options, "{sv}", "reason",
138
+                 g_variant_new_string(reason));
139
+
140
+   bfree(token);
141
+
142
+   info->cancellable = g_cancellable_new();
143
+   g_dbus_connection_call(info->c, PORTAL_NAME,
144
+                  "/org/freedesktop/portal/desktop",
145
+                  "org.freedesktop.portal.Inhibit", "Inhibit",
146
+                  g_variant_new("(sua{sv})", "", flags, &options),
147
+                  NULL, G_DBUS_CALL_FLAGS_NONE, -1,
148
+                  info->cancellable, inhibited_cb, info);
149
+}
150
+
151
+static void uninhibited_cb(GObject *source_object, GAsyncResult *result,
152
+              gpointer user_data)
153
+{
154
+   UNUSED_PARAMETER(source_object);
155
+
156
+   struct portal_inhibit_info *info = user_data;
157
+   g_autoptr(GVariant) reply = NULL;
158
+   g_autoptr(GError) error = NULL;
159
+
160
+   reply = g_dbus_connection_call_finish(info->c, result, &error);
161
+
162
+   if (error)
163
+       blog(LOG_WARNING, "Error uninhibiting: %s", error->message);
164
+}
165
+
166
+static void do_uninhibit(struct portal_inhibit_info *info)
167
+{
168
+   if (info->cancellable) {
169
+       /* If uninhibit is called before the inhibit call is finished,
170
+        * cancel it instead.
171
+        */
172
+       g_cancellable_cancel(info->cancellable);
173
+       g_clear_object(&info->cancellable);
174
+   } else {
175
+       g_dbus_connection_call(info->c, PORTAL_NAME, info->request_path,
176
+                      "org.freedesktop.portal.Request",
177
+                      "Close", g_variant_new("()"),
178
+                      G_VARIANT_TYPE_UNIT,
179
+                      G_DBUS_CALL_FLAGS_NONE, -1, NULL,
180
+                      uninhibited_cb, info);
181
+   }
182
+
183
+   remove_inhibit_data(info);
184
+}
185
+
186
+void portal_inhibit_info_destroy(struct portal_inhibit_info *info)
187
+{
188
+   if (info) {
189
+       g_cancellable_cancel(info->cancellable);
190
+       unsubscribe_from_request(info);
191
+       remove_inhibit_data(info);
192
+       g_clear_pointer(&info->sender_name, bfree);
193
+       g_clear_object(&info->cancellable);
194
+       g_clear_object(&info->c);
195
+       bfree(info);
196
+   }
197
+}
198
+
199
+struct portal_inhibit_info *portal_inhibit_info_create(void)
200
+{
201
+   struct portal_inhibit_info *info = bzalloc(sizeof(*info));
202
+   g_autoptr(GVariant) reply = NULL;
203
+   g_autoptr(GError) error = NULL;
204
+   char *aux;
205
+
206
+   info->c = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
207
+   if (!info->c) {
208
+       blog(LOG_ERROR, "Could not create dbus connection: %s",
209
+            error->message);
210
+       bfree(info);
211
+       return NULL;
212
+   }
213
+
214
+   info->sender_name =
215
+       bstrdup(g_dbus_connection_get_unique_name(info->c) + 1);
216
+   while ((aux = strstr(info->sender_name, ".")) != NULL)
217
+       *aux = '_';
218
+
219
+   reply = g_dbus_connection_call_sync(
220
+       info->c, "org.freedesktop.DBus", "/org/freedesktop/DBus",
221
+       "org.freedesktop.DBus", "GetNameOwner",
222
+       g_variant_new("(s)", PORTAL_NAME), NULL,
223
+       G_DBUS_CALL_FLAGS_NO_AUTO_START, -1, NULL, NULL);
224
+
225
+   if (reply != NULL) {
226
+       blog(LOG_DEBUG, "Found portal inhibitor");
227
+       return info;
228
+   }
229
+
230
+   portal_inhibit_info_destroy(info);
231
+   return NULL;
232
+}
233
+
234
+void portal_inhibit(struct portal_inhibit_info *info, const char *reason,
235
+           bool active)
236
+{
237
+   if (active == info->active)
238
+       return;
239
+
240
+   if (active)
241
+       do_inhibit(info, reason);
242
+   else
243
+       do_uninhibit(info);
244
+}
245
obs-studio-27.0.1.tar.xz/libobs/util/platform-nix.c -> obs-studio-27.1.3.tar.xz/libobs/util/platform-nix.c Changed
72
 
1
@@ -631,16 +631,23 @@
2
 
3
 #if HAVE_DBUS
4
 struct dbus_sleep_info;
5
+struct portal_inhibit_info;
6
 
7
 extern struct dbus_sleep_info *dbus_sleep_info_create(void);
8
 extern void dbus_inhibit_sleep(struct dbus_sleep_info *dbus, const char *sleep,
9
                   bool active);
10
 extern void dbus_sleep_info_destroy(struct dbus_sleep_info *dbus);
11
+
12
+extern struct portal_inhibit_info *portal_inhibit_info_create(void);
13
+extern void portal_inhibit(struct portal_inhibit_info *portal,
14
+              const char *reason, bool active);
15
+extern void portal_inhibit_info_destroy(struct portal_inhibit_info *portal);
16
 #endif
17
 
18
 struct os_inhibit_info {
19
 #if HAVE_DBUS
20
    struct dbus_sleep_info *dbus;
21
+   struct portal_inhibit_info *portal;
22
 #endif
23
    pthread_t screensaver_thread;
24
    os_event_t *stop_event;
25
@@ -655,7 +662,9 @@
26
    sigset_t set;
27
 
28
 #if HAVE_DBUS
29
-   info->dbus = dbus_sleep_info_create();
30
+   info->portal = portal_inhibit_info_create();
31
+   if (!info->portal)
32
+       info->dbus = dbus_sleep_info_create();
33
 #endif
34
 
35
    os_event_init(&info->stop_event, OS_EVENT_TYPE_AUTO);
36
@@ -710,6 +719,8 @@
37
        return false;
38
 
39
 #if HAVE_DBUS
40
+   if (info->portal)
41
+       portal_inhibit(info->portal, info->reason, active);
42
    if (info->dbus)
43
        dbus_inhibit_sleep(info->dbus, info->reason, active);
44
 #endif
45
@@ -739,6 +750,7 @@
46
    if (info) {
47
        os_inhibit_sleep_set_active(info, false);
48
 #if HAVE_DBUS
49
+       portal_inhibit_info_destroy(info->portal);
50
        dbus_sleep_info_destroy(info->dbus);
51
 #endif
52
        os_event_destroy(info->stop_event);
53
@@ -989,7 +1001,8 @@
54
    if (!os_get_proc_memory_usage_internal(&statm))
55
        return false;
56
 
57
-   usage->resident_size = statm.resident_size;
58
+   usage->resident_size =
59
+       (uint64_t)statm.resident_size * sysconf(_SC_PAGESIZE);
60
    usage->virtual_size = statm.virtual_size;
61
    return true;
62
 }
63
@@ -999,7 +1012,7 @@
64
    statm_t statm = {};
65
    if (!os_get_proc_memory_usage_internal(&statm))
66
        return 0;
67
-   return (uint64_t)statm.resident_size;
68
+   return (uint64_t)statm.resident_size * sysconf(_SC_PAGESIZE);
69
 }
70
 
71
 uint64_t os_get_proc_virtual_size(void)
72
obs-studio-27.0.1.tar.xz/libobs/util/platform-windows.c -> obs-studio-27.1.3.tar.xz/libobs/util/platform-windows.c Changed
9
 
1
@@ -14,7 +14,6 @@
2
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3
  */
4
 
5
-#define PSAPI_VERSION 1
6
 #include <windows.h>
7
 #include <mmsystem.h>
8
 #include <shellapi.h>
9
obs-studio-27.0.1.tar.xz/libobs/util/platform.h -> obs-studio-27.1.3.tar.xz/libobs/util/platform.h Changed
15
 
1
@@ -197,13 +197,6 @@
2
 EXPORT uint64_t os_get_proc_resident_size(void);
3
 EXPORT uint64_t os_get_proc_virtual_size(void);
4
 
5
-#ifdef _MSC_VER
6
-#define strtoll _strtoi64
7
-#if _MSC_VER < 1900
8
-#define snprintf _snprintf
9
-#endif
10
-#endif
11
-
12
 /* clang-format off */
13
 #ifdef __APPLE__
14
 # define ARCH_BITS 64
15
obs-studio-27.0.1.tar.xz/libobs/util/profiler.c -> obs-studio-27.1.3.tar.xz/libobs/util/profiler.c Changed
20
 
1
@@ -825,6 +825,8 @@
2
    }
3
 
4
    da_free(old_root_entries);
5
+
6
+   pthread_mutex_destroy(&root_mutex);
7
 }
8
 
9
 /* ------------------------------------------------------------------------- */
10
@@ -858,6 +860,9 @@
11
        bfree(store->names.array[i]);
12
 
13
    da_free(store->names);
14
+
15
+   pthread_mutex_destroy(&store->mutex);
16
+
17
    bfree(store);
18
 }
19
 
20
obs-studio-27.0.1.tar.xz/libobs/util/sse-intrin.h -> obs-studio-27.1.3.tar.xz/libobs/util/sse-intrin.h Changed
12
 
1
@@ -17,7 +17,9 @@
2
 
3
 #pragma once
4
 
5
-#if defined(_MSC_VER)
6
+#if defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86)) && \
7
+   !(defined(_M_ARM64) || defined(_M_ARM64EC))
8
+
9
 #include <emmintrin.h>
10
 #else
11
 #define SIMDE_ENABLE_NATIVE_ALIASES
12
obs-studio-27.0.1.tar.xz/libobs/util/threading-windows.c -> obs-studio-27.1.3.tar.xz/libobs/util/threading-windows.c Changed
37
 
1
@@ -194,20 +194,23 @@
2
    }
3
 #endif
4
 
5
-   typedef HRESULT(WINAPI * set_thread_description_t)(HANDLE thread,
6
-                              PCWSTR desc);
7
+   const HMODULE hModule = LoadLibrary(L"KernelBase.dll");
8
+   if (hModule) {
9
+       typedef HRESULT(WINAPI * set_thread_description_t)(HANDLE,
10
+                                  PCWSTR);
11
 
12
-   HMODULE k32 = LoadLibraryW(L"Kernel32.dll");
13
-   set_thread_description_t std = NULL;
14
-   std = (set_thread_description_t)GetProcAddress(k32,
15
-                              "SetThreadDescription");
16
-   if (std) {
17
-       wchar_t *wname;
18
-       os_utf8_to_wcs_ptr(name, 0, &wname);
19
+       const set_thread_description_t std =
20
+           (set_thread_description_t)GetProcAddress(
21
+               hModule, "SetThreadDescription");
22
+       if (std) {
23
+           wchar_t *wname;
24
+           os_utf8_to_wcs_ptr(name, 0, &wname);
25
 
26
-       std(GetCurrentThread(), wname);
27
+           std(GetCurrentThread(), wname);
28
 
29
-       bfree(wname);
30
+           bfree(wname);
31
+       }
32
+
33
+       FreeLibrary(hModule);
34
    }
35
-   FreeLibrary(k32);
36
 }
37
obs-studio-27.0.1.tar.xz/libobs/util/threading.h -> obs-studio-27.1.3.tar.xz/libobs/util/threading.h Changed
24
 
1
@@ -53,6 +53,22 @@
2
    *mutex = init_val;
3
 }
4
 
5
+static inline int pthread_mutex_init_recursive(pthread_mutex_t *mutex)
6
+{
7
+   pthread_mutexattr_t attr;
8
+   int ret = pthread_mutexattr_init(&attr);
9
+   if (ret == 0) {
10
+       ret = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
11
+       if (ret == 0) {
12
+           ret = pthread_mutex_init(mutex, &attr);
13
+       }
14
+
15
+       pthread_mutexattr_destroy(&attr);
16
+   }
17
+
18
+   return ret;
19
+}
20
+
21
 enum os_event_type {
22
    OS_EVENT_TYPE_AUTO,
23
    OS_EVENT_TYPE_MANUAL,
24
obs-studio-27.0.1.tar.xz/libobs/util/util_uint64.h -> obs-studio-27.1.3.tar.xz/libobs/util/util_uint64.h Changed
22
 
1
@@ -16,9 +16,19 @@
2
 
3
 #pragma once
4
 
5
+#if defined(_MSC_VER) && defined(_M_X64)
6
+#include <intrin.h>
7
+#endif
8
+
9
 static inline uint64_t util_mul_div64(uint64_t num, uint64_t mul, uint64_t div)
10
 {
11
+#if defined(_MSC_VER) && defined(_M_X64)
12
+   unsigned __int64 high;
13
+   const unsigned __int64 low = _umul128(num, mul, &high);
14
+   unsigned __int64 rem;
15
+   return _udiv128(high, low, div, &rem);
16
+#else
17
    const uint64_t rem = num % div;
18
-
19
    return (num / div) * mul + (rem * mul) / div;
20
+#endif
21
 }
22
obs-studio-27.0.1.tar.xz/libobs/util/windows/ComPtr.hpp -> obs-studio-27.1.3.tar.xz/libobs/util/windows/ComPtr.hpp Changed
38
 
1
@@ -57,7 +57,11 @@
2
        if (ptr)
3
            ptr->AddRef();
4
    }
5
-   inline ComPtr(ComPtr<T> &&c) : ptr(c.ptr) { c.ptr = nullptr; }
6
+   inline ComPtr(ComPtr<T> &&c) noexcept : ptr(c.ptr) { c.ptr = nullptr; }
7
+   template<class U>
8
+   inline ComPtr(ComPtr<U> &&c) noexcept : ptr(c.Detach())
9
+   {
10
+   }
11
    inline ~ComPtr() { Kill(); }
12
 
13
    inline void Clear()
14
@@ -80,7 +84,7 @@
15
        return *this;
16
    }
17
 
18
-   inline ComPtr<T> &operator=(ComPtr<T> &&c)
19
+   inline ComPtr<T> &operator=(ComPtr<T> &&c) noexcept
20
    {
21
        if (&ptr != &c.ptr) {
22
            Kill();
23
@@ -91,6 +95,14 @@
24
        return *this;
25
    }
26
 
27
+   template<class U> inline ComPtr<T> &operator=(ComPtr<U> &&c) noexcept
28
+   {
29
+       Kill();
30
+       ptr = c.Detach();
31
+
32
+       return *this;
33
+   }
34
+
35
    inline T *Detach()
36
    {
37
        T *out = ptr;
38
obs-studio-27.0.1.tar.xz/libobs/util/windows/win-version.h -> obs-studio-27.1.3.tar.xz/libobs/util/windows/win-version.h Changed
12
 
1
@@ -29,8 +29,8 @@
2
    int revis;
3
 };
4
 
5
-static inline int win_version_compare(struct win_version_info *dst,
6
-                     struct win_version_info *src)
7
+static inline int win_version_compare(const struct win_version_info *dst,
8
+                     const struct win_version_info *src)
9
 {
10
    if (dst->major > src->major)
11
        return 1;
12
obs-studio-27.0.1.tar.xz/plugins/coreaudio-encoder/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/coreaudio-encoder/data/locale/en-US.ini Changed
12
 
1
@@ -1,5 +1,5 @@
2
-CoreAudioAAC="CoreAudio AAC encoder"
3
-Bitrate="Bitrate"
4
-AllowHEAAC="Allow HE-AAC"
5
-OutputSamplerate="Output Sample Rate"
6
-UseInputSampleRate="Use Input (OBS) Sample Rate (may list unsupported bitrates)"
7
+CoreAudioAAC="CoreAudio AAC encoder"
8
+Bitrate="Bitrate"
9
+AllowHEAAC="Allow HE-AAC"
10
+OutputSamplerate="Output Sample Rate"
11
+UseInputSampleRate="Use Input (OBS) Sample Rate (may list unsupported bitrates)"
12
obs-studio-27.0.1.tar.xz/plugins/coreaudio-encoder/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/coreaudio-encoder/data/locale/gd-GB.ini Changed
7
 
1
@@ -1,1 +1,5 @@
2
+CoreAudioAAC="Inneal-còdachaidh CoreAudio AAC"
3
 Bitrate="Reat bhiodan"
4
+AllowHEAAC="Ceadaich HE-AAC"
5
+OutputSamplerate="Reat shampallan an às-chuir"
6
+UseInputSampleRate="Cleachd reat shampallan an ion-chuir (OBS) (dh’fhaoidte gum bi reataichean bhiodan air an liosta ris nach eil taic)"
7
obs-studio-27.1.3.tar.xz/plugins/coreaudio-encoder/data/locale/hi-IN.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+CoreAudioAAC="CoreAudio AAC एनकोडर"
3
+Bitrate="बिटरेट"
4
+AllowHEAAC="HE-AAC को अनुमति दें"
5
+OutputSamplerate="आउटपुट नमूना दर"
6
+UseInputSampleRate="इनपुट (OBS) नमूना दर का उपयोग करें (असमर्थित बिटरेट सूची में आ सकता है)"
7
obs-studio-27.1.3.tar.xz/plugins/coreaudio-encoder/data/locale/kmr-TR.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+CoreAudioAAC="Kodkirina CoreAudio AAC"
3
+Bitrate="Leza bit"
4
+AllowHEAAC="Mafê bide HE-AAC"
5
+OutputSamplerate="Rêjeya mînaka deranê"
6
+UseInputSampleRate="Rêjeya mînaka ya têketinê (OBS) bi kar bîne (belkî leza bit ne piştgirî bişînê)"
7
obs-studio-27.1.3.tar.xz/plugins/coreaudio-encoder/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+AllowHEAAC="Tillat HE-AAC"
3
obs-studio-27.1.3.tar.xz/plugins/coreaudio-encoder/data/locale/szl-PL.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+CoreAudioAAC="Enkoder CoreAudio AAC"
3
+AllowHEAAC="Przizwolej HE-AAC"
4
+OutputSamplerate="Prōbkowanie wychodowe"
5
+UseInputSampleRate="Użyj prōbkowanio wejściowego (może dować niykōmpatybilne prōbkowania)"
6
obs-studio-27.0.1.tar.xz/plugins/decklink/OBSVideoFrame.cpp -> obs-studio-27.1.3.tar.xz/plugins/decklink/OBSVideoFrame.cpp Changed
13
 
1
@@ -11,6 +11,11 @@
2
    this->pixelFormat = pixelFormat;
3
 }
4
 
5
+OBSVideoFrame::~OBSVideoFrame()
6
+{
7
+   delete this->data;
8
+}
9
+
10
 HRESULT OBSVideoFrame::SetFlags(BMDFrameFlags newFlags)
11
 {
12
    flags = newFlags;
13
obs-studio-27.0.1.tar.xz/plugins/decklink/OBSVideoFrame.h -> obs-studio-27.1.3.tar.xz/plugins/decklink/OBSVideoFrame.h Changed
18
 
1
@@ -5,7 +5,7 @@
2
 
3
 class OBSVideoFrame : public IDeckLinkMutableVideoFrame {
4
 private:
5
-   BMDFrameFlags flags;
6
+   BMDFrameFlags flags = bmdFrameFlagDefault;
7
    BMDPixelFormat pixelFormat = bmdFormat8BitYUV;
8
 
9
    long width;
10
@@ -16,6 +16,7 @@
11
 
12
 public:
13
    OBSVideoFrame(long width, long height, BMDPixelFormat pixelFormat);
14
+   ~OBSVideoFrame();
15
 
16
    HRESULT STDMETHODCALLTYPE SetFlags(BMDFrameFlags newFlags) override;
17
 
18
obs-studio-27.0.1.tar.xz/plugins/decklink/data/locale/an-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/an-ES.ini Changed
18
 
1
@@ -1,3 +1,16 @@
2
+BlackmagicDevice="Dispositivo Blackmagic"
3
+Device="Dispositivo"
4
+Mode="Modo"
5
+Buffering="Usar memoria intermedia (buffer)"
6
+PixelFormat="Formato de pixel"
7
+ColorSpace="Espacio de color"
8
+ColorSpace.Default="Per defecto"
9
+ColorRange="Gama de colors"
10
+ColorRange.Default="Per defecto"
11
+ColorRange.Partial="Parcial"
12
+ColorRange.Full="Completo"
13
+ChannelFormat="Canal"
14
+ChannelFormat.None="Garra"
15
 ChannelFormat.2_0ch="Stereo"
16
 ChannelFormat.2_1ch="2.1 canals"
17
 ChannelFormat.4_0ch="4 canals"
18
obs-studio-27.0.1.tar.xz/plugins/decklink/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/en-US.ini Changed
54
 
1
@@ -1,26 +1,26 @@
2
-BlackmagicDevice="Blackmagic Device"
3
-Device="Device"
4
-Mode="Mode"
5
-Buffering="Use Buffering"
6
-PixelFormat="Pixel Format"
7
-ColorSpace="Color Space"
8
-ColorSpace.Default="Default"
9
-ColorRange="Color Range"
10
-ColorRange.Default="Default"
11
-ColorRange.Partial="Partial"
12
-ColorRange.Full="Full"
13
-ChannelFormat="Channel"
14
-ChannelFormat.None="None"
15
-ChannelFormat.2_0ch="2ch"
16
-ChannelFormat.2_1ch="2.1ch"
17
-ChannelFormat.4_0ch="4ch"
18
-ChannelFormat.4_1ch="4.1ch"
19
-ChannelFormat.5_1ch="5.1ch"
20
-ChannelFormat.7_1ch="7.1ch"
21
-DeactivateWhenNotShowing="Deactivate when not showing"
22
-AutoStart="Auto start on launch"
23
-SwapFC-LFE="Swap FC and LFE"
24
-SwapFC-LFE.Tooltip="Swap Front Center Channel and LFE Channel"
25
-VideoConnection="Video Connection"
26
-AudioConnection="Audio Connection"
27
+BlackmagicDevice="Blackmagic Device"
28
+Device="Device"
29
+Mode="Mode"
30
+Buffering="Use Buffering"
31
+PixelFormat="Pixel Format"
32
+ColorSpace="Color Space"
33
+ColorSpace.Default="Default"
34
+ColorRange="Color Range"
35
+ColorRange.Default="Default"
36
+ColorRange.Partial="Partial"
37
+ColorRange.Full="Full"
38
+ChannelFormat="Channel"
39
+ChannelFormat.None="None"
40
+ChannelFormat.2_0ch="2ch"
41
+ChannelFormat.2_1ch="2.1ch"
42
+ChannelFormat.4_0ch="4ch"
43
+ChannelFormat.4_1ch="4.1ch"
44
+ChannelFormat.5_1ch="5.1ch"
45
+ChannelFormat.7_1ch="7.1ch"
46
+DeactivateWhenNotShowing="Deactivate when not showing"
47
+AutoStart="Auto start on launch"
48
+SwapFC-LFE="Swap FC and LFE"
49
+SwapFC-LFE.Tooltip="Swap Front Center Channel and LFE Channel"
50
+VideoConnection="Video Connection"
51
+AudioConnection="Audio Connection"
52
 Allow10Bit="Allow 10 Bit (Required for SDI captions, may cause performance overhead)"
53
\ No newline at end of file
54
obs-studio-27.0.1.tar.xz/plugins/decklink/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/gd-GB.ini Changed
28
 
1
@@ -1,10 +1,26 @@
2
+BlackmagicDevice="Uidheam Blackmagic"
3
 Device="Uidheam"
4
 Mode="Modh"
5
 Buffering="Cleachd bufaireadh"
6
+PixelFormat="Fòrmat piogsail"
7
+ColorSpace="Spàs dhathan"
8
 ColorSpace.Default="Bun-roghainn"
9
+ColorRange="Rainse dhathan"
10
 ColorRange.Default="Bun-roghainn"
11
 ColorRange.Partial="Leth-phàirteach"
12
 ColorRange.Full="Làn"
13
 ChannelFormat="Seanail"
14
 ChannelFormat.None="Chan eil gin"
15
+ChannelFormat.2_0ch="2 sheanail"
16
+ChannelFormat.2_1ch="2.1 sheanail"
17
+ChannelFormat.4_0ch="4 seanailean"
18
+ChannelFormat.4_1ch="4.1 seanailean"
19
+ChannelFormat.5_1ch="5.1 seanailean"
20
+ChannelFormat.7_1ch="7.1 seanailean"
21
 DeactivateWhenNotShowing="Cuir à gnìomh mur eil e ’ga shealltainn"
22
+AutoStart="Tòisich nuair a thòisicheas OBS Studio"
23
+SwapFC-LFE="Iomlaid FC agus LFE"
24
+SwapFC-LFE.Tooltip="Dèan iomlaid earar seanail mheadhanach a’ bheulaibh is an t-seanail LFE"
25
+VideoConnection="Ceangal video"
26
+AudioConnection="Ceangal fuaime"
27
+Allow10Bit="Ceadaich 10 biodan (Tha seo riatanach airson fo-thiotalan SDI agus feumach air barrachd dèanadais)"
28
obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/hi-IN.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+BlackmagicDevice="ब्लैकमैजिक डिवाइस"
3
+Device="डिवाइस"
4
+Mode="मोड"
5
+Buffering="बफ़रिंग प्रयोग करें"
6
+PixelFormat="पिक्सेल प्रारूप"
7
+ColorSpace="रंग स्थान"
8
+ColorSpace.Default="आरंभिक"
9
+ColorRange="रंग विस्तार"
10
+ColorRange.Default="आरंभिक"
11
+ColorRange.Partial="आंशिक"
12
+ColorRange.Full="पूर्ण"
13
+ChannelFormat="चैनल"
14
+ChannelFormat.None="कोई नहीं"
15
+DeactivateWhenNotShowing="प्रदर्शित न होने पर निष्क्रिय करें"
16
+AutoStart="आरंभ में ऑटो स्टार्ट"
17
+SwapFC-LFE="FC तथा LFE को परस्पर बदलें"
18
+SwapFC-LFE.Tooltip="फ्रंट सेंटर चैनल और LFE चैनल को परस्पर बदलें"
19
+VideoConnection="वीडियो कनेक्शन"
20
+AudioConnection="ऑडियो कनेक्शन"
21
+Allow10Bit="10 बिट की अनुमति दें (SDI कैप्शन के लिए आवश्यक, प्रदर्शन ओवरहेड का कारण बन सकता है)"
22
obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/kmr-TR.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+BlackmagicDevice="Amûra Blackmagic"
3
+Device="Amûr"
4
+Mode="Mod"
5
+Buffering="Bîrgeha demkî bi kar bîne"
6
+PixelFormat="Formata Pixel"
7
+ColorSpace="Qada rengê"
8
+ColorSpace.Default="Berdest"
9
+ColorRange="Rêjeya rengê"
10
+ColorRange.Default="Berdest"
11
+ColorRange.Partial="Parçeyî"
12
+ColorRange.Full="Tijî"
13
+ChannelFormat="Kanal"
14
+ChannelFormat.None="Ne yek"
15
+ChannelFormat.2_0ch="2 kanal"
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="Dema nîşan neda neçalak bike"
22
+AutoStart="Ji destpêkirinê ve bixweber dest pê bike"
23
+SwapFC-LFE="FC û LFE biguherîne"
24
+SwapFC-LFE.Tooltip="Kanala navenda pêşî û kanala LFE'yê biguherîne"
25
+VideoConnection="Girêdana vîdyoyê"
26
+AudioConnection="Girêdana deng"
27
+Allow10Bit="Mafê bide 10 Bit (Ji bo jêrnivîsên SDI pêdivî ye, dibe ku bibe sedema performansê giran)"
28
obs-studio-27.0.1.tar.xz/plugins/decklink/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/nb-NO.ini Changed
6
 
1
@@ -17,3 +17,4 @@
2
 SwapFC-LFE.Tooltip="Bytt front-kanal og LFE-kanal"
3
 VideoConnection="Videotilkobling"
4
 AudioConnection="Lydtilkobling"
5
+Allow10Bit="Tillat 10 Bit (Påkrevd for SDI undertekster, kan forårsake ytelsesproblemer)"
6
obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/nn-NO.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+Device="Eining"
3
+Mode="Modus"
4
+ColorSpace.Default="Standard"
5
+ColorRange.Default="Standard"
6
+ChannelFormat="Kanal"
7
+ChannelFormat.None="Ingen"
8
+VideoConnection="Videotilkopling"
9
+AudioConnection="Lydtilkopling"
10
obs-studio-27.1.3.tar.xz/plugins/decklink/data/locale/szl-PL.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+BlackmagicDevice="Maszina Blackmagic"
3
+Device="Maszina"
4
+Mode="Tryb"
5
+Buffering="Użyj buforowanio"
6
+PixelFormat="Format pikseli"
7
+ColorSpace="Przestrzyństwo farb"
8
+ColorSpace.Default="Sztandardowe"
9
+ColorRange="Zakrys farb"
10
+ColorRange.Default="Sztandardowy"
11
+ColorRange.Partial="Niyblank"
12
+ColorRange.Full="Połny"
13
+ChannelFormat="Kanały"
14
+ChannelFormat.None="Brak"
15
+ChannelFormat.2_0ch="2.0"
16
+ChannelFormat.2_1ch="2.1"
17
+ChannelFormat.4_0ch="4.0"
18
+ChannelFormat.4_1ch="4.1"
19
+ChannelFormat.5_1ch="5.1"
20
+ChannelFormat.7_1ch="7.1"
21
+DeactivateWhenNotShowing="Wyłōncz, kej niyma pokazowane"
22
+AutoStart="Sztartuj autōmatycznie przi sztarcie"
23
+SwapFC-LFE="Zamiyń FC i LFE"
24
+SwapFC-LFE.Tooltip="Zamiyń cyntralny kanał ze subwooferem"
25
+VideoConnection="Połōnczynie wideo"
26
+AudioConnection="Połōnczynie audio"
27
+Allow10Bit="Przizwolej 10 bitów (wymogane do napisōw SDI, może zwiynkszać ôciōnżynie)"
28
obs-studio-27.0.1.tar.xz/plugins/decklink/decklink-device-mode.cpp -> obs-studio-27.1.3.tar.xz/plugins/decklink/decklink-device-mode.cpp Changed
22
 
1
@@ -66,6 +66,20 @@
2
    return name;
3
 }
4
 
5
+bool DeckLinkDeviceMode::IsEqualFrameRate(int64_t num, int64_t den)
6
+{
7
+   bool equal = false;
8
+
9
+   if (mode) {
10
+       BMDTimeValue frameDuration;
11
+       BMDTimeScale timeScale;
12
+       if (SUCCEEDED(mode->GetFrameRate(&frameDuration, &timeScale)))
13
+           equal = timeScale * den == frameDuration * num;
14
+   }
15
+
16
+   return equal;
17
+}
18
+
19
 void DeckLinkDeviceMode::SetMode(IDeckLinkDisplayMode *mode_)
20
 {
21
    IDeckLinkDisplayMode *old = mode;
22
obs-studio-27.0.1.tar.xz/plugins/decklink/decklink-device-mode.hpp -> obs-studio-27.1.3.tar.xz/plugins/decklink/decklink-device-mode.hpp Changed
9
 
1
@@ -21,6 +21,7 @@
2
    BMDDisplayModeFlags GetDisplayModeFlags(void) const;
3
    long long GetId(void) const;
4
    const std::string &GetName(void) const;
5
+   bool IsEqualFrameRate(int64_t num, int64_t den);
6
 
7
    void SetMode(IDeckLinkDisplayMode *mode);
8
 
9
obs-studio-27.0.1.tar.xz/plugins/decklink/decklink-output.cpp -> obs-studio-27.1.3.tar.xz/plugins/decklink/decklink-output.cpp Changed
42
 
1
@@ -66,6 +66,18 @@
2
 
3
    DeckLinkDeviceMode *mode = device->FindOutputMode(decklink->modeID);
4
 
5
+   struct obs_video_info ovi;
6
+   if (!obs_get_video_info(&ovi)) {
7
+       LOG(LOG_ERROR,
8
+           "Start failed: could not retrieve obs_video_info!");
9
+       return false;
10
+   }
11
+
12
+   if (!mode->IsEqualFrameRate(ovi.fps_num, ovi.fps_den)) {
13
+       LOG(LOG_ERROR, "Start failed: FPS mismatch!");
14
+       return false;
15
+   }
16
+
17
    decklink->SetSize(mode->GetWidth(), mode->GetHeight());
18
 
19
    struct video_scale_info to = {};
20
@@ -204,10 +216,17 @@
21
        const std::vector<DeckLinkDeviceMode *> &modes =
22
            device->GetOutputModes();
23
 
24
-       for (DeckLinkDeviceMode *mode : modes) {
25
-           obs_property_list_add_int(modeList,
26
-                         mode->GetName().c_str(),
27
-                         mode->GetId());
28
+       struct obs_video_info ovi;
29
+       if (obs_get_video_info(&ovi)) {
30
+           for (DeckLinkDeviceMode *mode : modes) {
31
+               if (mode->IsEqualFrameRate(ovi.fps_num,
32
+                              ovi.fps_den)) {
33
+                   obs_property_list_add_int(
34
+                       modeList,
35
+                       mode->GetName().c_str(),
36
+                       mode->GetId());
37
+               }
38
+           }
39
        }
40
 
41
        obs_property_list_add_int(keyerList, "Disabled", 0);
42
obs-studio-27.0.1.tar.xz/plugins/decklink/decklink-source.cpp -> obs-studio-27.1.3.tar.xz/plugins/decklink/decklink-source.cpp Changed
25
 
1
@@ -87,9 +87,8 @@
2
 static void decklink_show(void *data)
3
 {
4
    DeckLinkInput *decklink = (DeckLinkInput *)data;
5
-   obs_source_t *source = decklink->GetSource();
6
-   bool showing = obs_source_showing(source);
7
-   if (decklink->dwns && showing && !decklink->Capturing()) {
8
+
9
+   if (decklink->dwns && !decklink->Capturing()) {
10
        ComPtr<DeckLinkDevice> device;
11
        device.Set(deviceEnum->FindByHash(decklink->hash.c_str()));
12
        decklink->Activate(device, decklink->id,
13
@@ -100,9 +99,8 @@
14
 static void decklink_hide(void *data)
15
 {
16
    DeckLinkInput *decklink = (DeckLinkInput *)data;
17
-   obs_source_t *source = decklink->GetSource();
18
-   bool showing = obs_source_showing(source);
19
-   if (decklink->dwns && showing)
20
+
21
+   if (decklink->dwns && decklink->Capturing())
22
        decklink->Deactivate();
23
 }
24
 
25
obs-studio-27.1.3.tar.xz/plugins/enc-amf/#Resources/.gitignore Added
13
 
1
@@ -0,0 +1,10 @@
2
+./Output
3
+/Output
4
+./Package
5
+/Package
6
+./Libs
7
+/Libs
8
+./Installer.iss
9
+/Installer.iss
10
+./package.bat
11
+/package.bat
12
\ No newline at end of file
13
obs-studio-27.1.3.tar.xz/plugins/enc-amf/.gitignore Added
15
 
1
@@ -0,0 +1,13 @@
2
+## Ignore file for OBS-AMD-Media-Framework.
3
+
4
+# CMAKE
5
+/build
6
+/build32
7
+/build64
8
+/deps
9
+/deps32
10
+/deps64
11
+
12
+# Visual Studio
13
+/.vs
14
+/#Build
15
obs-studio-27.1.3.tar.xz/plugins/enc-amf/AMF/amf/.gitignore Added
39
 
1
@@ -0,0 +1,37 @@
2
+## Ignore Visual Studio temporary files, build results, etc.
3
+
4
+# User-specific files
5
+*.suo
6
+*.user
7
+
8
+# Build results
9
+bin/
10
+
11
+# Visual Studo 2015 cache/options directory
12
+.vs/
13
+
14
+# Visual C++ cache files
15
+ipch/
16
+*.aps
17
+*.ncb
18
+*.opensdf
19
+*.sdf
20
+*.cachefile
21
+*.opendb
22
+*.VC.db
23
+
24
+# Visual Studio profiler
25
+*.psess
26
+*.vsp
27
+*.vspx
28
+
29
+# Installshield output folder
30
+[Ee]xpress/
31
+
32
+# Backup & report files from converting an old project file
33
+# to a newer Visual Studio version. Backup files are not needed,
34
+# because we have git ;-)
35
+_UpgradeReport_Files/
36
+Backup*/
37
+UpgradeLog*.XML
38
+UpgradeLog*.htm
39
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/ar-SA.ini Changed
29
 
1
@@ -1,2 +1,27 @@
2
+Utility.Default="افتراضي"
3
+Utility.Automatic="تلقائي"
4
+Utility.Manual="يدوي"
5
+Utility.Switch.Disabled="تعطيل"
6
+Utility.Switch.Enabled="تمكين"
7
+Preset.ResetToDefaults="إستعادة الإعدادات الإفتراضية"
8
+Preset.Recording="تسجيل"
9
+Preset.HighQuality="تسجيل عالي الجودة"
10
+Preset.Indistinguishable="تسجيل غير قابل للتمييز"
11
+Preset.Twitch="بث تويتش"
12
+Preset.YouTube="بث يوتيوب"
13
+QualityPreset.Speed="السرعة"
14
+QualityPreset.Quality="الجودة"
15
+AspectRatio="تناسب الأبعاد"
16
+FrameSkipping="تخطي الإطار"
17
 HighMotionQualityBoost="زيادة جودة الحركة العالية"
18
 HighMotionQualityBoost.Description="تمكين زيادة جودة الحركة العالية."
19
+MotionEstimation.Quarter="ربع بكسل"
20
+MotionEstimation.Half="نصف بكسل"
21
+MotionEstimation.Full="ربع ونصف بكسل"
22
+Video.API="API لفيديو"
23
+Video.Adapter="محول الفيديو"
24
+View="نمط العرض"
25
+View.Basic="أساسي"
26
+View.Advanced="متقدم"
27
+View.Expert="محترف"
28
+Debug="تصحيح الأخطاء"
29
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/fil-PH.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/fil-PH.ini Changed
11
 
1
@@ -3,7 +3,9 @@
2
 Utility.Manual="Mano-manong"
3
 Utility.Switch.Disabled="Hindi pinagana"
4
 Utility.Switch.Enabled="Pinagana"
5
+Preset.ResetToDefaults="Ibalik sa pangkaraniwang settings"
6
 Preset.Recording="Rekording"
7
+Preset.Twitch="Paghahatid sa Twitch"
8
 QualityPreset="Ang kalidad na naka handa"
9
 QualityPreset.Speed="Bilis"
10
 QualityPreset.Balanced="Balanse"
11
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/gd-GB.ini Changed
149
 
1
@@ -4,17 +4,147 @@
2
 Utility.Switch.Disabled="À comas"
3
 Utility.Switch.Enabled="An comas"
4
 Preset="Ro-sheata"
5
+Preset.ResetToDefaults="Aisig na bun-roghainnean"
6
 Preset.Recording="Clàradh"
7
+Preset.HighQuality="Clàradh le càileachd àrd"
8
+Preset.Indistinguishable="Clàradh le diofar nach aithnichear"
9
+Preset.Lossless="Clàradh cha mhòr gun chall"
10
+Preset.Twitch="Sruthadh Twitch"
11
+Preset.YouTube="Sruthadh YouTube"
12
+QualityPreset="Ro-sheata na càileachd"
13
+QualityPreset.Description="Bheir ro-sheata na càileachd a chleachdas tu airson a’ chòdachaidh buaidh air an luaths is a’ chàileachd.\n- Tha “\@QualityPreset.Speed\@” as luaithe ach a’ chàileachd as miosa air.\n- Tha a’ chàileachd as àirde air “\@QualityPreset.Quality\@” ach tha e as slaodaiche.\n- Tha “\@QualityPreset.Balanced\@” cothromaichte eadar an dà chuid.\n\nTha an roghainn seo stadaigeach is cha ghabh a h-atharrachadh dè a’ chòdachaidh."
14
 QualityPreset.Speed="Luaths"
15
 QualityPreset.Balanced="Cothromach"
16
 QualityPreset.Quality="Càileachd"
17
 Profile="Pròifil"
18
+Profile.Description="A’ phròifil a thèid a chleachdadh airson a’ chòdachaidh, leis na pròifilean leis an taic as fheàrr riutha aig a’ bhàrr agus na pròifilean leis a’ chàileachd as àirde aig a’ bhonn.\nSa mhòrchuid de shuidheachaidhean, tha e nas fheàrr an roghainn seo a chumail air an luach bhunaiteach gun atharrachadh.\n\nTha an roghainn seo stadaigeach is cha ghabh a h-atharrachadh dè a’ chòdachaidh."
19
+ProfileLevel="Leibheil na pròifile"
20
+ProfileLevel.Description="An leibheil ri chleachdadh air a’ phròifil a shuidhicheas an dùmhlachd-bhreacaidh ’s an reat fhrèaman as àirde do shruthadh còdaichte.\nCha chuir na luachan as àirde taic ri uiread de dh’uidheaman ach tha teans de càileachd as fheàrr orra fhad ’s a chuireas luachan as ìsle taic ri barrachd uidheaman ach tha teans de càileachd as lugha orra.\nMholamaid gun cùm thu seo air an luach bhunaiteach “\@Utility.Automatic\@” a thaghas an ìre as ìsle a chuireas taic ris an dùmhlachd-bhreacaidh ’s an reat fhrèaman a chùm co-chòrdalachd as àirde.\n\nTha an roghainn seo stadaigeach is cha ghabh a h-atharrachadh dè a’ chòdachaidh."
21
+Tier="Ìre"
22
+Tier.Description="An ìre leis an dèid a chòdachadh.\n- Thèid “High” a chleachdadh airson susbaint le reat bhiodan àrd mar clàradh cha mhòr gun chall.\n- Thèid “Main” a chleachdadh airson meadhanan sruthaidh no clàradh àbhaisteach.\n\nTha an roghainn seo stadaigeach is cha ghabh a h-atharrachadh dè a’ chòdachaidh."
23
 AspectRatio="Co-mheas an deilbh"
24
+AspectRatio.Description="Dè an co-mheas deilbh a bu chòir sgrìobhadh dhan fhaidhle às-chuir."
25
+CodingType="Seòrsa a’ chòdachaidh"
26
+CodingType.Description="An seòrsa de chòdachadh a thèid a chleachdadh nuair a thèid a’ phacaidh dheireannach a chòdachadh.\n- Taghaidh “\@Utility.Automatic\@” an seòrsa as fheàrr dhan chòdachadh gu fèin-obrachail (mholamaid seo).\n- Tha “CALVC” (Context-Adaptive Variable-Length Coding) beagan nas luaithe ach gheibh thu susbaint chòdaichte nas motha às.\n- Tha “CABAC” (Context-Adaptive Binary Arithmetic Coding) beagan nas slaodaiche ach gheibh thu susbaint chòdaichte nas lugha às.\n\nTha an roghainn seo stadaigeach is cha ghabh a h-atharrachadh dè a’ chòdachaidh."
27
+MaximumReferenceFrames="Uiread as motha de fhrèaman iomraidh"
28
+MaximumReferenceFrames.Description="An àireamh as motha de fhrèaman iomraidh a thèid a chleachdadh san t-susbaint chòdaichte. Bheir seo buaidh dhìreach air a’ chàileachd do dh’innealan-còdachaidh a chuireas taic ris.\n\nTha an roghainn seo stadaigeach is cha ghabh a h-atharrachadh dè a’ chòdachaidh."
29
+RateControlMethod="Dòigh stiùireadh an reat"
30
+RateControlMethod.Description="An dòigh a thèid a chleachdadh airson an reat bhiodan a stiùireadh\n- Iomruinidh “\@RateControlMethod.CQP\@” paramadairean quantization do gach frèama agus mholamaid e airson clàradh le càileachd àrd no cha mhòr gun chall.\n- Feuchaidh “\@RateControlMethod.CBR\@” ri dlùthadh air \@Bitrate.Target\@ cho teann ’s a ghabhas, ’ga lìonadh le \@FillerData\@ nuair a bhios sin iomchaidh agus mholamaid airson sruthadh e.\n- Feuchaidh “\@RateControlMethod.VBR\@” ri dlùthachadh air \@Bitrate.Peak\@ cho teann ’s a ghabhas agus thèid e cho ìosal ri \@Bitrate.Target\@ ma ghabhas sin a dhèanamh agus mholamaid e airson clàradh le meud beag.\n- Tha “\@RateControlMethod.VBRLAT\@” coltach ri “\@RateControlMethod.VBR\@” ach bheir e an aire do fhoillidheachd a’ chòdachaidh ’na àite."
31
+RateControlMethod.CQP="QP cunbhalach (CQP)"
32
+RateControlMethod.CBR="Reat bhiodan cunbhalach (CBR)"
33
+RateControlMethod.VBR="Reat bhiodan caochlaideach (bàrr cuingichte) (VBR)"
34
+RateControlMethod.VBRLAT="Reat bhiodan caochlaideach (foillidheachd chuingichte) (VBR)"
35
+PrePassMode="Modh ro-phas"
36
+PrePassMode.Description="Bheir an ro-phas piseach air sgaoileadh an reat bhiodan am broinn sreatha (GOP). Gidheadh, bheir seo buaidh eadar-dhealaichte air a-rèir na cairte.\nMa chuireas tu seo an comas, thèid dèanadas a’ chòdachaidh ìsleachadh le mu 10% a dh’fhaodadh cus eallaich a chur air a’ chòdachadh."
37
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (cairteal dhen mheud)"
38
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (leth-mheud)"
39
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (làn-mheud)"
40
+Bitrate.Target="Amas an reat bhiodan"
41
+Bitrate.Target.Description="An reat bhiodan ri amas air dhan t-sreath gu lèir."
42
+Bitrate.Peak="Bàrr an reat bhiodan"
43
+Bitrate.Peak.Description="An reat bhiodan as àirde ri amas air dhan t-sreath gu lèir."
44
+QP.IFrame="QP nam frèaman-I"
45
+QP.IFrame.Description="Luach QP socraichte ri chleachdadh dha na frèaman-I."
46
+QP.PFrame="QP nam frèaman-P"
47
+QP.PFrame.Description="Luach QP socraichte ri chleachdadh dha na frèaman-P."
48
+QP.BFrame="QP nam frèaman-B"
49
+QP.BFrame.Description="Luach QP socraichte ri chleachdadh dha na frèaman-B."
50
+QP.Minimum="QP as lugha"
51
+QP.Minimum.Description="Luach QP socraichte as lugha ri chleachdadh dha na frèaman."
52
+QP.IFrame.Minimum="QP as lugha nam frèaman-I"
53
+QP.IFrame.Minimum.Description="Luach QP socraichte as lugha ri chleachdadh dha na frèaman-I."
54
+QP.PFrame.Minimum="QP as lugha nam frèaman-P"
55
+QP.PFrame.Minimum.Description="Luach QP socraichte as lugha ri chleachdadh dha na frèaman-P."
56
+QP.Maximum="QP as motha"
57
+QP.Maximum.Description="Luach QP socraichte as motha ri chleachdadh dha na frèaman."
58
+QP.IFrame.Maximum="QP as motha nam frèaman-I"
59
+QP.IFrame.Maximum.Description="Luach QP socraichte as motha ri chleachdadh dha na frèaman-I."
60
+QP.PFrame.Maximum="QP as motha nam frèaman-P"
61
+QP.PFrame.Maximum.Description="Luach QP socraichte as motha ri chleachdadh dha na frèaman-P."
62
+FillerData="Dàta lìonaidh"
63
+FillerData.Description="Ma chuireas tu an dàta lìonaidh an comas, ’s urrainn dhan inneal-chòdachaidh an \@Bitrate.Target\@ a chumail air a char as lugha le lìonadh an àite a tha air fhàgail ann an sreath le fiosrachadh falamh."
64
+FrameSkipping="Gearradh leum thar frèaman"
65
+FrameSkipping.Description="Le gearradh leum thar frèaman, ’s urrainn dhan inneal-chòdachaidh leum a ghearradh thar frèaman airson feumalachdan \@Bitrate.Target\@ a choileanadh.\nNuair a ghearras an t-inneal-còdachaidh leum thar frèama, cuiridh e NAL ag atharrais am frèam mu dheireadh a-steach dhan t-sruthadh ’na àite.\nCuidich seo airson feumalachdan \@Bitrate.Target\@ glè ìosal a choileanadh."
66
+FrameSkipping.Period="Ùine gearradh leum thar frèaman"
67
+FrameSkipping.Period.Description="An t-eadaramh (’na fhrèaman) eadar na frèaman a thèid leum a ghearradh thairis orra. Gabhaidh seo a chleachdadh airson riochd reat fhrèaman nas ìsle a chur air na chaidh a shuidheachadh dha OBS fhad ’s a bhios sruthadh dligheach ann fhathast."
68
+FrameSkipping.Behaviour="Giùlan gearradh leum thar frèaman"
69
+FrameSkipping.Behaviour.Description="Mìnich an dòigh air an dèid gearradh leum thar frèaman."
70
+FrameSkipping.SkipNth="Na geàrr leum seachad ach air gach Nmh frèam"
71
+FrameSkipping.KeepNth="Na cùm ach air gach Nmh frèam"
72
+VBAQ.Description="Cuir cleachdadh “Variance Based Adaptive Quantization” (VBAQ) an comas a tha stèidhichte air seachranachd nam piogsail airson an reat bhiodan a sgaoileadh nas fheàrr.\nTha seo stèidhichte air a’ bheachd gum mothaich an lèirsinn daonda do nas lugha a mhearachdan ann an raointean inneachail agus cuiridh e an reat bhiodan dha na h-uachdaran nas rèidhe.\nMa chuireas tu seo an comas, dh’fhaoidte gum bi coltas càileachd nas àirde air cuid a shusbaint."
73
+EnforceHRD="Spàrr HRD"
74
+EnforceHRD.Description="Spàrr air gun dèid Hypothetical Reference Decoder a chleachdadh a dhearbhas gu bheil an sruthadh às-chuir ceart."
75
+HighMotionQualityBoost="Spionnadh air càileachd nan gluasadan luatha"
76
+HighMotionQualityBoost.Description="Cuiridh seo an comas spionnadh air càileachd nan gluasadan luatha."
77
+VBVBuffer="Bufair VBV"
78
+VBVBuffer.Description="An dòigh a thèid a chleachdadh airson meud a’ bhufair VBV a shuidheachadh:\n- Àireamhaichidh “\@Utility.Automatic\@” am meud le cuingeachadh teann.\n- Leigidh “\@Utility.Manual\@” leis a chleachdaiche am meud a stiùireadh.\nTha VBV (Video Buffering Verifier) ’ga chleachdadh le dòighean stiùireadh reat sònraichte airson an reat bhiodan farsaing a chumail am broinn nan cuingeachaidhean."
79
+VBVBuffer.Strictness="Teannachd bufair VBV"
80
+VBVBuffer.Strictness.Description="Suidhichidh seo dè cho teann ’s a bhios am bufair VBV, le 100% cho teann ’s a ghabhas agus 0% gun chuingeachadh."
81
+VBVBuffer.Size="Meud bufair VBV"
82
+VBVBuffer.Size.Description="Meud a’ bhufair VBV a thèid a chleachdadh airson an reat bhiodan a stiùireadh ann an sreath."
83
+VBVBuffer.InitialFullness="Lìonadh-tòiseachaidh bufair VBV"
84
+VBVBuffer.InitialFullness.Description="Dè cho làn ’s a bhios am bufair VBV aig an toiseach (’na %) agus cha doir seo buaidh ach air a’ chiad shreath dhen chlàradh."
85
+Interval.Keyframe="Eadaramh fhrèaman-iuchrach"
86
+Interval.Keyframe.Description="An t-eadaramh (’na dhiogan) eadar na frèaman-iuchrach."
87
+Period.IDR.H264="Faide IDR (’na frèaman)"
88
+Period.IDR.H264.Description="Mìnichidh seo an t-astar eadar na Instantaneous Decoding Refreshes (IDR) ’na frèamaichean."
89
+Period.IDR.H265="Faide IDR (’na GOP)"
90
+Period.IDR.H265.Description="Mìnichidh seo an t-astar eadar na Instantaneous Decoding Refreshes (IDR) ’na GOP."
91
+Interval.IFrame="Eadaramh nam frèaman-I"
92
+Interval.IFrame.Description="An t-eadaramh (’na dhiogan) eadar na frèaman-I. Tar-àithnidh frèaman-I na frèaman-P ’s frèaman-B."
93
+Period.IFrame="Faide fhrèaman-I (’na frèaman)"
94
+Period.IFrame.Description="An t-astar (’na fhrèaman) eadar na frèaman-I. Tar-àithnidh frèaman-I na frèaman-P ’s frèaman-B."
95
+Interval.PFrame="Eadaramh nam frèaman-P"
96
+Interval.PFrame.Description="An t-eadaramh (’na dhiogan) eadar na frèaman-P. Tar-àithnidh frèaman-P na frèaman-B."
97
+Period.PFrame="Faide fhrèaman-P (’na frèaman)"
98
+Period.PFrame.Description="An t-astar (’na fhrèaman) eadar na frèaman-P. Tar-àithnidh frèaman-P na frèaman-B."
99
+Interval.BFrame="Eadaramh nam frèaman-B"
100
+Interval.BFrame.Description="An t-eadaramh (’na dhiogan) eadar na frèaman-B."
101
+Period.BFrame="Faide fhrèaman-B (’na frèaman)"
102
+Period.BFrame.Description="An t-astar (’na fhrèaman) eadar na frèaman-B."
103
+GOP.Type="Seòrsa GOP"
104
+GOP.Type.Description="An seòrsa de GOP (buidheann dhealbhan) a thèid a chleachdadh:\n- Cleachdaidh “\@GOP.Type.Fixed\@” astar socraichte eadar gach GOP an-còmhnaidh.\n- Ceadaichiadh “\@GOP.Type.Variable\@” meudan eadar-dhealaichte air GOPs a-rèir an fheuma.\n’S e “\@GOP.Type.Fixed\@” an dòigh air an obraich H264 agus tha seo nas fheàrr airson sruthadh lìonraidh ionadail fhad ’s a tha “\@GOP.Type.Variable\@” as fheàrr airson clàraidhean beaga le càileachd àrd."
105
 GOP.Type.Fixed="Socraichte"
106
 GOP.Type.Variable="Caochlaideach"
107
+GOP.Size="Meud nan GOP"
108
+GOP.Size.Description="Meud GOP (buidheann dhealbhan) ’na fhrèaman."
109
+GOP.Size.Minimum="Meud as lugha nan GOP"
110
+GOP.Size.Minimum.Description="Meud GOP as lugha (buidheann dhealbhan) ’na fhrèaman."
111
+GOP.Size.Maximum="Meud as motha nan GOP"
112
+GOP.Size.Maximum.Description="Meud GOP as motha (buidheann dhealbhan) ’na fhrèaman."
113
+GOP.Alignment="Co-thaobhadh GOP"
114
+GOP.Alignment.Description="Deuchainneil, chan eil fios dè a bhuaidh. Cleachd air do chunnart fhèin."
115
+BFrame.Pattern="Pàtran nam frèaman-B"
116
+BFrame.Pattern.Description="Co mheud frèaman-B a thèid a chleachdadh rè a’ chlàraidh.\nCuiridh cairtean VCE dhen 2na ’s 3s ginealach taic ris. Bheir seo droch-bhuaidh air dèanadas a’ chòdachaidh."
117
+BFrame.DeltaQP="Delta QP nam frèaman-B"
118
+BFrame.DeltaQP.Description="Luach delta QP dhan fhrèam-I no -P mu dheireadh do fhrèaman-B nach gabh iomradh."
119
+BFrame.Reference="Iomradh fhrèaman-B"
120
+BFrame.Reference.Description="Leig le frèam-B gun cleachd e frèaman-B ’nan iomradh cuideachd seach frèaman-P is -I a-mhàin."
121
+BFrame.ReferenceDeltaQP="Delta QP nan iomraidhean fhrèaman-B"
122
+BFrame.ReferenceDeltaQP.Description="Luach delta QP dhan fhrèam-I no -P mu dheireadh do fhrèaman-B a ghabhas iomradh."
123
+DeblockingFilter="Criathrag dì-bhacaidh"
124
+DeblockingFilter.Description="Ceadaich gun cuir an t-inneal dì-chòdachaidh criathrag dì-bhacaidh an sàs."
125
+MotionEstimation="Tuairmse air a’ ghluasad"
126
+MotionEstimation.Description="Leigidh an tuairmse air a’ ghluasad leis an inneal-còdachaidh gun lùghdaich e an reat bhiodan air a bheil feum le tuairmse air càite an deach piogsail."
127
+MotionEstimation.Quarter="Cairteal de phiogsail"
128
+MotionEstimation.Half="Leth-phiogsail"
129
+MotionEstimation.Full="Cairteal ⁊ leth-phiogsail"
130
+Video.API="API video"
131
+Video.API.Description="Dè an API a chleachdas a’ backend?"
132
 Video.Adapter="Adaptar video"
133
+Video.Adapter.Description="Dè an t-adaptar air am feuch sinn an còdachadh?"
134
+OpenCL.Transfer="Tar-chur OpenCL"
135
+OpenCL.Transfer.Description="Tar-chur am frèam dhan GPU le OpenCL seach cuimhne mhapaichte. Chan eil an tar-chur le OpenCL cho an-dràsta ’s a-rithist ’s a tha an tar-chur le cuimhne mhapaichte nuair a bhios an GPU ’ga chleachdadh."
136
+OpenCL.Conversion="Iompachadh OpenCL"
137
+OpenCL.Conversion.Description="Iompaich a frèam air a’ GPU le OpenCL seach DirectCompute."
138
+MultiThreading.Description="Cleachd iomadh thread airson cur a-null fhrèaman is faighinn phacaidean a làimhseachadh. Cuidichidh seo air CPU slaodach ach cleachdaidh e barrachd de ghoireasan an t-siostaim san fharsaingeachd. Bheir e droch-bhuaidh air an dèanadas air CPU luath."
139
+QueueSize="Meud a’ chiutha"
140
+QueueSize.Description="Seo an àireamh de fhrèaman a thèid a chur air a’ chiutha dhan inneal-chòdachaidh mus fheuch sinn ri pacaidean fhaighinn. Bheir luach àrd barrachd foillidheachd dhut fhad ’s a nì luach ro ìosal an còdachadh ro thrang. Mholamaid gum fàg thu seo air a’ bhun-roghainn."
141
+View="Am modh seallaidh"
142
+View.Description="Dè na roghainnean a chithear?\n- ’S e “\@View.Basic\@” a tha san t-sealladh as bunasaiche agus mholamaid dhan a h-uile duine e.\n- Seallaidh “\@View.Advanced\@” barrachd roghainnean a leithid taic do dh’iomadh GPU agus mholamaid dhan luchd-chleachdaidh adhartach e.\n- Seallaidh “\@View.Expert\@” roghainnean cunnartach a dh’fhaodas trioblaid mhòr adhbharachadh agus cha mholamaid iad ach ma tha làn-fhios agad dè tha thu a’ dèanamh.\n- Bheir “\@View.Master\@” air falbh cuingeachadh sam bith agus seallaidh e a h-uile roghainn, a’ gabhail a-staigh an fheadhainn a dh’fhaodas am bathar-cruaidh a bhriseadh.\n\nChan eil uallach air OBS no luchd-glèidhidh nam plugan mu dhochann a chaidh adhbharachadh leis na rinn thu fhèin mar a tha sinn a’ mìneachadh ann an aonta a’ cheadachais. Ma chleachdas tu “\@View.Master\@”, chan fhaigh thu taic uainn mu dhuilgheadas sam bith a dh’èireas ’na lùib."
143
 View.Basic="Bunasach"
144
 View.Advanced="Adhartach"
145
 View.Expert="Eòlaiche"
146
 View.Master="Maighistir"
147
 Debug="Dì-bhugachadh"
148
+Debug.Description="Cuir an comas teachdaireachdan dì-bhugachaidh a bharrachd a thèid a sgrìobhadh gu faidhle loga OBS.\nAch an obraich seo, feumaidh tu OBS Studio a thòiseachadh air a loidhne-àithne leis an roghainn “--verbose --unfiltered_log” (às aonais nan asgairean).\nRabhadh: Ìslichidh seo dèanadas OBS san fharsaingeachd ri linn an uireid mhòir de theachdaireachdan dì-bhugachaidh a thèid a chruthachadh, mar sin na cleachd e ach ma chaidh sin iarraidh ort no ma tha thu a’ feuchainn ri duilgheadas leis a’ chòdachadh a chàradh."
149
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/he-IL.ini Changed
42
 
1
@@ -7,22 +7,38 @@
2
 Preset.ResetToDefaults="שחזור הגדרות ברירת מחדל"
3
 Preset.Recording="מקליט"
4
 Preset.HighQuality="הקלטה באיכות גבוהה"
5
-Preset.Twitch="הזרמה אל Twitch"
6
-Preset.YouTube="הזרמה אל YouTube"
7
+Preset.Indistinguishable="הקלטה שאינה ניתנת להבחנה"
8
+Preset.Lossless="הקלטה כמעט ללא-אובדן"
9
+Preset.Twitch="שידור חי ב־Twitch"
10
+Preset.YouTube="שידור חי ב־YouTube"
11
+QualityPreset="הגדרת איכות קבועה מראש"
12
+QualityPreset.Description="הגדרת האיכות הקבועה מראש שנמצאת בשימוש לקידוד זה, משפיעה על מהירות ואיכות.\n- ל-'\@QualityPreset.Speed\@' יש את המהירות הגבוהה ביותר והאיכות הנמוכה ביותר.\n- ל-'\@QualityPreset.Speed\@' יש את האיכות הגבוהה ביותר והמהירות הנמוכה ביותר.\n- '\@QualityPreset.Speed\@' מהווה איזון של השניים.\n\nאפשרות זו היא קבועה ואינה ניתנת לשינוי בזמן קידוד."
13
 QualityPreset.Speed="מהירות"
14
 QualityPreset.Balanced="איזון"
15
 QualityPreset.Quality="איכות"
16
 Profile="פרופיל"
17
+Profile.Description="הפרופיל שיבוצע בו שימוש לקידוד, עם פרופילים הנתמכים טוב יותר למעלה והפרופילים עם האיכות הגבוהה ביותר בתחתית.\nעבור רוב המקרים, מומלץ שלא לשנות את אפשרות זו ולהשאיר אותה על ערך ברירת המחדל.\n\nאפשרות זו היא קבועה ואינה ניתנת לשינוי בזמן קידוד."
18
 ProfileLevel="רמת פרופיל"
19
+ProfileLevel.Description="הרמה בה יש להשתמש עבור הפרופיל המשמשת כדי לקבוע את הרזולוציה וקצב הפריימים המקסימאליים בשביל שידור חי מקודד.\nערכים גבוהים יותר משמעותם פחות מכשירים נתמכים, אך פוטנציאל לאיכות גבוהה יותר, כאשר ערכים נמוכים יותר משמעותם יותר מכשירים נתמכים אך פוטנציאל לאיכות נמוכה יותר.\nמומלץ להשאיר אפשרות זו על ברירת המחדל של '\@Utility.Automatic\@' שיבחר את הרמה הנמוכה ביותר שיכולה לתמוך ברזולוציה וקצב הפריימים עבור תאימות מקסימאלית.\n\nאפשרות זו היא קבועה ואינה ניתנת לשינוי בזמן קידוד."
20
 Tier="דרגה"
21
+Tier.Description="ה-tier עימו יש לקודד.\n- השימוש ב-'High' הוא עבור תוכן בעל קצב נתונים גבוה כמו הקלטה כמעט ללא-אובדן.\n- השימוש ב-'Main' הוא עבור שידור חי של מדיה או הקלטה רגילה.\n\nאפשרות זו היא קבועה ואינה ניתנת לשינוי בזמן קידוד."
22
+AspectRatio="יחס גובה-רוחב"
23
+AspectRatio.Description="איזה יחס גובה-רוחב אמור להיכתב לתוך קובץ הפלט."
24
 CodingType="סוג קידוד"
25
+CodingType.Description="סוג הסימול בו יש להשתמש כאשר מתבצע קידוד של החבילה האחרונה.\n- '\@Utility.Automatic\@' בוחר באופן אוטומטי את סוג הסימול הטוב ביותר (מומלץ).\n- 'CALVC' (Context-Adaptive Variable-Length Coding) מעט מהיר יותר, אך התוצאה שלו היא תוכן מקודד גדול יותר.\n- 'CABAC' (Context-Adaptive Binary Arithmetic Coding) מעט איטי יותר, אך התוצאה שלו היא תוכן מקודד מעט קטן יותר.\n\nאפשרות זו היא קבועה ואינה ניתנת לשינוי בזמן קידוד."
26
+MaximumReferenceFrames="מקסימום הפניות פריימים"
27
+MaximumReferenceFrames.Description="הכמות המקסימאלית של הפניות פריימים בה יתבצע שימוש עבור התוכן המקודד. משפיע ישירות על האיכות עבור מקודדים שתומכים בזה.\n\nאפשרות זו היא קבועה ואינה ניתנת לשינוי בזמן קידוד."
28
+RateControlMethod="שיטת קצב שליטה"
29
 PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (רבע מהגודל)"
30
 PrePassMode.Half="\@Utility.Switch.Enabled\@ (חצי מהגודל)"
31
 PrePassMode.Full="\@Utility.Switch.Enabled\@ (כל הגודל)"
32
+FillerData="סינון נתונים"
33
 GOP.Type="סוג קבוצת תמונות"
34
 GOP.Type.Fixed="קבוע"
35
 GOP.Type.Variable="משתנה"
36
 GOP.Size="גודל קבוצת תמונות"
37
+MotionEstimation.Quarter="רבע פיקסל"
38
+MotionEstimation.Half="חצי פיקסל"
39
 Video.API="API וידאו"
40
 Video.API.Description="באיזה API אמור המנגנון להשתמש?"
41
 Video.Adapter="מתאם תצוגה"
42
obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Bitrate.Target="लक्ष्य बिटरेट"
3
+QP.Minimum="न्यूनतम QP"
4
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/hu-HU.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/hu-HU.ini Changed
54
 
1
@@ -29,16 +29,17 @@
2
 MaximumReferenceFrames="Maximális referencia képkockák"
3
 MaximumReferenceFrames.Description="A maximális mennyiségű referenciakockák száma tartalomkódolás során. Közvetlen hatással van a kódolókra, amelyek támogatják az opciót.\n\nEz a beállítás statikus és nem változtatható kódolás során."
4
 RateControlMethod="Sebességvezérlési metódus"
5
+RateControlMethod.Description="Milyen módszer állítsa a (bit)rátát?\n- Az „\@RateControlMethod.CQP\@” fix kvantálási paramétereket rendel minden egyes képkockához, ez a magas minőségű, veszteségmentes közeli felvételekhez javasolt.\n- Az „\@RateControlMethod.CBR\@” megpróbál minél közelebb kerülni a \@Bitrate.Target\@hez, választható módon \@FillerData\@okkal feltöltve. Ez követítéshez javasolt.\n- A „\@RateControlMethod.VBR\@” megpróbál minél közelebb kerülni a \@Bitrate.Peak\@hez, de ha lehetséges, akkor a \@Bitrate.Target\@ig lecsökken. Ez a kis méretű felvételekhez javasolt.\n-A „\@RateControlMethod.VBRLAT\@” hasonló a „\@RateControlMethod.VBR\@” módszerhez, de a kódolás késleltetését veszi figyelembe."
6
 RateControlMethod.CQP="Állandó QP (CQP)"
7
-RateControlMethod.CBR="Konstans bitsebesség (CBR)"
8
+RateControlMethod.CBR="Állandó bitsebesség (CBR)"
9
 RateControlMethod.VBR="Változó bitsebesség (Csúcsértéket betartva) (VBR)"
10
-RateControlMethod.VBRLAT="Változó bitsebesség (Késleltetés kényszerítése) (VBRLAT)"
11
+RateControlMethod.VBRLAT="Változó bitsebesség (Késleltetést betartatva) (VBRLAT)"
12
 PrePassMode="Előrelépéses mód"
13
 PrePassMode.Description="Pre-Pass javít a bitráta elosztáson a szekvencián belül (GOP), viszont a hatása kártyáról kártyára változik.\nBekapcsolásával a kódolási teljesítmény csökken körülbelül 10%-al, amely könnyen vezet túlterhelt kódoláshoz."
14
 PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (Negyed méret)"
15
 PrePassMode.Half="\@Utility.Switch.Enabled\@ (Fél méret)"
16
 PrePassMode.Full="\@Utility.Switch.Enabled\@ (Teljes méret)"
17
-Bitrate.Target="Célbitsebesség"
18
+Bitrate.Target="Cél bitsebesség"
19
 Bitrate.Target.Description="Bitsebesség, amelyet megkísérel elérni a szekvencia során."
20
 Bitrate.Peak="Csúcs bitsebesség"
21
 Bitrate.Peak.Description="Bitsebesség amelyet maximálisan elérhet a szekvencia során."
22
@@ -58,8 +59,8 @@
23
 QP.IFrame.Maximum.Description="I-Képkockában legnagyobb használható QP érték."
24
 QP.PFrame.Maximum="Maximális P-Képkocka QP"
25
 QP.PFrame.Maximum.Description="P-Képkockában legnagyobb használható QP érték."
26
-FillerData="Kitöltőadat"
27
-FillerData.Description="Betétadatok engedélyezése a kódolónak, hogy legalább a \@Bitrate.Target\@ megtartsa azáltal, hogy a fennmaradó üres helyeket a szekvenciában üres adatokkal feltölti."
28
+FillerData="Kitöltőadatok"
29
+FillerData.Description="A Kitöltőadatok engedélyezése a kódolónak, hogy legalább a \@Bitrate.Target\@et megtartsa azáltal, hogy a szekvenciában fennmaradó üres helyeket üres adatokkal tölti fel."
30
 FrameSkipping="Képkocka kihagyás"
31
 FrameSkipping.Description="A képkocka átugrás lehetővé teszi a kódoló számára a képkockák ejtését \@Bitrate.Target\@ követelmény elérése érdekében.\nHa a kódoló képkockát ejt, akkor az utolsó képkockát ismétli a folyamatban.\nSegíthet alacsony @Bitrate.Target\@ követelmények esetén."
32
 FrameSkipping.Period="Képkocka ugrási periódus"
33
@@ -71,6 +72,8 @@
34
 VBAQ.Description="Az 'Eltérés alapján adaptív kvantálás' (VBAQ) ami a pixelek eltérésén alapul és jobban osztja el a bitsebességet.\nIAzon az elven működik, hogy az emberi látási idegrendszer kevésbé érzékeny az erősen textúrázott területeken, így a sima felületek feldolgozására osztja a bitsebességet.\nEz bizonyos tartalmak esetén, erősen szubjektíven természetesen, minőségjavuláshoz vezethet."
35
 EnforceHRD="HRD kényszerítése"
36
 EnforceHRD.Description="A Hipotetikus referenciadekóder kényszerítése, amely segítségével ellenőrizhető, hogy a kimeneti bitfolyam helyes e."
37
+HighMotionQualityBoost="Gyors mozgások minőségének javítása"
38
+HighMotionQualityBoost.Description="Engedélyezi a gyors mozgások minőségének javítását."
39
 VBVBuffer="VBV puffer"
40
 VBVBuffer.Description="Melyik metódus kerüljön használatba a VBV Pufferméret meghatározásához:\n- '\@Utility.Automatic\@' segítségével a méretkalkulálás egy kényszerített pontossággal történik.\n- '\@Utility.Manual\@' lehetővé teszi a felhasználó általi méretvezérlését.\nVBV (Video Buffering Verifier) Puffert egyes Rátavezérlő Metódusok használják, hogy a bitrátát a megadott értéken belül tartsák."
41
 VBVBuffer.Strictness="VBV Puffer kötöttség"
42
@@ -137,8 +140,9 @@
43
 QueueSize="Várólista mérete"
44
 QueueSize.Description="Ennyi képkockát rendez sorba mielőtt megpróbálja a csomagokat kinyerni. A magasabb értékek több késést, míg az alacsonyabb értékek túlterhelt kódolást okozhatnak. Nem ajánlott módosítani az alapértelmezett értékről."
45
 View="Nézet mód"
46
-View.Basic="Alap"
47
-View.Advanced="Haladó"
48
+View.Description="Mely tulajdongások legyenek láthatóak?\n- Az „\@View.Basic\@” a legegyszerűbb nézet, ez a mindenki számára javasolt.\n- A „\@View.Advanced\@” több lehetőséget mutat, mint a több GPU támogatása, ez a haladó felhasználók számára javasolt.\n- A „\@View.Expert\@” nézet megjeleníti a veszélyes kapcsolókat, amelyek akár komoly problémákat is okozhatnak, ez tényleg csak annak való, aki tudja, hogy mit csinál.\n- A „\@View.Master\@” eltávolítja az összes megjelenítési korlátozást, és azokat a lehetőségeket is megjeleníti, melyek akár hardverhibát is okozhatnak.\n\nAz OBS és a beépülő modulok fejlesztői semmilyen olyan kárért nem felelősök, melyek az Ön tevékenységéből adódnak, ahogy azt a licencmegállapodás is írja. A „\@View.Master\@” nézet használatával automatikusan lemond minden támogatásról, amely a felmerült problémákat orvosolná."
49
+View.Basic="Alapvető"
50
+View.Advanced="Speciális"
51
 View.Expert="Szakértő"
52
 View.Master="Mester"
53
 Debug="Hibakeresés"
54
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/id-ID.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/id-ID.ini Changed
10
 
1
@@ -66,6 +66,8 @@
2
 VBAQ.Description="Aktifkan penggunaan 'Variance Based Adaptive Quantization' (VBAQ) yang didasarkan pada varian piksel untuk mendistribusikan bitrate dengan lebih baik. \n\n bekerja berdasarkan gagasan bahwa sistem visual manusia kurang sensitif terhadap artefak di area bertekstur tinggi dan dengan demikian akan mendorong bitrate menuju permukaan yang lebih halus. \nMengaktifkannya dapat meningkatkan kualitas subjektif pada konten tertentu."
3
 EnforceHRD="Tegakkan HRD"
4
 EnforceHRD.Description="Menegakkan penggunaan Hypothetical Reference Decoder yang digunakan untuk verifikasi bahwa bitstream output sudah benar."
5
+HighMotionQualityBoost="Peningkatan Kualitas Gerakan Tinggi"
6
+HighMotionQualityBoost.Description="Aktifkan Peningkatan Kualitas Gerakan Tinggi."
7
 VBVBuffer="VBVBuffer"
8
 VBVBuffer.Description="Metode apa yang harus digunakan untuk menentukan Ukuran Buffer VBV: \n- '\@ Utility.Automatic\@' menghitung ukuran menggunakan batasan keketatan. \n- '\@ Utility.Manual\@' memungkinkan pengguna untuk mengontrol size. \nVBV (Pemverifikasi Buffering Video) Buffer digunakan oleh Metode Kontrol Tingkat tertentu untuk menjaga bitrate keseluruhan dalam batasan yang diberikan."
9
 VBVBuffer.Strictness="Keketatan Buffer VBV"
10
obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/kmr-TR.ini Added
153
 
1
@@ -0,0 +1,151 @@
2
+Utility.Default="Berdest"
3
+Utility.Automatic="Bixweber"
4
+Utility.Manual="Bi destan"
5
+Utility.Switch.Disabled="Neçalak bike"
6
+Utility.Switch.Enabled="Çalakkirî"
7
+Preset="Pêşsazkarî"
8
+Preset.ResetToDefaults="Sazkariyên berdest vegerîne"
9
+Preset.Recording="Tê tomarkirin"
10
+Preset.HighQuality="Tomarkirina kalîteya bilind"
11
+Preset.Indistinguishable="Tomarkirina nediyar"
12
+Preset.Lossless="Tomarkirin nêzî wendabûnê ye"
13
+Preset.Twitch="Weşana Twitch"
14
+Preset.YouTube="Weşana YouTube"
15
+QualityPreset="Pêşsazkirina kalîteyê"
16
+QualityPreset.Description="Pêşsazkirina kalîteyê ya ku ji bo kodker tê bikaranîn, bandor li lez û kalîteyê dike.\n- '\@QualityPreset.Speed\@' xwediyê leza herî bilind e û kalîteya herî xerab e. \n- '\@QualityPreset.Quality\@' xwediyê kalîteya herî bilind û leza herî xirab e.\n\n- '\@QualityPreset.Balanced\@' tevliheviyeke hevseng e ji du heb.\n\nEv vebijêrk rêjejimar e û di dema kodkirinê de nayê guhertin."
17
+QualityPreset.Speed="Lez"
18
+QualityPreset.Balanced="Hevsengî"
19
+QualityPreset.Quality="Qalîte"
20
+Profile="Profîl"
21
+Profile.Description="Ev profîl ji bo kodkirinê tê bikaranîn, profîlên ku pirtir têne piştgirî kirin herî bilind in û profîlên kalîteya çêtirîn li jêr in.\nDi pir rewşan de, çêtirîn e ku tu vê vebijêrkê li nirxa xwe ya kesanekirî bihêliî.\n\nEv vebijêrk cîhgirtî ye û di dema kodkirinê de nayê guhertin."
22
+ProfileLevel="Asta profîlê"
23
+ProfileLevel.Description="Asta ku ji bo profîla ku ji bo destnîşankirina çareseriya herî zêde û çarçoveya ji bo şîfreyek kodkirî tê bikar anîn tê bikar anîn.\nWateya nirxên bilind alavên kêmtir piştgirî lê potansiyel çêtir qalîte, dema ku nirxên jêrîn wateya amûren bêtir piştgirî lê potansiyel kalîteyek xirabtir heye.\nEw çêtirîn e da ku viya li nirxa xwerû ya '\@Kêrhatî.Xweber\@' bihêle ku dê asta herî jêrîn hilbijêre ku dikare çareseriyê piştgirî bike û ji bo lihevhatina herî zêde çarçoveyê bike.\n\nEv vebijêrk statîk e û di dema kodkirinê de nayê guhertin."
24
+Tier="Bendik"
25
+Tier.Description="Asta kodkirina bi.\n- 'Bilind' ji bo naveroka bitrate ya bilind wekî tomara bêzirar tê bikaranîn.\n- 'Sereke' ji bo tomarkirina medya an jî tomarkirina asayî tê bikaranîn.\n\nEv vebijêrk statîkî ye û di dema kodkirinê de nayê guhertin."
26
+AspectRatio="Rêjeya alî"
27
+AspectRatio.Description="Kîjan rêjeya alî divê di pelê encam de were nivîsandin."
28
+CodingType="Cureya kodkirinê"
29
+CodingType.Description="Cureyê kodkirinê ji bo bikaranînê dema kodkirina pakêta dawîn.\n- '\@Utility.Automatic\@' bixweber curekodkirina çêtirîn (tê pêşniyar kirin). \n- 'CALVC' (Kodkirina Guherbar-Dirêjahî ya Têkotîk- Adaptîv) hinekî zûtir e, lê encamên mezin bi mezinahiya naveroka kodkirî.\n- 'CABAC' (Bi adaptasyona girêdanê re enkodasyona arîtmetîk a dualî) hinekî hêdî ye, lê encam bi mezinahiya naveroka kodkirî ya biçûk tir dibe.\n\nEv vebijêrk statîk e û di dema kodkirinê de nayê guhertin."
30
+MaximumReferenceFrames="Çarçoveyên referansê yên herî zêde"
31
+MaximumReferenceFrames.Description="Hejmara herî zêde ya çarçoveyên referansê ji bo bikaranîna di naveroka kodkirî de. Rasterast bandor li kalîteya ji bo koddêrê ku vê piştgirî dikin bandor dike.\n\nEv vebijêrk statîk e û di dema kodkirin de nayê guhertin."
32
+RateControlMethod="Metoda kontrolkirina lezê"
33
+RateControlMethod.Description="Ji bo kontrolkirina rêjeya (bit)rate?\n- '\@RateControlMethod.CQP\@' ji bo her çarçoveyekê kîjan metod tê bikaranîn û ji bo kalîteya bilind tê pêşniyarkirin ku nêzî tomara bê windayî bibe.\n- '\@RateControlMethod.CBR\@' hewl dide ku herî zêde nêzî \@Bitrate.Target\@, bi awayekî tercîhkirî wê bi \@FillerData\@, tije bike. ve streaming.\n- '\@RateControlMethod.VBR\@' hewldanên ji bo nêzîkbûna herî zêde ya \@Bitrate.Peak\@ ve eger mimkun bi qasî \@Bitrate.Target\@, diçe, û ji bo tomarkirina biçûk tê pêşniyar kirin.\n- '\@RateControlMethod.VBRLAT\@' wek '\@RateControlMethod.VBR\@' ye."
34
+RateControlMethod.CQP="Domdar QP (CAP)"
35
+RateControlMethod.CBR="Rêjeya bit a domdar (CBR)"
36
+RateControlMethod.VBR="Rêjeya bit ya guherîn (pez qedexe ye) (VBR)"
37
+RateControlMethod.VBRLAT="Rêjeya bit a guherîner (Derengmayîn bi sînor) (VBR LAT)"
38
+PrePassMode="Moda pêş-derbasbûnê"
39
+PrePassMode.Description="Pêş-derbasbûnê di çarçoveya (GOP) de belavkirina bitrate baştir dike, lê belê bandorên vê yekê ji kartê heta kartê cuda dibe.\nBikêmkirina vê performansa bi qasî %10 kêm dike, ku dibe sedema zêde barkirinê."
40
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (Mezinahiya çaryekê)"
41
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (Nîv mezinahî)"
42
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (Tam mezinahî)"
43
+Bitrate.Target="Rêjeya bit ya hedef"
44
+Bitrate.Target.Description="Rejêya bît ku hewl bide ku di rêza giştî de bi dest bixe."
45
+Bitrate.Peak="Leza bît herî zêde"
46
+Bitrate.Peak.Description="Leza bît ku hewl bide ku di rêza giştî de herî zêde bibe lûtkeyê."
47
+QP.IFrame="I-Çarçove QP"
48
+QP.IFrame.Description="Nirxa QP sax kir ku ji bo I-Çarçove bikar bîne."
49
+QP.PFrame="P-Çarçove QP"
50
+QP.PFrame.Description="Nirxa QP sax kir ku ji bo P-Çarçove bikar bîne."
51
+QP.BFrame="B-Çarçove QP"
52
+QP.BFrame.Description="Nirxa QP sax kir ku ji bo B-Çarçove bikar bîne."
53
+QP.Minimum="QP ya herî kêm"
54
+QP.Minimum.Description="Nirxa QP ya herî kêm ji bo bikaranîna di çarçoveyekê de."
55
+QP.IFrame.Minimum="I-Çarçove QP ya herî kêm"
56
+QP.IFrame.Minimum.Description="Nirxa QP ya herî kêm ku di I-Çarçove de bikar bînin."
57
+QP.PFrame.Minimum="Herî kêm P-Çarçove ya QP"
58
+QP.PFrame.Minimum.Description="Nirxa QP ya herî kêm ku di P-Çarçovê de bikar bînin."
59
+QP.Maximum="QP ya herî zêde"
60
+QP.Maximum.Description="Nirxa QP ya herî bilind ji bo bikaranîna di tarikê de."
61
+QP.IFrame.Maximum="QP-ya herî zêde I-Çarçove"
62
+QP.IFrame.Maximum.Description="Nirxa herî bilind a QP-ê ku di I-Çarçove de bikar tîne."
63
+QP.PFrame.Maximum="P-Çarxove herî zêde QP"
64
+QP.PFrame.Maximum.Description="Nirxa QP ya herî mezin ku di P-Çarçovê de were bikar anîn."
65
+FillerData="Daneyê dagire"
66
+FillerData.Description="Bikaranîna eaneyên dagirî dihêle ku koddêrê bi kêmanî \@Bitrate.Target\@ bimîne bi dagirtina cîhê mayî bi agahdariya vala."
67
+FrameSkipping="Di çarçoveyê de beliqandin"
68
+FrameSkipping.Description="Dema ku pêdawîstên \@Bitrate.Target\@ pêk bîne, di çarçoveyekê de têxe nav peldankê. \nDema ku koddêr di şûna wê de çarçoveyeke dubare-paşîn a NAL têxe nav çem.\nDikare bi pir kêm re bibe alîkar \@Bitrate.Target\@ bike."
69
+FrameSkipping.Period="Dema hilavêtinê ya çarçoveyê"
70
+FrameSkipping.Period.Description="Navbera (di çarçoveyan de) di navbera çarçoveyên hatine qefilandin. Ev dikare ji bo sîmûlasyona kêmtir ji OBS-ê tê tesbît kirin ku hê jî di nav çemekî rast de ye."
71
+FrameSkipping.Behaviour="Tevgerê hilavêtinê ya çarçovê"
72
+FrameSkipping.Behaviour.Description="Pênase bike ka hilkişan di çarçoveyê de çawa dibe."
73
+FrameSkipping.SkipNth="Tenê di her çarçoveya Nth de biserkeve"
74
+FrameSkipping.KeepNth="Tenê her çarçoveyek Nth bihewîne"
75
+VBAQ.Description="Bikaranîna 'Pîvana adapteyî ya bingeha varyant' (VBAQ) ku li ser bingeha guhertoya pixel ê ji bo belavkirina leza bît çêtir e, bi kar bîne.\nLi ser fikra ku pergala dîtbar a mirovan li ser deverên pir tekstîr kêm hesas e dixebite û bi vî rengî wê bitrate ber bi rûkên nermtir ve bibe.\nBikêmkirina vê yekê dibe sedema pêşveçûnên di kalîteya subjektîf de bi hin naverok."
76
+EnforceHRD="HRD bicîh bînin"
77
+EnforceHRD.Description="Bikaranîna Kodkirina Çavkaniya Hîpotetik ku tê bikar anîn da ku rast bike ka tewra derketinê rast e, bicîh bînin."
78
+HighMotionQualityBoost="Bilindbûna kalîteya tevgerê"
79
+HighMotionQualityBoost.Description="Zêdekirina kalîteya tevgerê ya bilind çalak dike.."
80
+VBVBuffer="VBV tampon"
81
+VBVBuffer.Description="Ji bo diyarkirina mezinahiya VBV Mezinahiya Tampon:\n- '\@Utility.Automatic\@' mezinahiya bi bikaranîna sînorê hişkiyê tê hesabkirin.\n- '\@Utility.Manual\@' dihêle ku bikarhêner mezinahiyê kontrol bike.\nVBV (Vîdyoyek tamponkirina vîdyoyê) Tampon ji hêla hin Metodên Kontrolkirina Rêjeya Rêjeyan ve tê bikaranîn da ku rêjeya giştî di nav sînorên hatine dayîn de bihêle."
82
+VBVBuffer.Strictness="Rastbûna tampon a VBV"
83
+VBVBuffer.Strictness.Description="Tampona VBV'yê ya hişkbûnê diyar dike, ku %100 bi qasî vê tundiyê ye û %0 jî bêsînor e."
84
+VBVBuffer.Size="Mezinahiya tampon a VBV"
85
+VBVBuffer.Size.Description="Mezinahiya tampon a VBV ku ji bo kontrola leza bît di rêzeyekê de tê bikaranîn."
86
+VBVBuffer.InitialFullness="VBV tampona têrbûna destpêk"
87
+VBVBuffer.InitialFullness.Description="Di destpêkê de tampona VBV çiqas tijî ye (di %), tenê li ser rêza destpêkê ya kodkirinê bandor bike."
88
+Interval.Keyframe="Navberê çarçove"
89
+Interval.Keyframe.Description="Navbera (bi çirke) di navbera çarçove de."
90
+Period.IDR.H264="Serdema IDR (di çarçoweyan de)"
91
+Period.IDR.H264.Description="Cudahiya di navbera nûkirinên Kodkirina (IDR) yên di cih de pênase dike."
92
+Period.IDR.H265="Serdema IDR (di GOP'yan de)"
93
+Period.IDR.H265.Description="Di GOP-ê de cudahiya di navbera nûbûna kodkirina (IDR) de diyar dike."
94
+Interval.IFrame="Navbera I-Çarçove"
95
+Interval.IFrame.Description="Navbera (di çirkeyan de) di navbera I-Çarçove de. I-Çarçove, P-Çarçove, û B-Çarçove ji holê radike."
96
+Period.IFrame="Serdema I-Çarçove (di çarçoveyan de)"
97
+Period.IFrame.Description="Mesafe (di çarçovê de) di navbera I-Çarçove de. I-Çarçove, P-Çarçove and B-Çarçove ji holê radike."
98
+Interval.PFrame="Navbera P-Çarçove"
99
+Interval.PFrame.Description="Navbera (bi çirke) di navbera P-Çarçove. P-Çarçove, B-Çarçove ji holê radike."
100
+Period.PFrame="Serdema P-Çarçove (di çarçoveyan de)"
101
+Period.PFrame.Description="Dûrahî (di Çarçove de) di navbera P-Çarçovêyan de. P-Çarçove B-Çarçove derbas dikin."
102
+Interval.BFrame="Navbera B-Çarçove"
103
+Interval.BFrame.Description="Navbera (bi çirke) di navbera B-Çarçove de"
104
+Period.BFrame="Serdema B-çarçoveya (Di çarçoveyan de)"
105
+Period.BFrame.Description="Mesafe (di çarçoveyê de) di navbera B-Çarçove de."
106
+GOP.Type="Cureya GOP"
107
+GOP.Type.Description="Kîjan cure GOP divê were bikaranîn: \n- '\@GOP. Type.Fixed\@' dê her dem di navbera her GOP de mesafeyên domdar bikar bîne.\n- '\@GOP. Type.Variable\@' destûrê dide GOP'ên mezinahiyên cûrbecûr, li gorî tiştê.\n'\@GOP. Type.Fixed\@' ev e ku pêkanîna H264 çawa dixebite û çêtirîn ji bo torê herêmî, dema '\@GOP. Type.Variable\@' ji bo tomarên kalîteya bilind a mezin tirîn e."
108
+GOP.Type.Fixed="Domdar"
109
+GOP.Type.Variable="Têgûherr"
110
+GOP.Size="Mezinahiya GOP"
111
+GOP.Size.Description="Mezinahiya GOP (Koma wêneyan) Di Çarçove de."
112
+GOP.Size.Minimum="Mezinahiya herî kêm GOP"
113
+GOP.Size.Minimum.Description="Mezinahiya herî kêm a GOP (Koma wêneyan) di çarçoveyan de"
114
+GOP.Size.Maximum="Herî zêde mezinahiya GOP"
115
+GOP.Size.Maximum.Description="Di çarçoveyan de mezinahiya herî mezin a GOP (Koma wêneyan)"
116
+GOP.Alignment="GOP bicîbûn"
117
+GOP.Alignment.Description="Ezmûnî, bandorên Nenas in. Li ser xetereya xwe bikar bînin."
118
+BFrame.Pattern="Nîgarê B-Çarçoveya"
119
+BFrame.Pattern.Description="Ji bo bikaranîna B-Çarçoveya dema ku tê bikaranîn.\nJi hêla kartên VCE yên 2. û 3. nifşê VCE ve tê tesdîq kirin. Bandora neyînî ya li ser performansa negatîf."
120
+BFrame.DeltaQP="B-Çarçove Delta QP"
121
+BFrame.DeltaQP.Description="Nirxa Delta QP heya I- an P-Çarçoveya paşîn ji bo B-Çarçoveyên ku nayên referanskirin."
122
+BFrame.Reference="Referansa B-Çarçove"
123
+BFrame.Reference.Description="Destûr bidin ku B-Çarçove di şûna tenê P- û I-Çarçove de, B-Çarçoveyan wekî referans bikar bîne."
124
+BFrame.ReferenceDeltaQP="Delta QP ya referansa B-Çarçove"
125
+BFrame.ReferenceDeltaQP.Description="Nirxa Delta QP heya I- an P-Çarçoveya paşîn ji bo B-Çarçove referans."
126
+DeblockingFilter="Astengkirina fîltreyê"
127
+DeblockingFilter.Description="Bihêle ku dekoder fîltreya astengkirinê bicîh bike."
128
+MotionEstimation="Texmîna tevgerê"
129
+MotionEstimation.Description="Texmîna Tevgerê dihêle ku koddêrê bi texmîna ku pixel çûne, leza bît hewceyê kêm bike."
130
+MotionEstimation.Quarter="Çaryek-Pîksel"
131
+MotionEstimation.Half="Nîv-Pîksel"
132
+MotionEstimation.Full="Çaryek- & Nîv-Pîksel"
133
+Video.API="API ya Vîdyoyê"
134
+Video.API.Description="Divê paşde çi API bi kar bîne?"
135
+Video.Adapter="Adapterê vîdyoyê"
136
+Video.Adapter.Description="Adapter divê em hewl bidin ku li ser çi kod bikin?"
137
+OpenCL.Transfer="Veguheztina OpenCL"
138
+OpenCL.Transfer.Description="Çarçoveyê ji dêvla bîrê veguheztin GPU'yê û OpenCL bi kar bîne. Veguhestina bi rêya OpenCL, dema GPU tê bikaranîn, ji veguhestina bi rêya bîra makkirî kêmtir sporadîk e."
139
+OpenCL.Conversion="Guhertina OpenCL"
140
+OpenCL.Conversion.Description="Di şûna DirectCompute de OpenCL-ê bi karanîna OpenCL-ê çarçoveyê veguherînin."
141
+MultiThreading="Têpandina pir-demî"
142
+MultiThreading.Description="Ji bo karanîna çarçoveyan û derxistina pakêtan, ji yekê zêdetir deman bi kar bîne. Ev dikare li ser CPUyan hêdî bibe lê dê çavkaniyên pergalê bi tevahî bikar bîne. Ew ê bandora neyînî li ser performansa bileztir li SER CPUyan bike."
143
+QueueSize="Mezinahiya rêza"
144
+QueueSize.Description="Berî ku tu pakêtan bidest bixwî, vê gelek çarçoveyan ji bo koddêrê rêz bike. Nirxek bilindtir dibe ku nirxek kêmtir dibe ku dibe sedema zêdekirina zêde ya derengbûnê. Ji bo guhertina vê yekê ji ya pêşdarazî nayê pêşniyarkirin."
145
+View="Moda Dîtinê"
146
+View.Description="Kîjan taybetmendî divê xuya bibin?\n- '\@View.Basic\@' dîtina herî bingehîn e û ji bo her kesî tê pêşniyarkirin.\n- '\@View.Advanced\@' bêtir vebijarkên mîna piştgiriya pir-GPU nîşan dide û ji bo bikarhênerên pêşketî tê pêşniyarkirin.\n- '\@View.Expert\@' vebijarkên xeternak nîşan dide ku dibe sedema wê pirsgirêkên cidî û tenê heke hûn bi rastî dizanin ka hûn çi dikin.\n- '\@View.Master\@' hemû sînordariyên dîtinê radike û hemû vebijarkan nîşan dide tevî yên ku dikarin bibin sedema kêmasiyên hardware.\n\nOBS û pêvekên pêvek ji ber tu zirarên ku ji ber kiryarên we, li gorî peymana lîsansê ne berpirsyar in. Bikaranîna '\@View.Master\@' we ji her cûre piştgiriyê ji bo her pirsgirêkên ku dibe ku derkeve holê, ji we dûr dike."
147
+View.Basic="Bingehîn"
148
+View.Advanced="Pêşketî"
149
+View.Expert="Pispor"
150
+View.Master="Serpale"
151
+Debug="Rastekirin"
152
+Debug.Description="Rastekirina peyaman çalak bike da ku têkevê pelê OBS de.\nEv pêdivî dike ku tu dest bi OBS Studio bikî bi '--verbose -- unfiltered_log' (rakirin ') li ser rêza fermanê.\nHişyarî: Ev ê bibe sedema ku performansa giştî ya OBS kêmtir bibe ji ber hejmara peyamên rastkirinê yên ku ev diafirîne, tenê gava ji te tê xwestin bi kar bîne an gava ku tu dixwazî pirsgirêkekê bi kodkirinê fêr bibe."
153
obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/nn-NO.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+Utility.Default="Standard"
3
+Utility.Automatic="Automatisk"
4
+QualityPreset.Speed="Fart"
5
+QualityPreset.Balanced="Balansert"
6
+QualityPreset.Quality="Kvalitet"
7
+Profile="Profil"
8
obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Perfil"
3
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/ro-RO.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/ro-RO.ini Changed
16
 
1
@@ -74,13 +74,10 @@
2
 EnforceHRD.Description="Impune utilizarea unui Decoder de referință Hypotetic, care este utilizat pentru a verifica dacă fluxul de ieșire este corect."
3
 HighMotionQualityBoost="Creștere calitate mișcare înaltă"
4
 HighMotionQualityBoost.Description="Activează Accelerarea Calității Înaltă Mișcare."
5
-VBVBuffer="Tampon VBV"
6
-VBVBuffer.Description="Ce metodă ar trebui utilizată pentru a determina dimensiunea VBV Buffer:\n- '\@Utility.Automatic\@' calculează dimensiunea folosind o constrângere de strictitudine.\n- '\@Utility. anual\@' permite utilizatorului să controleze dimensiunea.\nVBV (Video Buffering Verifier) Tampon este folosit de anumite metode de control al ratei pentru a menține rata totală de biți în limitele date."
7
-VBVBuffer.Strictness="Tampon VBV Strictitate"
8
+VBVBuffer="Buffer VBV"
9
 VBVBuffer.Strictness.Description="Determină stricteţea Bufferului VBV, 100% fiind cât mai strict posibil şi 0% nerestricţionat."
10
 VBVBuffer.Size="Dimensiunea bufferului VBV"
11
 VBVBuffer.Size.Description="Dimensiunea Buffer-ului VBV care este utilizat pentru controlul Bitrate într-o secvență."
12
-VBVBuffer.InitialFullness="Fulnerabilitate iniţială VBV Tampon"
13
 VBVBuffer.InitialFullness.Description="Cât de complet este iniţial VBV Buffer (în %), va afecta doar secvenţa iniţială de codificare."
14
 Interval.Keyframe="Interval de cadre cheie"
15
 Interval.Keyframe.Description="Interval (în secunde) între cadrele cheie."
16
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/sk-SK.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/sk-SK.ini Changed
7
 
1
@@ -143,4 +143,4 @@
2
 View.Advanced="Pokročilý"
3
 View.Master="Majster"
4
 Debug="Ladenie"
5
-Debug.Description="Povoliť prídavným ladiacim správam ukladanie do výpisového súboru OBS.\nToto vyžaduje, že spustíte OBS Studio s '--verbose --unfiltered_log' (odstráňte ') na príkazovom riadku.\nUpozornenie: Toto spôsobí nižšiu výkonnosť OBS z dôvodu množstva ladiacich správ, ktoré toto vytvorí, používajte to, len ak vám je prikázané toto vykonať alebo ak chcete nájsť problém v enkódovaní."
6
+Debug.Description="Povoliť prídavným ladiacim správam ukladanie do log súboru OBS.\nToto vyžaduje, že spustíte OBS Studio s '--verbose --unfiltered_log' (odstráňte ') v príkazovom riadku.\nUpozornenie: Toto spôsobí nižšiu výkonnosť OBS z dôvodu množstva ladiacich správ, ktoré toto vytvorí, používajte to, len ak vám je prikázané toto vykonať alebo ak chcete nájsť problém v enkódovaní."
7
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/sl-SI.ini Changed
10
 
1
@@ -74,6 +74,8 @@
2
 VBAQ.Description="Uporabi 'Adaptivno kvantizacijo temelječo na varianci' (VBAQ), ki temelji na varianci pikslov za boljše razporejanje bitne hitrosti.\nDeluje na podlagi manjše občutljivosti človeškega vidna za artefakte v področjih z veliko artefaktov, zato bitno hitrost povečuje za bolj mehke površine.\nUporaba lahko daje boljše rezultate pri subjektivnem dojemanju kakovosti določene vrste vsebin."
3
 EnforceHRD="Vsiljeni HRD"
4
 EnforceHRD.Description="Vsili uporabo dekoderja hipotetične reference, ki bo uporabljen za preverjanje pravilnosti izhodnega podatkovnega toka."
5
+HighMotionQualityBoost="Zelo povečana kakovost gibanja"
6
+HighMotionQualityBoost.Description="Vklopi zelo povečano kakovost gibanja"
7
 VBVBuffer="VBV medpomnilnik"
8
 VBVBuffer.Description="Katera metoda naj bo uporabljena za določitev velikosti VBV medpomnilnika:\n '\@Utility.Automatic\@' izračuna velikost z uporabo natančne omejitve.\n- '\@Utility.Manual\@' omogoča uporabniku nadzor nad velikostjo.\nVBV (Video Buffering Verifier) medpomnilnik uporabljajo določene metode nadzora bitne hitrosti, da obdržijo povprečno bitno hitrost znotraj danih okvirjev."
9
 VBVBuffer.Strictness="Natančnost VBV medpomnilnika"
10
obs-studio-27.0.1.tar.xz/plugins/enc-amf/resources/locale/zh-TW.ini -> obs-studio-27.1.3.tar.xz/plugins/enc-amf/resources/locale/zh-TW.ini Changed
10
 
1
@@ -28,7 +28,7 @@
2
 MaximumReferenceFrames="最大參考訊框"
3
 MaximumReferenceFrames.Description="輸出檔案的最大參考訊框。這對資源這個功能的編碼器的畫質有絕對的影響。\n\n這個選項是靜態的,且不能在編碼時變更。"
4
 RateControlMethod="速率控制方法"
5
-RateControlMethod.Description="應使用何種方法以控制(位元)速率?\n- 「\@RateControlMethod.CQP\@」為每個訊框分配固定量化參數,建議用於高品質至接近無損的錄製。\n-「\@RateControlMethod.CBR\@」嘗試盡可能地接近 \@Bitrate.Target\@,可以選擇用 \@FillerData\@ 填充,建議用於串流。\n- 「\@RateControlMethod.VBR\@」嘗試盡可能地接近 \@Bitrate.Peak\@,若可能,則盡可能地降低至 \@Bitrate.Target\@,建議用於小尺寸錄製。\n- 「\@RateControlMethod.VBRLAT\@」與「@RateControlMethod.VBR\@」類似,但將編碼延遲列入考量。"
6
+RateControlMethod.Description="應使用何種方法以控制(位元)速率?\n- 「\@RateControlMethod.CQP\@」為每個訊框分配固定量化參數,建議用於高品質至接近無損的錄製。\n-「\@RateControlMethod.CBR\@」嘗試盡可能地接近 \@Bitrate.Target\@,可以選擇用 \@FillerData\@ 填充,建議用於串流。\n- 「\@RateControlMethod.VBR\@」嘗試盡可能地接近 \@Bitrate.Peak\@,若可能,則盡可能地降低至 \@Bitrate.Target\@,建議用於小尺寸錄製。\n- 「\@RateControlMethod.VBRLAT\@」與「\@RateControlMethod.VBR\@」類似,但將編碼延遲列入考量。"
7
 RateControlMethod.CQP="恒定 QP (CQP)"
8
 RateControlMethod.CBR="固定位元率 (CBR)"
9
 RateControlMethod.VBR="可變位元率 (限制最大位元率) (VBR)"
10
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/el-GR.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/el-GR.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 ImageInput="Εικόνα"
3
 File="Αρχείο εικόνας"
4
 UnloadWhenNotShowing="Ξεφόρτωση εικόνας όταν δεν εμφανίζεται"
5
+LinearAlpha="Εφαρμογή άλφα σε γραμμικό χώρο"
6
 SlideShow="Παρουσίαση Εικόνων"
7
 SlideShow.TransitionSpeed="Ταχύτητα μετάβασης (χιλιοστά δευτερολέπτου)"
8
 SlideShow.SlideTime="Χρόνος μεταξύ των διαφανειών (χιλιοστά δευτερολέπτου)"
9
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/gd-GB.ini Changed
36
 
1
@@ -1,22 +1,34 @@
2
 ImageInput="Dealbh"
3
 File="Faidhle deilbh"
4
 UnloadWhenNotShowing="Dì-luchdaich an dealbh mur eil e ’ga shealltainn"
5
+LinearAlpha="Cuir alpha an sàs san spàs loidhneach"
6
 SlideShow="Taisbeanadh shleamhnagan dhealbhan"
7
 SlideShow.TransitionSpeed="Luaths an tar-mhùthaidh (mille-dhiog)"
8
 SlideShow.SlideTime="An ùine eadar na sleamhnagan (mille-dhiog)"
9
 SlideShow.Files="Faidhlichean deilbh"
10
 SlideShow.CustomSize="Meud an iadhaidh/Co-mheas deilbh"
11
 SlideShow.CustomSize.Auto="Fèin-obrachail"
12
+SlideShow.Randomize="Cluich air thuaiream"
13
 SlideShow.Loop="Lùb"
14
 SlideShow.Transition="Tar-mhùthadh"
15
 SlideShow.Transition.Cut="Geàrr às"
16
 SlideShow.Transition.Fade="Crìon"
17
 SlideShow.Transition.Swipe="Grad-shlaighd"
18
 SlideShow.Transition.Slide="Sleamhnaich"
19
+SlideShow.PlaybackBehavior="Giùlan na faicsinneachd"
20
+SlideShow.PlaybackBehavior.StopRestart="Cuir stad air mura faicear e, tòisich a-rithist nuair a faicear e"
21
+SlideShow.PlaybackBehavior.PauseUnpause="Cuir ’na stad mura faicear e, lean air adhart nuair a faicear e"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="Cluich an-còmhnaidh fiù ’s mura faicear e"
23
+SlideShow.SlideMode="Modh nan sleamhnachan"
24
 SlideShow.SlideMode.Auto="Fèin-obrachail"
25
+SlideShow.SlideMode.Manual="A làimh (Cleachd grad-iuchraichean a stiùireadh an taisbeanaidh-shleamhnagan)"
26
 SlideShow.PlayPause="Cluich/Cuir ’na stad"
27
 SlideShow.Restart="Ath-thòisich"
28
 SlideShow.Stop="Cuir stad air"
29
+SlideShow.NextSlide="An ath-shleamhnag"
30
+SlideShow.PreviousSlide="An t-sleamhnag roimhpe"
31
+SlideShow.HideWhenDone="Cuir am falach nuair a bhios an taisbeanadh-shleamhnagan deiseil"
32
+ColorSource="Tùs dhathan"
33
 ColorSource.Color="Dath"
34
 ColorSource.Width="Leud"
35
 ColorSource.Height="Àirde"
36
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/he-IL.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 ImageInput="תמונה"
3
 File="קובץ תמונה"
4
 UnloadWhenNotShowing="הסר טעינת תמונה כאשר לא נראה"
5
+LinearAlpha="החל שקיפות במרחב לינארי"
6
 SlideShow="מצגת תמונות"
7
 SlideShow.TransitionSpeed="מהירות מעבר (אלפיות שניה)"
8
 SlideShow.SlideTime="זמן בין שקופיות (אלפיות שניה)"
9
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/hi-IN.ini Changed
36
 
1
@@ -1,2 +1,34 @@
2
 ImageInput="छवि"
3
+File="इमेज फ़ाइल"
4
+UnloadWhenNotShowing="प्रदर्शित न होने पर इमेज अनलोड करें"
5
 LinearAlpha="लीनियर स्पेस में अल्फा लागू करें"
6
+SlideShow="इमेज स्लाइड दिखाएं"
7
+SlideShow.TransitionSpeed="संक्रांति गति (मिलीसेकेंड)"
8
+SlideShow.SlideTime="स्लाइड के बीच का समय (मिलीसेकंड)"
9
+SlideShow.Files="इमेज फ़ाइलें"
10
+SlideShow.CustomSize="परिसीमन आकार/आकार अनुपात"
11
+SlideShow.CustomSize.Auto="स्वचालित"
12
+SlideShow.Randomize="प्लेबैक यादृच्छिक करें"
13
+SlideShow.Loop="लूप"
14
+SlideShow.Transition="संक्रांति"
15
+SlideShow.Transition.Cut="काटें"
16
+SlideShow.Transition.Fade="धुंधला करें"
17
+SlideShow.Transition.Swipe="स्वाइप करें"
18
+SlideShow.Transition.Slide="खिसकाएं"
19
+SlideShow.PlaybackBehavior="प्रदर्शन व्यवहार"
20
+SlideShow.PlaybackBehavior.StopRestart="दिखाई न देने पर रोकें, दिखाई देने पर पुनः प्रारंभ करें"
21
+SlideShow.PlaybackBehavior.PauseUnpause="दिखाई न देने पर ठहरें, दिखाई देने पर पुनः चलाएं"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="दिखाई न देने पर भी हमेशा चलाएं"
23
+SlideShow.SlideMode="स्लाइड मोड"
24
+SlideShow.SlideMode.Auto="स्वचालित"
25
+SlideShow.SlideMode.Manual="हस्तचालित (स्लाइड शो को नियंत्रित करने के लिए सक्रिय कुँजी का उपयोग करें)"
26
+SlideShow.PlayPause="चलाएं/ठहरें"
27
+SlideShow.Restart="पुनः आरंभ करें"
28
+SlideShow.Stop="रोकें"
29
+SlideShow.NextSlide="अगली स्लाइड"
30
+SlideShow.PreviousSlide="पिछली स्लाइड"
31
+SlideShow.HideWhenDone="स्लाइड शो हो जाने पर छुपाएं"
32
+ColorSource="रंग स्रोत"
33
+ColorSource.Color="रंग"
34
+ColorSource.Width="चौड़ाई"
35
+ColorSource.Height="ऊँचाई"
36
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/hr-HR.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/hr-HR.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 ImageInput="Slika"
3
 File="Datoteka slike"
4
 UnloadWhenNotShowing="Ukloni sliku iz memorije kada se ne prikazuje"
5
+LinearAlpha="Primijeni alfa kanal u linearnom prostoru"
6
 SlideShow="Slideshow"
7
 SlideShow.TransitionSpeed="Brzina tranzicije (u milisekundama)"
8
 SlideShow.SlideTime="Vrijeme između slajdova (u milisekundama)"
9
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/id-ID.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/id-ID.ini Changed
17
 
1
@@ -1,13 +1,14 @@
2
 ImageInput="Gambar"
3
 File="Berkas Gambar"
4
 UnloadWhenNotShowing="Lepas muatkan gambar ketika tidak ditampilkan"
5
+LinearAlpha="Terapkan alfa dalam ruang linier"
6
 SlideShow="Slide Show Gambar"
7
 SlideShow.TransitionSpeed="Kecepatan Transisi (mili detik)"
8
 SlideShow.SlideTime="Durasi Antar Slide (mili detik)"
9
 SlideShow.Files="Berkas Gambar"
10
 SlideShow.CustomSize="Ukuran Pembatas/Rasio Aspek"
11
 SlideShow.CustomSize.Auto="Otomatis"
12
-SlideShow.Randomize="Acakan Pemutaran"
13
+SlideShow.Randomize="Mengacak Pemutaran"
14
 SlideShow.Loop="Ulangi"
15
 SlideShow.Transition="Transisi"
16
 SlideShow.Transition.Cut="Potong"
17
obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/kmr-TR.ini Added
36
 
1
@@ -0,0 +1,34 @@
2
+ImageInput="Wêne"
3
+File="Pelê wêneyê"
4
+UnloadWhenNotShowing="Gava ku nayê xuyangkirin wêneyê bar neke"
5
+LinearAlpha="Di valahiya xêzikî ya alfa de bisepîne"
6
+SlideShow="Nîşandana wêneyan şemitok"
7
+SlideShow.TransitionSpeed="Leza derbasbûnê (mili çirke)"
8
+SlideShow.SlideTime="Dema navbera şemitokan (mili çirke)"
9
+SlideShow.Files="Pelên wêneyê"
10
+SlideShow.CustomSize="Mezinahiya çarçoveyê/rêjeya ferehî-bilindî"
11
+SlideShow.CustomSize.Auto="Bixweber"
12
+SlideShow.Randomize="Lêdaneke rasthatî"
13
+SlideShow.Loop="Bêdawî"
14
+SlideShow.Transition="Derbasbûn"
15
+SlideShow.Transition.Cut="Birrîn"
16
+SlideShow.Transition.Fade="Wendabûn"
17
+SlideShow.Transition.Swipe="Kişandin"
18
+SlideShow.Transition.Slide="Şemitandin"
19
+SlideShow.PlaybackBehavior="Tevgera xuyangbûnê"
20
+SlideShow.PlaybackBehavior.StopRestart="Gava ku neyê xuyangkirin rawestîne, gava ku xuya bibe ji nû ve dest pê bike"
21
+SlideShow.PlaybackBehavior.PauseUnpause="Gava ku neyê xuyangkirin rawestîne, gava ku xuyang be jî ranewestîne"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="Her dem gava ku neyê xuyangkirin jî lê de"
23
+SlideShow.SlideMode="Moda şemitok"
24
+SlideShow.SlideMode.Auto="Bixweber"
25
+SlideShow.SlideMode.Manual="Manûel (Ji bo kontrolkirina pêşandana slaytê bişkojka kurterê bi kar bîne)"
26
+SlideShow.PlayPause="Lê de/Rawestîne"
27
+SlideShow.Restart="Ji nû ve destpêkirin"
28
+SlideShow.Stop="Bi dawîkirin"
29
+SlideShow.NextSlide="Şemitoka pêş"
30
+SlideShow.PreviousSlide="Şemitoka paş"
31
+SlideShow.HideWhenDone="Gava pêşandana şemitokan diqede veşêre"
32
+ColorSource="Çavkaniya rengê"
33
+ColorSource.Color="Reng"
34
+ColorSource.Width="Firehî"
35
+ColorSource.Height="Bilindî"
36
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/nb-NO.ini Changed
18
 
1
@@ -1,13 +1,14 @@
2
 ImageInput="Bilde"
3
 File="Bildefil"
4
 UnloadWhenNotShowing="Avlast bilde når det ikke vises"
5
-SlideShow="Lysbildefremvisning"
6
+LinearAlpha="Bruk lineær gjennomsiktighet (alpha)"
7
+SlideShow="Lysbildeframvisning"
8
 SlideShow.TransitionSpeed="Overgangshastighet (millisekunder)"
9
 SlideShow.SlideTime="Tid mellom lysbilder (millisekunder)"
10
 SlideShow.Files="Bildefiler"
11
 SlideShow.CustomSize="Markeringsboks/størrelsesforhold"
12
 SlideShow.CustomSize.Auto="Automatisk"
13
-SlideShow.Randomize="Tilfeldig avspilling"
14
+SlideShow.Randomize="Tilfeldiggjør avspelling"
15
 SlideShow.Loop="Repeter"
16
 SlideShow.Transition="Overgang"
17
 SlideShow.Transition.Cut="Kutt"
18
obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/nn-NO.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+SlideShow.PlayPause="Spel/Pause"
3
+SlideShow.Stop="Stopp"
4
+ColorSource="Fargekjelde"
5
+ColorSource.Color="Farge"
6
+ColorSource.Width="Breidde"
7
+ColorSource.Height="Høgde"
8
obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/oc-FR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+ColorSource.Width="Largor"
3
+ColorSource.Height="Nautor"
4
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/sl-SI.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 ImageInput="Slika"
3
 File="Slikovna datoteka"
4
 UnloadWhenNotShowing="Razloži sliko, ko ni prikazana"
5
+LinearAlpha="Uporabi alfo v linearnem prostoru"
6
 SlideShow="Slikovna predstavitev"
7
 SlideShow.TransitionSpeed="Hitrost prehodov (ms)"
8
 SlideShow.SlideTime="Čas med slikami (ms)"
9
obs-studio-27.0.1.tar.xz/plugins/image-source/data/locale/vi-VN.ini -> obs-studio-27.1.3.tar.xz/plugins/image-source/data/locale/vi-VN.ini Changed
19
 
1
@@ -1,6 +1,7 @@
2
 ImageInput="Hình ảnh"
3
 File="Tập tin hình ảnh"
4
-UnloadWhenNotShowing="Tải lên hình ảnh khi không hiển thị"
5
+UnloadWhenNotShowing="Không hiện hình ảnh khi không hiển thị"
6
+LinearAlpha="Áp dụng alpha trong không gian tuyến tĩnh"
7
 SlideShow="Trình chiếu hình ảnh"
8
 SlideShow.TransitionSpeed="Tốc độ chuyển cảnh (mili giây)"
9
 SlideShow.SlideTime="Thời gian giữa các slide (mili giây)"
10
@@ -24,7 +25,7 @@
11
 SlideShow.PlayPause="Phát/Tạm dừng"
12
 SlideShow.Restart="Khởi động lại"
13
 SlideShow.Stop="Dừng"
14
-SlideShow.NextSlide="Slide kế"
15
+SlideShow.NextSlide="Slide kế tiếp"
16
 SlideShow.PreviousSlide="Slide trước"
17
 SlideShow.HideWhenDone="Ẩn khi trình chiếu xong"
18
 ColorSource="Nguồn màu"
19
obs-studio-27.0.1.tar.xz/plugins/image-source/image-source.c -> obs-studio-27.1.3.tar.xz/plugins/image-source/image-source.c Changed
78
 
1
@@ -22,6 +22,7 @@
2
    float update_time_elapsed;
3
    uint64_t last_time;
4
    bool active;
5
+   bool restart_gif;
6
 
7
    gs_image_file3_t if3;
8
 };
9
@@ -115,6 +116,29 @@
10
        image_source_unload(context);
11
 }
12
 
13
+static void restart_gif(void *data)
14
+{
15
+   struct image_source *context = data;
16
+
17
+   if (context->if3.image2.image.is_animated_gif) {
18
+       context->if3.image2.image.cur_frame = 0;
19
+       context->if3.image2.image.cur_loop = 0;
20
+       context->if3.image2.image.cur_time = 0;
21
+
22
+       obs_enter_graphics();
23
+       gs_image_file3_update_texture(&context->if3);
24
+       obs_leave_graphics();
25
+
26
+       context->restart_gif = false;
27
+   }
28
+}
29
+
30
+static void image_source_activate(void *data)
31
+{
32
+   struct image_source *context = data;
33
+   context->restart_gif = true;
34
+}
35
+
36
 static void *image_source_create(obs_data_t *settings, obs_source_t *source)
37
 {
38
    struct image_source *context = bzalloc(sizeof(struct image_source));
39
@@ -190,25 +214,19 @@
40
        }
41
    }
42
 
43
-   if (obs_source_active(context->source)) {
44
+   if (obs_source_showing(context->source)) {
45
        if (!context->active) {
46
            if (context->if3.image2.image.is_animated_gif)
47
                context->last_time = frame_time;
48
            context->active = true;
49
        }
50
 
51
+       if (context->restart_gif)
52
+           restart_gif(context);
53
+
54
    } else {
55
        if (context->active) {
56
-           if (context->if3.image2.image.is_animated_gif) {
57
-               context->if3.image2.image.cur_frame = 0;
58
-               context->if3.image2.image.cur_loop = 0;
59
-               context->if3.image2.image.cur_time = 0;
60
-
61
-               obs_enter_graphics();
62
-               gs_image_file3_update_texture(&context->if3);
63
-               obs_leave_graphics();
64
-           }
65
-
66
+           restart_gif(context);
67
            context->active = false;
68
        }
69
 
70
@@ -323,6 +341,7 @@
71
    .missing_files = image_source_missingfiles,
72
    .get_properties = image_source_properties,
73
    .icon_type = OBS_ICON_TYPE_IMAGE,
74
+   .activate = image_source_activate,
75
 };
76
 
77
 OBS_DECLARE_MODULE()
78
obs-studio-27.0.1.tar.xz/plugins/linux-alsa/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-alsa/data/locale/en-US.ini Changed
6
 
1
@@ -1,2 +1,2 @@
2
-AlsaInput="Audio Capture Device (ALSA)"
3
-Device="Device"
4
+AlsaInput="Audio Capture Device (ALSA)"
5
+Device="Device"
6
obs-studio-27.0.1.tar.xz/plugins/linux-alsa/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-alsa/data/locale/gd-GB.ini Changed
4
 
1
@@ -1,1 +1,2 @@
2
+AlsaInput="Uidheam-glacaidh fuaime (ALSA)"
3
 Device="Uidheam"
4
obs-studio-27.1.3.tar.xz/plugins/linux-alsa/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+AlsaInput="ऑडियो कैप्चर डिवाइस (ALSA)"
3
+Device="डिवाइस"
4
obs-studio-27.1.3.tar.xz/plugins/linux-alsa/data/locale/kmr-TR.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+AlsaInput="Amûra girtina dengê (ALSA)"
3
+Device="Amûr"
4
obs-studio-27.1.3.tar.xz/plugins/linux-alsa/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Device="Eining"
3
obs-studio-27.1.3.tar.xz/plugins/linux-alsa/data/locale/szl-PL.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+AlsaInput="Maszina chytajōnco klang (ALSA)"
3
+Device="Maszina"
4
obs-studio-27.0.1.tar.xz/plugins/linux-capture/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/CMakeLists.txt Changed
39
 
1
@@ -47,12 +47,15 @@
2
 option(ENABLE_PIPEWIRE "Enable PipeWire support" ON)
3
 if(ENABLE_PIPEWIRE)
4
    find_package(PipeWire QUIET)
5
+   find_package(Libdrm QUIET) # we require libdrm/drm_fourcc.h to build
6
    find_package(Gio QUIET)
7
 
8
    if(NOT PIPEWIRE_FOUND)
9
        message(FATAL_ERROR "PipeWire library not found! Please install PipeWire or set ENABLE_PIPEWIRE=OFF")
10
    elseif(NOT GIO_FOUND)
11
        message(FATAL_ERROR "Gio library not found! Please install GLib2 (or Gio) or set ENABLE_PIPEWIRE=OFF")
12
+   elseif(NOT LIBDRM_INCLUDE_DIRS)
13
+       message(FATAL_ERROR "libdrm headers not found! Please install libdrm or set ENABLE_PIPEWIRE=OFF")
14
    endif()
15
 
16
    add_definitions(-DENABLE_PIPEWIRE)
17
@@ -61,6 +64,7 @@
18
        ${linux-capture_INCLUDES}
19
        ${GIO_INCLUDE_DIRS}
20
        ${PIPEWIRE_INCLUDE_DIRS}
21
+       ${DRM_INCLUDE_DIRS}
22
    )
23
 
24
    add_definitions(
25
@@ -72,11 +76,13 @@
26
        ${linux-capture_SOURCES}
27
        pipewire.c
28
        pipewire-capture.c
29
+       portal.c
30
    )
31
    set(linux-capture_HEADERS
32
        ${linux-capture_HEADERS}
33
        pipewire.h
34
        pipewire-capture.h
35
+       portal.h
36
    )
37
    set(linux-capture_LIBRARIES
38
        ${linux-capture_LIBRARIES}
39
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/fi-FI.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/fi-FI.ini Changed
10
 
1
@@ -12,4 +12,8 @@
2
 LockX="Lukitse X Server kaappauksen aikana"
3
 IncludeXBorder="Sisällytä X-reunus"
4
 ExcludeAlpha="Käytä tekstuuriformaattia ilman alpha-kanavaa (Mesa-yhteensopiva)"
5
+PipeWireDesktopCapture="Näytönkaappaus (PipeWire)"
6
+PipeWireSelectMonitor="Valitse näyttö"
7
+PipeWireSelectWindow="Valitse ikkuna"
8
+PipeWireWindowCapture="Ikkunankaappaus (PipeWire)"
9
 ShowCursor="Näytä kursori"
10
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/gd-GB.ini Changed
10
 
1
@@ -13,4 +13,8 @@
2
 LockX="Glais am frithealaiche X rè a’ ghlacaidh"
3
 IncludeXBorder="Gabh a-steach an t-iomall X"
4
 ExcludeAlpha="Cleachd fòrmat innich gun alpha (seachnadh buga Mesa)"
5
+PipeWireDesktopCapture="Glacadh-sgrìn (PipeWire)"
6
+PipeWireSelectMonitor="Tagh sgrìn"
7
+PipeWireSelectWindow="Tagh uinneag"
8
+PipeWireWindowCapture="Glacadh uinneige (PipeWire)"
9
 ShowCursor="Seall an cùrsair"
10
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/he-IL.ini Changed
9
 
1
@@ -14,4 +14,7 @@
2
 IncludeXBorder="כלול קצה שרת X"
3
 ExcludeAlpha="השתמש בתבנית מרקם ללא אלפא (עקיפת בעיית Mesa)"
4
 PipeWireDesktopCapture="לכידת מסך (PipeWire)"
5
+PipeWireSelectMonitor="בחירת צג"
6
+PipeWireSelectWindow="בחירת חלון"
7
+PipeWireWindowCapture="לכידת חלון (PipeWire)"
8
 ShowCursor="הצג סמן"
9
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/hi-IN.ini Changed
22
 
1
@@ -1,1 +1,20 @@
2
 X11SharedMemoryScreenInput="स्क्रीन कैप्चर (XSHM)"
3
+Screen="स्क्रीन"
4
+CaptureCursor="कर्सर कैप्चर करें"
5
+AdvancedSettings="उन्नत सेटिंग्स"
6
+XServer="एक्स सर्वर"
7
+XCCapture="विंडो कैप्चर (Xcomposite)"
8
+Window="विंडो"
9
+CropTop="शीर्ष छाँटें (पिक्सेल)"
10
+CropLeft="बायाँ छाँटें (पिक्सेल)"
11
+CropRight="दायाँ छाँटें (पिक्सेल)"
12
+CropBottom="तला छाँटें (पिक्सेल)"
13
+SwapRedBlue="लाल व नीला अदला-बदली करें"
14
+LockX="कैप्चर करते समय X सर्वर को लॉक करें"
15
+IncludeXBorder="X बॉर्डर शामिल करें"
16
+ExcludeAlpha="अल्फा-लेस प्रारूप का उपयोग करें (Mesa वर्कअराउंड)"
17
+PipeWireDesktopCapture="स्क्रीन कैप्चर (PipeWire)"
18
+PipeWireSelectMonitor="मॉनिटर चुनें"
19
+PipeWireSelectWindow="विंडो चुनें"
20
+PipeWireWindowCapture="विंडो कैप्चर (PipeWire)"
21
+ShowCursor="कर्सर दिखाएं"
22
obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/kmr-TR.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+X11SharedMemoryScreenInput="Girtina wêneya dîmenderê (XSHM)"
3
+Screen="Dîmender"
4
+CaptureCursor="Nîşankerê bigire"
5
+AdvancedSettings="Sazkariyên pêşketî"
6
+XServer="Rajekara X"
7
+XCCapture="Girtina çarçoveyê (Xcomposite)"
8
+Window="Çarçove"
9
+CropTop="Ji alî jor qutkirin (pîksel)"
10
+CropLeft="Ji alî çepê qutkirin (pîksel)"
11
+CropRight="Ji alî rastê qutkirin (pîksel)"
12
+CropBottom="Ji alî jêr qutkirin (pîksel)"
13
+SwapRedBlue="Sor û şîn biguherîne"
14
+LockX="Rejakarê X bigire gava tê girtin"
15
+IncludeXBorder="Sînorê X têxe nav"
16
+ExcludeAlpha="Formata tevna alfa-kêm bi kar bîne (çareserkirina mesa)"
17
+PipeWireDesktopCapture="Giritina diîmenderê (PipeWire)"
18
+PipeWireSelectMonitor="Dîmenderê hilbijêre"
19
+PipeWireSelectWindow="Çarçoveyê hilbijêre"
20
+PipeWireWindowCapture="Girtina çarçoveyê (PipeWire)"
21
+ShowCursor="Nîşankerê nîşan bide"
22
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/nb-NO.ini Changed
10
 
1
@@ -13,3 +13,8 @@
2
 LockX="Lås X-tjener under opptak"
3
 IncludeXBorder="Inkludér X11-rammen"
4
 ExcludeAlpha="Bruk teksturformat uten alfakanal (Mesa løsning)"
5
+PipeWireDesktopCapture="Skjermopptak (PipeWire)"
6
+PipeWireSelectMonitor="Velg skjerm"
7
+PipeWireSelectWindow="Velg vindu"
8
+PipeWireWindowCapture="Vindusopptak (PipeWire)"
9
+ShowCursor="Vis musepekeren"
10
obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/nn-NO.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+Screen="Skjerm"
3
+AdvancedSettings="Avanserte innstillingar"
4
+Window="Vindauge"
5
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/sl-SI.ini Changed
10
 
1
@@ -13,3 +13,8 @@
2
 LockX="Zakleni X sstrežnik med zajemanjem"
3
 IncludeXBorder="Vključi obrobo X"
4
 ExcludeAlpha="Uporabi format za teksture, ki je brez alfa kanala (Mesa obvod)"
5
+PipeWireDesktopCapture="Zajem zaslona (PipeWire)"
6
+PipeWireSelectMonitor="Izbira zaslona"
7
+PipeWireSelectWindow="Izbira okna"
8
+PipeWireWindowCapture="Zajem okna (PipeWire)"
9
+ShowCursor="Prikaži kurzor"
10
obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/szl-PL.ini Added
21
 
1
@@ -0,0 +1,19 @@
2
+X11SharedMemoryScreenInput="Chytanie ekranu (XSHM)"
3
+Screen="Ekran"
4
+CaptureCursor="Chytej kursōr"
5
+AdvancedSettings="Zaawansowane ôpcyje"
6
+XCCapture="Chytanie ôkna (XComposite)"
7
+Window="Ôkno"
8
+CropTop="Przitnij ôd gōry (piksele)"
9
+CropLeft="Przitnij z lewyj (piksele)"
10
+CropRight="Przitnij z prawyj (piksele)"
11
+CropBottom="Przitnij ôd spodka (piksele)"
12
+SwapRedBlue="Umiyń czyrwōny i modry"
13
+LockX="Zaszperuj serwer X w czasie chytanio"
14
+IncludeXBorder="Dołōncz rōmka ôkna"
15
+ExcludeAlpha="Użyj tekstur bez kanału alpha (ôbyńście problymu Mesa)"
16
+PipeWireDesktopCapture="Chytanie ekranu (PipeWire)"
17
+PipeWireSelectMonitor="Ôbier mōnitōr"
18
+PipeWireSelectWindow="Ôbier ôkno"
19
+PipeWireWindowCapture="Chytanie ôkna (PipeWire)"
20
+ShowCursor="Pokoż kursōr"
21
obs-studio-27.0.1.tar.xz/plugins/linux-capture/data/locale/vi-VN.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/data/locale/vi-VN.ini Changed
9
 
1
@@ -12,6 +12,7 @@
2
 LockX="Khóa X server khi quay"
3
 IncludeXBorder="Bao gồm X Border"
4
 ExcludeAlpha="Dùng texture format không có Alpha (Cách giải quyết với Mesa driver)"
5
+PipeWireDesktopCapture="Quay màn hình (PipeWire)"
6
 PipeWireSelectMonitor="Chọn màn hình"
7
 PipeWireSelectWindow="Chọn cửa sổ"
8
 ShowCursor="Hiển thị con trỏ"
9
obs-studio-27.0.1.tar.xz/plugins/linux-capture/linux-capture.c -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/linux-capture.c Changed
32
 
1
@@ -40,13 +40,28 @@
2
 
3
 bool obs_module_load(void)
4
 {
5
-   if (obs_get_nix_platform() == OBS_NIX_PLATFORM_X11_GLX) {
6
+   enum obs_nix_platform_type platform = obs_get_nix_platform();
7
+
8
+   switch (platform) {
9
+   case OBS_NIX_PLATFORM_X11_GLX:
10
        obs_register_source(&xshm_input);
11
        xcomposite_load();
12
+       break;
13
+
14
+   case OBS_NIX_PLATFORM_X11_EGL:
15
+       obs_register_source(&xshm_input);
16
+#ifdef ENABLE_PIPEWIRE
17
+       pipewire_capture_load();
18
+#endif
19
+       break;
20
+
21
+#ifdef ENABLE_WAYLAND
22
+   case OBS_NIX_PLATFORM_WAYLAND:
23
 #ifdef ENABLE_PIPEWIRE
24
-   } else {
25
        pipewire_capture_load();
26
 #endif
27
+       break;
28
+#endif
29
    }
30
 
31
    return true;
32
obs-studio-27.0.1.tar.xz/plugins/linux-capture/pipewire-capture.c -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/pipewire-capture.c Changed
53
 
1
@@ -19,6 +19,7 @@
2
  */
3
 
4
 #include "pipewire.h"
5
+#include "portal.h"
6
 
7
 /* obs_source_info methods */
8
 
9
@@ -106,6 +107,23 @@
10
 
11
 void pipewire_capture_load(void)
12
 {
13
+   uint32_t available_capture_types = portal_get_available_capture_types();
14
+   bool desktop_capture_available =
15
+       (available_capture_types & DESKTOP_CAPTURE) != 0;
16
+   bool window_capture_available =
17
+       (available_capture_types & WINDOW_CAPTURE) != 0;
18
+
19
+   if (available_capture_types == 0) {
20
+       blog(LOG_INFO, "[pipewire] No captures available");
21
+       return;
22
+   }
23
+
24
+   blog(LOG_INFO, "[pipewire] Available captures:");
25
+   if (desktop_capture_available)
26
+       blog(LOG_INFO, "[pipewire]     - Desktop capture");
27
+   if (window_capture_available)
28
+       blog(LOG_INFO, "[pipewire]     - Window capture");
29
+
30
    // Desktop capture
31
    const struct obs_source_info pipewire_desktop_capture_info = {
32
        .id = "pipewire-desktop-capture-source",
33
@@ -124,7 +142,8 @@
34
        .video_render = pipewire_capture_video_render,
35
        .icon_type = OBS_ICON_TYPE_DESKTOP_CAPTURE,
36
    };
37
-   obs_register_source(&pipewire_desktop_capture_info);
38
+   if (desktop_capture_available)
39
+       obs_register_source(&pipewire_desktop_capture_info);
40
 
41
    // Window capture
42
    const struct obs_source_info pipewire_window_capture_info = {
43
@@ -144,7 +163,8 @@
44
        .video_render = pipewire_capture_video_render,
45
        .icon_type = OBS_ICON_TYPE_WINDOW_CAPTURE,
46
    };
47
-   obs_register_source(&pipewire_window_capture_info);
48
+   if (window_capture_available)
49
+       obs_register_source(&pipewire_window_capture_info);
50
 
51
    pw_init(NULL, NULL);
52
 }
53
obs-studio-27.0.1.tar.xz/plugins/linux-capture/pipewire.c -> obs-studio-27.1.3.tar.xz/plugins/linux-capture/pipewire.c Changed
302
 
1
@@ -20,6 +20,8 @@
2
 
3
 #include "pipewire.h"
4
 
5
+#include "portal.h"
6
+
7
 #include <util/dstr.h>
8
 
9
 #include <gio/gio.h>
10
@@ -28,6 +30,7 @@
11
 #include <fcntl.h>
12
 #include <glad/glad.h>
13
 #include <linux/dma-buf.h>
14
+#include <libdrm/drm_fourcc.h>
15
 #include <spa/param/video/format-utils.h>
16
 #include <spa/debug/format.h>
17
 #include <spa/debug/types.h>
18
@@ -58,8 +61,6 @@
19
            '4') /* [31:0] A:B:G:R 8:8:8:8 little endian */
20
 
21
 struct _obs_pipewire_data {
22
-   GDBusConnection *connection;
23
-   GDBusProxy *proxy;
24
    GCancellable *cancellable;
25
 
26
    char *sender_name;
27
@@ -180,7 +181,7 @@
28
    blog(LOG_INFO, "[pipewire] screencast session cancelled");
29
 
30
    g_dbus_connection_call(
31
-       call->obs_pw->connection, "org.freedesktop.portal.Desktop",
32
+       portal_get_dbus_connection(), "org.freedesktop.portal.Desktop",
33
        call->request_path, "org.freedesktop.portal.Request", "Close",
34
        NULL, NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
35
 }
36
@@ -198,7 +199,7 @@
37
                          G_CALLBACK(on_cancelled_cb),
38
                          call);
39
    call->signal_id = g_dbus_connection_signal_subscribe(
40
-       obs_pw->connection, "org.freedesktop.portal.Desktop",
41
+       portal_get_dbus_connection(), "org.freedesktop.portal.Desktop",
42
        "org.freedesktop.portal.Request", "Response",
43
        call->request_path, NULL, G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE,
44
        callback, call, NULL);
45
@@ -212,8 +213,8 @@
46
        return;
47
 
48
    if (call->signal_id)
49
-       g_dbus_connection_signal_unsubscribe(call->obs_pw->connection,
50
-                            call->signal_id);
51
+       g_dbus_connection_signal_unsubscribe(
52
+           portal_get_dbus_connection(), call->signal_id);
53
 
54
    if (call->cancelled_id > 0)
55
        g_signal_handler_disconnect(call->obs_pw->cancellable,
56
@@ -247,11 +248,13 @@
57
 static void destroy_session(obs_pipewire_data *obs_pw)
58
 {
59
    if (obs_pw->session_handle) {
60
-       g_dbus_connection_call(
61
-           obs_pw->connection, "org.freedesktop.portal.Desktop",
62
-           obs_pw->session_handle,
63
-           "org.freedesktop.portal.Session", "Close", NULL, NULL,
64
-           G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL, NULL);
65
+       g_dbus_connection_call(portal_get_dbus_connection(),
66
+                      "org.freedesktop.portal.Desktop",
67
+                      obs_pw->session_handle,
68
+                      "org.freedesktop.portal.Session",
69
+                      "Close", NULL, NULL,
70
+                      G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL,
71
+                      NULL);
72
 
73
        g_clear_pointer(&obs_pw->session_handle, g_free);
74
    }
75
@@ -261,8 +264,6 @@
76
    g_clear_pointer(&obs_pw->texture, gs_texture_destroy);
77
    g_cancellable_cancel(obs_pw->cancellable);
78
    g_clear_object(&obs_pw->cancellable);
79
-   g_clear_object(&obs_pw->connection);
80
-   g_clear_object(&obs_pw->proxy);
81
 }
82
 
83
 static inline bool has_effective_crop(obs_pipewire_data *obs_pw)
84
@@ -381,10 +382,12 @@
85
        goto read_metadata;
86
 
87
    if (buffer->datas[0].type == SPA_DATA_DmaBuf) {
88
-       uint32_t offsets[1];
89
-       uint32_t strides[1];
90
-       uint64_t modifiers[1];
91
-       int fds[1];
92
+       uint32_t planes = buffer->n_datas;
93
+       uint32_t offsets[planes];
94
+       uint32_t strides[planes];
95
+       uint64_t modifiers[planes];
96
+       int fds[planes];
97
+       bool modifierless; // DMA-BUF without explicit modifier
98
 
99
        blog(LOG_DEBUG,
100
             "[pipewire] DMA-BUF info: fd:%ld, stride:%d, offset:%u, size:%dx%d",
101
@@ -401,16 +404,22 @@
102
            goto read_metadata;
103
        }
104
 
105
-       fds[0] = buffer->datas[0].fd;
106
-       offsets[0] = buffer->datas[0].chunk->offset;
107
-       strides[0] = buffer->datas[0].chunk->stride;
108
-       modifiers[0] = obs_pw->format.info.raw.modifier;
109
+       for (uint32_t plane = 0; plane < planes; plane++) {
110
+           fds[plane] = buffer->datas[plane].fd;
111
+           offsets[plane] = buffer->datas[plane].chunk->offset;
112
+           strides[plane] = buffer->datas[plane].chunk->stride;
113
+           modifiers[plane] = obs_pw->format.info.raw.modifier;
114
+       }
115
 
116
        g_clear_pointer(&obs_pw->texture, gs_texture_destroy);
117
+
118
+       modifierless = obs_pw->format.info.raw.modifier ==
119
+                  DRM_FORMAT_MOD_INVALID;
120
        obs_pw->texture = gs_texture_create_from_dmabuf(
121
            obs_pw->format.info.raw.size.width,
122
            obs_pw->format.info.raw.size.height, drm_format,
123
-           GS_BGRX, 1, fds, strides, offsets, modifiers);
124
+           GS_BGRX, planes, fds, strides, offsets,
125
+           modifierless ? NULL : modifiers);
126
    } else {
127
        blog(LOG_DEBUG, "[pipewire] Buffer has memory texture");
128
        enum gs_color_format obs_format;
129
@@ -730,7 +739,7 @@
130
    g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT);
131
 
132
    g_dbus_proxy_call_with_unix_fd_list(
133
-       obs_pw->proxy, "OpenPipeWireRemote",
134
+       portal_get_dbus_proxy(), "OpenPipeWireRemote",
135
        g_variant_new("(oa{sv})", obs_pw->session_handle, &builder),
136
        G_DBUS_CALL_FLAGS_NONE, -1, NULL, obs_pw->cancellable,
137
        on_pipewire_remote_opened_cb, obs_pw);
138
@@ -841,7 +850,7 @@
139
    g_variant_builder_add(&builder, "{sv}", "handle_token",
140
                  g_variant_new_string(request_token));
141
 
142
-   g_dbus_proxy_call(obs_pw->proxy, "Start",
143
+   g_dbus_proxy_call(portal_get_dbus_proxy(), "Start",
144
              g_variant_new("(osa{sv})", obs_pw->session_handle, "",
145
                    &builder),
146
              G_DBUS_CALL_FLAGS_NONE, -1, obs_pw->cancellable,
147
@@ -932,7 +941,7 @@
148
        g_variant_builder_add(&builder, "{sv}", "cursor_mode",
149
                      g_variant_new_uint32(1));
150
 
151
-   g_dbus_proxy_call(obs_pw->proxy, "SelectSources",
152
+   g_dbus_proxy_call(portal_get_dbus_proxy(), "SelectSources",
153
              g_variant_new("(oa{sv})", obs_pw->session_handle,
154
                    &builder),
155
              G_DBUS_CALL_FLAGS_NONE, -1, obs_pw->cancellable,
156
@@ -955,6 +964,7 @@
157
    UNUSED_PARAMETER(interface_name);
158
    UNUSED_PARAMETER(signal_name);
159
 
160
+   g_autoptr(GVariant) session_handle_variant = NULL;
161
    g_autoptr(GVariant) result = NULL;
162
    struct dbus_call_data *call = user_data;
163
    obs_pipewire_data *obs_pw = call->obs_pw;
164
@@ -972,8 +982,10 @@
165
 
166
    blog(LOG_INFO, "[pipewire] screencast session created");
167
 
168
-   g_variant_lookup(result, "session_handle", "s",
169
-            &obs_pw->session_handle);
170
+   session_handle_variant =
171
+       g_variant_lookup_value(result, "session_handle", NULL);
172
+   obs_pw->session_handle =
173
+       g_variant_dup_string(session_handle_variant, NULL);
174
 
175
    select_source(obs_pw);
176
 }
177
@@ -1016,7 +1028,7 @@
178
    g_variant_builder_add(&builder, "{sv}", "session_handle_token",
179
                  g_variant_new_string(session_token));
180
 
181
-   g_dbus_proxy_call(obs_pw->proxy, "CreateSession",
182
+   g_dbus_proxy_call(portal_get_dbus_proxy(), "CreateSession",
183
              g_variant_new("(a{sv})", &builder),
184
              G_DBUS_CALL_FLAGS_NONE, -1, obs_pw->cancellable,
185
              on_session_created_cb, call);
186
@@ -1028,13 +1040,14 @@
187
 
188
 /* ------------------------------------------------- */
189
 
190
-static void update_available_cursor_modes(obs_pipewire_data *obs_pw)
191
+static void update_available_cursor_modes(obs_pipewire_data *obs_pw,
192
+                     GDBusProxy *proxy)
193
 {
194
    g_autoptr(GVariant) cached_cursor_modes = NULL;
195
    uint32_t available_cursor_modes;
196
 
197
-   cached_cursor_modes = g_dbus_proxy_get_cached_property(
198
-       obs_pw->proxy, "AvailableCursorModes");
199
+   cached_cursor_modes =
200
+       g_dbus_proxy_get_cached_property(proxy, "AvailableCursorModes");
201
    available_cursor_modes =
202
        cached_cursor_modes ? g_variant_get_uint32(cached_cursor_modes)
203
                    : 0;
204
@@ -1050,52 +1063,26 @@
205
        blog(LOG_INFO, "[pipewire]     - Hidden");
206
 }
207
 
208
-static void on_proxy_created_cb(GObject *source, GAsyncResult *res,
209
-               void *user_data)
210
-{
211
-   UNUSED_PARAMETER(source);
212
-
213
-   g_autoptr(GError) error = NULL;
214
-   obs_pipewire_data *obs_pw = user_data;
215
-
216
-   obs_pw->proxy = g_dbus_proxy_new_finish(res, &error);
217
-
218
-   if (error) {
219
-       if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
220
-           blog(LOG_ERROR, "[pipewire] Error creating proxy: %s",
221
-                error->message);
222
-       return;
223
-   }
224
-
225
-   update_available_cursor_modes(obs_pw);
226
-   create_session(obs_pw);
227
-}
228
-
229
-static void create_proxy(obs_pipewire_data *obs_pw)
230
-{
231
-   g_dbus_proxy_new(obs_pw->connection, G_DBUS_PROXY_FLAGS_NONE, NULL,
232
-            "org.freedesktop.portal.Desktop",
233
-            "/org/freedesktop/portal/desktop",
234
-            "org.freedesktop.portal.ScreenCast",
235
-            obs_pw->cancellable, on_proxy_created_cb, obs_pw);
236
-}
237
-
238
 /* ------------------------------------------------- */
239
 
240
 static gboolean init_obs_pipewire(obs_pipewire_data *obs_pw)
241
 {
242
-   g_autoptr(GError) error = NULL;
243
+   GDBusConnection *connection;
244
+   GDBusProxy *proxy;
245
    char *aux;
246
 
247
    obs_pw->cancellable = g_cancellable_new();
248
-   obs_pw->connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
249
-   if (error) {
250
-       g_error("Error getting session bus: %s", error->message);
251
+   connection = portal_get_dbus_connection();
252
+   if (!connection)
253
        return FALSE;
254
-   }
255
+   proxy = portal_get_dbus_proxy();
256
+   if (!proxy)
257
+       return FALSE;
258
+
259
+   update_available_cursor_modes(obs_pw, proxy);
260
 
261
-   obs_pw->sender_name = bstrdup(
262
-       g_dbus_connection_get_unique_name(obs_pw->connection) + 1);
263
+   obs_pw->sender_name =
264
+       bstrdup(g_dbus_connection_get_unique_name(connection) + 1);
265
 
266
    /* Replace dots by underscores */
267
    while ((aux = strstr(obs_pw->sender_name, ".")) != NULL)
268
@@ -1104,7 +1091,7 @@
269
    blog(LOG_INFO, "PipeWire initialized (sender name: %s)",
270
         obs_pw->sender_name);
271
 
272
-   create_proxy(obs_pw);
273
+   create_session(obs_pw);
274
 
275
    return TRUE;
276
 }
277
@@ -1225,18 +1212,19 @@
278
 
279
    if (has_effective_crop(obs_pw)) {
280
        gs_draw_sprite_subregion(obs_pw->texture, 0, obs_pw->crop.x,
281
-                    obs_pw->crop.y,
282
-                    obs_pw->crop.x + obs_pw->crop.width,
283
-                    obs_pw->crop.y + obs_pw->crop.height);
284
+                    obs_pw->crop.y, obs_pw->crop.width,
285
+                    obs_pw->crop.height);
286
    } else {
287
        gs_draw_sprite(obs_pw->texture, 0, 0, 0);
288
    }
289
 
290
    if (obs_pw->cursor.visible && obs_pw->cursor.valid &&
291
        obs_pw->cursor.texture) {
292
+       float cursor_x = obs_pw->cursor.x - obs_pw->cursor.hotspot_x;
293
+       float cursor_y = obs_pw->cursor.y - obs_pw->cursor.hotspot_y;
294
+
295
        gs_matrix_push();
296
-       gs_matrix_translate3f((float)obs_pw->cursor.x,
297
-                     (float)obs_pw->cursor.y, 0.0f);
298
+       gs_matrix_translate3f(cursor_x, cursor_y, 0.0f);
299
 
300
        gs_effect_set_texture(image, obs_pw->cursor.texture);
301
        gs_draw_sprite(obs_pw->texture, 0, obs_pw->cursor.width,
302
obs-studio-27.1.3.tar.xz/plugins/linux-capture/portal.c Added
88
 
1
@@ -0,0 +1,86 @@
2
+/* portal.c
3
+ *
4
+ * Copyright 2021 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
+ *
19
+ * SPDX-License-Identifier: GPL-2.0-or-later
20
+ */
21
+
22
+#include "portal.h"
23
+#include "pipewire.h"
24
+
25
+static GDBusConnection *connection = NULL;
26
+static GDBusProxy *proxy = NULL;
27
+
28
+static void ensure_proxy(void)
29
+{
30
+   g_autoptr(GError) error = NULL;
31
+   if (!connection) {
32
+       connection = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error);
33
+
34
+       if (error) {
35
+           blog(LOG_WARNING,
36
+                "[portals] Error retrieving D-Bus connection: %s",
37
+                error->message);
38
+           return;
39
+       }
40
+   }
41
+
42
+   if (!proxy) {
43
+       proxy = g_dbus_proxy_new_sync(
44
+           connection, G_DBUS_PROXY_FLAGS_NONE, NULL,
45
+           "org.freedesktop.portal.Desktop",
46
+           "/org/freedesktop/portal/desktop",
47
+           "org.freedesktop.portal.ScreenCast", NULL, &error);
48
+
49
+       if (error) {
50
+           blog(LOG_WARNING,
51
+                "[portals] Error retrieving D-Bus proxy: %s",
52
+                error->message);
53
+           return;
54
+       }
55
+   }
56
+}
57
+
58
+uint32_t portal_get_available_capture_types(void)
59
+{
60
+   g_autoptr(GVariant) cached_source_types = NULL;
61
+   uint32_t available_source_types;
62
+
63
+   ensure_proxy();
64
+
65
+   if (!proxy)
66
+       return 0;
67
+
68
+   cached_source_types =
69
+       g_dbus_proxy_get_cached_property(proxy, "AvailableSourceTypes");
70
+   available_source_types =
71
+       cached_source_types ? g_variant_get_uint32(cached_source_types)
72
+                   : 0;
73
+
74
+   return available_source_types;
75
+}
76
+
77
+GDBusConnection *portal_get_dbus_connection(void)
78
+{
79
+   ensure_proxy();
80
+   return connection;
81
+}
82
+
83
+GDBusProxy *portal_get_dbus_proxy(void)
84
+{
85
+   ensure_proxy();
86
+   return proxy;
87
+}
88
obs-studio-27.1.3.tar.xz/plugins/linux-capture/portal.h Added
31
 
1
@@ -0,0 +1,29 @@
2
+/* portal.c
3
+ *
4
+ * Copyright 2021 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
5
+ *
6
+ * This program is free software: you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation, either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
+ *
19
+ * SPDX-License-Identifier: GPL-2.0-or-later
20
+ */
21
+
22
+#pragma once
23
+
24
+#include <stdint.h>
25
+#include <gio/gio.h>
26
+
27
+uint32_t portal_get_available_capture_types(void);
28
+
29
+GDBusConnection *portal_get_dbus_connection(void);
30
+GDBusProxy *portal_get_dbus_proxy(void);
31
obs-studio-27.0.1.tar.xz/plugins/linux-jack/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/ar-SA.ini Changed
5
 
1
@@ -1,2 +1,3 @@
2
 StartJACKServer="بدء خادم JACK"
3
 Channels="عدد القنوات"
4
+JACKInput="عميل إدخال JACK"
5
obs-studio-27.0.1.tar.xz/plugins/linux-jack/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/en-US.ini Changed
8
 
1
@@ -1,3 +1,3 @@
2
-StartJACKServer="Start JACK Server"
3
-Channels="Number of Channels"
4
-JACKInput="JACK Input Client"
5
+StartJACKServer="Start JACK Server"
6
+Channels="Number of Channels"
7
+JACKInput="JACK Input Client"
8
obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/gd-GB.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+StartJACKServer="Tòisich frithealaiche JACK"
3
+Channels="Co mheud seanail"
4
+JACKInput="Cliant ion-chuir JACK"
5
obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/hi-IN.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+StartJACKServer="JACK सर्वर प्रारंभ करें"
3
+Channels="चैनलों की संख्या"
4
+JACKInput="JACK इनपुट क्लाएंट"
5
obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/kmr-TR.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+StartJACKServer="Rajekarê JACK bide destpêkirin"
3
+Channels="Hejmara kanalan"
4
+JACKInput="Rajegira têketina JACK"
5
obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Channels="Antal kanalar"
3
obs-studio-27.1.3.tar.xz/plugins/linux-jack/data/locale/szl-PL.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+StartJACKServer="Sztart serwera JACK"
3
+Channels="Wielość kanałōw"
4
+JACKInput="Klijynt wchodōw JACK"
5
obs-studio-27.0.1.tar.xz/plugins/linux-pulseaudio/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-pulseaudio/data/locale/en-US.ini Changed
8
 
1
@@ -1,3 +1,3 @@
2
-PulseInput="Audio Input Capture (PulseAudio)"
3
-PulseOutput="Audio Output Capture (PulseAudio)"
4
-Device="Device"
5
+PulseInput="Audio Input Capture (PulseAudio)"
6
+PulseOutput="Audio Output Capture (PulseAudio)"
7
+Device="Device"
8
obs-studio-27.0.1.tar.xz/plugins/linux-pulseaudio/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-pulseaudio/data/locale/hi-IN.ini Changed
5
 
1
@@ -1,1 +1,3 @@
2
 PulseInput="ऑडियो इनपुट पर कब्जा (पल्सऑडियो)"
3
+PulseOutput="ऑडियो आउटपुट कैप्चर (PulseAudio)"
4
+Device="डिवाइस"
5
obs-studio-27.1.3.tar.xz/plugins/linux-pulseaudio/data/locale/kmr-TR.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+PulseInput="Girtina têketina dengê (PulseAudio)"
3
+PulseOutput="Girtina derketina dengê (PulseAudio)"
4
+Device="Amûr"
5
obs-studio-27.1.3.tar.xz/plugins/linux-pulseaudio/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Device="Eining"
3
obs-studio-27.1.3.tar.xz/plugins/linux-pulseaudio/data/locale/szl-PL.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+PulseInput="Chytanie wchodu klangu (PulseAudio)"
3
+PulseOutput="Chytanie wyjścio klangu (PulseAudio)"
4
+Device="Maszina"
5
obs-studio-27.0.1.tar.xz/plugins/linux-v4l2/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/gd-GB.ini Changed
12
 
1
@@ -8,6 +8,10 @@
2
 FrameRate="Reat fhrèamaichean"
3
 LeaveUnchanged="Cùm gun atharrachadh"
4
 UseBuffering="Cleachd bufaireadh"
5
+ColorRange="Rainse dhathan"
6
 ColorRange.Default="Bun-roghainn"
7
 ColorRange.Partial="Leth-phàirteach"
8
 ColorRange.Full="Slàn"
9
+CameraCtrls="Stiùireadh a’ chamara"
10
+AutoresetOnTimeout="Ath-shuidhich gu fèin-obrachail nuair a dh’fhalbhas an ùine air"
11
+FramesUntilTimeout="Frèamaichean gus am falbh an ùine air"
12
obs-studio-27.0.1.tar.xz/plugins/linux-v4l2/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/hi-IN.ini Changed
18
 
1
@@ -1,1 +1,16 @@
2
 V4L2Input="वीडियो कैप्चर डिवाइस (V4L2)"
3
+Device="डिवाइस"
4
+Input="इनपुट"
5
+VideoFormat="वीडियो प्रारूप"
6
+VideoStandard="वीडियो मानक"
7
+Resolution="रिजॉल्यूशन"
8
+FrameRate="फ़्रेम दर"
9
+LeaveUnchanged="अपरिवर्तित छोड़ें"
10
+UseBuffering="बफ़रिंग प्रयोग करें"
11
+ColorRange="रंग विस्तार"
12
+ColorRange.Default="आरंभिक"
13
+ColorRange.Partial="आंशिक"
14
+ColorRange.Full="पूर्ण"
15
+CameraCtrls="कैमरा नियंत्रण"
16
+AutoresetOnTimeout="टाइमआउट पर ऑटोरीसेट"
17
+FramesUntilTimeout="टाइमआउट तक फ्रे़म्स"
18
obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/kmr-TR.ini Added
19
 
1
@@ -0,0 +1,17 @@
2
+V4L2Input="Amûra girtina vîdyoyê (V4L2)"
3
+Device="Amûr"
4
+Input="Ketan"
5
+VideoFormat="Formata vîdyoyê"
6
+VideoStandard="Standarda vîdyoyê"
7
+DVTiming="Demjimêra vîdyoyê jimarkî"
8
+Resolution="Çareserî"
9
+FrameRate="Rêjeya tarikê"
10
+LeaveUnchanged="Bê guhertin bihêle"
11
+UseBuffering="Pêşbîr bi kar bîne"
12
+ColorRange="Rêjeya rengê"
13
+ColorRange.Default="Berdest"
14
+ColorRange.Partial="Parçeyî"
15
+ColorRange.Full="Tijî"
16
+CameraCtrls="Kontrolên kamerayê"
17
+AutoresetOnTimeout="Bi xweberî heya dem diqede ji nû ve saz bike"
18
+FramesUntilTimeout="Tarik heya dem diqede"
19
obs-studio-27.0.1.tar.xz/plugins/linux-v4l2/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/nb-NO.ini Changed
8
 
1
@@ -11,3 +11,6 @@
2
 ColorRange="Fargespekter"
3
 ColorRange.Default="Standard"
4
 ColorRange.Partial="Delvis"
5
+CameraCtrls="Kamerakontroller"
6
+AutoresetOnTimeout="Autonullstill ved tidsavbrudd"
7
+FramesUntilTimeout="Antall bilder til tidsavbrudd"
8
obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+CameraCtrls="Contraròtles de la camèra"
3
obs-studio-27.0.1.tar.xz/plugins/linux-v4l2/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/sl-SI.ini Changed
7
 
1
@@ -10,3 +10,5 @@
2
 ColorRange.Partial="Delni"
3
 ColorRange.Full="Polni"
4
 CameraCtrls="Nastavitve kamere"
5
+AutoresetOnTimeout="Samodejna ponastavitev po poteku časa"
6
+FramesUntilTimeout="Sličic do preteka časa"
7
obs-studio-27.1.3.tar.xz/plugins/linux-v4l2/data/locale/szl-PL.ini Added
19
 
1
@@ -0,0 +1,17 @@
2
+V4L2Input="Maszina chytajōnco ôbroz (V4L2)"
3
+Device="Maszina"
4
+Input="Wchōd"
5
+VideoFormat="Format wideo"
6
+VideoStandard="Sztandard wideo"
7
+DVTiming="Czasowo synchrōnizacyjo wideo"
8
+Resolution="Rozdzielczość"
9
+FrameRate="Klotki na sekōnda"
10
+LeaveUnchanged="Ôstow bez zmian"
11
+UseBuffering="Użyj buforowanio"
12
+ColorRange="Zakrys farb"
13
+ColorRange.Default="Sztandardowy"
14
+ColorRange.Partial="Niyblank"
15
+ColorRange.Full="Połny"
16
+CameraCtrls="Panel sterowanio kamery"
17
+AutoresetOnTimeout="Autōmatyczne resetowanie po przekroczyniu czasu"
18
+FramesUntilTimeout="Wielość rōmek do przekroczynio czasu"
19
obs-studio-27.0.1.tar.xz/plugins/mac-avcapture/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-avcapture/data/locale/en-US.ini Changed
28
 
1
@@ -1,13 +1,13 @@
2
-AVCapture="Video Capture Device"
3
-Device="Device"
4
-UsePreset="Use Preset"
5
-Preset="Preset"
6
-Buffering="Use Buffering"
7
-FrameRate="Frame rate"
8
-InputFormat="Input format"
9
-ColorSpace="Color space"
10
-VideoRange="Video range"
11
-VideoRange.Partial="Partial"
12
-VideoRange.Full="Full"
13
-Auto="Auto"
14
-Unknown="Unknown ($1)"
15
+AVCapture="Video Capture Device"
16
+Device="Device"
17
+UsePreset="Use Preset"
18
+Preset="Preset"
19
+Buffering="Use Buffering"
20
+FrameRate="Frame rate"
21
+InputFormat="Input format"
22
+ColorSpace="Color space"
23
+VideoRange="Video range"
24
+VideoRange.Partial="Partial"
25
+VideoRange.Full="Full"
26
+Auto="Auto"
27
+Unknown="Unknown ($1)"
28
obs-studio-27.1.3.tar.xz/plugins/mac-avcapture/data/locale/hi-IN.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+AVCapture="वीडियो कैप्चर डिवाइस"
3
+Device="डिवाइस"
4
+UsePreset="प्रिसेट प्रयोग करें"
5
+Preset="प्रिसेट"
6
+Buffering="बफ़रिंग प्रयोग करें"
7
+FrameRate="फ्रेम रेट"
8
+InputFormat="इनपुट प्रारूप"
9
+ColorSpace="रंग स्थान"
10
+VideoRange="वीडियो विस्तार"
11
+VideoRange.Partial="आंशिक"
12
+VideoRange.Full="पूर्ण"
13
+Auto="स्वतः"
14
+Unknown="अज्ञात ($1)"
15
obs-studio-27.1.3.tar.xz/plugins/mac-avcapture/data/locale/kmr-TR.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+AVCapture="Amûra girtina vîdyo"
3
+Device="Amûr"
4
+UsePreset="Pêş sazkirî bi kar bîne"
5
+Preset="Pêş sazkirî"
6
+Buffering="Bîrgeha demkî bi kar bîne"
7
+FrameRate="Rêjeya tarikê"
8
+InputFormat="Formata têketinê"
9
+ColorSpace="Qada rengê"
10
+VideoRange="Dirêjahiya vîdyo"
11
+VideoRange.Partial="Parçeyî"
12
+VideoRange.Full="Tijî"
13
+Auto="Xweber"
14
+Unknown="Nenas ($1)"
15
obs-studio-27.1.3.tar.xz/plugins/mac-avcapture/data/locale/nn-NO.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Device="Eining"
3
+VideoRange.Partial="Delvis"
4
obs-studio-27.1.3.tar.xz/plugins/mac-avcapture/data/locale/szl-PL.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+AVCapture="Maszina do chytanio wideo"
3
+Device="Maszina"
4
+UsePreset="Użyj zdefiniowanych ustawiyń"
5
+Preset="Profil"
6
+Buffering="Użyj buforowanio"
7
+FrameRate="Klotki na sekōnda"
8
+InputFormat="Format wejściowy"
9
+ColorSpace="Przestrzyństwo farb"
10
+VideoRange="Zakrys wideo"
11
+VideoRange.Partial="Niyblank"
12
+VideoRange.Full="Połny"
13
+Auto="Autōmatycznie"
14
+Unknown="Niyznōmy (%1)"
15
obs-studio-27.0.1.tar.xz/plugins/mac-capture/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-capture/data/locale/en-US.ini Changed
42
 
1
@@ -1,20 +1,20 @@
2
-CoreAudio.InputCapture="Audio Input Capture"
3
-CoreAudio.OutputCapture="Audio Output Capture"
4
-CoreAudio.Device="Device"
5
-CoreAudio.Device.Default="Default"
6
-DisplayCapture="Display Capture"
7
-DisplayCapture.Display="Display"
8
-DisplayCapture.ShowCursor="Show Cursor"
9
-WindowCapture="Window Capture"
10
-WindowCapture.ShowShadow="Show Window shadow"
11
-WindowUtils.Window="Window"
12
-WindowUtils.ShowEmptyNames="Show Windows with empty names"
13
-CropMode="Crop"
14
-CropMode.None="None"
15
-CropMode.Manual="Manual"
16
-CropMode.ToWindow="To Window"
17
-CropMode.ToWindowAndManual="To Window and Manual"
18
-Crop.origin.x="Crop left"
19
-Crop.origin.y="Crop top"
20
-Crop.size.width="Crop right"
21
-Crop.size.height="Crop bottom"
22
+CoreAudio.InputCapture="Audio Input Capture"
23
+CoreAudio.OutputCapture="Audio Output Capture"
24
+CoreAudio.Device="Device"
25
+CoreAudio.Device.Default="Default"
26
+DisplayCapture="Display Capture"
27
+DisplayCapture.Display="Display"
28
+DisplayCapture.ShowCursor="Show Cursor"
29
+WindowCapture="Window Capture"
30
+WindowCapture.ShowShadow="Show Window shadow"
31
+WindowUtils.Window="Window"
32
+WindowUtils.ShowEmptyNames="Show Windows with empty names"
33
+CropMode="Crop"
34
+CropMode.None="None"
35
+CropMode.Manual="Manual"
36
+CropMode.ToWindow="To Window"
37
+CropMode.ToWindowAndManual="To Window and Manual"
38
+Crop.origin.x="Crop left"
39
+Crop.origin.y="Crop top"
40
+Crop.size.width="Crop right"
41
+Crop.size.height="Crop bottom"
42
obs-studio-27.0.1.tar.xz/plugins/mac-capture/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-capture/data/locale/hi-IN.ini Changed
22
 
1
@@ -1,1 +1,20 @@
2
 CoreAudio.InputCapture="ऑडियो इनपुट पर कब्जा"
3
+CoreAudio.OutputCapture="ऑडियो आउटपुट कैप्चर"
4
+CoreAudio.Device="डिवाइस"
5
+CoreAudio.Device.Default="आरंभिक"
6
+DisplayCapture="डिसप्ले कैप्चर करें"
7
+DisplayCapture.Display="प्रदर्शन"
8
+DisplayCapture.ShowCursor="कर्सर दिखाएं"
9
+WindowCapture="विंडो कैप्चर करें"
10
+WindowCapture.ShowShadow="विंडो छाया दिखाएँ"
11
+WindowUtils.Window="विंडो"
12
+WindowUtils.ShowEmptyNames="विंडो के नाम खाली दिखाएं"
13
+CropMode="छँटाई करें"
14
+CropMode.None="कुछ नहीं"
15
+CropMode.Manual="हस्तचालित"
16
+CropMode.ToWindow="विंडो में"
17
+CropMode.ToWindowAndManual="विंडो में तथा हस्तचालित"
18
+Crop.origin.x="बाएं से छाँटें"
19
+Crop.origin.y="शीर्ष से छाँटें"
20
+Crop.size.width="दाएं से छाँटें"
21
+Crop.size.height="तल से छाँटें"
22
obs-studio-27.1.3.tar.xz/plugins/mac-capture/data/locale/kmr-TR.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+CoreAudio.InputCapture="Girtina têketina dengê"
3
+CoreAudio.OutputCapture="Girtina derûna dengê"
4
+CoreAudio.Device="Amûr"
5
+CoreAudio.Device.Default="Berdest"
6
+DisplayCapture="Girtina dîmenderê"
7
+DisplayCapture.Display="Dîmender"
8
+DisplayCapture.ShowCursor="Nîşanker nîşan bide"
9
+WindowCapture="Girtina çarçoveyê"
10
+WindowCapture.ShowShadow="Siya çarçoveyê nîşan bide"
11
+WindowUtils.Window="Çarçove"
12
+WindowUtils.ShowEmptyNames="Çarçoveyên bi navên vala nîşan bide"
13
+CropMode="Qirpandin"
14
+CropMode.None="Ne yek"
15
+CropMode.Manual="Bi destan"
16
+CropMode.ToWindow="Bo çarçoveyê"
17
+CropMode.ToWindowAndManual="Bo çarçoveyê û bi destan"
18
+Crop.origin.x="Çep qirpandin"
19
+Crop.origin.y="Jor qirpandin"
20
+Crop.size.width="Rast qirpandin"
21
+Crop.size.height="Jêr qirpandin"
22
obs-studio-27.1.3.tar.xz/plugins/mac-capture/data/locale/nn-NO.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+CoreAudio.Device="Eining"
3
+CoreAudio.Device.Default="Standard"
4
+CropMode.None="Ingen"
5
+Crop.origin.x="Skjer til, venstre"
6
+Crop.origin.y="Skjer til, topp"
7
+Crop.size.width="Skjer til, høgre"
8
+Crop.size.height="Skjer til, botn"
9
obs-studio-27.0.1.tar.xz/plugins/mac-capture/data/locale/sv-SE.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-capture/data/locale/sv-SE.ini Changed
10
 
1
@@ -11,7 +11,7 @@
2
 WindowUtils.ShowEmptyNames="Visa fönster utan namn"
3
 CropMode="Beskär"
4
 CropMode.None="Ingen"
5
-CropMode.Manual="Manuellt"
6
+CropMode.Manual="Manuell"
7
 CropMode.ToWindow="Till fönster"
8
 CropMode.ToWindowAndManual="Till fönster och manuellt"
9
 Crop.origin.x="Beskär vänster"
10
obs-studio-27.0.1.tar.xz/plugins/mac-capture/mac-display-capture.m -> obs-studio-27.1.3.tar.xz/plugins/mac-capture/mac-display-capture.m Changed
58
 
1
@@ -3,6 +3,7 @@
2
 #include <util/threading.h>
3
 #include <pthread.h>
4
 
5
+#import <AvailabilityMacros.h>
6
 #import <CoreGraphics/CGDisplayStream.h>
7
 #import <Cocoa/Cocoa.h>
8
 
9
@@ -602,11 +603,43 @@
10
        props, "display", obs_module_text("DisplayCapture.Display"),
11
        OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
12
 
13
-   for (unsigned i = 0; i < [NSScreen screens].count; i++) {
14
-       char buf[10];
15
-       sprintf(buf, "%u", i);
16
-       obs_property_list_add_int(list, buf, i);
17
-   }
18
+   [[NSScreen screens] enumerateObjectsUsingBlock:^(
19
+                   NSScreen *_Nonnull screen, NSUInteger index,
20
+                   BOOL *_Nonnull stop
21
+                   __attribute__((unused))) {
22
+       char dimension_buffer[4][12];
23
+       char name_buffer[256];
24
+       sprintf(dimension_buffer[0], "%u",
25
+           (uint32_t)[screen frame].size.width);
26
+       sprintf(dimension_buffer[1], "%u",
27
+           (uint32_t)[screen frame].size.height);
28
+       sprintf(dimension_buffer[2], "%d",
29
+           (int32_t)[screen frame].origin.x);
30
+       sprintf(dimension_buffer[3], "%d",
31
+           (int32_t)[screen frame].origin.y);
32
+
33
+#if __MAC_OS_X_VERSION_MAX_ALLOWED >= __MAC_10_15
34
+       if (__builtin_available(macOS 10.15, *)) {
35
+           sprintf(name_buffer,
36
+               "%.200s: %.12sx%.12s @ %.12s,%.12s",
37
+               [[screen localizedName] UTF8String],
38
+               dimension_buffer[0], dimension_buffer[1],
39
+               dimension_buffer[2], dimension_buffer[3]);
40
+       } else
41
+#endif
42
+       {
43
+           char disp_num_buffer[11];
44
+           sprintf(disp_num_buffer, "%lu", (unsigned long)index);
45
+           sprintf(name_buffer,
46
+               "%.189s %.10s: %.12sx%.12s @ %.12s,%.12s",
47
+               obs_module_text("DisplayCapture.Display"),
48
+               disp_num_buffer, dimension_buffer[0],
49
+               dimension_buffer[1], dimension_buffer[2],
50
+               dimension_buffer[3]);
51
+       }
52
+
53
+       obs_property_list_add_int(list, name_buffer, index);
54
+   }];
55
 
56
    obs_properties_add_bool(props, "show_cursor",
57
                obs_module_text("DisplayCapture.ShowCursor"));
58
obs-studio-27.0.1.tar.xz/plugins/mac-syphon/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-syphon/data/locale/en-US.ini Changed
26
 
1
@@ -1,12 +1,12 @@
2
-Syphon="Syphon Client"
3
-Source="Source"
4
-LaunchSyphonInject="Launch SyphonInject"
5
-Inject="Inject"
6
-Application="Application"
7
-SyphonLicense="Syphon License"
8
-Crop="Crop"
9
-Crop.origin.x="Crop left"
10
-Crop.origin.y="Crop top"
11
-Crop.size.width="Crop right"
12
-Crop.size.height="Crop bottom"
13
-AllowTransparency="Allow Transparency"
14
+Syphon="Syphon Client"
15
+Source="Source"
16
+LaunchSyphonInject="Launch SyphonInject"
17
+Inject="Inject"
18
+Application="Application"
19
+SyphonLicense="Syphon License"
20
+Crop="Crop"
21
+Crop.origin.x="Crop left"
22
+Crop.origin.y="Crop top"
23
+Crop.size.width="Crop right"
24
+Crop.size.height="Crop bottom"
25
+AllowTransparency="Allow Transparency"
26
obs-studio-27.0.1.tar.xz/plugins/mac-syphon/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-syphon/data/locale/gd-GB.ini Changed
10
 
1
@@ -1,5 +1,8 @@
2
+Syphon="Cliant Syphon"
3
 Source="Tùs"
4
+LaunchSyphonInject="Cuir SyphonInject gu dol"
5
 Application="Aplacaid"
6
+SyphonLicense="Ceadachas Syphon"
7
 Crop="Beàrr"
8
 Crop.origin.x="Beàrr aig an taobh chlì"
9
 Crop.origin.y="Beàrr aig a’ bhàrr"
10
obs-studio-27.1.3.tar.xz/plugins/mac-syphon/data/locale/hi-IN.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+Syphon="Syphon क्लाएंट"
3
+Source="स्रोत"
4
+LaunchSyphonInject="SyphonInject आरंभ करें"
5
+Inject="डालें"
6
+Application="ऐप्लिकेशन"
7
+SyphonLicense="Syphon लाइसेंस"
8
+Crop="छँटाई करें"
9
+Crop.origin.x="बाएं से छाँटें"
10
+Crop.origin.y="शीर्ष से छाँटें"
11
+Crop.size.width="दाएं से छाँटें"
12
+Crop.size.height="तल से छाँटें"
13
+AllowTransparency="पारदर्शिता की अनुमति दें"
14
obs-studio-27.1.3.tar.xz/plugins/mac-syphon/data/locale/kmr-TR.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+Syphon="Rajegira Syphon"
3
+Source="Çavkanî"
4
+LaunchSyphonInject="SyphonInject-ê dest pê bike"
5
+Inject="Derzî kirin"
6
+Application="Sepan"
7
+SyphonLicense="Lîsansa Syphon"
8
+Crop="Qirpandin"
9
+Crop.origin.x="Çep qirpandin"
10
+Crop.origin.y="Jor qirpandin"
11
+Crop.size.width="Rast qirpandin"
12
+Crop.size.height="Jêr qirpandin"
13
+AllowTransparency="mafê bide zelaliyê"
14
obs-studio-27.1.3.tar.xz/plugins/mac-syphon/data/locale/nn-NO.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Source="Kjelde"
3
+Crop="Skjer til"
4
+Crop.origin.x="Skjer til, venstre"
5
+Crop.origin.y="Skjer til, topp"
6
+Crop.size.width="Skjer til, høgre"
7
+Crop.size.height="Skjer til, botn"
8
+AllowTransparency="Tillat gjennomsiktigheit"
9
obs-studio-27.1.3.tar.xz/plugins/mac-syphon/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Source="Font"
3
obs-studio-27.0.1.tar.xz/plugins/mac-syphon/syphon.m -> obs-studio-27.1.3.tar.xz/plugins/mac-syphon/syphon.m Changed
33
 
1
@@ -1039,17 +1039,12 @@
2
    if (!s->tex)
3
        return;
4
 
5
-   bool disable_blending = !s->allow_transparency;
6
-   if (disable_blending) {
7
-       gs_enable_blending(false);
8
-       gs_enable_color(true, true, true, false);
9
-   }
10
-
11
    gs_vertexbuffer_flush(s->vertbuffer);
12
    gs_load_vertexbuffer(s->vertbuffer);
13
    gs_load_indexbuffer(NULL);
14
    gs_load_samplerstate(s->sampler, 0);
15
-   gs_technique_t *tech = gs_effect_get_technique(s->effect, "Draw");
16
+   const char *tech_name = s->allow_transparency ? "Draw" : "DrawOpaque";
17
+   gs_technique_t *tech = gs_effect_get_technique(s->effect, tech_name);
18
    gs_effect_set_texture(gs_effect_get_param_by_name(s->effect, "image"),
19
                  s->tex);
20
    gs_technique_begin(tech);
21
@@ -1059,11 +1054,6 @@
22
 
23
    gs_technique_end_pass(tech);
24
    gs_technique_end(tech);
25
-
26
-   if (disable_blending) {
27
-       gs_enable_color(true, true, true, true);
28
-       gs_enable_blending(true);
29
-   }
30
 }
31
 
32
 static uint32_t syphon_get_width(void *data)
33
obs-studio-27.0.1.tar.xz/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/dal-plugin/CMakeLists.txt Changed
9
 
1
@@ -104,6 +104,6 @@
2
 add_custom_command(TARGET mac-dal-plugin
3
    POST_BUILD
4
    COMMAND rm -rf "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/obs-mac-virtualcam.plugin" || true
5
-   COMMAND ${CMAKE_COMMAND} -E copy_directory ${TARGET_DIR}/obs-mac-virtualcam.plugin "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/obs-mac-virtualcam.plugin"
6
+   COMMAND ${CMAKE_COMMAND} -E copy_directory ${TARGET_DIR}/obs-mac-virtualcam.plugin "${OBS_OUTPUT_DIR}/$<CONFIGURATION>/data/obs-plugins/mac-virtualcam/obs-mac-virtualcam.plugin"
7
    COMMENT "Copy plugin to destination"
8
 )
9
obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/an-ES.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="Camera web virtual de macOS"
3
obs-studio-27.0.1.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/en-US.ini Changed
4
 
1
@@ -1,1 +1,1 @@
2
-Plugin_Name="macOS Virtual Webcam"
3
+Plugin_Name="macOS Virtual Webcam"
4
obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/gd-GB.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="Camara-lìn biortail macOS"
3
obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/hi-IN.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="macOS आभासी वेबकैम"
3
obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/kmr-TR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="macOS kameraya tevnê ya berdest"
3
obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/nb-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="macOS Virtuelt nettkamera"
3
obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/data/locale/szl-PL.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Plugin_Name="Wirtualno kamera macOS"
3
obs-studio-27.0.1.tar.xz/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm -> obs-studio-27.1.3.tar.xz/plugins/mac-virtualcam/src/obs-plugin/plugin-main.mm Changed
19
 
1
@@ -58,7 +58,7 @@
2
        if ([app bundleIdentifier] != nil) {
3
            NSURL *bundleURL = [app bundleURL];
4
            NSString *pluginPath =
5
-               @"Contents/Resources/data/obs-mac-virtualcam.plugin";
6
+               @"Contents/Resources/data/obs-plugins/mac-virtualcam/obs-mac-virtualcam.plugin";
7
 
8
            NSURL *pluginUrl = [bundleURL
9
                URLByAppendingPathComponent:pluginPath];
10
@@ -66,7 +66,7 @@
11
        } else {
12
            dalPluginSourcePath = [[[[app executableURL]
13
                URLByAppendingPathComponent:
14
-                   @"../data/obs-mac-virtualcam.plugin"]
15
+                   @"../data/obs-plugins/mac-virtualcam/obs-mac-virtualcam.plugin"]
16
                path]
17
                stringByReplacingOccurrencesOfString:@"obs/"
18
                              withString:@""];
19
obs-studio-27.0.1.tar.xz/plugins/mac-vth264/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/ar-SA.ini Changed
14
 
1
@@ -1,4 +1,12 @@
2
+VTH264EncHW="جهاز تشفير لـ(Apple VT H264)"
3
+VTH264EncSW="برنامج تشفير لـ(Apple VT H264)"
4
+VTEncoder="صندوق أدوات تشفير الفيديو"
5
 Bitrate="معدّل البِت"
6
+UseMaxBitrate="حد معدل البِت"
7
+MaxBitrate="الحد الأقصى لمعدل البِت"
8
+MaxBitrateWindow="نافذة الحد الأقصى لمعدل البِت (بالثواني)"
9
+KeyframeIntervalSec="الفاصل الزمني للإطار الرئيسي (ثواني ، 0 = تلقائي)"
10
 Profile="الملف الشخصي"
11
 None="(بلا)"
12
 DefaultEncoder="(المرمّز الافتراضي)"
13
+UseBFrames="استخدام إطارات ب"
14
obs-studio-27.0.1.tar.xz/plugins/mac-vth264/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/en-US.ini Changed
28
 
1
@@ -1,13 +1,13 @@
2
-VTH264EncHW="Apple VT H264 Hardware Encoder"
3
-VTH264EncSW="Apple VT H264 Software Encoder"
4
-VTEncoder="VideoToolbox Encoder"
5
-Bitrate="Bitrate"
6
-UseMaxBitrate="Limit bitrate"
7
-MaxBitrate="Maximum bitrate"
8
-MaxBitrateWindow="Maximum bitrate window (seconds)"
9
-KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
10
-Profile="Profile"
11
-None="(None)"
12
-DefaultEncoder="(Default Encoder)"
13
-UseBFrames="Use B-Frames"
14
-
15
+VTH264EncHW="Apple VT H264 Hardware Encoder"
16
+VTH264EncSW="Apple VT H264 Software Encoder"
17
+VTEncoder="VideoToolbox Encoder"
18
+Bitrate="Bitrate"
19
+UseMaxBitrate="Limit bitrate"
20
+MaxBitrate="Maximum bitrate"
21
+MaxBitrateWindow="Maximum bitrate window (seconds)"
22
+KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
23
+Profile="Profile"
24
+None="(None)"
25
+DefaultEncoder="(Default Encoder)"
26
+UseBFrames="Use B-Frames"
27
+
28
obs-studio-27.0.1.tar.xz/plugins/mac-vth264/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/gd-GB.ini Changed
15
 
1
@@ -1,5 +1,12 @@
2
+VTH264EncHW="Inneal-còdachaidh bathair-chruaidh Apple VT H264"
3
+VTH264EncSW="Inneal-còdachaidh bathair-bhog Apple VT H264"
4
+VTEncoder="Inneal-còdachaidh VideoToolbox"
5
 Bitrate="Reat bhiodan"
6
+UseMaxBitrate="Cuingich an reat bhiodan"
7
+MaxBitrate="Reat bhiodan as motha"
8
+MaxBitrateWindow="Uinneag an reat bhiodan as motha (diog)"
9
 KeyframeIntervalSec="Eadaramh nam frèamaichean-iuchrach (diog, fèin-obrachail)"
10
 Profile="Pròifil"
11
 None="(Chan eil gin)"
12
-DefaultEncoder="(An t-inneal-còdachaidh tùsail)"
13
+DefaultEncoder="(An t-inneal-còdachaidh bunaiteach)"
14
+UseBFrames="Cleachd frèamaichean-B"
15
obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/hi-IN.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+VTH264EncHW="Apple VT H264 हार्डवेयर एनकोडर"
3
+VTH264EncSW="Apple VT H264 सॉफ़्टवेयर एनकोडर"
4
+VTEncoder="VideoToolbox एनकोडर"
5
+Bitrate="बिटरेट"
6
+UseMaxBitrate="बिटरेट सीमित करें"
7
+MaxBitrate="अधिकतम बिटरेट"
8
+MaxBitrateWindow="अधिकतम बिटरेट विंडो (सेकेंड)"
9
+KeyframeIntervalSec="कीफ़्रेम अंतराल (सेकंड, 0=स्वतः)"
10
+Profile="प्रोफ़ाइल"
11
+None="(कोई नहीं)"
12
+DefaultEncoder="(डिफ़ॉल्ट एनकोडर)"
13
+UseBFrames="बी-फ्रेम्स का प्रयोग करें"
14
obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/kmr-TR.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+VTH264EncHW="Kodkirina alavê Apple VT H264"
3
+VTH264EncSW="Kodkirina nermalavê Apple VT H264"
4
+VTEncoder="Kodkirina amûra vîdyoyê"
5
+Bitrate="Leza bit"
6
+UseMaxBitrate="Leza bit bi sînor bike"
7
+MaxBitrate="Leza bit a herî pir"
8
+MaxBitrateWindow="Çarçoveya leza bit a herî pir (çirke)"
9
+KeyframeIntervalSec="Kilîda çarçovê (çirke, 0=xweber)"
10
+Profile="Profîl"
11
+None="(Ne yek)"
12
+DefaultEncoder="(Kodkirina berdest)"
13
+UseBFrames="B-Tarik bi kar bîne"
14
obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Profil"
3
obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Perfil"
3
obs-studio-27.1.3.tar.xz/plugins/mac-vth264/data/locale/szl-PL.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+VTH264EncHW="Sprzyntowy Enkoder Apple VT H264"
3
+VTH264EncSW="Programowy Enkoder Apple VT H264"
4
+VTEncoder="Enkoder VideoToolbox"
5
+MaxBitrate="Maksymalny bitrate"
6
+MaxBitrateWindow="Ôkynko maksymalnego bitrate (sekōndy)"
7
+KeyframeIntervalSec="Abzac miyndzy klotkami kluczowymi (sekōndy, 0=autōmatyczny)"
8
+Profile="Profil"
9
+None="(Brak)"
10
+DefaultEncoder="(Sztandardowy enkoder)"
11
+UseBFrames="Użyj rōmek B-Frame"
12
obs-studio-27.1.3.tar.xz/plugins/obs-browser/.gitignore Added
87
 
1
@@ -0,0 +1,85 @@
2
+#binaries
3
+*.exe
4
+*.dll
5
+*.dylib
6
+*.so
7
+
8
+#cmake
9
+/cmbuild/
10
+/build/
11
+/build32/
12
+/build64/
13
+/release/
14
+/release32/
15
+/release64/
16
+/debug/
17
+/debug32/
18
+/debug64/
19
+/builds/
20
+*.o.d
21
+*.ninja
22
+.ninja*
23
+.dirstamp
24
+
25
+#xcode
26
+*.xcodeproj/
27
+
28
+#other stuff (windows stuff, qt moc stuff, etc)
29
+Release_MD/
30
+Release/
31
+Debug/
32
+x64/
33
+ipch/
34
+GeneratedFiles/
35
+.moc/
36
+
37
+/other/
38
+
39
+#make stuff
40
+configure
41
+depcomp
42
+install-sh
43
+Makefile.in
44
+Makefile
45
+
46
+#random useless file stuff
47
+*.dmg
48
+*.app
49
+.DS_Store
50
+.directory
51
+.hg
52
+.depend
53
+tags
54
+*.trace
55
+*.vsp
56
+*.psess
57
+*.swp
58
+*.dat
59
+*.clbin
60
+*.log
61
+*.tlog
62
+*.sdf
63
+*.opensdf
64
+*.xml
65
+*.ipch
66
+*.css
67
+*.xslt
68
+*.aps
69
+*.suo
70
+*.ncb
71
+*.user
72
+*.lo
73
+*.ilk
74
+*.la
75
+*.o
76
+*.obj
77
+*.pdb
78
+*.res
79
+*.dep
80
+*.zip
81
+*.lnk
82
+*.chm
83
+*~
84
+.DS_Store
85
+*/.DS_Store
86
+*/**/.DS_Store
87
obs-studio-27.0.1.tar.xz/plugins/obs-browser/README.md -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/README.md Changed
165
 
1
@@ -60,8 +60,24 @@
2
 * obsVirtualcamStopped
3
 * obsExit
4
 
5
-### Get the current scene
6
 
7
+### Control OBS
8
+#### Get webpage control permissions
9
+Permissions required: NONE
10
+```js
11
+/**
12
+ * @type {number} level - The level of permissions. 0 for NONE, 1 for READ_ONLY, 2 for BASIC, 3 for ADVANCED and 4 for ALL
13
+ *
14
+ * @param {function} callback
15
+ * @returns {Level}
16
+ */
17
+window.obsstudio.getControlLevel(function (level) {
18
+    console.log(level)
19
+})
20
+```
21
+
22
+#### Get the current scene
23
+Permissions required: READ_ONLY
24
 ```js
25
 /**
26
  * @typedef {Object} Scene
27
@@ -79,8 +95,8 @@
28
 })
29
 ```
30
 
31
-### Get OBS output status
32
-
33
+#### Get OBS output status
34
+Permissions required: READ_ONLY
35
 ```js
36
 /**
37
  * @typedef {Object} Status
38
@@ -100,8 +116,8 @@
39
 })
40
 ```
41
 
42
-### Save OBS Replay Buffer
43
-
44
+#### Save the Replay Buffer
45
+Permissions required: BASIC
46
 ```js
47
 /**
48
  * Does not accept any parameters and does not return anything
49
@@ -109,6 +125,97 @@
50
 window.obsstudio.saveReplayBuffer()
51
 ```
52
 
53
+#### Start the Replay Buffer
54
+Permissions required: ADVANCED
55
+```js
56
+/**
57
+ * Does not accept any parameters and does not return anything
58
+ */
59
+window.obsstudio.startReplayBuffer()
60
+```
61
+
62
+#### Stop the Replay Buffer
63
+Permissions required: ADVANCED
64
+```js
65
+/**
66
+ * Does not accept any parameters and does not return anything
67
+ */
68
+window.obsstudio.stopReplayBuffer()
69
+```
70
+
71
+#### Start streaming
72
+Permissions required: ALL
73
+```js
74
+/**
75
+ * Does not accept any parameters and does not return anything
76
+ */
77
+window.obsstudio.startStreaming()
78
+```
79
+
80
+#### Stop streaming
81
+Permissions required: ALL
82
+```js
83
+/**
84
+ * Does not accept any parameters and does not return anything
85
+ */
86
+window.obsstudio.stopStreaming()
87
+```
88
+
89
+#### Start recording
90
+Permissions required: ALL
91
+```js
92
+/**
93
+ * Does not accept any parameters and does not return anything
94
+ */
95
+window.obsstudio.startRecording()
96
+```
97
+
98
+#### Stop recording
99
+Permissions required: ALL
100
+```js
101
+/**
102
+ * Does not accept any parameters and does not return anything
103
+ */
104
+window.obsstudio.stopRecording()
105
+```
106
+
107
+#### Pause recording
108
+Permissions required: ALL
109
+```js
110
+/**
111
+ * Does not accept any parameters and does not return anything
112
+ */
113
+window.obsstudio.pauseRecording()
114
+```
115
+
116
+#### Unpause recording
117
+Permissions required: ALL
118
+```js
119
+/**
120
+ * Does not accept any parameters and does not return anything
121
+ */
122
+window.obsstudio.unpauseRecording()
123
+```
124
+
125
+#### Start the Virtual Camera
126
+Permissions required: ALL
127
+```js
128
+/**
129
+ * Does not accept any parameters and does not return anything
130
+ */
131
+window.obsstudio.startVirtualcam()
132
+```
133
+
134
+#### Stop the Virtual Camera
135
+Permissions required: ALL
136
+```js
137
+/**
138
+ * Does not accept any parameters and does not return anything
139
+ */
140
+window.obsstudio.stopVirtualcam()
141
+```
142
+
143
+
144
 ### Register for visibility callbacks
145
 
146
 **This method is legacy. Register an event listener instead.**
147
@@ -122,7 +229,7 @@
148
  * @param {boolean} visibility - True -> visible, False -> hidden
149
  */
150
 window.obsstudio.onVisibilityChange = function(visibility) {
151
-   
152
+
153
 };
154
 ```
155
 
156
@@ -139,7 +246,7 @@
157
  * @param {bool} True -> active, False -> inactive
158
  */
159
 window.obsstudio.onActiveChange = function(active) {
160
-   
161
+
162
 };
163
 ```
164
 
165
obs-studio-27.0.1.tar.xz/plugins/obs-browser/browser-app.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/browser-app.cpp Changed
63
 
1
@@ -104,6 +104,13 @@
2
 #endif
3
 }
4
 
5
+std::vector<std::string> exposedFunctions = {
6
+   "getControlLevel",   "getCurrentScene",  "getStatus",
7
+   "startRecording",    "stopRecording",    "startStreaming",
8
+   "stopStreaming",     "pauseRecording",   "unpauseRecording",
9
+   "startReplayBuffer", "stopReplayBuffer", "saveReplayBuffer",
10
+   "startVirtualcam",   "stopVirtualcam"};
11
+
12
 void BrowserApp::OnContextCreated(CefRefPtr<CefBrowser> browser,
13
                  CefRefPtr<CefFrame>,
14
                  CefRefPtr<CefV8Context> context)
15
@@ -119,20 +126,11 @@
16
    obsStudioObj->SetValue("pluginVersion", pluginVersion,
17
                   V8_PROPERTY_ATTRIBUTE_NONE);
18
 
19
-   CefRefPtr<CefV8Value> getCurrentScene =
20
-       CefV8Value::CreateFunction("getCurrentScene", this);
21
-   obsStudioObj->SetValue("getCurrentScene", getCurrentScene,
22
-                  V8_PROPERTY_ATTRIBUTE_NONE);
23
-
24
-   CefRefPtr<CefV8Value> getStatus =
25
-       CefV8Value::CreateFunction("getStatus", this);
26
-   obsStudioObj->SetValue("getStatus", getStatus,
27
-                  V8_PROPERTY_ATTRIBUTE_NONE);
28
-
29
-   CefRefPtr<CefV8Value> saveReplayBuffer =
30
-       CefV8Value::CreateFunction("saveReplayBuffer", this);
31
-   obsStudioObj->SetValue("saveReplayBuffer", saveReplayBuffer,
32
-                  V8_PROPERTY_ATTRIBUTE_NONE);
33
+   for (std::string name : exposedFunctions) {
34
+       CefRefPtr<CefV8Value> func =
35
+           CefV8Value::CreateFunction(name, this);
36
+       obsStudioObj->SetValue(name, func, V8_PROPERTY_ATTRIBUTE_NONE);
37
+   }
38
 
39
 #if !ENABLE_WASHIDDEN
40
    int id = browser->GetIdentifier();
41
@@ -355,12 +353,19 @@
42
    return true;
43
 }
44
 
45
+bool IsValidFunction(std::string function)
46
+{
47
+   std::vector<std::string>::iterator iterator;
48
+   iterator = std::find(exposedFunctions.begin(), exposedFunctions.end(),
49
+                function);
50
+   return iterator != exposedFunctions.end();
51
+}
52
+
53
 bool BrowserApp::Execute(const CefString &name, CefRefPtr<CefV8Value>,
54
             const CefV8ValueList &arguments,
55
             CefRefPtr<CefV8Value> &, CefString &)
56
 {
57
-   if (name == "getCurrentScene" || name == "getStatus" ||
58
-       name == "saveReplayBuffer") {
59
+   if (IsValidFunction(name.ToString())) {
60
        if (arguments.size() == 1 && arguments[0]->IsFunction()) {
61
            callbackId++;
62
            callbackMap[callbackId] = arguments[0];
63
obs-studio-27.0.1.tar.xz/plugins/obs-browser/browser-client.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/browser-client.cpp Changed
205
 
1
@@ -23,20 +23,12 @@
2
 #include <obs-frontend-api.h>
3
 #include <obs.hpp>
4
 #include <util/platform.h>
5
+#include <QApplication>
6
+#include <QThread>
7
+#include <QToolTip>
8
 
9
 using namespace json11;
10
 
11
-BrowserClient::~BrowserClient()
12
-{
13
-#if defined(SHARED_TEXTURE_SUPPORT_ENABLED) && USE_TEXTURE_COPY
14
-   if (sharing_available) {
15
-       obs_enter_graphics();
16
-       gs_texture_destroy(texture);
17
-       obs_leave_graphics();
18
-   }
19
-#endif
20
-}
21
-
22
 CefRefPtr<CefLoadHandler> BrowserClient::GetLoadHandler()
23
 {
24
    return this;
25
@@ -106,34 +98,70 @@
26
        return false;
27
    }
28
 
29
-   if (name == "getCurrentScene") {
30
-       OBSSource current_scene = obs_frontend_get_current_scene();
31
-       obs_source_release(current_scene);
32
-
33
-       if (!current_scene)
34
-           return false;
35
-
36
-       const char *name = obs_source_get_name(current_scene);
37
-       if (!name)
38
-           return false;
39
-
40
-       json = Json::object{
41
-           {"name", name},
42
-           {"width", (int)obs_source_get_width(current_scene)},
43
-           {"height", (int)obs_source_get_height(current_scene)}};
44
-
45
-   } else if (name == "getStatus") {
46
-       json = Json::object{
47
-           {"recording", obs_frontend_recording_active()},
48
-           {"streaming", obs_frontend_streaming_active()},
49
-           {"recordingPaused", obs_frontend_recording_paused()},
50
-           {"replaybuffer", obs_frontend_replay_buffer_active()},
51
-           {"virtualcam", obs_frontend_virtualcam_active()}};
52
-
53
-   } else if (name == "saveReplayBuffer") {
54
-       obs_frontend_replay_buffer_save();
55
-   } else {
56
-       return false;
57
+   // Fall-through switch, so that higher levels also have lower-level rights
58
+   switch (webpage_control_level) {
59
+   case ControlLevel::All:
60
+       if (name == "startRecording") {
61
+           obs_frontend_recording_start();
62
+       } else if (name == "stopRecording") {
63
+           obs_frontend_recording_stop();
64
+       } else if (name == "startStreaming") {
65
+           obs_frontend_streaming_start();
66
+       } else if (name == "stopStreaming") {
67
+           obs_frontend_streaming_stop();
68
+       } else if (name == "pauseRecording") {
69
+           obs_frontend_recording_pause(true);
70
+       } else if (name == "unpauseRecording") {
71
+           obs_frontend_recording_pause(false);
72
+       } else if (name == "startVirtualcam") {
73
+           obs_frontend_start_virtualcam();
74
+       } else if (name == "stopVirtualcam") {
75
+           obs_frontend_stop_virtualcam();
76
+       }
77
+   case ControlLevel::Advanced:
78
+       if (name == "startReplayBuffer") {
79
+           obs_frontend_replay_buffer_start();
80
+       } else if (name == "stopReplayBuffer") {
81
+           obs_frontend_replay_buffer_stop();
82
+       }
83
+   case ControlLevel::Basic:
84
+       if (name == "saveReplayBuffer") {
85
+           obs_frontend_replay_buffer_save();
86
+       }
87
+   case ControlLevel::ReadOnly:
88
+       if (name == "getCurrentScene") {
89
+           OBSSource current_scene =
90
+               obs_frontend_get_current_scene();
91
+           obs_source_release(current_scene);
92
+
93
+           if (!current_scene)
94
+               return false;
95
+
96
+           const char *name = obs_source_get_name(current_scene);
97
+           if (!name)
98
+               return false;
99
+
100
+           json = Json::object{
101
+               {"name", name},
102
+               {"width",
103
+                (int)obs_source_get_width(current_scene)},
104
+               {"height",
105
+                (int)obs_source_get_height(current_scene)}};
106
+       } else if (name == "getStatus") {
107
+           json = Json::object{
108
+               {"recording", obs_frontend_recording_active()},
109
+               {"streaming", obs_frontend_streaming_active()},
110
+               {"recordingPaused",
111
+                obs_frontend_recording_paused()},
112
+               {"replaybuffer",
113
+                obs_frontend_replay_buffer_active()},
114
+               {"virtualcam",
115
+                obs_frontend_virtualcam_active()}};
116
+       }
117
+   case ControlLevel::None:
118
+       if (name == "getControlLevel") {
119
+           json = Json((int)webpage_control_level);
120
+       }
121
    }
122
 
123
    CefRefPtr<CefProcessMessage> msg =
124
@@ -172,6 +200,20 @@
125
 #endif
126
 }
127
 
128
+bool BrowserClient::OnTooltip(CefRefPtr<CefBrowser>, CefString &text)
129
+{
130
+#if QT_VERSION >= QT_VERSION_CHECK(5, 10, 0)
131
+   std::string str_text = text;
132
+   QMetaObject::invokeMethod(
133
+       QCoreApplication::instance()->thread(), [str_text]() {
134
+           QToolTip::showText(QCursor::pos(), str_text.c_str());
135
+       });
136
+   return true;
137
+#else
138
+   UNUSED_PARAMETER(text);
139
+#endif
140
+}
141
+
142
 void BrowserClient::OnPaint(CefRefPtr<CefBrowser>, PaintElementType type,
143
                const RectList &, const void *buffer, int width,
144
                int height)
145
@@ -222,38 +264,35 @@
146
 
147
    if (shared_handle != last_handle) {
148
        obs_enter_graphics();
149
-#if USE_TEXTURE_COPY
150
-       gs_texture_destroy(texture);
151
-       texture = nullptr;
152
-#endif
153
-       gs_texture_destroy(bs->texture);
154
-       bs->texture = nullptr;
155
-
156
-#if USE_TEXTURE_COPY
157
-       texture = gs_texture_open_shared(
158
-           (uint32_t)(uintptr_t)shared_handle);
159
 
160
-       uint32_t cx = gs_texture_get_width(texture);
161
-       uint32_t cy = gs_texture_get_height(texture);
162
-       gs_color_format format = gs_texture_get_color_format(texture);
163
+       if (bs->texture) {
164
+           if (bs->extra_texture) {
165
+               gs_texture_destroy(bs->extra_texture);
166
+               bs->extra_texture = nullptr;
167
+           }
168
+           gs_texture_destroy(bs->texture);
169
+           bs->texture = nullptr;
170
+       }
171
 
172
-       bs->texture = gs_texture_create(cx, cy, format, 1, nullptr, 0);
173
-#else
174
        bs->texture = gs_texture_open_shared(
175
            (uint32_t)(uintptr_t)shared_handle);
176
-#endif
177
+       if (bs->texture) {
178
+           const uint32_t cx = gs_texture_get_width(bs->texture);
179
+           const uint32_t cy = gs_texture_get_height(bs->texture);
180
+           const gs_color_format format =
181
+               gs_texture_get_color_format(bs->texture);
182
+           const gs_color_format linear_format =
183
+               gs_generalize_format(format);
184
+           if (linear_format != format) {
185
+               bs->extra_texture = gs_texture_create(
186
+                   cx, cy, linear_format, 1, nullptr, 0);
187
+           }
188
+       }
189
+
190
        obs_leave_graphics();
191
 
192
        last_handle = shared_handle;
193
    }
194
-
195
-#if USE_TEXTURE_COPY
196
-   if (texture && bs->texture) {
197
-       obs_enter_graphics();
198
-       gs_copy_texture(bs->texture, texture);
199
-       obs_leave_graphics();
200
-   }
201
-#endif
202
 }
203
 #endif
204
 
205
obs-studio-27.0.1.tar.xz/plugins/obs-browser/browser-client.hpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/browser-client.hpp Changed
57
 
1
@@ -21,8 +21,7 @@
2
 #include <graphics/graphics.h>
3
 #include "cef-headers.hpp"
4
 #include "browser-config.h"
5
-
6
-#define USE_TEXTURE_COPY 0
7
+#include "obs-browser-source.hpp"
8
 
9
 struct BrowserSource;
10
 
11
@@ -37,9 +36,6 @@
12
              public CefLoadHandler {
13
 
14
 #ifdef SHARED_TEXTURE_SUPPORT_ENABLED
15
-#if USE_TEXTURE_COPY
16
-   gs_texture_t *texture = nullptr;
17
-#endif
18
 #ifdef _WIN32
19
    void *last_handle = INVALID_HANDLE_VALUE;
20
 #elif defined(__APPLE__)
21
@@ -48,6 +44,7 @@
22
 #endif
23
    bool sharing_available = false;
24
    bool reroute_audio = true;
25
+   ControlLevel webpage_control_level = DEFAULT_CONTROL_LEVEL;
26
 
27
 public:
28
    BrowserSource *bs;
29
@@ -61,15 +58,15 @@
30
    int frames_per_buffer;
31
 #endif
32
    inline BrowserClient(BrowserSource *bs_, bool sharing_avail,
33
-                bool reroute_audio_)
34
+                bool reroute_audio_,
35
+                ControlLevel webpage_control_level_)
36
        : sharing_available(sharing_avail),
37
          reroute_audio(reroute_audio_),
38
+         webpage_control_level(webpage_control_level_),
39
          bs(bs_)
40
    {
41
    }
42
 
43
-   virtual ~BrowserClient();
44
-
45
    /* CefClient */
46
    virtual CefRefPtr<CefLoadHandler> GetLoadHandler() override;
47
    virtual CefRefPtr<CefRenderHandler> GetRenderHandler() override;
48
@@ -97,6 +94,8 @@
49
                      const CefString &message,
50
                      const CefString &source,
51
                      int line) override;
52
+   virtual bool OnTooltip(CefRefPtr<CefBrowser> browser,
53
+                  CefString &text) override;
54
 
55
    /* CefLifeSpanHandler */
56
    virtual bool
57
obs-studio-27.0.1.tar.xz/plugins/obs-browser/browser-version.h -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/browser-version.h Changed
10
 
1
@@ -1,7 +1,7 @@
2
 #pragma once
3
 
4
 #define OBS_BROWSER_VERSION_MAJOR 2
5
-#define OBS_BROWSER_VERSION_MINOR 14
6
+#define OBS_BROWSER_VERSION_MINOR 16
7
 #define OBS_BROWSER_VERSION_PATCH 3
8
 
9
 #ifndef MAKE_SEMANTIC_VERSION
10
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ar-SA.ini Changed
14
 
1
@@ -11,6 +11,12 @@
2
 BrowserSource="متصفح"
3
 CustomFrameRate="استخدام معدل إطارات مخصص"
4
 RerouteAudio="التحكم في الصوت عن طريق OBS"
5
+WebpageControlLevel="أُذُونَات الصفحة"
6
+WebpageControlLevel.Level.None="لا يوجد إذن للوصول إلى (OBS)"
7
+WebpageControlLevel.Level.ReadOnly="الوصول لـ(OBS) للقراءة ققط"
8
+WebpageControlLevel.Level.Basic="الوصول الأساسي ل OBS (حفظ مؤقت لإعادة العرض , إلخ..)"
9
+WebpageControlLevel.Level.Advanced="وصول متقدم ل OBS (تغيير المشاهد, تشغيل/إيقاف إعادة العرض المؤقت, إلخ...)"
10
+WebpageControlLevel.Level.All="الوصول الكامل ل OBS (بدء/ايقاف البث المباشر بدون إنذار, إلخ...)"
11
 Error.Title="تعذر تحميل هذه الصفحة!"
12
 Error.Description="تأكد من صحة العنوان ، وأن الموقع لا يواجه مشاكل."
13
 Error.Retry="انقر لإعادة المحاولة"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ca-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ca-ES.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="Navegador"
3
 CustomFrameRate="Utilitza una taxa de fotogrames personalitzada"
4
 RerouteAudio="Control d'àudio mitjançant l'OBS"
5
+WebpageControlLevel="Permisos de la pàgina"
6
+WebpageControlLevel.Level.None="Sense accés a l'OBS"
7
+WebpageControlLevel.Level.ReadOnly="Accés de només lectura a l'OBS"
8
+WebpageControlLevel.Level.Basic="Accés bàsic a l'OBS (desa la memòria intermèdia de reproducció, etc.)"
9
+WebpageControlLevel.Level.Advanced="Accés avançat a l'OBS (canvia d'escenes, inicia/atura la memòria intermèdia de reproducció, etc.)"
10
+WebpageControlLevel.Level.All="Accés complet a l'OBS (inicia/atura la transmissió sense avís, etc.)"
11
 Error.Title="No s'ha pogut carregar la pàgina!"
12
 Error.Description="Assegureu-vos que l'adreça sigui correcta i que el lloc no tingui problemes."
13
 Error.Retry="Feu clic aquí per tornar a provar"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/cs-CZ.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/cs-CZ.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Prohlížeč"
3
 CustomFrameRate="Použít vlastní snímkovací frekvenci"
4
 RerouteAudio="Ovládat zvuk pomocí OBS"
5
+WebpageControlLevel="Oprávnění stránky"
6
+WebpageControlLevel.Level.None="Žádný přístup k OBS"
7
+WebpageControlLevel.Level.ReadOnly="Pouze přístup pro čtení k OBS"
8
+WebpageControlLevel.Level.Basic="Základní přístup k OBS (Uložit záznam, etc.)"
9
+WebpageControlLevel.Level.Advanced="Pokročilý přístup k OBS (Změnit scény, spustit/zastavit záznam do paměti, etc.)"
10
+WebpageControlLevel.Level.All="Plný přístup k OBS (Začít/Ukončit vysílání bez varování, etc.)"
11
 Error.Title="Stránku se nepodařilo načíst!"
12
 Error.Description="Zkontroluj, zda je adresa správná a cílové stránky nemají potíže."
13
 Error.Retry="Kliknutím zkuste znovu"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/da-DK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/da-DK.ini Changed
14
 
1
@@ -8,6 +8,12 @@
2
 RestartCEF="Genstart CEF"
3
 CustomFrameRate="Benyt tilpasset billedhastighed"
4
 RerouteAudio="Komtrollér lyd via OBS"
5
+WebpageControlLevel="Sidetilladelser"
6
+WebpageControlLevel.Level.None="Ingen adgang til OBS"
7
+WebpageControlLevel.Level.ReadOnly="Skrivebeskyttet adgang til OBS"
8
+WebpageControlLevel.Level.Basic="Basisadgang til OBS (Gem genafspilningsbuffer mv.)"
9
+WebpageControlLevel.Level.Advanced="Avanceret adgang til OBS (Skift scener, Start/Stop genafsp.buffer mv.)"
10
+WebpageControlLevel.Level.All="Fuld adgang til OBS (Start/Stop streaming uden advarsel mv.)"
11
 Error.Title="Siden kunne ikke indlæses!"
12
 Error.Description="Sørg for, at adressen er korrekt, og at webstedet ikke har problemer."
13
 Error.Retry="Klik hér, for at prøve igen"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/de-DE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/de-DE.ini Changed
14
 
1
@@ -8,6 +8,12 @@
2
 RestartCEF="CEF neu starten"
3
 CustomFrameRate="Benutzerdefinierte FPS verwenden"
4
 RerouteAudio="Audio über OBS steuern"
5
+WebpageControlLevel="Seitenberechtigungen"
6
+WebpageControlLevel.Level.None="Kein Zugriff auf OBS"
7
+WebpageControlLevel.Level.ReadOnly="Lesezugriff auf OBS"
8
+WebpageControlLevel.Level.Basic="Grundlegender Zugriff auf OBS (Wiederholungspuffer speichern, etc.)"
9
+WebpageControlLevel.Level.Advanced="Erweiterter Zugriff auf OBS (Szenen wechseln, Wiederholungspuffer starten/beenden, etc.)"
10
+WebpageControlLevel.Level.All="Voller Zugriff auf OBS (Stream ohne Warnung starten/beenden, etc.)"
11
 Error.Title="Diese Seite konnte nicht geladen werden!"
12
 Error.Description="Stellen Sie sicher, dass die Adresse korrekt ist und dass die Seite keine Probleme hat."
13
 Error.Retry="Hier klicken, um es erneut zu versuchen"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/en-US.ini Changed
29
 
1
@@ -11,6 +11,12 @@
2
 BrowserSource="Browser"
3
 CustomFrameRate="Use custom frame rate"
4
 RerouteAudio="Control audio via OBS"
5
+WebpageControlLevel="Page permissions"
6
+WebpageControlLevel.Level.None="No access to OBS"
7
+WebpageControlLevel.Level.ReadOnly="Read-only access to OBS"
8
+WebpageControlLevel.Level.Basic="Basic access to OBS (Save replay buffer, etc.)"
9
+WebpageControlLevel.Level.Advanced="Advanced access to OBS (Change scenes, Start/Stop replay buffer, etc.)"
10
+WebpageControlLevel.Level.All="Full access to OBS (Start/Stop streaming without warning, etc.)"
11
 
12
 Error.Title="Couldn't load that page!"
13
 Error.Description="Make sure the address is correct, and that the site isn't having issues."
14
@@ -21,10 +27,12 @@
15
 # Error codes in CEF are fetched direct from Chromium
16
 # CEF Reference: https://bitbucket.org/chromiumembedded/cef/src/master/include/base/internal/cef_net_error_list.h
17
 # Chromium Reference: https://chromium.googlesource.com/chromium/src/+/master/net/base/net_error_list.h#
18
-# Cleaned up list of codes: http://txt.wzd.li/2019-12-28_12-24-39.txt
19
+# Cleaned up list of codes: https://gist.github.com/WizardCM/1acead41cce983d54996a1ee484a4523
20
 ErrorCode.ERR_CONNECTION_REFUSED="Server refused the connection"
21
 ErrorCode.ERR_NAME_NOT_RESOLVED="Server's IP address not found"
22
 ErrorCode.ERR_CONNECTION_TIMED_OUT="Connection timed out"
23
 ErrorCode.ERR_FILE_NOT_FOUND="File not found"
24
 ErrorCode.ERR_FAILED="Failed to connect"
25
 ErrorCode.ERR_NETWORK_CHANGED="Network changed"
26
+ErrorCode.ERR_SSL_VERSION_INTERFERENCE="SSL version interference. TLS 1.3 might be blocked or modified."
27
+ErrorCode.ERR_SSL_PROTOCOL_ERROR="SSL protocol error. Could not make a secure connection."
28
\ No newline at end of file
29
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/es-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/es-ES.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="Navegador"
3
 CustomFrameRate="Usar frecuencia de imágenes personalizada"
4
 RerouteAudio="Controlar audio vía OBS"
5
+WebpageControlLevel="Permisos de página"
6
+WebpageControlLevel.Level.None="Sin acceso a OBS"
7
+WebpageControlLevel.Level.ReadOnly="Acceso a OBS de solo lectura"
8
+WebpageControlLevel.Level.Basic="Acceso básico a OBS (Guardar búfer de repetición, etc.)"
9
+WebpageControlLevel.Level.Advanced="Acceso avanzado a OBS (Cambiar escenas, Iniciar/Detener búfer de repetición, etc.)"
10
+WebpageControlLevel.Level.All="Acceso completo a OBS (Inicio/Detener transmisión sin previo aviso, etc.)"
11
 Error.Title="¡No se pudo cargar esa página!"
12
 Error.Description="Asegúrese de que la dirección es correcta, y que la web no está teniendo problemas."
13
 Error.Retry="Haz clic aquí para reintentarlo"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/eu-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/eu-ES.ini Changed
9
 
1
@@ -9,3 +9,7 @@
2
 BrowserSource="Nabigatzailea"
3
 CustomFrameRate="Erabili fotograma-emari pertsonalizatua"
4
 RerouteAudio="Kontrolatu audioa OBS bidez"
5
+Error.Title="Ezin izan da orri hori kargatu!"
6
+Error.Code="Errorea: %1"
7
+ErrorCode.ERR_FILE_NOT_FOUND="Fitxategia ez da aurkitu"
8
+ErrorCode.ERR_FAILED="Ezin izan da konektatu"
9
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/fa-IR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/fa-IR.ini Changed
14
 
1
@@ -11,6 +11,12 @@
2
 BrowserSource="مرورگر"
3
 CustomFrameRate="نرخ فریم های سفارشی استفاده"
4
 RerouteAudio="کنترل صدا از طریق OBS"
5
+WebpageControlLevel="دسترسی های صفحه"
6
+WebpageControlLevel.Level.None="دسترسی به OBS ندارد"
7
+WebpageControlLevel.Level.ReadOnly="دسترسی فقط خواندن به OBS"
8
+WebpageControlLevel.Level.Basic="دسترسی های پایه به OBS (ذخیره ریپلی بافر و...)"
9
+WebpageControlLevel.Level.Advanced="دسترسی های پیشرفته به OBS (تغییر صحنه ها ، قطع و وصل لایو استریم ، قطع ریپلی بافر و...)"
10
+WebpageControlLevel.Level.All="دسترسی کل به OBS (قطع و وصل استریم بدون هشدار و...)"
11
 Error.Title="صفحه بارگیری نشد!"
12
 Error.Description="اطمینان حاصل کنید که آدرس صحیح است و سایت با مشکلی روبرو نیست."
13
 Error.Retry="کلیک برای امتحان دوباره"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/fi-FI.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/fi-FI.ini Changed
22
 
1
@@ -9,3 +9,20 @@
2
 BrowserSource="Selain"
3
 CustomFrameRate="Käytä mukautettua ruudunpäivitystä"
4
 RerouteAudio="Hallitse ääntä OBS:n kautta"
5
+WebpageControlLevel="Sivun käyttöoikeudet"
6
+WebpageControlLevel.Level.None="Ei pääsyä OBS:ään"
7
+WebpageControlLevel.Level.ReadOnly="Vain luku -pääsy OBS:ään"
8
+WebpageControlLevel.Level.Basic="Perustason pääsy OBS:ään (tallenna toistopuskuri jne.)"
9
+WebpageControlLevel.Level.Advanced="Edistynyt pääsy OBS:ään (Vaihda skenejä, käynnistä/pysäytä toistopuskuri jne.)"
10
+WebpageControlLevel.Level.All="Täysi pääsy OBS:ään (Käynnistä/lopeta striimaaminen ilman varoitusta jne.)"
11
+Error.Title="Sivua ei voitu lataa!"
12
+Error.Description="Varmista, että osoite on oikea ja että sivustolla ei ole ongelmia."
13
+Error.Retry="Napsauta tästä yrittääksesi uudelleen"
14
+Error.Code="Virhe: %1"
15
+Error.URL="URL-osoite: %2"
16
+ErrorCode.ERR_CONNECTION_REFUSED="Palvelin hylkäsi yhteyden"
17
+ErrorCode.ERR_NAME_NOT_RESOLVED="Palvelimen IP-osoitetta ei löydy"
18
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Yhteys aikakatkaistiin"
19
+ErrorCode.ERR_FILE_NOT_FOUND="Tiedostoa ei löydy"
20
+ErrorCode.ERR_FAILED="Yhdistäminen epäonnistui"
21
+ErrorCode.ERR_NETWORK_CHANGED="Verkko vaihtui"
22
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/fil-PH.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/fil-PH.ini Changed
13
 
1
@@ -8,3 +8,11 @@
2
 RestartCEF="I-restart ang CEF"
3
 CustomFrameRate="Gamitin ang pasadyang frame rate"
4
 RerouteAudio="I-kontrol ang dami gamit ang OBS"
5
+Error.Retry="Pumindot dito para subukan muli"
6
+Error.Code="Kamalian: %1"
7
+ErrorCode.ERR_CONNECTION_REFUSED="Hindi tinanggap ng server ang koneksyon"
8
+ErrorCode.ERR_NAME_NOT_RESOLVED="Hindi matagpuan ang IP address ng server"
9
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Umantala ang koneksyon"
10
+ErrorCode.ERR_FILE_NOT_FOUND="Hindi natagpuan ang file"
11
+ErrorCode.ERR_FAILED="Bigong kumunekta"
12
+ErrorCode.ERR_NETWORK_CHANGED="Naiba ang network"
13
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/fr-FR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/fr-FR.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Navigateur"
3
 CustomFrameRate="Utiliser un débit d'images personnalisé"
4
 RerouteAudio="Contrôler l'audio via OBS"
5
+WebpageControlLevel="Permissions de la page"
6
+WebpageControlLevel.Level.None="Aucun accès à OBS"
7
+WebpageControlLevel.Level.ReadOnly="Accès en lecture seule à OBS"
8
+WebpageControlLevel.Level.Basic="Accès basique à OBS (enregistrer le tampon de relecture, etc.)"
9
+WebpageControlLevel.Level.Advanced="Accès avancé à OBS (Changement de scène, Démarrer/Arrêter le tampon de relecture, etc.)"
10
+WebpageControlLevel.Level.All="Accès complet à OBS (Démarrer/Arrêter le stream sans avertissement, etc.)"
11
 Error.Title="Impossible de charger cette page !"
12
 Error.Description="Veuillez vérifier que l'adresse est correcte et que le site n'a pas de problèmes."
13
 Error.Retry="Cliquer ici pour réessayer"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/gd-GB.ini Changed
26
 
1
@@ -1,3 +1,24 @@
2
+LocalFile="Faidhle ionadail"
3
 Width="Leud"
4
 Height="Àirde"
5
+CSS="CSS gnàthaichte"
6
+ShutdownSourceNotVisible="Dùin sìos an tùs mura faicear e"
7
+RefreshBrowserActive="Ath-nuadhaich am brabhsair nuair a ghnìomhaicheas an t-sealladh"
8
+RefreshNoCache="Ath-nuadhaich tasgadan na duilleige làithrich"
9
+RestartCEF="Ath-thòisich CEF"
10
 BrowserSource="Brabhsair"
11
+CustomFrameRate="Cleachd reat fhrèamaichean gnàthaichte"
12
+RerouteAudio="Stiùirich an fhuaim le OBS"
13
+WebpageControlLevel="Cead duilleag"
14
+WebpageControlLevel.Level.None="Chan eil cead ri OBS a cleachadh"
15
+WebpageControlLevel.Level.ReadOnly="Inntrigeadh ri leughadh a-mhàin dha OBS"
16
+Error.Title="Cha b’ urrainn dhuinn an duilleag ud a luchdadh!"
17
+Error.Description="Dèan cinnteach gu bheil an seòladh mar bu chòir ’s nach eil duilgheadasan aig an làrach."
18
+Error.Retry="Briog an-seo airson fheuchainn ris a-rithist"
19
+Error.Code="Mearachd: %1"
20
+ErrorCode.ERR_CONNECTION_REFUSED="Dhiùlt am frithealaiche an ceangal"
21
+ErrorCode.ERR_NAME_NOT_RESOLVED="Cha deach seòladh IP an fhrithealaiche a lorg"
22
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Dh'fhalbh an ùine air a' cheangal"
23
+ErrorCode.ERR_FILE_NOT_FOUND="Cha deach am faidhle a lorg"
24
+ErrorCode.ERR_FAILED="Cha deach leinn ceangal a dhèanamh"
25
+ErrorCode.ERR_NETWORK_CHANGED="Dh’atharraich an lìonra"
26
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/he-IL.ini Changed
22
 
1
@@ -10,9 +10,20 @@
2
 BrowserSource="דפדפן"
3
 CustomFrameRate="השתמש בקצב פריימים בהתאמה אישית"
4
 RerouteAudio="בקרת שמע דרך OBS"
5
+WebpageControlLevel="הרשאות דף"
6
+WebpageControlLevel.Level.None="אין גישה ל-OBS"
7
+WebpageControlLevel.Level.ReadOnly="גישת קריאה-בלבד ל-OBS"
8
+WebpageControlLevel.Level.Basic="גישה בסיסית ל-OBS (שמירת אוגר ההילוך החוזר, וכו')"
9
+WebpageControlLevel.Level.Advanced="גישה מתקדמת ל-OBS (שינוי סצינות, התחלת/הפסקת אוגר ההילוך החוזר, וכו')"
10
+WebpageControlLevel.Level.All="גישה מלאה ל-OBS (התחלת/הפסקת שידור חי ללא אזהרה, וכו')"
11
+Error.Title="לא היה ניתן לטעון את העמוד!"
12
+Error.Description="יש לוודא שהכתובת נכונה ושלא קיימות בעיות באתר."
13
+Error.Retry="יש ללחוץ כאן כדי לנסות שוב"
14
 Error.Code="שגיאה: %1"
15
 Error.URL="כתובת: %2"
16
+ErrorCode.ERR_CONNECTION_REFUSED="השרת סירב לחיבור"
17
 ErrorCode.ERR_NAME_NOT_RESOLVED="כתובת ה־IP של השרת לא נמצאה"
18
 ErrorCode.ERR_CONNECTION_TIMED_OUT="זמן החיבור פג"
19
 ErrorCode.ERR_FILE_NOT_FOUND="הקובץ לא נמצא"
20
 ErrorCode.ERR_FAILED="ההתחברות נכשלה"
21
+ErrorCode.ERR_NETWORK_CHANGED="רשת השתנתה"
22
obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/hi-IN.ini Added
29
 
1
@@ -0,0 +1,27 @@
2
+LocalFile="लोकल फाइल"
3
+Width="चौड़ाई"
4
+Height="ऊँचाई"
5
+CSS="निर्मित CSS"
6
+ShutdownSourceNotVisible="स्रोत जब ओझल हो तो उसे बंद कर दें"
7
+RefreshBrowserActive="दृश्य सक्रिय होने पर ब्राउज़र रिफ़्रेश करें"
8
+RefreshNoCache="वर्तमान पृष्ठ का कैश ताज़ा करें"
9
+RestartCEF="CEF पुनः आरंभ करें"
10
+BrowserSource="ब्राउज़र"
11
+CustomFrameRate="निर्मित फ़्रेम रेट का प्रयोग करें"
12
+RerouteAudio="ऑडियो OBS के माध्यम से नियंत्रित करें"
13
+WebpageControlLevel="पृष्ठ की अनुमतियां"
14
+WebpageControlLevel.Level.None="OBS तक पहुँच नहीं है"
15
+WebpageControlLevel.Level.ReadOnly="OBS तक केवल-पढ़ने की पहुँच है"
16
+WebpageControlLevel.Level.Basic="OBS तक बुनियादी पहुंच (रिप्ले बफर सहेजें, आदि )"
17
+WebpageControlLevel.Level.Advanced="OBS के लिए उन्नत पहुंच (दृश्य बदलें, रीप्ले बफर प्रारंभ/बंद करें, आदि)"
18
+WebpageControlLevel.Level.All="OBS तक पूर्ण पहुंच (बिना किसी चेतावनी के स्ट्रीमिंग शुरू/बंद करें, आदि)"
19
+Error.Title="उस पेज को लोड नहीं किया जा सका!"
20
+Error.Description="सुनिश्चित करें कि पता सही है और साइट में कोई समस्या नहीं है."
21
+Error.Retry="पुनः प्रयास करने के लिए क्लिक करें"
22
+Error.Code="त्रुटि : %1"
23
+ErrorCode.ERR_CONNECTION_REFUSED="सर्वर ने कनेक्शन से इनकार कर दिया"
24
+ErrorCode.ERR_NAME_NOT_RESOLVED="सर्वर का IP पता नहीं मिला"
25
+ErrorCode.ERR_CONNECTION_TIMED_OUT="कनेक्शन टाइम आउट"
26
+ErrorCode.ERR_FILE_NOT_FOUND="फ़ाइल नहीं मिली"
27
+ErrorCode.ERR_FAILED="जुड़ने में विफल"
28
+ErrorCode.ERR_NETWORK_CHANGED="नेटवर्क बदल गया"
29
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/hu-HU.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/hu-HU.ini Changed
21
 
1
@@ -10,11 +10,18 @@
2
 BrowserSource="Böngésző"
3
 CustomFrameRate="Egyéni képkockaráta használata"
4
 RerouteAudio="Hangvezérlés OBS-en keresztül"
5
+WebpageControlLevel="Oldal engedélyei"
6
+WebpageControlLevel.Level.None="Nincs hozzáférés az OBS-hez"
7
+WebpageControlLevel.Level.ReadOnly="Csak olvasható hozzáférés az OBS-hez"
8
+WebpageControlLevel.Level.Basic="Alapvető hozzáférés az OBS-hez (visszajátszási puffer mentése, stb.)"
9
+WebpageControlLevel.Level.Advanced="Speciális hozzáférés az OBS-hez (Jelenetek váltása, lejátszási puffer indítása/leállítása, stb.)"
10
+WebpageControlLevel.Level.All="Teljes hozzáférés az OBS-hez (közvetítés figyelmeztetés nélküli indítása/leállítása, stb.)"
11
 Error.Title="Az oldal nem tölthető be."
12
+Error.Description="Győződjön meg róla, hogy a cím helyes, és hogy nincsenek problémák az oldallal."
13
 Error.Retry="Újrapróbálkozáshoz kattintson ide"
14
 Error.Code="Hiba: %1"
15
 ErrorCode.ERR_CONNECTION_REFUSED="A kiszolgáló megtagadta a kapcsolatot"
16
-ErrorCode.ERR_NAME_NOT_RESOLVED="A kiszolgáló IP címe nem található"
17
+ErrorCode.ERR_NAME_NOT_RESOLVED="A kiszolgáló IP-címe nem található"
18
 ErrorCode.ERR_CONNECTION_TIMED_OUT="Kapcsolódási időtúllépés"
19
 ErrorCode.ERR_FILE_NOT_FOUND="A fájl nem található"
20
 ErrorCode.ERR_FAILED="Csatlakozás sikertelen"
21
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/id-ID.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/id-ID.ini Changed
21
 
1
@@ -3,11 +3,18 @@
2
 Height="Tinggi"
3
 CSS="Sesuaikan CSS"
4
 ShutdownSourceNotVisible="Nonaktifkan sumber ketika tidak terlihat"
5
-RefreshBrowserActive="Muat ulang browser ketika adegan aktif"
6
+RefreshBrowserActive="Muat ulang peramban ketika adegan menjadi aktif"
7
 RefreshNoCache="Muat ulang cache halaman saat ini"
8
 RestartCEF="Aktifkan Ulang CEF"
9
+BrowserSource="Peramban"
10
 CustomFrameRate="Gunakan modifikasi frame rate"
11
 RerouteAudio="Kontrol audio melalui OBS"
12
+WebpageControlLevel="Izin halaman"
13
+WebpageControlLevel.Level.None="Tidak ada akses ke OBS"
14
+WebpageControlLevel.Level.ReadOnly="Akses Hanya-baca ke OBS"
15
+WebpageControlLevel.Level.Basic="Akses dasar ke OBS (Menyimpan buffer replay, dll.)"
16
+WebpageControlLevel.Level.Advanced="Akses lanjutan ke OBS (Mengubah adegan, Mulai/Berhenti buffer replay, dll.)"
17
+WebpageControlLevel.Level.All="Akses penuh ke OBS (Mulai/Berhenti streaming tanpa peringatan, dll.)"
18
 Error.Title="Tidak dapat memuat halaman itu!"
19
 Error.Description="Pastikan alamat situsnya benar, dan situs tersebut sedang tidak mengalami masalah."
20
 Error.Retry="Klik disini untuk mencoba kembali"
21
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/it-IT.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/it-IT.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 RestartCEF="Riavvia il CEF"
3
 CustomFrameRate="Utilizza una velocità dei fotogrammi personalizzata"
4
 RerouteAudio="Controlla audio tramite OBS"
5
+WebpageControlLevel="Permessi pagina"
6
+WebpageControlLevel.Level.None="Nessun accesso a OBS"
7
+WebpageControlLevel.Level.ReadOnly="Accesso in sola lettura a OBS"
8
+WebpageControlLevel.Level.Basic="Accesso di base a OBS (Salva il replay buffer, ecc.)"
9
+WebpageControlLevel.Level.Advanced="Accesso avanzato a OBS (Cambia scene,Avvia/Ferma replay buffer, ecc.)"
10
+WebpageControlLevel.Level.All="Accesso completo a OBS (Avvia/Ferma streaming senza preavviso, ecc.)"
11
 Error.Title="Impossibile caricare quella pagina!"
12
 Error.Description="Assicurarsi che l'indirizzo sia corretto e che il sito non abbia problemi."
13
 Error.Retry="Clicca qui per riprovare"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ja-JP.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ja-JP.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="ブラウザ"
3
 CustomFrameRate="カスタムフレームレートを使用"
4
 RerouteAudio="OBSを介して音声を制御する"
5
+WebpageControlLevel="ページ権限"
6
+WebpageControlLevel.Level.None="OBSへのアクセス権無し"
7
+WebpageControlLevel.Level.ReadOnly="OBSへの読み取り専用アクセス"
8
+WebpageControlLevel.Level.Basic="OBSへの基本的なアクセス (リプレイバッファの保存など。)"
9
+WebpageControlLevel.Level.Advanced="OBSへの高度なアクセス (シーンの変更、リプレイバッファの開始/停止など。)"
10
+WebpageControlLevel.Level.All="OBSへのフルアクセス (警告なしで配信を開始/停止するなど。)"
11
 Error.Title="ページを読み込めませんでした。"
12
 Error.Description="URLが正しく、サイトに問題がないことを確認してください。"
13
 Error.Retry="クリックして再試行"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ka-GE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ka-GE.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="ბრაუზერი"
3
 CustomFrameRate="მითითებული კადრის სიხშირე"
4
 RerouteAudio="ხმის მართვა OBS-ით"
5
+WebpageControlLevel="გვერდის ნებართვები"
6
+WebpageControlLevel.Level.None="არაა წვდომა OBS-თან"
7
+WebpageControlLevel.Level.ReadOnly="მხოლოდ წაკითხვით წვდომა OBS-თან"
8
+WebpageControlLevel.Level.Basic="გამარტივებული წვდომა OBS-თან (შენახვა, გადახვევა და ა.შ.)"
9
+WebpageControlLevel.Level.Advanced="გაფართოებული წვდომა OBS-თან (სცენების გადართვა, გადახვევის ჩართვა/გამორთვა და ა.შ.)"
10
+WebpageControlLevel.Level.All="სრული წვდომა OBS-თან (ნაკადის გაშვება/შეწყვეტა გაუფრთხილებლად და ა.შ.)"
11
 Error.Title="გვერდი ვერ ჩაიტვირთა!"
12
 Error.Description="გადაამოწმეთ, მისამართის სისწორე და საიტის გამართულობა."
13
 Error.Retry="გამეორებისთვის დაწკაპეთ აქ"
14
obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/kmr-TR.ini Added
29
 
1
@@ -0,0 +1,27 @@
2
+LocalFile="Pelê herêmî"
3
+Width="Firehî"
4
+Height="Bilindî"
5
+CSS="CSS a kesanekirî"
6
+ShutdownSourceNotVisible="Çavkaniyê rawestîne gava ku ne xuyabar be"
7
+RefreshBrowserActive="Gava dîmen çalak bibe gerokê nû bike"
8
+RefreshNoCache="Pêşbirka rûpela heyî nû bike"
9
+RestartCEF="CEF ji nû ve dest pê bike"
10
+BrowserSource="Gerok"
11
+CustomFrameRate="Rêjeya tarika ya kesanekirî bi kar bîne"
12
+RerouteAudio="Kontrolkirina dengê bi riya OBS"
13
+WebpageControlLevel="Mafên rûpelê"
14
+WebpageControlLevel.Level.None="Gihîştina OBS tune ye"
15
+WebpageControlLevel.Level.ReadOnly="Gihîştina OBS-ê tenê ji bo xwendinê"
16
+WebpageControlLevel.Level.Basic="Gihîştina bingehîn a OBS (Tomarkirina dubarekirina bîrgeha demkî, hwd.)"
17
+WebpageControlLevel.Level.Advanced="Gihîştina pêşketî ya OBS-ê (Dîmenan biguherîne, Destpêkirin/Rawestandin dubarekirina bîrgeha demkî, hwd.)"
18
+WebpageControlLevel.Level.All="Gihîştina tevahî ya OBS-ê (Bêyî hişyarî weşanê Destpê bike/Rawestîne, hwd.)"
19
+Error.Title="Nikarê wê rûpelê bar bike!"
20
+Error.Description="Piştrast bike ku navnîşan rast e, û ku malper ne xwediyê pirsgirêkan e."
21
+Error.Retry="Ji bo ji nû ve ceribandinê li vir bitike"
22
+Error.Code="Çewtî: %1"
23
+ErrorCode.ERR_CONNECTION_REFUSED="Rajekar pêwendî red kir"
24
+ErrorCode.ERR_NAME_NOT_RESOLVED="Navnîşana IP ya rajekar nehatin dîtin"
25
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Dema girêdanê bi dawî bû"
26
+ErrorCode.ERR_FILE_NOT_FOUND="Pel nehate dîtin"
27
+ErrorCode.ERR_FAILED="Girêdan pêk nehat"
28
+ErrorCode.ERR_NETWORK_CHANGED="Tor guherî"
29
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ko-KR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ko-KR.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="브라우저"
3
 CustomFrameRate="사용자가 임의로 설정한 프레임 레이트 사용"
4
 RerouteAudio="OBS를 통해 오디오 조절"
5
+WebpageControlLevel="페이지 권한"
6
+WebpageControlLevel.Level.None="OBS에 접근 권한 없음"
7
+WebpageControlLevel.Level.ReadOnly="OBS에 읽기 전용 접근 권한"
8
+WebpageControlLevel.Level.Basic="OBS에 기본 접근 권한 (리플레이 버퍼 저장 등)"
9
+WebpageControlLevel.Level.Advanced="OBS에 고급 접근 권한 (장면 전환, 리플레이 버퍼 시작/멈추기 등)"
10
+WebpageControlLevel.Level.All="OBS에 완전 접근 권한 (경고문 없이 방송 시작/멈추기 등)"
11
 Error.Title="해당 페이지를 불러올 수 없습니다!"
12
 Error.Description="주소가 올바른지, 또는 사이트에 이상이 없는지 확인하십시오"
13
 Error.Retry="다시 시도하려면 여기를 클릭하십시오"
14
obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/lt-LT.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+URL="Adresas"
3
+Width="Plotis"
4
+Height="Aukštis"
5
+FPS="kadrai/s"
6
+CSS="Išplėstinis CSS"
7
+BrowserSource="Naršyklė"
8
+Error.Code="Klaida: %1"
9
+ErrorCode.ERR_FILE_NOT_FOUND="Failas nerastas"
10
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ms-MY.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ms-MY.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="Pelayar"
3
 CustomFrameRate="Guna kadar bingkai suai"
4
 RerouteAudio="Kawal audio melalui OBS"
5
+WebpageControlLevel="Keizinan halaman"
6
+WebpageControlLevel.Level.None="Tiada capaian ke OBS"
7
+WebpageControlLevel.Level.ReadOnly="Capaian baca-sahaja ke OBS"
8
+WebpageControlLevel.Level.Basic="Capaian asas ke OBS (Simpan penimbal main semula, dll.)"
9
+WebpageControlLevel.Level.Advanced="Capaian lanjutan ke OBS (Ubah adegan, Mula/Henti penimbal main semula, dll.)"
10
+WebpageControlLevel.Level.All="Capaian penuh ke OBS (Mula/Henti penstriman tanpa amaran, dll.)"
11
 Error.Title="Tidak dapat memuatkan halaman tersebut!"
12
 Error.Description="Pastikan alamat adalah betul, dan tapak tiada hadapi masalah."
13
 Error.Retry="Klik di sini untuk cuba lagi"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/nb-NO.ini Changed
21
 
1
@@ -8,3 +8,19 @@
2
 BrowserSource="Nettleser"
3
 CustomFrameRate="Bruk tilpasset bildefrekvens"
4
 RerouteAudio="Kontroller lyden gjennom OBS"
5
+WebpageControlLevel="Side tillatelser"
6
+WebpageControlLevel.Level.None="Ingen tilgang til OBS"
7
+WebpageControlLevel.Level.ReadOnly="Kun lesetilgang til OBS"
8
+WebpageControlLevel.Level.Basic="Basistilgang til OBS (Lagre omspillingsbuffer, osv.)"
9
+WebpageControlLevel.Level.Advanced="Avansert tilgang til OBS (endre sener, start/stopp omspillingsbuffer, osv.)"
10
+WebpageControlLevel.Level.All="Full tilgang til OBS (Start/stopp kringkasting uten advarsel, osv.)"
11
+Error.Title="Kunne ikke laste inn den siden!"
12
+Error.Description="Kontroller at adressen er riktig, og at nettstedet ikke har problemer."
13
+Error.Retry="Klikk her for å prøve igjen."
14
+Error.Code="Feil: %1"
15
+ErrorCode.ERR_CONNECTION_REFUSED="Serveren nektet tilkoblingen"
16
+ErrorCode.ERR_NAME_NOT_RESOLVED="Serverens IP-adresse ble ikke funnet"
17
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Tilkoblingen ble tidsavbrutt"
18
+ErrorCode.ERR_FILE_NOT_FOUND="Fant ikke filen"
19
+ErrorCode.ERR_FAILED="Tilkobling mislyktes"
20
+ErrorCode.ERR_NETWORK_CHANGED="Nettverk er endret"
21
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/nl-NL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/nl-NL.ini Changed
14
 
1
@@ -8,6 +8,12 @@
2
 RestartCEF="CEF herstarten"
3
 CustomFrameRate="Gebruik aangepaste frame rate"
4
 RerouteAudio="Bedien geluid via OBS"
5
+WebpageControlLevel="Pagina rechten"
6
+WebpageControlLevel.Level.None="Geen toegang tot OBS"
7
+WebpageControlLevel.Level.ReadOnly="Alleen-lezen toegang tot OBS"
8
+WebpageControlLevel.Level.Basic="Basis toegang tot OBS (Opslaan replay buffer, etc.)"
9
+WebpageControlLevel.Level.Advanced="Geavanceerde toegang tot OBS (Verander scènes, Start/Stop replay buffer, etc.)"
10
+WebpageControlLevel.Level.All="Volledige toegang tot OBS (Start/Stop streamen zonder waarschuwing, etc.)"
11
 Error.Title="Kon pagina niet laden!"
12
 Error.Description="Controleer dat het adres correct is en dat de website geen problemen heeft."
13
 Error.Retry="Klik hier om opnieuw te proberen"
14
obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/nn-NO.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+LocalFile="Lokal fil"
3
+Height="Høgde"
4
+BrowserSource="Nettlesar"
5
+Error.Code="Feil: %1"
6
+ErrorCode.ERR_FILE_NOT_FOUND="Fann ikkje fila"
7
+ErrorCode.ERR_NETWORK_CHANGED="Nettverk endra"
8
obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+BrowserSource="Navegador"
3
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/pl-PL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/pl-PL.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Przeglądarka"
3
 CustomFrameRate="Własne ustawienia FPS"
4
 RerouteAudio="Kontroluj audio przez OBSa"
5
+WebpageControlLevel="Uprawnienia strony"
6
+WebpageControlLevel.Level.None="Brak dostępu do OBS"
7
+WebpageControlLevel.Level.ReadOnly="Dostęp do OBS tylko do odczytu"
8
+WebpageControlLevel.Level.Basic="Podstawowy dostęp do OBS (Zapisz bufor powtórki, etc.)"
9
+WebpageControlLevel.Level.Advanced="Zaawansowany dostęp do OBS (Zmiana ekranów, Rozpoczęcie/Zatrzymanie bufora powtórki, etc.)"
10
+WebpageControlLevel.Level.All="Pełny dostęp do OBS (Rozpocznij/Zakończ nadawanie bez ostrzeżenia, etc.)"
11
 Error.Title="Nie można załadować strony!"
12
 Error.Description="Upewnij się, że adres jest poprawny i nie ma problemów ze stroną."
13
 Error.Retry="Kliknij, aby spróbować ponownie"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/pt-BR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/pt-BR.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="Navegador"
3
 CustomFrameRate="Usar taxa de quadros personalizada"
4
 RerouteAudio="Controlar áudio via OBS"
5
+WebpageControlLevel="Permissões da página"
6
+WebpageControlLevel.Level.None="Sem acesso ao OBS"
7
+WebpageControlLevel.Level.ReadOnly="Acesso somente leitura ao OBS"
8
+WebpageControlLevel.Level.Basic="Acesso básico ao OBS (salvar buffer de repetição, etc.)"
9
+WebpageControlLevel.Level.Advanced="Acesso avançado ao OBS (mudar cenas, iniciar ou interromper buffer de repetição, etc.)"
10
+WebpageControlLevel.Level.All="Acesso completo ao OBS (Iniciar/Parar transmissão sem aviso, etc.)"
11
 Error.Title="Não foi possível carregar essa página!"
12
 Error.Description="Verifique se o endereço está correto e se o site não está com problemas."
13
 Error.Retry="Clique aqui para tentar novamente"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/pt-PT.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/pt-PT.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="Navegador"
3
 CustomFrameRate="Usar taxa de fotogramas personalizada"
4
 RerouteAudio="Controlar áudio via OBS"
5
+WebpageControlLevel="Permissões da página"
6
+WebpageControlLevel.Level.None="Sem acesso ao OBS"
7
+WebpageControlLevel.Level.ReadOnly="Acesso só leitura ao OBS"
8
+WebpageControlLevel.Level.Basic="Acesso básico ao OBS (gravar memória de reprodução, etc.)"
9
+WebpageControlLevel.Level.Advanced="Acesso avançado ao OBS (mudar cenas, iniciar/parar memória de reprodução, etc.)"
10
+WebpageControlLevel.Level.All="Acesso completo ao OBS (iniciar/parar transmissão sem aviso, etc.)"
11
 Error.Title="Impossível carregar a página!"
12
 Error.Description="Veja se o endereço está correcto e se a página não tem problemas."
13
 Error.Retry="Clique aqui para tentar novamente"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ro-RO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ro-RO.ini Changed
22
 
1
@@ -1,6 +1,7 @@
2
 LocalFile="Fișier local"
3
 Width="Lățime"
4
 Height="Înălțime"
5
+FPS="CPS"
6
 CSS="CSS personalizat"
7
 ShutdownSourceNotVisible="Închide sursa când nu este vizibilă"
8
 RefreshBrowserActive="Reîmprospătează browserul când scena devine activă"
9
@@ -8,6 +9,12 @@
10
 RestartCEF="Repornește CEF"
11
 CustomFrameRate="Folosește o frecvență de cadre personalizată"
12
 RerouteAudio="Controlează sistemul audio prin OBS"
13
+WebpageControlLevel="Permisiunile paginii"
14
+WebpageControlLevel.Level.None="Nu există acces la OBS"
15
+WebpageControlLevel.Level.ReadOnly="Accesul numai pentru citire la OBS"
16
+WebpageControlLevel.Level.Basic="Acces de bază la OBS (Salvați tamponul de reluare etc.)"
17
+WebpageControlLevel.Level.Advanced="Acces avansat la OBS (Schimbarea scenei, Start/Stop tampon reluare, etc.)"
18
+WebpageControlLevel.Level.All="Acces complet la OBS (Start/Stop transmisiune fără avertisment, etc.)"
19
 Error.Title="Nu s-a putut încărca acea pagină!"
20
 Error.Description="Asigurați-vă că adresa este corectă și că site-ul nu are probleme."
21
 Error.Retry="Click aici pentru a reîncerca"
22
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/ru-RU.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/ru-RU.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Браузер"
3
 CustomFrameRate="Использовать настраиваемую частоту кадров"
4
 RerouteAudio="Управление аудио через OBS"
5
+WebpageControlLevel="Разрешение страницы"
6
+WebpageControlLevel.Level.None="Нет доступа к OBS"
7
+WebpageControlLevel.Level.ReadOnly="Доступ к OBS только для чтения"
8
+WebpageControlLevel.Level.Basic="Базовый доступ к OBS (Сохранение буфер видео и т.д.)"
9
+WebpageControlLevel.Level.Advanced="Продвинутый доступ к OBS (Изменение сцен, Начало/Остановка буфера записи и т.д.)"
10
+WebpageControlLevel.Level.All="Полный доступ к OBS (Начало/Остановка прямого эфира без предупреждения и т.д.)"
11
 Error.Title="Не удалось загрузить эту страницу!"
12
 Error.Description="Проверьте правильность адреса и что сайт доступен."
13
 Error.Retry="Нажмите здесь, чтобы повторить попытку"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/sk-SK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/sk-SK.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Prehliadač"
3
 CustomFrameRate="Použiť vlastnú snímkovú rýchlosť"
4
 RerouteAudio="Ovládať zvuk cez OBS"
5
+WebpageControlLevel="Oprávnenia stránky"
6
+WebpageControlLevel.Level.None="Žiaden prístup k OBS"
7
+WebpageControlLevel.Level.ReadOnly="Prístup iba na čítanie k OBS"
8
+WebpageControlLevel.Level.Basic="Základný prístup k OBS (Uložiť záznam do pamäte, atď.)"
9
+WebpageControlLevel.Level.Advanced="Pokročilý prístup k OBS (Zmeniť scény, Začať/Zastaviť záznam do pamäte, atď.)"
10
+WebpageControlLevel.Level.All="Plný prístup k OBS (Začať/Zastaviť streamovanie bez varovania, atď.)"
11
 Error.Title="Nepodarilo sa načítať túto stránku!"
12
 Error.Description="Uistite sa, že adresa je správna a že stránka nemá problémy."
13
 Error.Retry="Ak to chcete skúsiť znova, kliknite sem"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/sl-SI.ini Changed
22
 
1
@@ -10,3 +10,20 @@
2
 BrowserSource="Brskalnik"
3
 CustomFrameRate="Uporabi hitrost sličic po meri"
4
 RerouteAudio="Nadziraj zvok preko OBS-a"
5
+WebpageControlLevel="Dovoljenja strani"
6
+WebpageControlLevel.Level.None="Ni dostopa do OBS"
7
+WebpageControlLevel.Level.ReadOnly="Dostop do OBS je samo za branje"
8
+WebpageControlLevel.Level.Basic="Osnovni dostop do OBS (snemanje medpomnilnika za ponovitve, itd.)"
9
+WebpageControlLevel.Level.Advanced="Napredni dostop do OBS (spreminjanje scen, zagon/zaustavitev medpomnilnika s ponovitvami, itd.)"
10
+WebpageControlLevel.Level.All="Poln dostop do OBS (zagon in zaustavitev pretkoa brez opozoril, itd.)"
11
+Error.Title="Strani ni bilo mogoče naložiti!"
12
+Error.Description="Preverite pravilnost naslova strani in da stran nima težav."
13
+Error.Retry="Kliknite sem za ponoven poskus"
14
+Error.Code="Napaka: %1"
15
+Error.URL="URL naslov: %2"
16
+ErrorCode.ERR_CONNECTION_REFUSED="Strežnik je zavrnil povezavo"
17
+ErrorCode.ERR_NAME_NOT_RESOLVED="IP naslov strežnika ni bil najden"
18
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Čas za povezovanje se je iztekel"
19
+ErrorCode.ERR_FILE_NOT_FOUND="Datoteke ni mogoče najti"
20
+ErrorCode.ERR_FAILED="Vzpostavljanje povezave ni uspelo"
21
+ErrorCode.ERR_NETWORK_CHANGED="Omrežje je bilo zamenjano"
22
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/sv-SE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/sv-SE.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Webbläsare"
3
 CustomFrameRate="Använd anpassad bildfrekvens"
4
 RerouteAudio="Kontrollera ljudet via OBS"
5
+WebpageControlLevel="Sidbehörigheter"
6
+WebpageControlLevel.Level.None="Ingen åtkomst till OBS"
7
+WebpageControlLevel.Level.ReadOnly="Skrivskyddad åtkomst till OBS"
8
+WebpageControlLevel.Level.Basic="Grundläggande åtkomst till OBS (spara reprisbuffert, etc.)"
9
+WebpageControlLevel.Level.Advanced="Avancerad åtkomst till OBS (ändra scener, starta/stoppa reprisbuffert, osv.)"
10
+WebpageControlLevel.Level.All="Full åtkomst till OBS (starta/stoppa strömmar utan förvarning, etc.)"
11
 Error.Title="Kunde inte ladda sidan!"
12
 Error.Description="Se till att adressen är korrekt, och att webbplatsen inte har problem."
13
 Error.Retry="Klicka här för att försöka igen"
14
obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/szl-PL.ini Added
23
 
1
@@ -0,0 +1,21 @@
2
+LocalFile="Zbiōr lokalny"
3
+Width="Szyrokość"
4
+Height="Wysokość"
5
+CSS="Włosny CSS"
6
+ShutdownSourceNotVisible="Zawrzij zdrzōdło, kej je niywidzialne"
7
+RefreshBrowserActive="Ôdświyż przeziyroczka, kej bina je aktywowano"
8
+RefreshNoCache="Ôdświyż podrynczno spamiyńć teroźnyj zajty"
9
+RestartCEF="Resztartuj CEF"
10
+BrowserSource="Przeziyroczka"
11
+CustomFrameRate="Włosne ôpcyje FPS"
12
+RerouteAudio="Kōntroluj audio bez OBSa"
13
+Error.Title="Niy idzie zaladować zajty!"
14
+Error.Description="Dej pozōr, eli adresa je dobro, iże zajta tyż funguje dobrze."
15
+Error.Retry="Kliknij, coby sprōbować zaś"
16
+Error.Code="Feler: %1"
17
+ErrorCode.ERR_CONNECTION_REFUSED="Serwer ôdkozoł połōnczynio"
18
+ErrorCode.ERR_NAME_NOT_RESOLVED="Niy idzie znojść adresy IP ôd serwera"
19
+ErrorCode.ERR_CONNECTION_TIMED_OUT="Upłynōł limit czasu połōnczynio"
20
+ErrorCode.ERR_FILE_NOT_FOUND="Niy idzie znojść zbioru"
21
+ErrorCode.ERR_FAILED="Niy idzie sie połōnczyć"
22
+ErrorCode.ERR_NETWORK_CHANGED="Nec je zmiyniōny"
23
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/tr-TR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/tr-TR.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="Tarayıcı"
3
 CustomFrameRate="Özel kare hızı kullan"
4
 RerouteAudio="OBS ile sesi kontrol etme"
5
+WebpageControlLevel="Sayfa İzinleri"
6
+WebpageControlLevel.Level.None="OBS'ye erişim yok"
7
+WebpageControlLevel.Level.ReadOnly="OBS'ye salt-okunur erişim"
8
+WebpageControlLevel.Level.Basic="OBS'ye basit erişim (Tekrar oynatma arabelleği kaybetme, vb.)"
9
+WebpageControlLevel.Level.Advanced="OBS'ye gelişmiş erişim (Sahne değiştirme, Tekrar oynatma arabelleğini durdurma/başlatma, vb.)"
10
+WebpageControlLevel.Level.All="OBS'ye tam erişim (Uyarı vermeden yayın başlatma/durdurma, vb.)"
11
 Error.Title="Sayfa yüklenemedi!"
12
 Error.Description="Adresin doğruluğunu ve sitenin sorunları olmadığından emin olun."
13
 Error.Retry="Yeniden denemek için buraya tıklayın"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/uk-UA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/uk-UA.ini Changed
14
 
1
@@ -10,6 +10,12 @@
2
 BrowserSource="Браузер"
3
 CustomFrameRate="Використовувати власну частоту кадрів"
4
 RerouteAudio="Керувати звуком через OBS"
5
+WebpageControlLevel="Дозволи сторінки"
6
+WebpageControlLevel.Level.None="Немає доступу до OBS"
7
+WebpageControlLevel.Level.ReadOnly="Доступ до OBS лише для читання"
8
+WebpageControlLevel.Level.Basic="Базовий доступ до OBS (Зберегти буфер повтору тощо)"
9
+WebpageControlLevel.Level.Advanced="Розширений доступ до OBS (Змінити сцени, Запуск/зупинка буферу повторів тощо)"
10
+WebpageControlLevel.Level.All="Повний доступ до OBS (Запуск/зупинка трансляції без попереджень тощо)"
11
 Error.Title="Не вдалося завантажити цю сторінку!"
12
 Error.Description="Переконайтеся, що адреса правильна, а сайт не має проблем."
13
 Error.Retry="Натисніть сюди, щоб повторити спробу"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/zh-CN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/zh-CN.ini Changed
14
 
1
@@ -9,6 +9,12 @@
2
 BrowserSource="浏览器"
3
 CustomFrameRate="使用自定义帧率"
4
 RerouteAudio="通过 OBS 控制音频"
5
+WebpageControlLevel="页面权限"
6
+WebpageControlLevel.Level.None="没有访问OBS的权限"
7
+WebpageControlLevel.Level.ReadOnly="OBS 的只读权限"
8
+WebpageControlLevel.Level.Basic="OBS的基本访问权限(保存回放缓冲区等)"
9
+WebpageControlLevel.Level.Advanced="OBS的高级访问权限 (更改场景,启动或停止播放缓冲区,等等)"
10
+WebpageControlLevel.Level.All="OBS的完全访问权限(启动或停止串流时不显示警告等)"
11
 Error.Title="无法加载该页面!"
12
 Error.Description="请确保地址正确,且网站没有问题。"
13
 Error.Retry="点此重试"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/data/locale/zh-TW.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/data/locale/zh-TW.ini Changed
14
 
1
@@ -11,6 +11,12 @@
2
 BrowserSource="瀏覽器"
3
 CustomFrameRate="使用自訂的畫面速率"
4
 RerouteAudio="使用 OBS 控制音訊"
5
+WebpageControlLevel="頁面權限"
6
+WebpageControlLevel.Level.None="沒有存取 OBS 的權限"
7
+WebpageControlLevel.Level.ReadOnly="對 OBS 只有唯讀權限"
8
+WebpageControlLevel.Level.Basic="對 OBS 只有基本存取權限(重放緩衝區等)"
9
+WebpageControlLevel.Level.Advanced="對 OBS 有進階存取權限(切換場景、開始或停止播放緩衝區等)"
10
+WebpageControlLevel.Level.All="對 OBS 有完整存取權限(逕行開始或停止串流而不先警告等等)"
11
 Error.Title="無法載入頁面!"
12
 Error.Description="請確定網址是否正確,且網站沒有出狀況。"
13
 Error.Retry="按此重試"
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/obs-browser-plugin.cpp Changed
62
 
1
@@ -63,7 +63,7 @@
2
 static bool manager_initialized = false;
3
 os_event_t *cef_started_event = nullptr;
4
 
5
-#if defined(_WIN32) || defined(__APPLE__)
6
+#if defined(_WIN32)
7
 static int adapterCount = 0;
8
 #endif
9
 static std::wstring deviceId;
10
@@ -127,6 +127,8 @@
11
 #endif
12
    obs_data_set_default_bool(settings, "shutdown", false);
13
    obs_data_set_default_bool(settings, "restart_when_active", false);
14
+   obs_data_set_default_int(settings, "webpage_control_level",
15
+                (int)DEFAULT_CONTROL_LEVEL);
16
    obs_data_set_default_string(settings, "css", default_css);
17
    obs_data_set_default_bool(settings, "reroute_audio", false);
18
 }
19
@@ -205,6 +207,30 @@
20
    obs_properties_add_bool(props, "restart_when_active",
21
                obs_module_text("RefreshBrowserActive"));
22
 
23
+   obs_property_t *controlLevel = obs_properties_add_list(
24
+       props, "webpage_control_level",
25
+       obs_module_text("WebpageControlLevel"), OBS_COMBO_TYPE_LIST,
26
+       OBS_COMBO_FORMAT_INT);
27
+
28
+   obs_property_list_add_int(
29
+       controlLevel, obs_module_text("WebpageControlLevel.Level.None"),
30
+       (int)ControlLevel::None);
31
+   obs_property_list_add_int(
32
+       controlLevel,
33
+       obs_module_text("WebpageControlLevel.Level.ReadOnly"),
34
+       (int)ControlLevel::ReadOnly);
35
+   obs_property_list_add_int(
36
+       controlLevel,
37
+       obs_module_text("WebpageControlLevel.Level.Basic"),
38
+       (int)ControlLevel::Basic);
39
+   obs_property_list_add_int(
40
+       controlLevel,
41
+       obs_module_text("WebpageControlLevel.Level.Advanced"),
42
+       (int)ControlLevel::Advanced);
43
+   obs_property_list_add_int(
44
+       controlLevel, obs_module_text("WebpageControlLevel.Level.All"),
45
+       (int)ControlLevel::All);
46
+
47
    obs_properties_add_button(
48
        props, "refreshnocache", obs_module_text("RefreshNoCache"),
49
        [](obs_properties_t *, obs_property_t *, void *data) {
50
@@ -298,7 +324,11 @@
51
    prod_ver << std::to_string(obs_maj) << "." << std::to_string(obs_min)
52
         << "." << std::to_string(obs_pat);
53
 
54
+#if CHROME_VERSION_BUILD >= 4472
55
+   CefString(&settings.user_agent_product) = prod_ver.str();
56
+#else
57
    CefString(&settings.product_version) = prod_ver.str();
58
+#endif
59
 
60
 #ifdef USE_QT_LOOP
61
    settings.external_message_pump = true;
62
obs-studio-27.0.1.tar.xz/plugins/obs-browser/obs-browser-source.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/obs-browser-source.cpp Changed
135
 
1
@@ -140,8 +140,9 @@
2
        bool hwaccel = false;
3
 #endif
4
 
5
-       CefRefPtr<BrowserClient> browserClient = new BrowserClient(
6
-           this, hwaccel && tex_sharing_avail, reroute_audio);
7
+       CefRefPtr<BrowserClient> browserClient =
8
+           new BrowserClient(this, hwaccel && tex_sharing_avail,
9
+                     reroute_audio, webpage_control_level);
10
 
11
        CefWindowInfo windowInfo;
12
 #if CHROME_VERSION_BUILD < 3071
13
@@ -309,7 +310,7 @@
14
 #ifdef __linux__
15
    uint32_t native_vkey = KeyboardCodeFromXKeysym(event->native_vkey);
16
    uint32_t modifiers = event->native_modifiers;
17
-#elif defined(_WIN32)
18
+#elif defined(_WIN32) || defined(__APPLE__)
19
    uint32_t native_vkey = event->native_vkey;
20
    uint32_t modifiers = event->modifiers;
21
 #else
22
@@ -323,7 +324,7 @@
23
            CefKeyEvent e;
24
            e.windows_key_code = native_vkey;
25
 #ifdef __APPLE__
26
-           e.native_key_code = native_scancode;
27
+           e.native_key_code = native_vkey;
28
 #endif
29
 
30
            e.type = key_up ? KEYEVENT_KEYUP : KEYEVENT_RAWKEYDOWN;
31
@@ -345,7 +346,7 @@
32
                    KeyboardCodeFromXKeysym(e.character);
33
 #elif defined(_WIN32)
34
                e.windows_key_code = e.character;
35
-#else
36
+#elif !defined(__APPLE__)
37
                e.native_key_code = native_scancode;
38
 #endif
39
                cefBrowser->GetHost()->SendKeyEvent(e);
40
@@ -440,6 +441,7 @@
41
        bool n_shutdown;
42
        bool n_restart;
43
        bool n_reroute;
44
+       ControlLevel n_webpage_control_level;
45
        std::string n_url;
46
        std::string n_css;
47
 
48
@@ -454,6 +456,8 @@
49
        n_url = obs_data_get_string(settings,
50
                        n_is_local ? "local_file" : "url");
51
        n_reroute = obs_data_get_bool(settings, "reroute_audio");
52
+       n_webpage_control_level = static_cast<ControlLevel>(
53
+           obs_data_get_int(settings, "webpage_control_level"));
54
 
55
        if (n_is_local && !n_url.empty()) {
56
            n_url = CefURIEncode(n_url, false);
57
@@ -500,7 +504,8 @@
58
            n_height == height && n_fps_custom == fps_custom &&
59
            n_fps == fps && n_shutdown == shutdown_on_invisible &&
60
            n_restart == restart && n_css == css && n_url == url &&
61
-           n_reroute == reroute_audio) {
62
+           n_reroute == reroute_audio &&
63
+           n_webpage_control_level == webpage_control_level) {
64
            return;
65
        }
66
 
67
@@ -511,6 +516,7 @@
68
        fps_custom = n_fps_custom;
69
        shutdown_on_invisible = n_shutdown;
70
        reroute_audio = n_reroute;
71
+       webpage_control_level = n_webpage_control_level;
72
        restart = n_restart;
73
        css = n_css;
74
        url = n_url;
75
@@ -550,20 +556,48 @@
76
 
77
    if (texture) {
78
 #ifdef __APPLE__
79
-       gs_effect_t *effect = obs_get_base_effect(
80
-           (hwaccel) ? OBS_EFFECT_DEFAULT_RECT
81
-                 : OBS_EFFECT_PREMULTIPLIED_ALPHA);
82
-#else
83
        gs_effect_t *effect =
84
-           obs_get_base_effect(OBS_EFFECT_PREMULTIPLIED_ALPHA);
85
+           obs_get_base_effect((hwaccel) ? OBS_EFFECT_DEFAULT_RECT
86
+                             : OBS_EFFECT_DEFAULT);
87
+#else
88
+       gs_effect_t *effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
89
 #endif
90
 
91
-       const bool current =
92
-           gs_is_srgb_format(gs_texture_get_color_format(texture));
93
-       const bool previous = gs_set_linear_srgb(current);
94
-       while (gs_effect_loop(effect, "Draw"))
95
-           obs_source_draw(texture, 0, 0, 0, 0, flip);
96
-       gs_set_linear_srgb(previous);
97
+       bool linear_sample = extra_texture == NULL;
98
+       gs_texture_t *draw_texture = texture;
99
+       if (!linear_sample &&
100
+           !obs_source_get_texcoords_centered(source)) {
101
+           gs_copy_texture(extra_texture, texture);
102
+           draw_texture = extra_texture;
103
+
104
+           linear_sample = true;
105
+       }
106
+
107
+       const bool previous = gs_framebuffer_srgb_enabled();
108
+       gs_enable_framebuffer_srgb(true);
109
+
110
+       gs_blend_state_push();
111
+       gs_blend_function(GS_BLEND_ONE, GS_BLEND_INVSRCALPHA);
112
+
113
+       gs_eparam_t *const image =
114
+           gs_effect_get_param_by_name(effect, "image");
115
+
116
+       const char *tech;
117
+       if (linear_sample) {
118
+           gs_effect_set_texture_srgb(image, draw_texture);
119
+           tech = "Draw";
120
+       } else {
121
+           gs_effect_set_texture(image, draw_texture);
122
+           tech = "DrawSrgbDecompress";
123
+       }
124
+
125
+       const uint32_t flip_flag = flip ? GS_FLIP_V : 0;
126
+       while (gs_effect_loop(effect, tech))
127
+           gs_draw_sprite(draw_texture, flip_flag, 0, 0);
128
+
129
+       gs_blend_state_pop();
130
+
131
+       gs_enable_framebuffer_srgb(previous);
132
    }
133
 
134
 #if defined(_WIN32) && defined(SHARED_TEXTURE_SUPPORT_ENABLED)
135
obs-studio-27.0.1.tar.xz/plugins/obs-browser/obs-browser-source.hpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/obs-browser-source.hpp Changed
44
 
1
@@ -40,6 +40,15 @@
2
 };
3
 #endif
4
 
5
+enum class ControlLevel : int {
6
+   None,
7
+   ReadOnly,
8
+   Basic,
9
+   Advanced,
10
+   All,
11
+};
12
+inline constexpr ControlLevel DEFAULT_CONTROL_LEVEL = ControlLevel::ReadOnly;
13
+
14
 extern bool hwaccel;
15
 
16
 struct BrowserSource {
17
@@ -55,6 +64,7 @@
18
    std::string url;
19
    std::string css;
20
    gs_texture_t *texture = nullptr;
21
+   gs_texture_t *extra_texture = nullptr;
22
    int width = 0;
23
    int height = 0;
24
    bool fps_custom = false;
25
@@ -64,6 +74,7 @@
26
    bool is_local = false;
27
    bool first_update = true;
28
    bool reroute_audio = true;
29
+   ControlLevel webpage_control_level = DEFAULT_CONTROL_LEVEL;
30
 #if defined(_WIN32) && defined(SHARED_TEXTURE_SUPPORT_ENABLED)
31
    bool reset_frame = false;
32
 #endif
33
@@ -73,6 +84,10 @@
34
    {
35
        if (texture) {
36
            obs_enter_graphics();
37
+           if (extra_texture) {
38
+               gs_texture_destroy(extra_texture);
39
+               extra_texture = nullptr;
40
+           }
41
            gs_texture_destroy(texture);
42
            texture = nullptr;
43
            obs_leave_graphics();
44
obs-studio-27.0.1.tar.xz/plugins/obs-browser/panel/browser-panel-client.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/panel/browser-panel-client.cpp Changed
24
 
1
@@ -278,18 +278,17 @@
2
                      const CefKeyEvent &event, CefEventHandle,
3
                      bool *)
4
 {
5
-#ifdef _WIN32
6
    if (event.type != KEYEVENT_RAWKEYDOWN)
7
        return false;
8
 
9
    if (event.windows_key_code == 'R' &&
10
+#ifdef __APPLE__
11
+       (event.modifiers & EVENTFLAG_COMMAND_DOWN) != 0) {
12
+#else
13
        (event.modifiers & EVENTFLAG_CONTROL_DOWN) != 0) {
14
+#endif
15
        browser->ReloadIgnoreCache();
16
        return true;
17
    }
18
-#else
19
-   UNUSED_PARAMETER(browser);
20
-   UNUSED_PARAMETER(event);
21
-#endif
22
    return false;
23
 }
24
obs-studio-27.0.1.tar.xz/plugins/obs-browser/panel/browser-panel-internal.hpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/panel/browser-panel-internal.hpp Changed
14
 
1
@@ -73,6 +73,12 @@
2
 
3
    void Resize();
4
 
5
+#ifdef __linux__
6
+private:
7
+   bool needsDeleteXdndProxy = true;
8
+   void unsetToplevelXdndProxy();
9
+#endif
10
+
11
 public slots:
12
    void Init();
13
 };
14
obs-studio-27.0.1.tar.xz/plugins/obs-browser/panel/browser-panel.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-browser/panel/browser-panel.cpp Changed
127
 
1
@@ -41,10 +41,6 @@
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
@@ -239,16 +235,87 @@
13
    }
14
 }
15
 
16
+#ifdef __linux__
17
+static bool XWindowHasAtom(Display *display, Window w, Atom a)
18
+{
19
+   Atom type;
20
+   int format;
21
+   unsigned long nItems;
22
+   unsigned long bytesAfter;
23
+   unsigned char *data = NULL;
24
+
25
+   if (XGetWindowProperty(display, w, a, 0, LONG_MAX, False,
26
+                  AnyPropertyType, &type, &format, &nItems,
27
+                  &bytesAfter, &data) != Success)
28
+       return false;
29
+
30
+   if (data)
31
+       XFree(data);
32
+
33
+   return type != None;
34
+}
35
+
36
+/* On Linux / X11, CEF sets the XdndProxy of the toplevel window
37
+ * it's attached to, so that it can read drag events. When this
38
+ * toplevel happens to be OBS Studio's main window (e.g. when a
39
+ * browser panel is docked into to the main window), setting the
40
+ * XdndProxy atom ends up breaking DnD of sources and scenes. Thus,
41
+ * we have to manually unset this atom.
42
+ */
43
+void QCefWidgetInternal::unsetToplevelXdndProxy()
44
+{
45
+   if (!cefBrowser)
46
+       return;
47
+
48
+   CefWindowHandle browserHandle =
49
+       cefBrowser->GetHost()->GetWindowHandle();
50
+   Display *xDisplay = cef_get_xdisplay();
51
+   Window toplevel, root, parent, *children;
52
+   unsigned int nChildren;
53
+   bool found = false;
54
+
55
+   toplevel = browserHandle;
56
+
57
+   // Find the toplevel
58
+   Atom netWmPidAtom = XInternAtom(xDisplay, "_NET_WM_PID", False);
59
+   do {
60
+       if (XQueryTree(xDisplay, toplevel, &root, &parent, &children,
61
+                  &nChildren) == 0)
62
+           return;
63
+
64
+       if (children)
65
+           XFree(children);
66
+
67
+       if (root == parent ||
68
+           !XWindowHasAtom(xDisplay, parent, netWmPidAtom)) {
69
+           found = true;
70
+           break;
71
+       }
72
+       toplevel = parent;
73
+   } while (true);
74
+
75
+   if (!found)
76
+       return;
77
+
78
+   // Check if the XdndProxy property is set
79
+   Atom xDndProxyAtom = XInternAtom(xDisplay, "XdndProxy", False);
80
+   if (needsDeleteXdndProxy &&
81
+       !XWindowHasAtom(xDisplay, toplevel, xDndProxyAtom)) {
82
+       QueueCEFTask([this]() { unsetToplevelXdndProxy(); });
83
+       return;
84
+   }
85
+
86
+   XDeleteProperty(xDisplay, toplevel, xDndProxyAtom);
87
+   needsDeleteXdndProxy = false;
88
+}
89
+#endif
90
+
91
 void QCefWidgetInternal::Init()
92
 {
93
 #ifndef __APPLE__
94
    WId handle = window->winId();
95
    QSize size = this->size();
96
-#ifdef SUPPORTS_FRACTIONAL_SCALING
97
    size *= devicePixelRatioF();
98
-#else
99
-   size *= devicePixelRatio();
100
-#endif
101
    bool success = QueueCEFTask(
102
        [this, handle, size]()
103
 #else
104
@@ -289,6 +356,10 @@
105
                CefRefPtr<CefDictionaryValue>(),
106
 #endif
107
                rqc);
108
+
109
+#ifdef __linux__
110
+           QueueCEFTask([this]() { unsetToplevelXdndProxy(); });
111
+#endif
112
        });
113
 
114
    if (success) {
115
@@ -314,11 +385,7 @@
116
 
117
 void QCefWidgetInternal::Resize()
118
 {
119
-#ifdef SUPPORTS_FRACTIONAL_SCALING
120
    QSize size = this->size() * devicePixelRatioF();
121
-#else
122
-   QSize size = this->size() * devicePixelRatio();
123
-#endif
124
 
125
    bool success = QueueCEFTask([this, size]() {
126
        if (!cefBrowser)
127
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ar-SA.ini Changed
11
 
1
@@ -3,6 +3,9 @@
2
 Bitrate="معدل النقل"
3
 Preset="الإعداد المسبق"
4
 Profile="ملف الشخصي"
5
+Level="المستوى"
6
+VAAPI.Codec="شفرة VAAPI"
7
+VAAPI.Device="جهاز VAAPI"
8
 NVENC.Preset.default="الأداء"
9
 NVENC.Preset.hq="الجودة"
10
 NVENC.Preset.hp="أداء عالي"
11
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Control de freqüència"
3
 KeyframeIntervalSec="Interval de fotograma clau (en segons, 0 = automàtic)"
4
 Lossless="Sense pèrdues"
5
+Level="Nivell"
6
 BFrames="Fotogrames-B màxims"
7
+VAAPI.Codec="Còdec VAAPI"
8
+VAAPI.Device="Dispositiu VAAPI"
9
 NVENC.Use2Pass="Utilitza codificació en dues passades"
10
 NVENC.Preset.default="Rendiment"
11
 NVENC.Preset.hq="Qualitat"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/cs-CZ.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/cs-CZ.ini Changed
12
 
1
@@ -7,7 +7,10 @@
2
 RateControl="Řízení toku"
3
 KeyframeIntervalSec="Interval klíč. snímků (vteřiny, 0=auto)"
4
 Lossless="Bezztrátový"
5
+Level="Úrověň"
6
 BFrames="Maximum B-snímků"
7
+VAAPI.Codec="Kodek VAAPI"
8
+VAAPI.Device="Zařízení VAAPI"
9
 NVENC.Use2Pass="Použít dvoustupňové enkódování"
10
 NVENC.Preset.default="Výkon"
11
 NVENC.Preset.hq="Kvalita"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/da-DK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/da-DK.ini Changed
12
 
1
@@ -7,7 +7,10 @@
2
 RateControl="Tempokontrol"
3
 KeyframeIntervalSec="Keyframe-interval (sekunder, 0= auto)"
4
 Lossless="Tabsfri"
5
+Level="Niveau"
6
 BFrames="Maks. B-billeder"
7
+VAAPI.Codec="VAAPI-codec"
8
+VAAPI.Device="VAAPI-enhed"
9
 NVENC.Use2Pass="Benyt to-trins kodning"
10
 NVENC.Preset.default="Ydeevne"
11
 NVENC.Preset.hq="Kvalitet"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini Changed
10
 
1
@@ -8,6 +8,8 @@
2
 KeyframeIntervalSec="Keyframeintervall in Sek. (0 = automatisch)"
3
 Lossless="Verlustfrei"
4
 BFrames="Max. B-Frames"
5
+VAAPI.Codec="VAAPI-Codec"
6
+VAAPI.Device="VAAPI-Gerät"
7
 NVENC.Use2Pass="Two-Pass-Codierung verwenden"
8
 NVENC.Preset.default="Leistung"
9
 NVENC.Preset.hq="Qualität"
10
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini Changed
20
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Έλεγχος ρυθμού"
3
 KeyframeIntervalSec="Συχνότητα Καρέ-Κλειδιού (δευτερόλεπτα, 0=αυτόματο)"
4
 Lossless="Χωρίς απώλειες"
5
+Level="Επίπεδο"
6
 BFrames="Μέγιστα B-frames"
7
+VAAPI.Codec="Κωδικός VAAPI"
8
+VAAPI.Device="Συσκευή VAAPI"
9
 NVENC.Use2Pass="Χρήση κωδικοποίησης δύο περασμάτων"
10
 NVENC.Preset.default="Επιδόσεις"
11
 NVENC.Preset.hq="Ποιότητα"
12
@@ -37,6 +40,7 @@
13
 ColorRange.Auto="Αυτόματο"
14
 ColorRange.Partial="Μερικός"
15
 ColorRange.Full="Πλήρης"
16
+LinearAlpha="Εφαρμογή άλφα σε γραμμικό χώρο"
17
 RestartMedia="Επανέναρξη"
18
 SpeedPercentage="Ταχύτητα"
19
 Seekable="Παρεχόμενη"
20
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini Changed
15
 
1
@@ -8,9 +8,13 @@
2
 RateControl="Rate Control"
3
 KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
4
 Lossless="Lossless"
5
+Level="Level"
6
 
7
 BFrames="Max B-frames"
8
 
9
+VAAPI.Codec="VAAPI Codec"
10
+VAAPI.Device="VAAPI Device"
11
+
12
 NVENC.Use2Pass="Use Two-Pass Encoding"
13
 NVENC.Preset.default="Performance"
14
 NVENC.Preset.hq="Quality"
15
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/es-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/es-ES.ini Changed
21
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Control de la frecuencia"
3
 KeyframeIntervalSec="Intervalo de keyframes (segundos, 0=auto)"
4
 Lossless="Sin pérdidas"
5
+Level="Nivel"
6
 BFrames="Máximos B-frames"
7
+VAAPI.Codec="Codec VAAPI"
8
+VAAPI.Device="Dispositivo VAAPI"
9
 NVENC.Use2Pass="Usar codificación en dos pasadas"
10
 NVENC.Preset.default="Rendimiento"
11
 NVENC.Preset.hq="Calidad"
12
@@ -48,7 +51,7 @@
13
 MediaFileFilter.VideoFiles="Archivos de vídeo"
14
 MediaFileFilter.AudioFiles="Archivos de audio"
15
 MediaFileFilter.AllFiles="Todos los Archivos"
16
-ReplayBuffer="Búfer de reproducción"
17
+ReplayBuffer="Búfer de repetición"
18
 ReplayBuffer.Save="Guardar repetición"
19
 HelperProcessFailed="No se pudo iniciar el proceso ayudante de grabación. Compruebe que los archivos de OBS no han sido bloqueados o eliminados por cualquier programa de seguridad externo."
20
 UnableToWritePath="No se pudo escribir a %1. Asegúrese de que utiliza una ruta de grabación que su cuenta de usuario tenga permisos para escribir y que haya suficiente espacio en disco."
21
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/fa-IR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/fa-IR.ini Changed
20
 
1
@@ -8,7 +8,10 @@
2
 RateControl="کنترل نرخ"
3
 KeyframeIntervalSec="فاصله Keyframe (ثانیه 0 = خودکار)"
4
 Lossless="بدون تلف"
5
+Level="سطح"
6
 BFrames="حد اکثر فریم های B"
7
+VAAPI.Codec="کدک VAAPI"
8
+VAAPI.Device="دستگاه VAAPI"
9
 NVENC.Use2Pass="استفاده از کدگذاری 2 گذر"
10
 NVENC.Preset.default="اجرا (کارایی)"
11
 NVENC.Preset.hq="کیفیت"
12
@@ -38,6 +41,7 @@
13
 ColorRange.Auto="خودکار"
14
 ColorRange.Partial="جزئی"
15
 ColorRange.Full="کامل"
16
+LinearAlpha="آلفا را در فضای خطی اعمال کنید"
17
 RestartMedia="اجرا مجدد"
18
 SpeedPercentage="سرعت"
19
 Seekable="جستجوگر"
20
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Rate Control -tila"
3
 KeyframeIntervalSec="Keyframe-väli (sekunteina, 0=automaattinen)"
4
 Lossless="Häviötön"
5
+Level="Taso"
6
 BFrames="Maksimi-B-ruudut"
7
+VAAPI.Codec="VAAPI-koodekki"
8
+VAAPI.Device="VAAPI-laite"
9
 NVENC.Use2Pass="Käytä Two-Pass enkoodausta"
10
 NVENC.Preset.default="Suorituskyky"
11
 NVENC.Preset.hq="Laatu"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Contrôle du débit"
3
 KeyframeIntervalSec="Intervalle d'image-clé (en secondes, 0 = auto)"
4
 Lossless="Sans perte"
5
+Level="Niveau"
6
 BFrames="Nombre maximal de B-frames"
7
+VAAPI.Codec="Codec VAAPI"
8
+VAAPI.Device="Appareil VAAPI"
9
 NVENC.Use2Pass="Utiliser l'encodage double passe"
10
 NVENC.Preset.default="Performances"
11
 NVENC.Preset.hq="Qualité"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/gd-GB.ini Changed
47
 
1
@@ -1,5 +1,5 @@
2
 FFmpegOutput="Às-chur FFmpeg"
3
-FFmpegAAC="Inneal-còdachaidh AAC tùsail airson FFmpeg"
4
+FFmpegAAC="Inneal-còdachaidh AAC bunaiteach airson FFmpeg"
5
 FFmpegOpus="Inneal-còdachaidh Opus airson FFmpeg"
6
 Bitrate="Reat bhiodan"
7
 MaxBitrate="Reat bhiodan as motha"
8
@@ -8,7 +8,10 @@
9
 RateControl="Smachd air an reat"
10
 KeyframeIntervalSec="Eadaramh nam frèamaichean-iuchrach (diog, fèin-obrachail)"
11
 Lossless="Gun chall càileachd"
12
+Level="Leibheil"
13
 BFrames="Frèamaichean-B as motha"
14
+VAAPI.Codec="Codec VAAPI"
15
+VAAPI.Device="Uidheam VAAPI"
16
 NVENC.Use2Pass="Cleachd còdachadh dà phas"
17
 NVENC.Preset.default="Dèanadas"
18
 NVENC.Preset.hq="Càileachd"
19
@@ -33,10 +36,12 @@
20
 Advanced="Adhartach"
21
 RestartWhenActivated="Ath-thòisich a’ chluiche nuair a thig gnìomh on tùs"
22
 CloseFileWhenInactive="Dùin am faidhle mur eil gnìomh ann"
23
+CloseFileWhenInactive.ToolTip="Dùinidh seo am faidhle mur eil an tùs ’ga shealltainn air an t-sruthadh no clàradh\n. Gabhaidh am faidhle atharrachadh le seo nuair nach eil an tùs gnìomhach,\nach dh’fhaoidte gum bi dàil bheag ’ga thòiseachadh nuair a thèid an tùs a ghnìomhachadh a-rithist."
24
 ColorRange="Rainse dhathan YUV"
25
 ColorRange.Auto="Fèin-obrachail"
26
 ColorRange.Partial="Leth-phàirteach"
27
 ColorRange.Full="Làn"
28
+LinearAlpha="Cuir alpha an sàs san spàs loidhneach"
29
 RestartMedia="Ath-thòisich"
30
 SpeedPercentage="Luaths"
31
 Seekable="Gabhaidh sireadh ann"
32
@@ -49,3 +54,14 @@
33
 MediaFileFilter.AllFiles="A h-uile faidhle"
34
 ReplayBuffer="Bufair na h-ath-chluiche"
35
 ReplayBuffer.Save="Sàbhail an ath-chluiche"
36
+HelperProcessFailed="Cha b’ urrainn dhuinn pròiseas-taice a’ chlàraidh a thòiseachadh. Dearbh nach deach na faidhlichean OBS a bhacadh no a thoirt air falbh le bathar-bog tèarainteachd / an aghaidh bhìorasan aig treas-phàrtaidh."
37
+UnableToWritePath="Chan urrainn dhuinn sgrìobhadh gu %1. Dèan cinnteach gu bheil thu a’ cleachdadh slighe clàraidh a dh’fhaodas an cunntas cleachdaiche agad sgrìobhadh dhi agus gu bheil àite gu leòr air an diosg."
38
+WarnWindowsDefender="Ma tha an dìon o bhathar-èirig aig Windoes 10 an comas, dh’fhaoidte gur e sin a dh’adhbharaicheas a’ mhearachd. Feuch an cuir thu dheth “inntrigeadh do phasganan fo smachd” ann an roghainnean “Tearainteachd” / “dDìon o bhìorasan ⁊ chunnartan” aig Windows."
39
+NVENC.Error="Cha deach leinn codec NVENC fhosgladh: %1"
40
+NVENC.GenericError="Dearbh gu bheil na draibhearan video agad cho ùr ’s a ghabhas. Feuch an dùin thu bathar-bog clàraidh eile a dh’fhaodadh a bhi ri NVENC, can NVIDIA Shadowplay no Windows 10 Game DVR."
41
+NVENC.BadGPUIndex="Tagh thu GPU %1 ann an roghainnean inneal-codachaidh an às-chuir. Suidhich seo air 0 is feuch ris a-rithist."
42
+NVENC.OutdatedDriver="Cha chuir draibhear làithreach na cairte video agad taic ris an tionndadh seo de NVENC, feuch an ùraich thu na draibhearan agad."
43
+NVENC.UnsupportedDevice="Mearachd NVENC: Chan eil taic ris an uidheam. Dearbh gun doir a’ chairt video agad taic ri NVENC ’s gu bheil na draibhearan cho ùr ’s a ghabhas."
44
+NVENC.TooManySessions="Mearachd NVENC: Tha cus sheiseanan co-ruitheach ann. Feuch an dùin thu bathar-bog clàraidh eile a dh’fhaodadh a bhi ri NVENC, can NVIDIA Shadowplay no Windows 10 Game DVR."
45
+NVENC.CheckDrivers="Dearbh gu bheil na draibhearan video agad cho ùr ’s a ghabhas."
46
+ReconnectDelayTime="Dàil air an ath-cheangal"
47
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/he-IL.ini Changed
62
 
1
@@ -1,5 +1,6 @@
2
 FFmpegOutput="פלט FFmpeg"
3
 FFmpegAAC="FFmpeg מקודד AAC ברירת מחדל"
4
+FFmpegOpus="מקודד FFmpeg Opus"
5
 Bitrate="קצב ביטים"
6
 MaxBitrate="קצב נתונים מקסימלי"
7
 Preset="קבוע מראש"
8
@@ -7,6 +8,10 @@
9
 RateControl="בקרת קצב"
10
 KeyframeIntervalSec="מרווח ערך ה keyframe בשניות (0=אוטומטי)"
11
 Lossless="ללא אובדן נתונים"
12
+Level="רמה"
13
+BFrames="מקסימום B-פריימים"
14
+VAAPI.Codec="VAAPI codec"
15
+VAAPI.Device="מכשיר VAAPI"
16
 NVENC.Use2Pass="השתמש בקידוד שני מעברים"
17
 NVENC.Preset.default="ביצועים"
18
 NVENC.Preset.hq="איכות"
19
@@ -15,6 +20,8 @@
20
 NVENC.Preset.ll="השהיה נמוכה"
21
 NVENC.Preset.llhq="איכות עם זמן השהייה נמוך"
22
 NVENC.Preset.llhp="ביצועים עם זמן השהייה נמוך"
23
+NVENC.LookAhead.ToolTip="מאפשר B-פריימים דינאמיים.\n\nאם מבוטל, המקודד ישתמש תמיד במספר ה-B-פריימים המצויין בהגדרה 'מקסימום B-פריימים'.\n\nאם מאופשר, המקודד יוכל לשפר את איכות התמונה ע\"י שימוש רק במספר ה-B-פריימים הנדרש, לא יותר מהמקסימום,\nבמחיר של שימוש נוסף ב-GPU."
24
+NVENC.PsychoVisualTuning.ToolTip="מאפשר הגדרות מקודד שמבצעות מיטוב של קצב הנתונים עבור איכות התמונה המורגשת,\nבמיוחד במצבים עם תנועה מרובה, במחיר של שימוש נוסף ב-GPU."
25
 NVENC.CQLevel="רמת CQ"
26
 FFmpegSource="מקור מדיה"
27
 LocalFile="קובץ מקומי"
28
@@ -23,12 +30,16 @@
29
 InputFormat="תבנית קלט"
30
 BufferingMB="מטמון רשת"
31
 HardwareDecode="השתמש בפענוח חומרה כאשר היא זמין"
32
+ClearOnMediaEnd="לא להראות כלום כאשר הניגון מסתיים"
33
 Advanced="מתקדם"
34
 RestartWhenActivated="הפעל מחדש השמעה כאשר מקור הופך לפעיל"
35
+CloseFileWhenInactive="סגירת הקובץ כאשר לא פעיל"
36
+CloseFileWhenInactive.ToolTip="הקובץ ייסגר כאשר המקור לא מוצג בשידור החי או\nההקלטקה. זה מאפשר שינוי של הקובץ כאשר המקור אינו פעיל,\nאבל עשוי לגרום להשהייה בהתחלה כאשר המקור מופעל מחדש."
37
 ColorRange="טווח צבעים YUV"
38
 ColorRange.Auto="אוטומטי"
39
 ColorRange.Partial="חלקי"
40
 ColorRange.Full="מלא"
41
+LinearAlpha="החל שקיפות במרחב לינארי"
42
 RestartMedia="אתחל"
43
 SpeedPercentage="מהירות"
44
 Seekable="בר־חיפוש"
45
@@ -39,7 +50,16 @@
46
 MediaFileFilter.VideoFiles="קובצי וידאו"
47
 MediaFileFilter.AudioFiles="קובצי אודיו"
48
 MediaFileFilter.AllFiles="כל הקבצים"
49
+ReplayBuffer="אוגר הילוך חוזר"
50
 ReplayBuffer.Save="שמירת הילוך חוזר"
51
+HelperProcessFailed="לא ניתן להתחיל את תהליך עוזר ההקלטה. יש לבדוק שקבצים של OBS לא נחסמו או הוסרו על ידי אנטי-וירוס / תוכנת אבטחה צד-שלישי."
52
+UnableToWritePath="לא ניתן לכתוב אל %1. יש לוודא שהשתמשת בנתיב הקלטה שחשבון המשתמש שלך מורשה לכתוב בו ושיש מספיק מקום בדיסק הקשיח."
53
+WarnWindowsDefender="אם הגנת כופרה של ווינדוס 10 מופעלת זה עלול לגרום לשגיאה זו. יש לנסות לכבות את הגישה המבוקרת לתיקיות ב-אבטחת ווינדוס / הגדרות הגנה מפני וירוסים ואיומים."
54
+NVENC.Error="נכשלה פתיחת NVENC codec זה: %1"
55
 NVENC.GenericError="יש לוודא שמנהלי התקני התצוגה שלך מעודכנים. כדאי לנסות לסגור תוכנת הקלטה אחרת שיש סיכוי שהיא משתמשת ב־NVENC כמו NVIDIA Shadowplay או Windows 10 Game DVR."
56
+NVENC.BadGPUIndex="בחרת ב-GPU %1 בהגדרות פלט המקודד שלך. יש להגדיר שוב ל-0 ולנסות שוב."
57
+NVENC.OutdatedDriver="הדרייבר הנוכחי של כרטיס המסך שלך אינו תומך בגרסת NVENC זו, נא לעדכן את הדרייברים שלך."
58
+NVENC.UnsupportedDevice="שגיאת NVENC: מכשיר אינו נתמך. נא לבדוק שכרטיס המסך שלך תומך ב-NVENC ושהדרייברים עדכניים."
59
+NVENC.TooManySessions="שגיאה NVENC: יותר מדי סשנים בו-זמנית. יש לנסות לסגור תוכנות הקלטה אחרות שעשויות להשתמש ב-NVENC כגון NVIDIA Shadowplay או Windows 10 Game DVR."
60
 NVENC.CheckDrivers="נא לוודא שמנהלי התקני הווידאו שלך מעודכנים."
61
 ReconnectDelayTime="השהייה בחיבור מחדש"
62
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/hi-IN.ini Changed
69
 
1
@@ -1,1 +1,67 @@
2
 FFmpegOutput="FFmpeg आउटपुट"
3
+FFmpegAAC="FFmpeg डिफ़ॉल्ट AAC एनकोडर"
4
+FFmpegOpus="FFmpeg Opus एनकोडर"
5
+Bitrate="बिटरेट"
6
+MaxBitrate="अधिकतम बिटरेट"
7
+Preset="प्रिसेट"
8
+Profile="प्रोफ़ाइल"
9
+RateControl="दर नियंत्रण"
10
+KeyframeIntervalSec="कीफ़्रेम अंतराल (सेकंड, 0=स्वतः)"
11
+Lossless="दोषरहित"
12
+Level="स्तर"
13
+BFrames="महत्तम बी-फ्रेम्स"
14
+VAAPI.Codec="VAAPI कोडेक"
15
+VAAPI.Device="VAAPI डिवाइस"
16
+NVENC.Use2Pass="2-पास एन्कोडिंग प्रयोग करें"
17
+NVENC.Preset.default="प्रदर्शन"
18
+NVENC.Preset.hq="गुणवत्ता"
19
+NVENC.Preset.hp="उन्नत प्रदर्शन"
20
+NVENC.Preset.mq="उच्च गुणवत्ता"
21
+NVENC.Preset.ll="निम्न-विलंबता"
22
+NVENC.Preset.llhq="निम्न-विलंबता गुणवत्ता"
23
+NVENC.Preset.llhp="निम्न-विलंबता प्रदर्शन"
24
+NVENC.LookAhead="आगे-पढ़ें"
25
+NVENC.LookAhead.ToolTip="गतिशील बी-फ़्रेम सक्षम करता है.\n\nयदि अक्षम है, तो एन्कोडर हमेशा 'महत्तम बी-फ़्रेम' सेटिंग में निर्दिष्ट बी-फ़्रेम की संख्या का उपयोग करेगा.\n\nयदि सक्षम है, तो यह केवल आवश्यक से अधिकतम तक बी-फ़्रेम का उपयोग करके दृश्य गुणवत्ता में वृद्धि करेगा,\nबढ़ी हुई GPU उपयोग की कीमत पर."
26
+NVENC.PsychoVisualTuning="आभासी प्रदर्शन ट्यूनिंग"
27
+NVENC.PsychoVisualTuning.ToolTip="एन्कोडर सेटिंग को सक्षम करता है जो बढ़ी हुई आभासी प्रदर्शित गुणवत्ता के लिए बिटरेट के उपयोग को अनुकूलित करता है,\nविशेष रूप से उच्च गति वाली स्थितियों में, बढ़ी हुई GPU उपयोग की कीमत पर."
28
+NVENC.CQLevel="CQ स्तर"
29
+FFmpegSource="मीडिया स्रोत"
30
+LocalFile="स्थानीय फ़ाइल"
31
+Looping="लूप"
32
+Input="इनपुट"
33
+InputFormat="इनपुट प्रारूप"
34
+BufferingMB="नेटवर्क बफ़रिंग"
35
+HardwareDecode="यदि उपलब्ध हो तो हार्डवेयर डिकोडिंग का उपयोग करें"
36
+ClearOnMediaEnd="प्लेबैक समाप्त होने पर कुछ भी न दिखाएं"
37
+Advanced="उन्नत"
38
+RestartWhenActivated="स्रोत के सक्रिय होने पर प्लेबैक पुनः प्रारंभ करें"
39
+CloseFileWhenInactive="निष्क्रिय होने पर फ़ाइल बंद करें"
40
+CloseFileWhenInactive.ToolTip="जब स्रोत, स्ट्रीम या\nरिकॉर्डिंग पर प्रदर्शित नहीं हो रहा हो तो फ़ाइल को बंद कर देता है.\nयह स्रोत के सक्रिय न होने पर फ़ाइल को बदलने की अनुमति देता है,\nलेकिन स्रोत के पुन: सक्रिय होने पर कुछ आरंभिक विलंब हो सकता है."
41
+ColorRange="YUV रंग विस्तार"
42
+ColorRange.Auto="स्वतः"
43
+ColorRange.Partial="आंशिक"
44
+ColorRange.Full="पूर्ण"
45
+LinearAlpha="लीनियर स्पेस में अल्फा लागू करें"
46
+RestartMedia="पुनः आरंभ करें"
47
+SpeedPercentage="गति"
48
+Seekable="ढूंढने योग्य"
49
+Play="चलाएं"
50
+Pause="ठहरें"
51
+Stop="रुकें"
52
+MediaFileFilter.AllMediaFiles="सभी मीडिया फ़ाइलें"
53
+MediaFileFilter.VideoFiles="वीडियो फ़ाइलें"
54
+MediaFileFilter.AudioFiles="ऑडियो फ़ाइलें"
55
+MediaFileFilter.AllFiles="सभी फ़ाइलें"
56
+ReplayBuffer="रीप्ले बफ़र"
57
+ReplayBuffer.Save="रीप्ले सहेजें"
58
+HelperProcessFailed="रिकॉर्डिंग सहायक प्रक्रिया प्रारंभ करने में असमर्थ. जांचें कि OBS फाइलों को किसी तीसरे पक्ष के एंटीवायरस / सुरक्षा सॉफ्टवेयर द्वारा अवरुद्ध किया या हटाया नहीं गया है."
59
+UnableToWritePath="%1 में लिखने में अक्षम. सुनिश्चित करें कि आप उस रिकॉर्डिंग पथ का उपयोग कर रहे हैं जिसमें आपके उपयोगकर्ता खाते को लिखने की अनुमति है और यह भी कि डिस्क में पर्याप्त जगह है."
60
+WarnWindowsDefender="यदि विंडोज 10 रैंसमवेयर प्रोटेक्शन सक्षम है तो यह इस त्रुटि का कारण भी बन सकता है. विंडोज सुरक्षा / वायरस व खतरे से सुरक्षा सेटिंग्स में नियंत्रित फ़ोल्डर पहुंच को बंद करने का प्रयास करें."
61
+NVENC.Error="NVENC कोडेक खोलने में विफल : %1"
62
+NVENC.GenericError="जांचें कि आपके वीडियो ड्राइवर अप टू डेट हैं. अन्य रिकॉर्डिंग सॉफ़्टवेयर को बंद करने का प्रयास करें जो NVENC का उपयोग कर रहे हों जैसे कि NVIDIA शैडोप्ले या विंडोज 10 गेम DVR."
63
+NVENC.BadGPUIndex="आपने अपनी आउटपुट एन्कोडर सेटिंग में GPU %1 का चयन किया है. इसे वापस 0 पर सेट करें और पुन: प्रयास करें."
64
+NVENC.OutdatedDriver="आपका वर्तमान वीडियो कार्ड ड्राइवर इस NVENC संस्करण का समर्थन नहीं करता है, कृपया अपने ड्राइवरों को अपडेट करें."
65
+NVENC.UnsupportedDevice="NVENC त्रुटि : असमर्थित डिवाइस. जांचें कि आपका वीडियो कार्ड NVENC का समर्थन करता है और ड्राइवर्स अप टू डेट हैं."
66
+NVENC.TooManySessions="NVENC त्रुटि : बहुत सारे समवर्ती सत्र. अन्य रिकॉर्डिंग सॉफ़्टवेयर को बंद करने का प्रयास करें जो NVENC का उपयोग कर रहे हों जैसे कि NVIDIA शैडोप्ले या विंडोज 10 गेम DVR."
67
+NVENC.CheckDrivers="कृपया जांचें कि आपके वीडियो ड्राइवर्स अप टू डेट हैं."
68
+ReconnectDelayTime="रीकनेक्ट विलंब"
69
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini Changed
11
 
1
@@ -8,7 +8,9 @@
2
 RateControl="Sebesség Vezérlés"
3
 KeyframeIntervalSec="Kulcsképkocka időköze (másodperc, 0=auto)"
4
 Lossless="Veszteségmentes"
5
+Level="Szint"
6
 BFrames="Max B-kockák"
7
+VAAPI.Device="VAAPI Eszköz"
8
 NVENC.Use2Pass="Kétmenetes kódolás"
9
 NVENC.Preset.default="Teljesítménycentrikus"
10
 NVENC.Preset.hq="Minőségcentrikus"
11
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/id-ID.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/id-ID.ini Changed
18
 
1
@@ -6,6 +6,8 @@
2
 RateControl="Kontrol Rate"
3
 KeyframeIntervalSec="Interval Keyframe (detik, 0=otomatis)"
4
 BFrames="Maksimum B-frame"
5
+VAAPI.Codec="Codec VAAPI"
6
+VAAPI.Device="Perangkat VAAPI"
7
 NVENC.Use2Pass="Gunakan Pengkodean Dua Langkah"
8
 NVENC.Preset.default="Performa"
9
 NVENC.Preset.hq="Kualitas"
10
@@ -32,6 +34,7 @@
11
 ColorRange.Auto="Otomatis"
12
 ColorRange.Partial="Sebagian"
13
 ColorRange.Full="Penuh"
14
+LinearAlpha="Terapkan alfa dalam ruang linier"
15
 RestartMedia="Mulai Ulang"
16
 SpeedPercentage="Kecepatan"
17
 Seekable="Bisa digeser"
18
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/it-IT.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/it-IT.ini Changed
12
 
1
@@ -6,7 +6,10 @@
2
 Profile="Profilo"
3
 RateControl="Tipo di controllo della frequenza"
4
 KeyframeIntervalSec="Intervallo dei fotogrammi chiave (in secondi, 0=automatico)"
5
+Level="Livello"
6
 BFrames="B-frame massimi"
7
+VAAPI.Codec="Codec VAAPI"
8
+VAAPI.Device="Dispositivo VAAPI"
9
 NVENC.Use2Pass="Utilizza la codifica in due passaggi"
10
 NVENC.Preset.default="Prestazioni"
11
 NVENC.Preset.hq="Qualità"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="レート制御"
3
 KeyframeIntervalSec="キーフレーム間隔 (秒, 0=自動)"
4
 Lossless="無損失"
5
+Level="レベル"
6
 BFrames="最大 B フレーム"
7
+VAAPI.Codec="VAAPI コーデック"
8
+VAAPI.Device="VAAPI デバイス"
9
 NVENC.Use2Pass="2パスエンコードを使用"
10
 NVENC.LookAhead.ToolTip="動的Bフレームを有効にします。 \n\n無効にすると、エンコーダは常に’最大Bフレーム数’設定で指定されたBフレーム数を使用します。 \n\n有効にした場合、GPU使用率の増加を犠牲にして、\n\n最大数まで、必要な分だけ多くのBフレームを使用することで視覚的品質を向上させます。"
11
 NVENC.PsychoVisualTuning="心理視覚チューニング"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ka-GE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ka-GE.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="სიხშირის მართვა"
3
 KeyframeIntervalSec="საკვანძო კადრების დაშორება (წამი, 0=თვითშერჩევა)"
4
 Lossless="უდანაკარგო"
5
+Level="დონე"
6
 BFrames="B-კადრების დასაშვები რაოდენობა"
7
+VAAPI.Codec="VAAPI-დამშიფრავი"
8
+VAAPI.Device="VAAPI-მოწყობილობა"
9
 NVENC.Use2Pass="ორმაგი დაშიფვრის გამოყენება"
10
 NVENC.Preset.default="წარმადობა"
11
 NVENC.Preset.hq="ხარისხი"
12
obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/kmr-TR.ini Added
69
 
1
@@ -0,0 +1,67 @@
2
+FFmpegOutput="Derketina FFmpeg"
3
+FFmpegAAC="Kodkera AAC a berdest bo FFmpeg"
4
+FFmpegOpus="Kodkera FFmpeg Opus"
5
+Bitrate="Leza bit"
6
+MaxBitrate="Leza bit herî pir"
7
+Preset="Pêş sazkarî"
8
+Profile="Profîl"
9
+RateControl="Kontrola rêjeyê"
10
+KeyframeIntervalSec="Navbera Çarçoveya Anîmasyon (çirke, 0=xweber)"
11
+Lossless="Bêserûber"
12
+Level="Ast"
13
+BFrames="Herî zêde B-Çarçove"
14
+VAAPI.Codec="Şifreya VAAPI"
15
+VAAPI.Device="Amûra VAAPI"
16
+NVENC.Use2Pass="Kodkirina Du-Derbas bikar bînin"
17
+NVENC.Preset.default="Performans"
18
+NVENC.Preset.hq="Qalîte"
19
+NVENC.Preset.hp="Performansa Maks"
20
+NVENC.Preset.mq="Kalîteya Max"
21
+NVENC.Preset.ll="Derengbûna kêm"
22
+NVENC.Preset.llhq="Kalîteya Kêm-Derengbûnê"
23
+NVENC.Preset.llhp="Performansa Kêm-Derengbûnê"
24
+NVENC.LookAhead="Li pêş binihêre"
25
+NVENC.LookAhead.ToolTip="Çalak dike B-çarçoveyen dînamîk.\n\nEger bêçalakkirin, kodankirî dê her dem hejmara b-çarçove ên di ahenga 'Maks B-Çarçove' de hatine diyarkirin bi kar bîne.\n\nEger çalak be, wê kalîteya dîtbarî tenê bi kar bîne ku gelek B-çarçoveyên pêwîst in, heta herî zêde,\nli bihayê bikaranîna GPU zêde dibe."
26
+NVENC.PsychoVisualTuning="Lêgerîna Wêneya Psîko"
27
+NVENC.PsychoVisualTuning.ToolTip="Sazkariyên kodkirinên ku bi karanîna leza bit ji bo kalîteya dîtbar a zêde tê tesbîtkirin,\nbi taybetî di rewşên ku bi tevgerên bilind re, bi buhayê bikaranîna GPU zêde dibe, çalak dike."
28
+NVENC.CQLevel="Asta CQ"
29
+FFmpegSource="Çavkaniya medyayê"
30
+LocalFile="Pelê herêmî"
31
+Looping="Bêdawî"
32
+Input="Ketan"
33
+InputFormat="Formata Têxê"
34
+BufferingMB="Bîrgeha demkî ya torê"
35
+HardwareDecode="Gava hebê reqalavê bi kar bîne bo kodkirinê"
36
+ClearOnMediaEnd="Dema ku lîstin qediya tiştek nîşan nede"
37
+Advanced="Pêşketî"
38
+RestartWhenActivated="Gava çavkanî çalak bibe, lîstinê ji nû ve bide destpêkirin"
39
+CloseFileWhenInactive="Gava neçalak be pelê bigire"
40
+CloseFileWhenInactive.ToolTip="Dema ku çavkanî li ser çem an\ngirtinî neyê nîşandan pelê bigire. Ev dihêle ku dema çavkanî ne çalak be, pel were guhertin,\nlê dema ku çavkanî ji nû ve çalak bike dibe ku hin derengbûna destpêkê be."
41
+ColorRange="Rêjeya rengê YUV"
42
+ColorRange.Auto="Xweber"
43
+ColorRange.Partial="Parçeyî"
44
+ColorRange.Full="Tijî"
45
+LinearAlpha="Di valahiya xêzikî ya alfa de bisepîne"
46
+RestartMedia="Ji nû ve destpêkirin"
47
+SpeedPercentage="Lez"
48
+Seekable="Tê xwestin"
49
+Play="Lê de"
50
+Pause="Rawestan"
51
+Stop="Bi dawî bike"
52
+MediaFileFilter.AllMediaFiles="Hemû pelên medyayê"
53
+MediaFileFilter.VideoFiles="Pelên vîdyoyê"
54
+MediaFileFilter.AudioFiles="Pelên dengê"
55
+MediaFileFilter.AllFiles="Hemû pel"
56
+ReplayBuffer="Bîrgeha demkî ji nû ve bide lîstin"
57
+ReplayBuffer.Save="Dîsa lêdan hilînin"
58
+HelperProcessFailed="Nikare dest bi pêvajoya alîkara tomarkirinê bike. Kontrol bikin ku dosyayên OBS'ê ji aliyê ti antîvîrûs / nermalava ewlekariyê ya partiya 3. ve nehatiye astengkirin an rakirin."
59
+UnableToWritePath="Nekarî binivîse li %1. Ji xwe bawer bin ku tu riyên tomarkirinê bi kar tanî ku hesabê te yê bikarhêner destûrê dide nivîsandinê û têra xwe cihê dîskê heye."
60
+WarnWindowsDefender="Heke Parastina Ransomware Windows 10 çalak be, ew dikare bibe sedema vê çewtiyê. Di sazkariyên parastina Windows Security / Vîrus & tehdîdê de têgihîştina peldanka kontrolkirî veke."
61
+NVENC.Error="Kodkirina NVENC nehate vekirin: %1"
62
+NVENC.GenericError="Kontrol bike ajokarên vîdyoyê nû ne. Biceribînin ku nermalava tomarkirinê ya din bigirin ku dibe ku NVENC wekî NVIDIA Shadowplay an Windows 10 Game DVR bikar bînin."
63
+NVENC.BadGPUIndex="Te di sazkariyên kodkirinên deranê de GPU %1 hilbijartiye. Vê vegerîne 0 û dîsa biceribîne."
64
+NVENC.OutdatedDriver="Ajokarê karta vîdyoyê ya niha piştgiriya vê versiyona NVENC nake, ji kerema xwe ajokarên xwe nû bike."
65
+NVENC.UnsupportedDevice="Çewtiya NVENC: Cîhaza nayê destekirin. Karta vîdeoya xwe kontrol bike ku NVENC piştgirî dike û ajokar nû ne."
66
+NVENC.TooManySessions="Çewtiya NVENC: Gelek danişîna hevdem. Biceribînin ku nermalava tomarkirinê ya din bigirin ku dibe ku NVENC wekî NVIDIA Shadowplay an Windows 10 Game DVR bikar bînin."
67
+NVENC.CheckDrivers="Ji kerema xwe ajokarên vîdyoyê heke rojanekirî ne kontrol bike."
68
+ReconnectDelayTime="Derengxistinê ji nû ve girêde"
69
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="데이터율 제어"
3
 KeyframeIntervalSec="키프레임 간격 (초 단위, 0=자동)"
4
 Lossless="무손실"
5
+Level="레벨"
6
 BFrames="최대 B-프레임"
7
+VAAPI.Codec="VAAPI 코덱"
8
+VAAPI.Device="VAAPI 장치"
9
 NVENC.Use2Pass="2 패스 인코딩 사용"
10
 NVENC.Preset.default="성능 우선"
11
 NVENC.Preset.hq="품질 우선"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ms-MY.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ms-MY.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Kawalan Kadar"
3
 KeyframeIntervalSec="Sela Bingkai Kunci (saat, 0=auto)"
4
 Lossless="Tak Hilang"
5
+Level="Tahap"
6
 BFrames="Bingkai-B Maks"
7
+VAAPI.Codec="Kodeks VAAPI"
8
+VAAPI.Device="Peranti VAAPI"
9
 NVENC.Use2Pass="Guna Pengekodan Dua-Laluan"
10
 NVENC.Preset.default="Prestasi"
11
 NVENC.Preset.hq="Kualiti"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini Changed
20
 
1
@@ -7,7 +7,10 @@
2
 RateControl="Hastighetskontroll"
3
 KeyframeIntervalSec="Nøkkelbildeintervall (sekunder, 0 = automatisk)"
4
 Lossless="Tapsfri"
5
+Level="Nivå"
6
 BFrames="Maksimalt antall B-frames"
7
+VAAPI.Codec="VAAPI kodek"
8
+VAAPI.Device="VAAPI enhet"
9
 NVENC.Use2Pass="Bruk tostegskoding"
10
 NVENC.Preset.default="Ytelse"
11
 NVENC.Preset.hq="Kvalitet"
12
@@ -36,6 +39,7 @@
13
 ColorRange.Auto="Automatisk"
14
 ColorRange.Partial="Delvis"
15
 ColorRange.Full="Hel"
16
+LinearAlpha="Bruk lineær gjennomsiktighet (alpha)"
17
 RestartMedia="Start på nytt"
18
 SpeedPercentage="Hastighet"
19
 Seekable="Søkbar"
20
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini Changed
10
 
1
@@ -3,6 +3,8 @@
2
 MaxBitrate="Maximale bitrate"
3
 Profile="Profiel"
4
 KeyframeIntervalSec="Tijd tussen keyframes (seconden, 0=auto)"
5
+Level="Niveau"
6
+VAAPI.Device="VAAPI apparaat"
7
 NVENC.Use2Pass="Gebruik two-pass encoding"
8
 NVENC.Preset.default="Prestaties"
9
 NVENC.Preset.hq="Kwaliteit"
10
obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/nn-NO.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Profile="Profil"
3
+Lossless="Tapsfri"
4
+Level="Nivå"
5
+VAAPI.Codec="VAAPI-kodek"
6
+VAAPI.Device="VAAPI-eining"
7
+NVENC.Preset.hq="Kvalitet"
8
+LocalFile="Lokal fil"
9
+SpeedPercentage="Fart"
10
+Play="Spel av"
11
+Stop="Stopp"
12
+MediaFileFilter.AllMediaFiles="Alle mediefiler"
13
+MediaFileFilter.VideoFiles="Videofiler"
14
+MediaFileFilter.AudioFiles="Lydfiler"
15
obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Perfil"
3
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Typ przepływności"
3
 KeyframeIntervalSec="Odstęp między klatkami kluczowymi (sekundy, 0=automatyczny)"
4
 Lossless="Bezstratny"
5
+Level="Poziom"
6
 BFrames="Maksymalna liczba klatek B-frame"
7
+VAAPI.Codec="Kodek VAAPI"
8
+VAAPI.Device="Urządzenie VAAPI"
9
 NVENC.Use2Pass="Użyj enkodowania dwuprzebiegowego"
10
 NVENC.Preset.default="Wydajność"
11
 NVENC.Preset.hq="Jakość"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini Changed
23
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Controle da Taxa de Bits"
3
 KeyframeIntervalSec="Intervalo de Keyframe (segundos, 0=auto)"
4
 Lossless="Sem perdas"
5
+Level="Nível"
6
 BFrames="B-Frames Máximo"
7
+VAAPI.Codec="Codec VAAPI"
8
+VAAPI.Device="Dispositivo VAAPI"
9
 NVENC.Use2Pass="Utilizar a codificação em dois passos"
10
 NVENC.Preset.default="Desempenho"
11
 NVENC.Preset.hq="Qualidade"
12
@@ -47,8 +50,8 @@
13
 MediaFileFilter.VideoFiles="Arquivos de Vídeo"
14
 MediaFileFilter.AudioFiles="Arquivos de Áudio"
15
 MediaFileFilter.AllFiles="Todos os arquivos"
16
-ReplayBuffer="Buffer do Replay"
17
-ReplayBuffer.Save="Salvar Replay"
18
+ReplayBuffer="Buffer de repetição"
19
+ReplayBuffer.Save="Salvar replay"
20
 HelperProcessFailed="Não foi possível iniciar o processo auxiliar de gravação. Verifique se os arquivos do OBS não foram bloqueados ou removidos por qualquer outro software (Ex: antivírus)."
21
 UnableToWritePath="Não foi possível escrever em %1. Certifique-se de que você está usando um caminho de gravação que sua conta de usuário possui permissão para gravar e que há espaço suficiente no disco."
22
 WarnWindowsDefender="Este erro pode acontecer também por causa da Proteção contra Ransomware do Windows 10. Experimente desligar o acesso controlado a pastas em: Configurações do Windows Defender > Proteção contra vírus e ameaças."
23
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/pt-PT.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/pt-PT.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Controlo de taxa"
3
 KeyframeIntervalSec="Intervalo do fotograma-chave (segundos, 0=automático)"
4
 Lossless="Sem perdas"
5
+Level="Nível"
6
 BFrames="B-frames máximas"
7
+VAAPI.Codec="Codec VAAPI"
8
+VAAPI.Device="Dispositivo VAAPI"
9
 NVENC.Use2Pass="Usar codificação a dois passos"
10
 NVENC.Preset.default="Desempenho"
11
 NVENC.Preset.hq="Qualidade"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Controlul ratei"
3
 KeyframeIntervalSec="Interval de cadre cheie (secunde, 0=auto)"
4
 Lossless="Fără pierderi"
5
+Level="Nivel"
6
 BFrames="Cadre B maxime"
7
+VAAPI.Codec="Codec VAAPI"
8
+VAAPI.Device="Dispozitiv VAAPI"
9
 NVENC.Use2Pass="Folosește codificarea în doi pași"
10
 NVENC.Preset.default="Performanță"
11
 NVENC.Preset.hq="Calitate"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Управление битрейтом"
3
 KeyframeIntervalSec="Интервал ключевых кадров (сек, 0=авто)"
4
 Lossless="Без потерь"
5
+Level="Уровень"
6
 BFrames="Макс. кол-во B-кадров"
7
+VAAPI.Codec="VAAPI кодек"
8
+VAAPI.Device="Устройство VAAPI"
9
 NVENC.Use2Pass="Использовать двухпроходное кодирование"
10
 NVENC.Preset.default="Производительность (Performance)"
11
 NVENC.Preset.hq="Качество (Quality)"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/sk-SK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/sk-SK.ini Changed
12
 
1
@@ -7,7 +7,10 @@
2
 RateControl="Riadenie toku"
3
 KeyframeIntervalSec="Interval kľúčových snímok (sekúnd, 0 = automaticky)"
4
 Lossless="Bezstratová"
5
+Level="Úroveň"
6
 BFrames="Maximum B-snímkov"
7
+VAAPI.Codec="Kodek VAAPI"
8
+VAAPI.Device="Zariadenie VAAPI"
9
 NVENC.Use2Pass="Použiť dvojfázové enkódovanie"
10
 NVENC.Preset.default="Výkon"
11
 NVENC.Preset.hq="Kvalita"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/sl-SI.ini Changed
20
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Nadzor hitrosti"
3
 KeyframeIntervalSec="Razmik med ključnimi sličicami (ssekunde, 0=samodejno)"
4
 Lossless="Brezizgubno"
5
+Level="Nivo"
6
 BFrames="Največje št. sličic B"
7
+VAAPI.Codec="VAAPI kodek"
8
+VAAPI.Device="VAAPI naprava"
9
 NVENC.Use2Pass="Uporabi kodiranje z dvema prehodoma"
10
 NVENC.Preset.default="Zmogljivost"
11
 NVENC.Preset.hq="Kakovost"
12
@@ -38,6 +41,7 @@
13
 ColorRange.Auto="Samodejno"
14
 ColorRange.Partial="Delno"
15
 ColorRange.Full="Polno"
16
+LinearAlpha="Uporabi alfo v linearnem prostoru"
17
 RestartMedia="Ponovno zaženi"
18
 SpeedPercentage="Hitrost"
19
 Seekable="Omogoči iskanje"
20
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini Changed
23
 
1
@@ -8,8 +8,11 @@
2
 RateControl="Hastighetskontroll"
3
 KeyframeIntervalSec="Intervall för keyframes (sekunder, 0=automatisk)"
4
 Lossless="Förlustfri"
5
+Level="Nivå"
6
 BFrames="Maximalt antal B-frames"
7
-NVENC.Use2Pass="Använd tvåpassavkodning"
8
+VAAPI.Codec="VAAPI-kodek"
9
+VAAPI.Device="VAAPI-enhet"
10
+NVENC.Use2Pass="Använd tvåpass-kodning"
11
 NVENC.Preset.default="Prestanda"
12
 NVENC.Preset.hq="Kvalitet"
13
 NVENC.Preset.hp="Maximal prestanda"
14
@@ -24,7 +27,7 @@
15
 FFmpegSource="Mediakälla"
16
 LocalFile="Lokal fil"
17
 Looping="Upprepa"
18
-Input="Infoga"
19
+Input="Inmatning"
20
 InputFormat="Inmatningsformat"
21
 BufferingMB="Nätverksbuffring"
22
 HardwareDecode="Använd hårdvaruavkodning när det är tillgängligt"
23
obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/szl-PL.ini Added
30
 
1
@@ -0,0 +1,28 @@
2
+FFmpegOutput="Wyjście FFmpeg"
3
+FFmpegAAC="Sztandardowy enkoder AAC we FFmpeg"
4
+FFmpegOpus="Enkoder FFmpeg Opus"
5
+MaxBitrate="Maksymalny bitrate"
6
+Preset="Profil"
7
+Profile="Profil"
8
+Lossless="Bezstratny"
9
+Level="Poziōm"
10
+NVENC.Preset.hq="Jakość"
11
+NVENC.CQLevel="Poziōm CQ"
12
+FFmpegSource="Zdrzōdło danych"
13
+LocalFile="Lokalny zbiōr"
14
+Looping="Pyntla"
15
+Input="Wchōd"
16
+Advanced="Zaawansowane"
17
+ColorRange="Zakrys farb YUV"
18
+ColorRange.Auto="Autōmatycznie"
19
+ColorRange.Partial="Niyblank"
20
+ColorRange.Full="Połny"
21
+RestartMedia="Resztart"
22
+SpeedPercentage="Gibkość"
23
+Seekable="Przeszukiwalny"
24
+Play="Ôdtwōrz"
25
+Pause="Pauza"
26
+Stop="Sztop"
27
+MediaFileFilter.VideoFiles="Zbiory wideo"
28
+MediaFileFilter.AudioFiles="Zbiory audio"
29
+MediaFileFilter.AllFiles="Wszyjske zbiory"
30
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini Changed
11
 
1
@@ -8,7 +8,9 @@
2
 RateControl="Oran Kontrolü"
3
 KeyframeIntervalSec="Anahtar Kare Aralığı (saniye, 0=otomatik)"
4
 Lossless="Kayıpsız"
5
+Level="Seviye"
6
 BFrames="Maksimum B-kareleri"
7
+VAAPI.Device="VAAPI Aygıtı"
8
 NVENC.Use2Pass="İki Taramalı Kodlama Kullan"
9
 NVENC.Preset.default="Performans"
10
 NVENC.Preset.hq="Kalite"
11
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="Керування бітрейтом"
3
 KeyframeIntervalSec="Інтервал ключових кадрів (секунд, 0 = авто)"
4
 Lossless="Без втрат"
5
+Level="Рівень"
6
 BFrames="Максимальна кількість B-кадрів"
7
+VAAPI.Codec="Кодек VAAPI"
8
+VAAPI.Device="Пристрій VAAPI"
9
 NVENC.Use2Pass="Використовувати двопрохідне кодування"
10
 NVENC.Preset.default="Продуктивність"
11
 NVENC.Preset.hq="Якість"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini Changed
20
 
1
@@ -7,7 +7,10 @@
2
 Profile="Hồ sơ"
3
 RateControl="Cách kiểm soát bitrate"
4
 KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
5
+Level="Cấp độ"
6
 BFrames="Khung-B tối đa"
7
+VAAPI.Codec="Bộ biên giải mã VAAPI"
8
+VAAPI.Device="Thiết bị VAAPI"
9
 NVENC.Use2Pass="Sử dụng 2-Pass Encoding"
10
 NVENC.Preset.default="Hiệu suất"
11
 NVENC.Preset.hq="Chất lượng"
12
@@ -21,6 +24,7 @@
13
 Looping="Lặp lại"
14
 Input="Nhập"
15
 InputFormat="Định dạng đầu vào"
16
+BufferingMB="Bộ đệm mạng"
17
 HardwareDecode="Sử dụng phần cứng để giải mã khi có"
18
 ClearOnMediaEnd="Không hiện gì cả khi kết thúc phát lại"
19
 Advanced="Nâng cao"
20
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="速率控制"
3
 KeyframeIntervalSec="关键帧间隔(秒, 0=自动)"
4
 Lossless="无损"
5
+Level="等级"
6
 BFrames="最大B帧"
7
+VAAPI.Codec="VAAPI 编解码器"
8
+VAAPI.Device="VAAPI 设备"
9
 NVENC.Use2Pass="使用 Two-Pass 编码"
10
 NVENC.Preset.default="性能"
11
 NVENC.Preset.hq="质量"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini Changed
12
 
1
@@ -8,7 +8,10 @@
2
 RateControl="位元率控制"
3
 KeyframeIntervalSec="關鍵訊框間隔 (秒,0 = 自動)"
4
 Lossless="無損"
5
+Level="級別"
6
 BFrames="最大 B 畫格數"
7
+VAAPI.Codec="VAAPI 編碼器"
8
+VAAPI.Device="VAAPI 裝置"
9
 NVENC.Use2Pass="使用 Two-Pass 編碼"
10
 NVENC.Preset.default="效能"
11
 NVENC.Preset.hq="畫質"
12
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c Changed
19
 
1
@@ -597,7 +597,7 @@
2
 static bool init_bitstreams(struct nvenc_data *enc)
3
 {
4
    da_reserve(enc->bitstreams, enc->buf_count);
5
-   for (size_t i = 0; i < enc->buf_count; i++) {
6
+   for (int i = 0; i < enc->buf_count; i++) {
7
        struct nv_bitstream bitstream;
8
        if (!nv_bitstream_init(enc, &bitstream)) {
9
            return false;
10
@@ -612,7 +612,7 @@
11
 static bool init_textures(struct nvenc_data *enc)
12
 {
13
    da_reserve(enc->bitstreams, enc->buf_count);
14
-   for (size_t i = 0; i < enc->buf_count; i++) {
15
+   for (int i = 0; i < enc->buf_count; i++) {
16
        struct nv_texture texture;
17
        if (!nv_texture_init(enc, &texture)) {
18
            return false;
19
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c Changed
20
 
1
@@ -724,6 +724,9 @@
2
    struct encoder_packet pkt;
3
    bool keyframe;
4
 
5
+   if (!stream->packets.size)
6
+       return false;
7
+
8
    circlebuf_pop_front(&stream->packets, &pkt, sizeof(pkt));
9
 
10
    keyframe = pkt.type == OBS_ENCODER_VIDEO && pkt.keyframe;
11
@@ -751,6 +754,8 @@
12
        struct encoder_packet pkt;
13
 
14
        for (;;) {
15
+           if (!stream->packets.size)
16
+               return;
17
            circlebuf_peek_front(&stream->packets, &pkt,
18
                         sizeof(pkt));
19
            if (pkt.type == OBS_ENCODER_VIDEO && pkt.keyframe)
20
obs-studio-27.0.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c -> obs-studio-27.1.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-vaapi.c Changed
38
 
1
@@ -545,7 +545,8 @@
2
    obs_properties_t *props = obs_properties_create();
3
    obs_property_t *list;
4
 
5
-   list = obs_properties_add_list(props, "vaapi_device", "VAAPI Device",
6
+   list = obs_properties_add_list(props, "vaapi_device",
7
+                      obs_module_text("VAAPI.Device"),
8
                       OBS_COMBO_TYPE_LIST,
9
                       OBS_COMBO_FORMAT_STRING);
10
    char path[32] = "/dev/dri/renderD1";
11
@@ -560,13 +561,15 @@
12
        }
13
    }
14
 
15
-   list = obs_properties_add_list(props, "vaapi_codec", "VAAPI Codec",
16
+   list = obs_properties_add_list(props, "vaapi_codec",
17
+                      obs_module_text("VAAPI.Codec"),
18
                       OBS_COMBO_TYPE_LIST,
19
                       OBS_COMBO_FORMAT_INT);
20
 
21
    obs_property_list_add_int(list, "H.264 (default)", AV_CODEC_ID_H264);
22
 
23
-   list = obs_properties_add_list(props, "profile", "Profile",
24
+   list = obs_properties_add_list(props, "profile",
25
+                      obs_module_text("Profile"),
26
                       OBS_COMBO_TYPE_LIST,
27
                       OBS_COMBO_FORMAT_INT);
28
    obs_property_list_add_int(list, "Constrained Baseline (default)",
29
@@ -574,7 +577,7 @@
30
    obs_property_list_add_int(list, "Main", FF_PROFILE_H264_MAIN);
31
    obs_property_list_add_int(list, "High", FF_PROFILE_H264_HIGH);
32
 
33
-   list = obs_properties_add_list(props, "level", "Level",
34
+   list = obs_properties_add_list(props, "level", obs_module_text("Level"),
35
                       OBS_COMBO_TYPE_LIST,
36
                       OBS_COMBO_FORMAT_INT);
37
    obs_property_list_add_int(list, "Auto", FF_LEVEL_UNKNOWN);
38
obs-studio-27.0.1.tar.xz/plugins/obs-filters/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/CMakeLists.txt Changed
14
 
1
@@ -30,10 +30,10 @@
2
 
3
 if (WIN32)
4
    if(DISABLE_NVAFX)
5
-       message(STATUS "NVidia Audio FX support disabled")
6
+       message(STATUS "NVIDIA Audio Effects SDK support disabled")
7
        set(LIBNVAFX_FOUND FALSE)
8
    else()
9
-       message(STATUS "NVidia Audio FX support enabled; requires redist to be installed by end-user")
10
+       message(STATUS "NVIDIA Audio Effects SDK support enabled; requires redist to be installed by end-user")
11
        add_definitions(-DLIBNVAFX_ENABLED)
12
        set(LIBNVAFX_FOUND TRUE)
13
    endif()
14
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/el-GR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/el-GR.ini Changed
11
 
1
@@ -72,6 +72,9 @@
2
 NoiseSuppress.SuppressLevel="Καταστολή επιπέδου"
3
 NoiseSuppress.Intensity="Ένταση Καταστολής"
4
 NoiseSuppress.Method="Μέθοδος"
5
+NoiseSuppress.Method.Speex="Σπηξ (χαμηλή χρήση επεξεργαστή, χαμηλή ποιότητα)"
6
+NoiseSuppress.Method.RNNoise="ΡΝΝόιζ (καλή ποιότητα, περισσότερη χρήση επεξεργαστή)"
7
+NoiseSuppress.Method.nvafx="Αφαίρεση Θορύβου ΝΒΙΝΤΙΑ (καλή ποιότητα, καμία χρήση επεξεργαστή)"
8
 Saturation="Κορεσμός"
9
 HueShift="Μετατόπιση Απόχρωσης"
10
 Amount="Ποσό"
11
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/gd-GB.ini Changed
98
 
1
@@ -1,24 +1,64 @@
2
+ColorFilter="Ceartachadh nan dathan"
3
+ColorGradeFilter="Cuir LUT an sàs"
4
+MaskFilter="Masg/Co-mheasgachadh dhealbhan"
5
+AsyncDelayFilter="Dàil video (Async)"
6
+CropFilter="Bearradh/Padadh"
7
 ScrollFilter="Sgrolaich"
8
+ChromaKeyFilter="Iuchair bonn datha"
9
+ColorKeyFilter="Iuchair datha"
10
 SharpnessFilter="Geuraich"
11
 Sharpness="Gèiread"
12
+ScaleFilter="Sgèileadh/Co-mheas deilbh"
13
+GPUDelayFilter="Dàil an reandaraidh"
14
+UndistortCenter="Càraich mì-dhealbhadh meadhan an deilbh nuair a nithear sgèileadh o ghlè leathann"
15
+NoiseGate="Geata riaslaidh"
16
+NoiseSuppress="Mùchadh riaslaidh"
17
+InvertPolarity="Ais-tionndaidh am pòlaras"
18
+Gain="Meudachadh"
19
+DelayMs="Dàil"
20
 Type="Seòrsa"
21
+MaskBlendType.MaskColor="Masg alpha (seanail datha)"
22
+MaskBlendType.MaskAlpha="Masg alpha (seanail alpha)"
23
+MaskBlendType.BlendMultiply="Co-mheasgachadh (iomadaich)"
24
+MaskBlendType.BlendAddition="Co-mheasgachadh (cuir ris)"
25
+MaskBlendType.BlendSubtraction="Co-mheasgachadh (thoir air falbh)"
26
 Path="Slighe"
27
 Color="Dath"
28
+ColorMultiply="Iomadachadh dhathan"
29
+ColorAdd="Cur ris dhathan"
30
+Opacity="Trìd-dhoilleireachd"
31
 Contrast="Iomsgaradh"
32
 Brightness="Soilleireachd"
33
+BrowsePath.Images="A h-uile faidhle deilbh"
34
 BrowsePath.AllFiles="A h-uile faidhle"
35
+KeyColorType="Seòrsa dath na h-iuchrach"
36
 KeyColor="Dath na h-iuchrach"
37
+Similarity="Coltas (1-1000)"
38
+Smoothness="Rèidheachd (1-1000)"
39
+ColorSpillReduction="Ìslich cur thairis dath na h-iuchrach (1-1000)"
40
 Crop.Left="Clì"
41
 Crop.Right="Deas"
42
 Crop.Top="Bàrr"
43
 Crop.Bottom="Bonn"
44
 Crop.Width="Leud"
45
 Crop.Height="Àirde"
46
+Crop.Relative="Dàimheach"
47
+ScrollFilter.SpeedX="Luaths air a’ chòmhnard"
48
+ScrollFilter.SpeedY="Luaths inghearach"
49
+ScrollFilter.LimitWidth="Cuingich an leud"
50
+ScrollFilter.LimitHeight="Cuingich an àirde"
51
 ScrollFilter.Loop="Lùb"
52
+CustomColor="Dath gnàthaichte"
53
 Red="Dearg"
54
 Green="Uaine"
55
 Blue="Gorm"
56
+NoiseGate.OpenThreshold="Stairsneach fosglaidh"
57
+NoiseGate.CloseThreshold="Stairsneach dùinidh"
58
+NoiseGate.AttackTime="Ùine an attack"
59
 NoiseGate.HoldTime="An ùine glèidhidh"
60
+NoiseGate.ReleaseTime="Ùine an release"
61
+Gain.GainDB="Meudachadh"
62
+StretchImage="Sìn an dealbh (leig seachad co-mheas an deilbh)"
63
 Resolution="Dùmhlachd-bhreacaidh"
64
 Base.Canvas="Dùmhlachd-bhreacaidh bhunasach (a’ chanabhais)"
65
 None="Chan eil gin"
66
@@ -27,14 +67,30 @@
67
 ScaleFiltering.Bilinear="Dà-loidhneach"
68
 ScaleFiltering.Bicubic="Dà-chiùbach"
69
 ScaleFiltering.Area="Raon"
70
+NoiseSuppress.SuppressLevel="Ìre a’ mhùchaidh"
71
+NoiseSuppress.Intensity="Dèine a’ mhùchaidh"
72
 NoiseSuppress.Method="Modh"
73
+NoiseSuppress.Method.Speex="Speex (cleachdadh beag a’ CPU, càileachd ìosal)"
74
+NoiseSuppress.Method.RNNoise="RNNoise (càileachd mhath, cleachdadh nas motha a’ CPU)"
75
+NoiseSuppress.Method.nvafx="NVIDIA Noise Removal (càileachd mhath, gun chleachdadh a’ CPU)"
76
 Saturation="Sàthachd"
77
+HueShift="Gluasad tuair"
78
 Amount="Uiread"
79
+Compressor="Dùmhlaichear"
80
 Compressor.Ratio="Co-mheas"
81
 Compressor.Threshold="Stairsneach"
82
+Compressor.OutputGain="Meudachadh an às-chuir"
83
 Limiter.Threshold="Stairsneach"
84
 Expander.Ratio="Co-mheas"
85
 Expander.Threshold="Stairsneach"
86
-Expander.Peak="Mullach"
87
+Expander.OutputGain="Meudachadh an às-chuir"
88
+Expander.Detector="Mothachadh"
89
+Expander.Peak="Bàrr"
90
 Expander.None="Chan eil gin"
91
+Expander.Presets="Ro-sheataichean"
92
 Expander.Presets.Gate="Geata"
93
+LumaKeyFilter="Iuchair luma"
94
+Luma.LumaMax="Luma as motha"
95
+Luma.LumaMin="Luma as lugha"
96
+Luma.LumaMaxSmooth="Luma rèidh as motha"
97
+Luma.LumaMinSmooth="Luma rèidh as lugha"
98
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/he-IL.ini Changed
61
 
1
@@ -1,4 +1,5 @@
2
 ColorFilter="תיקון צבע"
3
+ColorGradeFilter="החלת LUT"
4
 MaskFilter="מסכה/עירבוב תמונה"
5
 AsyncDelayFilter="השהיית וידאו (אסינכרונית)"
6
 CropFilter="חיתוך/ריפוד"
7
@@ -9,6 +10,7 @@
8
 Sharpness="חדות"
9
 ScaleFilter="יחס גובה רוחב/קנה מידה"
10
 GPUDelayFilter="רנדר דיליי"
11
+UndistortCenter="מנע עיוות של מרכז התמונה בעת שינוי קנה מידה מאולטרה-רחב"
12
 NoiseGate="שער רעש"
13
 NoiseSuppress="הפחתת רעשים"
14
 InvertPolarity="הפוך קוטביות"
15
@@ -60,6 +62,7 @@
16
 Gain.GainDB="הגברה"
17
 StretchImage="מתח תמונה (יחס הגובה־רוחב של התמונה לא ישמר)"
18
 Resolution="רזולוציה"
19
+Base.Canvas="רזולוציית (משטח עבודה) בסיס"
20
 None="ללא"
21
 ScaleFiltering="מסנן קנה מידה"
22
 ScaleFiltering.Point="נקודה"
23
@@ -70,20 +73,37 @@
24
 NoiseSuppress.SuppressLevel="רמת השתקה"
25
 NoiseSuppress.Intensity="עוצמת השתקה"
26
 NoiseSuppress.Method="שיטה"
27
+NoiseSuppress.Method.Speex="Speex (שימוש נמוך במעבד, איכות נמוכה)"
28
+NoiseSuppress.Method.RNNoise="RNNoise (איכות טובה, יותר שימוש במעבד)"
29
+NoiseSuppress.Method.nvafx="NVIDIA Noise Removal (איכות טובה, ללא שימוש במעבד)"
30
 Saturation="רוויה"
31
+HueShift="שינוי גוון"
32
 Amount="כמות"
33
+Compressor="מדחס"
34
 Compressor.Ratio="יחס"
35
 Compressor.Threshold="סף"
36
+Compressor.AttackTime="התקפה"
37
 Compressor.ReleaseTime="שחרור"
38
+Compressor.OutputGain="עוצמת שמע פלט"
39
+Compressor.SidechainSource="מקור מתכופף/sidechain"
40
 Limiter="מגביל"
41
 Limiter.Threshold="סף"
42
 Limiter.ReleaseTime="שחרור"
43
 Expander="מרחיב"
44
 Expander.Ratio="יחס"
45
 Expander.Threshold="עוצמה"
46
+Expander.AttackTime="התקפה"
47
 Expander.ReleaseTime="שחרור"
48
+Expander.OutputGain="עוצמת שמע פלט"
49
 Expander.Detector="זיהוי"
50
+Expander.RMS="שורש ממוצע ריבועים (RMS)"
51
 Expander.Peak="שיא"
52
 Expander.None="ללא"
53
+Expander.Presets="הגדרות קבועות"
54
+Expander.Presets.Expander="מרחיב"
55
 Expander.Presets.Gate="שער"
56
 LumaKeyFilter="מפתח Luma"
57
+Luma.LumaMax="מקסימום Luma"
58
+Luma.LumaMin="מינימום Luma"
59
+Luma.LumaMaxSmooth="החלקת מקסימום Luma"
60
+Luma.LumaMinSmooth="החלקת מינימום Luma"
61
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/hi-IN.ini Changed
109
 
1
@@ -1,3 +1,107 @@
2
+ColorFilter="रंग सुधार"
3
+ColorGradeFilter="LUT लागू करें"
4
+MaskFilter="छवि मास्क / ब्लेंड"
5
+AsyncDelayFilter="वीडियो विलंब (Async)"
6
+CropFilter="छाँटें/पैड करें"
7
+ScrollFilter="स्क्रॉल"
8
+ChromaKeyFilter="मुख्य क्रोमा"
9
+ColorKeyFilter="मुख्य रंग"
10
+SharpnessFilter="पैना"
11
+Sharpness="पैनापन"
12
+ScaleFilter="स्केलिंग/आकार अनुपात"
13
+GPUDelayFilter="रेंडर विलंब"
14
+UndistortCenter="अल्ट्रावाइड से स्केलिंग करते समय छवि के केंद्र को विकृत न करें"
15
+NoiseGate="शोर द्वार"
16
+NoiseSuppress="शोर दमन"
17
+InvertPolarity="ध्रुवीयता पलटें"
18
+Gain="बढ़त"
19
+DelayMs="विलंब"
20
+Type="प्रकार"
21
+MaskBlendType.MaskColor="अल्फा मास्क (रंग चैनल)"
22
+MaskBlendType.MaskAlpha="अल्फा मास्क (अल्फा चैनल)"
23
+MaskBlendType.BlendMultiply="ब्लेंड (गुणा)"
24
+MaskBlendType.BlendAddition="ब्लेंड (जोड़)"
25
+MaskBlendType.BlendSubtraction="ब्लेंड (घटाव)"
26
+Path="पथ"
27
+Color="रंग"
28
+ColorMultiply="रंगीन गुणा"
29
+ColorAdd="रंगीन जोड़ें"
30
+Opacity="अपारदर्शिता"
31
+Contrast="विषमता"
32
+Brightness="धवलता"
33
+Gamma="गामा"
34
+BrowsePath.Images="सभी छवि फ़ाइलें"
35
+BrowsePath.AllFiles="सभी फ़ाइलें"
36
+KeyColorType="मुख्य रंग प्रकार"
37
+KeyColor="मुख्य रंग"
38
+Similarity="समानता (1-1000)"
39
+Smoothness="चिकनाई (1-1000)"
40
+ColorSpillReduction="मुख्य रंग छलकाव कमी (1-1000)"
41
+Crop.Left="बाएं"
42
+Crop.Right="दाएं"
43
+Crop.Top="शीर्ष"
44
+Crop.Bottom="तल"
45
+Crop.Width="चौड़ाई"
46
+Crop.Height="ऊँचाई"
47
+Crop.Relative="सापेक्ष"
48
+ScrollFilter.SpeedX="समतल गति"
49
+ScrollFilter.SpeedY="खड़ी गति"
50
+ScrollFilter.LimitWidth="सीमित चौड़ाई"
51
+ScrollFilter.LimitHeight="सीमित ऊँचाई"
52
+ScrollFilter.Loop="लूप"
53
+CustomColor="निर्मित रंग"
54
+Red="लाल"
55
+Green="हरा"
56
+Blue="नीला"
57
+Magenta="मजेंटा"
58
+NoiseGate.OpenThreshold="आरंभ सीमा"
59
+NoiseGate.CloseThreshold="समाप्ति सीमा"
60
+NoiseGate.AttackTime="चढ़ाई काल"
61
+NoiseGate.HoldTime="ठहराव काल"
62
+NoiseGate.ReleaseTime="उतराई काल"
63
+Gain.GainDB="बढ़त"
64
+StretchImage="छवि विस्तृत करें (छवि आकार अनुपात छोड़ें)"
65
+Resolution="रिजॉल्यूशन"
66
+Base.Canvas="मूल (कैनवास) रिजॉल्यूशन"
67
+None="कुछ नहीं"
68
+ScaleFiltering="स्केल फ़िल्टरिंग"
69
+ScaleFiltering.Point="बिंदु"
70
+ScaleFiltering.Bilinear="बाइलिनिअर"
71
+ScaleFiltering.Bicubic="बाइक्यूबिक"
72
+ScaleFiltering.Area="क्षेत्रफल"
73
+NoiseSuppress.SuppressLevel="दमन स्तर"
74
+NoiseSuppress.Intensity="दमन तीव्रता"
75
+NoiseSuppress.Method="विधि"
76
 NoiseSuppress.Method.Speex="Speex (CPU का कम प्रयोग, निम्न गुणवत्ता)"
77
 NoiseSuppress.Method.RNNoise="RNNoise (अच्छी गुणवत्ता, CPU का अधिक प्रयोग)"
78
 NoiseSuppress.Method.nvafx="NVIDIA शोर हटाना (अच्छी गुणवत्ता, कोई CPU प्रयोग नहीं)"
79
+Saturation="संतृप्ति"
80
+HueShift="ह्यू शिफ्ट"
81
+Amount="मात्रा"
82
+Compressor="संपीड़क"
83
+Compressor.Ratio="अनुपात"
84
+Compressor.Threshold="परिसीमा"
85
+Compressor.AttackTime="चढ़ाई"
86
+Compressor.ReleaseTime="उतराई"
87
+Compressor.OutputGain="आउटपुट बढ़त"
88
+Compressor.SidechainSource="साइडचेन/डकिंग स्रोत"
89
+Limiter="लिमिटर"
90
+Limiter.Threshold="परिसीमा"
91
+Limiter.ReleaseTime="उतराई"
92
+Expander="विस्तारक"
93
+Expander.Ratio="अनुपात"
94
+Expander.Threshold="परिसीमा"
95
+Expander.AttackTime="चढ़ाई"
96
+Expander.ReleaseTime="उतराई"
97
+Expander.OutputGain="आउटपुट बढ़त"
98
+Expander.Detector="संसूचन"
99
+Expander.Peak="चोटी"
100
+Expander.None="कुछ नहीं"
101
+Expander.Presets="प्रीसेट"
102
+Expander.Presets.Expander="विस्तारक"
103
+Expander.Presets.Gate="द्वार"
104
+LumaKeyFilter="Luma प्रमुख"
105
+Luma.LumaMax="Luma महत्तम"
106
+Luma.LumaMin="Luma लघुत्तम"
107
+Luma.LumaMaxSmooth="Luma महत्तम चिकना"
108
+Luma.LumaMinSmooth="Luma लघुत्तम चिकना"
109
obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/kmr-TR.ini Added
110
 
1
@@ -0,0 +1,108 @@
2
+ColorFilter="Serrastkirina rengan"
3
+ColorGradeFilter="LUT bisepîne"
4
+MaskFilter="Maskeya Wêne/Tevlihevkirin"
5
+AsyncDelayFilter="Derengketina Vîdeoyê (Pêşvebirî)"
6
+CropFilter="Qirpandin/Ped"
7
+ScrollFilter="Şemitandin"
8
+ChromaKeyFilter="Kilîtên Chroma"
9
+ColorKeyFilter="Kilîta rengê"
10
+SharpnessFilter="Tûjkirin"
11
+Sharpness="Tûjbûn"
12
+ScaleFilter="Pîvankirin/Rêjeya alî"
13
+GPUDelayFilter="Dereng Render bike"
14
+UndistortCenter="Wêneyê dema ku ji pir fireh dikin, xera nekin"
15
+NoiseGate="Deriyê Deng"
16
+NoiseSuppress="Pejirandina Deng"
17
+InvertPolarity="Cemserîtî Vegerîne"
18
+Gain="Qezenc"
19
+DelayMs="Derengxistin"
20
+Type="Cure"
21
+MaskBlendType.MaskColor="Maskeya Alfayê (Qenala Rengan)"
22
+MaskBlendType.MaskAlpha="Maskeya Alfayê (Qenala Alfa)"
23
+MaskBlendType.BlendMultiply="Tevlihev (Piralî)"
24
+MaskBlendType.BlendAddition="Tevlihev (Lêzêdekirin)"
25
+MaskBlendType.BlendSubtraction="Tevlihev (Jexistinî)"
26
+Path="Rê"
27
+Color="Reng"
28
+ColorMultiply="Reng piralî"
29
+ColorAdd="Reng lê zêde bike"
30
+Opacity="Zelalî"
31
+Contrast="Dijber"
32
+Brightness="Ronahî"
33
+Gamma="Gama"
34
+BrowsePath.Images="Hemû pelên wêneyan"
35
+BrowsePath.AllFiles="Hemû pel"
36
+KeyColorType="Cureyê rengê mifteyan"
37
+KeyColor="kilîta rengê"
38
+Similarity="Wekehevî (1-1000)"
39
+Smoothness="Nermbûn (1-1000)"
40
+ColorSpillReduction="Kêmkirina rijandina rengê mifteyê (1-1000)"
41
+Crop.Left="Çep"
42
+Crop.Right="Rast"
43
+Crop.Top="Jor"
44
+Crop.Bottom="Jêr"
45
+Crop.Width="Firehî"
46
+Crop.Height="Bilindî"
47
+Crop.Relative="Xizm"
48
+ScrollFilter.SpeedX="Leza Berhêl"
49
+ScrollFilter.SpeedY="Leza emûdî"
50
+ScrollFilter.LimitWidth="Firehiya Sînor"
51
+ScrollFilter.LimitHeight="Bilindahiya Sînor"
52
+ScrollFilter.Loop="Bêdawî"
53
+CustomColor="Rengên taybet"
54
+Red="Sor"
55
+Green="Kesk"
56
+Blue="Şîn"
57
+Magenta="Sorê binevşî"
58
+NoiseGate.OpenThreshold="Bendava vekirî"
59
+NoiseGate.CloseThreshold="Bendava girtî"
60
+NoiseGate.AttackTime="Dema êrîş"
61
+NoiseGate.HoldTime="Wext bigirin"
62
+NoiseGate.ReleaseTime="Wext weşandin"
63
+Gain.GainDB="Qezenc"
64
+StretchImage="Wêneyê dirêj bike (rêjeya aliyê wêneyan dûr xe)"
65
+Resolution="Averûtî"
66
+Base.Canvas="Averûtîya bingehîn (Canvas)"
67
+None="Netû"
68
+ScaleFiltering="Lêkera pîvanan"
69
+ScaleFiltering.Point="Xal"
70
+ScaleFiltering.Bilinear="Du heb xêzî"
71
+ScaleFiltering.Bicubic="Bikubik"
72
+ScaleFiltering.Lanczos="Lanczoyan"
73
+ScaleFiltering.Area="Dever"
74
+NoiseSuppress.SuppressLevel="Asta zordariyê"
75
+NoiseSuppress.Intensity="Zordarîya serkutkirin"
76
+NoiseSuppress.Method="Rêbaz"
77
+NoiseSuppress.Method.Speex="Lez (karanîna CPU kêm, kalîteya kêm)"
78
+NoiseSuppress.Method.RNNoise="RNNoise (qalîteya baş, bêtir karanîna CPU)"
79
+NoiseSuppress.Method.nvafx="NVIDIA rakirina dengê (qalîteya baş, bê karanîna CPU)"
80
+Saturation="Têrbûn"
81
+HueShift="Guhestina tonê"
82
+Amount="Qiyas"
83
+Compressor="Kompresor"
84
+Compressor.Ratio="Rêje"
85
+Compressor.Threshold="Berderî"
86
+Compressor.AttackTime="Êrîş"
87
+Compressor.ReleaseTime="Berdan"
88
+Compressor.OutputGain="Qezenca hilberînê"
89
+Compressor.SidechainSource="Zencîra hêl/Çavkaniya werdek"
90
+Limiter="Sînor"
91
+Limiter.Threshold="Berderî"
92
+Limiter.ReleaseTime="Berdan"
93
+Expander="Berfirehker"
94
+Expander.Ratio="Rêje"
95
+Expander.Threshold="Berderî"
96
+Expander.AttackTime="Êrîş"
97
+Expander.ReleaseTime="Berdan"
98
+Expander.OutputGain="Qezenca hilberînê"
99
+Expander.Detector="Kifş kirin"
100
+Expander.Peak="Serî"
101
+Expander.None="Ne yek"
102
+Expander.Presets="Pêş sazkarîyên"
103
+Expander.Presets.Expander="Berfirehker"
104
+Expander.Presets.Gate="Dergeh"
105
+LumaKeyFilter="Mifteya Luma"
106
+Luma.LumaMax="Luma herî zêde"
107
+Luma.LumaMin="Luma herî kêm"
108
+Luma.LumaMaxSmooth="Luma herî zêde bêgirûz"
109
+Luma.LumaMinSmooth="Luma herî kêm bêgirûz"
110
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/ko-KR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/ko-KR.ini Changed
26
 
1
@@ -14,7 +14,7 @@
2
 NoiseGate="노이즈 게이트"
3
 NoiseSuppress="소음 억제"
4
 InvertPolarity="극성 반전"
5
-Gain="증폭"
6
+Gain="게인"
7
 DelayMs="지연"
8
 Type="형식"
9
 MaskBlendType.MaskColor="알파 마스크 (색채 채널)"
10
@@ -79,12 +79,12 @@
11
 Saturation="채도"
12
 HueShift="색조 변화"
13
 Amount="양"
14
-Compressor="압축방식"
15
+Compressor="컴프레서"
16
 Compressor.Ratio="비율"
17
 Compressor.Threshold="임계값"
18
-Compressor.AttackTime="신호 감지 후 반응까지 걸리는 시간"
19
+Compressor.AttackTime="반응 시간"
20
 Compressor.ReleaseTime="해제"
21
-Compressor.OutputGain="출력 증폭"
22
+Compressor.OutputGain="출력 게인"
23
 Compressor.SidechainSource="사이드체인/더킹 소스"
24
 Limiter="음성 제한"
25
 Limiter.Threshold="임계값"
26
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini Changed
22
 
1
@@ -23,6 +23,8 @@
2
 MaskBlendType.BlendSubtraction="Bland (subtraher)"
3
 Path="Bane"
4
 Color="Farge"
5
+ColorMultiply="Multipliser farge"
6
+ColorAdd="Legg til farge"
7
 Opacity="Opasitet (ugjennomsiktighet)"
8
 Contrast="Kontrast"
9
 Brightness="Lysstyrke"
10
@@ -65,7 +67,11 @@
11
 ScaleFiltering.Bicubic="Bikubisk"
12
 ScaleFiltering.Area="Område"
13
 NoiseSuppress.SuppressLevel="Dempelse Nivå"
14
+NoiseSuppress.Intensity="Dempnings intensitet"
15
 NoiseSuppress.Method="Metode"
16
+NoiseSuppress.Method.Speex="Speex (lav CPU bruk, lav kvalitet)"
17
+NoiseSuppress.Method.RNNoise="RNNoise (god kvalitet, mer CPU bruk)"
18
+NoiseSuppress.Method.nvafx="NVIDIA Noise Removal (god kvalitet, ingen CPU-bruk)"
19
 Saturation="Metning"
20
 HueShift="Fargetone Skifte"
21
 Amount="Mengde"
22
obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/nn-NO.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+Color="Farge"
3
+Crop.Left="Venstre"
4
+Crop.Right="Høgre"
5
+Crop.Top="Topp"
6
+Crop.Bottom="Botn"
7
+Crop.Width="Breidde"
8
+Crop.Height="Høgde"
9
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/pl-PL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/pl-PL.ini Changed
16
 
1
@@ -1,4 +1,4 @@
2
-ColorFilter="Korekcja Kolorów"
3
+ColorFilter="Korekcja kolorów"
4
 ColorGradeFilter="Look-Up Tables (LUT)"
5
 MaskFilter="Maskowanie/nakładanie obrazu"
6
 AsyncDelayFilter="Opóźnienie wideo (asynchronicznie)"
7
@@ -30,7 +30,7 @@
8
 Contrast="Kontrast"
9
 Brightness="Jasność"
10
 BrowsePath.Images="Wszystkie pliki obrazów"
11
-BrowsePath.AllFiles="Wszystkie Pliki"
12
+BrowsePath.AllFiles="Wszystkie pliki"
13
 KeyColorType="Typ klucza kolorów"
14
 KeyColor="Kolor kluczowy"
15
 Similarity="Podobieństwo (1-1000)"
16
obs-studio-27.0.1.tar.xz/plugins/obs-filters/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/sl-SI.ini Changed
31
 
1
@@ -10,7 +10,7 @@
2
 Sharpness="Ostrina"
3
 ScaleFilter="Spr. velikosti/Razmerje"
4
 GPUDelayFilter="Zakasnitev izrisa"
5
-UndistortCenter="Odpravi popačenje sredine slike ob prilagajanju velikosti iz ultraširoke"
6
+UndistortCenter="Odpravi popačenje sredine slike ob spreminjanju velikosti iz ultraširoke"
7
 NoiseGate="Vrata šuma"
8
 NoiseSuppress="Dušenje šuma"
9
 InvertPolarity="Obrni polarnost"
10
@@ -24,6 +24,8 @@
11
 MaskBlendType.BlendSubtraction="Premešaj (odštej)"
12
 Path="Pot"
13
 Color="Barva"
14
+ColorMultiply="Zmnoži barvo"
15
+ColorAdd="Prištej barvo"
16
 Opacity="Motnost"
17
 Contrast="Kontrast"
18
 Brightness="Svetlost"
19
@@ -68,7 +70,11 @@
20
 ScaleFiltering.Bicubic="Dvoprostor."
21
 ScaleFiltering.Area="Območje"
22
 NoiseSuppress.SuppressLevel="Raven dušenja"
23
+NoiseSuppress.Intensity="Intenzivnost potlačitve"
24
 NoiseSuppress.Method="Metoda"
25
+NoiseSuppress.Method.Speex="Speex (majhna obremenitev procesorja, nizka kakovost)"
26
+NoiseSuppress.Method.RNNoise="RNNoise (visoka kakovost, večja obremenitev procesorja)"
27
+NoiseSuppress.Method.nvafx="NVIDIA odstranjevanje šuma (visoka kakovost, ne obremenjuje procesorja)"
28
 Saturation="Nasičenost"
29
 HueShift="Zamik odtenka"
30
 Amount="Količina"
31
obs-studio-27.1.3.tar.xz/plugins/obs-filters/data/locale/szl-PL.ini Added
98
 
1
@@ -0,0 +1,96 @@
2
+ColorFilter="Korekcyjo farb"
3
+ColorGradeFilter="Look-Up Tables (LUT)"
4
+MaskFilter="Maskowanie/nakłodanie ôbrazu"
5
+AsyncDelayFilter="Ôpōźniynie wideo (asynchrōnicznie)"
6
+CropFilter="Przitnij/Dopołnij"
7
+ScrollFilter="Przewijanie"
8
+SharpnessFilter="Wyôstrzanie"
9
+Sharpness="Wyôstrzanie"
10
+ScaleFilter="Skalowanie/proporcyje"
11
+GPUDelayFilter="Ôpōźniynie rynderowanio"
12
+UndistortCenter="Wyciep łgania przi skalowaniu zdrzōdeł ô srogij szyrokości"
13
+NoiseGate="Bramka fiōnczyń"
14
+NoiseSuppress="Tumiynie fiōnczynio"
15
+InvertPolarity="Ôdwrōcynie polaryzacyje"
16
+Gain="Poziōm"
17
+DelayMs="Ôpōźniynie"
18
+Type="Zorta"
19
+MaskBlendType.MaskColor="Larwa alfa (kanał farby)"
20
+MaskBlendType.MaskAlpha="Larwa alfa (kanał alfa)"
21
+MaskBlendType.BlendMultiply="Łōnczynie ôbrazōw (iloczyn)"
22
+MaskBlendType.BlendAddition="Łōnczynie ôbrazōw (suma)"
23
+MaskBlendType.BlendSubtraction="Łōnczynie ôbrazōw (rōżnica)"
24
+Path="Cesta"
25
+Color="Farba"
26
+ColorMultiply="Iloczyn farby"
27
+ColorAdd="Suma farby"
28
+Opacity="Przejzdrzistość"
29
+Contrast="Kōntrast"
30
+Brightness="Jasność"
31
+BrowsePath.Images="Wszyjske zbiory ôbrazōw"
32
+BrowsePath.AllFiles="Wszyjske zbiory"
33
+KeyColorType="Zorta klucza farb"
34
+KeyColor="Farba klucza"
35
+Similarity="Podobiyństwo (1-1000)"
36
+Smoothness="Gładkość (1-1000)"
37
+ColorSpillReduction="Tolerancyjo farby kluczowyj (1-1000)"
38
+Crop.Left="Do lewyj"
39
+Crop.Right="Do prawyj"
40
+Crop.Top="Ôd gōry"
41
+Crop.Bottom="Ôd spodka"
42
+Crop.Width="Szyrokość"
43
+Crop.Height="Wysokość"
44
+Crop.Relative="Wzglyndne"
45
+ScrollFilter.SpeedX="Wartkość poziōmo"
46
+ScrollFilter.SpeedY="Wartkość piōnowo"
47
+ScrollFilter.LimitWidth="Limit szyrokości"
48
+ScrollFilter.LimitHeight="Limit wysokości"
49
+ScrollFilter.Loop="Pyntla"
50
+CustomColor="Niysztandardowo farba"
51
+Red="Czyrwōno"
52
+Green="Zielōno"
53
+Blue="Modro"
54
+Magenta="Purpurowo"
55
+NoiseGate.OpenThreshold="Prōg ôtworzynio"
56
+NoiseGate.CloseThreshold="Prōg zawrzynio"
57
+NoiseGate.AttackTime="Czas ataku"
58
+NoiseGate.HoldTime="Czas strzimanio"
59
+NoiseGate.ReleaseTime="Czas zwolniynio"
60
+Gain.GainDB="Poziōm"
61
+StretchImage="Rozciōngniyńcie ôbrazu (ignoruj proporcyje)"
62
+Resolution="Rozdzielczość"
63
+Base.Canvas="Rozdzielczość bazowo (ôbroz)"
64
+None="Brak"
65
+ScaleFiltering="Filtrowanie skalowanio"
66
+ScaleFiltering.Point="Pōnkt"
67
+ScaleFiltering.Bilinear="Dwulinijowe"
68
+ScaleFiltering.Bicubic="Dwusześciynne"
69
+ScaleFiltering.Area="Przestrzyństwo"
70
+NoiseSuppress.SuppressLevel="Poziōm tumiynio"
71
+NoiseSuppress.Intensity="Natynżynie tumiynio"
72
+NoiseSuppress.Method="Knif"
73
+NoiseSuppress.Method.Speex="Speex (niske użycie procesōra, nisko jakość)"
74
+NoiseSuppress.Method.RNNoise="RNNoise (srogsze użycie procesōra, dobro jakość)"
75
+NoiseSuppress.Method.nvafx="Nvidia Noise Removal (dobro jakość, brak użycio procesōra)"
76
+Saturation="Saturacyjo"
77
+HueShift="Cofniyńcie farby"
78
+Amount="Wielość"
79
+Compressor="Kōmpresōr"
80
+Compressor.Ratio="Relacyjo"
81
+Compressor.Threshold="Prōg"
82
+Compressor.AttackTime="Atak"
83
+Compressor.ReleaseTime="Ôdpuszczynie"
84
+Compressor.OutputGain="Prefit na wyjściu"
85
+Compressor.SidechainSource="Zdrzōdło poboczne"
86
+Limiter.Threshold="Prōg ôdetniyńcio"
87
+Limiter.ReleaseTime="Ôdpuszczynie"
88
+Expander.Ratio="Relacyjo"
89
+Expander.Threshold="Prōg"
90
+Expander.AttackTime="Atak"
91
+Expander.ReleaseTime="Ôdpuszczynie"
92
+Expander.OutputGain="Prefit na wyjściu"
93
+Expander.Detector="Detekcyjo"
94
+Expander.Peak="Szpica"
95
+Expander.None="Brak"
96
+Expander.Presets="Presety"
97
+Expander.Presets.Gate="Brama"
98
obs-studio-27.0.1.tar.xz/plugins/obs-filters/mask-filter.c -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/mask-filter.c Changed
10
 
1
@@ -310,7 +310,7 @@
2
        return;
3
 
4
    param = gs_effect_get_param_by_name(filter->effect, "target");
5
-   gs_effect_set_texture(param, filter->target);
6
+   gs_effect_set_texture_srgb(param, filter->target);
7
 
8
    param = gs_effect_get_param_by_name(filter->effect, "color");
9
    gs_effect_set_vec4(param, &filter->color);
10
obs-studio-27.0.1.tar.xz/plugins/obs-filters/noise-suppress-filter.c -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/noise-suppress-filter.c Changed
120
 
1
@@ -140,6 +140,7 @@
2
 
3
 #ifdef LIBNVAFX_ENABLED
4
 /* global mutex for nvafx load functions since they aren't thread-safe */
5
+bool nvafx_initializer_mutex_initialized;
6
 pthread_mutex_t nvafx_initializer_mutex;
7
 #endif
8
 
9
@@ -235,7 +236,7 @@
10
    if (!ng->handle[0]) {
11
        ng->sample_rate = NVAFX_SAMPLE_RATE;
12
 
13
-       for (int i = 0; i < ng->channels; i++) {
14
+       for (size_t i = 0; i < ng->channels; i++) {
15
            err = NvAFX_CreateEffect(NVAFX_EFFECT_DENOISER,
16
                         &ng->handle[i]);
17
            if (err != NVAFX_STATUS_SUCCESS) {
18
@@ -397,7 +398,7 @@
19
        pthread_mutex_lock(&ng->nvafx_mutex);
20
        if (ng->nvafx_initialized) {
21
            int err;
22
-           for (int i = 0; i < ng->channels; i++) {
23
+           for (size_t i = 0; i < ng->channels; i++) {
24
                err = NvAFX_SetFloat(
25
                    ng->handle[i],
26
                    NVAFX_PARAM_DENOISER_INTENSITY_RATIO,
27
@@ -512,19 +513,20 @@
28
 #ifdef LIBNVAFX_ENABLED
29
    if (!load_lib()) {
30
        blog(LOG_INFO,
31
-            "[noise suppress: Nvidia RTX denoiser disabled, redistributable not found]");
32
+            "[noise suppress]: NVIDIA RTX denoiser disabled, redistributable not found");
33
        return false;
34
    }
35
 
36
-   pthread_mutex_init(&nvafx_initializer_mutex, PTHREAD_MUTEX_DEFAULT);
37
+   nvafx_initializer_mutex_initialized =
38
+       pthread_mutex_init(&nvafx_initializer_mutex, NULL) == 0;
39
 
40
-#define LOAD_SYM_FROM_LIB(sym, lib, dll)                                   \
41
-   if (!(sym = (sym##_t)GetProcAddress(lib, #sym))) {                 \
42
-       DWORD err = GetLastError();                                \
43
-       printf("[noise suppress: Couldn't load " #sym " from " dll \
44
-              ": %lu (0x%lx)]",                                   \
45
-              err, err);                                          \
46
-       goto unload_everything;                                    \
47
+#define LOAD_SYM_FROM_LIB(sym, lib, dll)                                    \
48
+   if (!(sym = (sym##_t)GetProcAddress(lib, #sym))) {                  \
49
+       DWORD err = GetLastError();                                 \
50
+       printf("[noise suppress]: Couldn't load " #sym " from " dll \
51
+              ": %lu (0x%lx)",                                     \
52
+              err, err);                                           \
53
+       goto unload_everything;                                     \
54
    }
55
 
56
 #define LOAD_SYM(sym) LOAD_SYM_FROM_LIB(sym, nv_audiofx, "NVAudioEffects.dll")
57
@@ -548,10 +550,10 @@
58
    if (err != NVAFX_STATUS_SUCCESS) {
59
        if (err == NVAFX_STATUS_GPU_UNSUPPORTED) {
60
            blog(LOG_INFO,
61
-                "[noise suppress: Nvidia RTX denoiser disabled: unsupported GPU]");
62
+                "[noise suppress]: NVIDIA RTX denoiser disabled: unsupported GPU");
63
        } else {
64
            blog(LOG_ERROR,
65
-                "[noise suppress: Nvidia RTX denoiser disabled: error %i",
66
+                "[noise suppress]: NVIDIA RTX denoiser disabled: error %i",
67
                 err);
68
        }
69
        goto unload_everything;
70
@@ -564,7 +566,7 @@
71
    }
72
 
73
    nvafx_loaded = true;
74
-   blog(LOG_INFO, "[noise suppress: Nvidia RTX denoiser enabled]");
75
+   blog(LOG_INFO, "[noise suppress]: NVIDIA RTX denoiser enabled");
76
    return true;
77
 
78
 unload_everything:
79
@@ -576,6 +578,18 @@
80
 #pragma warning(pop)
81
 #endif
82
 
83
+void unload_nvafx(void)
84
+{
85
+#ifdef LIBNVAFX_ENABLED
86
+   release_lib();
87
+
88
+   if (nvafx_initializer_mutex_initialized) {
89
+       pthread_mutex_destroy(&nvafx_initializer_mutex);
90
+       nvafx_initializer_mutex_initialized = false;
91
+   }
92
+#endif
93
+}
94
+
95
 static void *noise_suppress_create(obs_data_t *settings, obs_source_t *filter)
96
 {
97
    struct noise_suppress_data *ng =
98
@@ -601,7 +615,7 @@
99
        ng->nvafx_initialized = false;
100
        ng->nvafx_loading = false;
101
 
102
-       pthread_mutex_init(&ng->nvafx_mutex, PTHREAD_MUTEX_DEFAULT);
103
+       pthread_mutex_init(&ng->nvafx_mutex, NULL);
104
 
105
        info("NVAFX SDK redist path was found here %s", sdk_path);
106
    }
107
@@ -1004,9 +1018,9 @@
108
 #endif
109
 
110
 #ifdef LIBNVAFX_ENABLED
111
-   obs_property_t *nvafx_slider = obs_properties_add_float_slider(
112
-       ppts, S_NVAFX_INTENSITY, TEXT_NVAFX_INTENSITY, 0.0f, 1.0f,
113
-       0.01f);
114
+   obs_properties_add_float_slider(ppts, S_NVAFX_INTENSITY,
115
+                   TEXT_NVAFX_INTENSITY, 0.0f, 1.0f,
116
+                   0.01f);
117
 
118
    if (!nvafx_loaded) {
119
        obs_property_list_item_disable(method, 2, true);
120
obs-studio-27.0.1.tar.xz/plugins/obs-filters/nvafx-load.h -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/nvafx-load.h Changed
10
 
1
@@ -5,7 +5,7 @@
2
 #include <stdint.h>
3
 #include <util/platform.h>
4
 
5
-#define NVAFX_API __declspec(dllexport)
6
+#define NVAFX_API
7
 
8
 #ifdef LIBNVAFX_ENABLED
9
 static HMODULE nv_audiofx = NULL;
10
obs-studio-27.0.1.tar.xz/plugins/obs-filters/obs-filters.c -> obs-studio-27.1.3.tar.xz/plugins/obs-filters/obs-filters.c Changed
20
 
1
@@ -28,8 +28,8 @@
2
 #if NOISEREDUCTION_ENABLED
3
 extern struct obs_source_info noise_suppress_filter;
4
 extern struct obs_source_info noise_suppress_filter_v2;
5
-extern bool load_nvafx();
6
-extern void release_lib();
7
+extern bool load_nvafx(void);
8
+extern void unload_nvafx(void);
9
 #endif
10
 extern struct obs_source_info invert_polarity_filter;
11
 extern struct obs_source_info noise_gate_filter;
12
@@ -79,6 +79,6 @@
13
 #ifdef LIBNVAFX_ENABLED
14
 void obs_module_unload(void)
15
 {
16
-   release_lib();
17
+   unload_nvafx();
18
 }
19
 #endif
20
obs-studio-27.0.1.tar.xz/plugins/obs-libfdk/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-libfdk/data/locale/en-US.ini Changed
8
 
1
@@ -1,3 +1,3 @@
2
-LibFDK="libfdk AAC Encoder"
3
-Bitrate="Bitrate"
4
-Afterburner="Enable AAC Afterburner"
5
+LibFDK="libfdk AAC Encoder"
6
+Bitrate="Bitrate"
7
+Afterburner="Enable AAC Afterburner"
8
obs-studio-27.0.1.tar.xz/plugins/obs-libfdk/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-libfdk/data/locale/hi-IN.ini Changed
5
 
1
@@ -1,1 +1,3 @@
2
 LibFDK="libfdk AAC एनकोडर"
3
+Bitrate="बिटरेट"
4
+Afterburner="AAC आफ्टरबर्नर सक्षम करें"
5
obs-studio-27.1.3.tar.xz/plugins/obs-libfdk/data/locale/kmr-TR.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+LibFDK="Kodkirina libfdk AAC"
3
+Bitrate="Leza bit"
4
+Afterburner="AAC Afterburner çalak bike"
5
obs-studio-27.1.3.tar.xz/plugins/obs-libfdk/data/locale/szl-PL.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+LibFDK="Enkoder AAC libfdk"
3
+Afterburner="Kodowanie AAC we wyższyj jakości"
4
obs-studio-27.1.3.tar.xz/plugins/obs-libfdk/data/locale/vi-VN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+LibFDK="Bộ biên mã AAC libfdk"
3
+Afterburner="Bật AAC Afterburner"
4
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/en-US.ini Changed
30
 
1
@@ -1,14 +1,14 @@
2
-RTMPStream="RTMP Stream"
3
-RTMPStream.DropThreshold="Drop Threshold (milliseconds)"
4
-FLVOutput="FLV File Output"
5
-FLVOutput.FilePath="File Path"
6
-Default="Default"
7
-
8
-ConnectionTimedOut="The connection timed out. Make sure you've configured a valid streaming service and no firewall is blocking the connection."
9
-PermissionDenied="The connection was blocked. Check your firewall / anti-virus settings to make sure OBS is allowed full internet access."
10
-ConnectionAborted="The connection was aborted. This usually indicates internet connection problems between you and the streaming service."
11
-ConnectionReset="The connection was reset by the peer. This usually indicates internet connection problems between you and the streaming service."
12
-HostNotFound="Hostname not found. Make sure you entered a valid streaming server and your internet connection / DNS are working correctly."
13
-NoData="Hostname found, but no data of the requested type. This can occur if you have bound to an IPv6 address and your streaming service only has IPv4 addresses (see Settings → Advanced)."
14
-AddressNotAvailable="Address not available. You may have tried to bind to an invalid IP address (see Settings → Advanced)."
15
-SSLCertVerifyFailed="The RTMP server sent an invalid SSL certificate."
16
+RTMPStream="RTMP Stream"
17
+RTMPStream.DropThreshold="Drop Threshold (milliseconds)"
18
+FLVOutput="FLV File Output"
19
+FLVOutput.FilePath="File Path"
20
+Default="Default"
21
+
22
+ConnectionTimedOut="The connection timed out. Make sure you've configured a valid streaming service and no firewall is blocking the connection."
23
+PermissionDenied="The connection was blocked. Check your firewall / anti-virus settings to make sure OBS is allowed full internet access."
24
+ConnectionAborted="The connection was aborted. This usually indicates internet connection problems between you and the streaming service."
25
+ConnectionReset="The connection was reset by the peer. This usually indicates internet connection problems between you and the streaming service."
26
+HostNotFound="Hostname not found. Make sure you entered a valid streaming server and your internet connection / DNS are working correctly."
27
+NoData="Hostname found, but no data of the requested type. This can occur if you have bound to an IPv6 address and your streaming service only has IPv4 addresses (see Settings → Advanced)."
28
+AddressNotAvailable="Address not available. You may have tried to bind to an invalid IP address (see Settings → Advanced)."
29
+SSLCertVerifyFailed="The RTMP server sent an invalid SSL certificate."
30
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/he-IL.ini Changed
16
 
1
@@ -1,7 +1,13 @@
2
-RTMPStream="זרם RTMP"
3
+RTMPStream="שידור חי מסוג RTMP"
4
 RTMPStream.DropThreshold="הורד סף (אלפיות שניה)"
5
 FLVOutput="קובץ פלט FLV"
6
 FLVOutput.FilePath="נתיב קובץ"
7
 Default="ברירת־מחדל"
8
 ConnectionTimedOut="פג הזמן הקצוב לחיבור. ודא שהגדרת שירות הזרמה תקף ואף חומת אש לא חוסמת את החיבור."
9
 PermissionDenied="הקשר נחסם. בדוק את הגדרות חומת האש/האנטי־וירוס שלך כדי לוודא ש־OBS מורשה גישה מלאה לאינטרנט."
10
+ConnectionAborted="החיבור הופסק. זה בד\"כ מעיד על בעיות בחיבור האינטרנט בינך לבין שירות השידור החי."
11
+ConnectionReset="החיבור אופס על ידי הצד השני. זה בד\"כ מעיד על בעיות בחיבור האינטרנט בינך לבין שירות השידור החי."
12
+HostNotFound="שם מארח לא נמצא. יש לוודא ששרת השידור החי הוגדר כשורה ושחיבור האינטרנט / DNS שלך עובדים כשורה."
13
+NoData="שם מארח נמצא, אך לא נמצאו נתונים של הסוג המבוקש. זה יכול לקרות אם הוגדרה כתובת IPv6 ולשירות השידור החי יש רק כתובות IPv4 (ראו הגדרות ← מתקדם)."
14
+AddressNotAvailable="כתובת אינה חוקית. יכול להיות שניסית לאגד ל-IP שגוי (ראו הגדרות ← מתקדם)."
15
+SSLCertVerifyFailed="שרת ה-RTMP שלח אישור SSL לא חוקי."
16
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/hi-IN.ini Changed
15
 
1
@@ -1,1 +1,13 @@
2
 RTMPStream="RTMP स्ट्रीम"
3
+RTMPStream.DropThreshold="छोड़ने की परिसीमा (मिलीसेकेंड)"
4
+FLVOutput="FLV फ़ाइल आउटपुट"
5
+FLVOutput.FilePath="फ़ाइल पथ"
6
+Default="आरंभिक"
7
+ConnectionTimedOut="कनेक्शन का समय समाप्त हो गया. सुनिश्चित करें कि आपने एक मान्य स्ट्रीमिंग सेवा कॉन्फ़िगर की है और कोई फ़ायरवॉल कनेक्शन को अवरुद्ध नहीं कर रहा है."
8
+PermissionDenied="कनेक्शन ब्लॉक कर दिया गया था. यह सुनिश्चित करने के लिए कि OBS को पूर्ण इंटरनेट एक्सेस की अनुमति है, अपनी फ़ायरवॉल / एंटी-वायरस सेटिंग्स की जाँच करें."
9
+ConnectionAborted="कनेक्शन निरस्त कर दिया गया था. यह आमतौर पर आपके और स्ट्रीमिंग सेवा के बीच इंटरनेट कनेक्शन की समस्याओं को इंगित करता है."
10
+ConnectionReset="सहकर्मी द्वारा कनेक्शन रीसेट किया गया था. यह आमतौर पर आपके और स्ट्रीमिंग सेवा के बीच इंटरनेट कनेक्शन की समस्याओं को इंगित करता है."
11
+HostNotFound="होस्टनाम नहीं मिला. सुनिश्चित करें कि आपने एक वैध स्ट्रीमिंग सर्वर दर्ज किया है और आपका इंटरनेट कनेक्शन / DNS सही ढंग से काम कर रहा है."
12
+NoData="होस्टनाम मिला, लेकिन अनुरोधित प्रकार का कोई डेटा नहीं मिला. यह तब हो सकता है जब आप किसी IPv6 पते से बंधे हों और आपकी स्ट्रीमिंग सेवा में केवल IPv4 पते हों (सेटिंग → उन्नत देखें)."
13
+AddressNotAvailable="पता उपलब्ध नहीं है. हो सकता है कि आपने किसी अमान्य IP पते से जुड़ने का प्रयास किया हो (सेटिंग्स → उन्नत देखें)."
14
+SSLCertVerifyFailed="RTMP सर्वर ने एक अमान्य SSL प्रमाणपत्र भेजा है."
15
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/kmr-TR.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+RTMPStream="RTMP weşan"
3
+RTMPStream.DropThreshold="Bendava daketinê (Mîlî çirke)"
4
+FLVOutput="Derxistina pelê FLV"
5
+FLVOutput.FilePath="Riya pelê"
6
+Default="Berdest"
7
+ConnectionTimedOut="Dema girêdanê qediya. binêre heke ku te weşaneke rast avakiriye û dîwarê ewlehiyê girêdanê asteng nakê."
8
+PermissionDenied="Girêdan hate astengkirin. Sazkariyên xwe yên dîwarê ewlehiyê / dijî-vîrus kontrol bike da ku OBS bi tevahî gihîştina înternetê mafê bistînê."
9
+ConnectionAborted="Girêdan hate pûçkirin. Ev bi gelemperî pirsgirêkên girêdana înternetê yên di navbera te û karûbarên weşanê de nîşan dide."
10
+ConnectionReset="Girêdan ji hêla hevber ve hate jinûve sazkirin. Ev bi gelemperî pirsgirêkên girêdana înternetê di navbera te û karûbarê weşanê de nîşan dide."
11
+HostNotFound="Navê pêşkêşer nehate dîtin. binêre ka te rajegireke weşanê ya rast nivîsandiye û girêdana te ya înternetê / DNS rast dixebite an na."
12
+NoData="Navê pêşkêşer hate dîtin, lê daneyên cureyê daxwazkirî tune ne. Ev dibe ku heke tu bi navnîşana IPv6 ve girêdayî ye û karûbarê te ya weşanê tenê navnîşanên IPv4 heye (li Sazkarî→ Pêşketî)."
13
+AddressNotAvailable="Navnîşan tune ye. Dibe ku te hewl da ku bi navnîşanekî IP ya nerast ve girê bidî (binêre Sazkarî → Pêşketî)."
14
+SSLCertVerifyFailed="Rajekara RTMP sertîfîkaya SSL ya nerast şand."
15
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Default="Standard"
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/szl-PL.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+RTMPStream="Stream RTMP"
3
+RTMPStream.DropThreshold="Prōg ôdciepowaniŏ (we milisekōndach)"
4
+FLVOutput="Wyjście do zbioru FLV"
5
+FLVOutput.FilePath="Ściyżka zbioru"
6
+Default="Sztandardowo"
7
+SSLCertVerifyFailed="Serwer RTMP wysłoł niynoleżny certyfikat SSL."
8
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/data/locale/zh-TW.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/data/locale/zh-TW.ini Changed
18
 
1
@@ -3,11 +3,11 @@
2
 FLVOutput="FLV 檔案輸出"
3
 FLVOutput.FilePath="檔案路徑"
4
 Default="預設"
5
-ConnectionTimedOut="連線逾時。請確定已經設定了一個有效的串流服務並且沒有防火牆在阻擋連接。"
6
-PermissionDenied="連線被阻擋。請檢查防火牆 / 防毒設定以確保 OBS 有完整的網際網路存取權限。"
7
-ConnectionAborted="連線被中止。通常這代表您與串流服務之間有網際網路連線問題。"
8
+ConnectionTimedOut="連線逾時。請確定串流服務的設定正確,且沒有防火牆在阻擋連線。"
9
+PermissionDenied="連線被阻擋。請檢查防火牆及防毒設定,確保 OBS 有完整的網際網路存取權限。"
10
+ConnectionAborted="連線中止。這通常代表您與串流服務之間有網際網路連線問題。"
11
 ConnectionReset="連線被對方重置。通常這代表您與串流服務之間有網際網路連線問題。"
12
-HostNotFound="找不到主機名稱。請確定輸入了一個有效的串流服務器且網路連線跟 DNS 工作正常。"
13
+HostNotFound="找不到主機名稱。請檢查串流伺服器是否輸入正確,且網際網路連線與 DNS 是否正常運作。"
14
 NoData="找到主機名稱,但沒有要求類型的資料。這可能會在您綁定於 IPv6 位址但串流服務只有 IPv4 位址時發生(請看 設定 → 進階)。"
15
 AddressNotAvailable="無法使用位址。可能是因為嘗試綁定到不正確的 IP 位址(請檢視 設定 → 進階 的設定)。"
16
-SSLCertVerifyFailed="RTMP 伺服器發送了一則不合法的 SSL 憑證。"
17
+SSLCertVerifyFailed="RTMP 伺服器傳送的 SSL 憑證無效。"
18
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/flv-mux.c -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/flv-mux.c Changed
12
 
1
@@ -15,6 +15,10 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
+#ifdef _MSC_VER
6
+#define WIN32_LEAN_AND_MEAN
7
+#endif
8
+
9
 #include <obs.h>
10
 #include <stdio.h>
11
 #include <util/dstr.h>
12
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+.vscode/*
3
+!.vscode/settings.json
4
+*.orig
5
+.vs/*
6
+publish
7
+build-output
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/.gitignore Added
54
 
1
@@ -0,0 +1,52 @@
2
+*.asc
3
+*.dll
4
+*.exe
5
+*.exp
6
+*.la
7
+*.lib
8
+*.lo
9
+*.o
10
+*.obj
11
+*.pdb
12
+*~
13
+.*.swp
14
+.cproject
15
+.deps
16
+.dirstamp
17
+.libs
18
+.project
19
+.settings
20
+/build/
21
+/builds/
22
+CHANGES.dist
23
+Debug
24
+INSTALL
25
+Makefile
26
+Makefile.in
27
+Release
28
+TAGS
29
+aclocal.m4
30
+aclocal.m4.bak
31
+autom4te.cache
32
+compile
33
+config.cache
34
+config.guess
35
+config.log
36
+config.status
37
+config.sub
38
+configure
39
+curl-*.tar.bz2
40
+curl-*.tar.gz
41
+curl-*.tar.lzma
42
+curl-*.zip
43
+curl-config
44
+depcomp
45
+install-sh
46
+libcurl.pc
47
+libtool
48
+ltmain.sh
49
+missing
50
+mkinstalldirs
51
+tags
52
+test-driver
53
+scripts/_curl
54
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/docs/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*.html
3
+*.pdf
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/docs/examples/.gitignore Added
81
 
1
@@ -0,0 +1,79 @@
2
+10-at-a-time
3
+anyauthput
4
+certinfo
5
+chkspeed
6
+cookie_interface
7
+debug
8
+externalsocket
9
+fileupload
10
+fopen
11
+ftp-wildcard
12
+ftpget
13
+ftpgetinfo
14
+ftpgetresp
15
+ftpsget
16
+ftpupload
17
+getinfo
18
+getinmemory
19
+http-post
20
+httpcustomheader
21
+httpput
22
+https
23
+imap
24
+imap-append
25
+imap-copy
26
+imap-create
27
+imap-delete
28
+imap-examine
29
+imap-fetch
30
+imap-list
31
+imap-multi
32
+imap-noop
33
+imap-search
34
+imap-ssl
35
+imap-store
36
+imap-tls
37
+multi-app
38
+multi-debugcallback
39
+multi-double
40
+multi-post
41
+multi-single
42
+persistant
43
+pop3-dele
44
+pop3-list
45
+pop3-multi
46
+pop3-noop
47
+pop3-retr
48
+pop3-ssl
49
+pop3-stat
50
+pop3-tls
51
+pop3-top
52
+pop3-uidl
53
+pop3s
54
+pop3slist
55
+post-callback
56
+postinmemory
57
+postit2
58
+progressfunc
59
+resolve
60
+rtsp
61
+sendrecv
62
+sepheaders
63
+sftpget
64
+simple
65
+simplepost
66
+simplesmtp
67
+simplessl
68
+smtp-expn
69
+smtp-mail
70
+smtp-multi
71
+smtp-ssl
72
+smtp-tls
73
+smtp-vrfy
74
+url2file
75
+usercertinmem
76
+xmlstream
77
+http2-download
78
+http2-serverpush
79
+http2-upload
80
+imap-lsub
81
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/docs/libcurl/.gitignore Added
5
 
1
@@ -0,0 +1,3 @@
2
+*.html
3
+*.pdf
4
+libcurl-symbols.3
5
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/include/curl/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+curlbuild.h
3
+curlver.h.dist
4
+stamp-h2
5
+stamp-h3
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/lib/.gitignore Added
15
 
1
@@ -0,0 +1,13 @@
2
+*.a
3
+*.imp
4
+*.nlm
5
+*.orig
6
+*.rej
7
+*.res
8
+Makefile.vc*.dist
9
+TAGS
10
+curl_config.h
11
+curl_config.h.in
12
+libcurl.plist.dist
13
+libcurl.vers
14
+stamp-h1
15
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/m4/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+libtool.m4
3
+libtool.m4.tmp
4
+ltoptions.m4
5
+ltsugar.m4
6
+ltversion.m4
7
+lt~obsolete.m4
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/packages/AIX/RPM/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+curl.spec
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/packages/EPM/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+curl.list
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/packages/Linux/RPM/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+curl-ssl.spec
3
+curl.spec
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+VC*/src/*curl.vcproj.dist
3
+VC*/lib/*curl.vcproj.dist
4
+VC*/src/*curl.vcxproj.dist
5
+VC*/lib/*curl.vcxproj.dist
6
+VC6/lib/libcurl.dsp.dist
7
+VC6/src/curl.dsp.dist
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC10/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC10/lib/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
+/*.user
7
+/*.vcxproj
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC10/src/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
+/*.user
7
+/*.vcxproj
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC11/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC11/lib/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
+/*.user
7
+/*.vcxproj
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC11/src/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
+/*.user
7
+/*.vcxproj
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC12/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC12/lib/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
+/*.user
7
+/*.vcxproj
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC12/src/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.ncb
3
+/*.opensdf
4
+/*.sdf
5
+/*.suo
6
+/*.user
7
+/*.vcxproj
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC14/.gitignore Added
7
 
1
@@ -0,0 +1,5 @@
2
+/*.opendb
3
+/*.opensdf
4
+/*.sdf
5
+/*.vc.db
6
+/.vs
7
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC14/lib/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.opensdf
3
+/*.sdf
4
+/*.user
5
+/*.vc.db
6
+/*.vcxproj
7
+/.vs
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC14/src/.gitignore Added
8
 
1
@@ -0,0 +1,6 @@
2
+/*.opensdf
3
+/*.sdf
4
+/*.user
5
+/*.vc.db
6
+/*.vcxproj
7
+/.vs
8
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC6/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+/*.ncb
3
+/*.opt
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC6/lib/.gitignore Added
7
 
1
@@ -0,0 +1,5 @@
2
+/*.dsp
3
+/*.html
4
+/*.ncb
5
+/*.opt
6
+/*.plg
7
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC6/src/.gitignore Added
7
 
1
@@ -0,0 +1,5 @@
2
+/*.dsp
3
+/*.html
4
+/*.ncb
5
+/*.opt
6
+/*.plg
7
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC7.1/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+/*.ncb
3
+/*.suo
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC7.1/lib/.gitignore Added
5
 
1
@@ -0,0 +1,3 @@
2
+/*.ncb
3
+/*.suo
4
+/*.vcproj
5
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC7.1/src/.gitignore Added
5
 
1
@@ -0,0 +1,3 @@
2
+/*.ncb
3
+/*.suo
4
+/*.vcproj
5
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC7/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+/*.ncb
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC7/lib/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+/*.ncb
3
+/*.vcproj
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC7/src/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+/*.ncb
3
+/*.vcproj
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC8/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+/*.ncb
3
+/*.suo
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC8/lib/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.suo
4
+/*.user
5
+/*.vcproj
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC8/src/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.suo
4
+/*.user
5
+/*.vcproj
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC9/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+/*.ncb
3
+/*.suo
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC9/lib/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.suo
4
+/*.user
5
+/*.vcproj
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/projects/Windows/VC9/src/.gitignore Added
6
 
1
@@ -0,0 +1,4 @@
2
+/*.ncb
3
+/*.suo
4
+/*.user
5
+/*.vcproj
6
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/src/.gitignore Added
13
 
1
@@ -0,0 +1,11 @@
2
+*.a
3
+*.nlm
4
+*.res
5
+Makefile.vc*.dist
6
+config-win32.h
7
+curl
8
+curl_config.h
9
+curl_config.h.in
10
+stamp-h2
11
+tool_hugehelp.c
12
+tool_version.h.dist
13
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/tests/.gitignore Added
19
 
1
@@ -0,0 +1,17 @@
2
+*pid
3
+configurehelp.pm
4
+curl_client_key
5
+curl_client_key.pub
6
+curl_client_knownhosts
7
+curl_host_rsa_key
8
+curl_host_rsa_key.pub
9
+curl_sftp_cmds
10
+curl_sftp_config
11
+curl_ssh_config
12
+curl_sshd_config
13
+log
14
+runtests.html
15
+runtests.pdf
16
+stunnel.conf
17
+testcurl.html
18
+testcurl.pdf
19
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/tests/data/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+DISABLED.local
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/tests/libtest/.gitignore Added
9
 
1
@@ -0,0 +1,7 @@
2
+chkhostname
3
+lib15[0-9][0-9]
4
+lib19[0-9][0-9]
5
+lib2033
6
+lib5[0-9][0-9]
7
+libauthretry
8
+libntlmconnect
9
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/tests/server/.gitignore Added
9
 
1
@@ -0,0 +1,7 @@
2
+fake_ntlm
3
+getpart
4
+resolve
5
+rtspd
6
+sockfilt
7
+sws
8
+tftpd
9
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/tests/unit/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+/unit1[36][0-9][0-9]
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libcurl/winbuild/.gitignore Added
4
 
1
@@ -0,0 +1,2 @@
2
+*.idb
3
+*.inc
4
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libjansson/.gitignore Added
35
 
1
@@ -0,0 +1,33 @@
2
+*~
3
+*.o
4
+*.a
5
+.libs
6
+.deps
7
+Makefile
8
+Makefile.in
9
+aclocal.m4
10
+autom4te.cache
11
+config.guess
12
+config.h
13
+config.h.in
14
+config.log
15
+config.status
16
+config.sub
17
+configure
18
+depcomp
19
+install-sh
20
+libtool
21
+ltmain.sh
22
+missing
23
+compile
24
+test-driver
25
+*.lo
26
+*.la
27
+stamp-h1
28
+*.pyc
29
+*.pc
30
+/src/jansson_config.h
31
+/jansson_private_config.h.in
32
+/jansson_private_config.h
33
+/build
34
+*.exe
35
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libjansson/doc/.gitignore Added
3
 
1
@@ -0,0 +1,1 @@
2
+_build/
3
obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-sdk/libjansson/test/.gitignore Added
23
 
1
@@ -0,0 +1,21 @@
2
+logs
3
+bin/json_process
4
+suites/api/test_array
5
+suites/api/test_copy
6
+suites/api/test_cpp
7
+suites/api/test_dump
8
+suites/api/test_dump_callback
9
+suites/api/test_equal
10
+suites/api/test_load
11
+suites/api/test_loadb
12
+suites/api/test_memory_funcs
13
+suites/api/test_number
14
+suites/api/test_object
15
+suites/api/test_pack
16
+suites/api/test_simple
17
+suites/api/test_unpack
18
+suites/api/test_load_callback
19
+run-suites.log
20
+run-suites.trs
21
+test-suite.log
22
+
23
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/ftl-stream.c -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/ftl-stream.c Changed
12
 
1
@@ -15,6 +15,10 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
+#ifdef _MSC_VER
6
+#define WIN32_LEAN_AND_MEAN
7
+#endif
8
+
9
 #include <obs-module.h>
10
 #include <obs-avc.h>
11
 #include <util/platform.h>
12
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/net-if.c -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/net-if.c Changed
28
 
1
@@ -60,7 +60,7 @@
2
              temp_char, INET6_ADDRSTRLEN);
3
    else if (family == AF_INET6)
4
        inet_ntop(family,
5
-             &(((struct sockaddr_in *)byte_address)->sin_addr),
6
+             &(((struct sockaddr_in6 *)byte_address)->sin6_addr),
7
              temp_char, INET6_ADDRSTRLEN);
8
 #else
9
    if (family == AF_INET)
10
@@ -116,12 +116,12 @@
11
        warn("Could not parse address, error code: %d", GetLastError());
12
    return ret != SOCKET_ERROR;
13
 #else
14
-   struct sockaddr_in *sin = (struct sockaddr_in *)out;
15
-   if (inet_pton(out->ss_family, addr, &sin->sin_addr)) {
16
-       *addr_len = ipv6 ? sizeof(struct sockaddr_in6)
17
-                : sizeof(struct sockaddr_in);
18
+   *addr_len = ipv6 ? sizeof(struct sockaddr_in6)
19
+            : sizeof(struct sockaddr_in);
20
+   void *dst = ipv6 ? &((struct sockaddr_in6 *)out)->sin6_addr
21
+            : &((struct sockaddr_in *)out)->sin_addr;
22
+   if (inet_pton(out->ss_family, addr, dst))
23
        return true;
24
-   }
25
 
26
    return false;
27
 #endif
28
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/obs-outputs.c -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/obs-outputs.c Changed
9
 
1
@@ -1,3 +1,7 @@
2
+#ifdef _MSC_VER
3
+#define WIN32_LEAN_AND_MEAN
4
+#endif
5
+
6
 #include <obs-module.h>
7
 
8
 #include "obs-outputs-config.h"
9
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/rtmp-stream.c -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/rtmp-stream.c Changed
26
 
1
@@ -15,6 +15,10 @@
2
     along with this program.  If not, see <http://www.gnu.org/licenses/>.
3
 ******************************************************************************/
4
 
5
+#ifdef _MSC_VER
6
+#define WIN32_LEAN_AND_MEAN
7
+#endif
8
+
9
 #include "rtmp-stream.h"
10
 
11
 #ifndef SEC_TO_NSEC
12
@@ -1112,6 +1116,13 @@
13
    stream->low_latency_mode =
14
        obs_data_get_bool(settings, OPT_LOWLATENCY_ENABLED);
15
 
16
+   // ugly hack for now, can be removed once new loop is reworked
17
+   if (stream->new_socket_loop &&
18
+       !strncmp(stream->path.array, "rtmps://", 8)) {
19
+       warn("Disabling network optimizations, not compatible with RTMPS");
20
+       stream->new_socket_loop = false;
21
+   }
22
+
23
    obs_data_release(settings);
24
    return true;
25
 }
26
obs-studio-27.0.1.tar.xz/plugins/obs-outputs/rtmp-windows.c -> obs-studio-27.1.3.tar.xz/plugins/obs-outputs/rtmp-windows.c Changed
9
 
1
@@ -1,3 +1,7 @@
2
+#ifdef _MSC_VER
3
+#define WIN32_LEAN_AND_MEAN
4
+#endif
5
+
6
 #ifdef _WIN32
7
 #include "rtmp-stream.h"
8
 #include <winsock2.h>
9
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/CMakeLists.txt Changed
25
 
1
@@ -8,6 +8,7 @@
2
    libmfx/src/mfx_critical_section.cpp
3
    libmfx/src/mfx_dispatcher.cpp
4
    libmfx/src/mfx_dispatcher_log.cpp
5
+   libmfx/src/mfx_driver_store_loader.cpp
6
    libmfx/src/mfx_dxva2_device.cpp
7
    libmfx/src/mfx_function_table.cpp
8
    libmfx/src/mfx_library_iterator.cpp
9
@@ -18,6 +19,7 @@
10
    )
11
 
12
 set(obs-qsv11_libmfx_HEADERS
13
+   libmfx/include/msdk/include/mfxadapter.h
14
    libmfx/include/msdk/include/mfxastructures.h
15
    libmfx/include/msdk/include/mfxaudio.h
16
    libmfx/include/msdk/include/mfxaudio++.h
17
@@ -36,6 +38,7 @@
18
    libmfx/include/mfx_dispatcher.h
19
    libmfx/include/mfx_dispatcher_defs.h
20
    libmfx/include/mfx_dispatcher_log.h
21
+   libmfx/include/mfx_driver_store_loader.h
22
    libmfx/include/mfx_dxva2_device.h
23
    libmfx/include/mfx_exposed_functions_list.h
24
    libmfx/include/mfx_library_iterator.h
25
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/ar-SA.ini Changed
6
 
1
@@ -2,3 +2,4 @@
2
 KeyframeIntervalSec="الفاصل الزمني لـKeyframe (ثانية, 0=تلقائي)"
3
 Profile="الملف الشخصي"
4
 Accuracy="الدقة"
5
+Latency="تأخير"
6
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/en-US.ini Changed
26
 
1
@@ -1,12 +1,12 @@
2
-TargetUsage="Target Usage"
3
-Bitrate="Bitrate"
4
-MaxBitrate="Max Bitrate"
5
-RateControl="Rate Control"
6
-KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
7
-Profile="Profile"
8
-Accuracy="Accuracy"
9
-Convergence="Convergence"
10
-ICQQuality="ICQ Quality"
11
-Latency="Latency"
12
-Latency.ToolTip="There is trade-off between latency and quality.\nIf your case prefers on quality, please select 'normal' mode, which may get > 2s end-to-end latency.\nIf your case requires < 500ms end-to-end latency, please select 'ultra-low' mode."
13
-SubjectiveVideoEnhancements="Subjective Video Enhancements"
14
+TargetUsage="Target Usage"
15
+Bitrate="Bitrate"
16
+MaxBitrate="Max Bitrate"
17
+RateControl="Rate Control"
18
+KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
19
+Profile="Profile"
20
+Accuracy="Accuracy"
21
+Convergence="Convergence"
22
+ICQQuality="ICQ Quality"
23
+Latency="Latency"
24
+Latency.ToolTip="There is trade-off between latency and quality.\nIf your case prefers on quality, please select 'normal' mode, which may get > 2s end-to-end latency.\nIf your case requires < 500ms end-to-end latency, please select 'ultra-low' mode."
25
+SubjectiveVideoEnhancements="Subjective Video Enhancements"
26
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/gd-GB.ini Changed
14
 
1
@@ -1,5 +1,12 @@
2
+TargetUsage="Amas a’ chleachdaidh"
3
 Bitrate="Reat bhiodan"
4
+MaxBitrate="Reat bhiodan as motha"
5
 RateControl="Smachd air an reat"
6
 KeyframeIntervalSec="Eadaramh nam frèamaichean-iuchrach (diog, fèin-obrachail)"
7
 Profile="Pròifil"
8
 Accuracy="Pongalachd"
9
+Convergence="Co-aomadh"
10
+ICQQuality="Càileachd ICQ"
11
+Latency="Foillidheachd"
12
+Latency.ToolTip="Seo cothromachadh eadar a’ chàileachd ’s an fhoillidheachd.\nMa tha a’ chàileachd as cudromaiche dhut, tagh am modh “àbhaisteach” ach bidh sin buailteach air > 2 diog a dh’fhoillidheachd ceann gu ceann.\nMa tha thu feumach air < 500ms a dh’fhoillidheachd ceann gu ceann, tagh am modh “glè ìosal”."
13
+SubjectiveVideoEnhancements="Pisich air coltas a’ video"
14
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/he-IL.ini Changed
14
 
1
@@ -1,4 +1,12 @@
2
+TargetUsage="מטרת שימוש"
3
 Bitrate="קצב נתונים"
4
+MaxBitrate="קצב נתונים מקסימלי"
5
+RateControl="בקרת קצב"
6
+KeyframeIntervalSec="מרווח תמונות מפתח (שניות, 0=אוטומטי)"
7
 Profile="פרופיל"
8
 Accuracy="דיוק"
9
+Convergence="התכנסות"
10
 ICQQuality="איכות ICQ"
11
+Latency="זמן שיהוי (Latency)"
12
+Latency.ToolTip="קיים יחס בין זמן שיהוי (Latency) לבין איכות.\nאם השימוש שלך מתעדף איכות, נא לבחור במצב 'רגיל', שעשוי לקבל מעל 2 שניות זמן שיהוי קצה-אל-קצה.\nאם השימוש שלך דורש פחות מ-500 מילי שניות זמן שיהוי קצה-אל-קצה, נא לבחור במצב 'אולטרה-נמוך'."
13
+SubjectiveVideoEnhancements="שיפורי וידאו סובייקטיביים."
14
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/hi-IN.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+TargetUsage="लक्ष्य उपयोग"
3
+Bitrate="बिटरेट"
4
+MaxBitrate="अधिकतम बिटरेट"
5
+RateControl="दर नियंत्रण"
6
+KeyframeIntervalSec="कीफ़्रेम अंतराल (सेकंड, 0=स्वतः)"
7
+Profile="प्रोफ़ाइल"
8
+Accuracy="सटीकता"
9
+Convergence="कन्वर्जेंस"
10
+ICQQuality="ICQ गुणवत्ता"
11
+Latency="विलंबता"
12
+Latency.ToolTip="विलंबता और गुणवत्ता के बीच समझौता करना पड़ता है.\nयदि आप गुणवत्ता पसंद करते हैं, तो कृपया 'सामान्य' मोड चुनें, जो ओर-छोर की > 2सेकेंड की विलंबता प्राप्त कर सकता है.\nयदि आपके मामले में <500मिलीसेकेंड ओर-छोर के विलंबता की आवश्यकता है , तो कृपया 'अति-नयून' मोड चुनें."
13
+SubjectiveVideoEnhancements="सब्जेक्टिव वीडियो एन्हांसमेंट"
14
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/kmr-TR.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+TargetUsage="Bikaranîna armancê"
3
+Bitrate="Leza bit"
4
+MaxBitrate="Leza bit herî pir"
5
+RateControl="Kontrola rêjeyê"
6
+KeyframeIntervalSec="Dabêşkera demî ya kilîdê tarikê (çirke, 0 = xweber)"
7
+Profile="Profîl"
8
+Accuracy="Rastbûn"
9
+Convergence="Hevgirtin"
10
+ICQQuality="Qalîteya ICQ"
11
+Latency="Derengbûn"
12
+Latency.ToolTip="Di navbera derengbûn û qalîteyê de bazirganî heye. \nHeke rewşa te li ser qalîteyê tercîh dike, ji kerema xwe re moda 'normal' hilbijêre, ku dibe ku > 2s ser-bi-ser.\nHeke doza te pêdivî bi < 500ms ser-bi-ser ya derengbûnê heye, ji kerema xwe moda 'pir-kêm' hilbijêre."
13
+SubjectiveVideoEnhancements="Baştirkirina vîdeoya kesanekirî"
14
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/nn-NO.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+Profile="Profil"
3
+Accuracy="Nøyaktigheit"
4
+Convergence="Konvergens"
5
+ICQQuality="ICQ-kvalitet"
6
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Perfil"
3
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_critical_section.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_critical_section.h Changed
53
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_critical_section.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_CRITICAL_SECTION_H)
52
 #define __MFX_CRITICAL_SECTION_H
53
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher.h Changed
131
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dispatcher.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_DISPATCHER_H)
52
 #define __MFX_DISPATCHER_H
53
@@ -44,6 +34,8 @@
54
 
55
 mfxStatus MFXQueryVersion(mfxSession session, mfxVersion *version);
56
 
57
+
58
+
59
 enum
60
 {
61
     // to avoid code changing versions are just inherited
62
@@ -119,7 +111,7 @@
63
 enum
64
 {
65
     MFX_DISPATCHER_VERSION_MAJOR = 1,
66
-    MFX_DISPATCHER_VERSION_MINOR = 2
67
+    MFX_DISPATCHER_VERSION_MINOR = 3
68
 };
69
 
70
 struct _mfxSession
71
@@ -144,7 +136,7 @@
72
     ~MFX_DISP_HANDLE(void);
73
 
74
     // Load the library's module
75
-    mfxStatus LoadSelectedDLL(const msdk_disp_char *pPath, eMfxImplType implType, mfxIMPL impl, mfxIMPL implInterface, mfxInitParam &par);
76
+    mfxStatus LoadSelectedDLL(const wchar_t *pPath, eMfxImplType implType, mfxIMPL impl, mfxIMPL implInterface, mfxInitParam &par);
77
     // Unload the library's module
78
     mfxStatus UnLoadSelectedDLL(void);
79
 
80
@@ -169,7 +161,7 @@
81
     // Status of loaded dll
82
     mfxStatus loadStatus;
83
     // Resgistry subkey name for windows version
84
-    msdk_disp_char subkeyName[MFX_MAX_REGISTRY_KEY_NAME];
85
+    wchar_t subkeyName[MFX_MAX_REGISTRY_KEY_NAME];
86
     // Storage ID for windows version
87
     int storageID;
88
 
89
@@ -186,26 +178,37 @@
90
 
91
 };
92
 
93
+// This struct extends MFX_DISP_HANDLE, we cannot extend MFX_DISP_HANDLE itself due to possible compatibility issues
94
+// This struct was added in dispatcher version 1.3
95
+// Check dispatcher handle's version when you cast session struct which came from outside of MSDK API function to this
96
+struct MFX_DISP_HANDLE_EX : public MFX_DISP_HANDLE
97
+{
98
+    MFX_DISP_HANDLE_EX(const mfxVersion requiredVersion);
99
+
100
+    mfxU16 mediaAdapterType;
101
+    mfxU16 reserved[10];
102
+};
103
+
104
 // declare comparison operator
105
 inline
106
 bool operator == (const mfxVersion &one, const mfxVersion &two)
107
 {
108
     return (one.Version == two.Version);
109
 
110
-} // bool operator == (const mfxVersion &one, const mfxVersion &two)
111
+}
112
 
113
 inline
114
 bool operator < (const mfxVersion &one, const mfxVersion &two)
115
 {
116
-    return (one.Major == two.Major) && (one.Minor < two.Minor);
117
+    return (one.Major < two.Major) || ((one.Major == two.Major) && (one.Minor < two.Minor));
118
 
119
-} // bool operator < (const mfxVersion &one, const mfxVersion &two)
120
+}
121
 
122
 inline
123
 bool operator <= (const mfxVersion &one, const mfxVersion &two)
124
 {
125
     return (one == two) || (one < two);
126
-} // bool operator <= (const mfxVersion &one, const mfxVersion &two)
127
+}
128
 
129
 
130
 //
131
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher_defs.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher_defs.h Changed
116
 
1
@@ -1,36 +1,27 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dispatcher_defs.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2013-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #pragma once
52
 #include "mfxdefs.h"
53
 #include <cstring>
54
+#include <cstdio>
55
 
56
 #if defined(MFX_DISPATCHER_LOG)
57
 #include <string>
58
@@ -40,49 +31,17 @@
59
 #define MAX_PLUGIN_PATH 4096
60
 #define MAX_PLUGIN_NAME 4096
61
 
62
-#if defined(_WIN32) || defined(_WIN64)
63
-typedef wchar_t  msdk_disp_char;
64
-#define MSDK2WIDE(x) x
65
-
66
-#if _MSC_VER >= 1400
67
-    #define msdk_disp_char_cpy_s(to, to_size, from) wcscpy_s(to,to_size, from)
68
-#else
69
-    #define msdk_disp_char_cpy_s(to, to_size, from) wcscpy(to, from)
70
-#endif
71
-
72
-#else
73
-typedef char msdk_disp_char;
74
-//#define msdk_disp_char_cpy_s(to, to_size, from) strcpy(to, from)
75
-
76
-inline void msdk_disp_char_cpy_s(char * to, size_t to_size, const char * from)
77
-{
78
-    size_t source_len = strlen(from);
79
-    size_t num_chars = (to_size - 1) < source_len ? (to_size - 1) : source_len;
80
-    strncpy(to, from, num_chars);
81
-    to[num_chars] = 0;
82
-}
83
-
84
-#if defined(MFX_DISPATCHER_LOG)
85
-#define MSDK2WIDE(x) getWideString(x).c_str()
86
-
87
-inline std::wstring getWideString(const char * string)
88
-{
89
-    size_t len = strlen(string);
90
-    return std::wstring(string, string + len);
91
-}
92
-#else
93
-    #define MSDK2WIDE(x) x  
94
-#endif
95
-
96
+#if _MSC_VER < 1400
97
+#define wcscpy_s(to,to_size, from) wcscpy(to, from)
98
+#define wcscat_s(to,to_size, from) wcscat(to, from)
99
 #endif
100
 
101
-#if defined(__GNUC__) && !defined(_WIN32) && !defined(_WIN64)
102
-#define  sscanf_s  sscanf
103
-#define  swscanf_s swscanf
104
-#endif
105
-
106
-
107
 // declare library module's handle
108
 typedef void * mfxModuleHandle;
109
 
110
 typedef void (MFX_CDECL * mfxFunctionPointer)(void);
111
+
112
+// Tracer uses lib loading from Program Files logic (via Dispatch reg key) to make dispatcher load tracer dll.
113
+// With DriverStore loading put at 1st place, dispatcher loads real lib before it finds tracer dll.
114
+// This workaround explicitly checks tracer presence in Dispatch reg key and loads tracer dll before the search for lib in all other places.
115
+#define MFX_TRACER_WA_FOR_DS 1
116
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher_log.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dispatcher_log.h Changed
137
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dispatcher_log.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_DISPATCHER_LOG_H)
52
 #define __MFX_DISPATCHER_LOG_H
53
@@ -91,7 +81,6 @@
54
 //is a vital if mediasdk wont use
55
 #define DISPATCHER_LOG_HEAP_SINGLETONES
56
 
57
-#if defined(_WIN32) || defined(_WIN64)
58
 // guid for all dispatcher events
59
 #define DISPATCHER_LOG_EVENT_GUID L"{EB0538CC-4FEE-484d-ACEE-1182E9F37A57}"
60
 
61
@@ -102,8 +91,6 @@
62
 //#define DISPATCHER_LOG_REGISTER_FILE_WRITER
63
 #define DISPACTHER_LOG_FW_PATH "c:\\dispatcher.log"
64
 
65
-#endif // #if defined(_WIN32) || defined(_WIN64)
66
-
67
 #include <stdio.h>
68
 #include <stdarg.h>
69
 
70
@@ -115,7 +102,6 @@
71
     virtual void Write(int level, int opcode, const char * msg, va_list argptr) = 0;
72
 };
73
 
74
-#if defined(_WIN32) || defined(_WIN64)
75
 #if  DISPATCHER_LOG_USE_FORMATING
76
 
77
     #define DISPATCHER_LOG(lvl, opcode, str)\
78
@@ -135,10 +121,6 @@
79
 #endif//DISPATCHER_LOG_USE_FORMATING
80
 
81
 #define DISPATCHER_LOG_OPERATION(operation) operation
82
-#else
83
-#define DISPATCHER_LOG(lvl, opcode, str)
84
-#define DISPATCHER_LOG_OPERATION(operation)
85
-#endif
86
 
87
 #define __name_from_line( name, line ) name ## line
88
 #define _name_from_line( name , line) __name_from_line( name, line ) 
89
@@ -182,7 +164,7 @@
90
     //if obj != NULL then it store obj
91
     inline static T * store_or_load(T * obj = NULL)
92
     {
93
-        static std::auto_ptr<T> instance;
94
+        static std::unique_ptr<T> instance;
95
         if (NULL != obj)
96
         {
97
             instance.reset(obj);
98
@@ -237,7 +219,6 @@
99
 };
100
 
101
 //----utility sinks-----
102
-#if defined(_WIN32) || defined(_WIN64)
103
 #if defined(DISPATCHER_LOG_REGISTER_EVENT_PROVIDER)
104
 class ETWHandlerFactory
105
     : public DSSingleTone<ETWHandlerFactory>
106
@@ -254,7 +235,6 @@
107
     ETWHandlerFactory(){}
108
 };
109
 #endif
110
-#endif // #if defined(_WIN32) || defined(_WIN64)
111
 
112
 #if defined(DISPATCHER_LOG_REGISTER_FILE_WRITER)
113
 class FileSink 
114
@@ -264,6 +244,10 @@
115
     friend class DSSingleTone<FileSink>;
116
 public:
117
     virtual void Write(int level, int opcode, const char * msg, va_list argptr);
118
+    FileSink()
119
+        : m_hdl(NULL)
120
+    {
121
+    }
122
     ~FileSink()
123
     {
124
         if (NULL != m_hdl)
125
@@ -273,11 +257,7 @@
126
     FILE * m_hdl;
127
     FileSink(const std::string & log_file)
128
     {
129
-#if defined(_WIN32) || defined(_WIN64)
130
         fopen_s(&m_hdl, log_file.c_str(), "a");
131
-#else
132
-        m_hdl = fopen(log_file.c_str(), "a");
133
-#endif
134
     }
135
     
136
 };
137
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_driver_store_loader.h Added
67
 
1
@@ -0,0 +1,65 @@
2
+// Copyright (c) 2019-2020 Intel Corporation
3
+//
4
+// Permission is hereby granted, free of charge, to any person obtaining a copy
5
+// of this software and associated documentation files (the "Software"), to deal
6
+// in the Software without restriction, including without limitation the rights
7
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+// copies of the Software, and to permit persons to whom the Software is
9
+// furnished to do so, subject to the following conditions:
10
+//
11
+// The above copyright notice and this permission notice shall be included in all
12
+// copies or substantial portions of the Software.
13
+//
14
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+// SOFTWARE.
21
+
22
+#if !defined(__MFX_DRIVER_STORE_LOADER_H)
23
+#define __MFX_DRIVER_STORE_LOADER_H
24
+
25
+#include <windows.h>
26
+#include <cfgmgr32.h>
27
+#include <devguid.h>
28
+
29
+#include "mfx_dispatcher_defs.h"
30
+
31
+namespace MFX
32
+{
33
+
34
+typedef CONFIGRET(WINAPI *Func_CM_Get_Device_ID_List_SizeW)(PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags);
35
+typedef CONFIGRET(WINAPI *Func_CM_Get_Device_ID_ListW)(PCWSTR pszFilter, PZZWSTR Buffer, ULONG BufferLen, ULONG ulFlags);
36
+typedef CONFIGRET(WINAPI *Func_CM_Locate_DevNodeW)(PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags);
37
+typedef CONFIGRET(WINAPI *Func_CM_Open_DevNode_Key)(DEVINST dnDevNode, REGSAM samDesired, ULONG ulHardwareProfile, REGDISPOSITION Disposition, PHKEY phkDevice, ULONG ulFlags);
38
+
39
+class DriverStoreLoader
40
+{
41
+public:
42
+    DriverStoreLoader(void);
43
+    ~DriverStoreLoader(void);
44
+
45
+    bool GetDriverStorePath(wchar_t *path, DWORD dwPathSize, mfxU32 deviceID);
46
+
47
+protected:
48
+    bool LoadCfgMgr();
49
+    bool LoadCmFuncs();
50
+
51
+    mfxModuleHandle                  m_moduleCfgMgr;
52
+    Func_CM_Get_Device_ID_List_SizeW m_pCM_Get_Device_ID_List_Size;
53
+    Func_CM_Get_Device_ID_ListW      m_pCM_Get_Device_ID_List;
54
+    Func_CM_Locate_DevNodeW          m_pCM_Locate_DevNode;
55
+    Func_CM_Open_DevNode_Key         m_pCM_Open_DevNode_Key;
56
+
57
+private:
58
+    // unimplemented by intent to make this class non-copyable
59
+    DriverStoreLoader(const DriverStoreLoader &);
60
+    void operator=(const DriverStoreLoader &);
61
+
62
+};
63
+
64
+} // namespace MFX
65
+
66
+#endif // __MFX_DRIVER_STORE_LOADER_H
67
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dxva2_device.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_dxva2_device.h Changed
106
 
1
@@ -1,46 +1,34 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dxva2_device.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_DXVA2_DEVICE_H)
52
 #define __MFX_DXVA2_DEVICE_H
53
 
54
-#if defined(_WIN32) || defined(_WIN64)
55
 #include <windows.h>
56
 
57
 #define TOSTRING(L) #L
58
 #define STRINGIFY(L) TOSTRING(L)
59
 
60
-#if defined(MEDIASDK_UWP_LOADER) || defined(MEDIASDK_UWP_PROCTABLE)
61
+#if defined(MEDIASDK_UWP_DISPATCHER)
62
     #if defined(MFX_D3D9_ENABLED) && !defined(MFX_FORCE_D3D9_ENABLED)
63
         #undef MFX_D3D9_ENABLED
64
-        // if you really like to use D3D9 from intel_gfx_api-x64/x86.dll, use MFX_FORCE_D3D9_ENABLED
65
         #pragma message("\n\nATTENTION:\nin file\n\t" __FILE__ " (" STRINGIFY(__LINE__) "):\nUsing of D3D9 disabled for UWP!\n\n")
66
     #endif
67
     #if defined(MFX_FORCE_D3D9_ENABLED)
68
@@ -51,8 +39,6 @@
69
     #pragma message("\n\nATTENTION:\nin file\n\t" __FILE__ " (" STRINGIFY(__LINE__) "):\nUsing of D3D9 enabled!\n\n")
70
 #endif
71
 
72
-#endif // #if defined(_WIN32) || defined(_WIN64)
73
-
74
 #include <mfxdefs.h>
75
 
76
 #ifdef DXVA2DEVICE_LOG
77
@@ -101,10 +87,8 @@
78
     // Free DLL module
79
     void UnloadDLLModule(void);
80
 
81
-#if defined(_WIN32) || defined(_WIN64)
82
     // Handle to the DLL library
83
     HMODULE m_hModule;
84
-#endif // #if defined(_WIN32) || defined(_WIN64)
85
 
86
     // Number of adapters available
87
     mfxU32 m_numAdapters;
88
@@ -124,9 +108,6 @@
89
     void operator=(const DXDevice &);
90
 };
91
 
92
-
93
-#if defined(_WIN32) || defined(_WIN64)
94
-
95
 #ifdef MFX_D3D9_ENABLED
96
 class D3D9Device : public DXDevice
97
 {
98
@@ -180,7 +161,6 @@
99
     void *m_pDXGIAdapter1;
100
 
101
 };
102
-#endif // #if defined(_WIN32) || defined(_WIN64)
103
 
104
 class DXVA2Device
105
 {
106
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_exposed_functions_list.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_exposed_functions_list.h Changed
53
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2016 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_exposed_functions_list.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 //
52
 // WARNING:
53
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_library_iterator.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_library_iterator.h Changed
205
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_library_iterator.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_LIBRARY_ITERATOR_H)
52
 #define __MFX_LIBRARY_ITERATOR_H
53
@@ -34,68 +24,41 @@
54
 
55
 #include <mfxvideo.h>
56
 
57
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
58
+#if !defined(MEDIASDK_UWP_DISPATCHER)
59
 #include "mfx_win_reg_key.h"
60
 #endif
61
 
62
-#include "mfx_dispatcher.h"
63
-
64
-#if !defined(_WIN32) && !defined(_WIN64)
65
-struct mfx_disp_adapters
66
-{
67
-    mfxU32 vendor_id;
68
-    mfxU32 device_id;
69
-};
70
+#include "mfx_driver_store_loader.h"
71
 
72
-#ifndef __APPLE__
73
-#define MFX_SO_BASE_NAME_LEN 15 // sizeof("libmfxhw32-p.so") = 15
74
-#else
75
-
76
-#define MFX_SO_BASE_NAME_LEN 16 // sizeof("libmfxhw64.dylib") = 16
77
-#endif
78
-
79
-#define MFX_MIN_REAL_LIBNAME MFX_SO_BASE_NAME_LEN + 4 // sizeof("libmfxhw32-p.so.0.0") >= 19
80
-#define MFX_MAX_REAL_LIBNAME MFX_MIN_REAL_LIBNAME + 8 // sizeof("libmfxhw32-p.so.<mj>.<mn>") <= 27, max(sizeof(<mj>))=sizeof(0xFFFF) = sizeof(65535) = 5
81
-
82
-struct mfx_libs
83
-{
84
-    char name[MFX_MAX_REAL_LIBNAME+1];
85
-    mfxVersion version;
86
-};
87
-#endif
88
+#include "mfx_dispatcher.h"
89
 
90
 namespace MFX
91
 {
92
 
93
 // declare desired storage ID
94
-#if defined(_WIN32) || defined(_WIN64)
95
 enum
96
 {
97
+#if defined (MFX_TRACER_WA_FOR_DS)
98
     MFX_UNKNOWN_KEY             = -1,
99
-    MFX_CURRENT_USER_KEY        = 0,
100
-    MFX_LOCAL_MACHINE_KEY       = 1,
101
-    MFX_APP_FOLDER              = 2,
102
-#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
103
-    MFX_PATH_MSDK_FOLDER = 3,
104
-    MFX_STORAGE_ID_FIRST    = MFX_CURRENT_USER_KEY,
105
-    MFX_STORAGE_ID_LAST     = MFX_PATH_MSDK_FOLDER
106
-#else
107
-    MFX_PATH_MSDK_FOLDER = 3,
108
-    MFX_STORAGE_ID_FIRST = MFX_PATH_MSDK_FOLDER,
109
+    MFX_TRACER                  = 0,
110
+    MFX_DRIVER_STORE            = 1,
111
+    MFX_CURRENT_USER_KEY        = 2,
112
+    MFX_LOCAL_MACHINE_KEY       = 3,
113
+    MFX_APP_FOLDER              = 4,
114
+    MFX_PATH_MSDK_FOLDER        = 5,
115
+    MFX_STORAGE_ID_FIRST = MFX_TRACER,
116
     MFX_STORAGE_ID_LAST = MFX_PATH_MSDK_FOLDER
117
-#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
118
-};
119
 #else
120
-enum
121
-{
122
-    MFX_UNKNOWN_KEY     = -1,
123
-    MFX_STORAGE_ID_OPT  = 0, // storage is: MFX_MODULES_DIR
124
-    MFX_APP_FOLDER      = 1,
125
-
126
-    MFX_STORAGE_ID_FIRST   =  MFX_STORAGE_ID_OPT,
127
-    MFX_STORAGE_ID_LAST    = MFX_STORAGE_ID_OPT
128
-};
129
+    MFX_UNKNOWN_KEY             = -1,
130
+    MFX_DRIVER_STORE            = 0,
131
+    MFX_CURRENT_USER_KEY        = 1,
132
+    MFX_LOCAL_MACHINE_KEY       = 2,
133
+    MFX_APP_FOLDER              = 3,
134
+    MFX_PATH_MSDK_FOLDER        = 4,
135
+    MFX_STORAGE_ID_FIRST    = MFX_DRIVER_STORE,
136
+    MFX_STORAGE_ID_LAST     = MFX_PATH_MSDK_FOLDER
137
 #endif
138
+};
139
 
140
 // Try to initialize using given implementation type. Select appropriate type automatically in case of MFX_IMPL_VIA_ANY.
141
 // Params: adapterNum - in, pImplInterface - in/out, pVendorID - out, pDeviceID - out
142
@@ -115,14 +78,14 @@
143
     mfxStatus Init(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID);
144
 
145
     // Get the next library path
146
-    mfxStatus SelectDLLVersion(msdk_disp_char *pPath, size_t pathSize,
147
+    mfxStatus SelectDLLVersion(wchar_t *pPath, size_t pathSize,
148
                                eMfxImplType *pImplType, mfxVersion minVersion);
149
 
150
     // Return interface type on which Intel adapter was found (if any): D3D9 or D3D11
151
     mfxIMPL GetImplementationType();
152
 
153
     // Retrun registry subkey name on which dll was selected after sucesfull call to selectDllVesion
154
-    bool GetSubKeyName(msdk_disp_char *subKeyName, size_t length) const;
155
+    bool GetSubKeyName(wchar_t *subKeyName, size_t length) const;
156
 
157
     int  GetStorageID() const { return m_StorageID; }
158
 protected:
159
@@ -131,9 +94,13 @@
160
     void Release(void);
161
 
162
     // Initialize the registry iterator
163
-    mfxStatus InitRegistry(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID);
164
-    // Initialize the app folder iterator
165
-    mfxStatus InitFolder(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, const msdk_disp_char * path);
166
+    mfxStatus InitRegistry(int storageID);
167
+#if defined(MFX_TRACER_WA_FOR_DS)
168
+    // Initialize the registry iterator for searching for tracer
169
+    mfxStatus InitRegistryTracer();
170
+#endif
171
+    // Initialize the app/module folder iterator
172
+    mfxStatus InitFolder(eMfxImplType implType, const wchar_t * path, const int storageID);
173
 
174
 
175
     eMfxImplType m_implType;                                    // Required library implementation
176
@@ -145,25 +112,16 @@
177
     wchar_t m_SubKeyName[MFX_MAX_REGISTRY_KEY_NAME];            // registry subkey for selected module loaded
178
     int    m_StorageID;
179
 
180
-#if defined(_WIN32) || defined(_WIN64)
181
-
182
-#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
183
+#if !defined(MEDIASDK_UWP_DISPATCHER)
184
     WinRegKey m_baseRegKey;                                     // (WinRegKey) main registry key
185
 #endif
186
 
187
     mfxU32 m_lastLibIndex;                                      // (mfxU32) index of previously returned library
188
     mfxU32 m_lastLibMerit;                                      // (mfxU32) merit of previously returned library
189
-#else
190
-    int                       m_lastLibIndex;                   // (mfxU32) index of previously returned library
191
 
192
-    mfxU32                    m_adapters_num;
193
-    struct mfx_disp_adapters* m_adapters;
194
-    int                       m_selected_adapter;
195
-    mfxU32                    m_libs_num;
196
-    struct mfx_libs*          m_libs;
197
-#endif // #if defined(_WIN32) || defined(_WIN64)
198
+    wchar_t  m_path[msdk_disp_path_len];
199
 
200
-    msdk_disp_char  m_path[msdk_disp_path_len];
201
+    DriverStoreLoader m_driverStoreLoader;                      // for loading MediaSDK from DriverStore
202
 
203
 private:
204
     // unimplemented by intent to make this class non-copyable
205
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_load_dll.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_load_dll.h Changed
79
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_load_dll.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_LOAD_DLL_H)
52
 #define __MFX_LOAD_DLL_H
53
@@ -41,16 +31,19 @@
54
     // declare DLL loading routines
55
     //
56
 
57
-    mfxStatus mfx_get_rt_dll_name(msdk_disp_char *pPath, size_t pathSize);
58
-    mfxStatus mfx_get_default_dll_name(msdk_disp_char *pPath, size_t pathSize, eMfxImplType implType);
59
-    mfxStatus mfx_get_default_plugin_name(msdk_disp_char *pPath, size_t pathSize, eMfxImplType implType);
60
+    mfxStatus mfx_get_rt_dll_name(wchar_t *pPath, size_t pathSize);
61
+    mfxStatus mfx_get_default_dll_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType);
62
+    mfxStatus mfx_get_default_plugin_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType);
63
+#if defined(MEDIASDK_UWP_DISPATCHER)
64
+    mfxStatus mfx_get_default_intel_gfx_api_dll_name(wchar_t *pPath, size_t pathSize);
65
+#endif
66
 
67
-    mfxStatus mfx_get_default_audio_dll_name(msdk_disp_char *pPath, size_t pathSize, eMfxImplType implType);
68
+    mfxStatus mfx_get_default_audio_dll_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType);
69
     
70
 
71
-    mfxModuleHandle mfx_dll_load(const msdk_disp_char *file_name);
72
+    mfxModuleHandle mfx_dll_load(const wchar_t *file_name);
73
     //increments reference counter
74
-    mfxModuleHandle mfx_get_dll_handle(const msdk_disp_char *file_name);
75
+    mfxModuleHandle mfx_get_dll_handle(const wchar_t *file_name);
76
     mfxFunctionPointer mfx_dll_get_addr(mfxModuleHandle handle, const char *func_name);
77
     bool mfx_dll_free(mfxModuleHandle handle);
78
 
79
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_load_plugin.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_load_plugin.h Changed
76
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2016 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_load_plugin.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2013-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #pragma once
52
 #include "mfxplugin.h"
53
@@ -41,11 +31,11 @@
54
     {
55
         mfxModuleHandle mHmodule;
56
         CreatePluginPtr_t mCreatePluginPtr;
57
-        msdk_disp_char mPath[MAX_PLUGIN_PATH];
58
+        wchar_t mPath[MAX_PLUGIN_PATH];
59
         
60
     public:
61
         PluginModule();
62
-        PluginModule(const msdk_disp_char * path);
63
+        PluginModule(const wchar_t * path);
64
         PluginModule(const PluginModule & that) ;
65
         PluginModule & operator = (const PluginModule & that);
66
         bool Create(mfxPluginUID guid, mfxPlugin&);
67
@@ -61,7 +51,7 @@
68
             PluginModule module;
69
             mfxPlugin plugin;
70
             FactoryRecord ()
71
-                : plugin()
72
+                : plgParams(), plugin()
73
             {}
74
             FactoryRecord(const mfxPluginParam &plgParams,
75
                           PluginModule &module,
76
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_plugin_hive.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_plugin_hive.h Changed
93
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_plugin_hive.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2013-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #pragma once
52
 
53
@@ -58,7 +48,7 @@
54
     class PluginDescriptionRecord :  public mfxPluginParam 
55
     {
56
     public:
57
-        msdk_disp_char sPath[MAX_PLUGIN_PATH];
58
+        wchar_t sPath[MAX_PLUGIN_PATH];
59
         char sName[MAX_PLUGIN_NAME];
60
         //used for FS plugins that has poor description
61
         bool onlyVersionRegistered;
62
@@ -91,14 +81,15 @@
63
         }
64
     };
65
 
66
+#if !defined(MEDIASDK_UWP_DISPATCHER)
67
+
68
     //populated from registry
69
     class MFXPluginsInHive : public MFXPluginStorageBase
70
     {
71
     public:
72
-        MFXPluginsInHive(int mfxStorageID, const msdk_disp_char *msdkLibSubKey, mfxVersion currentAPIVersion);
73
+        MFXPluginsInHive(int mfxStorageID, const wchar_t *msdkLibSubKey, mfxVersion currentAPIVersion);
74
     };
75
 
76
-#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
77
     //plugins are loaded from FS close to executable
78
     class MFXPluginsInFS : public MFXPluginStorageBase
79
     {
80
@@ -108,9 +99,10 @@
81
         MFXPluginsInFS(mfxVersion currentAPIVersion);
82
     private:
83
         bool ParseFile(FILE * f, PluginDescriptionRecord & des);
84
-        bool ParseKVPair( msdk_disp_char *key, msdk_disp_char * value, PluginDescriptionRecord & des);
85
+        bool ParseKVPair( wchar_t *key, wchar_t * value, PluginDescriptionRecord & des);
86
     };
87
-#endif //#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
88
+
89
+#endif //#if !defined(MEDIASDK_UWP_DISPATCHER)
90
 
91
     //plugins are loaded from FS close to Runtime library
92
     class MFXDefaultPlugins : public MFXPluginStorageBase
93
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_vector.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_vector.h Changed
253
 
1
@@ -1,81 +1,71 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_vector.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2013-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #pragma once
52
 #include "mfxstructures.h"
53
 #include <exception>
54
 
55
-namespace MFX 
56
+namespace MFX
57
 {
58
     template <class T>
59
-    class iterator_tmpl 
60
+    class iterator_tmpl
61
     {
62
         template <class U> friend class MFXVector;
63
         mfxU32 mIndex;
64
         T* mRecords;
65
-        iterator_tmpl(mfxU32 index , T * records) 
66
+        iterator_tmpl(mfxU32 index , T * records)
67
             : mIndex (index)
68
             , mRecords(records)
69
         {}
70
     public:
71
-        iterator_tmpl() 
72
+        iterator_tmpl()
73
             : mIndex ()
74
-            , mRecords() 
75
+            , mRecords()
76
         {}
77
-        bool  operator ==(const iterator_tmpl<T> & that )const 
78
+        bool  operator ==(const iterator_tmpl<T> & that )const
79
         {
80
             return mIndex == that.mIndex;
81
         }
82
-        bool  operator !=(const iterator_tmpl<T> & that )const 
83
+        bool  operator !=(const iterator_tmpl<T> & that )const
84
         {
85
             return mIndex != that.mIndex;
86
         }
87
-        mfxU32 operator - (const iterator_tmpl<T> &that) const 
88
+        mfxU32 operator - (const iterator_tmpl<T> &that) const
89
         {
90
             return mIndex - that.mIndex;
91
         }
92
-        iterator_tmpl<T> & operator ++() 
93
+        iterator_tmpl<T> & operator ++()
94
         {
95
             mIndex++;
96
             return * this;
97
         }
98
-        iterator_tmpl<T> & operator ++(int) 
99
+        iterator_tmpl<T> & operator ++(int)
100
         {
101
             mIndex++;
102
             return * this;
103
         }
104
-        T & operator *() 
105
+        T & operator *()
106
         {
107
             return mRecords[mIndex];
108
         }
109
-        T * operator ->() 
110
+        T * operator ->()
111
         {
112
             return mRecords + mIndex;
113
         }
114
@@ -86,7 +76,7 @@
115
     };
116
 
117
     template <class T>
118
-    class MFXVector  
119
+    class MFXVector
120
     {
121
         T*      mRecords;
122
         mfxU32  mNrecords;
123
@@ -103,7 +93,7 @@
124
         }
125
         MFXVector & operator = (const MFXVector & rhs)
126
         {
127
-            if (this != &rhs) 
128
+            if (this != &rhs)
129
             {
130
                 clear();
131
                 insert(end(), rhs.begin(), rhs.end());
132
@@ -116,15 +106,15 @@
133
         }
134
         typedef iterator_tmpl<T> iterator;
135
 
136
-        iterator begin() const 
137
+        iterator begin() const
138
         {
139
             return iterator(0u, mRecords);
140
         }
141
-        iterator end() const 
142
+        iterator end() const
143
         {
144
             return iterator(mNrecords, mRecords);
145
         }
146
-        void insert(iterator where, iterator beg_iter, iterator end_iter) 
147
+        void insert(iterator where, iterator beg_iter, iterator end_iter)
148
         {
149
             mfxU32 elementsToInsert = (end_iter - beg_iter);
150
             if (!elementsToInsert)
151
@@ -138,20 +128,20 @@
152
 
153
             T *newRecords = new T[mNrecords + elementsToInsert]();
154
             mfxU32 i = 0;
155
-            
156
+
157
             // save left
158
-            for (; i < where.mIndex; i++) 
159
+            for (; i < where.mIndex; i++)
160
             {
161
                 newRecords[i] = mRecords[i];
162
             }
163
             // insert
164
-            for (; beg_iter != end_iter; beg_iter++, i++) 
165
+            for (; beg_iter != end_iter; beg_iter++, i++)
166
             {
167
                 newRecords[i] = *beg_iter;
168
             }
169
-    
170
+
171
             //save right
172
-            for (; i < mNrecords + elementsToInsert; i++) 
173
+            for (; i < mNrecords + elementsToInsert; i++)
174
             {
175
                 newRecords[i] = mRecords[i - elementsToInsert];
176
             }
177
@@ -161,15 +151,15 @@
178
             mRecords = newRecords;
179
             mNrecords = i;
180
         }
181
-        T& operator [] (mfxU32 idx) 
182
+        T& operator [] (mfxU32 idx)
183
         {
184
           return mRecords[idx];
185
         }
186
-        void push_back(const T& obj) 
187
+        void push_back(const T& obj)
188
         {
189
             T *newRecords = new T[mNrecords + 1]();
190
             mfxU32 i = 0;
191
-            for (; i <mNrecords; i++) 
192
+            for (; i <mNrecords; i++)
193
             {
194
                 newRecords[i] = mRecords[i];
195
             }
196
@@ -178,15 +168,14 @@
197
 
198
             mRecords = newRecords;
199
             mNrecords = i + 1;
200
-            
201
         }
202
-        void erase (iterator at) 
203
+        void erase (iterator at)
204
         {
205
             if (at.mIndex >= mNrecords)
206
             {
207
                 throw MFXVectorRangeError();
208
             }
209
-            mNrecords--; 
210
+            mNrecords--;
211
             mfxU32 i = at.mIndex;
212
             for (; i != mNrecords; i++)
213
             {
214
@@ -195,10 +184,10 @@
215
             //destroy last element
216
             mRecords[i] = T();
217
         }
218
-        void resize(mfxU32 nSize) 
219
+        void resize(mfxU32 nSize)
220
         {
221
             T * newRecords = new T[nSize]();
222
-            for (mfxU32 i = 0; i <mNrecords; i++) 
223
+            for (mfxU32 i = 0; i <mNrecords; i++)
224
             {
225
                 newRecords[i] = mRecords[i];
226
             }
227
@@ -206,15 +195,23 @@
228
             mRecords = newRecords;
229
             mNrecords = nSize;
230
         }
231
-        mfxU32 size() const 
232
+        mfxU32 size() const
233
         {
234
             return mNrecords;
235
         }
236
-        void clear() 
237
+        void clear()
238
         {
239
             delete [] mRecords;
240
             mRecords = 0;
241
             mNrecords = 0;
242
         }
243
+        bool empty()
244
+        {
245
+            return !mRecords;
246
+        }
247
+        T * data() const
248
+        {
249
+            return mRecords;
250
+        }
251
     };
252
 }
253
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_win_reg_key.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfx_win_reg_key.h Changed
73
 
1
@@ -1,42 +1,31 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_win_reg_key.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if !defined(__MFX_WIN_REG_KEY_H)
52
 #define __MFX_WIN_REG_KEY_H
53
 
54
-#if defined(_WIN32) || defined(_WIN64)
55
-
56
 #include <windows.h>
57
 #include "mfxplugin.h"
58
 #include "mfx_dispatcher_log.h"
59
 
60
+#if !defined(MEDIASDK_UWP_DISPATCHER)
61
 namespace MFX {
62
 
63
 template<class T> struct RegKey{};
64
@@ -110,7 +99,6 @@
65
 
66
 
67
 } // namespace MFX
68
-
69
-#endif // #if defined(_WIN32) || defined(_WIN64)
70
+#endif // #if !defined(MEDIASDK_UWP_DISPATCHER)
71
 
72
 #endif // __MFX_WIN_REG_KEY_H
73
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/mfxaudio_exposed_functions_list.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/mfxaudio_exposed_functions_list.h Changed
53
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxaudio_exposed_function_list.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2013-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 //
52
 // WARNING:
53
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxadapter.h Added
43
 
1
@@ -0,0 +1,40 @@
2
+// Copyright (c) 2019-2020 Intel Corporation
3
+//
4
+// Permission is hereby granted, free of charge, to any person obtaining a copy
5
+// of this software and associated documentation files (the "Software"), to deal
6
+// in the Software without restriction, including without limitation the rights
7
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+// copies of the Software, and to permit persons to whom the Software is
9
+// furnished to do so, subject to the following conditions:
10
+//
11
+// The above copyright notice and this permission notice shall be included in all
12
+// copies or substantial portions of the Software.
13
+//
14
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+// SOFTWARE.
21
+
22
+#include "mfxdefs.h"
23
+#if (MFX_VERSION >= 1031)
24
+#ifndef __MFXADAPTER_H__
25
+#define __MFXADAPTER_H__
26
+
27
+#include "mfxstructures.h"
28
+
29
+#ifdef __cplusplus
30
+extern "C"
31
+{
32
+#endif
33
+mfxStatus MFX_CDECL MFXQueryAdapters(mfxComponentInfo* input_info, mfxAdaptersInfo* adapters);
34
+mfxStatus MFX_CDECL MFXQueryAdaptersDecode(mfxBitstream* bitstream, mfxU32 codec_id, mfxAdaptersInfo* adapters);
35
+mfxStatus MFX_CDECL MFXQueryAdaptersNumber(mfxU32* num_adapters);
36
+#ifdef __cplusplus
37
+} // extern "C"
38
+#endif
39
+
40
+#endif // __MFXADAPTER_H__
41
+#endif
42
\ No newline at end of file
43
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxastructures.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxastructures.h Changed
97
 
1
@@ -1,32 +1,22 @@
2
-/*******************************************************************************
3
-
4
-Copyright (C) 2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxastructures.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXASTRUCTURES_H__
51
 #define __MFXASTRUCTURES_H__
52
 #include "mfxcommon.h"
53
@@ -103,6 +93,7 @@
54
     MFX_AUDIO_AAC_JOINT_STEREO=    3
55
 };
56
 
57
+MFX_PACK_BEGIN_USUAL_STRUCT()
58
 typedef struct {
59
     mfxU32                CodecId;
60
     mfxU16                CodecProfile;
61
@@ -129,7 +120,9 @@
62
         };
63
     };
64
 } mfxAudioInfoMFX;
65
+MFX_PACK_END()
66
 
67
+MFX_PACK_BEGIN_STRUCT_W_PTR()
68
 typedef struct {
69
     mfxU16  AsyncDepth;
70
     mfxU16  Protected;
71
@@ -139,13 +132,17 @@
72
     mfxExtBuffer**    ExtParam;
73
     mfxU16            NumExtParam;
74
 } mfxAudioParam;
75
+MFX_PACK_END()
76
 
77
+MFX_PACK_BEGIN_USUAL_STRUCT()
78
 typedef struct {
79
     mfxU32  SuggestedInputSize;
80
     mfxU32  SuggestedOutputSize;
81
     mfxU32  reserved[6];
82
 } mfxAudioAllocRequest;
83
+MFX_PACK_END()
84
 
85
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
86
 typedef struct {
87
     mfxU64  TimeStamp; /* 1/90KHz */
88
     mfxU16  Locked;
89
@@ -162,6 +159,7 @@
90
     mfxU32  NumExtParam;
91
     mfxExtBuffer **ExtParam;
92
 } mfxAudioFrame;
93
+MFX_PACK_END()
94
 
95
 #ifdef __cplusplus
96
 }
97
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxaudio++.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxaudio++.h Changed
55
 
1
@@ -1,34 +1,22 @@
2
-/*******************************************************************************
3
-
4
-Copyright (C) 2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-
29
-File Name: mfxaudio++.h
30
-
31
-
32
-*******************************************************************************/
33
+// Copyright (c) 2017 Intel Corporation
34
+// 
35
+// Permission is hereby granted, free of charge, to any person obtaining a copy
36
+// of this software and associated documentation files (the "Software"), to deal
37
+// in the Software without restriction, including without limitation the rights
38
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+// copies of the Software, and to permit persons to whom the Software is
40
+// furnished to do so, subject to the following conditions:
41
+// 
42
+// The above copyright notice and this permission notice shall be included in all
43
+// copies or substantial portions of the Software.
44
+// 
45
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+// SOFTWARE.
52
 #ifndef __MFXAUDIOPLUSPLUS_H
53
 #define __MFXAUDIOPLUSPLUS_H
54
 
55
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxaudio.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxaudio.h Changed
96
 
1
@@ -1,32 +1,22 @@
2
-/*******************************************************************************
3
-
4
-Copyright (C) 2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxaudio.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #ifndef __MFXAUDIO_H__
52
 #define __MFXAUDIO_H__
53
@@ -42,26 +32,26 @@
54
 #endif
55
 
56
 /* AudioCORE */
57
-mfxStatus MFX_CDECL MFXAudioCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait);
58
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioCORE_SyncOperation(mfxSession session, mfxSyncPoint syncp, mfxU32 wait);
59
 
60
 /* AudioENCODE */
61
-mfxStatus MFX_CDECL MFXAudioENCODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out);
62
-mfxStatus MFX_CDECL MFXAudioENCODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request);
63
-mfxStatus MFX_CDECL MFXAudioENCODE_Init(mfxSession session, mfxAudioParam *par);
64
-mfxStatus MFX_CDECL MFXAudioENCODE_Reset(mfxSession session, mfxAudioParam *par);
65
-mfxStatus MFX_CDECL MFXAudioENCODE_Close(mfxSession session);
66
-mfxStatus MFX_CDECL MFXAudioENCODE_GetAudioParam(mfxSession session, mfxAudioParam *par);
67
-mfxStatus MFX_CDECL MFXAudioENCODE_EncodeFrameAsync(mfxSession session, mfxAudioFrame *frame, mfxBitstream *bs, mfxSyncPoint *syncp);
68
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out);
69
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request);
70
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Init(mfxSession session, mfxAudioParam *par);
71
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Reset(mfxSession session, mfxAudioParam *par);
72
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_Close(mfxSession session);
73
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_GetAudioParam(mfxSession session, mfxAudioParam *par);
74
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioENCODE_EncodeFrameAsync(mfxSession session, mfxAudioFrame *frame, mfxBitstream *bs, mfxSyncPoint *syncp);
75
 
76
 /* AudioDECODE */
77
-mfxStatus MFX_CDECL MFXAudioDECODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out);
78
-mfxStatus MFX_CDECL MFXAudioDECODE_DecodeHeader(mfxSession session, mfxBitstream *bs, mfxAudioParam* par);
79
-mfxStatus MFX_CDECL MFXAudioDECODE_Init(mfxSession session, mfxAudioParam *par);
80
-mfxStatus MFX_CDECL MFXAudioDECODE_Reset(mfxSession session, mfxAudioParam *par);
81
-mfxStatus MFX_CDECL MFXAudioDECODE_Close(mfxSession session);
82
-mfxStatus MFX_CDECL MFXAudioDECODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request);
83
-mfxStatus MFX_CDECL MFXAudioDECODE_GetAudioParam(mfxSession session, mfxAudioParam *par);
84
-mfxStatus MFX_CDECL MFXAudioDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream *bs, mfxAudioFrame *frame, mfxSyncPoint *syncp);
85
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Query(mfxSession session, mfxAudioParam *in, mfxAudioParam *out);
86
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_DecodeHeader(mfxSession session, mfxBitstream *bs, mfxAudioParam* par);
87
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Init(mfxSession session, mfxAudioParam *par);
88
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Reset(mfxSession session, mfxAudioParam *par);
89
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_Close(mfxSession session);
90
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_QueryIOSize(mfxSession session, mfxAudioParam *par, mfxAudioAllocRequest *request);
91
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_GetAudioParam(mfxSession session, mfxAudioParam *par);
92
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioDECODE_DecodeFrameAsync(mfxSession session, mfxBitstream *bs, mfxAudioFrame *frame, mfxSyncPoint *syncp);
93
 
94
 #ifdef __cplusplus
95
 } // extern "C"
96
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxcommon.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxcommon.h Changed
199
 
1
@@ -1,32 +1,22 @@
2
-/*******************************************************************************
3
-
4
-Copyright (C) 2013-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxcommon.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2018-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXCOMMON_H__
51
 #define __MFXCOMMON_H__
52
 #include "mfxdefs.h"
53
@@ -43,10 +33,12 @@
54
 #define MFX_MAKEFOURCC(A,B,C,D)    ((((int)A))+(((int)B)<<8)+(((int)C)<<16)+(((int)D)<<24))
55
 
56
 /* Extended Configuration Header Structure */
57
+MFX_PACK_BEGIN_USUAL_STRUCT()
58
 typedef struct {
59
     mfxU32  BufferId;
60
     mfxU32  BufferSz;
61
 } mfxExtBuffer;
62
+MFX_PACK_END()
63
 
64
 /* Library initialization and deinitialization */
65
 typedef mfxI32 mfxIMPL;
66
@@ -62,17 +54,24 @@
67
     MFX_IMPL_HARDWARE3    = 0x0006,  /* Hardware accelerated implementation (3rd device) */
68
     MFX_IMPL_HARDWARE4    = 0x0007,  /* Hardware accelerated implementation (4th device) */
69
     MFX_IMPL_RUNTIME      = 0x0008,
70
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
71
+    MFX_IMPL_SINGLE_THREAD= 0x0009,
72
+#endif
73
     MFX_IMPL_VIA_ANY      = 0x0100,
74
     MFX_IMPL_VIA_D3D9     = 0x0200,
75
     MFX_IMPL_VIA_D3D11    = 0x0300,
76
     MFX_IMPL_VIA_VAAPI    = 0x0400,
77
 
78
     MFX_IMPL_AUDIO                     = 0x8000,
79
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
80
+    MFX_IMPL_EXTERNAL_THREADING        = 0x10000,
81
+#endif
82
 
83
     MFX_IMPL_UNSUPPORTED  = 0x0000  /* One of the MFXQueryIMPL returns */
84
 };
85
 
86
 /* Version Info */
87
+MFX_PACK_BEGIN_USUAL_STRUCT()
88
 typedef union {
89
     struct {
90
         mfxU16  Minor;
91
@@ -80,6 +79,7 @@
92
     };
93
     mfxU32  Version;
94
 } mfxVersion;
95
+MFX_PACK_END()
96
 
97
 /* session priority */
98
 typedef enum
99
@@ -91,6 +91,7 @@
100
 } mfxPriority;
101
 
102
 typedef struct _mfxEncryptedData mfxEncryptedData;
103
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
104
 typedef struct {
105
      union {
106
         struct {
107
@@ -100,7 +101,7 @@
108
         };
109
          mfxU32  reserved[6];
110
      };
111
-    mfxI64  DecodeTimeStamp; 
112
+    mfxI64  DecodeTimeStamp;
113
     mfxU64  TimeStamp;
114
     mfxU8*  Data;
115
     mfxU32  DataOffset;
116
@@ -112,6 +113,7 @@
117
     mfxU16  DataFlag;
118
     mfxU16  reserved2;
119
 } mfxBitstream;
120
+MFX_PACK_END()
121
 
122
 typedef struct _mfxSyncPoint *mfxSyncPoint;
123
 
124
@@ -122,6 +124,7 @@
125
     MFX_GPUCOPY_OFF     = 2
126
 };
127
 
128
+MFX_PACK_BEGIN_STRUCT_W_PTR()
129
 typedef struct {
130
     mfxIMPL     Implementation;
131
     mfxVersion  Version;
132
@@ -136,11 +139,13 @@
133
     mfxU16      GPUCopy;
134
     mfxU16      reserved[21];
135
 } mfxInitParam;
136
+MFX_PACK_END()
137
 
138
 enum {
139
     MFX_EXTBUFF_THREADS_PARAM = MFX_MAKEFOURCC('T','H','D','P')
140
 };
141
 
142
+MFX_PACK_BEGIN_USUAL_STRUCT()
143
 typedef struct {
144
     mfxExtBuffer Header;
145
 
146
@@ -149,6 +154,7 @@
147
     mfxI32       Priority;
148
     mfxU16       reserved[55];
149
 } mfxExtThreadsParam;
150
+MFX_PACK_END()
151
 
152
 /* PlatformCodeName */
153
 enum {
154
@@ -162,17 +168,43 @@
155
     MFX_PLATFORM_SKYLAKE        = 7,
156
     MFX_PLATFORM_APOLLOLAKE     = 8,
157
     MFX_PLATFORM_KABYLAKE       = 9,
158
+#if (MFX_VERSION >= 1025)
159
     MFX_PLATFORM_GEMINILAKE     = 10,
160
     MFX_PLATFORM_COFFEELAKE     = 11,
161
     MFX_PLATFORM_CANNONLAKE     = 20,
162
-    MFX_PLATFORM_ICELAKE = 30,
163
+#endif
164
+#if (MFX_VERSION >= 1027)
165
+    MFX_PLATFORM_ICELAKE        = 30,
166
+#endif
167
+    MFX_PLATFORM_JASPERLAKE     = 32,
168
+    MFX_PLATFORM_ELKHARTLAKE    = 33,
169
+    MFX_PLATFORM_TIGERLAKE      = 40,
170
+    MFX_PLATFORM_ROCKETLAKE     = 42,
171
+    MFX_PLATFORM_ALDERLAKE_S    = 43,
172
+    MFX_PLATFORM_KEEMBAY        = 50,
173
 };
174
 
175
+#if (MFX_VERSION >= 1031)
176
+typedef enum
177
+{
178
+    MFX_MEDIA_UNKNOWN           = 0xffff,
179
+    MFX_MEDIA_INTEGRATED        = 0,
180
+    MFX_MEDIA_DISCRETE          = 1
181
+} mfxMediaAdapterType;
182
+#endif
183
+
184
+MFX_PACK_BEGIN_USUAL_STRUCT()
185
 typedef struct {
186
     mfxU16 CodeName;
187
     mfxU16 DeviceId;
188
+#if (MFX_VERSION >= 1031)
189
+    mfxU16 MediaAdapterType;
190
+    mfxU16 reserved[13];
191
+#else
192
     mfxU16 reserved[14];
193
+#endif
194
 } mfxPlatform;
195
+MFX_PACK_END()
196
 
197
 #ifdef __cplusplus
198
 }
199
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxdefs.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxdefs.h Changed
209
 
1
@@ -1,68 +1,154 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2007-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxdefs.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2019-2020 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXDEFS_H__
51
 #define __MFXDEFS_H__
52
 
53
 #define MFX_VERSION_MAJOR 1
54
-#define MFX_VERSION_MINOR 27
55
+#define MFX_VERSION_MINOR 35
56
 
57
-#define MFX_VERSION_NEXT 1028
58
+// MFX_VERSION_NEXT is always +1 from last public release
59
+// may be enforced by MFX_VERSION_USE_LATEST define
60
+// if MFX_VERSION_USE_LATEST is defined  MFX_VERSION is ignored
61
 
62
-#ifndef MFX_VERSION
63
-#define MFX_VERSION (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR)
64
+#define MFX_VERSION_NEXT (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR + 1)
65
+
66
+// MFX_VERSION - version of API that 'assumed' by build may be provided externally
67
+// if it omitted then latest stable API derived from Major.Minor is assumed
68
+
69
+
70
+#if !defined(MFX_VERSION)
71
+  #if defined(MFX_VERSION_USE_LATEST)
72
+    #define MFX_VERSION MFX_VERSION_NEXT
73
+  #else
74
+    #define MFX_VERSION (MFX_VERSION_MAJOR * 1000 + MFX_VERSION_MINOR)
75
+  #endif
76
+#else
77
+  #undef MFX_VERSION_MINOR
78
+  #define MFX_VERSION_MINOR ((MFX_VERSION) % 1000)
79
 #endif
80
 
81
+
82
 #ifdef __cplusplus
83
 extern "C"
84
 {
85
 #endif /* __cplusplus */
86
 
87
+/* In preprocessor syntax # symbol has stringize meaning,
88
+   so to expand some macro to preprocessor pragma we need to use
89
+   special compiler dependent construction */
90
+
91
+#if defined(_MSC_VER)
92
+    #define MFX_PRAGMA_IMPL(x) __pragma(x)
93
+#else
94
+    #define MFX_PRAGMA_IMPL(x) _Pragma(#x)
95
+#endif
96
+
97
+#define MFX_PACK_BEGIN_X(x) MFX_PRAGMA_IMPL(pack(push, x))
98
+#define MFX_PACK_END()      MFX_PRAGMA_IMPL(pack(pop))
99
+
100
+/* The general rule for alignment is following:
101
+   - structures with pointers have 4/8 bytes alignment on 32/64 bit systems
102
+   - structures with fields of type mfxU64/mfxF64 (unsigned long long / double)
103
+     have alignment 8 bytes on 64 bit and 32 bit Windows, on Linux alignment is 4 bytes
104
+   - all the rest structures are 4 bytes aligned
105
+   - there are several exceptions: some structs which had 4-byte alignment were extended
106
+     with pointer / long type fields; such structs have 4-byte alignment to keep binary
107
+     compatibility with previously release API */
108
+
109
+#define MFX_PACK_BEGIN_USUAL_STRUCT()        MFX_PACK_BEGIN_X(4)
110
 
111
-#if (defined( _WIN32 ) || defined ( _WIN64 )) && !defined (__GNUC__)
112
-  #define __INT64   __int64
113
-  #define __UINT64  unsigned __int64
114
+/* 64-bit LP64 data model */
115
+#if defined(_WIN64) || defined(__LP64__)
116
+    #define MFX_PACK_BEGIN_STRUCT_W_PTR()    MFX_PACK_BEGIN_X(8)
117
+    #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8)
118
+/* 32-bit ILP32 data model Windows (Intel architecture) */
119
+#elif defined(_WIN32) || defined(_M_IX86) && !defined(__linux__)
120
+    #define MFX_PACK_BEGIN_STRUCT_W_PTR()    MFX_PACK_BEGIN_X(4)
121
+    #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(8)
122
+/* 32-bit ILP32 data model Linux */
123
+#elif defined(__ILP32__)
124
+    #define MFX_PACK_BEGIN_STRUCT_W_PTR()    MFX_PACK_BEGIN_X(4)
125
+    #define MFX_PACK_BEGIN_STRUCT_W_L_TYPE() MFX_PACK_BEGIN_X(4)
126
 #else
127
+    #error Unknown packing
128
+#endif
129
+
130
   #define __INT64   long long
131
   #define __UINT64  unsigned long long
132
-#endif
133
 
134
 #ifdef _WIN32
135
-    #define MFX_CDECL __cdecl
136
-    #define MFX_STDCALL __stdcall
137
+  #define MFX_CDECL __cdecl
138
+  #define MFX_STDCALL __stdcall
139
 #else
140
-    #define MFX_CDECL
141
-    #define MFX_STDCALL
142
+  #define MFX_CDECL
143
+  #define MFX_STDCALL
144
 #endif /* _WIN32 */
145
 
146
 #define MFX_INFINITE 0xFFFFFFFF
147
 
148
+#if !defined(MFX_DEPRECATED_OFF) && (MFX_VERSION >= 1034)
149
+#define MFX_DEPRECATED_OFF
150
+#endif
151
+
152
+#ifndef MFX_DEPRECATED_OFF
153
+  #if defined(__cplusplus) && __cplusplus >= 201402L
154
+    #define MFX_DEPRECATED [[deprecated]]
155
+    #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg [[deprecated]]
156
+    #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg)
157
+  #elif defined(__clang__)
158
+    #define MFX_DEPRECATED __attribute__((deprecated))
159
+    #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated))
160
+    #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg)
161
+  #elif defined(__INTEL_COMPILER)
162
+    #if (defined(_WIN32) || defined(_WIN64))
163
+      #define MFX_DEPRECATED __declspec(deprecated)
164
+      #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg
165
+      #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) __pragma(deprecated(arg))
166
+    #elif defined(__linux__)
167
+      #define MFX_DEPRECATED __attribute__((deprecated))
168
+      #if defined(__cplusplus)
169
+        #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated))
170
+      #else
171
+        #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg
172
+      #endif
173
+      #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg)
174
+    #endif
175
+  #elif defined(_MSC_VER) && _MSC_VER > 1200 // VS 6 doesn't support deprecation
176
+    #define MFX_DEPRECATED __declspec(deprecated)
177
+    #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg
178
+    #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg) __pragma(deprecated(arg))
179
+  #elif defined(__GNUC__)
180
+    #define MFX_DEPRECATED __attribute__((deprecated))
181
+    #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg __attribute__((deprecated))
182
+    #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg)
183
+  #else
184
+    #define MFX_DEPRECATED
185
+    #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg
186
+    #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg)
187
+  #endif
188
+#else
189
+  #define MFX_DEPRECATED
190
+  #define MFX_DEPRECATED_ENUM_FIELD_INSIDE(arg) arg
191
+  #define MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(arg)
192
+#endif
193
+
194
 typedef unsigned char       mfxU8;
195
 typedef char                mfxI8;
196
 typedef short               mfxI16;
197
@@ -141,6 +227,11 @@
198
     MFX_WRN_FILTER_SKIPPED              = 10,   /* one of requested filters has been skipped */
199
     MFX_WRN_INCOMPATIBLE_AUDIO_PARAM    = 11,   /* incompatible audio parameters */
200
 
201
+#if MFX_VERSION >= 1031
202
+    /* low-delay partial output */
203
+    MFX_ERR_NONE_PARTIAL_OUTPUT         = 12,   /* frame is not ready, but bitstream contains partial output */
204
+#endif
205
+
206
     /* threading statuses */
207
     MFX_TASK_DONE = MFX_ERR_NONE,               /* task has been completed */
208
     MFX_TASK_WORKING                    = 8,    /* there is some more work to do */
209
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxenc.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxenc.h Changed
106
 
1
@@ -1,32 +1,22 @@
2
-/******************************************************************************* *\
3
-
4
-Copyright (C) 2014-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxenc.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXENC_H__
51
 #define __MFXENC_H__
52
 #include "mfxdefs.h"
53
@@ -37,8 +27,8 @@
54
 {
55
 #endif /* __cplusplus */
56
 
57
-typedef struct _mfxENCInput mfxENCInput;
58
-struct _mfxENCInput{
59
+MFX_PACK_BEGIN_STRUCT_W_PTR()
60
+MFX_DEPRECATED typedef struct _mfxENCInput{
61
     mfxU32  reserved[32];
62
 
63
     mfxFrameSurface1 *InSurface;
64
@@ -50,28 +40,30 @@
65
 
66
     mfxU16  NumExtParam;
67
     mfxExtBuffer    **ExtParam;
68
-} ;
69
+} mfxENCInput;
70
+MFX_PACK_END()
71
 
72
-typedef struct _mfxENCOutput mfxENCOutput;
73
-struct _mfxENCOutput{
74
+MFX_PACK_BEGIN_STRUCT_W_PTR()
75
+MFX_DEPRECATED typedef struct _mfxENCOutput{
76
     mfxU32  reserved[32];
77
 
78
     mfxFrameSurface1 *OutSurface;
79
 
80
     mfxU16  NumExtParam;
81
     mfxExtBuffer    **ExtParam;
82
-} ;
83
+} mfxENCOutput;
84
+MFX_PACK_END()
85
 
86
 
87
-mfxStatus MFX_CDECL MFXVideoENC_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out);
88
-mfxStatus MFX_CDECL MFXVideoENC_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request);
89
-mfxStatus MFX_CDECL MFXVideoENC_Init(mfxSession session, mfxVideoParam *par);
90
-mfxStatus MFX_CDECL MFXVideoENC_Reset(mfxSession session, mfxVideoParam *par);
91
-mfxStatus MFX_CDECL MFXVideoENC_Close(mfxSession session);
92
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out);
93
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest *request);
94
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Init(mfxSession session, mfxVideoParam *par);
95
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Reset(mfxSession session, mfxVideoParam *par);
96
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_Close(mfxSession session);
97
 
98
-mfxStatus MFX_CDECL MFXVideoENC_ProcessFrameAsync(mfxSession session, mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp);
99
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_ProcessFrameAsync(mfxSession session, mfxENCInput *in, mfxENCOutput *out, mfxSyncPoint *syncp);
100
 
101
-mfxStatus MFX_CDECL MFXVideoENC_GetVideoParam(mfxSession session, mfxVideoParam *par);
102
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoENC_GetVideoParam(mfxSession session, mfxVideoParam *par);
103
 
104
 #ifdef __cplusplus
105
 } // extern "C"
106
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxjpeg.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxjpeg.h Changed
79
 
1
@@ -1,32 +1,22 @@
2
-/******************************************************************************* *\
3
-
4
-Copyright (C) 2010-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxjpeg.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFX_JPEG_H__
51
 #define __MFX_JPEG_H__
52
 
53
@@ -77,6 +67,7 @@
54
     MFX_CHROMAFORMAT_JPEG_SAMPLING = 6
55
 };
56
 
57
+MFX_PACK_BEGIN_USUAL_STRUCT()
58
 typedef struct {
59
     mfxExtBuffer    Header;
60
 
61
@@ -85,7 +76,9 @@
62
 
63
     mfxU16    Qm[4][64];
64
 } mfxExtJPEGQuantTables;
65
+MFX_PACK_END()
66
 
67
+MFX_PACK_BEGIN_USUAL_STRUCT()
68
 typedef struct {
69
     mfxExtBuffer    Header;
70
 
71
@@ -103,6 +96,7 @@
72
         mfxU8   Values[162];
73
     } ACTables[4];
74
 } mfxExtJPEGHuffmanTables;
75
+MFX_PACK_END()
76
 
77
 #ifdef __cplusplus
78
 } // extern "C"
79
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxmvc.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxmvc.h Changed
100
 
1
@@ -1,32 +1,22 @@
2
-/******************************************************************************* *\
3
-
4
-Copyright (C) 2010-2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxmvc.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXMVC_H__
51
 #define __MFXMVC_H__
52
 
53
@@ -49,6 +39,7 @@
54
     MFX_EXTBUFF_MVC_TARGET_VIEWS    =   MFX_MAKEFOURCC('M','V','C','T')
55
 };
56
 
57
+MFX_PACK_BEGIN_USUAL_STRUCT()
58
 typedef struct  {
59
     mfxU16 ViewId;
60
 
61
@@ -62,7 +53,9 @@
62
     mfxU16 NonAnchorRefL0[16];
63
     mfxU16 NonAnchorRefL1[16];
64
 } mfxMVCViewDependency;
65
+MFX_PACK_END()
66
 
67
+MFX_PACK_BEGIN_STRUCT_W_PTR()
68
 typedef struct {
69
     mfxU16 TemporalId;
70
     mfxU16 LevelIdc;
71
@@ -71,7 +64,9 @@
72
     mfxU16 NumTargetViews;
73
     mfxU16 *TargetViewId;
74
 } mfxMVCOperationPoint;
75
+MFX_PACK_END()
76
 
77
+MFX_PACK_BEGIN_STRUCT_W_PTR()
78
 typedef struct  {
79
     mfxExtBuffer Header;
80
 
81
@@ -91,7 +86,9 @@
82
     mfxU32 Reserved[16];
83
 
84
 } mfxExtMVCSeqDesc;
85
+MFX_PACK_END()
86
 
87
+MFX_PACK_BEGIN_USUAL_STRUCT()
88
 typedef struct {
89
     mfxExtBuffer    Header;
90
 
91
@@ -99,7 +96,7 @@
92
     mfxU32 NumView;
93
     mfxU16 ViewId[1024];
94
 } mfxExtMVCTargetViews ;
95
-
96
+MFX_PACK_END()
97
 
98
 #ifdef __cplusplus
99
 } // extern "C"
100
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxpak.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxpak.h Changed
101
 
1
@@ -1,32 +1,22 @@
2
-/******************************************************************************* *\
3
-
4
-Copyright (C) 2014-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxpak.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXPAK_H__
51
 #define __MFXPAK_H__
52
 #include "mfxdefs.h"
53
@@ -37,7 +27,8 @@
54
 {
55
 #endif /* __cplusplus */
56
 
57
-typedef struct {
58
+MFX_PACK_BEGIN_STRUCT_W_PTR()
59
+MFX_DEPRECATED typedef struct {
60
     mfxU16 reserved[32];
61
 
62
     mfxFrameSurface1 *InSurface;
63
@@ -53,8 +44,10 @@
64
     mfxU16 NumPayload;
65
     mfxPayload      **Payload;
66
 } mfxPAKInput;
67
+MFX_PACK_END()
68
 
69
-typedef struct {
70
+MFX_PACK_BEGIN_STRUCT_W_PTR()
71
+MFX_DEPRECATED typedef struct {
72
     mfxU16  reserved[32];
73
 
74
     mfxBitstream     *Bs;
75
@@ -64,17 +57,18 @@
76
     mfxU16            NumExtParam;
77
     mfxExtBuffer    **ExtParam;
78
 } mfxPAKOutput;
79
+MFX_PACK_END()
80
 
81
 typedef struct _mfxSession *mfxSession;
82
-mfxStatus MFX_CDECL MFXVideoPAK_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out);
83
-mfxStatus MFX_CDECL MFXVideoPAK_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]);
84
-mfxStatus MFX_CDECL MFXVideoPAK_Init(mfxSession session, mfxVideoParam *par);
85
-mfxStatus MFX_CDECL MFXVideoPAK_Reset(mfxSession session, mfxVideoParam *par);
86
-mfxStatus MFX_CDECL MFXVideoPAK_Close(mfxSession session);
87
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Query(mfxSession session, mfxVideoParam *in, mfxVideoParam *out);
88
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_QueryIOSurf(mfxSession session, mfxVideoParam *par, mfxFrameAllocRequest request[2]);
89
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Init(mfxSession session, mfxVideoParam *par);
90
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Reset(mfxSession session, mfxVideoParam *par);
91
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_Close(mfxSession session);
92
 
93
-mfxStatus MFX_CDECL MFXVideoPAK_ProcessFrameAsync(mfxSession session, mfxPAKInput *in, mfxPAKOutput *out,  mfxSyncPoint *syncp);
94
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_ProcessFrameAsync(mfxSession session, mfxPAKInput *in, mfxPAKOutput *out,  mfxSyncPoint *syncp);
95
 
96
-mfxStatus MFX_CDECL MFXVideoPAK_GetVideoParam(mfxSession session, mfxVideoParam *par);
97
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoPAK_GetVideoParam(mfxSession session, mfxVideoParam *par);
98
 
99
 #ifdef __cplusplus
100
 } // extern "C"
101
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin++.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin++.h Changed
79
 
1
@@ -1,33 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2007-2016 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-
29
-File Name: mfxplugin++.h
30
-
31
-\* ****************************************************************************** */
32
+// Copyright (c) 2017-2020 Intel Corporation
33
+// 
34
+// Permission is hereby granted, free of charge, to any person obtaining a copy
35
+// of this software and associated documentation files (the "Software"), to deal
36
+// in the Software without restriction, including without limitation the rights
37
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38
+// copies of the Software, and to permit persons to whom the Software is
39
+// furnished to do so, subject to the following conditions:
40
+// 
41
+// The above copyright notice and this permission notice shall be included in all
42
+// copies or substantial portions of the Software.
43
+// 
44
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
50
+// SOFTWARE.
51
 
52
 #ifndef __MFXPLUGINPLUSPLUS_H
53
 #define __MFXPLUGINPLUSPLUS_H
54
@@ -41,7 +30,7 @@
55
     explicit MFXBaseUSER(mfxSession session = NULL)
56
         : m_session(session){}
57
 
58
-    virtual ~MFXBaseUSER() {};
59
+    virtual ~MFXBaseUSER() {}
60
 
61
     virtual mfxStatus Register(mfxU32 type, const mfxPlugin *par) = 0;
62
     virtual mfxStatus Unregister(mfxU32 type) = 0;
63
@@ -574,15 +563,11 @@
64
     private:
65
         void SetupCallbacks() {
66
             m_codecPlg.DecodeHeader = _DecodeHeader;
67
-//            m_codecPlg.GetPayload = _GetPayload;
68
             m_codecPlg.DecodeFrameSubmit = _DecodeFrameSubmit;
69
         }
70
         static mfxStatus _DecodeHeader(mfxHDL pthis, mfxBitstream *bs, mfxAudioParam *par) {
71
             return reinterpret_cast<MFXAudioDecoderPlugin*>(pthis)->DecodeHeader(bs, par);
72
         }
73
-//        static mfxStatus _GetPayload(mfxHDL pthis, mfxU64 *ts, mfxPayload *payload) {
74
-  //          return reinterpret_cast<MFXAudioDecoderPlugin*>(pthis)->GetPayload(ts, payload);
75
-    //    }
76
         static mfxStatus _DecodeFrameSubmit(mfxHDL pthis, mfxBitstream *in, mfxAudioFrame *out, mfxThreadTask *task) {
77
             return reinterpret_cast<MFXAudioDecoderPlugin*>(pthis)->DecodeFrameSubmit(in, out, task);
78
         }
79
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxplugin.h Changed
246
 
1
@@ -1,32 +1,22 @@
2
-/******************************************************************************* *\
3
-
4
-Copyright (C) 2007-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxplugin.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2018-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXPLUGIN_H__
51
 #define __MFXPLUGIN_H__
52
 #include "mfxvideo.h"
53
@@ -37,46 +27,62 @@
54
 {
55
 #endif /* __cplusplus */
56
 
57
+MFX_PACK_BEGIN_USUAL_STRUCT()
58
 typedef struct {
59
     mfxU8  Data[16];
60
 } mfxPluginUID;
61
-
62
-static const mfxPluginUID  MFX_PLUGINID_HEVCD_SW        = {{0x15, 0xdd, 0x93, 0x68, 0x25, 0xad, 0x47, 0x5e, 0xa3, 0x4e, 0x35, 0xf3, 0xf5, 0x42, 0x17, 0xa6}};
63
-static const mfxPluginUID  MFX_PLUGINID_HEVCD_HW        = {{0x33, 0xa6, 0x1c, 0x0b, 0x4c, 0x27, 0x45, 0x4c, 0xa8, 0xd8, 0x5d, 0xde, 0x75, 0x7c, 0x6f, 0x8e}};
64
-static const mfxPluginUID  MFX_PLUGINID_HEVCE_SW        = {{0x2f, 0xca, 0x99, 0x74, 0x9f, 0xdb, 0x49, 0xae, 0xb1, 0x21, 0xa5, 0xb6, 0x3e, 0xf5, 0x68, 0xf7}};
65
-static const mfxPluginUID  MFX_PLUGINID_HEVCE_GACC      = {{0xe5, 0x40, 0x0a, 0x06, 0xc7, 0x4d, 0x41, 0xf5, 0xb1, 0x2d, 0x43, 0x0b, 0xba, 0xa2, 0x3d, 0x0b}};
66
-static const mfxPluginUID  MFX_PLUGINID_HEVCE_DP_GACC   = {{0x2b, 0xad, 0x6f, 0x9d, 0x77, 0x54, 0x41, 0x2d, 0xbf, 0x63, 0x03, 0xed, 0x4b, 0xb5, 0x09, 0x68}};
67
-static const mfxPluginUID  MFX_PLUGINID_HEVCE_HW        = {{0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47}};
68
-static const mfxPluginUID  MFX_PLUGINID_VP8D_HW         = {{0xf6, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
69
-static const mfxPluginUID  MFX_PLUGINID_VP8E_HW         = {{0xbf, 0xfc, 0x51, 0x8c, 0xde, 0x13, 0x4d, 0xf9, 0x8a, 0x96, 0xf4, 0xcf, 0x81, 0x6c, 0x0f, 0xac}};
70
-static const mfxPluginUID  MFX_PLUGINID_VP9E_HW         = {{0xce, 0x44, 0xef, 0x6f, 0x1a, 0x6d, 0x22, 0x46, 0xb4, 0x12, 0xbb, 0x38, 0xd6, 0xe4, 0x51, 0x82}};
71
-static const mfxPluginUID  MFX_PLUGINID_VP9D_HW         = {{0xa9, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
72
-static const mfxPluginUID  MFX_PLUGINID_CAMERA_HW       = {{0x54, 0x54, 0x26, 0x16, 0x24, 0x33, 0x41, 0xe6, 0x93, 0xae, 0x89, 0x99, 0x42, 0xce, 0x73, 0x55}};
73
-static const mfxPluginUID  MFX_PLUGINID_CAPTURE_HW      = {{0x22, 0xd6, 0x2c, 0x07, 0xe6, 0x72, 0x40, 0x8f, 0xbb, 0x4c, 0xc2, 0x0e, 0xd7, 0xa0, 0x53, 0xe4}};
74
-static const mfxPluginUID  MFX_PLUGINID_ITELECINE_HW    = {{0xe7, 0x44, 0x75, 0x3a, 0xcd, 0x74, 0x40, 0x2e, 0x89, 0xa2, 0xee, 0x06, 0x35, 0x49, 0x61, 0x79}};
75
-static const mfxPluginUID  MFX_PLUGINID_H264LA_HW       = {{0x58, 0x8f, 0x11, 0x85, 0xd4, 0x7b, 0x42, 0x96, 0x8d, 0xea, 0x37, 0x7b, 0xb5, 0xd0, 0xdc, 0xb4}};
76
-static const mfxPluginUID  MFX_PLUGINID_AACD            = {{0xe9, 0x34, 0x67, 0x25, 0xac, 0x2f, 0x4c, 0x93, 0xaa, 0x58, 0x5c, 0x11, 0xc7, 0x08, 0x7c, 0xf4}};
77
-static const mfxPluginUID  MFX_PLUGINID_AACE            = {{0xb2, 0xa2, 0xa0, 0x5a, 0x4e, 0xac, 0x46, 0xbf, 0xa9, 0xde, 0x7e, 0x80, 0xc9, 0x8d, 0x2e, 0x18}};
78
-static const mfxPluginUID  MFX_PLUGINID_HEVCE_FEI_HW    = {{0x87, 0xe0, 0xe8, 0x02, 0x07, 0x37, 0x52, 0x40, 0x85, 0x25, 0x15, 0xcf, 0x4a, 0x5e, 0xdd, 0xe6}};
79
-static const mfxPluginUID  MFX_PLUGINID_HEVC_FEI_ENCODE = {{0x54, 0x18, 0xa7, 0x06, 0x66, 0xf9, 0x4d, 0x5c, 0xb4, 0xf7, 0xb1, 0xca, 0xee, 0x86, 0x33, 0x9b}};
80
+MFX_PACK_END()
81
+
82
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCD_SW        = {{0x15, 0xdd, 0x93, 0x68, 0x25, 0xad, 0x47, 0x5e, 0xa3, 0x4e, 0x35, 0xf3, 0xf5, 0x42, 0x17, 0xa6}};
83
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCD_HW        = {{0x33, 0xa6, 0x1c, 0x0b, 0x4c, 0x27, 0x45, 0x4c, 0xa8, 0xd8, 0x5d, 0xde, 0x75, 0x7c, 0x6f, 0x8e}};
84
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCE_SW        = {{0x2f, 0xca, 0x99, 0x74, 0x9f, 0xdb, 0x49, 0xae, 0xb1, 0x21, 0xa5, 0xb6, 0x3e, 0xf5, 0x68, 0xf7}};
85
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCE_GACC      = {{0xe5, 0x40, 0x0a, 0x06, 0xc7, 0x4d, 0x41, 0xf5, 0xb1, 0x2d, 0x43, 0x0b, 0xba, 0xa2, 0x3d, 0x0b}};
86
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCE_DP_GACC   = {{0x2b, 0xad, 0x6f, 0x9d, 0x77, 0x54, 0x41, 0x2d, 0xbf, 0x63, 0x03, 0xed, 0x4b, 0xb5, 0x09, 0x68}};
87
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCE_HW        = {{0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47}};
88
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_VP8D_HW         = {{0xf6, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
89
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_VP8E_HW         = {{0xbf, 0xfc, 0x51, 0x8c, 0xde, 0x13, 0x4d, 0xf9, 0x8a, 0x96, 0xf4, 0xcf, 0x81, 0x6c, 0x0f, 0xac}};
90
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_VP9E_HW         = {{0xce, 0x44, 0xef, 0x6f, 0x1a, 0x6d, 0x22, 0x46, 0xb4, 0x12, 0xbb, 0x38, 0xd6, 0xe4, 0x51, 0x82}};
91
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_VP9D_HW         = {{0xa9, 0x22, 0x39, 0x4d, 0x8d, 0x87, 0x45, 0x2f, 0x87, 0x8c, 0x51, 0xf2, 0xfc, 0x9b, 0x41, 0x31}};
92
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_CAMERA_HW       = {{0x54, 0x54, 0x26, 0x16, 0x24, 0x33, 0x41, 0xe6, 0x93, 0xae, 0x89, 0x99, 0x42, 0xce, 0x73, 0x55}};
93
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_CAPTURE_HW      = {{0x22, 0xd6, 0x2c, 0x07, 0xe6, 0x72, 0x40, 0x8f, 0xbb, 0x4c, 0xc2, 0x0e, 0xd7, 0xa0, 0x53, 0xe4}};
94
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_ITELECINE_HW    = {{0xe7, 0x44, 0x75, 0x3a, 0xcd, 0x74, 0x40, 0x2e, 0x89, 0xa2, 0xee, 0x06, 0x35, 0x49, 0x61, 0x79}};
95
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_H264LA_HW       = {{0x58, 0x8f, 0x11, 0x85, 0xd4, 0x7b, 0x42, 0x96, 0x8d, 0xea, 0x37, 0x7b, 0xb5, 0xd0, 0xdc, 0xb4}};
96
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_AACD            = {{0xe9, 0x34, 0x67, 0x25, 0xac, 0x2f, 0x4c, 0x93, 0xaa, 0x58, 0x5c, 0x11, 0xc7, 0x08, 0x7c, 0xf4}};
97
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_AACE            = {{0xb2, 0xa2, 0xa0, 0x5a, 0x4e, 0xac, 0x46, 0xbf, 0xa9, 0xde, 0x7e, 0x80, 0xc9, 0x8d, 0x2e, 0x18}};
98
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVCE_FEI_HW    = {{0x87, 0xe0, 0xe8, 0x02, 0x07, 0x37, 0x52, 0x40, 0x85, 0x25, 0x15, 0xcf, 0x4a, 0x5e, 0xdd, 0xe6}};
99
+#if (MFX_VERSION >= 1027)
100
+MFX_DEPRECATED static const mfxPluginUID  MFX_PLUGINID_HEVC_FEI_ENCODE = {{0x54, 0x18, 0xa7, 0x06, 0x66, 0xf9, 0x4d, 0x5c, 0xb4, 0xf7, 0xb1, 0xca, 0xee, 0x86, 0x33, 0x9b}};
101
+#endif
102
 
103
 
104
 typedef enum {
105
-    MFX_PLUGINTYPE_VIDEO_GENERAL   = 0,
106
-    MFX_PLUGINTYPE_VIDEO_DECODE    = 1,
107
-    MFX_PLUGINTYPE_VIDEO_ENCODE    = 2,
108
-    MFX_PLUGINTYPE_VIDEO_VPP       = 3,
109
-    MFX_PLUGINTYPE_VIDEO_ENC       = 4,
110
-    MFX_PLUGINTYPE_AUDIO_DECODE    = 5,
111
-    MFX_PLUGINTYPE_AUDIO_ENCODE    = 6
112
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_GENERAL)   = 0,
113
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_DECODE)    = 1,
114
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_ENCODE)    = 2,
115
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_VPP)       = 3,
116
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_VIDEO_ENC)       = 4,
117
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_AUDIO_DECODE)    = 5,
118
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_PLUGINTYPE_AUDIO_ENCODE)    = 6
119
 } mfxPluginType;
120
 
121
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_GENERAL);
122
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_DECODE);
123
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_ENCODE);
124
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_VPP);
125
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_VIDEO_ENC);
126
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_AUDIO_DECODE);
127
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_PLUGINTYPE_AUDIO_ENCODE);
128
+
129
 typedef enum {
130
-    MFX_THREADPOLICY_SERIAL    = 0,
131
-    MFX_THREADPOLICY_PARALLEL  = 1
132
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_THREADPOLICY_SERIAL)    = 0,
133
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_THREADPOLICY_PARALLEL)  = 1
134
 } mfxThreadPolicy;
135
 
136
-typedef struct mfxPluginParam {
137
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_THREADPOLICY_SERIAL);
138
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_THREADPOLICY_PARALLEL);
139
+
140
+MFX_PACK_BEGIN_USUAL_STRUCT()
141
+MFX_DEPRECATED typedef struct mfxPluginParam {
142
     mfxU32          reserved[6];
143
     mfxU16          reserved1;
144
     mfxU16          PluginVersion;
145
@@ -87,15 +93,19 @@
146
     mfxThreadPolicy ThreadPolicy;
147
     mfxU32          MaxThreadNum;
148
 } mfxPluginParam;
149
+MFX_PACK_END()
150
 
151
-typedef struct mfxCoreParam{
152
+MFX_PACK_BEGIN_USUAL_STRUCT()
153
+MFX_DEPRECATED typedef struct mfxCoreParam{
154
     mfxU32     reserved[13];
155
     mfxIMPL    Impl;
156
     mfxVersion Version;
157
     mfxU32     NumWorkingThread;
158
 } mfxCoreParam;
159
+MFX_PACK_END()
160
 
161
-typedef struct mfxCoreInterface {
162
+MFX_PACK_BEGIN_STRUCT_W_PTR()
163
+MFX_DEPRECATED typedef struct mfxCoreInterface {
164
     mfxHDL pthis;
165
 
166
     mfxHDL reserved1[2];
167
@@ -121,11 +131,13 @@
168
 
169
     mfxHDL reserved4[1];
170
 } mfxCoreInterface;
171
+MFX_PACK_END()
172
 
173
+MFX_PACK_BEGIN_STRUCT_W_PTR()
174
 /* video codec plugin extension */
175
-typedef struct _mfxENCInput mfxENCInput;
176
-typedef struct _mfxENCOutput mfxENCOutput;
177
-typedef struct mfxVideoCodecPlugin{
178
+MFX_DEPRECATED typedef struct _mfxENCInput mfxENCInput;
179
+MFX_DEPRECATED typedef struct _mfxENCOutput mfxENCOutput;
180
+MFX_DEPRECATED typedef struct mfxVideoCodecPlugin{
181
     mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxVideoParam *in, mfxVideoParam *out);
182
     mfxStatus (MFX_CDECL *QueryIOSurf)(mfxHDL pthis, mfxVideoParam *par, mfxFrameAllocRequest *in, mfxFrameAllocRequest *out);
183
     mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxVideoParam *par);
184
@@ -147,8 +159,10 @@
185
     mfxHDL reserved1[3];
186
     mfxU32 reserved2[8];
187
 } mfxVideoCodecPlugin;
188
+MFX_PACK_END()
189
 
190
-typedef struct mfxAudioCodecPlugin{
191
+MFX_PACK_BEGIN_STRUCT_W_PTR()
192
+MFX_DEPRECATED typedef struct mfxAudioCodecPlugin{
193
     mfxStatus (MFX_CDECL *Query)(mfxHDL pthis, mfxAudioParam *in, mfxAudioParam *out);
194
     mfxStatus (MFX_CDECL *QueryIOSize)(mfxHDL pthis, mfxAudioParam *par, mfxAudioAllocRequest *request);
195
     mfxStatus (MFX_CDECL *Init)(mfxHDL pthis, mfxAudioParam *par);
196
@@ -165,8 +179,10 @@
197
     mfxHDL reserved1[6];
198
     mfxU32 reserved2[8];
199
 } mfxAudioCodecPlugin;
200
+MFX_PACK_END()
201
 
202
-typedef struct mfxPlugin{
203
+MFX_PACK_BEGIN_STRUCT_W_PTR()
204
+MFX_DEPRECATED typedef struct mfxPlugin{
205
     mfxHDL pthis;
206
 
207
     mfxStatus (MFX_CDECL *PluginInit) (mfxHDL pthis, mfxCoreInterface *core);
208
@@ -185,24 +201,24 @@
209
 
210
     mfxHDL reserved[8];
211
 } mfxPlugin;
212
+MFX_PACK_END()
213
 
214
 
215
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par);
216
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_Unregister(mfxSession session, mfxU32 type);
217
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_GetPlugin(mfxSession session, mfxU32 type, mfxPlugin *par);
218
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp);
219
 
220
-mfxStatus MFX_CDECL MFXVideoUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par);
221
-mfxStatus MFX_CDECL MFXVideoUSER_Unregister(mfxSession session, mfxU32 type);
222
-mfxStatus MFX_CDECL MFXVideoUSER_GetPlugin(mfxSession session, mfxU32 type, mfxPlugin *par);
223
-mfxStatus MFX_CDECL MFXVideoUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp);
224
-
225
-mfxStatus MFX_CDECL MFXVideoUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version);
226
-mfxStatus MFX_CDECL MFXVideoUSER_LoadByPath(mfxSession session, const mfxPluginUID *uid, mfxU32 version, const mfxChar *path, mfxU32 len);
227
-mfxStatus MFX_CDECL MFXVideoUSER_UnLoad(mfxSession session, const mfxPluginUID *uid);
228
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version);
229
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_LoadByPath(mfxSession session, const mfxPluginUID *uid, mfxU32 version, const mfxChar *path, mfxU32 len);
230
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoUSER_UnLoad(mfxSession session, const mfxPluginUID *uid);
231
 
232
-mfxStatus MFX_CDECL MFXAudioUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par);
233
-mfxStatus MFX_CDECL MFXAudioUSER_Unregister(mfxSession session, mfxU32 type);
234
-mfxStatus MFX_CDECL MFXAudioUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp);
235
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_Register(mfxSession session, mfxU32 type, const mfxPlugin *par);
236
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_Unregister(mfxSession session, mfxU32 type);
237
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_ProcessFrameAsync(mfxSession session, const mfxHDL *in, mfxU32 in_num, const mfxHDL *out, mfxU32 out_num, mfxSyncPoint *syncp);
238
 
239
-mfxStatus MFX_CDECL MFXAudioUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version);
240
-mfxStatus MFX_CDECL MFXAudioUSER_UnLoad(mfxSession session, const mfxPluginUID *uid);
241
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version);
242
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXAudioUSER_UnLoad(mfxSession session, const mfxPluginUID *uid);
243
 
244
 #ifdef __cplusplus
245
 } // extern "C"
246
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxsession.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxsession.h Changed
62
 
1
@@ -1,32 +1,22 @@
2
-/*******************************************************************************
3
-
4
-Copyright (C) 2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxsession.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXSESSION_H__
51
 #define __MFXSESSION_H__
52
 #include "mfxcommon.h"
53
@@ -50,7 +40,7 @@
54
 mfxStatus MFX_CDECL MFXCloneSession(mfxSession session, mfxSession *clone);
55
 mfxStatus MFX_CDECL MFXSetPriority(mfxSession session, mfxPriority priority);
56
 mfxStatus MFX_CDECL MFXGetPriority(mfxSession session, mfxPriority *priority);
57
-mfxStatus MFX_CDECL MFXDoWork(mfxSession session);
58
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXDoWork(mfxSession session);
59
 
60
 #ifdef __cplusplus
61
 }
62
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxstructures.h Changed
1729
 
1
@@ -1,32 +1,22 @@
2
-/******************************************************************************* *\
3
-
4
-Copyright (C) 2007-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxstructures.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2018-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXSTRUCTURES_H__
51
 #define __MFXSTRUCTURES_H__
52
 #include "mfxcommon.h"
53
@@ -41,6 +31,7 @@
54
 
55
 
56
 /* Frame ID for SVC and MVC */
57
+MFX_PACK_BEGIN_USUAL_STRUCT()
58
 typedef struct {
59
     mfxU16      TemporalId;
60
     mfxU16      PriorityId;
61
@@ -54,8 +45,10 @@
62
         };
63
     };
64
 } mfxFrameId;
65
+MFX_PACK_END()
66
 
67
-#pragma pack(push, 4)
68
+/* This struct has 4-byte alignment for binary compatibility with previously released versions of API */
69
+MFX_PACK_BEGIN_USUAL_STRUCT()
70
 /* Frame Info */
71
 typedef struct {
72
     mfxU32  reserved[4];
73
@@ -94,7 +87,7 @@
74
     mfxU16  ChromaFormat;
75
     mfxU16  reserved2;
76
 } mfxFrameInfo;
77
-#pragma pack(pop)
78
+MFX_PACK_END()
79
 
80
 /* FourCC */
81
 enum {
82
@@ -102,11 +95,18 @@
83
     MFX_FOURCC_YV12         = MFX_MAKEFOURCC('Y','V','1','2'),
84
     MFX_FOURCC_NV16         = MFX_MAKEFOURCC('N','V','1','6'),
85
     MFX_FOURCC_YUY2         = MFX_MAKEFOURCC('Y','U','Y','2'),
86
+#if (MFX_VERSION >= 1028)
87
+    MFX_FOURCC_RGB565       = MFX_MAKEFOURCC('R','G','B','2'),   /* 2 bytes per pixel, uint16 in little-endian format, where 0-4 bits are blue, bits 5-10 are green and bits 11-15 are red */
88
+    MFX_FOURCC_RGBP         = MFX_MAKEFOURCC('R','G','B','P'),
89
+#endif
90
     MFX_FOURCC_RGB3         = MFX_MAKEFOURCC('R','G','B','3'),   /* deprecated */
91
     MFX_FOURCC_RGB4         = MFX_MAKEFOURCC('R','G','B','4'),   /* ARGB in that order, A channel is 8 MSBs */
92
     MFX_FOURCC_P8           = 41,                                /*  D3DFMT_P8   */
93
     MFX_FOURCC_P8_TEXTURE   = MFX_MAKEFOURCC('P','8','M','B'),
94
     MFX_FOURCC_P010         = MFX_MAKEFOURCC('P','0','1','0'),
95
+#if (MFX_VERSION >= 1031)
96
+    MFX_FOURCC_P016         = MFX_MAKEFOURCC('P','0','1','6'),
97
+#endif
98
     MFX_FOURCC_P210         = MFX_MAKEFOURCC('P','2','1','0'),
99
     MFX_FOURCC_BGR4         = MFX_MAKEFOURCC('B','G','R','4'),   /* ABGR in that order, A channel is 8 MSBs */
100
     MFX_FOURCC_A2RGB10      = MFX_MAKEFOURCC('R','G','1','0'),   /* ARGB in that order, A channel is two MSBs */
101
@@ -116,8 +116,17 @@
102
     MFX_FOURCC_AYUV         = MFX_MAKEFOURCC('A','Y','U','V'),   /* YUV 4:4:4, AYUV in that order, A channel is 8 MSBs */
103
     MFX_FOURCC_AYUV_RGB4    = MFX_MAKEFOURCC('A','V','U','Y'),   /* ARGB in that order, A channel is 8 MSBs stored in AYUV surface*/
104
     MFX_FOURCC_UYVY         = MFX_MAKEFOURCC('U','Y','V','Y'),
105
+#if (MFX_VERSION >= 1027)
106
     MFX_FOURCC_Y210         = MFX_MAKEFOURCC('Y','2','1','0'),
107
     MFX_FOURCC_Y410         = MFX_MAKEFOURCC('Y','4','1','0'),
108
+#endif
109
+#if (MFX_VERSION >= 1031)
110
+    MFX_FOURCC_Y216         = MFX_MAKEFOURCC('Y','2','1','6'),
111
+    MFX_FOURCC_Y416         = MFX_MAKEFOURCC('Y','4','1','6'),
112
+#endif
113
+    MFX_FOURCC_NV21         = MFX_MAKEFOURCC('N', 'V', '2', '1'), /* Same as NV12 but with weaved V and U values. */
114
+    MFX_FOURCC_IYUV         = MFX_MAKEFOURCC('I', 'Y', 'U', 'V'), /* Same as  YV12 except that the U and V plane order is reversed. */
115
+    MFX_FOURCC_I010         = MFX_MAKEFOURCC('I', '0', '1', '0'), /* 10-bit YUV 4:2:0, each component has its own plane. */
116
 };
117
 
118
 /* PicStruct */
119
@@ -174,7 +183,8 @@
120
     MFX_CORRUPTION_REFERENCE_LIST  = 0x0020
121
 };
122
 
123
-#pragma pack(push, 4)
124
+#if (MFX_VERSION >= 1027)
125
+MFX_PACK_BEGIN_USUAL_STRUCT()
126
 typedef struct
127
 {
128
     mfxU32 U : 10;
129
@@ -182,9 +192,11 @@
130
     mfxU32 V : 10;
131
     mfxU32 A :  2;
132
 } mfxY410;
133
-#pragma pack(pop)
134
+MFX_PACK_END()
135
+#endif
136
 
137
-#pragma pack(push, 4)
138
+#if (MFX_VERSION >= 1025)
139
+MFX_PACK_BEGIN_USUAL_STRUCT()
140
 typedef struct
141
 {
142
     mfxU32 B : 10;
143
@@ -192,10 +204,11 @@
144
     mfxU32 R : 10;
145
     mfxU32 A :  2;
146
 } mfxA2RGB10;
147
-#pragma pack(pop)
148
-
149
+MFX_PACK_END()
150
+#endif
151
 
152
 /* Frame Data Info */
153
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
154
 typedef struct {
155
     union {
156
         mfxExtBuffer **ExtParam;
157
@@ -230,14 +243,18 @@
158
         mfxU8   *U;
159
         mfxU16  *U16;
160
         mfxU8   *G;
161
+#if (MFX_VERSION >= 1027)
162
         mfxY410 *Y410;          /* for Y410 format (merged AVYU) */
163
+#endif
164
     };
165
     union {
166
         mfxU8   *Cr;
167
         mfxU8   *V;
168
         mfxU16  *V16;
169
         mfxU8   *B;
170
+#if (MFX_VERSION >= 1025)
171
         mfxA2RGB10 *A2RGB10;    /* for A2RGB10 format (merged ARGB) */
172
+#endif
173
     };
174
     mfxU8       *A;
175
     mfxMemId    MemId;
176
@@ -246,13 +263,16 @@
177
     mfxU16  Corrupted;
178
     mfxU16  DataFlag;
179
 } mfxFrameData;
180
+MFX_PACK_END()
181
 
182
 /* Frame Surface */
183
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
184
 typedef struct {
185
     mfxU32  reserved[4];
186
     mfxFrameInfo    Info;
187
     mfxFrameData    Data;
188
 } mfxFrameSurface1;
189
+MFX_PACK_END()
190
 
191
 enum {
192
     MFX_TIMESTAMPCALC_UNKNOWN = 0,
193
@@ -260,6 +280,7 @@
194
 };
195
 
196
 /* Transcoding Info */
197
+MFX_PACK_BEGIN_USUAL_STRUCT()
198
 typedef struct {
199
     mfxU32  reserved[7];
200
 
201
@@ -310,7 +331,13 @@
202
             mfxU16  SliceGroupsPresent;
203
             mfxU16  MaxDecFrameBuffering;
204
             mfxU16  EnableReallocRequest;
205
+#if (MFX_VERSION >= 1034)
206
+            mfxU16  FilmGrain;
207
+            mfxU16  IgnoreLevelConstrain;
208
+            mfxU16  reserved2[5];
209
+#else
210
             mfxU16  reserved2[7];
211
+#endif
212
         };
213
         struct {   /* JPEG Decoding Options */
214
             mfxU16  JPEGChromaFormat;
215
@@ -329,13 +356,17 @@
216
         };
217
     };
218
 } mfxInfoMFX;
219
+MFX_PACK_END()
220
 
221
+MFX_PACK_BEGIN_USUAL_STRUCT()
222
 typedef struct {
223
     mfxU32  reserved[8];
224
     mfxFrameInfo    In;
225
     mfxFrameInfo    Out;
226
 } mfxInfoVPP;
227
+MFX_PACK_END()
228
 
229
+MFX_PACK_BEGIN_STRUCT_W_PTR()
230
 typedef struct {
231
     mfxU32  AllocId;
232
     mfxU32  reserved[2];
233
@@ -352,17 +383,21 @@
234
     mfxU16  NumExtParam;
235
     mfxU16  reserved2;
236
 } mfxVideoParam;
237
+MFX_PACK_END()
238
 
239
 /* IOPattern */
240
 enum {
241
     MFX_IOPATTERN_IN_VIDEO_MEMORY   = 0x01,
242
     MFX_IOPATTERN_IN_SYSTEM_MEMORY  = 0x02,
243
-    MFX_IOPATTERN_IN_OPAQUE_MEMORY  = 0x04,
244
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_IOPATTERN_IN_OPAQUE_MEMORY)  = 0x04,
245
     MFX_IOPATTERN_OUT_VIDEO_MEMORY  = 0x10,
246
     MFX_IOPATTERN_OUT_SYSTEM_MEMORY = 0x20,
247
-    MFX_IOPATTERN_OUT_OPAQUE_MEMORY = 0x40
248
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_IOPATTERN_OUT_OPAQUE_MEMORY) = 0x40
249
 };
250
 
251
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_IOPATTERN_IN_OPAQUE_MEMORY);
252
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_IOPATTERN_OUT_OPAQUE_MEMORY);
253
+
254
 /* CodecId */
255
 enum {
256
     MFX_CODEC_AVC         =MFX_MAKEFOURCC('A','V','C',' '),
257
@@ -391,6 +426,7 @@
258
     MFX_PROFILE_AVC_MAIN                    =77,
259
     MFX_PROFILE_AVC_EXTENDED                =88,
260
     MFX_PROFILE_AVC_HIGH                    =100,
261
+    MFX_PROFILE_AVC_HIGH10                  =110,
262
     MFX_PROFILE_AVC_HIGH_422                =122,
263
     MFX_PROFILE_AVC_CONSTRAINED_BASELINE    =MFX_PROFILE_AVC_BASELINE + MFX_PROFILE_AVC_CONSTRAINT_SET1,
264
     MFX_PROFILE_AVC_CONSTRAINED_HIGH        =MFX_PROFILE_AVC_HIGH     + MFX_PROFILE_AVC_CONSTRAINT_SET4
265
@@ -414,6 +450,11 @@
266
     MFX_LEVEL_AVC_5                         =50,
267
     MFX_LEVEL_AVC_51                        =51,
268
     MFX_LEVEL_AVC_52                        =52,
269
+#if (MFX_VERSION >= 1035)
270
+    MFX_LEVEL_AVC_6                         =60,
271
+    MFX_LEVEL_AVC_61                        =61,
272
+    MFX_LEVEL_AVC_62                        =62,
273
+#endif
274
 
275
     /* MPEG-2 Profiles & Levels */
276
     MFX_PROFILE_MPEG2_SIMPLE                =0x50,
277
@@ -447,6 +488,9 @@
278
     MFX_PROFILE_HEVC_MAIN10           =2,
279
     MFX_PROFILE_HEVC_MAINSP           =3,
280
     MFX_PROFILE_HEVC_REXT             =4,
281
+#if (MFX_VERSION >= 1032)
282
+    MFX_PROFILE_HEVC_SCC              =9,
283
+#endif
284
 
285
     MFX_LEVEL_HEVC_1   = 10,
286
     MFX_LEVEL_HEVC_2   = 20,
287
@@ -471,6 +515,33 @@
288
     MFX_PROFILE_VP9_2                       = 3,
289
     MFX_PROFILE_VP9_3                       = 4,
290
 
291
+#if (MFX_VERSION >= 1034)
292
+    /* AV1 Profiles */
293
+    MFX_PROFILE_AV1_MAIN                    = 1,
294
+    MFX_PROFILE_AV1_HIGH                    = 2,
295
+    MFX_PROFILE_AV1_PRO                     = 3,
296
+
297
+    MFX_LEVEL_AV1_2                         = 20,
298
+    MFX_LEVEL_AV1_21                        = 21,
299
+    MFX_LEVEL_AV1_22                        = 22,
300
+    MFX_LEVEL_AV1_23                        = 23,
301
+    MFX_LEVEL_AV1_3                         = 30,
302
+    MFX_LEVEL_AV1_31                        = 31,
303
+    MFX_LEVEL_AV1_32                        = 32,
304
+    MFX_LEVEL_AV1_33                        = 33,
305
+    MFX_LEVEL_AV1_4                         = 40,
306
+    MFX_LEVEL_AV1_41                        = 41,
307
+    MFX_LEVEL_AV1_42                        = 42,
308
+    MFX_LEVEL_AV1_43                        = 43,
309
+    MFX_LEVEL_AV1_5                         = 50,
310
+    MFX_LEVEL_AV1_51                        = 51,
311
+    MFX_LEVEL_AV1_52                        = 52,
312
+    MFX_LEVEL_AV1_53                        = 53,
313
+    MFX_LEVEL_AV1_6                         = 60,
314
+    MFX_LEVEL_AV1_61                        = 61,
315
+    MFX_LEVEL_AV1_62                        = 62,
316
+    MFX_LEVEL_AV1_63                        = 63,
317
+#endif
318
 };
319
 
320
 /* GopOptFlag */
321
@@ -523,6 +594,7 @@
322
     MFX_TRELLIS_B       =0x08
323
 };
324
 
325
+MFX_PACK_BEGIN_USUAL_STRUCT()
326
 typedef struct {
327
     mfxExtBuffer Header;
328
 
329
@@ -557,6 +629,7 @@
330
     mfxU16      PicTimingSEI;           /* tri-state option */
331
     mfxU16      VuiNalHrdParameters;    /* tri-state option */
332
 } mfxExtCodingOption;
333
+MFX_PACK_END()
334
 
335
 enum {
336
     MFX_B_REF_UNKNOWN = 0,
337
@@ -565,12 +638,17 @@
338
 };
339
 
340
 enum {
341
-    MFX_LOOKAHEAD_DS_UNKNOWN = 0,
342
-    MFX_LOOKAHEAD_DS_OFF     = 1,
343
-    MFX_LOOKAHEAD_DS_2x      = 2,
344
-    MFX_LOOKAHEAD_DS_4x      = 3
345
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_UNKNOWN) = 0,
346
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_OFF)     = 1,
347
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_2x)      = 2,
348
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_LOOKAHEAD_DS_4x)      = 3
349
 };
350
 
351
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_UNKNOWN);
352
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_OFF);
353
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_2x);
354
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_LOOKAHEAD_DS_4x);
355
+
356
 enum {
357
     MFX_BPSEI_DEFAULT = 0x00,
358
     MFX_BPSEI_IFRAME  = 0x01
359
@@ -591,6 +669,7 @@
360
         MFX_REFRESH_SLICE          = 3
361
 };
362
 
363
+MFX_PACK_BEGIN_USUAL_STRUCT()
364
 typedef struct {
365
     mfxExtBuffer Header;
366
 
367
@@ -626,6 +705,7 @@
368
     mfxU16      EnableMAD;              /* tri-state option */
369
     mfxU16      UseRawRef;              /* tri-state option */
370
 } mfxExtCodingOption2;
371
+MFX_PACK_END()
372
 
373
 /* WeightedPred */
374
 enum {
375
@@ -662,7 +742,32 @@
376
     MFX_P_REF_PYRAMID = 2
377
 };
378
 
379
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
380
 
381
+/* QuantScaleType */
382
+enum {
383
+    MFX_MPEG2_QUANT_SCALE_TYPE_DEFAULT    = 0,
384
+    MFX_MPEG2_QUANT_SCALE_TYPE_LINEAR     = 1, /* q_scale_type = 0 */
385
+    MFX_MPEG2_QUANT_SCALE_TYPE_NONLINEAR  = 2  /* q_scale_type = 1 */
386
+};
387
+
388
+/* IntraVLCFormat */
389
+enum {
390
+    MFX_MPEG2_INTRA_VLC_FORMAT_DEFAULT    = 0,
391
+    MFX_MPEG2_INTRA_VLC_FORMAT_B14        = 1, /* use table B.14 */
392
+    MFX_MPEG2_INTRA_VLC_FORMAT_B15        = 2  /* use table B.15 */
393
+};
394
+
395
+/* ScanType */
396
+enum {
397
+    MFX_MPEG2_SCAN_TYPE_DEFAULT   = 0,
398
+    MFX_MPEG2_SCAN_TYPE_ZIGZAG    = 1, /* alternate_scan = 0 */
399
+    MFX_MPEG2_SCAN_TYPE_ALTERNATE = 2  /* alternate_scan = 1 */
400
+};
401
+
402
+#endif
403
+
404
+MFX_PACK_BEGIN_USUAL_STRUCT()
405
 typedef struct {
406
     mfxExtBuffer Header;
407
 
408
@@ -691,14 +796,24 @@
409
     mfxU16      BitstreamRestriction;           /* tri-state option */
410
     mfxU16      LowDelayHrd;                    /* tri-state option */
411
     mfxU16      MotionVectorsOverPicBoundaries; /* tri-state option */
412
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
413
+    mfxU16      Log2MaxMvLengthHorizontal;      /* 0..16 */
414
+    mfxU16      Log2MaxMvLengthVertical;        /* 0..16 */
415
+#else
416
     mfxU16      reserved1[2];
417
+#endif
418
 
419
     mfxU16      ScenarioInfo;
420
     mfxU16      ContentInfo;
421
 
422
     mfxU16      PRefType;
423
     mfxU16      FadeDetection;            /* tri-state option */
424
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
425
+    mfxI16      DeblockingAlphaTcOffset;  /* -12..12 (slice_alpha_c0_offset_div2 << 1) */
426
+    mfxI16      DeblockingBetaOffset;     /* -12..12 (slice_beta_offset_div2 << 1) */
427
+#else
428
     mfxU16      reserved2[2];
429
+#endif
430
     mfxU16      GPB;                      /* tri-state option */
431
 
432
     mfxU32      MaxFrameSizeI;
433
@@ -712,11 +827,23 @@
434
     mfxU16      NumRefActiveBL0[8];
435
     mfxU16      NumRefActiveBL1[8];
436
 
437
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
438
+    mfxU16      ConstrainedIntraPredFlag;  /* tri-state option */
439
+#else
440
     mfxU16      reserved6;
441
+#endif
442
+#if (MFX_VERSION >= 1026)
443
     mfxU16      TransformSkip;  /* tri-state option; HEVC transform_skip_enabled_flag */
444
+#else
445
+    mfxU16      reserved7;
446
+#endif
447
+#if (MFX_VERSION >= 1027)
448
     mfxU16      TargetChromaFormatPlus1;   /* Minus 1 specifies target encoding chroma format (see ColorFormat enum). May differ from input one. */
449
     mfxU16      TargetBitDepthLuma;        /* Target encoding bit depth for luma samples. May differ from input one. */
450
     mfxU16      TargetBitDepthChroma;      /* Target encoding bit depth for chroma samples. May differ from input one. */
451
+#else
452
+    mfxU16      reserved4[3];
453
+#endif
454
     mfxU16      BRCPanicMode;              /* tri-state option */
455
 
456
     mfxU16      LowDelayBRC;               /* tri-state option */
457
@@ -724,12 +851,27 @@
458
     mfxU16      AdaptiveMaxFrameSize;      /* tri-state option */
459
 
460
     mfxU16      RepartitionCheckEnable;    /* tri-state option */
461
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
462
+    mfxU16      QuantScaleType;            /* For MPEG2 specifies mapping between quantiser_scale_code and quantiser_scale (see QuantScaleType enum) */
463
+    mfxU16      IntraVLCFormat;            /* For MPEG2 specifies which table shall be used for coding of DCT coefficients of intra macroblocks (see IntraVLCFormat enum) */
464
+    mfxU16      ScanType;                  /* For MPEG2 specifies transform coefficients scan pattern (see ScanType enum) */
465
+#else
466
     mfxU16      reserved5[3];
467
+#endif
468
+#if (MFX_VERSION >= 1025)
469
     mfxU16      EncodedUnitsInfo;          /* tri-state option */
470
     mfxU16      EnableNalUnitType;         /* tri-state option */
471
+#else
472
+    mfxU16      reserved8[2];
473
+#endif
474
+#if (MFX_VERSION >= 1026)
475
     mfxU16      ExtBrcAdaptiveLTR;         /* tri-state option for ExtBRC */
476
+#else
477
+    mfxU16      reserved9;
478
+#endif
479
     mfxU16      reserved[163];
480
 } mfxExtCodingOption3;
481
+MFX_PACK_END()
482
 
483
 /* IntraPredBlockSize/InterPredBlockSize */
484
 enum {
485
@@ -772,7 +914,7 @@
486
     MFX_EXTBUFF_VPP_DETAIL                      = MFX_MAKEFOURCC('D','E','T',' '),
487
     MFX_EXTBUFF_VIDEO_SIGNAL_INFO               = MFX_MAKEFOURCC('V','S','I','N'),
488
     MFX_EXTBUFF_VPP_DOUSE                       = MFX_MAKEFOURCC('D','U','S','E'),
489
-    MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION       = MFX_MAKEFOURCC('O','P','Q','S'),
490
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION)       = MFX_MAKEFOURCC('O','P','Q','S'),
491
     MFX_EXTBUFF_AVC_REFLIST_CTRL                = MFX_MAKEFOURCC('R','L','S','T'),
492
     MFX_EXTBUFF_VPP_FRAME_RATE_CONVERSION       = MFX_MAKEFOURCC('F','R','C',' '),
493
     MFX_EXTBUFF_PICTURE_TIMING_SEI              = MFX_MAKEFOURCC('P','T','S','E'),
494
@@ -813,6 +955,7 @@
495
     MFX_EXTBUFF_VPP_MIRRORING                   = MFX_MAKEFOURCC('M','I','R','R'),
496
     MFX_EXTBUFF_MV_OVER_PIC_BOUNDARIES          = MFX_MAKEFOURCC('M','V','P','B'),
497
     MFX_EXTBUFF_VPP_COLORFILL                   = MFX_MAKEFOURCC('V','C','L','F'),
498
+#if (MFX_VERSION >= 1025)
499
     MFX_EXTBUFF_DECODE_ERROR_REPORT             = MFX_MAKEFOURCC('D', 'E', 'R', 'R'),
500
     MFX_EXTBUFF_VPP_COLOR_CONVERSION            = MFX_MAKEFOURCC('V', 'C', 'S', 'C'),
501
     MFX_EXTBUFF_CONTENT_LIGHT_LEVEL_INFO        = MFX_MAKEFOURCC('L', 'L', 'I', 'S'),
502
@@ -820,30 +963,64 @@
503
     MFX_EXTBUFF_MULTI_FRAME_PARAM               = MFX_MAKEFOURCC('M', 'F', 'R', 'P'),
504
     MFX_EXTBUFF_MULTI_FRAME_CONTROL             = MFX_MAKEFOURCC('M', 'F', 'R', 'C'),
505
     MFX_EXTBUFF_ENCODED_UNITS_INFO              = MFX_MAKEFOURCC('E', 'N', 'U', 'I'),
506
+#endif
507
+#if (MFX_VERSION >= 1026)
508
     MFX_EXTBUFF_VPP_MCTF                        = MFX_MAKEFOURCC('M', 'C', 'T', 'F'),
509
     MFX_EXTBUFF_VP9_SEGMENTATION                = MFX_MAKEFOURCC('9', 'S', 'E', 'G'),
510
     MFX_EXTBUFF_VP9_TEMPORAL_LAYERS             = MFX_MAKEFOURCC('9', 'T', 'M', 'L'),
511
     MFX_EXTBUFF_VP9_PARAM                       = MFX_MAKEFOURCC('9', 'P', 'A', 'R'),
512
+#endif
513
+#if (MFX_VERSION >= 1027)
514
     MFX_EXTBUFF_AVC_ROUNDING_OFFSET             = MFX_MAKEFOURCC('R','N','D','O'),
515
+#endif
516
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
517
+    MFX_EXTBUFF_DPB                             = MFX_MAKEFOURCC('E','D','P','B'),
518
+    MFX_EXTBUFF_TEMPORAL_LAYERS                 = MFX_MAKEFOURCC('T','M','P','L'),
519
+    MFX_EXTBUFF_AVC_SCALING_MATRIX              = MFX_MAKEFOURCC('A','V','S','M'),
520
+    MFX_EXTBUFF_MPEG2_QUANT_MATRIX              = MFX_MAKEFOURCC('M','2','Q','M'),
521
+    MFX_EXTBUFF_TASK_DEPENDENCY                 = MFX_MAKEFOURCC('S','Y','N','C'),
522
+#endif
523
+#if (MFX_VERSION >= 1031)
524
+    MFX_EXTBUFF_PARTIAL_BITSTREAM_PARAM         = MFX_MAKEFOURCC('P','B','O','P'),
525
+#endif
526
+    MFX_EXTBUFF_ENCODER_IPCM_AREA               = MFX_MAKEFOURCC('P', 'C', 'M', 'R'),
527
+    MFX_EXTBUFF_INSERT_HEADERS                  = MFX_MAKEFOURCC('S', 'P', 'R', 'E'),
528
+#if (MFX_VERSION >= 1034)
529
+    MFX_EXTBUFF_AV1_FILM_GRAIN_PARAM            = MFX_MAKEFOURCC('A','1','F','G'),
530
+    MFX_EXTBUFF_AV1_LST_PARAM                   = MFX_MAKEFOURCC('A', '1', 'L', 'S'),
531
+    MFX_EXTBUFF_AV1_SEGMENTATION                = MFX_MAKEFOURCC('1', 'S', 'E', 'G'),
532
+    MFX_EXTBUFF_AV1_PARAM                       = MFX_MAKEFOURCC('1', 'P', 'A', 'R'),
533
+    MFX_EXTBUFF_AV1_AUXDATA                     = MFX_MAKEFOURCC('1', 'A', 'U', 'X'),
534
+    MFX_EXTBUFF_AV1_TEMPORAL_LAYERS             = MFX_MAKEFOURCC('1', 'T', 'M', 'L')
535
+#endif
536
 };
537
 
538
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_EXTBUFF_OPAQUE_SURFACE_ALLOCATION);
539
+
540
 /* VPP Conf: Do not use certain algorithms  */
541
+MFX_PACK_BEGIN_STRUCT_W_PTR()
542
 typedef struct {
543
     mfxExtBuffer    Header;
544
     mfxU32          NumAlg;
545
     mfxU32*         AlgList;
546
 } mfxExtVPPDoNotUse;
547
+MFX_PACK_END()
548
 
549
+MFX_PACK_BEGIN_USUAL_STRUCT()
550
 typedef struct {
551
     mfxExtBuffer    Header;
552
     mfxU16  DenoiseFactor;
553
 } mfxExtVPPDenoise;
554
+MFX_PACK_END()
555
 
556
+MFX_PACK_BEGIN_USUAL_STRUCT()
557
 typedef struct {
558
     mfxExtBuffer    Header;
559
     mfxU16  DetailFactor;
560
 } mfxExtVPPDetail;
561
+MFX_PACK_END()
562
 
563
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
564
 typedef struct {
565
     mfxExtBuffer    Header;
566
     mfxF64   Brightness;
567
@@ -851,15 +1028,19 @@
568
     mfxF64   Hue;
569
     mfxF64   Saturation;
570
 } mfxExtVPPProcAmp;
571
+MFX_PACK_END()
572
 
573
 /* statistics collected for decode, encode and vpp */
574
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
575
 typedef struct {
576
     mfxU32  reserved[16];
577
     mfxU32  NumFrame;
578
     mfxU64  NumBit;
579
     mfxU32  NumCachedFrame;
580
 } mfxEncodeStat;
581
+MFX_PACK_END()
582
 
583
+MFX_PACK_BEGIN_USUAL_STRUCT()
584
 typedef struct {
585
     mfxU32  reserved[16];
586
     mfxU32  NumFrame;
587
@@ -867,13 +1048,17 @@
588
     mfxU32  NumError;
589
     mfxU32  NumCachedFrame;
590
 } mfxDecodeStat;
591
+MFX_PACK_END()
592
 
593
+MFX_PACK_BEGIN_USUAL_STRUCT()
594
 typedef struct {
595
     mfxU32  reserved[16];
596
     mfxU32  NumFrame;
597
     mfxU32  NumCachedFrame;
598
 } mfxVPPStat;
599
+MFX_PACK_END()
600
 
601
+MFX_PACK_BEGIN_USUAL_STRUCT()
602
 typedef struct {
603
     mfxExtBuffer    Header;
604
 
605
@@ -890,12 +1075,14 @@
606
     mfxU16          SceneChangeRate;
607
     mfxU16          RepeatedFrame;
608
 } mfxExtVppAuxData;
609
+MFX_PACK_END()
610
 
611
 /* CtrlFlags */
612
 enum {
613
     MFX_PAYLOAD_CTRL_SUFFIX = 0x00000001 /* HEVC suffix SEI */
614
 };
615
 
616
+MFX_PACK_BEGIN_STRUCT_W_PTR()
617
 typedef struct {
618
     mfxU32      CtrlFlags;
619
     mfxU32      reserved[3];
620
@@ -904,12 +1091,18 @@
621
     mfxU16      Type;       /* SEI message type in H.264 or user data start_code in MPEG-2 */
622
     mfxU16      BufSize;    /* payload buffer size in bytes */
623
 } mfxPayload;
624
+MFX_PACK_END()
625
 
626
+MFX_PACK_BEGIN_STRUCT_W_PTR()
627
 typedef struct {
628
     mfxExtBuffer    Header;
629
+#if (MFX_VERSION >= 1025)
630
     mfxU32  reserved[4];
631
     mfxU16  reserved1;
632
     mfxU16  MfxNalUnitType;
633
+#else
634
+    mfxU32  reserved[5];
635
+#endif
636
     mfxU16  SkipFrame;
637
 
638
     mfxU16  QP; /* per frame QP */
639
@@ -922,6 +1115,7 @@
640
     mfxExtBuffer    **ExtParam;
641
     mfxPayload      **Payload;      /* for field pair, first field uses even payloads and second field uses odd payloads */
642
 } mfxEncodeCtrl;
643
+MFX_PACK_END()
644
 
645
 /* Buffer Memory Types */
646
 enum {
647
@@ -949,12 +1143,19 @@
648
 
649
     MFX_MEMTYPE_INTERNAL_FRAME  = 0x0001,
650
     MFX_MEMTYPE_EXTERNAL_FRAME  = 0x0002,
651
-    MFX_MEMTYPE_OPAQUE_FRAME    = 0x0004,
652
+    MFX_DEPRECATED_ENUM_FIELD_INSIDE(MFX_MEMTYPE_OPAQUE_FRAME)    = 0x0004,
653
     MFX_MEMTYPE_EXPORT_FRAME    = 0x0008,
654
     MFX_MEMTYPE_SHARED_RESOURCE = MFX_MEMTYPE_EXPORT_FRAME,
655
+#if (MFX_VERSION >= 1025)
656
     MFX_MEMTYPE_VIDEO_MEMORY_ENCODER_TARGET = 0x1000
657
+#else
658
+    MFX_MEMTYPE_RESERVED2       = 0x1000
659
+#endif
660
 };
661
 
662
+MFX_DEPRECATED_ENUM_FIELD_OUTSIDE(MFX_MEMTYPE_OPAQUE_FRAME);
663
+
664
+MFX_PACK_BEGIN_USUAL_STRUCT()
665
 typedef struct {
666
     union {
667
         mfxU32  AllocId;
668
@@ -967,14 +1168,21 @@
669
     mfxU16  NumFrameSuggested;
670
     mfxU16  reserved2;
671
 } mfxFrameAllocRequest;
672
+MFX_PACK_END()
673
 
674
+MFX_PACK_BEGIN_STRUCT_W_PTR()
675
 typedef struct {
676
     mfxU32      AllocId;
677
     mfxU32      reserved[3];
678
     mfxMemId    *mids;      /* the array allocated by application */
679
     mfxU16      NumFrameActual;
680
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
681
+    mfxU16      MemType;
682
+#else
683
     mfxU16      reserved2;
684
+#endif
685
 } mfxFrameAllocResponse;
686
+MFX_PACK_END()
687
 
688
 /* FrameType */
689
 enum {
690
@@ -997,6 +1205,7 @@
691
     MFX_FRAMETYPE_xIDR          =0x8000
692
 };
693
 
694
+#if (MFX_VERSION >= 1025)
695
 enum {
696
     MFX_HEVC_NALU_TYPE_UNKNOWN    =      0,
697
     MFX_HEVC_NALU_TYPE_TRAIL_N    = ( 0+1),
698
@@ -1009,6 +1218,7 @@
699
     MFX_HEVC_NALU_TYPE_IDR_N_LP   = (20+1),
700
     MFX_HEVC_NALU_TYPE_CRA_NUT    = (21+1)
701
 };
702
+#endif
703
 
704
 typedef enum {
705
     MFX_HANDLE_DIRECT3D_DEVICE_MANAGER9         =1,      /* IDirect3DDeviceManager9      */
706
@@ -1017,6 +1227,13 @@
707
     MFX_HANDLE_D3D11_DEVICE                     = 3,
708
     MFX_HANDLE_VA_DISPLAY                       = 4,
709
     MFX_HANDLE_RESERVED3                        = 5,
710
+#if (MFX_VERSION >= 1030)
711
+    MFX_HANDLE_VA_CONFIG_ID                     = 6,
712
+    MFX_HANDLE_VA_CONTEXT_ID                    = 7,
713
+#endif
714
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
715
+    MFX_HANDLE_CM_DEVICE                        = 8
716
+#endif
717
 } mfxHandleType;
718
 
719
 typedef enum {
720
@@ -1025,6 +1242,7 @@
721
     MFX_SKIPMODE_LESS=2
722
 } mfxSkipMode;
723
 
724
+MFX_PACK_BEGIN_STRUCT_W_PTR()
725
 typedef struct {
726
     mfxExtBuffer    Header;
727
     mfxU8           *SPSBuffer;
728
@@ -1034,7 +1252,9 @@
729
     mfxU16          SPSId;
730
     mfxU16          PPSId;
731
 } mfxExtCodingOptionSPSPPS;
732
+MFX_PACK_END()
733
 
734
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
735
 typedef struct {
736
     mfxExtBuffer    Header;
737
 
738
@@ -1047,7 +1267,9 @@
739
 
740
     mfxU16          reserved[6];
741
 } mfxExtCodingOptionVPS;
742
+MFX_PACK_END()
743
 
744
+MFX_PACK_BEGIN_USUAL_STRUCT()
745
 typedef struct {
746
     mfxExtBuffer    Header;
747
     mfxU16          VideoFormat;
748
@@ -1057,14 +1279,18 @@
749
     mfxU16          TransferCharacteristics;
750
     mfxU16          MatrixCoefficients;
751
 } mfxExtVideoSignalInfo;
752
+MFX_PACK_END()
753
 
754
+MFX_PACK_BEGIN_STRUCT_W_PTR()
755
 typedef struct {
756
     mfxExtBuffer    Header;
757
     mfxU32          NumAlg;
758
     mfxU32          *AlgList;
759
 } mfxExtVPPDoUse;
760
+MFX_PACK_END()
761
 
762
-typedef struct {
763
+MFX_PACK_BEGIN_STRUCT_W_PTR()
764
+MFX_DEPRECATED typedef struct {
765
     mfxExtBuffer    Header;
766
     mfxU32      reserved1[2];
767
     struct {
768
@@ -1074,7 +1300,9 @@
769
         mfxU16  NumSurface;
770
     } In, Out;
771
 } mfxExtOpaqueSurfaceAlloc;
772
+MFX_PACK_END()
773
 
774
+MFX_PACK_BEGIN_USUAL_STRUCT()
775
 typedef struct {
776
     mfxExtBuffer    Header;
777
     mfxU16          NumRefIdxL0Active;
778
@@ -1091,6 +1319,7 @@
779
     mfxU16      ApplyLongTermIdx;
780
     mfxU16      reserved[15];
781
 } mfxExtAVCRefListCtrl;
782
+MFX_PACK_END()
783
 
784
 enum {
785
     MFX_FRCALGM_PRESERVE_TIMESTAMP    = 0x0001,
786
@@ -1098,30 +1327,36 @@
787
     MFX_FRCALGM_FRAME_INTERPOLATION   = 0x0004
788
 };
789
 
790
+MFX_PACK_BEGIN_USUAL_STRUCT()
791
 typedef struct {
792
     mfxExtBuffer    Header;
793
     mfxU16      Algorithm;
794
     mfxU16      reserved;
795
     mfxU32      reserved2[15];
796
 } mfxExtVPPFrameRateConversion;
797
+MFX_PACK_END()
798
 
799
 enum {
800
     MFX_IMAGESTAB_MODE_UPSCALE = 0x0001,
801
     MFX_IMAGESTAB_MODE_BOXING  = 0x0002
802
 };
803
 
804
+MFX_PACK_BEGIN_USUAL_STRUCT()
805
 typedef struct {
806
     mfxExtBuffer    Header;
807
     mfxU16  Mode;
808
     mfxU16  reserved[11];
809
 } mfxExtVPPImageStab;
810
+MFX_PACK_END()
811
 
812
+#if (MFX_VERSION >= 1025)
813
 
814
 enum {
815
     MFX_PAYLOAD_OFF = 0,
816
     MFX_PAYLOAD_IDR = 1
817
 };
818
 
819
+MFX_PACK_BEGIN_USUAL_STRUCT()
820
 typedef struct {
821
     mfxExtBuffer    Header;
822
     mfxU16      reserved[15];
823
@@ -1134,8 +1369,9 @@
824
     mfxU32 MaxDisplayMasteringLuminance;
825
     mfxU32 MinDisplayMasteringLuminance;
826
 } mfxExtMasteringDisplayColourVolume;
827
+MFX_PACK_END()
828
 
829
-
830
+MFX_PACK_BEGIN_USUAL_STRUCT()
831
 typedef struct {
832
     mfxExtBuffer    Header;
833
     mfxU16      reserved[9];
834
@@ -1144,8 +1380,10 @@
835
     mfxU16 MaxContentLightLevel;
836
     mfxU16 MaxPicAverageLightLevel;
837
 } mfxExtContentLightLevelInfo;
838
+MFX_PACK_END()
839
+#endif
840
 
841
-
842
+MFX_PACK_BEGIN_USUAL_STRUCT()
843
 typedef struct {
844
   mfxExtBuffer    Header;
845
   mfxU32      reserved[14];
846
@@ -1168,7 +1406,9 @@
847
       mfxU32    TimeOffset;
848
   } TimeStamp[3];
849
 } mfxExtPictureTimingSEI;
850
+MFX_PACK_END()
851
 
852
+MFX_PACK_BEGIN_USUAL_STRUCT()
853
 typedef struct {
854
     mfxExtBuffer    Header;
855
     mfxU32          reserved1[4];
856
@@ -1180,27 +1420,32 @@
857
         mfxU16 reserved[3];
858
     }Layer[8];
859
 } mfxExtAvcTemporalLayers;
860
+MFX_PACK_END()
861
 
862
-
863
+MFX_PACK_BEGIN_USUAL_STRUCT()
864
 typedef struct {
865
     mfxExtBuffer Header;
866
 
867
     mfxU32      MBPerSec;
868
     mfxU16      reserved[58];
869
 } mfxExtEncoderCapability;
870
+MFX_PACK_END()
871
 
872
+MFX_PACK_BEGIN_USUAL_STRUCT()
873
 typedef struct {
874
     mfxExtBuffer Header;
875
 
876
     mfxU16      StartNewSequence;
877
     mfxU16      reserved[11];
878
 } mfxExtEncoderResetOption;
879
+MFX_PACK_END()
880
 
881
 /*LongTermIdx*/
882
 enum {
883
     MFX_LONGTERM_IDX_NO_IDX = 0xFFFF
884
 };
885
 
886
+MFX_PACK_BEGIN_USUAL_STRUCT()
887
 typedef struct {
888
     mfxExtBuffer    Header;
889
 
890
@@ -1220,7 +1465,9 @@
891
         mfxU16      reserved[4];
892
     } UsedRefListL0[32], UsedRefListL1[32];
893
 } mfxExtAVCEncodedFrameInfo;
894
+MFX_PACK_END()
895
 
896
+MFX_PACK_BEGIN_USUAL_STRUCT()
897
 typedef struct mfxVPPCompInputStream {
898
     mfxU32  DstX;
899
     mfxU32  DstY;
900
@@ -1239,7 +1486,9 @@
901
 
902
     mfxU16  reserved2[17];
903
 } mfxVPPCompInputStream;
904
+MFX_PACK_END()
905
 
906
+MFX_PACK_BEGIN_STRUCT_W_PTR()
907
 typedef struct {
908
     mfxExtBuffer    Header;
909
 
910
@@ -1262,6 +1511,7 @@
911
     mfxU16       NumInputStream;
912
     mfxVPPCompInputStream *InputStream;
913
 } mfxExtVPPComposite;
914
+MFX_PACK_END()
915
 
916
 /* TransferMatrix */
917
 enum {
918
@@ -1277,6 +1527,7 @@
919
     MFX_NOMINALRANGE_16_235    = 2
920
 };
921
 
922
+MFX_PACK_BEGIN_USUAL_STRUCT()
923
 typedef struct {
924
     mfxExtBuffer    Header;
925
     mfxU16          reserved1[4];
926
@@ -1296,13 +1547,16 @@
927
         };
928
     };
929
 } mfxExtVPPVideoSignalInfo;
930
+MFX_PACK_END()
931
 
932
 /* ROI encoding mode */
933
 enum {
934
     MFX_ROI_MODE_PRIORITY =  0,
935
-    MFX_ROI_MODE_QP_DELTA =  1
936
+    MFX_ROI_MODE_QP_DELTA =  1,
937
+    MFX_ROI_MODE_QP_VALUE =  2 
938
 };
939
 
940
+MFX_PACK_BEGIN_USUAL_STRUCT()
941
 typedef struct {
942
     mfxExtBuffer    Header;
943
 
944
@@ -1322,6 +1576,7 @@
945
         mfxU16  reserved2[7];
946
     } ROI[256];
947
 } mfxExtEncoderROI;
948
+MFX_PACK_END()
949
 
950
 /*Deinterlacing Mode*/
951
 enum {
952
@@ -1349,6 +1604,7 @@
953
     MFX_TELECINE_POSITION_PROVIDED    = 4
954
 };
955
 
956
+MFX_PACK_BEGIN_USUAL_STRUCT()
957
 typedef struct {
958
     mfxExtBuffer    Header;
959
     mfxU16  Mode;
960
@@ -1356,7 +1612,9 @@
961
     mfxU16  TelecineLocation;
962
     mfxU16  reserved[9];
963
 } mfxExtVPPDeinterlacing;
964
+MFX_PACK_END()
965
 
966
+MFX_PACK_BEGIN_USUAL_STRUCT()
967
 typedef struct {
968
     mfxExtBuffer    Header;
969
     mfxU16          NumRefIdxL0Active;
970
@@ -1370,6 +1628,7 @@
971
     } RefPicList0[32], RefPicList1[32];
972
 
973
 }mfxExtAVCRefLists;
974
+MFX_PACK_END()
975
 
976
 enum {
977
     MFX_VPP_COPY_FRAME      =0x01,
978
@@ -1385,6 +1644,7 @@
979
     MFX_PICTYPE_BOTTOMFIELD =0x04
980
 };
981
 
982
+MFX_PACK_BEGIN_USUAL_STRUCT()
983
 typedef struct {
984
     mfxExtBuffer    Header;
985
 
986
@@ -1393,7 +1653,9 @@
987
     mfxU16          OutField;
988
     mfxU16          reserved[25];
989
 } mfxExtVPPFieldProcessing;
990
+MFX_PACK_END()
991
 
992
+MFX_PACK_BEGIN_USUAL_STRUCT()
993
 typedef struct {
994
     mfxExtBuffer    Header;
995
 
996
@@ -1422,7 +1684,9 @@
997
 
998
     mfxU16  reserved[13];
999
 } mfxExtDecVideoProcessing;
1000
+MFX_PACK_END()
1001
 
1002
+MFX_PACK_BEGIN_USUAL_STRUCT()
1003
 typedef struct {
1004
     mfxExtBuffer Header;
1005
 
1006
@@ -1431,13 +1695,26 @@
1007
     mfxU16       ChromaSampleLocTypeBottomField;
1008
     mfxU16       reserved[9];
1009
 } mfxExtChromaLocInfo;
1010
+MFX_PACK_END()
1011
 
1012
 /* MBQPMode */
1013
 enum {
1014
     MFX_MBQP_MODE_QP_VALUE = 0, // supported in CQP mode only
1015
-    MFX_MBQP_MODE_QP_DELTA = 1
1016
+    MFX_MBQP_MODE_QP_DELTA = 1,
1017
+    MFX_MBQP_MODE_QP_ADAPTIVE = 2
1018
 };
1019
 
1020
+MFX_PACK_BEGIN_USUAL_STRUCT()
1021
+typedef struct{
1022
+    union {
1023
+        mfxU8 QP;
1024
+        mfxI8 DeltaQP;
1025
+    };
1026
+    mfxU16 Mode;
1027
+} mfxQPandMode;
1028
+MFX_PACK_END()
1029
+
1030
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
1031
 typedef struct {
1032
     mfxExtBuffer    Header;
1033
 
1034
@@ -1448,10 +1725,41 @@
1035
     union {
1036
         mfxU8  *QP;         // Block QP value. Valid when Mode = MFX_MBQP_MODE_QP_VALUE
1037
         mfxI8  *DeltaQP;    // For block i: QP[i] = BrcQP[i] + DeltaQP[i]. Valid when Mode = MFX_MBQP_MODE_QP_DELTA
1038
+#if (MFX_VERSION >= 1034)
1039
+        mfxQPandMode *QPmode; // Block-granularity modes when MFX_MBQP_MODE_QP_ADAPTIVE is set
1040
+#endif
1041
         mfxU64 reserved2;
1042
     };
1043
 } mfxExtMBQP;
1044
+MFX_PACK_END()
1045
+
1046
+MFX_PACK_BEGIN_USUAL_STRUCT()
1047
+typedef struct {
1048
+    mfxExtBuffer    Header; /* Extension buffer header. Header.BufferId must be equal to MFX_EXTBUFF_INSERT_HEADERS. */
1049
+    mfxU16          SPS;      /* tri-state option to insert SPS */
1050
+    mfxU16          PPS;      /* tri-state option to insert PPS */
1051
+    mfxU16          reserved[8];
1052
+} mfxExtInsertHeaders;
1053
+MFX_PACK_END()
1054
 
1055
+MFX_PACK_BEGIN_STRUCT_W_PTR() 
1056
+typedef struct {
1057
+    mfxExtBuffer    Header; /* Extension buffer header. Header.BufferId must be equal to MFX_EXTBUFF_ENCODER_IPCM_AREA. */
1058
+    mfxU16          reserve1[10];
1059
+
1060
+    mfxU16          NumArea;  /* Number of Area's */
1061
+    struct area {
1062
+        mfxU32      Left; /* Left Area's coordinate. */
1063
+        mfxU32      Top;  /* Top  Area's coordinate. */
1064
+        mfxU32      Right; /* Right Area's coordinate. */
1065
+        mfxU32      Bottom; /* Bottom Area's coordinate. */
1066
+
1067
+        mfxU16      reserved2[8];
1068
+    } * Areas; /* Array of areas. */
1069
+} mfxExtEncoderIPCMArea;
1070
+MFX_PACK_END()
1071
+
1072
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
1073
 typedef struct {
1074
     mfxExtBuffer Header;
1075
 
1076
@@ -1462,7 +1770,9 @@
1077
         mfxU64  reserved2;
1078
     };
1079
 } mfxExtMBForceIntra;
1080
+MFX_PACK_END()
1081
 
1082
+MFX_PACK_BEGIN_USUAL_STRUCT()
1083
 typedef struct {
1084
     mfxExtBuffer Header;
1085
 
1086
@@ -1470,7 +1780,9 @@
1087
     mfxU16 NumTileColumns;
1088
     mfxU16 reserved[74];
1089
 }mfxExtHEVCTiles;
1090
+MFX_PACK_END()
1091
 
1092
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
1093
 typedef struct {
1094
     mfxExtBuffer Header;
1095
 
1096
@@ -1481,7 +1793,26 @@
1097
         mfxU64  reserved2;
1098
     };
1099
 } mfxExtMBDisableSkipMap;
1100
+MFX_PACK_END()
1101
 
1102
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1103
+MFX_PACK_BEGIN_USUAL_STRUCT()
1104
+typedef struct {
1105
+    mfxExtBuffer    Header;
1106
+
1107
+    mfxU16          DPBSize;
1108
+    mfxU16          reserved[11];
1109
+
1110
+    struct {
1111
+        mfxU32      FrameOrder;
1112
+        mfxU16      PicType;
1113
+        mfxU16      LongTermIdx;
1114
+        mfxU16      reserved[4];
1115
+    } DPB[32];
1116
+} mfxExtDPB;
1117
+MFX_PACK_END()
1118
+
1119
+#endif
1120
 
1121
 /*GeneralConstraintFlags*/
1122
 enum {
1123
@@ -1497,6 +1828,7 @@
1124
     MFX_HEVC_CONSTR_REXT_LOWER_BIT_RATE     = (1 << 8)
1125
 };
1126
 
1127
+#if (MFX_VERSION >= 1026)
1128
 
1129
 /* SampleAdaptiveOffset */
1130
 enum {
1131
@@ -1506,20 +1838,27 @@
1132
     MFX_SAO_ENABLE_CHROMA = 0x04
1133
 };
1134
 
1135
+#endif
1136
 
1137
-#pragma pack(push, 4)
1138
+/* This struct has 4-byte alignment for binary compatibility with previously released versions of API */
1139
+MFX_PACK_BEGIN_USUAL_STRUCT()
1140
 typedef struct {
1141
     mfxExtBuffer    Header;
1142
 
1143
     mfxU16          PicWidthInLumaSamples;
1144
     mfxU16          PicHeightInLumaSamples;
1145
     mfxU64          GeneralConstraintFlags;
1146
+#if (MFX_VERSION >= 1026)
1147
     mfxU16          SampleAdaptiveOffset;   /* see enum SampleAdaptiveOffset, valid during Init and Runtime */
1148
     mfxU16          LCUSize;
1149
     mfxU16          reserved[116];
1150
+#else
1151
+    mfxU16          reserved[118];
1152
+#endif
1153
 } mfxExtHEVCParam;
1154
-#pragma pack(pop)
1155
+MFX_PACK_END()
1156
 
1157
+#if (MFX_VERSION >= 1025)
1158
 /*ErrorTypes in mfxExtDecodeErrorReport*/
1159
 enum {
1160
     MFX_ERROR_PPS           = (1 << 0),
1161
@@ -1529,21 +1868,27 @@
1162
     MFX_ERROR_FRAME_GAP     = (1 << 4),
1163
 };
1164
 
1165
+MFX_PACK_BEGIN_USUAL_STRUCT()
1166
 typedef struct {
1167
     mfxExtBuffer    Header;
1168
 
1169
     mfxU32          ErrorTypes;
1170
     mfxU16          reserved[10];
1171
 } mfxExtDecodeErrorReport;
1172
+MFX_PACK_END()
1173
 
1174
+#endif
1175
 
1176
+MFX_PACK_BEGIN_USUAL_STRUCT()
1177
 typedef struct {
1178
     mfxExtBuffer Header;
1179
 
1180
     mfxU16       FrameType;
1181
     mfxU16       reserved[59];
1182
 } mfxExtDecodedFrameInfo;
1183
+MFX_PACK_END()
1184
 
1185
+MFX_PACK_BEGIN_USUAL_STRUCT()
1186
 typedef struct {
1187
     mfxExtBuffer Header;
1188
 
1189
@@ -1554,6 +1899,7 @@
1190
     mfxU16       TimeCodePictures;
1191
     mfxU16       reserved[7];
1192
 } mfxExtTimeCode;
1193
+MFX_PACK_END()
1194
 
1195
 /*RegionType*/
1196
 enum {
1197
@@ -1566,6 +1912,7 @@
1198
     MFX_HEVC_REGION_ENCODING_OFF = 1
1199
 };
1200
 
1201
+MFX_PACK_BEGIN_USUAL_STRUCT()
1202
 typedef struct {
1203
     mfxExtBuffer Header;
1204
 
1205
@@ -1574,7 +1921,9 @@
1206
     mfxU16       RegionEncoding;
1207
     mfxU16       reserved[24];
1208
 } mfxExtHEVCRegion;
1209
+MFX_PACK_END()
1210
 
1211
+MFX_PACK_BEGIN_USUAL_STRUCT()
1212
 typedef struct {
1213
     mfxExtBuffer Header;
1214
 
1215
@@ -1585,7 +1934,10 @@
1216
     mfxI16       Weights[2][32][3][2];      // [list][list entry][Y, Cb, Cr][weight, offset]
1217
     mfxU16       reserved[58];
1218
 } mfxExtPredWeightTable;
1219
+MFX_PACK_END()
1220
 
1221
+#if (MFX_VERSION >= 1027)
1222
+MFX_PACK_BEGIN_USUAL_STRUCT()
1223
 typedef struct {
1224
     mfxExtBuffer Header;
1225
 
1226
@@ -1596,8 +1948,33 @@
1227
 
1228
     mfxU16       reserved[24];
1229
 } mfxExtAVCRoundingOffset;
1230
+MFX_PACK_END()
1231
+#endif
1232
+
1233
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1234
+MFX_PACK_BEGIN_USUAL_STRUCT()
1235
+typedef struct {
1236
+    mfxExtBuffer Header;
1237
 
1238
+    mfxU16       reserved[12];
1239
 
1240
+    struct {
1241
+        mfxU16   Scale;
1242
+        mfxU16   QPI;
1243
+        mfxU16   QPP;
1244
+        mfxU16   QPB;
1245
+        mfxU32   TargetKbps;
1246
+        mfxU32   MaxKbps;
1247
+        mfxU32   BufferSizeInKB;
1248
+        mfxU32   InitialDelayInKB;
1249
+        mfxU16   reserved1[20];
1250
+    } Layer[8];
1251
+} mfxExtTemporalLayers;
1252
+MFX_PACK_END()
1253
+
1254
+#endif
1255
+
1256
+MFX_PACK_BEGIN_USUAL_STRUCT()
1257
 typedef struct {
1258
     mfxExtBuffer Header;
1259
 
1260
@@ -1613,7 +1990,9 @@
1261
         mfxU16  reserved2[8];
1262
     } Rect[256];
1263
 } mfxExtDirtyRect;
1264
+MFX_PACK_END()
1265
 
1266
+MFX_PACK_BEGIN_USUAL_STRUCT()
1267
 typedef struct {
1268
     mfxExtBuffer Header;
1269
 
1270
@@ -1631,7 +2010,51 @@
1271
         mfxU16  reserved2[4];
1272
     } Rect[256];
1273
 } mfxExtMoveRect;
1274
+MFX_PACK_END()
1275
+
1276
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1277
 
1278
+/* ScalingMatrixType */
1279
+enum {
1280
+    MFX_SCALING_MATRIX_SPS = 1,
1281
+    MFX_SCALING_MATRIX_PPS = 2
1282
+};
1283
+
1284
+MFX_PACK_BEGIN_USUAL_STRUCT()
1285
+typedef struct {
1286
+    mfxExtBuffer Header;
1287
+
1288
+    mfxU16 Type;
1289
+    mfxU16 reserved[5];
1290
+
1291
+    /* [4x4_Intra_Y,  4x4_Intra_Cb, 4x4_Intra_Cr,
1292
+        4x4_Inter_Y,  4x4_Inter_Cb, 4x4_Inter_Cr,
1293
+        8x8_Intra_Y,  8x8_Inter_Y,  8x8_Intra_Cb,
1294
+        8x8_Inter_Cb, 8x8_Intra_Cr, 8x8_Inter_Cr] */
1295
+    mfxU8  ScalingListPresent[12];
1296
+
1297
+    /* [Intra_Y,  Intra_Cb, Intra_Cr,
1298
+        Inter_Y,  Inter_Cb, Inter_Cr] */
1299
+    mfxU8  ScalingList4x4[6][16];
1300
+
1301
+    /* [Intra_Y,  Inter_Y,  Intra_Cb,
1302
+        Inter_Cb, Intra_Cr, Inter_Cr] */
1303
+    mfxU8  ScalingList8x8[6][64];
1304
+} mfxExtAVCScalingMatrix;
1305
+MFX_PACK_END()
1306
+
1307
+MFX_PACK_BEGIN_USUAL_STRUCT()
1308
+typedef struct {
1309
+    mfxExtBuffer Header;
1310
+
1311
+    mfxU16 reserved[28];
1312
+
1313
+    mfxU8  LoadMatrix[4]; // [LumaIntra, LumaInter, ChromaIntra, ChromaInter]
1314
+    mfxU8  Matrix[4][64]; // [LumaIntra, LumaInter, ChromaIntra, ChromaInter]
1315
+} mfxExtMPEG2QuantMatrix;
1316
+MFX_PACK_END()
1317
+
1318
+#endif
1319
 
1320
 /* Angle */
1321
 enum {
1322
@@ -1641,13 +2064,16 @@
1323
     MFX_ANGLE_270   = 270
1324
 };
1325
 
1326
+MFX_PACK_BEGIN_USUAL_STRUCT()
1327
 typedef struct {
1328
     mfxExtBuffer Header;
1329
 
1330
     mfxU16 Angle;
1331
     mfxU16 reserved[11];
1332
 } mfxExtVPPRotation;
1333
+MFX_PACK_END()
1334
 
1335
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
1336
 typedef struct {
1337
     mfxExtBuffer Header;
1338
 
1339
@@ -1662,6 +2088,7 @@
1340
 
1341
     mfxU16 reserved[20];
1342
 } mfxExtEncodedSlicesInfo;
1343
+MFX_PACK_END()
1344
 
1345
 /* ScalingMode */
1346
 enum {
1347
@@ -1670,13 +2097,49 @@
1348
     MFX_SCALING_MODE_QUALITY    = 2
1349
 };
1350
 
1351
+#if (MFX_VERSION >= 1033)
1352
+/* Interpolation Method */
1353
+enum {
1354
+    MFX_INTERPOLATION_DEFAULT                = 0,
1355
+    MFX_INTERPOLATION_NEAREST_NEIGHBOR       = 1,
1356
+    MFX_INTERPOLATION_BILINEAR               = 2,
1357
+    MFX_INTERPOLATION_ADVANCED               = 3
1358
+};
1359
+#endif
1360
+
1361
+MFX_PACK_BEGIN_USUAL_STRUCT()
1362
 typedef struct {
1363
     mfxExtBuffer Header;
1364
 
1365
     mfxU16 ScalingMode;
1366
+#if (MFX_VERSION >= 1033)
1367
+    mfxU16 InterpolationMethod;
1368
+    mfxU16 reserved[10];
1369
+#else
1370
     mfxU16 reserved[11];
1371
+#endif
1372
 } mfxExtVPPScaling;
1373
+MFX_PACK_END()
1374
 
1375
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1376
+
1377
+/* SceneChangeType */
1378
+enum {
1379
+    MFX_SCENE_NO_CHANGE = 0,
1380
+    MFX_SCENE_START     = 1,
1381
+    MFX_SCENE_END       = 2
1382
+};
1383
+
1384
+MFX_PACK_BEGIN_USUAL_STRUCT()
1385
+typedef struct {
1386
+    mfxExtBuffer Header;
1387
+
1388
+    mfxU16 Type;
1389
+    mfxU16 reserved[11];
1390
+} mfxExtSceneChange;
1391
+MFX_PACK_END()
1392
+
1393
+#endif
1394
 
1395
 typedef mfxExtAVCRefListCtrl mfxExtHEVCRefListCtrl;
1396
 typedef mfxExtAVCRefLists mfxExtHEVCRefLists;
1397
@@ -1690,13 +2153,16 @@
1398
     MFX_MIRRORING_VERTICAL   = 2
1399
 };
1400
 
1401
+MFX_PACK_BEGIN_USUAL_STRUCT()
1402
 typedef struct {
1403
     mfxExtBuffer Header;
1404
 
1405
     mfxU16 Type;
1406
     mfxU16 reserved[11];
1407
 } mfxExtVPPMirroring;
1408
+MFX_PACK_END()
1409
 
1410
+MFX_PACK_BEGIN_USUAL_STRUCT()
1411
 typedef struct {
1412
     mfxExtBuffer Header;
1413
 
1414
@@ -1706,14 +2172,18 @@
1415
     mfxU16 StickRight;   /* tri-state option */
1416
     mfxU16 reserved[8];
1417
 } mfxExtMVOverPicBoundaries;
1418
+MFX_PACK_END()
1419
 
1420
+MFX_PACK_BEGIN_USUAL_STRUCT()
1421
 typedef struct {
1422
     mfxExtBuffer Header;
1423
 
1424
     mfxU16 Enable;        /* tri-state option */
1425
     mfxU16 reserved[11];
1426
 } mfxExtVPPColorFill;
1427
+MFX_PACK_END()
1428
 
1429
+#if (MFX_VERSION >= 1025)
1430
 
1431
 /* ChromaSiting */
1432
 enum {
1433
@@ -1725,14 +2195,18 @@
1434
     MFX_CHROMA_SITING_HORIZONTAL_CENTER   = 0x0020  /* Chroma samples are not co-sited horizontally with the luma samples. */
1435
 };
1436
 
1437
+MFX_PACK_BEGIN_USUAL_STRUCT()
1438
 typedef struct {
1439
     mfxExtBuffer Header;
1440
 
1441
     mfxU16 ChromaSiting;
1442
     mfxU16 reserved[27];
1443
 } mfxExtColorConversion;
1444
+MFX_PACK_END()
1445
 
1446
+#endif
1447
 
1448
+#if (MFX_VERSION >= 1026)
1449
 /* VP9ReferenceFrame */
1450
 enum {
1451
     MFX_VP9_REF_INTRA   = 0,
1452
@@ -1758,6 +2232,7 @@
1453
     MFX_VP9_SEGMENT_FEATURE_SKIP        = 0x0008 /* (0,0) MV, no residual */
1454
 };
1455
 
1456
+MFX_PACK_BEGIN_USUAL_STRUCT()
1457
 typedef struct {
1458
     mfxU16  FeatureEnabled;         /* see enum SegmentFeature */
1459
     mfxI16  QIndexDelta;
1460
@@ -1765,7 +2240,9 @@
1461
     mfxU16  ReferenceFrame;        /* see enum VP9ReferenceFrame */
1462
     mfxU16  reserved[12];
1463
 } mfxVP9SegmentParam;
1464
+MFX_PACK_END()
1465
 
1466
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
1467
 typedef struct {
1468
     mfxExtBuffer        Header;
1469
     mfxU16              NumSegments;            /* 0..8 */
1470
@@ -1778,19 +2255,25 @@
1471
     };
1472
     mfxU16  reserved[52];
1473
 } mfxExtVP9Segmentation;
1474
+MFX_PACK_END()
1475
 
1476
+MFX_PACK_BEGIN_USUAL_STRUCT()
1477
 typedef struct {
1478
     mfxU16 FrameRateScale;  /* Layer[n].FrameRateScale = Layer[n - 1].FrameRateScale * (uint)m */
1479
     mfxU16 TargetKbps;      /* affected by BRCParamMultiplier, Layer[n].TargetKbps > Layer[n - 1].TargetKbps */
1480
     mfxU16 reserved[14];
1481
 } mfxVP9TemporalLayer;
1482
+MFX_PACK_END()
1483
 
1484
+MFX_PACK_BEGIN_USUAL_STRUCT()
1485
 typedef struct {
1486
     mfxExtBuffer        Header;
1487
     mfxVP9TemporalLayer Layer[8];
1488
     mfxU16              reserved[60];
1489
 } mfxExtVP9TemporalLayers;
1490
+MFX_PACK_END()
1491
 
1492
+MFX_PACK_BEGIN_USUAL_STRUCT()
1493
 typedef struct {
1494
     mfxExtBuffer Header;
1495
 
1496
@@ -1799,14 +2282,28 @@
1497
 
1498
     mfxU16  WriteIVFHeaders;        /* tri-state option */
1499
 
1500
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1501
+    mfxI16  LoopFilterRefDelta[4];
1502
+    mfxI16  LoopFilterModeDelta[2];
1503
+#else // API 1.26
1504
     mfxI16  reserved1[6];
1505
+#endif
1506
     mfxI16  QIndexDeltaLumaDC;
1507
     mfxI16  QIndexDeltaChromaAC;
1508
     mfxI16  QIndexDeltaChromaDC;
1509
+#if (MFX_VERSION >= 1029)
1510
+    mfxU16  NumTileRows;
1511
+    mfxU16  NumTileColumns;
1512
+    mfxU16  reserved[110];
1513
+#else
1514
     mfxU16  reserved[112];
1515
+#endif
1516
 } mfxExtVP9Param;
1517
+MFX_PACK_END()
1518
 
1519
+#endif // #if (MFX_VERSION >= 1026)
1520
 
1521
+#if (MFX_VERSION >= 1025)
1522
 /* Multi-Frame Mode */
1523
 enum {
1524
     MFX_MF_DEFAULT = 0,
1525
@@ -1816,7 +2313,8 @@
1526
 };
1527
 
1528
 /* Multi-Frame Initialization parameters */
1529
-typedef struct {
1530
+MFX_PACK_BEGIN_USUAL_STRUCT()
1531
+MFX_DEPRECATED typedef struct {
1532
     mfxExtBuffer Header;
1533
 
1534
     mfxU16      MFMode;
1535
@@ -1824,9 +2322,11 @@
1536
 
1537
     mfxU16      reserved[58];
1538
 } mfxExtMultiFrameParam;
1539
+MFX_PACK_END()
1540
 
1541
 /* Multi-Frame Run-time controls */
1542
-typedef struct {
1543
+MFX_PACK_BEGIN_USUAL_STRUCT()
1544
+MFX_DEPRECATED typedef struct {
1545
     mfxExtBuffer Header;
1546
 
1547
     mfxU32      Timeout;      /* timeout in millisecond */
1548
@@ -1834,7 +2334,9 @@
1549
 
1550
     mfxU16      reserved[57];
1551
 } mfxExtMultiFrameControl;
1552
+MFX_PACK_END()
1553
 
1554
+MFX_PACK_BEGIN_USUAL_STRUCT()
1555
 typedef struct {
1556
     mfxU16 Type;
1557
     mfxU16 reserved1;
1558
@@ -1842,7 +2344,9 @@
1559
     mfxU32 Size;
1560
     mfxU32 reserved[5];
1561
 } mfxEncodedUnitInfo;
1562
+MFX_PACK_END()
1563
 
1564
+MFX_PACK_BEGIN_STRUCT_W_L_TYPE()
1565
 typedef struct {
1566
     mfxExtBuffer Header;
1567
 
1568
@@ -1855,16 +2359,160 @@
1569
 
1570
     mfxU16 reserved[22];
1571
 } mfxExtEncodedUnitsInfo;
1572
+MFX_PACK_END()
1573
 
1574
+#endif
1575
 
1576
+#if (MFX_VERSION >= 1026)
1577
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1578
+/* MCTFTemporalMode */
1579
+enum {
1580
+    MFX_MCTF_TEMPORAL_MODE_UNKNOWN  = 0,
1581
+    MFX_MCTF_TEMPORAL_MODE_SPATIAL  = 1,
1582
+    MFX_MCTF_TEMPORAL_MODE_1REF     = 2,
1583
+    MFX_MCTF_TEMPORAL_MODE_2REF     = 3,
1584
+    MFX_MCTF_TEMPORAL_MODE_4REF     = 4
1585
+};
1586
+#endif
1587
 
1588
 /* MCTF initialization & runtime */
1589
+MFX_PACK_BEGIN_USUAL_STRUCT()
1590
 typedef struct {
1591
     mfxExtBuffer Header;
1592
     mfxU16       FilterStrength;
1593
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
1594
+    mfxU16       Overlap;               /* tri-state option */
1595
+    mfxU32       BitsPerPixelx100k;
1596
+    mfxU16       Deblocking;            /* tri-state option */
1597
+    mfxU16       TemporalMode;
1598
+    mfxU16       MVPrecision;
1599
+    mfxU16       reserved[21];
1600
+#else
1601
     mfxU16       reserved[27];
1602
+#endif
1603
 } mfxExtVppMctf;
1604
+MFX_PACK_END()
1605
 
1606
+#endif
1607
+
1608
+#if (MFX_VERSION >= 1031)
1609
+/* Multi-adapters Querying structs */
1610
+typedef enum
1611
+{
1612
+    MFX_COMPONENT_ENCODE = 1,
1613
+    MFX_COMPONENT_DECODE = 2,
1614
+    MFX_COMPONENT_VPP    = 3
1615
+} mfxComponentType;
1616
+
1617
+MFX_PACK_BEGIN_STRUCT_W_PTR()
1618
+typedef struct
1619
+{
1620
+    mfxComponentType Type;
1621
+    mfxVideoParam    Requirements;
1622
+
1623
+    mfxU16           reserved[4];
1624
+} mfxComponentInfo;
1625
+MFX_PACK_END()
1626
+
1627
+/* Adapter description */
1628
+MFX_PACK_BEGIN_USUAL_STRUCT()
1629
+typedef struct
1630
+{
1631
+    mfxPlatform Platform;
1632
+    mfxU32      Number;
1633
+
1634
+    mfxU16      reserved[14];
1635
+} mfxAdapterInfo;
1636
+MFX_PACK_END()
1637
+
1638
+MFX_PACK_BEGIN_STRUCT_W_PTR()
1639
+typedef struct
1640
+{
1641
+    mfxAdapterInfo * Adapters;
1642
+    mfxU32           NumAlloc;
1643
+    mfxU32           NumActual;
1644
+
1645
+    mfxU16           reserved[4];
1646
+} mfxAdaptersInfo;
1647
+MFX_PACK_END()
1648
+
1649
+#endif
1650
+
1651
+#if (MFX_VERSION >= 1034)
1652
+/* FilmGrainFlags */
1653
+enum {
1654
+    MFX_FILM_GRAIN_APPLY                    = (1 << 0),
1655
+    MFX_FILM_GRAIN_UPDATE                   = (1 << 1),
1656
+    MFX_FILM_GRAIN_CHROMA_SCALING_FROM_LUMA = (1 << 2),
1657
+    MFX_FILM_GRAIN_OVERLAP                  = (1 << 3),
1658
+    MFX_FILM_GRAIN_CLIP_TO_RESTRICTED_RANGE = (1 << 4)
1659
+};
1660
+
1661
+MFX_PACK_BEGIN_USUAL_STRUCT()
1662
+typedef struct {
1663
+    mfxU8 Value;
1664
+    mfxU8 Scaling;
1665
+} mfxAV1FilmGrainPoint;
1666
+MFX_PACK_END()
1667
+
1668
+MFX_PACK_BEGIN_USUAL_STRUCT()
1669
+typedef struct {
1670
+    mfxExtBuffer Header;
1671
+
1672
+    mfxU16 FilmGrainFlags;  /* FilmGrainFlags */
1673
+    mfxU16 GrainSeed;       /* 0..65535 */
1674
+
1675
+    mfxU8  RefIdx;          /* 0..6  */
1676
+    mfxU8  NumYPoints;      /* 0..14 */
1677
+    mfxU8  NumCbPoints;     /* 0..10 */
1678
+    mfxU8  NumCrPoints;     /* 0..10 */
1679
+
1680
+    mfxAV1FilmGrainPoint PointY[14];
1681
+    mfxAV1FilmGrainPoint PointCb[10];
1682
+    mfxAV1FilmGrainPoint PointCr[10];
1683
+
1684
+    mfxU8 GrainScalingMinus8; /* 0..3 */
1685
+    mfxU8 ArCoeffLag;         /* 0..3 */
1686
+
1687
+    mfxU8 ArCoeffsYPlus128[24];  /* 0..255 */
1688
+    mfxU8 ArCoeffsCbPlus128[25]; /* 0..255 */
1689
+    mfxU8 ArCoeffsCrPlus128[25]; /* 0..255 */
1690
+
1691
+    mfxU8 ArCoeffShiftMinus6;  /* 0..3 */
1692
+    mfxU8 GrainScaleShift;     /* 0..3 */
1693
+
1694
+    mfxU8  CbMult;     /* 0..255 */
1695
+    mfxU8  CbLumaMult; /* 0..255 */
1696
+    mfxU16 CbOffset;   /* 0..511 */
1697
+
1698
+    mfxU8  CrMult;     /* 0..255 */
1699
+    mfxU8  CrLumaMult; /* 0..255 */
1700
+    mfxU16 CrOffset;   /* 0..511 */
1701
+
1702
+    mfxU16 reserved[43];
1703
+} mfxExtAV1FilmGrainParam;
1704
+MFX_PACK_END()
1705
+
1706
+#endif
1707
+
1708
+#if (MFX_VERSION >= 1031)
1709
+/* PartialBitstreamOutput */
1710
+enum {
1711
+    MFX_PARTIAL_BITSTREAM_NONE    = 0,     /* Don't use partial output */
1712
+    MFX_PARTIAL_BITSTREAM_SLICE   = 1,     /* Partial bitstream output will be aligned to slice granularity */
1713
+    MFX_PARTIAL_BITSTREAM_BLOCK   = 2,     /* Partial bitstream output will be aligned to user-defined block size granularity */
1714
+    MFX_PARTIAL_BITSTREAM_ANY     = 3      /* Partial bitstream output will be return any coded data avilable at the end of SyncOperation timeout */
1715
+};
1716
+
1717
+MFX_PACK_BEGIN_USUAL_STRUCT()
1718
+typedef struct {
1719
+    mfxExtBuffer    Header;
1720
+    mfxU32          BlockSize;        /* output block granulatiry for Granularity = MFX_PARTIAL_BITSTREAM_BLOCK */
1721
+    mfxU16          Granularity;      /* granulatiry of the partial bitstream: slice/block/any */
1722
+    mfxU16          reserved[8];
1723
+} mfxExtPartialBitstreamParam;
1724
+MFX_PACK_END()
1725
+#endif
1726
 
1727
 #ifdef __cplusplus
1728
 } // extern "C"
1729
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo++.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo++.h Changed
63
 
1
@@ -1,33 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2007-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-
29
-File Name: mfxvideo++.h
30
-
31
-\* ****************************************************************************** */
32
+// Copyright (c) 2017 Intel Corporation
33
+// 
34
+// Permission is hereby granted, free of charge, to any person obtaining a copy
35
+// of this software and associated documentation files (the "Software"), to deal
36
+// in the Software without restriction, including without limitation the rights
37
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
38
+// copies of the Software, and to permit persons to whom the Software is
39
+// furnished to do so, subject to the following conditions:
40
+// 
41
+// The above copyright notice and this permission notice shall be included in all
42
+// copies or substantial portions of the Software.
43
+// 
44
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
46
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
47
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
48
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
49
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
50
+// SOFTWARE.
51
 
52
 #ifndef __MFXVIDEOPLUSPLUS_H
53
 #define __MFXVIDEOPLUSPLUS_H
54
@@ -60,7 +49,7 @@
55
     virtual mfxStatus SetPriority( mfxPriority priority) { return MFXSetPriority(m_session, priority);}
56
     virtual mfxStatus GetPriority( mfxPriority *priority) { return MFXGetPriority(m_session, priority);}
57
 
58
-    virtual mfxStatus SetBufferAllocator(mfxBufferAllocator *allocator) { return MFXVideoCORE_SetBufferAllocator(m_session, allocator); }
59
+    MFX_DEPRECATED virtual mfxStatus SetBufferAllocator(mfxBufferAllocator *allocator) { return MFXVideoCORE_SetBufferAllocator(m_session, allocator); }
60
     virtual mfxStatus SetFrameAllocator(mfxFrameAllocator *allocator) { return MFXVideoCORE_SetFrameAllocator(m_session, allocator); }
61
     virtual mfxStatus SetHandle(mfxHandleType type, mfxHDL hdl) { return MFXVideoCORE_SetHandle(m_session, type, hdl); }
62
     virtual mfxStatus GetHandle(mfxHandleType type, mfxHDL *hdl) { return MFXVideoCORE_GetHandle(m_session, type, hdl); }
63
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvideo.h Changed
92
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2007-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxvideo.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2017-2019 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #ifndef __MFXVIDEO_H__
51
 #define __MFXVIDEO_H__
52
 #include "mfxsession.h"
53
@@ -38,6 +28,7 @@
54
 #endif
55
 
56
 /* MFXVideoCORE */
57
+MFX_PACK_BEGIN_STRUCT_W_PTR()
58
 typedef struct {
59
     mfxU32      reserved[4];
60
     mfxHDL      pthis;
61
@@ -46,7 +37,9 @@
62
     mfxStatus  (MFX_CDECL *Unlock)   (mfxHDL pthis, mfxMemId mid);
63
     mfxStatus  (MFX_CDECL *Free)     (mfxHDL pthis, mfxMemId mid);
64
 } mfxBufferAllocator;
65
+MFX_PACK_END()
66
 
67
+MFX_PACK_BEGIN_STRUCT_W_PTR()
68
 typedef struct {
69
     mfxU32      reserved[4];
70
     mfxHDL      pthis;
71
@@ -57,9 +50,10 @@
72
     mfxStatus  (MFX_CDECL  *GetHDL)   (mfxHDL pthis, mfxMemId mid, mfxHDL *handle);
73
     mfxStatus  (MFX_CDECL  *Free)     (mfxHDL pthis, mfxFrameAllocResponse *response);
74
 } mfxFrameAllocator;
75
+MFX_PACK_END()
76
 
77
 /* VideoCORE */
78
-mfxStatus MFX_CDECL MFXVideoCORE_SetBufferAllocator(mfxSession session, mfxBufferAllocator *allocator);
79
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoCORE_SetBufferAllocator(mfxSession session, mfxBufferAllocator *allocator);
80
 mfxStatus MFX_CDECL MFXVideoCORE_SetFrameAllocator(mfxSession session, mfxFrameAllocator *allocator);
81
 mfxStatus MFX_CDECL MFXVideoCORE_SetHandle(mfxSession session, mfxHandleType type, mfxHDL hdl);
82
 mfxStatus MFX_CDECL MFXVideoCORE_GetHandle(mfxSession session, mfxHandleType type, mfxHDL *hdl);
83
@@ -101,7 +95,7 @@
84
 mfxStatus MFX_CDECL MFXVideoVPP_GetVideoParam(mfxSession session, mfxVideoParam *par);
85
 mfxStatus MFX_CDECL MFXVideoVPP_GetVPPStat(mfxSession session, mfxVPPStat *stat);
86
 mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsync(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *out, mfxExtVppAuxData *aux, mfxSyncPoint *syncp);
87
-mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsyncEx(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp);
88
+MFX_DEPRECATED mfxStatus MFX_CDECL MFXVideoVPP_RunFrameVPPAsyncEx(mfxSession session, mfxFrameSurface1 *in, mfxFrameSurface1 *surface_work, mfxFrameSurface1 **surface_out, mfxSyncPoint *syncp);
89
 
90
 #ifdef __cplusplus
91
 } // extern "C"
92
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvstructures.h -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/include/msdk/include/mfxvstructures.h Changed
53
 
1
@@ -1,32 +1,22 @@
2
-/*******************************************************************************
3
-
4
-Copyright (C) 2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfxvstructures.h
29
-
30
-*******************************************************************************/
31
+// Copyright (c) 2017 Intel Corporation
32
+// 
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+// 
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+// 
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 #include "mfxstructures.h"
51
 
52
 
53
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/main.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/main.cpp Changed
739
 
1
@@ -1,32 +1,25 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: main.cpp
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
+
51
+#include <windows.h>
52
+#include <stringapiset.h>
53
 
54
 #include <new>
55
 #include <memory>
56
@@ -37,6 +30,10 @@
57
 #include "mfx_library_iterator.h"
58
 #include "mfx_critical_section.h"
59
 
60
+#if defined(MEDIASDK_UWP_DISPATCHER)
61
+#include "mfx_dispatcher_uwp.h"
62
+#endif
63
+
64
 #include <string.h> /* for memset on Linux */
65
 
66
 #include <stdlib.h> /* for qsort on Linux */
67
@@ -70,6 +67,13 @@
68
         {MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE4, 3},
69
         {MFX_LIB_SOFTWARE, MFX_IMPL_SOFTWARE,  0},
70
         {MFX_LIB_SOFTWARE, MFX_IMPL_SOFTWARE | MFX_IMPL_AUDIO,  0},
71
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
72
+        //MFX_SINGLE_THREAD case
73
+        {MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE | MFX_IMPL_EXTERNAL_THREADING, 0},
74
+        {MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE2 | MFX_IMPL_EXTERNAL_THREADING, 1},
75
+        {MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE3 | MFX_IMPL_EXTERNAL_THREADING, 2},
76
+        {MFX_LIB_HARDWARE, MFX_IMPL_HARDWARE4 | MFX_IMPL_EXTERNAL_THREADING, 3},
77
+#endif
78
     };
79
 
80
     const
81
@@ -91,7 +95,9 @@
82
         {4, 4},  // MFX_IMPL_HARDWARE3
83
         {5, 5},  // MFX_IMPL_HARDWARE4
84
         {2, 6},  // MFX_IMPL_RUNTIME, same as MFX_IMPL_HARDWARE_ANY
85
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
86
         {8, 11},  // MFX_SINGLE_THREAD,
87
+#endif
88
         {7, 7}   // MFX_IMPL_AUDIO
89
     };
90
 
91
@@ -101,34 +107,7 @@
92
 
93
 using namespace MFX;
94
 
95
-#if defined(MEDIASDK_UWP_LOADER)
96
-
97
-#ifdef __cplusplus
98
-extern "C" {
99
-#endif /* __cplusplus */
100
-
101
-    //
102
-    // intel_gfx_api-*.dll calls these functions to do not mix MFXInitEx exposed 
103
-    // from dispatcher_proc_table.lib with the libmfx[hw/sw] engines' call MFXInitEx
104
-    //
105
-
106
-    mfxStatus InitMediaSDKSession(mfxInitParam par, mfxSession* session)
107
-    {
108
-        return MFXInitEx(par, session);
109
-    }
110
-
111
-    mfxStatus DisposeMediaSDKSession(mfxSession session)
112
-    {
113
-        return MFXClose(session);
114
-    }
115
-
116
-#ifdef __cplusplus
117
-}; //extern "C"
118
-#endif /* __cplusplus */
119
-
120
-#endif // defined(MEDIASDK_UWP_LOADER)
121
-
122
-#if !defined(MEDIASDK_UWP_PROCTABLE)
123
+#if !defined(MEDIASDK_UWP_DISPATCHER)
124
 
125
 //
126
 // Implement DLL exposed functions. MFXInit and MFXClose have to do
127
@@ -136,7 +115,7 @@
128
 // All other functions are implemented implicitly.
129
 //
130
 
131
-typedef MFXVector<MFX_DISP_HANDLE*> HandleVector;
132
+typedef MFXVector<MFX_DISP_HANDLE_EX*> HandleVector;
133
 typedef MFXVector<mfxStatus>        StatusVector;
134
 
135
 struct VectorHandleGuard
136
@@ -158,11 +137,32 @@
137
 };
138
 
139
 
140
-int HandleSort (const void * plhs, const void * prhs)
141
+static int HandleSort (const void * plhs, const void * prhs)
142
 {
143
-    const MFX_DISP_HANDLE * lhs = *(const MFX_DISP_HANDLE **)plhs;
144
-    const MFX_DISP_HANDLE * rhs = *(const MFX_DISP_HANDLE **)prhs;
145
+    const MFX_DISP_HANDLE_EX * lhs = *(const MFX_DISP_HANDLE_EX **)plhs;
146
+    const MFX_DISP_HANDLE_EX * rhs = *(const MFX_DISP_HANDLE_EX **)prhs;
147
 
148
+    // prefer HW implementation
149
+    if (lhs->implType != MFX_LIB_HARDWARE && rhs->implType == MFX_LIB_HARDWARE)
150
+    {
151
+        return 1;
152
+    }
153
+    if (lhs->implType == MFX_LIB_HARDWARE && rhs->implType != MFX_LIB_HARDWARE)
154
+    {
155
+        return -1;
156
+    }
157
+
158
+    // prefer integrated GPU
159
+    if (lhs->mediaAdapterType != MFX_MEDIA_INTEGRATED && rhs->mediaAdapterType == MFX_MEDIA_INTEGRATED)
160
+    {
161
+        return 1;
162
+    }
163
+    if (lhs->mediaAdapterType == MFX_MEDIA_INTEGRATED && rhs->mediaAdapterType != MFX_MEDIA_INTEGRATED)
164
+    {
165
+        return -1;
166
+    }
167
+
168
+    // prefer dll with lower API version
169
     if (lhs->actualApiVersion < rhs->actualApiVersion)
170
     {
171
         return -1;
172
@@ -185,9 +185,6 @@
173
     return 0;
174
 }
175
 
176
-// for LEGACY and UWP_LOADER purposes implementation of MFXinitEx is traditionally loading
177
-// required libmfx*.dll and fill the array of API functions' with corresponded pointers to instantiated libmfx*.dll
178
-
179
 mfxStatus MFXInitEx(mfxInitParam par, mfxSession *session)
180
 {
181
     MFX::MFXAutomaticCriticalSection guard(&dispGuard);
182
@@ -199,24 +196,26 @@
183
         , par.ExternalThreads
184
         , session));
185
 
186
-    mfxStatus mfxRes;
187
+    mfxStatus mfxRes = MFX_ERR_UNSUPPORTED;
188
     HandleVector allocatedHandle;
189
     VectorHandleGuard handleGuard(allocatedHandle);
190
 
191
-    MFX_DISP_HANDLE *pHandle;
192
-    msdk_disp_char dllName[MFX_MAX_DLL_PATH] = { 0 };
193
+    MFX_DISP_HANDLE_EX *pHandle;
194
+    wchar_t dllName[MFX_MAX_DLL_PATH] = { 0 };
195
     MFX::MFXLibraryIterator libIterator;
196
 
197
     // there iterators are used only if the caller specified implicit type like AUTO
198
     mfxU32 curImplIdx, maxImplIdx;
199
-    // particular implementation value
200
-    mfxIMPL curImpl;
201
     // implementation method masked from the input parameter
202
     // special case for audio library
203
     const mfxIMPL implMethod = (par.Implementation & MFX_IMPL_AUDIO) ? (sizeof(implTypesRange) / sizeof(implTypesRange[0]) - 1) : (par.Implementation & (MFX_IMPL_VIA_ANY - 1));
204
 
205
     // implementation interface masked from the input parameter
206
     mfxIMPL implInterface = par.Implementation & -MFX_IMPL_VIA_ANY;
207
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
208
+    bool isSingleThread = (implInterface & MFX_IMPL_EXTERNAL_THREADING) > 0;
209
+    implInterface &= ~MFX_IMPL_EXTERNAL_THREADING;
210
+#endif
211
     mfxIMPL implInterfaceOrig = implInterface;
212
     mfxVersion requiredVersion = {{MFX_VERSION_MINOR, MFX_VERSION_MAJOR}};
213
 
214
@@ -225,7 +224,12 @@
215
     {
216
         return MFX_ERR_NULL_PTR;
217
     }
218
+
219
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
220
+    if (((MFX_IMPL_AUTO > implMethod) || (MFX_IMPL_SINGLE_THREAD < implMethod)) && !(par.Implementation & MFX_IMPL_AUDIO))
221
+#else
222
     if (((MFX_IMPL_AUTO > implMethod) || (MFX_IMPL_RUNTIME < implMethod)) && !(par.Implementation & MFX_IMPL_AUDIO))
223
+#endif
224
     {
225
         return MFX_ERR_UNSUPPORTED;
226
     }
227
@@ -239,7 +243,7 @@
228
         *session = 0;
229
 
230
         // allocate the dispatching handle and call-table
231
-        pHandle = new MFX_DISP_HANDLE(requiredVersion);
232
+        pHandle = new MFX_DISP_HANDLE_EX(requiredVersion);
233
     }
234
     catch(...)
235
     {
236
@@ -247,16 +251,30 @@
237
     }
238
 
239
     DISPATCHER_LOG_INFO((("Required API version is %u.%u\n"), requiredVersion.Major, requiredVersion.Minor));
240
+    // particular implementation value
241
+    mfxIMPL curImpl;
242
 
243
     // Load HW library or RT from system location
244
     curImplIdx = implTypesRange[implMethod].minIndex;
245
     maxImplIdx = implTypesRange[implMethod].maxIndex;
246
     do
247
     {
248
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
249
+        if (isSingleThread && implTypes[curImplIdx].implType != MFX_LIB_HARDWARE)
250
+            continue;
251
+#endif
252
+
253
         int currentStorage = MFX::MFX_STORAGE_ID_FIRST;
254
         implInterface = implInterfaceOrig;
255
         do
256
         {
257
+            // this storage will be checked below
258
+            if (currentStorage == MFX::MFX_APP_FOLDER)
259
+            {
260
+                currentStorage += 1;
261
+                continue;
262
+            }
263
+
264
             // initialize the library iterator
265
             mfxRes = libIterator.Init(implTypes[curImplIdx].implType,
266
                 implInterface,
267
@@ -289,22 +307,39 @@
268
                     {
269
                         break;
270
                     }
271
-                    DISPATCHER_LOG_INFO((("loading library %S\n"), MSDK2WIDE(dllName)));
272
+                    DISPATCHER_LOG_INFO((("loading library %S\n"), dllName));
273
                     // try to load the selected DLL
274
                     curImpl = implTypes[curImplIdx].impl;
275
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
276
+                    if (isSingleThread)
277
+                        curImpl |= MFX_IMPL_EXTERNAL_THREADING;
278
+#endif
279
                     mfxRes = pHandle->LoadSelectedDLL(dllName, implType, curImpl, implInterface, par);
280
                     // unload the failed DLL
281
                     if (MFX_ERR_NONE != mfxRes)
282
                     {
283
                         pHandle->Close();
284
+                        continue;
285
                     }
286
-                    else
287
+
288
+                    mfxPlatform platform = { MFX_PLATFORM_UNKNOWN, 0, MFX_MEDIA_UNKNOWN };
289
+                    if (pHandle->callTable[eMFXVideoCORE_QueryPlatform])
290
                     {
291
-                        libIterator.GetSubKeyName(pHandle->subkeyName, sizeof(pHandle->subkeyName) / sizeof(pHandle->subkeyName[0]));
292
-                        pHandle->storageID = libIterator.GetStorageID();
293
-                        allocatedHandle.push_back(pHandle);
294
-                        pHandle = new MFX_DISP_HANDLE(requiredVersion);
295
+                        mfxRes = MFXVideoCORE_QueryPlatform((mfxSession)pHandle, &platform);
296
+                        if (MFX_ERR_NONE != mfxRes)
297
+                        {
298
+                            DISPATCHER_LOG_WRN(("MFXVideoCORE_QueryPlatform failed, rejecting loaded library\n"));
299
+                            pHandle->Close();
300
+                            continue;
301
+                        }
302
                     }
303
+                    pHandle->mediaAdapterType = platform.MediaAdapterType;
304
+                    DISPATCHER_LOG_INFO((("media adapter type is %d\n"), pHandle->mediaAdapterType));
305
+
306
+                    libIterator.GetSubKeyName(pHandle->subkeyName, sizeof(pHandle->subkeyName) / sizeof(pHandle->subkeyName[0]));
307
+                    pHandle->storageID = libIterator.GetStorageID();
308
+                    allocatedHandle.push_back(pHandle);
309
+                    pHandle = new MFX_DISP_HANDLE_EX(requiredVersion);
310
 
311
                 } while (MFX_ERR_NONE != mfxRes);
312
             }
313
@@ -314,18 +349,19 @@
314
 
315
         } while ((MFX_ERR_NONE != mfxRes) && (MFX::MFX_STORAGE_ID_LAST >= currentStorage));
316
 
317
-    } while ((MFX_ERR_NONE != mfxRes) && (++curImplIdx <= maxImplIdx));
318
-
319
+    } while (++curImplIdx <= maxImplIdx);
320
 
321
     curImplIdx = implTypesRange[implMethod].minIndex;
322
     maxImplIdx = implTypesRange[implMethod].maxIndex;
323
 
324
-    // SOLID dispatcher checks if there are other available media sdk engines implementations in working dir
325
-    // UWP dispatcher does not use libraries other than in System32 folder
326
-#if !defined(MEDIASDK_UWP_LOADER)
327
     // Load RT from app folder (libmfxsw64 with API >= 1.10)
328
     do
329
     {
330
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
331
+        if (isSingleThread && implTypes[curImplIdx].implType != MFX_LIB_HARDWARE)
332
+            continue;
333
+#endif
334
+
335
         implInterface = implInterfaceOrig;
336
         // initialize the library iterator
337
         mfxRes = libIterator.Init(implTypes[curImplIdx].implType,
338
@@ -357,10 +393,14 @@
339
                 {
340
                     break;
341
                 }
342
-                DISPATCHER_LOG_INFO((("loading library %S\n"), MSDK2WIDE(dllName)));
343
+                DISPATCHER_LOG_INFO((("loading library %S\n"), dllName));
344
 
345
                 // try to load the selected DLL
346
                 curImpl = implTypes[curImplIdx].impl;
347
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
348
+                if (isSingleThread)
349
+                    curImpl |= MFX_IMPL_EXTERNAL_THREADING;
350
+#endif
351
                 mfxRes = pHandle->LoadSelectedDLL(dllName, implType, curImpl, implInterface, par);
352
                 // unload the failed DLL
353
                 if (MFX_ERR_NONE != mfxRes)
354
@@ -377,20 +417,23 @@
355
                     }
356
                     pHandle->storageID = MFX::MFX_UNKNOWN_KEY;
357
                     allocatedHandle.push_back(pHandle);
358
-                    pHandle = new MFX_DISP_HANDLE(requiredVersion);
359
+                    pHandle = new MFX_DISP_HANDLE_EX(requiredVersion);
360
                 }
361
 
362
             } while (MFX_ERR_NONE != mfxRes);
363
         }
364
     } while ((MFX_ERR_NONE != mfxRes) && (++curImplIdx <= maxImplIdx));
365
 
366
-#endif // !defined(MEDIASDK_UWP_LOADER)
367
-
368
     // Load HW and SW libraries using legacy default DLL search mechanism
369
     // set current library index again
370
     curImplIdx = implTypesRange[implMethod].minIndex;
371
     do
372
     {
373
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
374
+        if (isSingleThread && implTypes[curImplIdx].implType != MFX_LIB_HARDWARE)
375
+            continue;
376
+#endif
377
+
378
         implInterface = implInterfaceOrig;
379
 
380
         if (par.Implementation & MFX_IMPL_AUDIO)
381
@@ -408,7 +451,7 @@
382
 
383
         if (MFX_ERR_NONE == mfxRes)
384
         {
385
-            DISPATCHER_LOG_INFO((("loading default library %S\n"), MSDK2WIDE(dllName)))
386
+            DISPATCHER_LOG_INFO((("loading default library %S\n"), dllName))
387
 
388
                 // try to load the selected DLL using default DLL search mechanism
389
                 if (MFX_LIB_HARDWARE == implTypes[curImplIdx].implType)
390
@@ -424,10 +467,15 @@
391
                 }
392
                 if (MFX_ERR_NONE == mfxRes)
393
                 {
394
+                    curImpl = implTypes[curImplIdx].impl;
395
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
396
+                    if (isSingleThread)
397
+                        curImpl |= MFX_IMPL_EXTERNAL_THREADING;
398
+#endif
399
                     // try to load the selected DLL using default DLL search mechanism
400
                     mfxRes = pHandle->LoadSelectedDLL(dllName,
401
                         implTypes[curImplIdx].implType,
402
-                        implTypes[curImplIdx].impl,
403
+                        curImpl,
404
                         implInterface,
405
                         par);
406
                 }
407
@@ -441,7 +489,7 @@
408
                 {
409
                     pHandle->storageID = MFX::MFX_UNKNOWN_KEY;
410
                     allocatedHandle.push_back(pHandle);
411
-                    pHandle = new MFX_DISP_HANDLE(requiredVersion);
412
+                    pHandle = new MFX_DISP_HANDLE_EX(requiredVersion);
413
                 }
414
         }
415
     }
416
@@ -460,9 +508,9 @@
417
             if (HandleSort(&(*first), &(*it)) != 0)
418
                 NeedSort = true;
419
 
420
-        // select dll with version with lowest version number still greater or equal to requested
421
+        // sort allocatedHandle so that the most preferred dll is at the beginning
422
         if (NeedSort)
423
-            qsort(&(*allocatedHandle.begin()), allocatedHandle.size(), sizeof(MFX_DISP_HANDLE*), &HandleSort);
424
+            qsort(&(*allocatedHandle.begin()), allocatedHandle.size(), sizeof(MFX_DISP_HANDLE_EX*), &HandleSort);
425
     }
426
     HandleVector::iterator candidate = allocatedHandle.begin();
427
     // check the final result of loading
428
@@ -470,7 +518,7 @@
429
     {
430
         pHandle = *candidate;
431
         //pulling up current mediasdk version, that required to match plugin version
432
-        mfxVersion apiVerActual = { 0 };
433
+        mfxVersion apiVerActual = { { 0, 0 } };
434
         mfxStatus stsQueryVersion = MFXQueryVersion((mfxSession)pHandle, &apiVerActual);
435
 
436
         if (MFX_ERR_NONE !=  stsQueryVersion)
437
@@ -504,14 +552,11 @@
438
                 hive.insert(hive.end(), plgsInHive.begin(), plgsInHive.end());
439
             }
440
 
441
-#if defined(MEDIASDK_USE_CFGFILES) || !defined(MEDIASDK_UWP_LOADER)
442
             // SOLID dispatcher also loads plug-ins from file system
443
             MFX::MFXPluginsInFS plgsInFS(apiVerActual);
444
             hive.insert(hive.end(), plgsInFS.begin(), plgsInFS.end());
445
-#endif // defined(MEDIASDK_USE_CFGFILES) || !defined(MEDIASDK_UWP_LOADER)
446
         }
447
 
448
-        // UWP dispatcher uses stubs
449
         pHandle->callPlugInsTable[eMFXVideoUSER_Load] = (mfxFunctionPointer)MFXVideoUSER_Load;
450
         pHandle->callPlugInsTable[eMFXVideoUSER_LoadByPath] = (mfxFunctionPointer)MFXVideoUSER_LoadByPath;
451
         pHandle->callPlugInsTable[eMFXVideoUSER_UnLoad] = (mfxFunctionPointer)MFXVideoUSER_UnLoad;
452
@@ -526,7 +571,41 @@
453
 
454
     // everything is OK. Save pointers to the output variable
455
     *candidate = 0; // keep this one safe from guard destructor
456
-    *((MFX_DISP_HANDLE **) session) = pHandle;
457
+
458
+
459
+    //===================================
460
+
461
+    // MFXVideoCORE_QueryPlatform call creates d3d device handle, so we have handle right after MFXInit and can't accept external handle
462
+    // This is a workaround which calls close-init to remove that handle
463
+
464
+    mfxFunctionPointer *actualTable = (pHandle->impl & MFX_IMPL_AUDIO) ? pHandle->callAudioTable : pHandle->callTable;
465
+    mfxFunctionPointer pFunc;
466
+
467
+    pFunc = actualTable[eMFXClose];
468
+    mfxRes = (*(mfxStatus(MFX_CDECL *) (mfxSession)) pFunc) (pHandle->session);
469
+    if (mfxRes != MFX_ERR_NONE)
470
+        return mfxRes;
471
+
472
+    pHandle->session = 0;
473
+    bool callOldInit = (pHandle->impl & MFX_IMPL_AUDIO) || !actualTable[eMFXInitEx];
474
+    pFunc = actualTable[(callOldInit) ? eMFXInit : eMFXInitEx];
475
+
476
+    mfxVersion version(pHandle->apiVersion);
477
+    if (callOldInit)
478
+    {
479
+        pHandle->loadStatus = (*(mfxStatus(MFX_CDECL *) (mfxIMPL, mfxVersion *, mfxSession *)) pFunc) (pHandle->impl | pHandle->implInterface, &version, &pHandle->session);
480
+    }
481
+    else
482
+    {
483
+        mfxInitParam initPar = par;
484
+        initPar.Implementation = pHandle->impl | pHandle->implInterface;
485
+        initPar.Version = version;
486
+        pHandle->loadStatus = (*(mfxStatus(MFX_CDECL *) (mfxInitParam, mfxSession *)) pFunc) (initPar, &pHandle->session);
487
+    }
488
+
489
+    //===================================
490
+
491
+    *((MFX_DISP_HANDLE_EX **) session) = pHandle;
492
 
493
     return pHandle->loadStatus;
494
 
495
@@ -569,12 +648,12 @@
496
 {
497
     mfxStatus sts = MFX_ERR_NONE;
498
     bool ErrFlag = false;
499
-    MFX_DISP_HANDLE &pHandle = *(MFX_DISP_HANDLE *) session;
500
-    if (!&pHandle)
501
+    if (!session)
502
     {
503
         DISPATCHER_LOG_ERROR((("MFXVideoUSER_Load: session=NULL\n")));
504
         return MFX_ERR_NULL_PTR;
505
     }
506
+    MFX_DISP_HANDLE &pHandle = *(MFX_DISP_HANDLE *) session;
507
     if (!uid)
508
     {
509
         DISPATCHER_LOG_ERROR((("MFXVideoUSER_Load: uid=NULL\n")));
510
@@ -649,12 +728,12 @@
511
 
512
 mfxStatus MFXVideoUSER_LoadByPath(mfxSession session, const mfxPluginUID *uid, mfxU32 version, const mfxChar *path, mfxU32 len)
513
 {
514
-    MFX_DISP_HANDLE &pHandle = *(MFX_DISP_HANDLE *) session;
515
-    if (!&pHandle)
516
+    if (!session)
517
     {
518
         DISPATCHER_LOG_ERROR((("MFXVideoUSER_LoadByPath: session=NULL\n")));
519
         return MFX_ERR_NULL_PTR;
520
     }
521
+    MFX_DISP_HANDLE &pHandle = *(MFX_DISP_HANDLE *) session;
522
     if (!uid)
523
     {
524
         DISPATCHER_LOG_ERROR((("MFXVideoUSER_LoadByPath: uid=NULL\n")));
525
@@ -662,27 +741,24 @@
526
     }
527
 
528
     DISPATCHER_LOG_INFO((("MFXVideoUSER_LoadByPath: %S uid=" MFXGUIDTYPE()" version=%d\n")
529
-        , MSDK2WIDE(path)
530
+        , path
531
         , MFXGUIDTOHEX(uid)
532
         , version))
533
 
534
     PluginDescriptionRecord record;
535
     record.sName[0] = 0;
536
 
537
-#ifdef _WIN32
538
-    msdk_disp_char wPath[MAX_PLUGIN_PATH];
539
-    int res = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, len<MAX_PLUGIN_PATH-1 ? len : MAX_PLUGIN_PATH-1, wPath, MAX_PLUGIN_PATH);
540
-    wPath[res]=0;
541
+    wchar_t wPath[MAX_PLUGIN_PATH];
542
+    int res = ::MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, path, len, wPath, MAX_PLUGIN_PATH-1);
543
 
544
     if (!res)
545
     {
546
-        DISPATCHER_LOG_ERROR((("MFXVideoUSER_LoadByPath: cant convert UTF-8 path to UTF-16\n")));
547
+        DISPATCHER_LOG_ERROR((("MFXVideoUSER_LoadByPath: can't convert UTF-8 path to UTF-16\n")));
548
         return MFX_ERR_NOT_FOUND;
549
     }
550
-    msdk_disp_char_cpy_s(record.sPath, MAX_PLUGIN_PATH, wPath);
551
-#else // Linux/Android
552
-    msdk_disp_char_cpy_s(record.sPath, MAX_PLUGIN_PATH, path);
553
-#endif
554
+    wPath[res]=0;
555
+
556
+    wcscpy_s(record.sPath, MAX_PLUGIN_PATH, wPath);
557
 
558
     record.PluginUID = *uid;
559
     record.PluginVersion = (mfxU16)version;
560
@@ -701,12 +777,12 @@
561
 
562
 mfxStatus MFXVideoUSER_UnLoad(mfxSession session, const mfxPluginUID *uid)
563
 {
564
-    MFX_DISP_HANDLE &rHandle = *(MFX_DISP_HANDLE *) session;
565
-    if (!&rHandle)
566
+    if (!session)
567
     {
568
         DISPATCHER_LOG_ERROR((("MFXVideoUSER_UnLoad: session=NULL\n")));
569
         return MFX_ERR_NULL_PTR;
570
     }
571
+    MFX_DISP_HANDLE &rHandle = *(MFX_DISP_HANDLE *) session;
572
     if (!uid)
573
     {
574
         DISPATCHER_LOG_ERROR((("MFXVideoUSER_UnLoad: uid=NULL\n")));
575
@@ -727,12 +803,12 @@
576
 
577
 mfxStatus MFXAudioUSER_Load(mfxSession session, const mfxPluginUID *uid, mfxU32 version)
578
 {
579
-    MFX_DISP_HANDLE &pHandle = *(MFX_DISP_HANDLE *) session;
580
-    if (!&pHandle)
581
+    if (!session)
582
     {
583
         DISPATCHER_LOG_ERROR((("MFXAudioUSER_Load: session=NULL\n")));
584
         return MFX_ERR_NULL_PTR;
585
     }
586
+    MFX_DISP_HANDLE &pHandle = *(MFX_DISP_HANDLE *) session;
587
     if (!uid)
588
     {
589
         DISPATCHER_LOG_ERROR((("MFXAudioUSER_Load: uid=NULL\n")));
590
@@ -789,12 +865,12 @@
591
 
592
 mfxStatus MFXAudioUSER_UnLoad(mfxSession session, const mfxPluginUID *uid)
593
 {
594
-    MFX_DISP_HANDLE &rHandle = *(MFX_DISP_HANDLE *) session;
595
-    if (!&rHandle)
596
+    if (!session)
597
     {
598
         DISPATCHER_LOG_ERROR((("MFXAudioUSER_UnLoad: session=NULL\n")));
599
         return MFX_ERR_NULL_PTR;
600
     }
601
+    MFX_DISP_HANDLE &rHandle = *(MFX_DISP_HANDLE *) session;
602
     if (!uid)
603
     {
604
         DISPATCHER_LOG_ERROR((("MFXAudioUSER_Load: uid=NULL\n")));
605
@@ -812,30 +888,74 @@
606
 
607
     return bDestroyed ? MFX_ERR_NONE : MFX_ERR_NOT_FOUND;
608
 }
609
-#else // relates to !defined (MEDIASDK_UWP_PROCTABLE) from line 137, i.e. #else part as if MEDIASDK_UWP_PROCTABLE defined
610
+#else // relates to !defined (MEDIASDK_UWP_DISPATCHER), i.e. #else part as if MEDIASDK_UWP_DISPATCHER defined
611
 
612
-#include <windows.h>
613
-#include "intel_api_factory.h"
614
+static mfxModuleHandle hModule;
615
 
616
-// for the UWP_PROCTABLE purposes implementation of MFXinitEx is calling
617
-// InitializeInstance() implemented in intel_uwp-api.dll
618
+// for the UWP_DISPATCHER purposes implementation of MFXinitEx is calling
619
+// InitialiseMediaSession() implemented in intel_gfx_api.dll
620
 mfxStatus MFXInitEx(mfxInitParam par, mfxSession *session)
621
 {
622
-    HRESULT hr = InitialiseMediaSession((HANDLE*)session, &par, nullptr);
623
-    return (hr == S_OK) ? mfxStatus::MFX_ERR_NONE : (mfxStatus)hr;
624
+#if defined(MEDIASDK_ARM_LOADER)
625
+
626
+    return MFX_ERR_UNSUPPORTED;
627
+
628
+#else
629
+
630
+    wchar_t IntelGFXAPIdllName[MFX_MAX_DLL_PATH] = { 0 };
631
+    mfxI32 adapterNum = -1;
632
+
633
+    switch (par.Implementation & 0xf)
634
+    {
635
+    case MFX_IMPL_SOFTWARE:
636
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
637
+    case MFX_IMPL_SINGLE_THREAD:
638
+#endif
639
+        return MFX_ERR_UNSUPPORTED;
640
+    case MFX_IMPL_AUTO:
641
+    case MFX_IMPL_HARDWARE:
642
+        adapterNum = 0;
643
+        break;
644
+    case MFX_IMPL_HARDWARE2:
645
+        adapterNum = 1;
646
+        break;
647
+    case MFX_IMPL_HARDWARE3:
648
+        adapterNum = 2;
649
+        break;
650
+    case MFX_IMPL_HARDWARE4:
651
+        adapterNum = 3;
652
+        break;
653
+    default:
654
+        return GfxApiInitPriorityIntegrated(par, session, hModule);
655
+    }
656
+
657
+    return GfxApiInitByAdapterNum(par, adapterNum, session, hModule);
658
+
659
+#endif
660
 }
661
 
662
-// for the UWP_PROCTABLE purposes implementation of MFXClose is calling
663
-// DisposeInstance() implemented in intel_uwp-api.dll
664
+// for the UWP_DISPATCHER purposes implementation of MFXClose is calling
665
+// DisposeMediaSession() implemented in intel_gfx_api.dll
666
 mfxStatus MFXClose(mfxSession session)
667
 {
668
-    if (nullptr == session) {
669
+    if (NULL == session) {
670
         return MFX_ERR_INVALID_HANDLE;
671
     }
672
 
673
-    HRESULT hr = DisposeMediaSession(HANDLE(session));
674
+    mfxStatus sts = MFX_ERR_NONE;
675
+
676
+#if defined(MEDIASDK_ARM_LOADER)
677
+
678
+    sts = MFX_ERR_UNSUPPORTED;
679
+
680
+#else
681
+
682
+    sts = GfxApiClose(session, hModule);
683
+
684
+#endif
685
+
686
     session = (mfxSession)NULL;
687
-    return (hr == S_OK) ? MFX_ERR_NONE : mfxStatus(hr);
688
+    return sts;
689
 }
690
 
691
 #undef FUNCTION
692
@@ -865,10 +985,7 @@
693
 FUNCTION(mfxStatus, MFXAudioUSER_Load, (mfxSession session, const mfxPluginUID *uid, mfxU32 version), (session, uid, version))
694
 FUNCTION(mfxStatus, MFXAudioUSER_UnLoad, (mfxSession session, const mfxPluginUID *uid), (session, uid))
695
 
696
-#endif //!defined(MEDIASDK_UWP_PROCTABLE)
697
-
698
-
699
-#if !defined(MEDIASDK_UWP_LOADER)
700
+#endif //!defined(MEDIASDK_UWP_DISPATCHER)
701
 
702
 mfxStatus MFXJoinSession(mfxSession session, mfxSession child_session)
703
 {
704
@@ -877,7 +994,7 @@
705
     MFX_DISP_HANDLE *pChildHandle = (MFX_DISP_HANDLE *)child_session;
706
 
707
     // get the function's address and make a call
708
-    if ((pHandle) && (pChildHandle) && (pHandle->apiVersion == pChildHandle->apiVersion))
709
+    if ((pHandle) && (pChildHandle) && (pHandle->actualApiVersion == pChildHandle->actualApiVersion))
710
     {
711
         /* check whether it is audio session or video */
712
         int tableIndex = eMFXJoinSession;
713
@@ -936,8 +1053,6 @@
714
 
715
 } // mfxStatus MFXCloneSession(mfxSession session, mfxSession *clone)
716
 
717
-#endif // !defined(MEDIASDK_UWP_LOADER)
718
-
719
 mfxStatus MFXInit(mfxIMPL impl, mfxVersion *pVer, mfxSession *session)
720
 {
721
     mfxInitParam par = {};
722
@@ -998,7 +1113,6 @@
723
 FUNCTION(mfxStatus, MFXQueryIMPL, (mfxSession session, mfxIMPL *impl), (session, impl))
724
 FUNCTION(mfxStatus, MFXQueryVersion, (mfxSession session, mfxVersion *version), (session, version))
725
 
726
-#if !defined(MEDIASDK_UWP_LOADER)
727
 // these functions are not necessary in LOADER part of dispatcher and
728
 // need to be included only in in SOLID dispatcher or PROCTABLE part of dispatcher
729
 
730
@@ -1006,8 +1120,6 @@
731
 FUNCTION(mfxStatus, MFXSetPriority, (mfxSession session, mfxPriority priority), (session, priority))
732
 FUNCTION(mfxStatus, MFXGetPriority, (mfxSession session, mfxPriority *priority), (session, priority))
733
 
734
-#endif // !defined(MEDIASDK_UWP_LOADER)
735
-
736
 #undef FUNCTION
737
 #define FUNCTION(return_value, func_name, formal_param_list, actual_param_list) \
738
     return_value func_name formal_param_list \
739
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_critical_section.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_critical_section.cpp Changed
64
 
1
@@ -1,37 +1,25 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2013 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_critical_section.cpp
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #include "mfx_critical_section.h"
52
 
53
-#if defined(_WIN32) || defined(_WIN64)
54
-
55
 #include <windows.h>
56
 // SDK re-declares the following functions with different call declarator.
57
 // We don't need them. Just redefine them to nothing.
58
@@ -84,5 +72,3 @@
59
 } // void mfxLeaveCriticalSection(mfxCriticalSection *pCSection)
60
 
61
 } // namespace MFX
62
-
63
-#endif // #if defined(_WIN32) || defined(_WIN64)
64
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dispatcher.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dispatcher.cpp Changed
511
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dispatcher.cpp
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2020 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #include "mfx_dispatcher.h"
52
 #include "mfx_dispatcher_log.h"
53
@@ -35,18 +25,20 @@
54
 #include <assert.h>
55
 
56
 #include <string.h>
57
-#if defined(_WIN32) || defined(_WIN64)
58
-    #include <windows.h>
59
-    #pragma warning(disable:4355)
60
-#else
61
-    #include <dlfcn.h>
62
-    #include <iostream>
63
-#endif // defined(_WIN32) || defined(_WIN64)
64
+#include <windows.h>
65
 
66
+#include "mfx_dxva2_device.h"
67
+#include "mfxvideo++.h"
68
+#include "mfx_vector.h"
69
+#include "mfxadapter.h"
70
+#include <algorithm>
71
+
72
+#pragma warning(disable:4355)
73
 
74
 MFX_DISP_HANDLE::MFX_DISP_HANDLE(const mfxVersion requiredVersion) :
75
     _mfxSession()
76
     ,apiVersion(requiredVersion)
77
+    ,pluginHive()
78
     ,pluginFactory((mfxSession)this)
79
 {
80
     actualApiVersion.Version = 0;
81
@@ -74,7 +66,7 @@
82
 
83
     mfxRes = UnLoadSelectedDLL();
84
 
85
-    // the library wasn't unloaded
86
+    // need to reset dispatcher state after unloading dll
87
     if (MFX_ERR_NONE == mfxRes)
88
     {
89
         implType = MFX_LIB_SOFTWARE;
90
@@ -90,7 +82,7 @@
91
 
92
 } // mfxStatus MFX_DISP_HANDLE::Close(void)
93
 
94
-mfxStatus MFX_DISP_HANDLE::LoadSelectedDLL(const msdk_disp_char *pPath, eMfxImplType reqImplType,
95
+mfxStatus MFX_DISP_HANDLE::LoadSelectedDLL(const wchar_t *pPath, eMfxImplType reqImplType,
96
                                            mfxIMPL reqImpl, mfxIMPL reqImplInterface, mfxInitParam &par)
97
 {
98
     mfxStatus mfxRes = MFX_ERR_NONE;
99
@@ -105,6 +97,9 @@
100
     }
101
     // only exact types of implementation is allowed
102
     if (!(reqImpl & MFX_IMPL_AUDIO) &&
103
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
104
+        !(reqImpl & MFX_IMPL_EXTERNAL_THREADING) &&
105
+#endif
106
         (MFX_IMPL_SOFTWARE != reqImpl) &&
107
         (MFX_IMPL_HARDWARE != reqImpl) &&
108
         (MFX_IMPL_HARDWARE2 != reqImpl) &&
109
@@ -141,7 +136,7 @@
110
 
111
     {
112
         assert(hModule == (mfxModuleHandle)0);
113
-        DISPATCHER_LOG_BLOCK(("invoking LoadLibrary(%S)\n", MSDK2WIDE(pPath)));
114
+        DISPATCHER_LOG_BLOCK(("invoking LoadLibrary(%S)\n", pPath));
115
 
116
         // load the DLL into the memory
117
         hModule = MFX::mfx_dll_load(pPath);
118
@@ -151,9 +146,9 @@
119
             int i;
120
 
121
             DISPATCHER_LOG_OPERATION({
122
-                msdk_disp_char modulePath[1024];
123
+                wchar_t modulePath[1024];
124
                 GetModuleFileNameW((HMODULE)hModule, modulePath, sizeof(modulePath)/sizeof(modulePath[0]));
125
-                DISPATCHER_LOG_INFO((("loaded module %S\n"), MSDK2WIDE(modulePath)))
126
+                DISPATCHER_LOG_INFO((("loaded module %S\n"), modulePath))
127
             });
128
 
129
             if (impl & MFX_IMPL_AUDIO)
130
@@ -164,10 +159,6 @@
131
                     // construct correct name of the function - remove "_a" postfix
132
 
133
                     mfxFunctionPointer pProc = (mfxFunctionPointer) MFX::mfx_dll_get_addr(hModule, APIAudioFunc[i].pName);
134
-    #ifdef ANDROID
135
-                    // on Android very first call to dlsym may fail
136
-                    if (!pProc) pProc = (mfxFunctionPointer) MFX::mfx_dll_get_addr(hModule, APIAudioFunc[i].pName);
137
-    #endif
138
                     if (pProc)
139
                     {
140
                         // function exists in the library,
141
@@ -193,10 +184,6 @@
142
                 for (i = 0; i < eVideoFuncTotal; i += 1)
143
                 {
144
                     mfxFunctionPointer pProc = (mfxFunctionPointer) MFX::mfx_dll_get_addr(hModule, APIFunc[i].pName);
145
-    #ifdef ANDROID
146
-                    // on Android very first call to dlsym may fail
147
-                    if (!pProc) pProc = (mfxFunctionPointer) MFX::mfx_dll_get_addr(hModule, APIFunc[i].pName);
148
-    #endif
149
                     if (pProc)
150
                     {
151
                         // function exists in the library,
152
@@ -219,11 +206,7 @@
153
         }
154
         else
155
         {
156
-#if defined(_WIN32) || defined(_WIN64)
157
             DISPATCHER_LOG_WRN((("can't find DLL: GetLastErr()=0x%x\n"), GetLastError()))
158
-#else
159
-            DISPATCHER_LOG_WRN((("can't find DLL: dlerror() = \"%s\"\n"), dlerror()));
160
-#endif
161
             mfxRes = MFX_ERR_UNSUPPORTED;
162
         }
163
     }
164
@@ -295,7 +278,7 @@
165
     loadStatus = mfxRes;
166
     return mfxRes;
167
 
168
-} // mfxStatus MFX_DISP_HANDLE::LoadSelectedDLL(const msdk_disp_char *pPath, eMfxImplType implType, mfxIMPL impl)
169
+} // mfxStatus MFX_DISP_HANDLE::LoadSelectedDLL(const wchar_t *pPath, eMfxImplType implType, mfxIMPL impl)
170
 
171
 mfxStatus MFX_DISP_HANDLE::UnLoadSelectedDLL(void)
172
 {
173
@@ -344,4 +327,335 @@
174
 
175
     return mfxRes;
176
 
177
-} // mfxStatus MFX_DISP_HANDLE::UnLoadSelectedDLL(void)
178
\ No newline at end of file
179
+} // mfxStatus MFX_DISP_HANDLE::UnLoadSelectedDLL(void)
180
+
181
+
182
+MFX_DISP_HANDLE_EX::MFX_DISP_HANDLE_EX(const mfxVersion requiredVersion)
183
+    : MFX_DISP_HANDLE(requiredVersion)
184
+    , mediaAdapterType(MFX_MEDIA_UNKNOWN)
185
+{}
186
+
187
+
188
+#if (defined(_WIN64) || defined(_WIN32)) && (MFX_VERSION >= 1031)
189
+static mfxStatus InitDummySession(mfxU32 adapter_n, MFXVideoSession & dummy_session)
190
+{
191
+    mfxInitParam initPar;
192
+    memset(&initPar, 0, sizeof(initPar));
193
+
194
+    initPar.Version.Major = 1;
195
+    initPar.Version.Minor = 0;
196
+
197
+    switch (adapter_n)
198
+    {
199
+    case 0:
200
+        initPar.Implementation = MFX_IMPL_HARDWARE;
201
+        break;
202
+    case 1:
203
+        initPar.Implementation = MFX_IMPL_HARDWARE2;
204
+        break;
205
+    case 2:
206
+        initPar.Implementation = MFX_IMPL_HARDWARE3;
207
+        break;
208
+    case 3:
209
+        initPar.Implementation = MFX_IMPL_HARDWARE4;
210
+        break;
211
+
212
+    default:
213
+        // try searching on all display adapters
214
+        initPar.Implementation = MFX_IMPL_HARDWARE_ANY;
215
+        break;
216
+    }
217
+
218
+    initPar.Implementation |= MFX_IMPL_VIA_D3D11;
219
+
220
+    return dummy_session.InitEx(initPar);
221
+}
222
+
223
+static inline bool is_iGPU(const mfxAdapterInfo& adapter_info)
224
+{
225
+    return adapter_info.Platform.MediaAdapterType == MFX_MEDIA_INTEGRATED;
226
+}
227
+
228
+static inline bool is_dGPU(const mfxAdapterInfo& adapter_info)
229
+{
230
+    return adapter_info.Platform.MediaAdapterType == MFX_MEDIA_DISCRETE;
231
+}
232
+
233
+// This function implies that iGPU has higher priority
234
+static inline mfxI32 iGPU_priority(const void* ll, const void* rr)
235
+{
236
+    const mfxAdapterInfo& l = *(reinterpret_cast<const mfxAdapterInfo*>(ll));
237
+    const mfxAdapterInfo& r = *(reinterpret_cast<const mfxAdapterInfo*>(rr));
238
+
239
+    if (is_iGPU(l) && is_iGPU(r) || is_dGPU(l) && is_dGPU(r))
240
+        return 0;
241
+
242
+    if (is_iGPU(l) && is_dGPU(r))
243
+        return -1;
244
+
245
+    // The only combination left is_dGPU(l) && is_iGPU(r))
246
+    return 1;
247
+}
248
+
249
+
250
+static void RearrangeInPriorityOrder(const mfxComponentInfo & info, MFX::MFXVector<mfxAdapterInfo> & vec)
251
+{
252
+   (void)info;
253
+    {
254
+        // Move iGPU to top priority
255
+        qsort(vec.data(), vec.size(), sizeof(mfxAdapterInfo), &iGPU_priority);
256
+    }
257
+}
258
+
259
+static mfxStatus PrepareAdaptersInfo(const mfxComponentInfo * info, MFX::MFXVector<mfxAdapterInfo> & vec, mfxAdaptersInfo& adapters)
260
+{
261
+    // No suitable adapters on system to handle user's workload
262
+    if (vec.empty())
263
+    {
264
+        adapters.NumActual = 0;
265
+        return MFX_ERR_NOT_FOUND;
266
+    }
267
+
268
+    if (info)
269
+    {
270
+        RearrangeInPriorityOrder(*info, vec);
271
+    }
272
+
273
+    mfxU32 num_to_copy = (std::min)(mfxU32(vec.size()), adapters.NumAlloc);
274
+    for (mfxU32 i = 0; i < num_to_copy; ++i)
275
+    {
276
+        adapters.Adapters[i] = vec[i];
277
+    }
278
+
279
+    adapters.NumActual = num_to_copy;
280
+
281
+    if (vec.size() > adapters.NumAlloc)
282
+    {
283
+        return MFX_WRN_OUT_OF_RANGE;
284
+    }
285
+
286
+    return MFX_ERR_NONE;
287
+}
288
+
289
+static inline bool QueryAdapterInfo(mfxU32 adapter_n, mfxU32& VendorID, mfxU32& DeviceID)
290
+{
291
+    MFX::DXVA2Device dxvaDevice;
292
+
293
+    if (!dxvaDevice.InitDXGI1(adapter_n))
294
+        return false;
295
+
296
+    VendorID = dxvaDevice.GetVendorID();
297
+    DeviceID = dxvaDevice.GetDeviceID();
298
+
299
+    return true;
300
+}
301
+
302
+static inline mfxU32 MakeVersion(mfxU16 major, mfxU16 minor)
303
+{
304
+    return major * 1000 + minor;
305
+}
306
+
307
+mfxStatus MFXQueryAdaptersDecode(mfxBitstream* bitstream, mfxU32 codec_id, mfxAdaptersInfo* adapters)
308
+{
309
+    if (!adapters || !bitstream)
310
+        return MFX_ERR_NULL_PTR;
311
+
312
+    MFX::MFXVector<mfxAdapterInfo> obtained_info;
313
+
314
+    mfxU32 adapter_n = 0, VendorID, DeviceID;
315
+
316
+    mfxComponentInfo input_info;
317
+    memset(&input_info, 0, sizeof(input_info));
318
+    input_info.Type                     = mfxComponentType::MFX_COMPONENT_DECODE;
319
+    input_info.Requirements.mfx.CodecId = codec_id;
320
+
321
+    for(;;)
322
+    {
323
+        if (!QueryAdapterInfo(adapter_n, VendorID, DeviceID))
324
+            break;
325
+
326
+        ++adapter_n;
327
+
328
+        if (VendorID != INTEL_VENDOR_ID)
329
+            continue;
330
+
331
+        // Check if requested capabilities are supported
332
+        MFXVideoSession dummy_session;
333
+
334
+        mfxStatus sts = InitDummySession(adapter_n - 1, dummy_session);
335
+        if (sts != MFX_ERR_NONE)
336
+        {
337
+            continue;
338
+        }
339
+
340
+        mfxVideoParam stream_params, out;
341
+        memset(&out, 0, sizeof(out));
342
+        memset(&stream_params, 0, sizeof(stream_params));
343
+        out.mfx.CodecId = stream_params.mfx.CodecId = codec_id;
344
+
345
+        sts = MFXVideoDECODE_DecodeHeader(dummy_session.operator mfxSession(), bitstream, &stream_params);
346
+
347
+        if (sts != MFX_ERR_NONE)
348
+        {
349
+            continue;
350
+        }
351
+
352
+        sts = MFXVideoDECODE_Query(dummy_session.operator mfxSession(), &stream_params, &out);
353
+
354
+        if (sts != MFX_ERR_NONE) // skip MFX_ERR_UNSUPPORTED as well as MFX_WRN_INCOMPATIBLE_VIDEO_PARAM
355
+            continue;
356
+
357
+        mfxAdapterInfo info;
358
+        memset(&info, 0, sizeof(info));
359
+
360
+        //WA for initialization when application built w/ new API, but lib w/ old one.
361
+        mfxVersion apiVersion;
362
+        sts = dummy_session.QueryVersion(&apiVersion);
363
+        if (sts != MFX_ERR_NONE)
364
+            continue;
365
+
366
+        mfxU32 version = MakeVersion(apiVersion.Major, apiVersion.Minor);
367
+
368
+        if (version >= 1019)
369
+        {
370
+            sts = MFXVideoCORE_QueryPlatform(dummy_session.operator mfxSession(), &info.Platform);
371
+
372
+            if (sts != MFX_ERR_NONE)
373
+            {
374
+                continue;
375
+            }
376
+        }
377
+        else
378
+        {
379
+            // for API versions greater than 1.19 Device id is set inside QueryPlatform call
380
+            info.Platform.DeviceId = static_cast<mfxU16>(DeviceID);
381
+        }
382
+
383
+        info.Number = adapter_n - 1;
384
+
385
+        obtained_info.push_back(info);
386
+    }
387
+
388
+    return PrepareAdaptersInfo(&input_info, obtained_info, *adapters);
389
+}
390
+
391
+mfxStatus MFXQueryAdapters(mfxComponentInfo* input_info, mfxAdaptersInfo* adapters)
392
+{
393
+    if (!adapters)
394
+        return MFX_ERR_NULL_PTR;
395
+
396
+    MFX::MFXVector<mfxAdapterInfo> obtained_info;
397
+    //obtained_info.reserve(adapters->NumAdaptersAlloc);
398
+
399
+    mfxU32 adapter_n = 0, VendorID, DeviceID;
400
+
401
+    for (;;)
402
+    {
403
+        if (!QueryAdapterInfo(adapter_n, VendorID, DeviceID))
404
+            break;
405
+
406
+        ++adapter_n;
407
+
408
+        if (VendorID != INTEL_VENDOR_ID)
409
+            continue;
410
+
411
+        // Check if requested capabilities are supported
412
+        MFXVideoSession dummy_session;
413
+
414
+        mfxStatus sts = InitDummySession(adapter_n - 1, dummy_session);
415
+        if (sts != MFX_ERR_NONE)
416
+        {
417
+            continue;
418
+        }
419
+
420
+        // If input_info is NULL just return all Intel adapters and information about them
421
+        if (input_info)
422
+        {
423
+            mfxVideoParam out;
424
+            memset(&out, 0, sizeof(out));
425
+
426
+            switch (input_info->Type)
427
+            {
428
+            case mfxComponentType::MFX_COMPONENT_ENCODE:
429
+                {
430
+                    out.mfx.CodecId = input_info->Requirements.mfx.CodecId;
431
+
432
+                    sts = MFXVideoENCODE_Query(dummy_session.operator mfxSession(), &input_info->Requirements, &out);
433
+                }
434
+                break;
435
+            case mfxComponentType::MFX_COMPONENT_DECODE:
436
+                {
437
+                    out.mfx.CodecId = input_info->Requirements.mfx.CodecId;
438
+
439
+                    sts = MFXVideoDECODE_Query(dummy_session.operator mfxSession(), &input_info->Requirements, &out);
440
+                }
441
+                break;
442
+            case mfxComponentType::MFX_COMPONENT_VPP:
443
+                {
444
+                    sts = MFXVideoVPP_Query(dummy_session.operator mfxSession(), &input_info->Requirements, &out);
445
+                }
446
+                break;
447
+            default:
448
+                sts = MFX_ERR_UNSUPPORTED;
449
+            }
450
+        }
451
+
452
+        if (sts != MFX_ERR_NONE) // skip MFX_ERR_UNSUPPORTED as well as MFX_WRN_INCOMPATIBLE_VIDEO_PARAM
453
+            continue;
454
+
455
+        mfxAdapterInfo info;
456
+        memset(&info, 0, sizeof(info));
457
+
458
+        //WA for initialization when application built w/ new API, but lib w/ old one.
459
+        mfxVersion apiVersion;
460
+        sts = dummy_session.QueryVersion(&apiVersion);
461
+        if (sts != MFX_ERR_NONE)
462
+            continue;
463
+
464
+        mfxU32 version = MakeVersion(apiVersion.Major, apiVersion.Minor);
465
+
466
+        if (version >= 1019)
467
+        {
468
+            sts = MFXVideoCORE_QueryPlatform(dummy_session.operator mfxSession(), &info.Platform);
469
+
470
+            if (sts != MFX_ERR_NONE)
471
+            {
472
+                continue;
473
+            }
474
+        }
475
+        else
476
+        {
477
+            // for API versions greater than 1.19 Device id is set inside QueryPlatform call
478
+            info.Platform.DeviceId = static_cast<mfxU16>(DeviceID);
479
+        }
480
+
481
+        info.Number = adapter_n - 1;
482
+
483
+        obtained_info.push_back(info);
484
+    }
485
+
486
+    return PrepareAdaptersInfo(input_info, obtained_info, *adapters);
487
+}
488
+
489
+mfxStatus MFXQueryAdaptersNumber(mfxU32* num_adapters)
490
+{
491
+    if (!num_adapters)
492
+        return MFX_ERR_NULL_PTR;
493
+
494
+    mfxU32 intel_adapter_count = 0, VendorID, DeviceID;
495
+
496
+    for (mfxU32 cur_adapter = 0; ; ++cur_adapter)
497
+    {
498
+        if (!QueryAdapterInfo(cur_adapter, VendorID, DeviceID))
499
+            break;
500
+
501
+        if (VendorID == INTEL_VENDOR_ID)
502
+            ++intel_adapter_count;
503
+    }
504
+
505
+    *num_adapters = intel_adapter_count;
506
+
507
+    return MFX_ERR_NONE;
508
+}
509
+
510
+#endif // (defined(_WIN64) || defined(_WIN32)) && (MFX_VERSION >= 1031)
511
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dispatcher_log.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dispatcher_log.cpp Changed
65
 
1
@@ -1,44 +1,32 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dispatcher_log.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #if defined(MFX_DISPATCHER_LOG)
52
 
53
 #include "mfx_dispatcher_log.h"
54
 #include "mfxstructures.h"
55
-#if defined(_WIN32) || defined(_WIN64)
56
 #include <windows.h>
57
 #if defined(DISPATCHER_LOG_REGISTER_EVENT_PROVIDER)
58
 #include <evntprov.h>
59
 #include <winmeta.h>
60
 #endif
61
-#endif // #if defined(_WIN32) || defined(_WIN64)
62
 #include <stdarg.h>
63
 #include <algorithm>
64
 #include <string>
65
obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_driver_store_loader.cpp Added
220
 
1
@@ -0,0 +1,218 @@
2
+// Copyright (c) 2019-2020 Intel Corporation
3
+//
4
+// Permission is hereby granted, free of charge, to any person obtaining a copy
5
+// of this software and associated documentation files (the "Software"), to deal
6
+// in the Software without restriction, including without limitation the rights
7
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+// copies of the Software, and to permit persons to whom the Software is
9
+// furnished to do so, subject to the following conditions:
10
+//
11
+// The above copyright notice and this permission notice shall be included in all
12
+// copies or substantial portions of the Software.
13
+//
14
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+// SOFTWARE.
21
+
22
+#include <tchar.h>
23
+
24
+#include "mfx_driver_store_loader.h"
25
+#include "mfx_dispatcher_log.h"
26
+#include "mfx_load_dll.h"
27
+
28
+namespace MFX
29
+{
30
+
31
+
32
+inline bool IsIntelDeviceInstanceID(const wchar_t * DeviceID)
33
+{
34
+    return wcsstr(DeviceID, L"VEN_8086") || wcsstr(DeviceID, L"ven_8086");
35
+}
36
+
37
+inline bool ExctractDeviceID(const wchar_t* descrString, mfxU32& deviceID)
38
+{
39
+    const wchar_t *begin = wcsstr(descrString, L"DEV_");
40
+
41
+    if (!begin)
42
+    {
43
+        begin = wcsstr(descrString, L"dev_");
44
+        if (!begin)
45
+        {
46
+            DISPATCHER_LOG_WRN(("exctracting device id: failed to find device id substring\n"));
47
+            return false;
48
+        }
49
+    }
50
+
51
+    begin += wcslen(L"DEV_");
52
+    deviceID = wcstoul(begin, NULL, 16);
53
+    if (!deviceID)
54
+    {
55
+        DISPATCHER_LOG_WRN(("exctracting device id: failed to convert device id str to int\n"));
56
+        return false;
57
+    }
58
+
59
+    return true;
60
+}
61
+
62
+
63
+
64
+DriverStoreLoader::DriverStoreLoader(void)
65
+    : m_moduleCfgMgr(NULL)
66
+    , m_pCM_Get_Device_ID_List_Size(NULL)
67
+    , m_pCM_Get_Device_ID_List(NULL)
68
+    , m_pCM_Locate_DevNode(NULL)
69
+    , m_pCM_Open_DevNode_Key(NULL)
70
+{
71
+}
72
+
73
+DriverStoreLoader::~DriverStoreLoader(void)
74
+{
75
+}
76
+
77
+bool DriverStoreLoader::GetDriverStorePath(wchar_t * path, DWORD dwPathSize, mfxU32 deviceID)
78
+{
79
+    if (path == NULL || dwPathSize == 0)
80
+    {
81
+        return false;
82
+    }
83
+
84
+    // Obtain a PnP handle to the Intel graphics adapter
85
+    CONFIGRET    result = CR_SUCCESS;
86
+    ULONG        DeviceIDListSize = 0;
87
+    MFXVector<WCHAR> DeviceIDList;
88
+    wchar_t      DisplayGUID[40];
89
+    DEVINST      DeviceInst;
90
+
91
+    DISPATCHER_LOG_INFO(("Looking for MediaSDK in DriverStore\n"));
92
+
93
+    if (!LoadCfgMgr() || !LoadCmFuncs())
94
+    {
95
+        return false;
96
+    }
97
+
98
+    if (StringFromGUID2(GUID_DEVCLASS_DISPLAY, DisplayGUID, sizeof(DisplayGUID)) == 0)
99
+    {
100
+        DISPATCHER_LOG_WRN(("Couldn't prepare string from GUID\n"));
101
+        return false;
102
+    }
103
+
104
+    do
105
+    {
106
+        result = m_pCM_Get_Device_ID_List_Size(&DeviceIDListSize, DisplayGUID, CM_GETIDLIST_FILTER_CLASS | CM_GETIDLIST_FILTER_PRESENT);
107
+        if (result != CR_SUCCESS)
108
+        {
109
+            break;
110
+        }
111
+
112
+        try
113
+        {
114
+            DeviceIDList.resize(DeviceIDListSize);
115
+        }
116
+        catch (...)
117
+        {
118
+            return false;
119
+        }
120
+        result = m_pCM_Get_Device_ID_List(DisplayGUID, DeviceIDList.data(), DeviceIDListSize, CM_GETIDLIST_FILTER_CLASS | CM_GETIDLIST_FILTER_PRESENT);
121
+
122
+    } while (result == CR_BUFFER_SMALL);
123
+
124
+    if (result != CR_SUCCESS)
125
+    {
126
+        return false;
127
+    }
128
+
129
+    //Look for MediaSDK record
130
+    wchar_t *begin = DeviceIDList.data();
131
+    wchar_t *end = begin + DeviceIDList.size();
132
+    size_t len = 0;
133
+
134
+    for (; (begin < end) && (len = wcslen(begin)) > 0; begin += len + 1)
135
+    {
136
+        if (IsIntelDeviceInstanceID(begin))
137
+        {
138
+            mfxU32 curDeviceID = 0;
139
+            if (!ExctractDeviceID(begin, curDeviceID) || curDeviceID != deviceID)
140
+            {
141
+                continue;
142
+            }
143
+
144
+            result = m_pCM_Locate_DevNode(&DeviceInst, begin, CM_LOCATE_DEVNODE_NORMAL);
145
+            if (result != CR_SUCCESS)
146
+            {
147
+                continue;
148
+            }
149
+
150
+            HKEY hKey_sw;
151
+            result = m_pCM_Open_DevNode_Key(DeviceInst, KEY_READ, 0, RegDisposition_OpenExisting, &hKey_sw, CM_REGISTRY_SOFTWARE);
152
+            if (result != CR_SUCCESS)
153
+            {
154
+                continue;
155
+            }
156
+
157
+            ULONG nError;
158
+
159
+            DWORD pathSize = dwPathSize;
160
+
161
+            nError = RegQueryValueExW(hKey_sw, L"DriverStorePathForMediaSDK", 0, NULL, (LPBYTE)path, &pathSize);
162
+
163
+            RegCloseKey(hKey_sw);
164
+
165
+            if (ERROR_SUCCESS == nError)
166
+            {
167
+                if (path[wcslen(path) - 1] != '/' && path[wcslen(path) - 1] != '\\')
168
+                {
169
+                    wcscat_s(path, MFX_MAX_DLL_PATH, L"\\");
170
+                }
171
+                DISPATCHER_LOG_INFO(("DriverStore path is found\n"));
172
+                return true;
173
+            }
174
+        }
175
+    }
176
+
177
+    DISPATCHER_LOG_INFO(("DriverStore path isn't found\n"));
178
+    return false;
179
+
180
+} // bool DriverStoreLoader::GetDriverStorePath(wchar_t * path, DWORD dwPathSize)
181
+
182
+bool DriverStoreLoader::LoadCfgMgr()
183
+{
184
+    if (!m_moduleCfgMgr)
185
+    {
186
+        m_moduleCfgMgr = mfx_dll_load(L"cfgmgr32.dll");
187
+
188
+        if (!m_moduleCfgMgr)
189
+        {
190
+            DISPATCHER_LOG_WRN(("cfgmgr32.dll couldn't be loaded\n"));
191
+            return false;
192
+        }
193
+    }
194
+
195
+    return true;
196
+
197
+} // bool DriverStoreLoader::LoadCfgMgr()
198
+
199
+bool DriverStoreLoader::LoadCmFuncs()
200
+{
201
+    if (!m_pCM_Get_Device_ID_List || !m_pCM_Get_Device_ID_List_Size || !m_pCM_Locate_DevNode || !m_pCM_Open_DevNode_Key)
202
+    {
203
+        m_pCM_Get_Device_ID_List      = (Func_CM_Get_Device_ID_ListW)      mfx_dll_get_addr((HMODULE)m_moduleCfgMgr, "CM_Get_Device_ID_ListW");
204
+        m_pCM_Get_Device_ID_List_Size = (Func_CM_Get_Device_ID_List_SizeW) mfx_dll_get_addr((HMODULE)m_moduleCfgMgr, "CM_Get_Device_ID_List_SizeW");
205
+        m_pCM_Locate_DevNode          = (Func_CM_Locate_DevNodeW)          mfx_dll_get_addr((HMODULE)m_moduleCfgMgr, "CM_Locate_DevNodeW");
206
+        m_pCM_Open_DevNode_Key        = (Func_CM_Open_DevNode_Key)         mfx_dll_get_addr((HMODULE)m_moduleCfgMgr, "CM_Open_DevNode_Key");
207
+
208
+        if (!m_pCM_Get_Device_ID_List || !m_pCM_Get_Device_ID_List_Size || !m_pCM_Locate_DevNode || !m_pCM_Open_DevNode_Key)
209
+        {
210
+            DISPATCHER_LOG_WRN(("One of cfgmgr32.dll function isn't found\n"));
211
+            return false;
212
+        }
213
+    }
214
+
215
+    return true;
216
+
217
+} // bool DriverStoreLoader::LoadCmFuncs()
218
+
219
+} // namespace MFX
220
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dxva2_device.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_dxva2_device.cpp Changed
253
 
1
@@ -1,34 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_dxva2_device.cpp
29
-
30
-\* ****************************************************************************** */
31
-
32
-#if defined(_WIN32) || defined(_WIN64)
33
+// Copyright (c) 2012-2019 Intel Corporation
34
+//
35
+// Permission is hereby granted, free of charge, to any person obtaining a copy
36
+// of this software and associated documentation files (the "Software"), to deal
37
+// in the Software without restriction, including without limitation the rights
38
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+// copies of the Software, and to permit persons to whom the Software is
40
+// furnished to do so, subject to the following conditions:
41
+//
42
+// The above copyright notice and this permission notice shall be included in all
43
+// copies or substantial portions of the Software.
44
+//
45
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+// SOFTWARE.
52
 
53
 #define INITGUID
54
 #include <d3d9.h>
55
@@ -107,27 +95,27 @@
56
     // unload the module if it is required
57
     UnloadDLLModule();
58
 
59
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
60
+#if !defined(MEDIASDK_UWP_DISPATCHER)
61
     DWORD prevErrorMode = 0;
62
     // set the silent error mode
63
-#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
64
+#if (_WIN32_WINNT >= 0x0600)
65
     SetThreadErrorMode(SEM_FAILCRITICALERRORS, &prevErrorMode); 
66
 #else
67
     prevErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
68
 #endif
69
-#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
70
+#endif // !defined(MEDIASDK_UWP_DISPATCHER)
71
 
72
     // load specified library
73
     m_hModule = LoadLibraryExW(pModuleName, NULL, 0);
74
 
75
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
76
+#if !defined(MEDIASDK_UWP_DISPATCHER)
77
     // set the previous error mode
78
-#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
79
+#if (_WIN32_WINNT >= 0x0600)
80
     SetThreadErrorMode(prevErrorMode, NULL);
81
 #else
82
     SetErrorMode(prevErrorMode);
83
 #endif
84
-#endif //!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
85
+#endif // !defined(MEDIASDK_UWP_DISPATCHER)
86
 
87
 } // void LoadDLLModule(const wchar_t *pModuleName)
88
 
89
@@ -325,6 +313,15 @@
90
     // release the object before initialization
91
     Close();
92
 
93
+    IDXGIFactory1 *pFactory = NULL;
94
+    IDXGIAdapter1 *pAdapter = NULL;
95
+    DXGI_ADAPTER_DESC1 desc = { 0 };
96
+    mfxU32 curAdapter = 0;
97
+    mfxU32 maxAdapters = 0;
98
+    HRESULT hRes = E_FAIL;
99
+
100
+    DXGICreateFactoryFunc pFunc = NULL;
101
+
102
     // load up the library if it is not loaded
103
     if (NULL == m_hModule)
104
     {
105
@@ -333,81 +330,74 @@
106
 
107
     if (m_hModule)
108
     {
109
-        DXGICreateFactoryFunc pFunc = NULL;
110
-        IDXGIFactory1 *pFactory = NULL;
111
-        IDXGIAdapter1 *pAdapter = NULL;
112
-        DXGI_ADAPTER_DESC1 desc = { 0 };
113
-        mfxU32 curAdapter = 0;
114
-        mfxU32 maxAdapters = 0;
115
-        HRESULT hRes = E_FAIL;
116
-
117
         // load address of procedure to create DXGI 1.1 factory
118
-        pFunc = (DXGICreateFactoryFunc) GetProcAddress(m_hModule, "CreateDXGIFactory1");
119
+        pFunc = (DXGICreateFactoryFunc)GetProcAddress(m_hModule, "CreateDXGIFactory1");
120
+    }
121
 
122
-        if (NULL == pFunc)
123
-        {
124
-            return false;
125
-        }
126
+    if (NULL == pFunc)
127
+    {
128
+        return false;
129
+    }
130
 
131
-        // create the factory
132
+    // create the factory
133
 #if _MSC_VER >= 1400
134
-        hRes = pFunc(__uuidof(IDXGIFactory1), (void**) (&pFactory));
135
+    hRes = pFunc(__uuidof(IDXGIFactory1), (void**)(&pFactory));
136
 #else
137
-        hRes = pFunc(IID_IDXGIFactory1, (void**) (&pFactory));
138
+    hRes = pFunc(IID_IDXGIFactory1, (void**)(&pFactory));
139
 #endif
140
+
141
+    if (FAILED(hRes))
142
+    {
143
+        return false;
144
+    }
145
+    m_pDXGIFactory1 = pFactory;
146
+
147
+    // get the number of adapters
148
+    curAdapter = 0;
149
+    maxAdapters = 0;
150
+    do
151
+    {
152
+        // get the required adapted
153
+        hRes = pFactory->EnumAdapters1(curAdapter, &pAdapter);
154
         if (FAILED(hRes))
155
         {
156
-            return false;
157
+            break;
158
         }
159
-        m_pDXGIFactory1 = pFactory;
160
-
161
-        // get the number of adapters
162
-        curAdapter = 0;
163
-        maxAdapters = 0;
164
-        do
165
-        {
166
-            // get the required adapted
167
-            hRes = pFactory->EnumAdapters1(curAdapter, &pAdapter);
168
-            if (FAILED(hRes))
169
-            {
170
-                break;
171
-            }
172
 
173
-            // if it is the required adapter, save the interface
174
-            if (curAdapter == adapterNum)
175
-            {
176
-                m_pDXGIAdapter1 = pAdapter;
177
-            }
178
-            else
179
-            {
180
-                pAdapter->Release();
181
-            }
182
-
183
-            // get the next adapter
184
-            curAdapter += 1;
185
-
186
-        } while (SUCCEEDED(hRes));
187
-        maxAdapters = curAdapter;
188
-
189
-        // there is no required adapter
190
-        if (adapterNum >= maxAdapters)
191
+        // if it is the required adapter, save the interface
192
+        if (curAdapter == adapterNum)
193
         {
194
-            return false;
195
+            m_pDXGIAdapter1 = pAdapter;
196
         }
197
-        pAdapter = (IDXGIAdapter1 *) m_pDXGIAdapter1;
198
-
199
-        // get the adapter's parameters
200
-        hRes = pAdapter->GetDesc1(&desc);
201
-        if (FAILED(hRes))
202
+        else
203
         {
204
-            return false;
205
+            pAdapter->Release();
206
         }
207
 
208
-        // save the parameters
209
-        m_vendorID = desc.VendorId;
210
-        m_deviceID = desc.DeviceId;
211
-        *((LUID *) &m_luid) = desc.AdapterLuid;
212
+        // get the next adapter
213
+        curAdapter += 1;
214
+
215
+    } while (SUCCEEDED(hRes));
216
+    maxAdapters = curAdapter;
217
+
218
+    // there is no required adapter
219
+    if (adapterNum >= maxAdapters)
220
+    {
221
+        return false;
222
     }
223
+    pAdapter = (IDXGIAdapter1 *) m_pDXGIAdapter1;
224
+
225
+    // get the adapter's parameters
226
+    hRes = pAdapter->GetDesc1(&desc);
227
+    if (FAILED(hRes))
228
+    {
229
+        return false;
230
+    }
231
+
232
+    // save the parameters
233
+    m_vendorID = desc.VendorId;
234
+    m_deviceID = desc.DeviceId;
235
+    *((LUID *) &m_luid) = desc.AdapterLuid;
236
 
237
     return true;
238
 
239
@@ -455,6 +445,7 @@
240
         return false;
241
     }
242
 
243
+
244
     m_numAdapters = d3d9Device.GetAdapterCount();
245
 
246
     // check if the application is under Remote Desktop
247
@@ -574,4 +565,4 @@
248
     return m_numAdapters;
249
 
250
 } // mfxU32 DXVA2Device::GetAdapterCount(void) const
251
-#endif
252
+
253
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_function_table.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_function_table.cpp Changed
97
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2014 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_function_table.cpp
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2012-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #include "mfx_dispatcher.h"
52
 
53
@@ -86,9 +76,9 @@
54
 mfxStatus pseudoMFXInit(mfxIMPL impl, mfxVersion *ver, mfxSession *session)
55
 {
56
     // touch unreferenced parameters
57
-    impl = impl;
58
-    ver = ver;
59
-    session = session;
60
+    (void) impl;
61
+    (void) ver;
62
+    (void) session;
63
 
64
     return MFX_ERR_UNKNOWN;
65
 
66
@@ -97,7 +87,7 @@
67
 mfxStatus pseudoMFXClose(mfxSession session)
68
 {
69
     // touch unreferenced parameters
70
-    session = session;
71
+    (void) session;
72
 
73
     return MFX_ERR_UNKNOWN;
74
 
75
@@ -106,8 +96,8 @@
76
 mfxStatus pseudoMFXJoinSession(mfxSession session, mfxSession child_session)
77
 {
78
     // touch unreferenced parameters
79
-    session = session;
80
-    child_session = child_session;
81
+    (void) session;
82
+    (void) child_session;
83
 
84
     return MFX_ERR_UNKNOWN;
85
 
86
@@ -116,8 +106,8 @@
87
 mfxStatus pseudoMFXCloneSession(mfxSession session, mfxSession *clone)
88
 {
89
     // touch unreferenced parameters
90
-    session = session;
91
-    clone = clone;
92
+    (void) session;
93
+    (void) clone;
94
 
95
     return MFX_ERR_UNKNOWN;
96
 
97
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_library_iterator.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_library_iterator.cpp Changed
431
 
1
@@ -1,34 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_library_iterator.cpp
29
-
30
-\* ****************************************************************************** */
31
-
32
-#if defined(_WIN32) || defined(_WIN64)
33
+// Copyright (c) 2012-2020 Intel Corporation
34
+//
35
+// Permission is hereby granted, free of charge, to any person obtaining a copy
36
+// of this software and associated documentation files (the "Software"), to deal
37
+// in the Software without restriction, including without limitation the rights
38
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+// copies of the Software, and to permit persons to whom the Software is
40
+// furnished to do so, subject to the following conditions:
41
+//
42
+// The above copyright notice and this permission notice shall be included in all
43
+// copies or substantial portions of the Software.
44
+//
45
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+// SOFTWARE.
52
 
53
 #include "mfx_library_iterator.h"
54
 
55
@@ -41,8 +29,6 @@
56
 #include <tchar.h>
57
 #include <windows.h>
58
 
59
-#include <vector>
60
-
61
 namespace MFX
62
 {
63
 
64
@@ -74,7 +60,11 @@
65
     {
66
         return MFX_ERR_NULL_PTR;
67
     }
68
+#if (MFX_VERSION >= MFX_VERSION_NEXT)
69
+    mfxIMPL impl_via = (*pImplInterface & ~MFX_IMPL_EXTERNAL_THREADING);
70
+#else
71
     mfxIMPL impl_via = *pImplInterface;
72
+#endif
73
 
74
     DXVA2Device dxvaDevice;
75
     if (MFX_IMPL_VIA_D3D9 == impl_via)
76
@@ -82,7 +72,7 @@
77
         // try to create the Direct3D 9 device and find right adapter
78
         if (!dxvaDevice.InitD3D9(adapterNum))
79
         {
80
-            DISPATCHER_LOG_INFO((("dxvaDevice.InitD3D9(%d) Failed "), adapterNum ));
81
+            DISPATCHER_LOG_INFO((("dxvaDevice.InitD3D9(%d) Failed\n"), adapterNum ));
82
             return MFX_ERR_UNSUPPORTED;
83
         }
84
     }
85
@@ -91,7 +81,7 @@
86
         // try to open DXGI 1.1 device to get hardware ID
87
         if (!dxvaDevice.InitDXGI1(adapterNum))
88
         {
89
-            DISPATCHER_LOG_INFO((("dxvaDevice.InitDXGI1(%d) Failed "), adapterNum ));
90
+            DISPATCHER_LOG_INFO((("dxvaDevice.InitDXGI1(%d) Failed\n"), adapterNum ));
91
             return MFX_ERR_UNSUPPORTED;
92
         }
93
     }
94
@@ -109,13 +99,13 @@
95
         }
96
         else
97
         {
98
-            DISPATCHER_LOG_INFO((("Unsupported adapter %d "), adapterNum ));
99
+            DISPATCHER_LOG_INFO((("Unsupported adapter %d\n"), adapterNum ));
100
             return MFX_ERR_UNSUPPORTED;
101
         }
102
     }
103
     else
104
     {
105
-        DISPATCHER_LOG_ERROR((("Unknown implementation type %d "), *pImplInterface ));
106
+        DISPATCHER_LOG_ERROR((("Unknown implementation type %d\n"), *pImplInterface ));
107
         return MFX_ERR_UNSUPPORTED;
108
     }
109
 
110
@@ -130,6 +120,9 @@
111
 }
112
 
113
 MFXLibraryIterator::MFXLibraryIterator(void)
114
+#if !defined(MEDIASDK_UWP_DISPATCHER)
115
+    : m_baseRegKey()
116
+#endif
117
 {
118
     m_implType = MFX_LIB_PSEUDO;
119
     m_implInterface = MFX_IMPL_UNSUPPORTED;
120
@@ -168,7 +161,7 @@
121
 
122
 DECLSPEC_NOINLINE HMODULE GetThisDllModuleHandle()
123
 {
124
-  HMODULE hDll = HMODULE(-1);
125
+  HMODULE hDll = NULL;
126
 
127
   GetModuleHandleExW( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS |
128
                       GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,
129
@@ -176,8 +169,8 @@
130
   return hDll;
131
 }
132
 
133
-// msdk_disp_char* sImplPath must be allocated with size not less then msdk_disp_path_len
134
-bool GetImplPath(int storageID, msdk_disp_char* sImplPath)
135
+// wchar_t* sImplPath must be allocated with size not less then msdk_disp_path_len
136
+bool GetImplPath(int storageID, wchar_t* sImplPath)
137
 {
138
     HMODULE hModule = NULL;
139
 
140
@@ -187,17 +180,13 @@
141
     case MFX_APP_FOLDER:
142
         hModule = 0;
143
         break;
144
-
145
-#if defined(MEDIASDK_UWP_LOADER) || defined(MEDIASDK_UWP_PROCTABLE)
146
     case MFX_PATH_MSDK_FOLDER:
147
         hModule = GetThisDllModuleHandle();
148
+        HMODULE exeModule = GetModuleHandleW(NULL);
149
+        //It should works only if Dispatcher is linked with Dynamic Linked Library
150
+        if (!hModule || !exeModule || hModule == exeModule)
151
+            return false;
152
         break;
153
-#endif
154
-
155
-    }
156
-
157
-    if(hModule == HMODULE(-1)) {
158
-        return false;
159
     }
160
 
161
     DWORD nSize = 0;
162
@@ -214,7 +203,7 @@
163
     // for any case because WinXP implementation of GetModuleFileName does not add \0 to the end of string
164
     sImplPath[nSize] = L'\0';
165
 
166
-    msdk_disp_char * dirSeparator = wcsrchr(sImplPath, L'\\');
167
+    wchar_t * dirSeparator = wcsrchr(sImplPath, L'\\');
168
     if (dirSeparator != NULL && dirSeparator < (sImplPath + msdk_disp_path_len))
169
     {
170
         *++dirSeparator = 0;
171
@@ -235,27 +224,57 @@
172
     Release();
173
     m_StorageID = storageID;
174
     m_lastLibIndex = 0;
175
+    m_implType = implType;
176
+    m_implInterface = implInterface != 0
177
+        ? implInterface
178
+        : MFX_IMPL_VIA_ANY;
179
 
180
-#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
181
+    // for HW impl check impl interface, check adapter, obtain deviceID and vendorID
182
+    if (m_implType != MFX_LIB_SOFTWARE)
183
+    {
184
+        mfxStatus mfxRes = MFX::SelectImplementationType(adapterNum, &m_implInterface, &m_vendorID, &m_deviceID);
185
+        if (MFX_ERR_NONE != mfxRes)
186
+        {
187
+            return mfxRes;
188
+        }
189
+    }
190
+
191
+#if !defined(MEDIASDK_UWP_DISPATCHER)
192
     if (storageID == MFX_CURRENT_USER_KEY || storageID == MFX_LOCAL_MACHINE_KEY)
193
     {
194
-        return InitRegistry(implType, implInterface, adapterNum, storageID);
195
+        return InitRegistry(storageID);
196
+    }
197
+
198
+#if defined(MFX_TRACER_WA_FOR_DS)
199
+    if (storageID == MFX_TRACER)
200
+    {
201
+        return InitRegistryTracer();
202
     }
203
 #endif
204
 
205
-    msdk_disp_char  sCurrentModulePath[msdk_disp_path_len];
206
+#endif
207
+
208
+    wchar_t  sMediaSDKPath[msdk_disp_path_len] = {};
209
 
210
-    if(!GetImplPath(storageID, sCurrentModulePath)) {
211
+    if (storageID == MFX_DRIVER_STORE)
212
+    {
213
+        if (!m_driverStoreLoader.GetDriverStorePath(sMediaSDKPath, sizeof(sMediaSDKPath), m_deviceID))
214
+        {
215
+            return MFX_ERR_UNSUPPORTED;
216
+        }
217
+    }
218
+    else if(!GetImplPath(storageID, sMediaSDKPath))
219
+    {
220
         return MFX_ERR_UNSUPPORTED;
221
     }
222
 
223
-    return InitFolder(implType, implInterface, adapterNum, sCurrentModulePath);
224
+    return InitFolder(implType, sMediaSDKPath, storageID);
225
 
226
 } // mfxStatus MFXLibraryIterator::Init(eMfxImplType implType, const mfxU32 adapterNum, int storageID)
227
 
228
-mfxStatus MFXLibraryIterator::InitRegistry(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID)
229
+mfxStatus MFXLibraryIterator::InitRegistry(int storageID)
230
 {
231
-#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
232
+#if !defined(MEDIASDK_UWP_DISPATCHER)
233
     HKEY rootHKey;
234
     bool bRes;
235
 
236
@@ -270,22 +289,6 @@
237
             return MFX_ERR_UNKNOWN;
238
     }
239
 
240
-    // set the required library's implementation type
241
-    m_implType = implType;
242
-    m_implInterface = implInterface != 0
243
-        ? implInterface
244
-        : MFX_IMPL_VIA_ANY;
245
-
246
-    //deviceID and vendorID are not actual for SW library loading
247
-    if (m_implType != MFX_LIB_SOFTWARE)
248
-    {
249
-        mfxStatus mfxRes = MFX::SelectImplementationType(adapterNum, &m_implInterface, &m_vendorID, &m_deviceID);
250
-        if (MFX_ERR_NONE != mfxRes)
251
-        {
252
-            return mfxRes;
253
-        }
254
-    }
255
-
256
     DISPATCHER_LOG_INFO((("Inspecting %s\\%S\n"),
257
         (MFX_LOCAL_MACHINE_KEY == storageID) ? ("HKEY_LOCAL_MACHINE") : ("HKEY_CURRENT_USER"),
258
         rootDispPath))
259
@@ -293,45 +296,53 @@
260
     return MFX_ERR_NONE;
261
 #else
262
     (void) storageID;
263
-    (void) adapterNum;
264
-    (void) implInterface;
265
-    (void) implType;
266
     return MFX_ERR_UNSUPPORTED;
267
-#endif // #if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
268
+#endif // #if !defined(MEDIASDK_UWP_DISPATCHER)
269
 
270
-} // mfxStatus MFXLibraryIterator::InitRegistry(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, int storageID)
271
+} // mfxStatus MFXLibraryIterator::InitRegistry(int storageID)
272
 
273
-mfxStatus MFXLibraryIterator::InitFolder(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, const msdk_disp_char * path)
274
+#if defined(MFX_TRACER_WA_FOR_DS)
275
+mfxStatus MFXLibraryIterator::InitRegistryTracer()
276
 {
277
-     const int maxPathLen = sizeof(m_path)/sizeof(m_path[0]);
278
-     m_path[0] = 0;
279
-     msdk_disp_char_cpy_s(m_path, maxPathLen, path);
280
-     size_t pathLen = wcslen(m_path);
281
+#if !defined(MEDIASDK_UWP_DISPATCHER)
282
+
283
+    const wchar_t tracerRegKeyPath[] = L"Software\\Intel\\MediaSDK\\Dispatch\\tracer";
284
+
285
+    if (!m_baseRegKey.Open(HKEY_LOCAL_MACHINE, tracerRegKeyPath, KEY_READ) && !m_baseRegKey.Open(HKEY_CURRENT_USER, tracerRegKeyPath, KEY_READ))
286
+    {
287
+        DISPATCHER_LOG_WRN(("can't find tracer registry key\n"))
288
+        return MFX_ERR_UNKNOWN;
289
+    }
290
+
291
+    DISPATCHER_LOG_INFO(("found tracer registry key\n"))
292
+    return MFX_ERR_NONE;
293
 
294
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
295
-     // we looking for runtime in application folder, it should be named libmfxsw64 or libmfxsw32
296
-     mfx_get_default_dll_name(m_path + pathLen, msdk_disp_path_len - pathLen,  MFX_LIB_SOFTWARE);
297
 #else
298
-     mfx_get_default_dll_name(m_path + pathLen, msdk_disp_path_len - pathLen, implType);
299
+    return MFX_ERR_UNSUPPORTED;
300
+#endif // #if !defined(MEDIASDK_UWP_DISPATCHER)
301
+
302
+} // mfxStatus MFXLibraryIterator::InitRegistryTracer()
303
 #endif
304
 
305
-     // set the required library's implementation type
306
-     m_implType = implType;
307
-     m_implInterface = implInterface != 0
308
-         ? implInterface
309
-         : MFX_IMPL_VIA_ANY;
310
+mfxStatus MFXLibraryIterator::InitFolder(eMfxImplType implType, const wchar_t * path, const int storageID)
311
+{
312
+     const int maxPathLen = sizeof(m_path)/sizeof(m_path[0]);
313
+     m_path[0] = 0;
314
+     wcscpy_s(m_path, maxPathLen, path);
315
+     size_t pathLen = wcslen(m_path);
316
 
317
-     //deviceID and vendorID are not actual for SW library loading
318
-     if (m_implType != MFX_LIB_SOFTWARE)
319
+     if(storageID==MFX_APP_FOLDER)
320
+     {
321
+         // we looking for runtime in application folder, it should be named libmfxsw64 or libmfxsw32
322
+         mfx_get_default_dll_name(m_path + pathLen, msdk_disp_path_len - pathLen,  MFX_LIB_SOFTWARE);
323
+     }
324
+     else
325
      {
326
-         mfxStatus mfxRes = MFX::SelectImplementationType(adapterNum, &m_implInterface, &m_vendorID, &m_deviceID);
327
-         if (MFX_ERR_NONE != mfxRes)
328
-         {
329
-             return mfxRes;
330
-         }
331
+         mfx_get_default_dll_name(m_path + pathLen, msdk_disp_path_len - pathLen, implType);
332
      }
333
+
334
      return MFX_ERR_NONE;
335
-} // mfxStatus MFXLibraryIterator::InitFolder(eMfxImplType implType, mfxIMPL implInterface, const mfxU32 adapterNum, const msdk_disp_char * path)
336
+} // mfxStatus MFXLibraryIterator::InitFolder(eMfxImplType implType, const wchar_t * path, const int storageID)
337
 
338
 mfxStatus MFXLibraryIterator::SelectDLLVersion(wchar_t *pPath
339
                                              , size_t pathSize
340
@@ -347,30 +358,48 @@
341
             return MFX_ERR_UNKNOWN;
342
 
343
         m_lastLibIndex = 1;
344
-        msdk_disp_char_cpy_s(pPath, pathSize, m_path);
345
+        wcscpy_s(pPath, pathSize, m_path);
346
         *pImplType = MFX_LIB_SOFTWARE;
347
         return MFX_ERR_NONE;
348
     }
349
 
350
-#if defined(MEDIASDK_UWP_LOADER) || defined(MEDIASDK_UWP_PROCTABLE)
351
-
352
-    if (m_StorageID == MFX_PATH_MSDK_FOLDER) {
353
-
354
+    if (m_StorageID == MFX_PATH_MSDK_FOLDER || m_StorageID == MFX_DRIVER_STORE)
355
+    {
356
         if (m_lastLibIndex != 0)
357
             return MFX_ERR_NOT_FOUND;
358
         if (m_vendorID != INTEL_VENDOR_ID)
359
             return MFX_ERR_UNKNOWN;
360
 
361
         m_lastLibIndex = 1;
362
-        msdk_disp_char_cpy_s(pPath, pathSize, m_path);
363
+        wcscpy_s(pPath, pathSize, m_path);
364
         // do not change impl type
365
-        //*pImplType = MFX_LIB_HARDWARE;
366
         return MFX_ERR_NONE;
367
     }
368
 
369
+#if !defined(MEDIASDK_UWP_DISPATCHER)
370
+
371
+#if defined(MFX_TRACER_WA_FOR_DS)
372
+    if (m_StorageID == MFX_TRACER)
373
+    {
374
+        if (m_lastLibIndex != 0)
375
+            return MFX_ERR_NOT_FOUND;
376
+        if (m_vendorID != INTEL_VENDOR_ID)
377
+            return MFX_ERR_UNKNOWN;
378
+
379
+        m_lastLibIndex = 1;
380
+
381
+        if (m_baseRegKey.Query(pathKeyName, REG_SZ, (LPBYTE)pPath, (DWORD*)&pathSize))
382
+        {
383
+            DISPATCHER_LOG_INFO((("loaded %S : %S\n"), pathKeyName, pPath));
384
+        }
385
+        else
386
+        {
387
+            DISPATCHER_LOG_WRN((("error querying %S : RegQueryValueExA()==0x%x\n"), pathKeyName, GetLastError()));
388
+        }
389
+        return MFX_ERR_NONE;
390
+    }
391
 #endif
392
 
393
-#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
394
     wchar_t libPath[MFX_MAX_DLL_PATH] = L"";
395
     DWORD libIndex = 0;
396
     DWORD libMerit = 0;
397
@@ -503,8 +532,8 @@
398
                         {
399
                             DISPATCHER_LOG_INFO((("loaded %S : %S\n"), pathKeyName, tmpPath));
400
 
401
-                            msdk_disp_char_cpy_s(libPath, sizeof(libPath) / sizeof(libPath[0]), tmpPath);
402
-                            msdk_disp_char_cpy_s(m_SubKeyName, sizeof(m_SubKeyName) / sizeof(m_SubKeyName[0]), subKeyName);
403
+                            wcscpy_s(libPath, sizeof(libPath) / sizeof(libPath[0]), tmpPath);
404
+                            wcscpy_s(m_SubKeyName, sizeof(m_SubKeyName) / sizeof(m_SubKeyName[0]), subKeyName);
405
 
406
                             libMerit = merit;
407
                             libIndex = index;
408
@@ -538,7 +567,7 @@
409
         return MFX_ERR_NOT_FOUND;
410
     }
411
 
412
-    msdk_disp_char_cpy_s(pPath, pathSize, libPath);
413
+    wcscpy_s(pPath, pathSize, libPath);
414
 
415
     m_lastLibIndex = libIndex;
416
     m_lastLibMerit = libMerit;
417
@@ -555,11 +584,9 @@
418
     return m_implInterface;
419
 } // mfxIMPL MFXLibraryIterator::GetImplementationType()
420
 
421
-bool MFXLibraryIterator::GetSubKeyName(msdk_disp_char *subKeyName, size_t length) const
422
+bool MFXLibraryIterator::GetSubKeyName(wchar_t *subKeyName, size_t length) const
423
 {
424
-    msdk_disp_char_cpy_s(subKeyName, length, m_SubKeyName);
425
+    wcscpy_s(subKeyName, length, m_SubKeyName);
426
     return m_bIsSubKeyValid;
427
 }
428
 } // namespace MFX
429
-#endif // #if defined(_WIN32) || defined(_WIN64)
430
-
431
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_dll.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_dll.cpp Changed
249
 
1
@@ -1,34 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_load_dll.cpp
29
-
30
-\* ****************************************************************************** */
31
-
32
-#if defined(_WIN32) || defined(_WIN64)
33
+// Copyright (c) 2012-2019 Intel Corporation
34
+//
35
+// Permission is hereby granted, free of charge, to any person obtaining a copy
36
+// of this software and associated documentation files (the "Software"), to deal
37
+// in the Software without restriction, including without limitation the rights
38
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+// copies of the Software, and to permit persons to whom the Software is
40
+// furnished to do so, subject to the following conditions:
41
+//
42
+// The above copyright notice and this permission notice shall be included in all
43
+// copies or substantial portions of the Software.
44
+//
45
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+// SOFTWARE.
52
 
53
 #include "mfx_dispatcher.h"
54
 #include "mfx_load_dll.h"
55
@@ -37,8 +25,6 @@
56
 #include <string.h>
57
 #include <windows.h>
58
 
59
-#if !defined(_DEBUG)
60
-
61
 #if defined(_WIN64)
62
 const
63
 wchar_t * const defaultDLLName[2] = {L"libmfxhw64.dll",
64
@@ -51,6 +37,11 @@
65
 wchar_t  * const defaultPluginDLLName[2] = {L"mfxplugin64_hw.dll",
66
                                             L"mfxplugin64_sw.dll"};
67
 
68
+#if defined(MEDIASDK_UWP_DISPATCHER)
69
+const
70
+wchar_t  * const IntelGFXAPIDLLName = {L"intel_gfx_api-x64.dll"};
71
+#endif
72
+
73
 #elif defined(_WIN32)
74
 const
75
 wchar_t * const defaultDLLName[2] = {L"libmfxhw32.dll",
76
@@ -64,45 +55,18 @@
77
 wchar_t  * const defaultPluginDLLName[2] = {L"mfxplugin32_hw.dll",
78
                                             L"mfxplugin32_sw.dll"};
79
 
80
-#endif // (defined(_WIN64))
81
-
82
-#else // defined(_DEBUG)
83
-
84
-#if defined(_WIN64)
85
+#if defined(MEDIASDK_UWP_DISPATCHER)
86
 const
87
-wchar_t * const defaultDLLName[2] = {L"libmfxhw64_d.dll",
88
-                                     L"libmfxsw64_d.dll"};
89
-const
90
-wchar_t * const defaultAudioDLLName[2] = {L"libmfxaudiosw64_d.dll",
91
-                                          L"libmfxaudiosw64_d.dll"};
92
-
93
-const 
94
-wchar_t  * const defaultPluginDLLName[2] = {L"mfxplugin64_hw_d.dll",
95
-                                            L"mfxplugin64_sw_d.dll"};
96
-
97
-#elif defined(WIN32)
98
-const
99
-wchar_t * const defaultDLLName[2] = {L"libmfxhw32_d.dll",
100
-                                     L"libmfxsw32_d.dll"};
101
-
102
-
103
-const
104
-wchar_t * const defaultAudioDLLName[2] = {L"libmfxaudiosw32_d.dll",
105
-                                          L"libmfxaudiosw32_d.dll"};
106
-
107
-const 
108
-wchar_t  * const defaultPluginDLLName[2] = {L"mfxplugin32_hw_d.dll",
109
-                                            L"mfxplugin32_sw_d.dll"};
110
+wchar_t  * const IntelGFXAPIDLLName = {L"intel_gfx_api-x86.dll"};
111
+#endif
112
 
113
 #endif // (defined(_WIN64))
114
 
115
-#endif // !defined(_DEBUG)
116
-
117
 namespace MFX
118
 {
119
 
120
 
121
-mfxStatus mfx_get_default_dll_name(msdk_disp_char *pPath, size_t pathSize, eMfxImplType implType)
122
+mfxStatus mfx_get_default_dll_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType)
123
 {
124
     if (!pPath)
125
     {
126
@@ -120,7 +84,25 @@
127
 #endif
128
 } // mfxStatus mfx_get_default_dll_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType)
129
 
130
-mfxStatus mfx_get_default_plugin_name(msdk_disp_char *pPath, size_t pathSize, eMfxImplType implType)
131
+#if defined(MEDIASDK_UWP_DISPATCHER)
132
+mfxStatus mfx_get_default_intel_gfx_api_dll_name(wchar_t *pPath, size_t pathSize)
133
+{
134
+    if (!pPath)
135
+    {
136
+        return MFX_ERR_NULL_PTR;
137
+    }
138
+
139
+#if _MSC_VER >= 1400
140
+    return 0 == wcscpy_s(pPath, pathSize, IntelGFXAPIDLLName)
141
+        ? MFX_ERR_NONE : MFX_ERR_UNKNOWN;
142
+#else
143
+    wcscpy(pPath, IntelGFXAPIDLLName);
144
+    return MFX_ERR_NONE;
145
+#endif
146
+} // mfx_get_default_intel_gfx_api_dll_name(wchar_t *pPath, size_t pathSize)
147
+#endif
148
+
149
+mfxStatus mfx_get_default_plugin_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType)
150
 {
151
     if (!pPath)
152
     {
153
@@ -138,7 +120,7 @@
154
 #endif
155
 }
156
 
157
-mfxStatus mfx_get_default_audio_dll_name(msdk_disp_char *pPath, size_t pathSize, eMfxImplType implType)
158
+mfxStatus mfx_get_default_audio_dll_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType)
159
 {
160
     if (!pPath)
161
     {
162
@@ -155,7 +137,7 @@
163
 #endif
164
 } // mfxStatus mfx_get_default_audio_dll_name(wchar_t *pPath, size_t pathSize, eMfxImplType implType)
165
 
166
-mfxModuleHandle mfx_dll_load(const msdk_disp_char *pFileName)
167
+mfxModuleHandle mfx_dll_load(const wchar_t *pFileName)
168
 {
169
     mfxModuleHandle hModule = (mfxModuleHandle) 0;
170
 
171
@@ -164,27 +146,29 @@
172
     {
173
         return NULL;
174
     }
175
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
176
+#if !defined(MEDIASDK_UWP_DISPATCHER)
177
     // set the silent error mode
178
     DWORD prevErrorMode = 0;
179
-#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
180
+#if (_WIN32_WINNT >= 0x0600)
181
     SetThreadErrorMode(SEM_FAILCRITICALERRORS, &prevErrorMode);
182
 #else
183
     prevErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
184
 #endif
185
-#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
186
+#endif // !defined(MEDIASDK_UWP_DISPATCHER)
187
 
188
-        // load the library's module
189
-        hModule = LoadLibraryExW(pFileName, NULL, 0);
190
+    // load the library's module
191
+#if !defined(MEDIASDK_ARM_LOADER)
192
+    hModule = LoadLibraryExW(pFileName, NULL, 0);
193
+#endif
194
 
195
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
196
-        // set the previous error mode
197
-#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
198
+#if !defined(MEDIASDK_UWP_DISPATCHER)
199
+    // set the previous error mode
200
+#if (_WIN32_WINNT >= 0x0600)
201
     SetThreadErrorMode(prevErrorMode, NULL);
202
 #else
203
     SetErrorMode(prevErrorMode);
204
 #endif
205
-#endif // !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
206
+#endif // !defined(MEDIASDK_UWP_DISPATCHER)
207
 
208
     return hModule;
209
 
210
@@ -212,8 +196,8 @@
211
     return !!bRes;
212
 } // bool mfx_dll_free(mfxModuleHandle handle)
213
 
214
-#if !defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
215
-mfxModuleHandle mfx_get_dll_handle(const msdk_disp_char *pFileName)
216
+#if !defined(MEDIASDK_UWP_DISPATCHER)
217
+mfxModuleHandle mfx_get_dll_handle(const wchar_t *pFileName)
218
 {
219
     mfxModuleHandle hModule = (mfxModuleHandle) 0;
220
 
221
@@ -225,7 +209,7 @@
222
 
223
     // set the silent error mode
224
     DWORD prevErrorMode = 0;
225
-#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
226
+#if (_WIN32_WINNT >= 0x0600)
227
     SetThreadErrorMode(SEM_FAILCRITICALERRORS, &prevErrorMode); 
228
 #else
229
     prevErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS);
230
@@ -233,16 +217,14 @@
231
     // load the library's module
232
     GetModuleHandleExW(0, pFileName, (HMODULE*) &hModule);
233
     // set the previous error mode
234
-#if (_WIN32_WINNT >= 0x0600) && !(__GNUC__)
235
+#if (_WIN32_WINNT >= 0x0600)
236
     SetThreadErrorMode(prevErrorMode, NULL);
237
 #else
238
     SetErrorMode(prevErrorMode);
239
 #endif
240
     return hModule;
241
 }
242
-#endif //!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE)
243
-
244
+#endif //!defined(MEDIASDK_UWP_DISPATCHER)
245
 
246
 } // namespace MFX
247
 
248
-#endif // #if defined(_WIN32) || defined(_WIN64)
249
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_plugin.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_load_plugin.cpp Changed
135
 
1
@@ -1,32 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_load_plugin.h
29
-
30
-\* ****************************************************************************** */
31
+// Copyright (c) 2013-2019 Intel Corporation
32
+//
33
+// Permission is hereby granted, free of charge, to any person obtaining a copy
34
+// of this software and associated documentation files (the "Software"), to deal
35
+// in the Software without restriction, including without limitation the rights
36
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+// copies of the Software, and to permit persons to whom the Software is
38
+// furnished to do so, subject to the following conditions:
39
+//
40
+// The above copyright notice and this permission notice shall be included in all
41
+// copies or substantial portions of the Software.
42
+//
43
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
49
+// SOFTWARE.
50
 
51
 #include "mfx_load_plugin.h"
52
 #include "mfx_load_dll.h"
53
@@ -48,7 +38,7 @@
54
     : mHmodule(mfx_dll_load(that.mPath))
55
     , mCreatePluginPtr(that.mCreatePluginPtr)
56
 {
57
-    msdk_disp_char_cpy_s(mPath, sizeof(mPath) / sizeof(*mPath), that.mPath);
58
+    wcscpy_s(mPath, sizeof(mPath) / sizeof(*mPath), that.mPath);
59
 }
60
 
61
 MFX::PluginModule & MFX::PluginModule::operator = (const MFX::PluginModule & that)
62
@@ -58,20 +48,20 @@
63
         Tidy();
64
         mHmodule = mfx_dll_load(that.mPath);
65
         mCreatePluginPtr = that.mCreatePluginPtr;
66
-        msdk_disp_char_cpy_s(mPath, sizeof(mPath) / sizeof(*mPath), that.mPath);
67
+        wcscpy_s(mPath, sizeof(mPath) / sizeof(*mPath), that.mPath);
68
     }
69
     return *this;
70
 }
71
 
72
-MFX::PluginModule::PluginModule(const msdk_disp_char * path)
73
+MFX::PluginModule::PluginModule(const wchar_t * path)
74
     : mCreatePluginPtr()
75
 {
76
     mHmodule = mfx_dll_load(path);
77
     if (NULL == mHmodule) {
78
-        TRACE_PLUGIN_ERROR("Cannot load module: %S\n", MSDK2WIDE(path));
79
+        TRACE_PLUGIN_ERROR("Cannot load module: %S\n", path);
80
         return ;
81
     }
82
-    TRACE_PLUGIN_INFO("Plugin loaded at: %S\n", MSDK2WIDE(path));
83
+    TRACE_PLUGIN_INFO("Plugin loaded at: %S\n", path);
84
 
85
     mCreatePluginPtr = (CreatePluginPtr_t)mfx_dll_get_addr(mHmodule, CREATE_PLUGIN_FNC);
86
     if (NULL == mCreatePluginPtr) {
87
@@ -79,7 +69,7 @@
88
         return ;
89
     }
90
 
91
-    msdk_disp_char_cpy_s(mPath, sizeof(mPath) / sizeof(*mPath), path);
92
+    wcscpy_s(mPath, sizeof(mPath) / sizeof(*mPath), path);
93
 }
94
 
95
 bool MFX::PluginModule::Create( mfxPluginUID uid, mfxPlugin& plg)
96
@@ -90,9 +80,9 @@
97
         mfxStatus mfxResult = mCreatePluginPtr(uid, &plg);
98
         result = (MFX_ERR_NONE == mfxResult);
99
         if (!result) {
100
-            TRACE_PLUGIN_ERROR("\"%S::%s\" returned %d\n", MSDK2WIDE(mPath), CREATE_PLUGIN_FNC, mfxResult);
101
+            TRACE_PLUGIN_ERROR("\"%S::%s\" returned %d\n", mPath, CREATE_PLUGIN_FNC, mfxResult);
102
         } else {
103
-            TRACE_PLUGIN_INFO("\"%S::%s\" SUCCEED\n", MSDK2WIDE(mPath), CREATE_PLUGIN_FNC);
104
+            TRACE_PLUGIN_INFO("\"%S::%s\" SUCCEED\n", mPath, CREATE_PLUGIN_FNC);
105
         }
106
     }
107
     return result;
108
@@ -110,7 +100,7 @@
109
     Tidy();
110
 }
111
 
112
-#if !defined(MEDIASDK_UWP_PROCTABLE)
113
+#if !defined(MEDIASDK_UWP_DISPATCHER)
114
 
115
 bool MFX::MFXPluginFactory::RunVerification( const mfxPlugin & plg, const PluginDescriptionRecord &dsc, mfxPluginParam &pluginParams)
116
 {
117
@@ -413,7 +403,8 @@
118
     Close();
119
 }
120
 
121
-MFX::MFXPluginFactory::MFXPluginFactory( mfxSession session )
122
+MFX::MFXPluginFactory::MFXPluginFactory( mfxSession session ) :
123
+    mPlugins()
124
 {
125
     mSession = session;
126
     nPlugins = 0;
127
@@ -460,4 +451,4 @@
128
     }
129
 }
130
 
131
-#endif //!defined(MEDIASDK_UWP_PROCTABLE)
132
\ No newline at end of file
133
+#endif //!defined(MEDIASDK_UWP_DISPATCHER)
134
\ No newline at end of file
135
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_plugin_hive.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_plugin_hive.cpp Changed
511
 
1
@@ -1,34 +1,22 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2013-2018 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_plugin_hive.cpp
29
-
30
-\* ****************************************************************************** */
31
-
32
-#if defined(_WIN32) || defined(_WIN64)
33
+// Copyright (c) 2013-2019 Intel Corporation
34
+//
35
+// Permission is hereby granted, free of charge, to any person obtaining a copy
36
+// of this software and associated documentation files (the "Software"), to deal
37
+// in the Software without restriction, including without limitation the rights
38
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
39
+// copies of the Software, and to permit persons to whom the Software is
40
+// furnished to do so, subject to the following conditions:
41
+//
42
+// The above copyright notice and this permission notice shall be included in all
43
+// copies or substantial portions of the Software.
44
+//
45
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
46
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
47
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
48
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
49
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
50
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
51
+// SOFTWARE.
52
 
53
 #include "mfx_plugin_hive.h"
54
 #include "mfx_library_iterator.h"
55
@@ -40,7 +28,7 @@
56
 #define TRACE_HIVE_INFO(str, ...) DISPATCHER_LOG_INFO((("[HIVE]: " str), __VA_ARGS__))
57
 #define TRACE_HIVE_WRN(str, ...) DISPATCHER_LOG_WRN((("[HIVE]: " str), __VA_ARGS__))
58
 
59
-namespace 
60
+namespace
61
 {
62
     const wchar_t rootPluginPath[] = L"Software\\Intel\\MediaSDK\\Plugin";
63
     const wchar_t rootDispatchPath[] = L"Software\\Intel\\MediaSDK\\Dispatch";
64
@@ -54,7 +42,7 @@
65
     const wchar_t APIVerKeyName[] = L"APIVersion";
66
 }
67
 
68
-namespace 
69
+namespace
70
 {
71
 #ifdef _WIN64
72
     const wchar_t pluginFileName[] = L"FileName64";
73
@@ -71,7 +59,7 @@
74
     const mfxU32 defaultPluginNameLen = 25;
75
     const mfxU32 charsPermfxU8 = 2;
76
     const mfxU32 slashLen = 1;
77
-    enum 
78
+    enum
79
     {
80
         MAX_PLUGIN_FILE_LINE = 4096
81
     };
82
@@ -79,10 +67,11 @@
83
     #define alignStr() "%-14S"
84
 }
85
 
86
-MFX::MFXPluginsInHive::MFXPluginsInHive(int mfxStorageID, const msdk_disp_char *msdkLibSubKey, mfxVersion currentAPIVersion)
87
+#if !defined(MEDIASDK_UWP_DISPATCHER)
88
+
89
+MFX::MFXPluginsInHive::MFXPluginsInHive(int mfxStorageID, const wchar_t *msdkLibSubKey, mfxVersion currentAPIVersion)
90
     : MFXPluginStorageBase(currentAPIVersion)
91
 {
92
-#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
93
     HKEY rootHKey;
94
     bool bRes;
95
     WinRegKey regKey;
96
@@ -104,7 +93,7 @@
97
             bRes = regKey.Open(regKey, pluginSubkey, KEY_READ);
98
         }
99
     }
100
-    else 
101
+    else
102
     {
103
         bRes = regKey.Open(rootHKey, rootPluginPath, KEY_READ);
104
     }
105
@@ -116,7 +105,7 @@
106
     if (!regKey.QueryInfo(&index)) {
107
         return;
108
     }
109
-    try 
110
+    try
111
     {
112
         resize(index);
113
     }
114
@@ -125,7 +114,7 @@
115
         return;
116
     }
117
 
118
-    for(index = 0; ; index++) 
119
+    for(index = 0; ; index++)
120
     {
121
         wchar_t   subKeyName[MFX_MAX_REGISTRY_KEY_NAME];
122
         DWORD     subKeyNameSize = sizeof(subKeyName) / sizeof(subKeyName[0]);
123
@@ -143,12 +132,12 @@
124
             continue;
125
         }
126
 
127
-        if (msdkLibSubKey) 
128
+        if (msdkLibSubKey)
129
         {
130
             TRACE_HIVE_INFO("Found Plugin: %s\\%S\\%S\\%S\\%S\n", (MFX_LOCAL_MACHINE_KEY == mfxStorageID) ? ("HKEY_LOCAL_MACHINE") : ("HKEY_CURRENT_USER"),
131
                 rootDispatchPath, msdkLibSubKey, pluginSubkey, subKeyName);
132
         }
133
-        else 
134
+        else
135
         {
136
             TRACE_HIVE_INFO("Found Plugin: %s\\%S\\%S\n", (MFX_LOCAL_MACHINE_KEY == mfxStorageID) ? ("HKEY_LOCAL_MACHINE") : ("HKEY_CURRENT_USER"),
137
                 rootPluginPath, subKeyName);
138
@@ -156,66 +145,66 @@
139
 
140
         PluginDescriptionRecord descriptionRecord;
141
 
142
-        if (!QueryKey(subKey, TypeKeyName, descriptionRecord.Type)) 
143
+        if (!QueryKey(subKey, TypeKeyName, descriptionRecord.Type))
144
         {
145
             continue;
146
         }
147
         TRACE_HIVE_INFO(alignStr()" : %d\n", TypeKeyName, descriptionRecord.Type);
148
 
149
-        if (QueryKey(subKey, CodecIDKeyName, descriptionRecord.CodecId)) 
150
+        if (QueryKey(subKey, CodecIDKeyName, descriptionRecord.CodecId))
151
         {
152
-            TRACE_HIVE_INFO(alignStr()" : "MFXFOURCCTYPE()" \n", CodecIDKeyName, MFXU32TOFOURCC(descriptionRecord.CodecId));
153
+            TRACE_HIVE_INFO(alignStr()" : " MFXFOURCCTYPE()" \n", CodecIDKeyName, MFXU32TOFOURCC(descriptionRecord.CodecId));
154
         }
155
         else
156
         {
157
                 TRACE_HIVE_INFO(alignStr()" : \n", CodecIDKeyName, "NOT REGISTERED");
158
         }
159
 
160
-        if (!QueryKey(subKey, GUIDKeyName, descriptionRecord.PluginUID)) 
161
+        if (!QueryKey(subKey, GUIDKeyName, descriptionRecord.PluginUID))
162
         {
163
             continue;
164
         }
165
-        TRACE_HIVE_INFO(alignStr()" : "MFXGUIDTYPE()"\n", GUIDKeyName, MFXGUIDTOHEX(&descriptionRecord.PluginUID));
166
+        TRACE_HIVE_INFO(alignStr()" : " MFXGUIDTYPE()"\n", GUIDKeyName, MFXGUIDTOHEX(&descriptionRecord.PluginUID));
167
 
168
         mfxU32 nSize = sizeof(descriptionRecord.sPath)/sizeof(*descriptionRecord.sPath);
169
-        if (!subKey.Query(PathKeyName, descriptionRecord.sPath, nSize)) 
170
+        if (!subKey.Query(PathKeyName, descriptionRecord.sPath, nSize))
171
         {
172
             TRACE_HIVE_WRN("no value for : %S\n", PathKeyName);
173
             continue;
174
         }
175
         TRACE_HIVE_INFO(alignStr()" : %S\n", PathKeyName, descriptionRecord.sPath);
176
 
177
-        if (!QueryKey(subKey, DefaultKeyName, descriptionRecord.Default)) 
178
+        if (!QueryKey(subKey, DefaultKeyName, descriptionRecord.Default))
179
         {
180
             continue;
181
         }
182
         TRACE_HIVE_INFO(alignStr()" : %s\n", DefaultKeyName, descriptionRecord.Default ? "true" : "false");
183
 
184
-        mfxU32 version;
185
-        if (!QueryKey(subKey, PlgVerKeyName, version)) 
186
+        mfxU32 version = 0;
187
+        if (!QueryKey(subKey, PlgVerKeyName, version))
188
         {
189
             continue;
190
         }
191
         descriptionRecord.PluginVersion = static_cast<mfxU16>(version);
192
-        if (0 == version) 
193
+        if (0 == version)
194
         {
195
             TRACE_HIVE_ERROR(alignStr()" : %d, which is invalid\n", PlgVerKeyName, descriptionRecord.PluginVersion);
196
             continue;
197
-        } 
198
-        else 
199
-        { 
200
+        }
201
+        else
202
+        {
203
             TRACE_HIVE_INFO(alignStr()" : %d\n", PlgVerKeyName, descriptionRecord.PluginVersion);
204
         }
205
 
206
-        mfxU32 APIVersion;
207
-        if (!QueryKey(subKey, APIVerKeyName, APIVersion)) 
208
+        mfxU32 APIVersion = 0;
209
+        if (!QueryKey(subKey, APIVerKeyName, APIVersion))
210
         {
211
             continue;
212
         }
213
         ConvertAPIVersion(APIVersion, descriptionRecord);
214
         TRACE_HIVE_INFO(alignStr()" : %d.%d \n", APIVerKeyName, descriptionRecord.APIVersion.Major, descriptionRecord.APIVersion.Minor);
215
 
216
-        try 
217
+        try
218
         {
219
             operator[](index) = descriptionRecord;
220
         }
221
@@ -223,56 +212,48 @@
222
             TRACE_HIVE_ERROR("operator[](%d) = descriptionRecord; - threw exception \n", index);
223
         }
224
     }
225
-#else
226
-
227
-    (void)mfxStorageID;
228
-    (void)msdkLibSubKey;
229
-    (void)currentAPIVersion;
230
-
231
-#endif //#if defined(MEDIASDK_USE_REGISTRY) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
232
 }
233
 
234
-#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
235
-MFX::MFXPluginsInFS::MFXPluginsInFS( mfxVersion currentAPIVersion ) 
236
+MFX::MFXPluginsInFS::MFXPluginsInFS( mfxVersion currentAPIVersion )
237
     : MFXPluginStorageBase(currentAPIVersion)
238
     , mIsVersionParsed()
239
     , mIsAPIVersionParsed()
240
 {
241
     WIN32_FIND_DATAW find_data;
242
-    msdk_disp_char currentModuleName[MAX_PLUGIN_PATH];
243
-    
244
+    wchar_t currentModuleName[MAX_PLUGIN_PATH];
245
+
246
     GetModuleFileNameW(NULL, currentModuleName, MAX_PLUGIN_PATH);
247
-    if (GetLastError() != 0) 
248
+    if (GetLastError() != 0)
249
     {
250
         TRACE_HIVE_ERROR("GetModuleFileName() reported an error: %d\n", GetLastError());
251
         return;
252
     }
253
-    msdk_disp_char *lastSlashPos = wcsrchr(currentModuleName, L'\\');
254
+    wchar_t *lastSlashPos = wcsrchr(currentModuleName, L'\\');
255
     if (!lastSlashPos) {
256
         lastSlashPos = currentModuleName;
257
     }
258
     mfxU32 executableDirLen = (mfxU32)(lastSlashPos - currentModuleName) + slashLen;
259
-    if (executableDirLen + pluginDirNameLen + pluginCfgFileNameLen >= MAX_PLUGIN_PATH) 
260
+    if (executableDirLen + pluginDirNameLen + pluginCfgFileNameLen >= MAX_PLUGIN_PATH)
261
     {
262
         TRACE_HIVE_ERROR("MAX_PLUGIN_PATH which is %d, not enough to locate plugin path\n", MAX_PLUGIN_PATH);
263
         return;
264
     }
265
-    msdk_disp_char_cpy_s(lastSlashPos + slashLen
266
+    wcscpy_s(lastSlashPos + slashLen
267
         , MAX_PLUGIN_PATH - executableDirLen, pluginSearchPattern);
268
 
269
     HANDLE fileFirst = FindFirstFileW(currentModuleName, &find_data);
270
-    if (INVALID_HANDLE_VALUE == fileFirst) 
271
+    if (INVALID_HANDLE_VALUE == fileFirst)
272
     {
273
         TRACE_HIVE_ERROR("FindFirstFileW() unable to locate any plugins folders\n", 0);
274
         return;
275
     }
276
-    do 
277
+    do
278
     {
279
-        if (!(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) 
280
+        if (!(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
281
         {
282
             continue;
283
         }
284
-        if (pluginDirNameLen != wcslen(find_data.cFileName)) 
285
+        if (pluginDirNameLen != wcslen(find_data.cFileName))
286
         {
287
             continue;
288
         }
289
@@ -282,10 +263,10 @@
290
         descriptionRecord.onlyVersionRegistered = true;
291
 
292
         mfxU32 i = 0;
293
-        for(i = 0; i != pluginDirNameLen / charsPermfxU8; i++) 
294
+        for(i = 0; i != pluginDirNameLen / charsPermfxU8; i++)
295
         {
296
             mfxU32 hexNum = 0;
297
-            if (1 != swscanf_s(find_data.cFileName + charsPermfxU8 * i, L"%2x", &hexNum)) 
298
+            if (1 != swscanf_s(find_data.cFileName + charsPermfxU8 * i, L"%2x", &hexNum))
299
             {
300
                 // it is ok to have non-plugin subdirs with length 32
301
                 //TRACE_HIVE_INFO("folder name \"%S\" is not a valid GUID string\n", find_data.cFileName);
302
@@ -303,37 +284,37 @@
303
             continue;
304
         }
305
 
306
-        msdk_disp_char_cpy_s(currentModuleName + executableDirLen
307
+        wcscpy_s(currentModuleName + executableDirLen
308
             , MAX_PLUGIN_PATH - executableDirLen, find_data.cFileName);
309
 
310
-        msdk_disp_char_cpy_s(currentModuleName + executableDirLen + pluginDirNameLen
311
+        wcscpy_s(currentModuleName + executableDirLen + pluginDirNameLen
312
             , MAX_PLUGIN_PATH - executableDirLen - pluginDirNameLen, L"\\");
313
 
314
         //this is path to plugin directory
315
-        msdk_disp_char_cpy_s(descriptionRecord.sPath
316
+        wcscpy_s(descriptionRecord.sPath
317
             , sizeof(descriptionRecord.sPath) / sizeof(*descriptionRecord.sPath), currentModuleName);
318
-        
319
-        msdk_disp_char_cpy_s(currentModuleName + executableDirLen + pluginDirNameLen + slashLen
320
+
321
+        wcscpy_s(currentModuleName + executableDirLen + pluginDirNameLen + slashLen
322
             , MAX_PLUGIN_PATH - executableDirLen - pluginDirNameLen - slashLen, pluginCfgFileName);
323
 
324
         FILE *pluginCfgFile = 0;
325
         _wfopen_s(&pluginCfgFile, currentModuleName, L"r");
326
-        if (!pluginCfgFile) 
327
+        if (!pluginCfgFile)
328
         {
329
             TRACE_HIVE_INFO("in directory \"%S\" no mandatory \"%S\"\n"
330
                 , find_data.cFileName, pluginCfgFileName);
331
             continue;
332
         }
333
-        
334
-        if (ParseFile(pluginCfgFile, descriptionRecord)) 
335
+
336
+        if (ParseFile(pluginCfgFile, descriptionRecord))
337
         {
338
-            try 
339
+            try
340
             {
341
                 push_back(descriptionRecord);
342
             }
343
             catch (...) {
344
                 TRACE_HIVE_ERROR("mRecords.push_back(descriptionRecord); - threw exception \n", 0);
345
-            }            
346
+            }
347
         }
348
 
349
         fclose(pluginCfgFile);
350
@@ -341,26 +322,26 @@
351
     FindClose(fileFirst);
352
 }
353
 
354
-bool MFX::MFXPluginsInFS::ParseFile(FILE * f, PluginDescriptionRecord & descriptionRecord) 
355
+bool MFX::MFXPluginsInFS::ParseFile(FILE * f, PluginDescriptionRecord & descriptionRecord)
356
 {
357
-    msdk_disp_char line[MAX_PLUGIN_FILE_LINE];
358
-    
359
+    wchar_t line[MAX_PLUGIN_FILE_LINE];
360
+
361
     while(NULL != fgetws(line, sizeof(line) / sizeof(*line), f))
362
     {
363
-        msdk_disp_char *delimiter = wcschr(line, L'=');
364
-        if (0 == delimiter) 
365
+        wchar_t *delimiter = wcschr(line, L'=');
366
+        if (0 == delimiter)
367
         {
368
             TRACE_HIVE_INFO("plugin.cfg contains line \"%S\" which is not in K=V format, skipping \n", line);
369
             continue;
370
         }
371
         *delimiter = 0;
372
-        if (!ParseKVPair(line, delimiter + 1, descriptionRecord)) 
373
+        if (!ParseKVPair(line, delimiter + 1, descriptionRecord))
374
         {
375
             return false;
376
         }
377
     }
378
 
379
-    if (!mIsVersionParsed) 
380
+    if (!mIsVersionParsed)
381
     {
382
         TRACE_HIVE_ERROR("%S : Mandatory  key %S not found\n", pluginCfgFileName, PlgVerKeyName);
383
         return false;
384
@@ -372,7 +353,7 @@
385
         return false;
386
     }
387
 
388
-    if (!wcslen(descriptionRecord.sPath)) 
389
+    if (!wcslen(descriptionRecord.sPath))
390
     {
391
         TRACE_HIVE_ERROR("%S : Mandatory  key %S not found\n", pluginCfgFileName, pluginFileName);
392
         return false;
393
@@ -381,18 +362,18 @@
394
     return true;
395
 }
396
 
397
-bool MFX::MFXPluginsInFS::ParseKVPair( msdk_disp_char * key, msdk_disp_char* value, PluginDescriptionRecord & descriptionRecord)
398
+bool MFX::MFXPluginsInFS::ParseKVPair( wchar_t * key, wchar_t* value, PluginDescriptionRecord & descriptionRecord)
399
 {
400
     if (0 != wcsstr(key, PlgVerKeyName))
401
     {
402
         mfxU32 version ;
403
-        if (0 == swscanf_s(value, L"%d", &version)) 
404
+        if (0 == swscanf_s(value, L"%d", &version))
405
         {
406
             return false;
407
         }
408
         descriptionRecord.PluginVersion = (mfxU16)version;
409
-        
410
-        if (0 == descriptionRecord.PluginVersion) 
411
+
412
+        if (0 == descriptionRecord.PluginVersion)
413
         {
414
             TRACE_HIVE_ERROR("%S: %S = %d,  which is invalid\n", pluginCfgFileName, PlgVerKeyName, descriptionRecord.PluginVersion);
415
             return false;
416
@@ -406,7 +387,7 @@
417
     if (0 != wcsstr(key, APIVerKeyName))
418
     {
419
         mfxU32 APIversion;
420
-        if (0 == swscanf_s(value, L"%d", &APIversion)) 
421
+        if (0 == swscanf_s(value, L"%d", &APIversion))
422
         {
423
             return false;
424
         }
425
@@ -421,15 +402,15 @@
426
 
427
     if (0!=wcsstr(key, pluginFileName))
428
     {
429
-        msdk_disp_char *startQuoteMark = wcschr(value, L'\"');
430
+        wchar_t *startQuoteMark = wcschr(value, L'\"');
431
         if (!startQuoteMark)
432
         {
433
             TRACE_HIVE_ERROR("plugin filename not in quotes : %S\n", value);
434
             return false;
435
         }
436
-        msdk_disp_char *endQuoteMark = wcschr(startQuoteMark + 1, L'\"');
437
+        wchar_t *endQuoteMark = wcschr(startQuoteMark + 1, L'\"');
438
 
439
-        if (!endQuoteMark) 
440
+        if (!endQuoteMark)
441
         {
442
             TRACE_HIVE_ERROR("plugin filename not in quotes : %S\n", value);
443
             return false;
444
@@ -445,42 +426,43 @@
445
         }
446
 
447
         size_t restrictedCharIdx = wcscspn(startQuoteMark + 1, pluginFileNameRestrictedCharacters);
448
-        if (restrictedCharIdx != wcslen(startQuoteMark + 1)) 
449
+        if (restrictedCharIdx != wcslen(startQuoteMark + 1))
450
         {
451
             TRACE_HIVE_ERROR("plugin filename :%S, contains one of restricted characters: %S\n", startQuoteMark + 1, pluginFileNameRestrictedCharacters);
452
             return false;
453
         }
454
 
455
-        msdk_disp_char_cpy_s(descriptionRecord.sPath + currentPathLen
456
+        wcscpy_s(descriptionRecord.sPath + currentPathLen
457
             , sizeof(descriptionRecord.sPath) / sizeof(*descriptionRecord.sPath) - currentPathLen, startQuoteMark + 1);
458
 
459
         TRACE_HIVE_INFO("%S: %S = \"%S\" \n", pluginCfgFileName, pluginFileName, startQuoteMark + 1);
460
-     
461
+
462
         return true;
463
     }
464
-   
465
+
466
 
467
     return true;
468
 }
469
-#endif //#if defined(MEDIASDK_USE_CFGFILES) || (!defined(MEDIASDK_UWP_LOADER) && !defined(MEDIASDK_UWP_PROCTABLE))
470
+
471
+#endif //#if !defined(MEDIASDK_UWP_DISPATCHER)
472
 
473
 MFX::MFXDefaultPlugins::MFXDefaultPlugins(mfxVersion currentAPIVersion, MFX_DISP_HANDLE * hdl, int implType)
474
     : MFXPluginStorageBase(currentAPIVersion)
475
 {
476
-    msdk_disp_char libModuleName[MAX_PLUGIN_PATH];
477
+    wchar_t libModuleName[MAX_PLUGIN_PATH];
478
 
479
     GetModuleFileNameW((HMODULE)hdl->hModule, libModuleName, MAX_PLUGIN_PATH);
480
-    if (GetLastError() != 0) 
481
+    if (GetLastError() != 0)
482
     {
483
         TRACE_HIVE_ERROR("GetModuleFileName() reported an error: %d\n", GetLastError());
484
         return;
485
     }
486
-    msdk_disp_char *lastSlashPos = wcsrchr(libModuleName, L'\\');
487
+    wchar_t *lastSlashPos = wcsrchr(libModuleName, L'\\');
488
     if (!lastSlashPos) {
489
         lastSlashPos = libModuleName;
490
     }
491
     mfxU32 executableDirLen = (mfxU32)(lastSlashPos - libModuleName) + slashLen;
492
-    if (executableDirLen + defaultPluginNameLen >= MAX_PLUGIN_PATH) 
493
+    if (executableDirLen + defaultPluginNameLen >= MAX_PLUGIN_PATH)
494
     {
495
         TRACE_HIVE_ERROR("MAX_PLUGIN_PATH which is %d, not enough to locate default plugin path\n", MAX_PLUGIN_PATH);
496
         return;
497
@@ -495,7 +477,7 @@
498
         descriptionRecord.APIVersion = currentAPIVersion;
499
         descriptionRecord.Default = true;
500
 
501
-        msdk_disp_char_cpy_s(descriptionRecord.sPath
502
+        wcscpy_s(descriptionRecord.sPath
503
             , sizeof(descriptionRecord.sPath) / sizeof(*descriptionRecord.sPath), libModuleName);
504
 
505
         push_back(descriptionRecord);
506
@@ -507,4 +489,3 @@
507
 }
508
 
509
 
510
-#endif
511
obs-studio-27.0.1.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_win_reg_key.cpp -> obs-studio-27.1.3.tar.xz/plugins/obs-qsv11/libmfx/src/mfx_win_reg_key.cpp Changed
65
 
1
@@ -1,35 +1,24 @@
2
-/* ****************************************************************************** *\
3
-
4
-Copyright (C) 2012-2017 Intel Corporation.  All rights reserved.
5
-
6
-Redistribution and use in source and binary forms, with or without
7
-modification, are permitted provided that the following conditions are met:
8
-- Redistributions of source code must retain the above copyright notice,
9
-this list of conditions and the following disclaimer.
10
-- Redistributions in binary form must reproduce the above copyright notice,
11
-this list of conditions and the following disclaimer in the documentation
12
-and/or other materials provided with the distribution.
13
-- Neither the name of Intel Corporation nor the names of its contributors
14
-may be used to endorse or promote products derived from this software
15
-without specific prior written permission.
16
-
17
-THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY EXPRESS OR
18
-IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
-OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
-IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT,
21
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
-
28
-File Name: mfx_win_reg_key.cpp
29
-
30
-\* ****************************************************************************** */
31
-
32
-#if defined(_WIN32) || defined(_WIN64)
33
-
34
+// Copyright (c) 2012-2019 Intel Corporation
35
+//
36
+// Permission is hereby granted, free of charge, to any person obtaining a copy
37
+// of this software and associated documentation files (the "Software"), to deal
38
+// in the Software without restriction, including without limitation the rights
39
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
40
+// copies of the Software, and to permit persons to whom the Software is
41
+// furnished to do so, subject to the following conditions:
42
+//
43
+// The above copyright notice and this permission notice shall be included in all
44
+// copies or substantial portions of the Software.
45
+//
46
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
47
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
48
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
49
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
51
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
52
+// SOFTWARE.
53
+
54
+#if !defined(MEDIASDK_UWP_DISPATCHER)
55
 #include "mfx_win_reg_key.h"
56
 #include "mfx_dispatcher_log.h"
57
 
58
@@ -225,4 +214,4 @@
59
 
60
 } // namespace MFX
61
 
62
-#endif // #if defined(_WIN32) || defined(_WIN64)
63
+#endif // #if !defined(MEDIASDK_UWP_DISPATCHER)
64
\ No newline at end of file
65
obs-studio-27.0.1.tar.xz/plugins/obs-text/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/en-US.ini Changed
80
 
1
@@ -1,39 +1,39 @@
2
-TextGDIPlus="Text (GDI+)"
3
-Font="Font"
4
-Text="Text"
5
-ReadFromFile="Read from file"
6
-TextFile="Text File (UTF-8)"
7
-Filter.TextFiles="Text Files"
8
-Filter.AllFiles="All Files"
9
-Color="Color"
10
-Opacity="Opacity"
11
-Gradient="Gradient"
12
-Gradient.Color="Gradient Color"
13
-Gradient.Opacity="Gradient Opacity"
14
-Gradient.Direction="Gradient Direction"
15
-BkColor="Background Color"
16
-BkOpacity="Background Opacity"
17
-Alignment="Alignment"
18
-Alignment.Left="Left"
19
-Alignment.Center="Center"
20
-Alignment.Right="Right"
21
-Vertical="Vertical"
22
-VerticalAlignment="Vertical Alignment"
23
-VerticalAlignment.Top="Top"
24
-VerticalAlignment.Bottom="Bottom"
25
-Outline="Outline"
26
-Outline.Size="Outline Size"
27
-Outline.Color="Outline Color"
28
-Outline.Opacity="Outline Opacity"
29
-ChatlogMode="Chatlog Mode"
30
-ChatlogMode.Lines="Chatlog Line Limit"
31
-UseCustomExtents="Use Custom Text Extents"
32
-UseCustomExtents.Wrap="Wrap"
33
-Width="Width"
34
-Height="Height"
35
-Transform="Text Transform"
36
-Transform.None="None"
37
-Transform.Uppercase="Uppercase"
38
-Transform.Lowercase="Lowercase"
39
-Transform.Startcase="Start Case"
40
-Antialiasing="Enable Antialiasing"
41
+TextGDIPlus="Text (GDI+)"
42
+Font="Font"
43
+Text="Text"
44
+ReadFromFile="Read from file"
45
+TextFile="Text File (UTF-8)"
46
+Filter.TextFiles="Text Files"
47
+Filter.AllFiles="All Files"
48
+Color="Color"
49
+Opacity="Opacity"
50
+Gradient="Gradient"
51
+Gradient.Color="Gradient Color"
52
+Gradient.Opacity="Gradient Opacity"
53
+Gradient.Direction="Gradient Direction"
54
+BkColor="Background Color"
55
+BkOpacity="Background Opacity"
56
+Alignment="Alignment"
57
+Alignment.Left="Left"
58
+Alignment.Center="Center"
59
+Alignment.Right="Right"
60
+Vertical="Vertical"
61
+VerticalAlignment="Vertical Alignment"
62
+VerticalAlignment.Top="Top"
63
+VerticalAlignment.Bottom="Bottom"
64
+Outline="Outline"
65
+Outline.Size="Outline Size"
66
+Outline.Color="Outline Color"
67
+Outline.Opacity="Outline Opacity"
68
+ChatlogMode="Chatlog Mode"
69
+ChatlogMode.Lines="Chatlog Line Limit"
70
+UseCustomExtents="Use Custom Text Extents"
71
+UseCustomExtents.Wrap="Wrap"
72
+Width="Width"
73
+Height="Height"
74
+Transform="Text Transform"
75
+Transform.None="None"
76
+Transform.Uppercase="Uppercase"
77
+Transform.Lowercase="Lowercase"
78
+Transform.Startcase="Start Case"
79
+Antialiasing="Enable Antialiasing"
80
obs-studio-27.0.1.tar.xz/plugins/obs-text/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/gd-GB.ini Changed
37
 
1
@@ -1,9 +1,16 @@
2
+TextGDIPlus="Teacsa (GDI+)"
3
 Font="Cruth-clò"
4
 Text="Teacsa"
5
+ReadFromFile="Leugh o fhaidhle"
6
+TextFile="Faidhle teacsa (UTF-8)"
7
 Filter.TextFiles="Faidhlichean teacsa"
8
 Filter.AllFiles="A h-uile faidhle"
9
 Color="Dath"
10
+Opacity="Trìd-dhoilleireachd"
11
 Gradient="Caisead"
12
+Gradient.Color="Dath a’ chaiseid"
13
+Gradient.Opacity="Trìd-dhoilleireachd a’ chaiseid"
14
+Gradient.Direction="Comhair a’ chaiseid"
15
 BkColor="Dath a’ chùlaibh"
16
 BkOpacity="Trìd-dhoilleireachd a’ chùlaibh"
17
 Alignment="Co-thaobhadh"
18
@@ -15,7 +22,18 @@
19
 VerticalAlignment.Top="Bàrr"
20
 VerticalAlignment.Bottom="Bonn"
21
 Outline="Oir-loidhne"
22
+Outline.Size="Meud na h-oir‑loidhne"
23
+Outline.Color="Dath na h-oir‑loidhne"
24
+Outline.Opacity="Trìd-dhoilleireachd na h-oir-loidhne"
25
+ChatlogMode="Modh loga na cabadaiche"
26
+ChatlogMode.Lines="Crìoch loidhnichean air loga na cabadaiche"
27
+UseCustomExtents="Cleachd farsaingeachd ghnàthaichte an teacsa"
28
 UseCustomExtents.Wrap="Paisg"
29
 Width="Leud"
30
 Height="Àirde"
31
+Transform="Tar-mhùth an teacsa"
32
 Transform.None="Chan eil gin"
33
+Transform.Uppercase="LITRICHEAN MÒRA"
34
+Transform.Lowercase="litrichean beaga"
35
+Transform.Startcase="Ceann-litir Mhòr Air Gach Facal"
36
+Antialiasing="Cuir antialiasing an comas"
37
obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/hi-IN.ini Added
41
 
1
@@ -0,0 +1,39 @@
2
+TextGDIPlus="टेक्स्ट (GDI+)"
3
+Font="फ़ॉन्ट"
4
+Text="टेक्स्ट"
5
+ReadFromFile="फ़ाइल से पढ़ें"
6
+TextFile="टेक्स्ट फ़ाइल (UTF-8)"
7
+Filter.TextFiles="टेक्स्ट फ़ाईलें"
8
+Filter.AllFiles="सभी फ़ाइलें"
9
+Color="रंग"
10
+Opacity="अपारदर्शिता"
11
+Gradient="अवतरण"
12
+Gradient.Color="ग्रेडिएंट रंग"
13
+Gradient.Opacity="ढलानयुक्त पारदर्शिता"
14
+Gradient.Direction="ढलान दिशा"
15
+BkColor="पृष्ठभूमि रंग"
16
+BkOpacity="पृष्ठभूमि अपारदर्शिता"
17
+Alignment="संरेखण"
18
+Alignment.Left="बाएँ"
19
+Alignment.Center="केंद्र"
20
+Alignment.Right="दाएँ"
21
+Vertical="लम्बवत"
22
+VerticalAlignment="लंबवत संरेखण"
23
+VerticalAlignment.Top="शीर्ष"
24
+VerticalAlignment.Bottom="तल"
25
+Outline="खाका"
26
+Outline.Size="खाका मोटाई"
27
+Outline.Color="खाका रंग"
28
+Outline.Opacity="खाका अपारदर्शिता"
29
+ChatlogMode="बातचीत लॉग मोड"
30
+ChatlogMode.Lines="बातचीत लॉग लाइन सीमा"
31
+UseCustomExtents="निर्मित टेक्स्ट परिसीमा का उपयोग करें"
32
+UseCustomExtents.Wrap="मोड़े"
33
+Width="चौड़ाई"
34
+Height="ऊँचाई"
35
+Transform="टेक्स्ट रूपांतर करें"
36
+Transform.None="कुछ नहीं"
37
+Transform.Uppercase="बड़े अक्षर"
38
+Transform.Lowercase="छोटा अक्षर"
39
+Transform.Startcase="बड़े प्रथम अक्षर"
40
+Antialiasing="एंटीएलियासिंग सक्षम करें"
41
obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/kmr-TR.ini Added
41
 
1
@@ -0,0 +1,39 @@
2
+TextGDIPlus="Nivîs (GDI+)"
3
+Font="Cûrenivîs"
4
+Text="Nivîs"
5
+ReadFromFile="Ji pelê bixwîne"
6
+TextFile="Pelê nivîsê (UTF-8)"
7
+Filter.TextFiles="Pelên nivîsê"
8
+Filter.AllFiles="Hemû pel"
9
+Color="Reng"
10
+Opacity="Zelalî"
11
+Gradient="Xarbûn"
12
+Gradient.Color="Rengê xarbûnê"
13
+Gradient.Opacity="Zelaliya xarbûnê"
14
+Gradient.Direction="Aliyê xarbûnê"
15
+BkColor="Rengê paşrûyê"
16
+BkOpacity="Zelaliya paşrûyê"
17
+Alignment="Bicîkirin"
18
+Alignment.Left="Çep"
19
+Alignment.Center="Navend"
20
+Alignment.Right="Rast"
21
+Vertical="Stûnî"
22
+VerticalAlignment="Bicîkirina stûnî"
23
+VerticalAlignment.Top="Jor"
24
+VerticalAlignment.Bottom="Jêr"
25
+Outline="Dor nivîs"
26
+Outline.Size="Mezinahiya dor nivîsê"
27
+Outline.Color="Rengê dor nivîsê"
28
+Outline.Opacity="Zelaliya dor nivîsê"
29
+ChatlogMode="Moda têketina axaftinê"
30
+ChatlogMode.Lines="Sînora têketina axaftinê"
31
+UseCustomExtents="Pîvanên kesanekirî yên kodika nivîsê bi kar bîne"
32
+UseCustomExtents.Wrap="Pêçandin"
33
+Width="Firehî"
34
+Height="Bilindî"
35
+Transform="Derbasbûna nivîsê"
36
+Transform.None="Ne yek"
37
+Transform.Uppercase="Tîpên mezin"
38
+Transform.Lowercase="Tîpên piçuk"
39
+Transform.Startcase="Yekem tîp her dem mezin e"
40
+Antialiasing="Qerax nermkirinê çalak bike"
41
obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/nn-NO.ini Added
24
 
1
@@ -0,0 +1,22 @@
2
+TextGDIPlus="Tekst (GDI+)"
3
+Font="Skrift"
4
+Text="Tekst"
5
+ReadFromFile="Les frå fil"
6
+TextFile="Tekstfil (UTF-8)"
7
+Filter.TextFiles="Tekstfiler"
8
+Filter.AllFiles="Alle filer"
9
+Color="Farge"
10
+Alignment.Left="Venstre"
11
+Alignment.Center="Midtstill"
12
+Alignment.Right="Høgre"
13
+Vertical="Vertikal"
14
+VerticalAlignment="Vertikal justering"
15
+VerticalAlignment.Top="Topp"
16
+VerticalAlignment.Bottom="Botn"
17
+Outline="Omriss"
18
+UseCustomExtents.Wrap="Bryt"
19
+Width="Breidde"
20
+Height="Høgde"
21
+Transform.None="Ingen"
22
+Transform.Uppercase="Store bokstavar"
23
+Transform.Lowercase="Små bokstavar"
24
obs-studio-27.0.1.tar.xz/plugins/obs-text/data/locale/sk-SK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/sk-SK.ini Changed
12
 
1
@@ -23,8 +23,8 @@
2
 Outline.Size="Veľkosť obrysu"
3
 Outline.Color="Farba obrysu"
4
 Outline.Opacity="Nepriehľadnosť obrysu"
5
-ChatlogMode="Chatlog režim"
6
-ChatlogMode.Lines="Chatlog limit riadkov"
7
+ChatlogMode="Režim chatu"
8
+ChatlogMode.Lines="Limit riadkov režimu chatu"
9
 UseCustomExtents="Použiť vlastné rozsahy textu"
10
 UseCustomExtents.Wrap="Zalomiť"
11
 Width="Šírka"
12
obs-studio-27.0.1.tar.xz/plugins/obs-text/data/locale/vi-VN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-text/data/locale/vi-VN.ini Changed
14
 
1
@@ -1,3 +1,4 @@
2
+TextGDIPlus="Văn bản (GDI+)"
3
 Font="Phông chữ"
4
 Text="Văn bản"
5
 ReadFromFile="Đọc từ tệp"
6
@@ -17,6 +18,7 @@
7
 Alignment.Center="Giữa"
8
 Alignment.Right="Phải"
9
 Vertical="Dọc"
10
+VerticalAlignment="Canh lề theo chiều dọc"
11
 VerticalAlignment.Top="Trên"
12
 VerticalAlignment.Bottom="Dưới"
13
 Outline="Đường viền"
14
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ar-SA.ini Changed
9
 
1
@@ -21,6 +21,7 @@
2
 TrackMatteVideoFile="تتبع ملف الفيديو القاتم"
3
 TrackMatteLayout="تخطيط قاتم"
4
 TrackMatteLayoutHorizontal="نفس الملف، جنبا إلى جنب (منجر على اليسار، مباريات المسار على اليمين)"
5
+TrackMatteLayoutMask="قناع فقط"
6
 AudioFadeStyle="نمط تلاشي الصوت"
7
 LumaWipe.Image="الصورة"
8
 LumaWipe.Invert="عكس"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ca-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ca-ES.ini Changed
9
 
1
@@ -23,6 +23,7 @@
2
 TrackMatteLayoutHorizontal="Mateix fitxer, un al costat de l'altre (stinger a l'esquerra, màscara de seguiment a la dreta)"
3
 TrackMatteLayoutVertical="Mateix fitxer, apilat (stinger a sobre, màscara de seguiment a sota)"
4
 TrackMatteLayoutSeparateFile="Fitxer separat (advertència: la màscara pot desincronitzar-se)"
5
+TrackMatteLayoutMask="Només màscara"
6
 AudioFadeStyle="Estil de fos d'àudio"
7
 AudioFadeStyle.FadeOutFadeIn="Es descolora al punt de transició i després s'esvaeix"
8
 AudioFadeStyle.CrossFade="Transició"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/cs-CZ.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/cs-CZ.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Stejný soubor, vedle sebe (stinger vlevo, track matte vpravo)"
3
 TrackMatteLayoutVertical="Stejný soubor, nad sebou (stinger nahoře, track mate dole)"
4
 TrackMatteLayoutSeparateFile="Samostatný soubor (varování: může dojít k desyncu s matte)"
5
+TrackMatteLayoutMask="Pouze maska"
6
 AudioFadeStyle="Styl přechodů"
7
 AudioFadeStyle.FadeOutFadeIn="Zeslabovat do bodu přechodu, poté zesilovat"
8
 AudioFadeStyle.CrossFade="Prolínání"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/da-DK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/da-DK.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="Samme fil, side om side (stinger til venstre, track matte til højre)"
3
 TrackMatteLayoutVertical="Samme fil, stablet (stinger øverst, track matte nederst)"
4
 TrackMatteLayoutSeparateFile="Separat fil (advarsel: matte kan komme ud af synk)"
5
+TrackMatteLayoutMask="Kun maske"
6
 AudioFadeStyle="Lydudtoningsstil"
7
 AudioFadeStyle.FadeOutFadeIn="Udtone til overgangspunkt, dernæst indtone"
8
 AudioFadeStyle.CrossFade="Krydstoning (crossfade)"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/de-DE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/de-DE.ini Changed
9
 
1
@@ -20,6 +20,7 @@
2
 TrackMatteLayoutHorizontal="Gleiche Datei, nebeneinander (Stinger links, Spurmaske rechts)"
3
 TrackMatteLayoutVertical="Gleiche Datei, übereinander (Stinger oben, Spurmaske unten)"
4
 TrackMatteLayoutSeparateFile="Separate Datei (Warnung: Maske kann asynchron werden)"
5
+TrackMatteLayoutMask="Nur Maske"
6
 AudioFadeStyle="Audioübergangsstil"
7
 AudioFadeStyle.FadeOutFadeIn="Zu Übergangspunkt aus- und dann einblenden"
8
 AudioFadeStyle.CrossFade="Überblendung"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/en-US.ini Changed
16
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="Same file, side-by-side (stinger on the left, track matte on the right)"
3
 TrackMatteLayoutVertical="Same file, stacked (stinger on top, track matte at the bottom)"
4
 TrackMatteLayoutSeparateFile="Separate file (warning: matte can get out of sync)"
5
+TrackMatteLayoutMask="Mask only"
6
 AudioFadeStyle="Audio Fade Style"
7
 AudioFadeStyle.FadeOutFadeIn="Fade out to transition point then fade in"
8
 AudioFadeStyle.CrossFade="Crossfade"
9
@@ -71,4 +72,4 @@
10
 AudioMonitoring.None="Monitor Off"
11
 AudioMonitoring.MonitorOnly="Monitor Only (mute output)"
12
 AudioMonitoring.Both="Monitor and Output"
13
-HardwareDecode="Use hardware decoding when available"
14
\ No newline at end of file
15
+HardwareDecode="Use hardware decoding when available"
16
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/es-ES.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/es-ES.ini Changed
9
 
1
@@ -23,6 +23,7 @@
2
 TrackMatteLayoutHorizontal="Mismo archivo, uno al lado del otro (stinger a la izquierda, pista mate a la derecha)"
3
 TrackMatteLayoutVertical="Mismo archivo, apilado (stinger encima, pista mate debajo)"
4
 TrackMatteLayoutSeparateFile="Archivo por separado (advertencia: la pista mate puede perder la sincronización)"
5
+TrackMatteLayoutMask="Solo máscara"
6
 AudioFadeStyle="Estilo de fundido de audio"
7
 AudioFadeStyle.FadeOutFadeIn="Desvanecer hasta el punto de transición y luego aparecer gradualmente"
8
 AudioFadeStyle.CrossFade="Transición suave"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/fa-IR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/fa-IR.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="همان پرونده ، کنار هم (استینگر در سمت چپ ، آهنگ مات در سمت راست)"
3
 TrackMatteLayoutVertical="همان پرونده ، روی هم چیده شده (استینگر در بالا ، مات در پایین)"
4
 TrackMatteLayoutSeparateFile="پرونده جداگانه (هشدار: مات می تواند از همگام سازی خارج شود)"
5
+TrackMatteLayoutMask="فقط ماسک"
6
 AudioFadeStyle="سبک محو صدا"
7
 AudioFadeStyle.FadeOutFadeIn="محو شدن در نقطه انتقال و سپس ظاهر شدن"
8
 AudioFadeStyle.CrossFade="ضربدری"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/fr-FR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/fr-FR.ini Changed
9
 
1
@@ -23,6 +23,7 @@
2
 TrackMatteLayoutHorizontal="Même fichier, côte à côte (stinger à gauche, cache de piste à droite)"
3
 TrackMatteLayoutVertical="Même fichier, empilé (stinger en haut, cache de piste en bas)"
4
 TrackMatteLayoutSeparateFile="Fichiers séparés (attention : le cache peut se désynchroniser)"
5
+TrackMatteLayoutMask="Masque uniquement"
6
 AudioFadeStyle="Style de fondu audio"
7
 AudioFadeStyle.FadeOutFadeIn="Fondu en fermeture jusqu'au point de transition puis fondu en ouverture"
8
 AudioFadeStyle.CrossFade="Fondu enchaîné"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/gd-GB.ini Changed
76
 
1
@@ -1,7 +1,9 @@
2
 FadeTransition="Crìon"
3
-CutTransition="Geàrr às"
4
+CutTransition="Geàrr"
5
 SwipeTransition="Grad-shlaighd"
6
 SlideTransition="Sleamhnaich"
7
+StingerTransition="Sgaradair"
8
+FadeToColorTransition="Crìon gu dath"
9
 Direction="Comhair"
10
 Direction.Left="Gu clì"
11
 Direction.Right="Gu deas"
12
@@ -9,17 +11,63 @@
13
 Direction.Down="Sìos"
14
 SwipeIn="Grad-shlaighd a-steach"
15
 Color="Dath"
16
+VideoFile="Faidhle video"
17
+TransitionPoint="Puing an tar-mhùthaidh"
18
+TransitionPointFrame="Puing an tar-mhùthaidh (frèam)"
19
+TransitionPointType="Seòrsa puing an tar-mhùthaidh"
20
+AudioTransitionPointType="Seòrsa puing an tar-mhùthaidh fuaime"
21
 TransitionPointTypeFrame="Frèam"
22
+TransitionPointTypeTime="Àm (mili-diog)"
23
+TrackMatteEnabled="Cleachd masg traca"
24
+InvertTrackMatte="Ais-thionndaidh dathan a’ mhasga"
25
+TrackMatteVideoFile="Faidhle video a’ mhasga traca"
26
+TrackMatteLayout="Co-dhealbhachd a’ mhasga"
27
+TrackMatteLayoutHorizontal="An t-aon fhaidhle, taobh ri taobh (an sgaradair taobh clì, masg an traca taobh deas)"
28
+TrackMatteLayoutVertical="An t-aon fhaidhle, stacaichte (an sgaradair aig a’ bhàrr, masg an traca aig a’ bhonn)"
29
+TrackMatteLayoutSeparateFile="Faidhle fa leth (rabhadh: dh’fhaoidte gun caill am masg an sioncronachadh)"
30
+TrackMatteLayoutMask="Masg a-mhàin"
31
+AudioFadeStyle="Stoidhle crìonadh na fuaime"
32
+AudioFadeStyle.FadeOutFadeIn="Crìon a-mach gu puing an tar-mhùthaidh is crìon a-steach an uairsin"
33
 AudioFadeStyle.CrossFade="Tar-chrìonadh"
34
+SwitchPoint="Puing dath a’ bharra"
35
+LumaWipeTransition="Sguabadh luma"
36
 LumaWipe.Image="Dealbh"
37
 LumaWipe.Invert="Ais-thionndaidh"
38
+LumaWipe.Softness="Maothachd"
39
+LumaWipe.Type.BarndoorBottomLeft="Doras sabhail taobh clì aig a’ bhonn"
40
+LumaWipe.Type.BarndoorHorizontal="Doras sabhail air a’ chòmhnard"
41
+LumaWipe.Type.BarndoorTopLeft="Doras sabhail taobh clì aig a’ bhàrr"
42
+LumaWipe.Type.BarndoorVertical="Doras sabhail gu h-inghearach"
43
+LumaWipe.Type.BlindsHorizontal="Sgàilean-uinneige air a’ chòmhnard"
44
+LumaWipe.Type.BoxBottomLeft="Bogsa taobh clì aig a’ bhonn"
45
+LumaWipe.Type.BoxBottomRight="Bogsa taobh deas aig a’ bhonn"
46
+LumaWipe.Type.BoxTopLeft="Bogsa taobh clì aig a’ bhàrr"
47
+LumaWipe.Type.BoxTopRight="Bogsa taobh deas aig a’ bhàrr"
48
+LumaWipe.Type.Burst="Spreadhadh"
49
+LumaWipe.Type.CheckerboardSmall="Clàr-taileisg beag"
50
 LumaWipe.Type.Circles="Cearcallan"
51
 LumaWipe.Type.Clock="Cleoc"
52
 LumaWipe.Type.Cloud="Neul"
53
+LumaWipe.Type.Curtain="Cùirtear"
54
+LumaWipe.Type.Fan="Gaotharan"
55
+LumaWipe.Type.Fractal="Fractalach"
56
+LumaWipe.Type.Iris="Cearcall na sùla"
57
+LumaWipe.Type.LinearHorizontal="Loidhneach air a’ chòmhnard"
58
+LumaWipe.Type.LinearTopLeft="Loidhneach taobh clì aig a’ bhàrr"
59
+LumaWipe.Type.LinearTopRight="Loidhneach taobh deas aig a’ bhàrr"
60
+LumaWipe.Type.LinearVertical="Loidhneach gu h-inghearach"
61
+LumaWipe.Type.ParallelZigzagHorizontal="Cam-fhiarach co-shìnte air a’ chòmhnard"
62
+LumaWipe.Type.ParallelZigzagVertical="Cam-fhiarach co-shìnte gu h-inghearach"
63
+LumaWipe.Type.Sinus9="Sìneas 9"
64
+LumaWipe.Type.Spiral="Cuachag"
65
 LumaWipe.Type.Square="Ceàrnag"
66
 LumaWipe.Type.Squares="Ceàrnagan"
67
 LumaWipe.Type.Stripes="Stiallan"
68
+LumaWipe.Type.StripsHorizontal="Stiallan air a’ chòmhnard"
69
+LumaWipe.Type.StripsVertical="Stiallan gu h-inghearach"
70
 LumaWipe.Type.Watercolor="Dath-uisge"
71
+LumaWipe.Type.ZigzagHorizontal="Cam-fhiarach air a’ chòmhnard"
72
+LumaWipe.Type.ZigzagVertical="Cam-fhiarach gu h-inghearach"
73
 AudioMonitoring="Sgrùdadh fuaime"
74
 AudioMonitoring.None="Gun sgrùdadh"
75
 AudioMonitoring.MonitorOnly="Sgrùdadh a-mhàin (mùch an t-às-chur)"
76
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/he-IL.ini Changed
73
 
1
@@ -2,6 +2,7 @@
2
 CutTransition="חתוך"
3
 SwipeTransition="החלקה"
4
 SlideTransition="הסט"
5
+StingerTransition="סטינגר"
6
 FadeToColorTransition="עמם לצבע"
7
 Direction="כיוון"
8
 Direction.Left="שמאל"
9
@@ -12,16 +13,63 @@
10
 Color="צבע"
11
 VideoFile="קובץ וידאו"
12
 TransitionPoint="נקודת מעבר"
13
+TransitionPointFrame="נקודת מעבר (פריים)"
14
+TransitionPointType="סוג נקודת מעבר"
15
+AudioTransitionPointType="סוג נקודת מעבר שמע"
16
+TransitionPointTypeFrame="פריים"
17
 TransitionPointTypeTime="זמן (מילישניות)"
18
+TrackMatteEnabled="השתמש ברצועת מט"
19
+InvertTrackMatte="הפוך צבעי מט"
20
+TrackMatteVideoFile="קובץ וידאו רצועת מט"
21
+TrackMatteLayout="תצורת מט"
22
+TrackMatteLayoutHorizontal="אותו קובץ, זה-בצד-זה (סטינגר בצד שמאל, רצועת מט בצד ימין)"
23
+TrackMatteLayoutVertical="אותו קובץ, בערימה (סטינגר מעל, רצועת מט מתחת)"
24
+TrackMatteLayoutSeparateFile="קובץ נפרד (אזהרה: רצועת המט עלולה לצאת מסנכרון)"
25
+TrackMatteLayoutMask="מסיכה בלבד"
26
+AudioFadeStyle="סגנון עמעום שמע"
27
+AudioFadeStyle.FadeOutFadeIn="השתק הדרגתית עד לנקודת המעבר ואז הגבר הדרגתית"
28
+AudioFadeStyle.CrossFade="הצלבת עמעום"
29
+SwitchPoint="נקודת צבע שיא"
30
+LumaWipeTransition="ניגוב Luma"
31
 LumaWipe.Image="תמונה"
32
 LumaWipe.Invert="הפוך"
33
 LumaWipe.Softness="רכות"
34
+LumaWipe.Type.BarndoorBottomLeft="דלת אסם שמאל תחתון"
35
+LumaWipe.Type.BarndoorHorizontal="דלת אסם אופקי"
36
+LumaWipe.Type.BarndoorTopLeft="דלת אסם שמאל עליון"
37
+LumaWipe.Type.BarndoorVertical="דלת אסם אנכי"
38
+LumaWipe.Type.BlindsHorizontal="תריסים אופקי"
39
+LumaWipe.Type.BoxBottomLeft="קופסה שמאל תחתון"
40
+LumaWipe.Type.BoxBottomRight="קופסה ימין תחתון"
41
+LumaWipe.Type.BoxTopLeft="קופסה שמאל עליון"
42
+LumaWipe.Type.BoxTopRight="קופסה ימין עליון"
43
+LumaWipe.Type.Burst="התפרצות"
44
+LumaWipe.Type.CheckerboardSmall="לוח דמקה קטן"
45
 LumaWipe.Type.Circles="עיגולים"
46
 LumaWipe.Type.Clock="שעון"
47
 LumaWipe.Type.Cloud="ענן"
48
+LumaWipe.Type.Curtain="וילון"
49
+LumaWipe.Type.Fan="מאוורר"
50
+LumaWipe.Type.Fractal="פרקטל"
51
+LumaWipe.Type.Iris="צמצם"
52
+LumaWipe.Type.LinearHorizontal="לינארי אופקי"
53
+LumaWipe.Type.LinearTopLeft="לינארי שמאל עליון"
54
+LumaWipe.Type.LinearTopRight="לינארי ימין עליון"
55
+LumaWipe.Type.LinearVertical="לינארי אנכי"
56
+LumaWipe.Type.ParallelZigzagHorizontal="זיגזג מקבילי אופקי"
57
+LumaWipe.Type.ParallelZigzagVertical="זיגזג מקבילי אנכי"
58
+LumaWipe.Type.Sinus9="סינוס 9"
59
 LumaWipe.Type.Spiral="ספירלה"
60
 LumaWipe.Type.Square="ריבוע"
61
 LumaWipe.Type.Squares="ריבועים"
62
 LumaWipe.Type.Stripes="פסים"
63
+LumaWipe.Type.StripsHorizontal="רצועות אופקי"
64
+LumaWipe.Type.StripsVertical="רצועות אנכי"
65
 LumaWipe.Type.Watercolor="צבע מים"
66
+LumaWipe.Type.ZigzagHorizontal="זיגזג אופקי"
67
+LumaWipe.Type.ZigzagVertical="זיגזג אנכי"
68
+AudioMonitoring="ניטור שמע"
69
+AudioMonitoring.None="ללא ניטור"
70
+AudioMonitoring.MonitorOnly="ניטור בלבד (השתק פלט)"
71
 AudioMonitoring.Both="צג ופלט"
72
+HardwareDecode="השתמש בפענוח חומרה כאשר הוא זמין"
73
obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/hi-IN.ini Added
76
 
1
@@ -0,0 +1,74 @@
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
+AudioTransitionPointType="ऑडियो संक्रांति बिंदु प्रकार"
20
+TransitionPointTypeFrame="फ़्रेम"
21
+TransitionPointTypeTime="समय (मिलीसेकेंड)"
22
+TrackMatteEnabled="एक ट्रैक मैट का प्रयोग करें"
23
+InvertTrackMatte="मैट रंग उलटें"
24
+TrackMatteVideoFile="ट्रैक मैट वीडियो फ़ाइल"
25
+TrackMatteLayout="मैट लेआउट"
26
+TrackMatteLayoutHorizontal="वही फ़ाइल, साथ-साथ (बाईं ओर स्टिंगर, दाईं ओर ट्रैक मैट)"
27
+TrackMatteLayoutVertical="वही फ़ाइल, स्टैक्ड (शीर्ष पर स्टिंगर, नीचे ट्रैक मैट)"
28
+TrackMatteLayoutSeparateFile="अलग फ़ाइल (चेतावनी: मैट सिंक से बाहर हो सकता है)"
29
+TrackMatteLayoutMask="केवल मास्क"
30
+AudioFadeStyle="ऑडियो धुँधलाने की शैली"
31
+AudioFadeStyle.FadeOutFadeIn="संक्रांति बिंदु पर धुँधला निकास करें, उसके बाद धुँधला प्रवेश"
32
+AudioFadeStyle.CrossFade="क्रॉसफ़ेड"
33
+SwitchPoint="चरम रंग बिंदु"
34
+LumaWipeTransition="लूमा वाइप"
35
+LumaWipe.Image="छवि"
36
+LumaWipe.Invert="उलटें"
37
+LumaWipe.Softness="मृदुता"
38
+LumaWipe.Type.BarndoorBottomLeft="Barndoor तल में बाएं"
39
+LumaWipe.Type.BarndoorHorizontal="Barndoor समतल"
40
+LumaWipe.Type.BarndoorTopLeft="Barndoor शीर्ष बाएं"
41
+LumaWipe.Type.BarndoorVertical="Barndoor खड़ी"
42
+LumaWipe.Type.BlindsHorizontal="Blinds समतल"
43
+LumaWipe.Type.BoxBottomLeft="बक्से के तल में बाएं"
44
+LumaWipe.Type.BoxBottomRight="बक्से के तल में दाएं"
45
+LumaWipe.Type.BoxTopLeft="बक्से के शीर्ष बाएं"
46
+LumaWipe.Type.BoxTopRight="बक्से के शीर्ष दाएं"
47
+LumaWipe.Type.Burst="विस्फोट"
48
+LumaWipe.Type.CheckerboardSmall="बिसात छोटा"
49
+LumaWipe.Type.Circles="गोले"
50
+LumaWipe.Type.Clock="घड़ी"
51
+LumaWipe.Type.Cloud="बादल"
52
+LumaWipe.Type.Curtain="परदा"
53
+LumaWipe.Type.Fan="पंखा"
54
+LumaWipe.Type.Fractal="आंशिक"
55
+LumaWipe.Type.Iris="पुतली"
56
+LumaWipe.Type.LinearHorizontal="क्षैतिज रैखिक"
57
+LumaWipe.Type.LinearTopLeft="रैखिक शीर्ष बाएं"
58
+LumaWipe.Type.LinearTopRight="रैखिक शीर्ष दाएं"
59
+LumaWipe.Type.LinearVertical="रैखिक लंबवत"
60
+LumaWipe.Type.ParallelZigzagHorizontal="समानांतर ज़िगज़ैग क्षैतिज"
61
+LumaWipe.Type.ParallelZigzagVertical="समानांतर ज़िगज़ैग क्षैतिज"
62
+LumaWipe.Type.Spiral="कुंडली"
63
+LumaWipe.Type.Square="वर्गाकार"
64
+LumaWipe.Type.Squares="कई वर्ग"
65
+LumaWipe.Type.Stripes="धारीदार"
66
+LumaWipe.Type.StripsHorizontal="क्षैतिज धारियाँ"
67
+LumaWipe.Type.StripsVertical="लंबवत धारियाँ"
68
+LumaWipe.Type.Watercolor="वाटरकलर"
69
+LumaWipe.Type.ZigzagHorizontal="ज़िगजैग क्षैतिज"
70
+LumaWipe.Type.ZigzagVertical="ज़िगजैग लंबवत"
71
+AudioMonitoring="ऑडियो निगरानी"
72
+AudioMonitoring.None="मॉनिटर बंद"
73
+AudioMonitoring.MonitorOnly="केवल मॉनिटर (आउटपुट चुप करें)"
74
+AudioMonitoring.Both="मॉनिटर तथाआउटपुट"
75
+HardwareDecode="यदि उपलब्ध हो तो हार्डवेयर डिकोडिंग का उपयोग करें"
76
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/hu-HU.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/hu-HU.ini Changed
16
 
1
@@ -17,6 +17,14 @@
2
 AudioTransitionPointType="Hangátmenet-pont típusa"
3
 TransitionPointTypeFrame="Képkocka"
4
 TransitionPointTypeTime="Idő (Ezredmásodperc)"
5
+TrackMatteEnabled="Követő matt használata"
6
+InvertTrackMatte="Matt színeinek invertálása"
7
+TrackMatteVideoFile="Követő matt videofájlja"
8
+TrackMatteLayout="Matt elrendezése"
9
+TrackMatteLayoutHorizontal="Ugyanazon fájl, egymás mellett (stinger baloldalt, követő matt jobboldalt)"
10
+TrackMatteLayoutVertical="Ugyanazon fájl, egymás felett (stinger felül, követő matt alul)"
11
+TrackMatteLayoutSeparateFile="Külön fájl (figyelmeztetés: a matt idővel elcsúszhat)"
12
+TrackMatteLayoutMask="Csak maszk"
13
 AudioFadeStyle="Hangáttűnés stílusa"
14
 AudioFadeStyle.FadeOutFadeIn="Átmenetponthoz halkítás és visszahangosítás"
15
 AudioFadeStyle.CrossFade="Átkeverés"
16
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/id-ID.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/id-ID.ini Changed
15
 
1
@@ -17,6 +17,13 @@
2
 AudioTransitionPointType="Tipe titik Transisi Audio"
3
 TransitionPointTypeTime="Waktu (milidetik)"
4
 TrackMatteEnabled="Gunakan Trek Matte"
5
+InvertTrackMatte="Telungkupkan Warna Matte"
6
+TrackMatteVideoFile="Lacak Berkas Video Matte"
7
+TrackMatteLayout="Layout Matte"
8
+TrackMatteLayoutHorizontal="Berkas yang sama, berdampingan (stinger di sebelah kiri, track matte di sebelah kanan)"
9
+TrackMatteLayoutVertical="Berkas yang sama, ditumpuk (stinger di atas, track matte di bawah)"
10
+TrackMatteLayoutSeparateFile="Berkas terpisah (peringatan: matte bisa tidak sinkron)"
11
+TrackMatteLayoutMask="Samarkan saja"
12
 AudioFadeStyle="Tipe Fade Audio"
13
 AudioFadeStyle.FadeOutFadeIn="Fade out ke titik transisi kemudian fade in"
14
 SwitchPoint="Titik Warna Puncak"
15
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/it-IT.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/it-IT.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Stesso file, fianco a fianco (stinger a sinistra, traccia opaca a destra)"
3
 TrackMatteLayoutVertical="Stesso file, impilato (stinger in alto, traccia opaca in basso)"
4
 TrackMatteLayoutSeparateFile="File separato (attenzione: l'opaco può andare fuori sincronizzazione)"
5
+TrackMatteLayoutMask="Solo maschera"
6
 AudioFadeStyle="Stile della dissolvenza audio"
7
 AudioFadeStyle.FadeOutFadeIn="Dissolvenza fino al punto di transizione, poi dissolvenza in entrata"
8
 AudioFadeStyle.CrossFade="Dissolvenza incrociata"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ja-JP.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ja-JP.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="同じファイルを並べて表示 (左側がスティンガー、右側がトラックマット)"
3
 TrackMatteLayoutVertical="同じファイル、積み重ね (上にスティンガー、下にトラックマット)"
4
 TrackMatteLayoutSeparateFile="別のファイル (警告: マットが同期しなくなる可能性があります)"
5
+TrackMatteLayoutMask="マスクのみ"
6
 AudioFadeStyle="オーディオフェードスタイル"
7
 AudioFadeStyle.FadeOutFadeIn="トランジションポイントまでフェードアウトしてからフェードイン"
8
 AudioFadeStyle.CrossFade="クロスフェード"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ka-GE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ka-GE.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="იგივე ფაილი, გვერდიგვერდ (Stinger მარცხნივ, ჩანაწერის ნიღაბი მარჯვნივ)"
3
 TrackMatteLayoutVertical="იგივე ფაილი, დაწყობილი (Stinger ზემოთ, ჩანაწერის ნიღაბი ქვემოთ)"
4
 TrackMatteLayoutSeparateFile="ცალკე ფაილი (გაფრთხილება: ნიღაბი შეიძლება ამოვარდეს სინქრონიდან)"
5
+TrackMatteLayoutMask="მხოლოდ ნიღაბი"
6
 AudioFadeStyle="ხმის მილევის ნაირსახეობა"
7
 AudioFadeStyle.FadeOutFadeIn="თანდათან მილევა გადასვლის წერტილში და შემდეგ მომატება"
8
 AudioFadeStyle.CrossFade="ჯვარედინი გადასვლა"
9
obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/kmr-TR.ini Added
74
 
1
@@ -0,0 +1,72 @@
2
+FadeTransition="Wendabûn"
3
+CutTransition="Jêkirin"
4
+SwipeTransition="Kişandin"
5
+SlideTransition="Şemitandin"
6
+FadeToColorTransition="Wendabûn bo rengekê"
7
+Direction="Rêveçûn"
8
+Direction.Left="Çep"
9
+Direction.Right="Rast"
10
+Direction.Up="Jor"
11
+Direction.Down="Jêr"
12
+SwipeIn="Bişemitîne hundir"
13
+Color="Reng"
14
+VideoFile="Pelêl vîdyoyê"
15
+TransitionPoint="Xala derbasbûnê"
16
+TransitionPointFrame="Xala derbasbûnê (tarik)"
17
+TransitionPointType="Cureyê xala derbasbûnê"
18
+AudioTransitionPointType="Cureya xala derbasbûna dengê"
19
+TransitionPointTypeFrame="Çarçove"
20
+TransitionPointTypeTime="Dem (mîlîçirkeyan)"
21
+TrackMatteEnabled="Şopa mat bi kar bîne"
22
+InvertTrackMatte="Rengên mat berevajî bike"
23
+TrackMatteVideoFile="Pelê vîdyoya mat bişopînin"
24
+TrackMatteLayout="Xêzkirina mat"
25
+TrackMatteLayoutHorizontal="Heman pel, li tenişta hev (sarkastî li milê çepê, şopa mat li rastê)"
26
+TrackMatteLayoutVertical="Heman pel, hilandî (sarkastî li jor, şopa mat li jêr)"
27
+TrackMatteLayoutSeparateFile="Pelê veqetandî (hişyarî: mat dikare ji hevdemkirinê derkeve)"
28
+TrackMatteLayoutMask="Tenê rûpoş"
29
+AudioFadeStyle="Stîla tarî ya deng"
30
+AudioFadeStyle.FadeOutFadeIn="Ber bi xala derbazbûnê ve tarî bikin û piştre hêdî hêdî"
31
+AudioFadeStyle.CrossFade="Jinavçûn"
32
+SwitchPoint="Xala rengê lûtkeyê"
33
+LumaWipe.Image="Wêne"
34
+LumaWipe.Invert="Zivirandin"
35
+LumaWipe.Softness="Nermbûn"
36
+LumaWipe.Type.BarndoorBottomLeft="Çepa jêr a deriyê embarê"
37
+LumaWipe.Type.BarndoorHorizontal="Deriyê embarê berwarî"
38
+LumaWipe.Type.BarndoorTopLeft="Deriyê embarê jorîn çepê"
39
+LumaWipe.Type.BarndoorVertical="Deriyê embarê emûdî"
40
+LumaWipe.Type.BlindsHorizontal="Panjur berwarî"
41
+LumaWipe.Type.BoxBottomLeft="Kodika çepê ya jêr"
42
+LumaWipe.Type.BoxBottomRight="Kodika rastê ya jêr"
43
+LumaWipe.Type.BoxTopLeft="Kodika çepê ya jor"
44
+LumaWipe.Type.BoxTopRight="Kodika rastê ya jor"
45
+LumaWipe.Type.Burst="Teqandin"
46
+LumaWipe.Type.CheckerboardSmall="Textê damayê biçûk"
47
+LumaWipe.Type.Circles="Gilover"
48
+LumaWipe.Type.Clock="Demjimêr"
49
+LumaWipe.Type.Cloud="Ewr"
50
+LumaWipe.Type.Curtain="Perde"
51
+LumaWipe.Type.Fan="Perwane"
52
+LumaWipe.Type.Fractal="Fraktal"
53
+LumaWipe.Type.Iris="reşika çavan"
54
+LumaWipe.Type.LinearHorizontal="Asoyî xêzî"
55
+LumaWipe.Type.LinearTopLeft="Çepa jorîn a xêzî"
56
+LumaWipe.Type.LinearTopRight="Rastê jorîn yê xêzî"
57
+LumaWipe.Type.LinearVertical="Tîrêjên xêzî"
58
+LumaWipe.Type.ParallelZigzagHorizontal="Zîkzak hevterîb berwarî"
59
+LumaWipe.Type.ParallelZigzagVertical="Zîkzak hevterîb emûdî"
60
+LumaWipe.Type.Spiral="Lihevgeryî"
61
+LumaWipe.Type.Square="Çargoşe"
62
+LumaWipe.Type.Squares="Çargoşe"
63
+LumaWipe.Type.Stripes="Xêz"
64
+LumaWipe.Type.StripsHorizontal="Xêzên asoyî"
65
+LumaWipe.Type.StripsVertical="Xêzên stûnî"
66
+LumaWipe.Type.Watercolor="Avreng"
67
+LumaWipe.Type.ZigzagHorizontal="Zîkzak asoyî"
68
+LumaWipe.Type.ZigzagVertical="Zîkzak stûnî"
69
+AudioMonitoring="Çavdêriya Dengê"
70
+AudioMonitoring.None="Dîmender girtî"
71
+AudioMonitoring.MonitorOnly="Dîmender tenê (derketina bê deng)"
72
+AudioMonitoring.Both="Dîmender û deran"
73
+HardwareDecode="Dema amade be dekodekirina alavê bi kar bîne"
74
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ko-KR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ko-KR.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="같은 영상 소스(좌측 스팅어 전환, 우측 트랙 매트 전환)"
3
 TrackMatteLayoutVertical="같은 영상 소스 (위쪽 스팅어 전환, 아래 트랙 매트)"
4
 TrackMatteLayoutSeparateFile="파일 분리 (주의: 트랙 매트 싱크가 맞지 않을 수 있음)"
5
+TrackMatteLayoutMask="마스크만"
6
 AudioFadeStyle="소리 점감 형식"
7
 AudioFadeStyle.FadeOutFadeIn="전환 지점까지 서서히 작아졌다가 다시 커지기"
8
 AudioFadeStyle.CrossFade="천천히 작아지기와 커지기 동시"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ms-MY.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ms-MY.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Fail yang sama, sebelah-menyebelah (stinger di sebelah kiri, matte trek di sebelah kanan)"
3
 TrackMatteLayoutVertical="Fail yang sama, bertindan (stinger di atas, matte trek di bawah)"
4
 TrackMatteLayoutSeparateFile="Fail berasingan (amaran: matte boleh menjadi tidak segerak)"
5
+TrackMatteLayoutMask="Topeng sahaja"
6
 AudioFadeStyle="Gaya Resap Audio"
7
 AudioFadeStyle.FadeOutFadeIn="Resap lenyap ke titik peralihan kemudian resap masuk"
8
 AudioFadeStyle.CrossFade="Resap Silang"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/nb-NO.ini Changed
24
 
1
@@ -14,8 +14,17 @@
2
 TransitionPoint="Overgangspunkt"
3
 TransitionPointFrame="Overgangspunkt (ramme)"
4
 TransitionPointType="Overgangspunkttype"
5
+AudioTransitionPointType="Overgangpunkt type for lyd"
6
 TransitionPointTypeFrame="Ramme"
7
 TransitionPointTypeTime="Tid (millisekunder)"
8
+TrackMatteEnabled="Bruk en Følge Matte"
9
+InvertTrackMatte="Snu Matte farger"
10
+TrackMatteVideoFile="Video fil for Følge Matte"
11
+TrackMatteLayout="Matte oppsett"
12
+TrackMatteLayoutHorizontal="Samme fil, side om side (stinger til venstre, følge matte til høyre)"
13
+TrackMatteLayoutVertical="Samme fil, stablet (stinger på topp, følge matte under)"
14
+TrackMatteLayoutSeparateFile="Separat fil (advarsel: matte kan falle ut av synk)"
15
+TrackMatteLayoutMask="Kun matte (maske)"
16
 AudioFadeStyle="Lyduttoningsstil"
17
 AudioFadeStyle.FadeOutFadeIn="Ton ut til overgangspunktet, og så ton inn igjen"
18
 AudioFadeStyle.CrossFade="Kryssuttoning"
19
@@ -59,3 +68,4 @@
20
 AudioMonitoring.None="Av for skjermen"
21
 AudioMonitoring.MonitorOnly="Kun skjermen (Demp utdataen)"
22
 AudioMonitoring.Both="Både skjermen og utdataen"
23
+HardwareDecode="Bruk maskinvaredekoding når tilgjengelig"
24
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/nl-NL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/nl-NL.ini Changed
9
 
1
@@ -22,6 +22,7 @@
2
 TrackMatteLayoutHorizontal="Hetzelfde bestand, naast elkaar (stinger aan de linkerkant, track-mat aan de rechterkant)"
3
 TrackMatteLayoutVertical="Hetzelfde bestand, gestapeld (stinger bovenop, track-mat onderop)"
4
 TrackMatteLayoutSeparateFile="Afzonderlijk bestand (waarschuwing: mat kan gedesynchroniseerd raken)"
5
+TrackMatteLayoutMask="Alleen masker"
6
 AudioFadeStyle="Audio Fade stijl"
7
 AudioFadeStyle.FadeOutFadeIn="Overgang van punt dan fade-in uitfaden"
8
 AudioFadeStyle.CrossFade="Crossfading"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/pl-PL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/pl-PL.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Ten sam plik, obok siebie (stinger po lewej, track matte po prawej)"
3
 TrackMatteLayoutVertical="Ten sam plik, jeden na drugim (stinger na wierzchu, track matte pod spodem)"
4
 TrackMatteLayoutSeparateFile="Oddzielny plik (uwaga: track matte może się rozsynchronizować)"
5
+TrackMatteLayoutMask="Tylko maska"
6
 AudioFadeStyle="Styl przejścia dźwięku"
7
 AudioFadeStyle.FadeOutFadeIn="Stopniowe wyciszenie do punktu przejścia a następnie stopniowe wzmocnienie"
8
 AudioFadeStyle.CrossFade="Płynne przejście"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/pt-BR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/pt-BR.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Mesmo arquivo, lado a lado (stinger à esquerda, track matte à direita)"
3
 TrackMatteLayoutVertical="Mesmo arquivo, empilhado (stinger no topo, track matte na parte inferior)"
4
 TrackMatteLayoutSeparateFile="Arquivo separado (aviso: o matte pode sair de sincronia)"
5
+TrackMatteLayoutMask="Máscara apenas"
6
 AudioFadeStyle="Estilo de esmaecimento de áudio"
7
 AudioFadeStyle.FadeOutFadeIn="Esmaecer imagem até o ponto de transição e depois aparecer"
8
 AudioFadeStyle.CrossFade="Transição suave"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/pt-PT.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/pt-PT.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="Mesmo ficheiro, lado a lado (ferrão à esquerda, máscara à direita)"
3
 TrackMatteLayoutVertical="Mesmo ficheiro, empilhado (ferrão ao cimo, máscara em baixo)"
4
 TrackMatteLayoutSeparateFile="Ficheiro separado (aviso: a máscara pode perder a sincronia)"
5
+TrackMatteLayoutMask="Só máscara"
6
 AudioFadeStyle="Estilo de desvanecimento do áudio"
7
 AudioFadeStyle.FadeOutFadeIn="Desvanecer para o ponto de transição e desvanecer para dentro"
8
 AudioFadeStyle.CrossFade="Desvanecer cruzado"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ro-RO.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ro-RO.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Același fișier, unul lângă altul (înțepător în stânga, matcă de piste în dreapta)"
3
 TrackMatteLayoutVertical="Același fișier, stivuit (stivuitor în partea de sus, matca pistei în jos)"
4
 TrackMatteLayoutSeparateFile="Fişier separat (avertisment: matte se poate desincroniza)"
5
+TrackMatteLayoutMask="Doar masca"
6
 AudioFadeStyle="Stil estompare audio"
7
 AudioFadeStyle.FadeOutFadeIn="Estompare la punctul de tranziție, apoi estompează în"
8
 AudioFadeStyle.CrossFade="Estompare"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="Тот же файл, бок о бок (стингер слева, track matte справа)"
3
 TrackMatteLayoutVertical="Тот же файл, стак (стингер вверху, маска внизу)"
4
 TrackMatteLayoutSeparateFile="Отдельный файл (внимание: matte может выйти из синхронизации)"
5
+TrackMatteLayoutMask="Только маска"
6
 AudioFadeStyle="Стиль затухания аудио"
7
 AudioFadeStyle.FadeOutFadeIn="Затухание в точку перехода с последующим появлением"
8
 AudioFadeStyle.CrossFade="Переход"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/sk-SK.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/sk-SK.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Rovnaký súbor, vedľa seba (stinger naľavo, stopa matte napravo)"
3
 TrackMatteLayoutVertical="Rovnaký súbor, naskladané (stinger hore, stopa matte dole)"
4
 TrackMatteLayoutSeparateFile="Rozdielny súbor (varovanie: matte môže vypadnúť zo synchronizácie)"
5
+TrackMatteLayoutMask="Iba maska"
6
 AudioFadeStyle="Štýl Prechodu Zvuku"
7
 AudioFadeStyle.FadeOutFadeIn="Zoslabnúť do bodu prechodu, potom zosilňovať"
8
 AudioFadeStyle.CrossFade="Prelínanie"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/sl-SI.ini Changed
19
 
1
@@ -14,8 +14,17 @@
2
 TransitionPoint="Točka prehoda"
3
 TransitionPointFrame="Točka prehoda (sličica)"
4
 TransitionPointType="Vrsta točke prehoda"
5
+AudioTransitionPointType="Vrsta točke za zvočni prehod"
6
 TransitionPointTypeFrame="Sličica"
7
 TransitionPointTypeTime="Čas (ms)"
8
+TrackMatteEnabled="Uporabi masko za trak"
9
+InvertTrackMatte="Inverzne barve maske"
10
+TrackMatteVideoFile="Video datoteka za masko steze"
11
+TrackMatteLayout="Postavitev maske"
12
+TrackMatteLayoutHorizontal="Ista datotoeka, eden zraven drugega (stinger je na levi, maska steze na desni)"
13
+TrackMatteLayoutVertical="Ista datoteka (stinger je na vrhu, maska steze je na dnu)"
14
+TrackMatteLayoutSeparateFile="Ločeni datoteki (pozor: maska lahko postane asinhrona)"
15
+TrackMatteLayoutMask="Zgolj maska"
16
 AudioFadeStyle="Slog pojemanja zvoka"
17
 AudioFadeStyle.FadeOutFadeIn="Pojemaj do točke prehoda in nato povračaj"
18
 AudioFadeStyle.CrossFade="Navzkrižno pojemanje"
19
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/sv-SE.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/sv-SE.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="Samma fil, sida vid sida (stinger till vänster, spårad mattning till höger)"
3
 TrackMatteLayoutVertical="Samma fil, staplad (stinger längst upp, spårad mattning längst ned)"
4
 TrackMatteLayoutSeparateFile="Separat fil (varning: mattningen kan hamna ur synk)"
5
+TrackMatteLayoutMask="Endast mask"
6
 AudioFadeStyle="Stil för ljuduttoning"
7
 AudioFadeStyle.FadeOutFadeIn="Tona ut till övergångspunkten och sedan tona in"
8
 AudioFadeStyle.CrossFade="Övertoning"
9
obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/szl-PL.ini Added
72
 
1
@@ -0,0 +1,70 @@
2
+FadeTransition="Zanikanie"
3
+CutTransition="Tniycie"
4
+SwipeTransition="Przeciōngniyńcie"
5
+SlideTransition="Pōnkniyńcie"
6
+FadeToColorTransition="Zanikanie do farby"
7
+Direction="Richtōng"
8
+Direction.Left="W lewo"
9
+Direction.Right="W prawo"
10
+Direction.Up="W gōra"
11
+Direction.Down="W dōł"
12
+SwipeIn="Cofej do postrzodka"
13
+Color="Farba"
14
+VideoFile="Zbiōr wideo"
15
+TransitionPoint="Pōnkt przejścio"
16
+TransitionPointFrame="Pōnkt przejścio (rōmka)"
17
+TransitionPointType="Zorta pōnktu przejścio"
18
+AudioTransitionPointType="Zorta pōnktu przejścio audio"
19
+TransitionPointTypeFrame="Rōmka"
20
+TransitionPointTypeTime="Czas (w milisekōndach)"
21
+TrackMatteEnabled="Użyj Track Matte"
22
+InvertTrackMatte="Ôdwrōć farby larwy Track Matte"
23
+TrackMatteVideoFile="Zbiōr wideo Track Matte"
24
+TrackMatteLayout="Ukłod Track Matte"
25
+TrackMatteLayoutHorizontal="Tyn sōm zbiōr, kole siebie (stinger po lewyj, track matte po prawyj)"
26
+TrackMatteLayoutVertical="Tyn sōm zbiōr, jedyn na drugim (stinger na wiyrchu, track matte na spodku)"
27
+TrackMatteLayoutSeparateFile="Ôsobny zbiōr (pozōr: track matte może sie rozsynchrōnizować)"
28
+AudioFadeStyle="Styl przejścio klangu"
29
+AudioFadeStyle.FadeOutFadeIn="Stopniowe wyciszynie do pōnktu przejścio a potym stopniowe zmocniynie"
30
+AudioFadeStyle.CrossFade="Płynne przejście"
31
+SwitchPoint="Szpicowy pōnkt farby"
32
+LumaWipe.Image="Ôbroz"
33
+LumaWipe.Invert="Ôdwrōć"
34
+LumaWipe.Softness="Miynkość"
35
+LumaWipe.Type.BarndoorBottomLeft="Ôtwiyrane dźwiyrze po przekōntnyj ôd lewego spodka"
36
+LumaWipe.Type.BarndoorHorizontal="Ôtwiyrane dźwiyrze poziōmo"
37
+LumaWipe.Type.BarndoorTopLeft="Ôtwiyrane dźwiyrze po przekōntnyj ôd lewyj gōry"
38
+LumaWipe.Type.BarndoorVertical="Ôtwiyrane dźwiyrze piōnowo"
39
+LumaWipe.Type.BlindsHorizontal="Forhangi poziōme"
40
+LumaWipe.Type.BoxBottomLeft="Szachtelka ôtwiyrano ôd lewego spodka"
41
+LumaWipe.Type.BoxBottomRight="Szachtelka ôtwiyrano ôd prawego spodka"
42
+LumaWipe.Type.BoxTopLeft="Szachtelka ôtwiyrano ôd lewyj gōry"
43
+LumaWipe.Type.BoxTopRight="Szachtelka ôtwiyrano ôd prawyj gōry"
44
+LumaWipe.Type.Burst="Abszus"
45
+LumaWipe.Type.CheckerboardSmall="Mało szachownica"
46
+LumaWipe.Type.Circles="Kōłka"
47
+LumaWipe.Type.Clock="Zygor"
48
+LumaWipe.Type.Cloud="Chmōra"
49
+LumaWipe.Type.Curtain="Gardina"
50
+LumaWipe.Type.Fan="Fecher"
51
+LumaWipe.Type.Fractal="Fraktal"
52
+LumaWipe.Type.LinearHorizontal="Linijowo w poziōmie"
53
+LumaWipe.Type.LinearTopLeft="Linijowo ôd lewyj gōry"
54
+LumaWipe.Type.LinearTopRight="Linijowo ôd prawyj gōry"
55
+LumaWipe.Type.LinearVertical="Linijowo piōnowo"
56
+LumaWipe.Type.ParallelZigzagHorizontal="Rōwnolygły zygzak poziōmy"
57
+LumaWipe.Type.ParallelZigzagVertical="Rōwnolygły zygzak piōnowy"
58
+LumaWipe.Type.Spiral="Szpirala"
59
+LumaWipe.Type.Square="Sztyryrōg"
60
+LumaWipe.Type.Squares="Sztyryrogi"
61
+LumaWipe.Type.Stripes="Paski"
62
+LumaWipe.Type.StripsHorizontal="Paski poziōme"
63
+LumaWipe.Type.StripsVertical="Paski piōnowe"
64
+LumaWipe.Type.Watercolor="Akwarela"
65
+LumaWipe.Type.ZigzagHorizontal="Zygzak poziōmy"
66
+LumaWipe.Type.ZigzagVertical="Zygzak piōnowy"
67
+AudioMonitoring="Mōnitorowanie audio"
68
+AudioMonitoring.None="Wyłōnczōne"
69
+AudioMonitoring.MonitorOnly="Ino mōnitorowanie (wyjście wyłōnczōne)"
70
+AudioMonitoring.Both="Mōnitorowanie i przekazowanie na wyjście"
71
+HardwareDecode="Użyj dekodowanio sprzyntowego, kej je dostympne"
72
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini Changed
9
 
1
@@ -22,6 +22,7 @@
2
 TrackMatteLayoutHorizontal="Aynı dosya, yanyana (stinger solda, izleme matı sağda)"
3
 TrackMatteLayoutVertical="Aynı dosya, yığınlanmış (stinger yukarıda, izleme matı aşağıda)"
4
 TrackMatteLayoutSeparateFile="Ayrı dosya (uyarı: mat senkronizasyonu kaybolabilir)"
5
+TrackMatteLayoutMask="Yalnızca maske"
6
 AudioFadeStyle="Ses Geçiş Stili"
7
 AudioFadeStyle.FadeOutFadeIn="Geçiş noktasına doğru azalt sonra artır"
8
 AudioFadeStyle.CrossFade="Çapraz Geçiş"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/uk-UA.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/uk-UA.ini Changed
9
 
1
@@ -19,6 +19,7 @@
2
 TrackMatteLayoutHorizontal="Той самий файл, поруч (стінґер ліворуч, маска праворуч)"
3
 TrackMatteLayoutVertical="Той самий файл, стіс (стінґер вгорі, маска внизу)"
4
 TrackMatteLayoutSeparateFile="Окремий файл (увага: маска може втратити синхронізацію)"
5
+TrackMatteLayoutMask="Лише маска"
6
 AudioFadeStyle="Стиль затухання звуку"
7
 AudioFadeStyle.FadeOutFadeIn="Затухання до точки переходу, потім гучність наростає"
8
 AudioFadeStyle.CrossFade="Плавний перехід (з початку)"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/zh-CN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/zh-CN.ini Changed
9
 
1
@@ -25,6 +25,7 @@
2
 TrackMatteLayoutHorizontal="相同文件,并排显示(插入视频在左,轨迹遮罩在右)"
3
 TrackMatteLayoutVertical="相同文件,堆叠显示(插入视频在上,轨迹遮罩在下)"
4
 TrackMatteLayoutSeparateFile="分隔文件 (警告:遮罩可能会不再同步)"
5
+TrackMatteLayoutMask="仅蒙板"
6
 AudioFadeStyle="音频淡入淡出样式"
7
 AudioFadeStyle.FadeOutFadeIn="淡出到过渡点然后淡入"
8
 AudioFadeStyle.CrossFade="交叉淡入淡出"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/data/locale/zh-TW.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/data/locale/zh-TW.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 TrackMatteLayoutHorizontal="相同檔案,並排顯示(插入影像在左,音軌遮罩在右)"
3
 TrackMatteLayoutVertical="相同檔案,堆疊顯示(插入影像在上,音軌遮罩在下)"
4
 TrackMatteLayoutSeparateFile="分開檔案(注意:遮罩可能會不同步)"
5
+TrackMatteLayoutMask="僅遮罩"
6
 AudioFadeStyle="音訊淡入淡出風格"
7
 AudioFadeStyle.FadeOutFadeIn="淡出至轉換點再淡入"
8
 AudioFadeStyle.CrossFade="交叉式淡入淡出"
9
obs-studio-27.0.1.tar.xz/plugins/obs-transitions/transition-stinger.c -> obs-studio-27.1.3.tar.xz/plugins/obs-transitions/transition-stinger.c Changed
163
 
1
@@ -1,12 +1,16 @@
2
 #include <obs-module.h>
3
 #include <util/dstr.h>
4
+#include "util/platform.h"
5
 
6
 #define TIMING_TIME 0
7
 #define TIMING_FRAME 1
8
 
9
-#define MATTE_LAYOUT_HORIZONTAL 0
10
-#define MATTE_LAYOUT_VERTICAL 1
11
-#define MATTE_LAYOUT_SEPARATE_FILE 2
12
+enum matte_layout {
13
+   MATTE_LAYOUT_HORIZONTAL,
14
+   MATTE_LAYOUT_VERTICAL,
15
+   MATTE_LAYOUT_SEPARATE_FILE,
16
+   MATTE_LAYOUT_MASK,
17
+};
18
 
19
 enum fade_style { FADE_STYLE_FADE_OUT_FADE_IN, FADE_STYLE_CROSS_FADE };
20
 
21
@@ -34,6 +38,7 @@
22
    float matte_height_factor;
23
    bool invert_matte;
24
    bool do_texrender;
25
+   bool matte_rendered;
26
 
27
    gs_effect_t *matte_effect;
28
    gs_eparam_t *ep_a_tex;
29
@@ -100,7 +105,7 @@
30
    s->invert_matte = obs_data_get_bool(settings, "invert_matte");
31
 
32
    s->do_texrender = s->track_matte_enabled &&
33
-             s->matte_layout != MATTE_LAYOUT_SEPARATE_FILE;
34
+             s->matte_layout < MATTE_LAYOUT_SEPARATE_FILE;
35
 
36
    if (s->matte_source) {
37
        obs_source_release(s->matte_source);
38
@@ -303,8 +308,25 @@
39
 {
40
    struct stinger_info *s = data;
41
 
42
+   uint32_t media_cx = obs_source_get_width(s->media_source);
43
+   uint32_t media_cy = obs_source_get_height(s->media_source);
44
+
45
    if (s->track_matte_enabled) {
46
-       obs_transition_video_render(s->source, stinger_matte_render);
47
+       bool ready = obs_source_active(s->media_source) && !!media_cx &&
48
+                !!media_cy;
49
+       if (ready) {
50
+           if (!s->matte_rendered)
51
+               s->matte_rendered = true;
52
+           obs_transition_video_render(s->source,
53
+                           stinger_matte_render);
54
+       } else {
55
+           obs_transition_video_render_direct(
56
+               s->source, s->matte_rendered
57
+                          ? OBS_TRANSITION_SOURCE_B
58
+                          : OBS_TRANSITION_SOURCE_A);
59
+       }
60
+       if (s->matte_layout == MATTE_LAYOUT_MASK)
61
+           return;
62
    } else {
63
        float t = obs_transition_get_time(s->source);
64
        bool use_a = t < s->transition_point;
65
@@ -325,9 +347,6 @@
66
    float source_cxf = (float)source_cx;
67
    float source_cyf = (float)source_cy;
68
 
69
-   uint32_t media_cx = obs_source_get_width(s->media_source);
70
-   uint32_t media_cy = obs_source_get_height(s->media_source);
71
-
72
    if (!media_cx || !media_cy)
73
        return;
74
 
75
@@ -464,6 +483,8 @@
76
            return;
77
        }
78
 
79
+       s->matte_rendered = false;
80
+
81
        proc_handler_call(ph, "get_duration", &cd);
82
        proc_handler_call(ph, "get_nb_frames", &cd);
83
        s->duration_ns =
84
@@ -656,6 +677,9 @@
85
            p, obs_module_text("TrackMatteLayoutSeparateFile"),
86
            MATTE_LAYOUT_SEPARATE_FILE);
87
 #endif
88
+       obs_property_list_add_int(
89
+           p, obs_module_text("TrackMatteLayoutMask"),
90
+           MATTE_LAYOUT_MASK);
91
 
92
        obs_property_set_modified_callback(p,
93
                           track_matte_layout_modified);
94
@@ -706,6 +730,60 @@
95
    return ppts;
96
 }
97
 
98
+static void missing_file_callback(void *src, const char *new_path, void *data)
99
+{
100
+   struct stinger_info *s = src;
101
+   obs_data_t *settings = obs_source_get_settings(s->source);
102
+
103
+   const char *type = data;
104
+
105
+   if (strcmp(type, "media_source") == 0) {
106
+       obs_data_set_string(settings, "path", new_path);
107
+   } else if (strcmp(type, "matte_source") == 0) {
108
+       obs_data_set_string(settings, "track_matte_path", new_path);
109
+   }
110
+
111
+   obs_source_update(s->source, settings);
112
+   obs_data_release(settings);
113
+}
114
+
115
+static obs_missing_files_t *stinger_missing_files(void *data)
116
+{
117
+   struct stinger_info *s = data;
118
+   obs_data_t *settings = obs_source_get_settings(s->source);
119
+   obs_missing_files_t *files = obs_missing_files_create();
120
+
121
+   const char *path = obs_data_get_string(settings, "path");
122
+
123
+   if (strcmp(path, "") != 0) {
124
+       if (!os_file_exists(path)) {
125
+           obs_missing_file_t *file = obs_missing_file_create(
126
+               path, missing_file_callback,
127
+               OBS_MISSING_FILE_SOURCE, s->source,
128
+               (void *)"media_source");
129
+
130
+           obs_missing_files_add_file(files, file);
131
+       }
132
+   }
133
+
134
+   const char *track_matte_path =
135
+       obs_data_get_string(settings, "track_matte_path");
136
+
137
+   if (strcmp(track_matte_path, "") != 0) {
138
+       if (!os_file_exists(track_matte_path)) {
139
+           obs_missing_file_t *file = obs_missing_file_create(
140
+               track_matte_path, missing_file_callback,
141
+               OBS_MISSING_FILE_SOURCE, s->source,
142
+               (void *)"matte_source");
143
+
144
+           obs_missing_files_add_file(files, file);
145
+       }
146
+   }
147
+
148
+   obs_data_release(settings);
149
+   return files;
150
+}
151
+
152
 struct obs_source_info stinger_transition = {
153
    .id = "obs_stinger_transition",
154
    .type = OBS_SOURCE_TYPE_TRANSITION,
155
@@ -717,6 +795,7 @@
156
    .video_render = stinger_video_render,
157
    .video_tick = stinger_video_tick,
158
    .audio_render = stinger_audio_render,
159
+   .missing_files = stinger_missing_files,
160
    .get_properties = stinger_properties,
161
    .enum_active_sources = stinger_enum_active_sources,
162
    .enum_all_sources = stinger_enum_all_sources,
163
obs-studio-27.1.3.tar.xz/plugins/obs-vst/.gitignore Added
81
 
1
@@ -0,0 +1,79 @@
2
+# Prerequisites
3
+*.d
4
+
5
+# Object files
6
+*.o
7
+*.ko
8
+*.obj
9
+*.elf
10
+
11
+# Linker output
12
+*.ilk
13
+*.map
14
+*.exp
15
+
16
+# Precompiled Headers
17
+*.gch
18
+*.pch
19
+
20
+# Libraries
21
+*.lib
22
+*.a
23
+*.la
24
+*.lo
25
+
26
+# Shared objects (inc. Windows DLLs)
27
+*.dll
28
+*.so
29
+*.so.*
30
+*.dylib
31
+
32
+# Executables
33
+*.exe
34
+*.out
35
+*.app
36
+*.i*86
37
+*.x86_64
38
+*.hex
39
+
40
+# Debug files
41
+*.dSYM/
42
+*.su
43
+*.idb
44
+*.pdb
45
+
46
+# CMake files
47
+CMakeLists.txt.user
48
+CMakeCache.txt
49
+CMakeFiles
50
+CMakeScripts
51
+Testing
52
+Makefile
53
+cmake_install.cmake
54
+install_manifest.txt
55
+compile_commands.json
56
+CTestTestfile.cmake
57
+
58
+# Covers JetBrains IDEs
59
+.idea/
60
+
61
+# CMake (when auto built by JetBrains IDEs
62
+cmake-build-*/
63
+
64
+# File-based project format
65
+*.iws
66
+
67
+# JIRA plugin
68
+atlassian-ide-plugin.xml
69
+
70
+# Netbeans
71
+**/nbproject/private/
72
+**/nbproject/Makefile-*.mk
73
+**/nbproject/Package-*.bash
74
+build/
75
+nbbuild/
76
+dist/
77
+nbdist/
78
+.nb-gradle/
79
+
80
+
81
obs-studio-27.1.3.tar.xz/plugins/obs-vst/data/locale/ar-SA.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="فتح واجهة الإضافة"
3
+ClosePluginInterface="إغلاق واجهة الإضافة"
4
+VstPlugin="إضافة VST 2.x"
5
+OpenInterfaceWhenActive="فتح الواجهة عند النشاط"
6
obs-studio-27.1.3.tar.xz/plugins/obs-vst/data/locale/gd-GB.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Fosgail eadar-aghaidh a’ phlugain"
3
+ClosePluginInterface="Dùin eadar-aghaidh a’ phlugain"
4
+VstPlugin="Plugan VST 2.x"
5
+OpenInterfaceWhenActive="Fosgail an eadar-aghaidh nuair a bhios e gnìomhach"
6
obs-studio-27.0.1.tar.xz/plugins/obs-vst/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-vst/data/locale/he-IL.ini Changed
6
 
1
@@ -1,1 +1,4 @@
2
+OpenPluginInterface="פתיחת ממשק התוספים"
3
+ClosePluginInterface="סגירת ממשק התוספים"
4
 VstPlugin="תוסף VST 2.x"
5
+OpenInterfaceWhenActive="פתח ממשק כאשר פעיל"
6
obs-studio-27.1.3.tar.xz/plugins/obs-vst/data/locale/kmr-TR.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Navrûya pêvekê veke"
3
+ClosePluginInterface="Navrûya pêvekê bigire"
4
+VstPlugin="Pêveka VST 2.x"
5
+OpenInterfaceWhenActive="Dema çalak be navrûyê veke"
6
obs-studio-27.1.3.tar.xz/plugins/obs-vst/data/locale/szl-PL.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Ôtwōrz panel pluginu"
3
+ClosePluginInterface="Zawrzij panel pluginu"
4
+VstPlugin="Plugin VST 2.x"
5
+OpenInterfaceWhenActive="Ôtwōrz panel, kej plugin je aktywny"
6
obs-studio-27.0.1.tar.xz/plugins/obs-x264/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-x264/data/locale/en-US.ini Changed
26
 
1
@@ -1,12 +1,12 @@
2
-Bitrate="Bitrate"
3
-CustomBufsize="Use Custom Buffer Size"
4
-BufferSize="Buffer Size"
5
-RateControl="Rate Control"
6
-CRF="CRF"
7
-KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
8
-CPUPreset="CPU Usage Preset (higher = less CPU)"
9
-Profile="Profile"
10
-Tune="Tune"
11
-None="(None)"
12
-EncoderOptions="x264 Options (separated by space)"
13
-VFR="Variable Framerate (VFR)"
14
+Bitrate="Bitrate"
15
+CustomBufsize="Use Custom Buffer Size"
16
+BufferSize="Buffer Size"
17
+RateControl="Rate Control"
18
+CRF="CRF"
19
+KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
20
+CPUPreset="CPU Usage Preset (higher = less CPU)"
21
+Profile="Profile"
22
+Tune="Tune"
23
+None="(None)"
24
+EncoderOptions="x264 Options (separated by space)"
25
+VFR="Variable Framerate (VFR)"
26
obs-studio-27.0.1.tar.xz/plugins/obs-x264/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/obs-x264/data/locale/hi-IN.ini Changed
13
 
1
@@ -1,1 +1,11 @@
2
 Bitrate="बिटदर"
3
+CustomBufsize="निर्मित बफ़र आकार का प्रयोग करें"
4
+BufferSize="बफ़र आकार"
5
+RateControl="दर नियंत्रण"
6
+KeyframeIntervalSec="कीफ़्रेम अंतराल (सेकंड, 0=स्वतः)"
7
+CPUPreset="CPU उपयोग प्रीसेट (उच्च = कम CPU)"
8
+Profile="प्रोफ़ाइल"
9
+Tune="अनुकूल"
10
+None="(कोई नहीं)"
11
+EncoderOptions="x264 विकल्प (बीच में खाली स्थान)"
12
+VFR="गतिशील फ़्रेमरेट (VFR)"
13
obs-studio-27.1.3.tar.xz/plugins/obs-x264/data/locale/kmr-TR.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+Bitrate="Leza bîtê"
3
+CustomBufsize="Mezinahiya bîrgeha demkî ya kesanekirî bi kar bîne"
4
+BufferSize="Mezinahiya bîrgeha demkî"
5
+RateControl="Kontrola rêjeyê"
6
+KeyframeIntervalSec="Dabeşkera demkî di navbera tarikan de (çirke, 0=bixweber)"
7
+CPUPreset="Pêşsazkirina bikaranîna YKN (bilindtir = kêmtir YKN)"
8
+Profile="Profîl"
9
+Tune="Awaz"
10
+None="(Ne yek)"
11
+EncoderOptions="Vebijarkên x264 (bi cîh veqetandî)"
12
+VFR="Rêjeya tarika guherbar (RTG)"
13
obs-studio-27.1.3.tar.xz/plugins/obs-x264/data/locale/nn-NO.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Profil"
3
obs-studio-27.1.3.tar.xz/plugins/obs-x264/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+Profile="Perfil"
3
obs-studio-27.1.3.tar.xz/plugins/obs-x264/data/locale/szl-PL.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+CustomBufsize="Użyj włosnyj miary bufōra"
3
+BufferSize="Miara bufōra"
4
+RateControl="Zorta przepływności"
5
+KeyframeIntervalSec="Abzac miyndzy klotkami kluczowymi (sekōndy, 0=autōmatyczny)"
6
+CPUPreset="Ôpcyje ôciōnżynio CPU (wyższe = mynij CPU)"
7
+Profile="Profil"
8
+Tune="Dostrajanie"
9
+None="(Brak)"
10
+EncoderOptions="Ôpcyje x264 (roztajlowane spacyjōm)"
11
+VFR="Zmiynno wielość klotek na sekōnda (VFR)"
12
obs-studio-27.0.1.tar.xz/plugins/oss-audio/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/oss-audio/data/locale/en-US.ini Changed
18
 
1
@@ -1,8 +1,8 @@
2
-OSSInput="Audio Input Capture (OSS)"
3
-DSP="DSP"
4
-CustomDSPPath="Custom DSP Path"
5
-SampleRate="Sample rate"
6
-Channels="Channels"
7
-SampleFormat="Sample format"
8
-Default="Default"
9
-Custom="Custom"
10
+OSSInput="Audio Input Capture (OSS)"
11
+DSP="DSP"
12
+CustomDSPPath="Custom DSP Path"
13
+SampleRate="Sample rate"
14
+Channels="Channels"
15
+SampleFormat="Sample format"
16
+Default="Default"
17
+Custom="Custom"
18
obs-studio-27.0.1.tar.xz/plugins/oss-audio/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/oss-audio/data/locale/gd-GB.ini Changed
10
 
1
@@ -1,4 +1,8 @@
2
+OSSInput="Glacadh ion-chur fuaime (OSS)"
3
+DSP="Pròiseasadh siognail dhigitich"
4
+CustomDSPPath="Slighe gnàthaichte do phròiseasadh siognail dhigitich"
5
 SampleRate="Reat shampallan"
6
 Channels="Seanailean"
7
+SampleFormat="Fòrmat nan sampallan"
8
 Default="Bun-roghainn"
9
 Custom="Gnàthaichte"
10
obs-studio-27.0.1.tar.xz/plugins/oss-audio/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/oss-audio/data/locale/he-IL.ini Changed
8
 
1
@@ -1,3 +1,6 @@
2
+OSSInput="לכידת קלט שמע (OSS)"
3
+DSP="עיבוד אות דיגיטלי (DSP)"
4
+CustomDSPPath="נתיב DSP מותאם אישית"
5
 SampleRate="קצב דגימה"
6
 Channels="ערוצים"
7
 SampleFormat="פורמט דגימה"
8
obs-studio-27.1.3.tar.xz/plugins/oss-audio/data/locale/hi-IN.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+OSSInput="ऑडियो इनपुट कैप्चर (OSS)"
3
+CustomDSPPath="निर्मित DSP पथ"
4
+SampleRate="सैंपल रेट"
5
+Channels="चैनल"
6
+SampleFormat="नमूना प्रारूप"
7
+Default="आरंभिक"
8
+Custom="निर्मित"
9
obs-studio-27.1.3.tar.xz/plugins/oss-audio/data/locale/kmr-TR.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+OSSInput="Girtina têketina dengê (OSS)"
3
+CustomDSPPath="Riya DSP a kesanekirî"
4
+SampleRate="Rêjeya mînaka"
5
+Channels="Kanalên"
6
+SampleFormat="Formata mînaka"
7
+Default="Berdest"
8
+Custom="Kesanekirî"
9
obs-studio-27.1.3.tar.xz/plugins/oss-audio/data/locale/nn-NO.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Channels="Kanalar"
3
+Default="Standard"
4
obs-studio-27.0.1.tar.xz/plugins/rtmp-services/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/rtmp-services/data/locale/en-US.ini Changed
22
 
1
@@ -1,10 +1,10 @@
2
-StreamingServices="Streaming Services"
3
-CustomStreamingServer="Custom Streaming Server"
4
-Service="Service"
5
-Server="Server"
6
-Server.Auto="Auto (Recommended)"
7
-StreamKey="Stream key"
8
-UseAuth="Use authentication"
9
-Username="Username"
10
-Password="Password"
11
-ShowAll="Show all services"
12
+StreamingServices="Streaming Services"
13
+CustomStreamingServer="Custom Streaming Server"
14
+Service="Service"
15
+Server="Server"
16
+Server.Auto="Auto (Recommended)"
17
+StreamKey="Stream key"
18
+UseAuth="Use authentication"
19
+Username="Username"
20
+Password="Password"
21
+ShowAll="Show all services"
22
obs-studio-27.0.1.tar.xz/plugins/rtmp-services/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/rtmp-services/data/locale/hi-IN.ini Changed
12
 
1
@@ -1,1 +1,10 @@
2
 StreamingServices="स्ट्रीमिंग सेवाए"
3
+CustomStreamingServer="कस्टम स्ट्रीमिंग सर्वर"
4
+Service="सेवा"
5
+Server="सर्वर"
6
+Server.Auto="ऑटो (अनुशंसित)"
7
+StreamKey="स्ट्रीम कुंजी"
8
+UseAuth="प्रमाणीकरण का प्रयोग करें"
9
+Username="उपयोगकर्ता का नाम"
10
+Password="पासवर्ड"
11
+ShowAll="सभी सेवाओं को दिखाएं"
12
obs-studio-27.1.3.tar.xz/plugins/rtmp-services/data/locale/kmr-TR.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+StreamingServices="Karûbarên weşanê"
3
+CustomStreamingServer="Rajekara weşanê yê kesanekirî"
4
+Service="Karûbar"
5
+Server="Rajekar"
6
+Server.Auto="Xweber (Tê pêşniyazkirin)"
7
+StreamKey="kilîdê weşanê"
8
+UseAuth="Rastandinê bi kar bîne"
9
+Username="Navê bikarhêneriyê"
10
+Password="Pêborîn"
11
+ShowAll="Hemû karûbaran nîşan bide"
12
obs-studio-27.1.3.tar.xz/plugins/rtmp-services/data/locale/nn-NO.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Service="Teneste"
3
+Server.Auto="Auto (tilrådd)"
4
+Username="Brukarnamn"
5
+Password="Passord"
6
+ShowAll="Vis alle tenester"
7
obs-studio-27.1.3.tar.xz/plugins/rtmp-services/data/locale/szl-PL.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+StreamingServices="Zerwisy do streamingu"
3
+CustomStreamingServer="Włosny serwer streamowanio"
4
+Service="Zerwis"
5
+Server="Serwer"
6
+Server.Auto="Autōmatycznie (rekōmyndowane)"
7
+StreamKey="Klucz streamu"
8
+UseAuth="Użyj uwierzitelnianio"
9
+Username="Miano używocza"
10
+Password="Hasło"
11
+ShowAll="Pokoż wszyjske zerwisy"
12
obs-studio-27.0.1.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-27.1.3.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": 176,
5
+   "version": 182,
6
    "files": [
7
        {
8
            "name": "services.json",
9
-           "version": 176
10
+           "version": 182
11
        }
12
    ]
13
 }
14
obs-studio-27.0.1.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-27.1.3.tar.xz/plugins/rtmp-services/data/services.json Changed
302
 
1
@@ -4,6 +4,7 @@
2
         {
3
             "name": "Twitch",
4
             "common": true,
5
+            "stream_key_link": "https://dashboard.twitch.tv/settings/stream",
6
             "servers": [
7
                 {
8
                     "name": "Asia: Hong Kong",
9
@@ -201,6 +202,7 @@
10
             "name": "YouTube - HLS",
11
             "common": false,
12
             "more_info_link": "https://developers.google.com/youtube/v3/live/guides/ingestion-protocol-comparison",
13
+            "stream_key_link": "https://www.youtube.com/live_dashboard",
14
             "servers": [
15
                 {
16
                     "name": "Primary YouTube ingest server",
17
@@ -221,6 +223,7 @@
18
         {
19
             "name": "YouTube - RTMPS",
20
             "common": true,
21
+            "stream_key_link": "https://www.youtube.com/live_dashboard",
22
             "alt_names": [
23
                 "YouTube / YouTube Gaming",
24
                 "YouTube - RTMP",
25
@@ -285,7 +288,28 @@
26
             }
27
         },
28
         {
29
+            "name": "Lovecast",
30
+            "servers": [
31
+                {
32
+                    "name": "Default",
33
+                    "url": "rtmp://live-a.lovecastapp.com:5222/app"
34
+                }
35
+            ],
36
+            "recommended": {
37
+                "keyint": 2,
38
+                "profile": "main",
39
+                "max video bitrate": 8000,
40
+                "max audio bitrate": 192,
41
+                "supported resolutions": [
42
+                    "1920x1080",
43
+                    "1280x720"
44
+                ],
45
+                "max fps": 30
46
+            }
47
+        },
48
+        {
49
             "name": "Luzento.com - RTMP",
50
+            "stream_key_link": "https://cms.luzento.com/dashboard/stream-key?from=OBS",
51
             "servers": [
52
                 {
53
                     "name": "Primary",
54
@@ -364,6 +388,7 @@
55
         },
56
         {
57
             "name": "YouStreamer",
58
+            "stream_key_link": "https://www.app.youstreamer.com/stream/",
59
             "servers": [
60
                 {
61
                     "name": "Moscow",
62
@@ -458,6 +483,7 @@
63
         {
64
             "name": "Facebook Live",
65
             "common": true,
66
+            "stream_key_link": "https://www.facebook.com/live/producer?ref=OBS",
67
             "servers": [
68
                 {
69
                     "name": "Default",
70
@@ -468,12 +494,55 @@
71
                 "keyint": 2,
72
                 "profile": "main",
73
                 "supported resolutions": [
74
+                    "1920x1080",
75
                     "1280x720",
76
                     "852x480",
77
-                    "480x360"
78
+                    "640x360"
79
                 ],
80
-                "max fps": 30,
81
-                "max video bitrate": 6000,
82
+                "bitrate matrix": [
83
+                    {
84
+                        "res": "640x360",
85
+                        "fps": 30,
86
+                        "max bitrate": 1000
87
+                    },
88
+                    {
89
+                        "res": "640x360",
90
+                        "fps": 60,
91
+                        "max bitrate": 1500
92
+                    },
93
+                    {
94
+                        "res": "852x480",
95
+                        "fps": 30,
96
+                        "max bitrate": 2000
97
+                    },
98
+                    {
99
+                        "res": "852x480",
100
+                        "fps": 60,
101
+                        "max bitrate": 3000
102
+                    },
103
+                    {
104
+                        "res": "1280x720",
105
+                        "fps": 30,
106
+                        "max bitrate": 4000
107
+                    },
108
+                    {
109
+                        "res": "1280x720",
110
+                        "fps": 60,
111
+                        "max bitrate": 6000
112
+                    },
113
+                    {
114
+                        "res": "1920x1080",
115
+                        "fps": 30,
116
+                        "max bitrate": 6000
117
+                    },
118
+                    {
119
+                        "res": "1920x1080",
120
+                        "fps": 60,
121
+                        "max bitrate": 9000
122
+                    }
123
+                ],
124
+                "max fps": 60,
125
+                "max video bitrate": 9000,
126
                 "max audio bitrate": 128
127
             }
128
         },
129
@@ -484,6 +553,7 @@
130
                 "Restream.io - FTL"
131
             ],
132
             "common": true,
133
+            "stream_key_link": "https://restream.io/settings/streaming-setup?from=OBS",
134
             "servers": [
135
                 {
136
                     "name": "Autodetect",
137
@@ -1029,6 +1099,7 @@
138
         {
139
             "name": "Twitter",
140
             "common": true,
141
+            "stream_key_link": "https://studio.twitter.com/producer/sources",
142
             "alt_names": [
143
                 "Twitter / Periscope"
144
             ],
145
@@ -1243,6 +1314,7 @@
146
         {
147
             "name": "Trovo",
148
             "alt_names": ["Madcat"],
149
+            "stream_key_link": "https://studio.trovo.live/mychannel/stream",
150
             "servers": [
151
                 {
152
                     "name": "Default",
153
@@ -1389,7 +1461,7 @@
154
                     "url": "rtmp://stream.dlive.tv/live"
155
                 }
156
             ],
157
-            "recommend": {
158
+            "recommended": {
159
                 "keyint": 2,
160
                 "max video bitrate": 6000,
161
                 "max audio bitrate": 160
162
@@ -1427,7 +1499,7 @@
163
                     "url": "rtmp://australia.live.lightcast.com/202E1F/default"
164
                 }
165
             ],
166
-            "recommend": {
167
+            "recommended": {
168
                 "keyint": 2,
169
                 "max video bitrate": 6000,
170
                 "max audio bitrate": 160
171
@@ -1453,7 +1525,7 @@
172
                     "url": "rtmp://z-us.origin.gnsbc.com:1934/live"
173
                 }
174
             ],
175
-            "recommend": {
176
+            "recommended": {
177
                 "keyint": 2,
178
                 "max video bitrate": 6000,
179
                 "max audio bitrate": 192,
180
@@ -1469,7 +1541,7 @@
181
                     "url": "rtmp://stream-1.show-it.tv:1935/live"
182
                 }
183
             ],
184
-            "recommend": {
185
+            "recommended": {
186
                 "max video bitrate": 6000,
187
                 "max audio bitrate": 192
188
             }
189
@@ -1500,7 +1572,7 @@
190
                     "url": "rtmp://rtmp.camplace.com"
191
                 }
192
             ],
193
-            "recommend": {
194
+            "recommended": {
195
                 "keyint": 2,
196
                 "max video bitrate": 3000,
197
                 "max audio bitrate": 128
198
@@ -1518,7 +1590,7 @@
199
                     "url": "rtmp://route0-dc2.onlyfans.com/live"
200
                 }
201
             ],
202
-            "recommend": {
203
+            "recommended": {
204
                 "keyint": 2,
205
                 "profile": "main",
206
                 "max video bitrate": 2500,
207
@@ -1991,6 +2063,7 @@
208
         },
209
         {
210
             "name": "Glimesh",
211
+            "stream_key_link": "https://glimesh.tv/users/settings/stream",
212
             "servers": [
213
                 {
214
                     "name": "North America - Chicago, United States",
215
@@ -2040,6 +2113,7 @@
216
         },
217
         {
218
             "name": "OPENREC.tv - Premium member (プレミアム会員)",
219
+            "stream_key_link": "https://www.openrec.tv/login?keep_login=true&url=https://www.openrec.tv/dashboard/live?from=obs",
220
             "servers": [
221
                 {
222
                     "name": "Default",
223
@@ -2138,6 +2212,7 @@
224
         },
225
         {
226
             "name": "Brime Live",
227
+            "stream_key_link": "https://brimelive.com/obs-stream-key-link",
228
             "servers": [
229
                 {
230
                     "name": "North America - Ashburn, VA",
231
@@ -2193,6 +2268,70 @@
232
                 "max audio bitrate": 320,
233
                 "x264opts": "scenecut=0"
234
             }
235
+        },
236
+        {
237
+            "name": "Bilibili Live",
238
+            "stream_key_link": "https://link.bilibili.com/p/center/index#/my-room/start-live",
239
+            "servers": [
240
+                {
241
+                    "name": "Default",
242
+                    "url": "rtmp://live-push.bilivideo.com/live-bvc/"
243
+                },
244
+                {
245
+                    "name": "Tencent Cloud",
246
+                    "url": "rtmp://txy.live-push.bilivideo.com/live-bvc/"
247
+                }
248
+            ]
249
+        },
250
+        {
251
+            "name": "Volume.com",
252
+            "stream_key_link": "https://volume.com/b?show_key=1&webrtc=0",
253
+            "servers": [
254
+                {
255
+                    "name": "Default - Recommended",
256
+                    "url": "rtmp://live.volume.com/live-origin"
257
+                },
258
+                {
259
+                    "name": "EU - Amsterdam",
260
+                    "url": "rtmp://live-ams.volume.com/live-origin"
261
+                },
262
+                {
263
+                    "name": "EU - Frankfurt",
264
+                    "url": "rtmp://live-fra.volume.com/live-origin"
265
+                },
266
+                {
267
+                    "name": "US - West",
268
+                    "url": "rtmp://live-pdx.volume.com/live-origin"
269
+                },
270
+                {
271
+                    "name": "US - East",
272
+                    "url": "rtmp://live-ash.volume.com/live-origin"
273
+                }
274
+            ],
275
+            "recommended": {
276
+                "keyint": 2,
277
+                "max video bitrate": 20000,
278
+                "max fps": 60
279
+            }
280
+        },
281
+        {
282
+            "name": "BoxCast",
283
+            "stream_key_link": "https://dashboard.boxcast.com/#/sources",
284
+            "servers": [
285
+                {
286
+                    "name": "BoxCast",
287
+                    "url":  "rtmp://rtmp.boxcast.com/live"
288
+                }
289
+            ]
290
+        },
291
+        {
292
+            "name": "Disciple Media",
293
+            "servers": [
294
+                {
295
+                    "name": "Default",
296
+                    "url":  "rtmp://rtmp.disciplemedia.com/b-fme"
297
+                }
298
+            ]
299
         }
300
     ]
301
 }
302
obs-studio-27.0.1.tar.xz/plugins/rtmp-services/rtmp-common.c -> obs-studio-27.1.3.tar.xz/plugins/rtmp-services/rtmp-common.c Changed
128
 
1
@@ -424,6 +424,16 @@
2
        obs_data_set_string(settings, "more_info_link", more_info_link);
3
 }
4
 
5
+static void fill_stream_key_link(json_t *service, obs_data_t *settings)
6
+{
7
+   const char *stream_key_link;
8
+
9
+   stream_key_link = get_string_val(service, "stream_key_link");
10
+   if (stream_key_link)
11
+       obs_data_set_string(settings, "stream_key_link",
12
+                   stream_key_link);
13
+}
14
+
15
 static inline json_t *find_service(json_t *root, const char *name,
16
                   const char **p_new_name)
17
 {
18
@@ -487,6 +497,7 @@
19
 
20
    fill_servers(obs_properties_get(props, "server"), service, name);
21
    fill_more_info_link(service, settings);
22
+   fill_stream_key_link(service, settings);
23
    return true;
24
 }
25
 
26
@@ -538,6 +549,8 @@
27
    return ppts;
28
 }
29
 
30
+static int get_bitrate_matrix_max(json_t *array);
31
+
32
 static void apply_video_encoder_settings(obs_data_t *settings,
33
                     json_t *recommended)
34
 {
35
@@ -559,13 +572,21 @@
36
 
37
    obs_data_item_release(&enc_item);
38
 
39
+   int max_bitrate = 0;
40
+   item = json_object_get(recommended, "bitrate matrix");
41
+   if (json_is_array(item)) {
42
+       max_bitrate = get_bitrate_matrix_max(item);
43
+   }
44
+
45
    item = json_object_get(recommended, "max video bitrate");
46
-   if (json_is_integer(item)) {
47
-       int max_bitrate = (int)json_integer_value(item);
48
-       if (obs_data_get_int(settings, "bitrate") > max_bitrate) {
49
-           obs_data_set_int(settings, "bitrate", max_bitrate);
50
-           obs_data_set_int(settings, "buffer_size", max_bitrate);
51
-       }
52
+   if (!max_bitrate && json_is_integer(item)) {
53
+       max_bitrate = (int)json_integer_value(item);
54
+   }
55
+
56
+   if (max_bitrate &&
57
+       obs_data_get_int(settings, "bitrate") > max_bitrate) {
58
+       obs_data_set_int(settings, "bitrate", max_bitrate);
59
+       obs_data_set_int(settings, "buffer_size", max_bitrate);
60
    }
61
 
62
    item = json_object_get(recommended, "bframes");
63
@@ -741,6 +762,41 @@
64
    *fps = service->max_fps;
65
 }
66
 
67
+static int get_bitrate_matrix_max(json_t *array)
68
+{
69
+   size_t index;
70
+   json_t *item;
71
+
72
+   struct obs_video_info ovi;
73
+   if (!obs_get_video_info(&ovi))
74
+       return 0;
75
+
76
+   double cur_fps = (double)ovi.fps_num / (double)ovi.fps_den;
77
+
78
+   json_array_foreach (array, index, item) {
79
+       if (!json_is_object(item))
80
+           continue;
81
+
82
+       const char *res = get_string_val(item, "res");
83
+       double fps = (double)get_int_val(item, "fps") + 0.0000001;
84
+       int bitrate = get_int_val(item, "max bitrate");
85
+
86
+       if (!res)
87
+           continue;
88
+
89
+       int cx, cy;
90
+       int c = sscanf(res, "%dx%d", &cx, &cy);
91
+       if (c != 2)
92
+           continue;
93
+
94
+       if ((int)ovi.output_width == cx &&
95
+           (int)ovi.output_height == cy && cur_fps <= fps)
96
+           return bitrate;
97
+   }
98
+
99
+   return 0;
100
+}
101
+
102
 static void rtmp_common_get_max_bitrate(void *data, int *video_bitrate,
103
                    int *audio_bitrate)
104
 {
105
@@ -768,9 +824,19 @@
106
    }
107
 
108
    if (video_bitrate) {
109
-       item = json_object_get(recommended, "max video bitrate");
110
-       if (json_is_integer(item))
111
-           *video_bitrate = (int)json_integer_value(item);
112
+       int bitrate = 0;
113
+       item = json_object_get(recommended, "bitrate matrix");
114
+       if (json_is_array(item)) {
115
+           bitrate = get_bitrate_matrix_max(item);
116
+       }
117
+       if (!bitrate) {
118
+           item = json_object_get(recommended,
119
+                          "max video bitrate");
120
+           if (json_is_integer(item))
121
+               bitrate = (int)json_integer_value(item);
122
+       }
123
+
124
+       *video_bitrate = bitrate;
125
    }
126
 
127
 fail:
128
obs-studio-27.0.1.tar.xz/plugins/sndio/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/en-US.ini Changed
14
 
1
@@ -1,6 +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
+Channels="Number of channels"
9
+Device="Device"
10
+BitsPerSample="Bits per sample"
11
+Rate="Rate"
12
+SndioInput="Sndio input client"
13
+
14
obs-studio-27.0.1.tar.xz/plugins/sndio/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/gd-GB.ini Changed
7
 
1
@@ -1,3 +1,5 @@
2
+Channels="Co mheud seanail"
3
 Device="Uidheam"
4
 BitsPerSample="Biodan gach sampall"
5
 Rate="Reat"
6
+SndioInput="Cliant ion-chuir Sndio"
7
obs-studio-27.0.1.tar.xz/plugins/sndio/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/he-IL.ini Changed
7
 
1
@@ -1,2 +1,5 @@
2
 Channels="מספר ערוצים"
3
 Device="התקן"
4
+BitsPerSample="ביטים לדגימה"
5
+Rate="קצב"
6
+SndioInput="קליינט קלט Sndio"
7
obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/hi-IN.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Channels="चैनलों की संख्या"
3
+Device="डिवाइस"
4
+BitsPerSample="नमूना प्रति बिट्"
5
+Rate="दर"
6
+SndioInput="Sndio इनपुट क्लाएंट"
7
obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/kmr-TR.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Channels="Hejmara kanalan"
3
+Device="Amûr"
4
+BitsPerSample="Bit bo her mînak"
5
+Rate="Rêje"
6
+SndioInput="Rajegira ketanê Sndio"
7
obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/nb-NO.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Channels="Antall kanaler"
3
+Device="Enhet"
4
+BitsPerSample="Biter for hver prøve"
5
+Rate="Frekvens"
6
+SndioInput="Sndio innmatingsklient"
7
obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/nn-NO.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Channels="Antal kanalar"
3
+Device="Eining"
4
obs-studio-27.1.3.tar.xz/plugins/sndio/data/locale/szl-PL.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Channels="Wielość kanałōw"
3
+Device="Maszina"
4
+BitsPerSample="Bity na prōbka"
5
+Rate="Frekwyncyjo prōbkowanio"
6
+SndioInput="Klijynt Sndio - wchōd"
7
obs-studio-27.0.1.tar.xz/plugins/text-freetype2/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/en-US.ini Changed
32
 
1
@@ -1,15 +1,15 @@
2
-TextFreetype2="Text (FreeType 2)"
3
-Font="Font"
4
-Text="Text"
5
-TextFile="Text File (UTF-8 or UTF-16)"
6
-TextFileFilter="Text Files (*.txt);;"
7
-ChatLogMode="Chat log mode"
8
-ChatLogLines="Chat log lines"
9
-Color1="Color 1"
10
-Color2="Color 2"
11
-Outline="Outline"
12
-DropShadow="Drop Shadow"
13
-ReadFromFile="Read from file"
14
-CustomWidth="Custom text width"
15
-WordWrap="Word Wrap"
16
-Antialiasing="Enable Antialiasing"
17
+TextFreetype2="Text (FreeType 2)"
18
+Font="Font"
19
+Text="Text"
20
+TextFile="Text File (UTF-8 or UTF-16)"
21
+TextFileFilter="Text Files (*.txt);;"
22
+ChatLogMode="Chat log mode"
23
+ChatLogLines="Chat log lines"
24
+Color1="Color 1"
25
+Color2="Color 2"
26
+Outline="Outline"
27
+DropShadow="Drop Shadow"
28
+ReadFromFile="Read from file"
29
+CustomWidth="Custom text width"
30
+WordWrap="Word Wrap"
31
+Antialiasing="Enable Antialiasing"
32
obs-studio-27.0.1.tar.xz/plugins/text-freetype2/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/gd-GB.ini Changed
17
 
1
@@ -1,3 +1,15 @@
2
+TextFreetype2="Teacsa (FreeType 2)"
3
 Font="Cruth-clò"
4
 Text="Teacsa"
5
+TextFile="Faidhle teacsa (UTF-8 no UTF-16)"
6
+TextFileFilter="Faidhlichean teacsa (*.txt);;"
7
+ChatLogMode="Modh loga na cabadaiche"
8
+ChatLogLines="Loidhnichean loga na cabadaiche"
9
+Color1="Dath 1"
10
+Color2="Dath 2"
11
 Outline="Oir-loidhne"
12
+DropShadow="Sgàil theàrnach"
13
+ReadFromFile="Leugh o fhaidhle"
14
+CustomWidth="Leud teacsa gnàthaichte"
15
+WordWrap="Pasgadh fhaclan"
16
+Antialiasing="Cuir antialiasing an comas"
17
obs-studio-27.0.1.tar.xz/plugins/text-freetype2/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/he-IL.ini Changed
15
 
1
@@ -3,6 +3,8 @@
2
 Text="טקסט"
3
 TextFile="קובץ טקסט (UTF-8 או UTF-16)"
4
 TextFileFilter="קובצי טקסט (*.txt);;"
5
+ChatLogMode="מצב יומן צ'אט"
6
+ChatLogLines="שורות יומן צ'אט"
7
 Color1="צבע 1"
8
 Color2="צבע 2"
9
 Outline="קו מתאר"
10
@@ -10,3 +12,4 @@
11
 ReadFromFile="קריאה מקובץ"
12
 CustomWidth="רוחב טקסט מותאם אישית"
13
 WordWrap="הסתת מילים"
14
+Antialiasing="הפעלת מצב החלקת קצוות"
15
obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/hi-IN.ini Added
17
 
1
@@ -0,0 +1,15 @@
2
+TextFreetype2="टेक्स्ट (फ्री टाइप 2)"
3
+Font="फ़ॉन्ट"
4
+Text="टेक्स्ट"
5
+TextFile="टेक्स्ट फ़ाइल (UTF-8 या UTF-16)"
6
+TextFileFilter="टेक्स्ट फ़ाइलें (*.txt);;"
7
+ChatLogMode="बात-चीत लॉग मोड"
8
+ChatLogLines="बात-चीत लॉग लाइन्स"
9
+Color1="रंग 1"
10
+Color2="रंग 2"
11
+Outline="खाका"
12
+DropShadow="परछाई दिखाएं"
13
+ReadFromFile="फ़ाइल से पढ़ें"
14
+CustomWidth="निर्मित टेक्स्ट चौड़ाई"
15
+WordWrap="शब्द विभाजन"
16
+Antialiasing="एंटीएलियासिंग सक्षम करें"
17
obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/kmr-TR.ini Added
17
 
1
@@ -0,0 +1,15 @@
2
+TextFreetype2="Nivîs (FreeType 2)"
3
+Font="Cûrenivîs"
4
+Text="Nivîs"
5
+TextFile="Pelê nivîsê (UTF-8 an UTF-16)"
6
+TextFileFilter="Pelên Nivîsê (*.txt);;"
7
+ChatLogMode="Moda têketina axaftinê"
8
+ChatLogLines="Rêzikên têketina axaftinê"
9
+Color1="Reng 1"
10
+Color2="Reng 2"
11
+Outline="Dor nivîsê sînor bike"
12
+DropShadow="Siya daketinê"
13
+ReadFromFile="Ji pelê bixwîne"
14
+CustomWidth="Firehiya nivîsa kesanekirî"
15
+WordWrap="Pêçana peyvan"
16
+Antialiasing="Qerax nermkirin çalak bike"
17
obs-studio-27.0.1.tar.xz/plugins/text-freetype2/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/nb-NO.ini Changed
17
 
1
@@ -3,8 +3,8 @@
2
 Text="Tekst"
3
 TextFile="Tekstfil (UTF-8 eller UTF-16)"
4
 TextFileFilter="Tekstfiler (*.txt);;"
5
-ChatLogMode="Chatloggføringsmodus"
6
-ChatLogLines="Chatloggføringslinjer"
7
+ChatLogMode="Chatlogg modus"
8
+ChatLogLines="Chatlogg linjer"
9
 Color1="Farge 1"
10
 Color2="Farge 2"
11
 Outline="Ytterlinje"
12
@@ -12,3 +12,4 @@
13
 ReadFromFile="Les fra fil"
14
 CustomWidth="Egendefinert tekstbredde"
15
 WordWrap="Tekstbryting"
16
+Antialiasing="Aktiver Kantutjevning"
17
obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/nn-NO.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+Font="Skrift"
3
+Text="Tekst"
4
+TextFileFilter="Tekstfiler (*.txt);;"
5
+Color1="Farge 1"
6
+Color2="Farge 2"
7
obs-studio-27.1.3.tar.xz/plugins/text-freetype2/data/locale/szl-PL.ini Added
17
 
1
@@ -0,0 +1,15 @@
2
+TextFreetype2="Tekst (FreeType 2)"
3
+Font="Pismo"
4
+Text="Tekst"
5
+TextFile="Zbiōr tekstowy (UTF-8 abo UTF-16)"
6
+TextFileFilter="Zbiory tekstowe (*.txt);;"
7
+ChatLogMode="Tryb czatu"
8
+ChatLogLines="Wielość liniji czatu"
9
+Color1="Farba 1"
10
+Color2="Farba 2"
11
+Outline="Kōntur"
12
+DropShadow="Ciyń"
13
+ReadFromFile="Czytej ze zbioru"
14
+CustomWidth="Włosno szyrokość tekstu"
15
+WordWrap="Zawijanie wierszōw"
16
+Antialiasing="Włōncz antyaliasing"
17
obs-studio-27.0.1.tar.xz/plugins/text-freetype2/text-freetype2.c -> obs-studio-27.1.3.tar.xz/plugins/text-freetype2/text-freetype2.c Changed
15
 
1
@@ -170,9 +170,11 @@
2
                OBS_PATH_FILE,
3
                obs_module_text("TextFileFilter"), NULL);
4
 
5
-   obs_properties_add_color(props, "color1", obs_module_text("Color1"));
6
+   obs_properties_add_color_alpha(props, "color1",
7
+                      obs_module_text("Color1"));
8
 
9
-   obs_properties_add_color(props, "color2", obs_module_text("Color2"));
10
+   obs_properties_add_color_alpha(props, "color2",
11
+                      obs_module_text("Color2"));
12
 
13
    obs_properties_add_bool(props, "outline", obs_module_text("Outline"));
14
 
15
obs-studio-27.0.1.tar.xz/plugins/vlc-video/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/ar-SA.ini Changed
15
 
1
@@ -1,4 +1,13 @@
2
 VLCSource="مصدر فيديو VLC"
3
 Playlist="قائمة تشغيل"
4
+PlaybackBehavior.StopRestart="إيقاف عندما يكون غير مرئي, إعادة تشغيل عندما يكون مرئي"
5
+PlaybackBehavior.PauseUnpause="إيقاف مؤقت عندما يكون غير مرئي,إلغاء الإيقاف المؤقت عندما يكون مرئي"
6
+PlaybackBehavior.AlwaysPlay="تشغيل دائمًا حتى عندما لا يكون مرئي"
7
+PlayPause="تشغيل / إيقاف مؤقت"
8
+Restart="إعادة تشغيل"
9
+Stop="إيقاف"
10
+PlaylistNext="التالي"
11
+PlaylistPrev="سابق"
12
+AudioTrack="مقطع صوتي"
13
 SubtitleTrack="مسار الترجمة"
14
 SubtitleEnable="تفعيل الترجمة"
15
obs-studio-27.0.1.tar.xz/plugins/vlc-video/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/en-US.ini Changed
36
 
1
@@ -1,17 +1,17 @@
2
-VLCSource="VLC Video Source"
3
-Playlist="Playlist"
4
-LoopPlaylist="Loop Playlist"
5
-Shuffle="Shuffle Playlist"
6
-PlaybackBehavior="Visibility behavior"
7
-PlaybackBehavior.StopRestart="Stop when not visible, restart when visible"
8
-PlaybackBehavior.PauseUnpause="Pause when not visible, unpause when visible"
9
-PlaybackBehavior.AlwaysPlay="Always play even when not visible"
10
-NetworkCaching="Network Caching (ms)"
11
-PlayPause="Play/Pause"
12
-Restart="Restart"
13
-Stop="Stop"
14
-PlaylistNext="Next"
15
-PlaylistPrev="Previous"
16
-AudioTrack="Audio Track"
17
-SubtitleTrack="Subtitle Track"
18
-SubtitleEnable="Subtitles Enabled"
19
+VLCSource="VLC Video Source"
20
+Playlist="Playlist"
21
+LoopPlaylist="Loop Playlist"
22
+Shuffle="Shuffle Playlist"
23
+PlaybackBehavior="Visibility behavior"
24
+PlaybackBehavior.StopRestart="Stop when not visible, restart when visible"
25
+PlaybackBehavior.PauseUnpause="Pause when not visible, unpause when visible"
26
+PlaybackBehavior.AlwaysPlay="Always play even when not visible"
27
+NetworkCaching="Network Caching (ms)"
28
+PlayPause="Play/Pause"
29
+Restart="Restart"
30
+Stop="Stop"
31
+PlaylistNext="Next"
32
+PlaylistPrev="Previous"
33
+AudioTrack="Audio Track"
34
+SubtitleTrack="Subtitle Track"
35
+SubtitleEnable="Subtitles Enabled"
36
obs-studio-27.0.1.tar.xz/plugins/vlc-video/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/gd-GB.ini Changed
19
 
1
@@ -1,7 +1,17 @@
2
+VLCSource="Tùs video VLC"
3
 Playlist="Liosta-chluiche"
4
+LoopPlaylist="Lùb an liosta-chluich"
5
+Shuffle="Cuir an liosta-chluich air thuaiream"
6
+PlaybackBehavior="Giùlan na faicsinneachd"
7
+PlaybackBehavior.StopRestart="Cuir stad air mura faicear e, tòisich a-rithist nuair a faicear e"
8
+PlaybackBehavior.PauseUnpause="Cuir ’na stad mura faicear e, lean air adhart nuair a faicear e"
9
+PlaybackBehavior.AlwaysPlay="Cluich an-còmhnaidh fiù ’s mura faicear e"
10
+NetworkCaching="Tasgadan lìonraidh (ms)"
11
 PlayPause="Cluich/Cuir ’na stad"
12
 Restart="Ath-thòisich"
13
 Stop="Cuir stad air"
14
 PlaylistNext="Air adhart"
15
 PlaylistPrev="Air ais"
16
 AudioTrack="Traca fuaime"
17
+SubtitleTrack="Traca fo-thiotalan"
18
+SubtitleEnable="Cuir na fo-thiotalan an comas"
19
obs-studio-27.0.1.tar.xz/plugins/vlc-video/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/he-IL.ini Changed
12
 
1
@@ -7,8 +7,8 @@
2
 PlaybackBehavior.PauseUnpause="השהה כאשר אינו נראה, בטל השהייה כאשר נראה"
3
 PlaybackBehavior.AlwaysPlay="נגן תמיד גם כאשר לא נראה"
4
 NetworkCaching="רשת אחסון מטמטון (מילי שניות)"
5
-PlayPause="הפעל/הפסק"
6
-Restart="הפעל מחדש"
7
+PlayPause="ניגון/השהיה"
8
+Restart="ניגון מחדש"
9
 Stop="עצור"
10
 PlaylistNext="הבא"
11
 PlaylistPrev="הקודם"
12
obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/hi-IN.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+VLCSource="VLC वीडियो स्रोत"
3
+Playlist="प्लेसूची"
4
+LoopPlaylist="प्लेसूची दोहराएं"
5
+Shuffle="प्लेसूची उलट-पुलट करें"
6
+PlaybackBehavior="प्रदर्शन व्यवहार"
7
+PlaybackBehavior.StopRestart="दिखाई न देने पर रोकें, दिखाई देने पर पुनः प्रारंभ करें"
8
+PlaybackBehavior.PauseUnpause="दिखाई न देने पर ठहरें, दिखाई देने पर पुनः चलाएं"
9
+PlaybackBehavior.AlwaysPlay="दिखाई न देने पर भी हमेशा चलाएं"
10
obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/kmr-TR.ini Added
19
 
1
@@ -0,0 +1,17 @@
2
+VLCSource="Çavkaniya vîdyoyê ya VLC"
3
+Playlist="Rêzoka lêdanan"
4
+LoopPlaylist="Rêzoka lêdanan bêdawî"
5
+Shuffle="Rêzoka lêdanan tevlihev bike"
6
+PlaybackBehavior="Tevgera xuyangbûnê"
7
+PlaybackBehavior.StopRestart="Gava ku neyê xuyangkirin rawestîne, gava ku xuya bibe ji nû ve dest pê bike"
8
+PlaybackBehavior.PauseUnpause="Gava ku neyê xuyangkirin rawestîne, gava ku xuyang be jî ranewestîne"
9
+PlaybackBehavior.AlwaysPlay="Her dem gava ku neyê xuyangkirin jî lê de"
10
+NetworkCaching="Ragihandina Torgilokê (ms)"
11
+PlayPause="Lê de/Rawestîne"
12
+Restart="Ji nû ve destpêkirin"
13
+Stop="Rawestîne"
14
+PlaylistNext="Pêş"
15
+PlaylistPrev="Paş"
16
+AudioTrack="Parçeya dengê"
17
+SubtitleTrack="Parçeya jêrnivîsê"
18
+SubtitleEnable="Jêrnivîs çalak e"
19
obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/nn-NO.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+Playlist="Speleliste"
3
+PlayPause="Spel/Pause"
4
+Stop="Stopp"
5
+PlaylistNext="Neste"
6
+PlaylistPrev="Førre"
7
+AudioTrack="Lydspor"
8
+SubtitleTrack="Undertekstspor"
9
+SubtitleEnable="Undertekstar slått på"
10
obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+VLCSource="Font vidèo VLC"
3
obs-studio-27.1.3.tar.xz/plugins/vlc-video/data/locale/szl-PL.ini Added
19
 
1
@@ -0,0 +1,17 @@
2
+VLCSource="Zdrzōdło wideo VLC"
3
+Playlist="Playlista"
4
+LoopPlaylist="Zapyntl playlista"
5
+Shuffle="Losuj porzōndek playlisty"
6
+PlaybackBehavior="Zachowanie"
7
+PlaybackBehavior.StopRestart="Zasztopuj, kej niywidzialne. Ôdtworzej ôd poczōntku, kej widzialne."
8
+PlaybackBehavior.PauseUnpause="Strzim, kej niywidzialne. Znōw, kej widzialne."
9
+PlaybackBehavior.AlwaysPlay="Ôdtworzej cołki czas beze zglyndu na widzialność."
10
+NetworkCaching="Spamiyńć podrynczno dlo necu (ms)"
11
+PlayPause="Ôdtwōrz/Pauzuj"
12
+Restart="Resztart"
13
+Stop="Sztop"
14
+PlaylistNext="Niyskorniyjszy"
15
+PlaylistPrev="Piyrwyjszy"
16
+AudioTrack="Ściyżka audio"
17
+SubtitleTrack="Ściyżka napisōw"
18
+SubtitleEnable="Napisy włōnczōne"
19
obs-studio-27.0.1.tar.xz/plugins/win-capture/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/plugins/win-capture/CMakeLists.txt Changed
21
 
1
@@ -30,7 +30,8 @@
2
    load-graphics-offsets.c
3
    game-capture-file-init.c
4
    duplicator-monitor-capture.c
5
-   plugin-main.c)
6
+   plugin-main.c
7
+   nt-stuff.c)
8
 
9
 add_library(win-capture MODULE
10
    ${win-capture_SOURCES}
11
@@ -39,8 +40,7 @@
12
    ${win-capture_PLATFORM_DEPS}
13
    libobs
14
    Dwmapi
15
-   ipc-util
16
-   psapi)
17
+   ipc-util)
18
 set_target_properties(win-capture PROPERTIES FOLDER "plugins/win-capture")
19
 
20
 install_obs_plugin_with_data(win-capture data)
21
obs-studio-27.0.1.tar.xz/plugins/win-capture/app-helpers.h -> obs-studio-27.1.3.tar.xz/plugins/win-capture/app-helpers.h Changed
13
 
1
@@ -4,7 +4,7 @@
2
 
3
 extern bool is_app(HANDLE process);
4
 extern wchar_t *get_app_sid(HANDLE process);
5
-extern HANDLE create_app_mutex(const wchar_t *sid, const wchar_t *name);
6
-extern HANDLE open_app_mutex(const wchar_t *sid, const wchar_t *name);
7
-extern HANDLE open_app_event(const wchar_t *sid, const wchar_t *name);
8
-extern HANDLE open_app_map(const wchar_t *sid, const wchar_t *name);
9
+HANDLE create_app_mutex(const wchar_t *sid, const wchar_t *name);
10
+HANDLE open_app_mutex(const wchar_t *sid, const wchar_t *name);
11
+HANDLE open_app_event(const wchar_t *sid, const wchar_t *name);
12
+HANDLE open_app_map(const wchar_t *sid, const wchar_t *name);
13
obs-studio-27.0.1.tar.xz/plugins/win-capture/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/ar-SA.ini Changed
12
 
1
@@ -21,6 +21,10 @@
2
 Method.WindowsGraphicsCapture="Windows 10 (1903 وما فوق)"
3
 GameCapture="التقاط لعبة"
4
 GameCapture.AnyFullscreen="التقاط أي تطبيق في وضع ملء الشاشة"
5
+GameCapture.CaptureWindow="التقاط نافذة محددة"
6
+GameCapture.CaptureOverlays="التقاط طبقات طرف ثالث (ستيم)"
7
+GameCapture.HotkeyStart="التقاط النافذة الأمامية"
8
+GameCapture.HotkeyStop="إلغاء تنشيط التقاط"
9
 GameCapture.HookRate.Slow="بطيء"
10
 GameCapture.HookRate.Normal="عادي (مسحتسن)"
11
 GameCapture.HookRate.Fast="سريع"
12
obs-studio-27.0.1.tar.xz/plugins/win-capture/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/he-IL.ini Changed
17
 
1
@@ -18,6 +18,7 @@
2
 PrimaryMonitor="צג ראשי"
3
 Method="שיטת לכידה"
4
 Method.Auto="באופן אוטומטי"
5
+Method.DXGI="שכפול שולחן עבודה DXGI"
6
 Method.WindowsGraphicsCapture="Windows 10 (1903 ומעלה)"
7
 GameCapture="לכידת משחק"
8
 GameCapture.AnyFullscreen="לכוד כל יישום מסך מלא"
9
@@ -28,6 +29,7 @@
10
 GameCapture.AntiCheatHook="שימוש בוו תאימות לנוגד הרמאות"
11
 GameCapture.HotkeyStart="לכידת חלון חזית"
12
 GameCapture.HotkeyStop="בטל לכידה"
13
+GameCapture.HookRate="קצב לכידה"
14
 GameCapture.HookRate.Slow="איטי"
15
 GameCapture.HookRate.Normal="רגיל (מומלץ)"
16
 GameCapture.HookRate.Fast="מהיר"
17
obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/hi-IN.ini Added
39
 
1
@@ -0,0 +1,37 @@
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 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/क्रॉसफ़ायर कैप्चर मोड (धीमा)"
17
+AllowTransparency="पारदर्शिता की अनुमति दें"
18
+Monitor="डिस्प्ले"
19
+PrimaryMonitor="प्राथमिक मॉनिटर"
20
+Method="कैप्चर विधि"
21
+Method.Auto="स्वचालित"
22
+Method.DXGI="DXGI डेस्कटॉप प्रतिलिपि बनाना"
23
+Method.WindowsGraphicsCapture="Windows 10 (1903 और ऊपर)"
24
+GameCapture="गेम कैप्चर"
25
+GameCapture.AnyFullscreen="किसी भी फ़ुलस्क्रीन एप्लिकेशन को कैप्चर करें"
26
+GameCapture.CaptureWindow="विशिष्ट विंडो कैप्चर करें"
27
+GameCapture.UseHotkey="सक्रिय कुंजी के साथ फ़ोरग्राउंड विंडो कैप्चर करें"
28
+GameCapture.LimitFramerate="कैप्चर फ़्रेमरेट को सीमा में रखें"
29
+GameCapture.CaptureOverlays="तृतीय-पक्ष ओवरले कैप्चर करें (जैसे स्टीम)"
30
+GameCapture.AntiCheatHook="एंटी-चीट संगतता हुक का उपयोग करें"
31
+GameCapture.HotkeyStart="फ़ोरग्राउंड विंडो कैप्चर करें"
32
+GameCapture.HotkeyStop="कैप्चर निष्क्रिय करें"
33
+GameCapture.HookRate="हुक दर"
34
+GameCapture.HookRate.Slow="धीमा"
35
+GameCapture.HookRate.Normal="सामान्य (अनुशंसित)"
36
+GameCapture.HookRate.Fast="शीघ्र"
37
+GameCapture.HookRate.Fastest="शीघ्रतम"
38
+Mode="मोड"
39
obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/kmr-TR.ini Added
39
 
1
@@ -0,0 +1,37 @@
2
+MonitorCapture="Girtina dîmenderê"
3
+WindowCapture="Girtina çarçoveyê"
4
+WindowCapture.Window="Çarçove"
5
+WindowCapture.Method="Awayê girtinê"
6
+WindowCapture.Method.Auto="Bixweber"
7
+WindowCapture.Method.BitBlt="BitBlt (Windows 7 û jor)"
8
+WindowCapture.Method.WindowsGraphicsCapture="Windows 10 (1903 û jor)"
9
+WindowCapture.Priority="Pêşekiya çarçoveyê hilbijartî"
10
+WindowCapture.Priority.Title="Divê bi sernava çaçroveyê re lihevhatî bê"
11
+WindowCapture.Priority.Class="Sernav lihevhatî ye, wekî din çaçroveya ji heman cure bigere"
12
+WindowCapture.Priority.Exe="Sernav lihevhatî ye, wekî din çaçroveya ji heman cureya pêkanînê bigere"
13
+CaptureCursor="Nîşankerê bigire"
14
+Compatibility="Lihevhatina pir-adapter"
15
+ClientArea="Tenê naveroka çarçoveyê"
16
+SLIFix="Awayê girtinê SLI/Crossfir (hêdî)"
17
+AllowTransparency="Mafê bide zelaliyê"
18
+Monitor="Dîmender"
19
+PrimaryMonitor="Dîmendera seretayî"
20
+Method="Awayê girtinê"
21
+Method.Auto="Bixweber"
22
+Method.DXGI="Dubarekirina sermaseya DXGI"
23
+Method.WindowsGraphicsCapture="Windows 10 (1903 û jor)"
24
+GameCapture="Girtina lîstikê"
25
+GameCapture.AnyFullscreen="Kîjan sepan di dîmenderê tijî de hebê bigire"
26
+GameCapture.CaptureWindow="Çarçoveya nîşankirî bigire"
27
+GameCapture.UseHotkey="Bi kurte kilît re çarçoveya pêşanî bigire"
28
+GameCapture.LimitFramerate="Girtina tarikê bi sînor bike"
29
+GameCapture.CaptureOverlays="Rûkaşên serhêl ên partiyên sêyemîn (mîna steam) bigire"
30
+GameCapture.AntiCheatHook="Çingala lihevhatinê ya dijî-xapandinê bi kar bîne"
31
+GameCapture.HotkeyStart="Girtina çarçoveya pêşanî"
32
+GameCapture.HotkeyStop="Neçalakirina girtinê"
33
+GameCapture.HookRate="Rêjeya barkirinê"
34
+GameCapture.HookRate.Slow="Hêdî"
35
+GameCapture.HookRate.Normal="Normal (tê pêşniyarkirin)"
36
+GameCapture.HookRate.Fast="Lezdar"
37
+GameCapture.HookRate.Fastest="Leztirîn"
38
+Mode="Awa"
39
obs-studio-27.0.1.tar.xz/plugins/win-capture/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/nb-NO.ini Changed
38
 
1
@@ -1,9 +1,10 @@
2
 MonitorCapture="Skjermopptak"
3
 WindowCapture="Vinduopptak"
4
 WindowCapture.Window="Vindu"
5
-WindowCapture.Method="Metode for bildeinnsamling"
6
+WindowCapture.Method="Opptaksmetode"
7
 WindowCapture.Method.Auto="Automatisk"
8
 WindowCapture.Method.BitBlt="BitBlt (Windows 7 og oppover)"
9
+WindowCapture.Method.WindowsGraphicsCapture="Windows 10 (1903 og oppover)"
10
 WindowCapture.Priority="Match vindusprioritet"
11
 WindowCapture.Priority.Title="Vindustitler må være like"
12
 WindowCapture.Priority.Class="Finn lik tittel, ellers finn vindu av samme type"
13
@@ -11,10 +12,14 @@
14
 CaptureCursor="Ta opp musepeker"
15
 Compatibility="Multiadapterkompatibilitet"
16
 ClientArea="Klientområde"
17
-SLIFix="SLI/Crossfire-opptaksmodus (tregt)"
18
+SLIFix="SLI/Crossfire-opptaksmodus (treig)"
19
 AllowTransparency="Tillat gjennomsiktighet"
20
 Monitor="Skjerm"
21
 PrimaryMonitor="Hovedskjerm"
22
+Method="Opptaksmetode"
23
+Method.Auto="Automatisk"
24
+Method.DXGI="DXGI Skrivebordsduplisering"
25
+Method.WindowsGraphicsCapture="Windows 10 (1903 og oppover)"
26
 GameCapture="Spillopptak"
27
 GameCapture.AnyFullscreen="Opptak av fullskjermapplikasjon"
28
 GameCapture.CaptureWindow="Ta opp et bestemt vindu"
29
@@ -25,7 +30,7 @@
30
 GameCapture.HotkeyStart="Ta opp forgrunnsvindu"
31
 GameCapture.HotkeyStop="Deaktiver opptak"
32
 GameCapture.HookRate="Krokfrekvens"
33
-GameCapture.HookRate.Slow="Sakte"
34
+GameCapture.HookRate.Slow="Treig"
35
 GameCapture.HookRate.Normal="Normal (anbefales)"
36
 GameCapture.HookRate.Fast="Raskt"
37
 GameCapture.HookRate.Fastest="Raskest"
38
obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/nn-NO.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+WindowCapture.Window="Vindauge"
3
+WindowCapture.Method.Auto="Automatisk"
4
+Method.Auto="Automatisk"
5
+Mode="Modus"
6
obs-studio-27.0.1.tar.xz/plugins/win-capture/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/sl-SI.ini Changed
20
 
1
@@ -4,6 +4,7 @@
2
 WindowCapture.Method="Način zajema"
3
 WindowCapture.Method.Auto="Samodejno"
4
 WindowCapture.Method.BitBlt="BitBlt (Windows 7 in novejši)"
5
+WindowCapture.Method.WindowsGraphicsCapture="Windows 10 (1903 in več)"
6
 WindowCapture.Priority="Prednost ujemanja okna"
7
 WindowCapture.Priority.Title="Ujemati se mora naziv okna"
8
 WindowCapture.Priority.Class="Naziv se mora ujemati, sicer poiščite okno iste vrste"
9
@@ -15,6 +16,10 @@
10
 AllowTransparency="Omogoči prozornost"
11
 Monitor="Zaslon"
12
 PrimaryMonitor="Glavni monitor"
13
+Method="Način zajemanja"
14
+Method.Auto="Samodejno"
15
+Method.DXGI="DXGI podvajanje namizja"
16
+Method.WindowsGraphicsCapture="Windows 10 (1903 in več)"
17
 GameCapture="Zajemanje igre"
18
 GameCapture.AnyFullscreen="Zajemaj katerikoli celozaslonski program"
19
 GameCapture.CaptureWindow="Zajemaj določeno okno"
20
obs-studio-27.0.1.tar.xz/plugins/win-capture/data/locale/zh-CN.ini -> obs-studio-27.1.3.tar.xz/plugins/win-capture/data/locale/zh-CN.ini Changed
10
 
1
@@ -11,7 +11,7 @@
2
 WindowCapture.Priority.Exe="匹配标题,否则查找相同可执行程序的窗口"
3
 CaptureCursor="显示鼠标指针"
4
 Compatibility="多显示器的兼容性"
5
-ClientArea="终端区域"
6
+ClientArea="客户端区域"
7
 SLIFix="SLI/交火采集模式 (慢)"
8
 AllowTransparency="允许窗口透明"
9
 Monitor="显示器"
10
obs-studio-27.0.1.tar.xz/plugins/win-capture/dc-capture.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/dc-capture.c Changed
101
 
1
@@ -5,14 +5,27 @@
2
 
3
 static inline void init_textures(struct dc_capture *capture)
4
 {
5
-   if (capture->compatibility)
6
+   if (capture->compatibility) {
7
        capture->texture = gs_texture_create(capture->width,
8
                             capture->height, GS_BGRA,
9
                             1, NULL, GS_DYNAMIC);
10
-   else
11
+   } else {
12
        capture->texture =
13
            gs_texture_create_gdi(capture->width, capture->height);
14
 
15
+       if (capture->texture) {
16
+           capture->extra_texture = gs_texture_create(
17
+               capture->width, capture->height, GS_BGRA, 1,
18
+               NULL, 0);
19
+           if (!capture->extra_texture) {
20
+               blog(LOG_WARNING, "[dc_capture_init] Failed to "
21
+                         "create textures");
22
+               gs_texture_destroy(capture->texture);
23
+               capture->texture = NULL;
24
+           }
25
+       }
26
+   }
27
+
28
    if (!capture->texture) {
29
        blog(LOG_WARNING, "[dc_capture_init] Failed to "
30
                  "create textures");
31
@@ -73,6 +86,7 @@
32
    }
33
 
34
    obs_enter_graphics();
35
+   gs_texture_destroy(capture->extra_texture);
36
    gs_texture_destroy(capture->texture);
37
    obs_leave_graphics();
38
 
39
@@ -165,41 +179,48 @@
40
    capture->texture_written = true;
41
 }
42
 
43
-static void draw_texture(struct dc_capture *capture, gs_effect_t *effect)
44
+static void draw_texture(struct dc_capture *capture, bool texcoords_centered)
45
 {
46
-   gs_texture_t *texture = capture->texture;
47
+   gs_effect_t *effect = obs_get_base_effect(OBS_EFFECT_OPAQUE);
48
    gs_technique_t *tech = gs_effect_get_technique(effect, "Draw");
49
    gs_eparam_t *image = gs_effect_get_param_by_name(effect, "image");
50
-   size_t passes;
51
 
52
-   const bool linear_srgb = gs_get_linear_srgb() && capture->compatibility;
53
+   gs_texture_t *texture = capture->texture;
54
+   const bool compatibility = capture->compatibility;
55
+   bool linear_sample = compatibility;
56
+   if (!linear_sample && !texcoords_centered) {
57
+       gs_texture_t *const extra_texture = capture->extra_texture;
58
+       gs_copy_texture(extra_texture, texture);
59
+       texture = extra_texture;
60
+       linear_sample = true;
61
+   }
62
 
63
    const bool previous = gs_framebuffer_srgb_enabled();
64
-   gs_enable_framebuffer_srgb(linear_srgb);
65
+   gs_enable_framebuffer_srgb(linear_sample);
66
+   gs_enable_blending(false);
67
 
68
-   if (linear_srgb)
69
+   if (linear_sample)
70
        gs_effect_set_texture_srgb(image, texture);
71
    else
72
        gs_effect_set_texture(image, texture);
73
 
74
-   passes = gs_technique_begin(tech);
75
+   const uint32_t flip = compatibility ? GS_FLIP_V : 0;
76
+   const size_t passes = gs_technique_begin(tech);
77
    for (size_t i = 0; i < passes; i++) {
78
        if (gs_technique_begin_pass(tech, i)) {
79
-           if (capture->compatibility)
80
-               gs_draw_sprite(texture, GS_FLIP_V, 0, 0);
81
-           else
82
-               gs_draw_sprite(texture, 0, 0, 0);
83
+           gs_draw_sprite(texture, flip, 0, 0);
84
 
85
            gs_technique_end_pass(tech);
86
        }
87
    }
88
    gs_technique_end(tech);
89
 
90
+   gs_enable_blending(true);
91
    gs_enable_framebuffer_srgb(previous);
92
 }
93
 
94
-void dc_capture_render(struct dc_capture *capture, gs_effect_t *effect)
95
+void dc_capture_render(struct dc_capture *capture, bool texcoords_centered)
96
 {
97
    if (capture->valid && capture->texture_written)
98
-       draw_texture(capture, effect);
99
+       draw_texture(capture, texcoords_centered);
100
 }
101
obs-studio-27.0.1.tar.xz/plugins/win-capture/dc-capture.h -> obs-studio-27.1.3.tar.xz/plugins/win-capture/dc-capture.h Changed
16
 
1
@@ -7,6 +7,7 @@
2
 
3
 struct dc_capture {
4
    gs_texture_t *texture;
5
+   gs_texture_t *extra_texture;
6
    bool texture_written;
7
    int x, y;
8
    uint32_t width;
9
@@ -31,4 +32,5 @@
10
 extern void dc_capture_free(struct dc_capture *capture);
11
 
12
 extern void dc_capture_capture(struct dc_capture *capture, HWND window);
13
-extern void dc_capture_render(struct dc_capture *capture, gs_effect_t *effect);
14
+extern void dc_capture_render(struct dc_capture *capture,
15
+                 bool texcoords_centered);
16
obs-studio-27.0.1.tar.xz/plugins/win-capture/duplicator-monitor-capture.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/duplicator-monitor-capture.c Changed
220
 
1
@@ -39,8 +39,7 @@
2
 typedef void (*PFN_winrt_capture_free)(struct winrt_capture *capture);
3
 
4
 typedef BOOL (*PFN_winrt_capture_active)(const struct winrt_capture *capture);
5
-typedef void (*PFN_winrt_capture_render)(struct winrt_capture *capture,
6
-                    gs_effect_t *effect);
7
+typedef void (*PFN_winrt_capture_render)(struct winrt_capture *capture);
8
 typedef uint32_t (*PFN_winrt_capture_width)(const struct winrt_capture *capture);
9
 typedef uint32_t (*PFN_winrt_capture_height)(
10
    const struct winrt_capture *capture);
11
@@ -85,7 +84,6 @@
12
    float reset_timeout;
13
    struct cursor_data cursor_data;
14
 
15
-   bool wgc_supported;
16
    void *winrt_module;
17
    struct winrt_exports exports;
18
    struct winrt_capture *capture_winrt;
19
@@ -176,6 +174,8 @@
20
    return method;
21
 }
22
 
23
+extern bool wgc_supported;
24
+
25
 static inline void update_settings(struct duplicator_capture *capture,
26
                   obs_data_t *settings)
27
 {
28
@@ -186,8 +186,8 @@
29
    EnumDisplayMonitors(NULL, NULL, enum_monitor, (LPARAM)&monitor);
30
 
31
    capture->method = choose_method(
32
-       (int)obs_data_get_int(settings, "method"),
33
-       capture->wgc_supported, monitor.handle, &capture->dxgi_index);
34
+       (int)obs_data_get_int(settings, "method"), wgc_supported,
35
+       monitor.handle, &capture->dxgi_index);
36
 
37
    capture->monitor = monitor.id;
38
    capture->handle = monitor.handle;
39
@@ -306,6 +306,8 @@
40
    return success;
41
 }
42
 
43
+extern bool graphics_uses_d3d11;
44
+
45
 static void *duplicator_capture_create(obs_data_t *settings,
46
                       obs_source_t *source)
47
 {
48
@@ -316,18 +318,12 @@
49
 
50
    pthread_mutex_init(&capture->update_mutex, NULL);
51
 
52
-   obs_enter_graphics();
53
-   const bool uses_d3d11 = gs_get_device_type() == GS_DEVICE_DIRECT3D_11;
54
-   obs_leave_graphics();
55
-
56
-   if (uses_d3d11) {
57
+   if (graphics_uses_d3d11) {
58
        static const char *const module = "libobs-winrt";
59
        capture->winrt_module = os_dlopen(module);
60
-       if (capture->winrt_module &&
61
-           load_winrt_imports(&capture->exports, capture->winrt_module,
62
-                      module) &&
63
-           capture->exports.winrt_capture_supported()) {
64
-           capture->wgc_supported = true;
65
+       if (capture->winrt_module) {
66
+           load_winrt_imports(&capture->exports,
67
+                      capture->winrt_module, module);
68
        }
69
    }
70
 
71
@@ -491,18 +487,18 @@
72
            capture->rot % 180 == 0 ? capture->height : capture->width);
73
 }
74
 
75
-static void duplicator_capture_render(void *data, gs_effect_t *effect)
76
+static void duplicator_capture_render(void *data, gs_effect_t *unused)
77
 {
78
+   UNUSED_PARAMETER(unused);
79
+
80
    struct duplicator_capture *capture = data;
81
 
82
    if (capture->method == METHOD_WGC) {
83
-       gs_effect_t *const opaque =
84
-           obs_get_base_effect(OBS_EFFECT_OPAQUE);
85
        if (capture->capture_winrt) {
86
            if (capture->exports.winrt_capture_active(
87
                    capture->capture_winrt)) {
88
                capture->exports.winrt_capture_render(
89
-                   capture->capture_winrt, opaque);
90
+                   capture->capture_winrt);
91
            } else {
92
                capture->exports.winrt_capture_free(
93
                    capture->capture_winrt);
94
@@ -510,54 +506,62 @@
95
            }
96
        }
97
    } else {
98
-       gs_texture_t *texture;
99
-       int rot;
100
-
101
        if (!capture->duplicator)
102
            return;
103
 
104
-       texture = gs_duplicator_get_texture(capture->duplicator);
105
+       gs_texture_t *const texture =
106
+           gs_duplicator_get_texture(capture->duplicator);
107
        if (!texture)
108
            return;
109
 
110
-       effect = obs_get_base_effect(OBS_EFFECT_OPAQUE);
111
-
112
-       rot = capture->rot;
113
-
114
-       while (gs_effect_loop(effect, "Draw")) {
115
-           if (rot != 0) {
116
-               float x = 0.0f;
117
-               float y = 0.0f;
118
-
119
-               switch (rot) {
120
-               case 90:
121
-                   x = (float)capture->height;
122
-                   break;
123
-               case 180:
124
-                   x = (float)capture->width;
125
-                   y = (float)capture->height;
126
-                   break;
127
-               case 270:
128
-                   y = (float)capture->width;
129
-                   break;
130
-               }
131
-
132
-               gs_matrix_push();
133
-               gs_matrix_translate3f(x, y, 0.0f);
134
-               gs_matrix_rotaa4f(0.0f, 0.0f, 1.0f,
135
-                         RAD((float)rot));
136
+       const bool previous = gs_framebuffer_srgb_enabled();
137
+       gs_enable_framebuffer_srgb(true);
138
+       gs_enable_blending(false);
139
+
140
+       const int rot = capture->rot;
141
+       if (rot != 0) {
142
+           float x = 0.0f;
143
+           float y = 0.0f;
144
+
145
+           switch (rot) {
146
+           case 90:
147
+               x = (float)capture->height;
148
+               break;
149
+           case 180:
150
+               x = (float)capture->width;
151
+               y = (float)capture->height;
152
+               break;
153
+           case 270:
154
+               y = (float)capture->width;
155
+               break;
156
            }
157
 
158
-           obs_source_draw(texture, 0, 0, 0, 0, false);
159
+           gs_matrix_push();
160
+           gs_matrix_translate3f(x, y, 0.0f);
161
+           gs_matrix_rotaa4f(0.0f, 0.0f, 1.0f, RAD((float)rot));
162
+       }
163
+
164
+       gs_effect_t *const opaque_effect =
165
+           obs_get_base_effect(OBS_EFFECT_OPAQUE);
166
+       while (gs_effect_loop(opaque_effect, "Draw")) {
167
+           gs_eparam_t *image = gs_effect_get_param_by_name(
168
+               opaque_effect, "image");
169
+           gs_effect_set_texture_srgb(image, texture);
170
 
171
-           if (rot != 0)
172
-               gs_matrix_pop();
173
+           gs_draw_sprite(texture, 0, 0, 0);
174
        }
175
 
176
+       if (rot != 0)
177
+           gs_matrix_pop();
178
+
179
+       gs_enable_blending(true);
180
+       gs_enable_framebuffer_srgb(previous);
181
+
182
        if (capture->capture_cursor) {
183
-           effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
184
+           gs_effect_t *const default_effect =
185
+               obs_get_base_effect(OBS_EFFECT_DEFAULT);
186
 
187
-           while (gs_effect_loop(effect, "Draw")) {
188
+           while (gs_effect_loop(default_effect, "Draw")) {
189
                draw_cursor(capture);
190
            }
191
        }
192
@@ -631,6 +635,9 @@
193
    UNUSED_PARAMETER(p);
194
 
195
    struct duplicator_capture *capture = obs_properties_get_param(props);
196
+   if (!capture)
197
+       return false;
198
+
199
    update_settings(capture, settings);
200
 
201
    update_settings_visibility(props, capture);
202
@@ -652,7 +659,7 @@
203
    obs_property_list_add_int(p, TEXT_METHOD_AUTO, METHOD_AUTO);
204
    obs_property_list_add_int(p, TEXT_METHOD_DXGI, METHOD_DXGI);
205
    obs_property_list_add_int(p, TEXT_METHOD_WGC, METHOD_WGC);
206
-   obs_property_list_item_disable(p, 2, !capture->wgc_supported);
207
+   obs_property_list_item_disable(p, 2, !wgc_supported);
208
    obs_property_set_modified_callback(p, display_capture_method_changed);
209
 
210
    obs_property_t *monitors = obs_properties_add_list(
211
@@ -670,7 +677,7 @@
212
    .id = "monitor_capture",
213
    .type = OBS_SOURCE_TYPE_INPUT,
214
    .output_flags = OBS_SOURCE_VIDEO | OBS_SOURCE_CUSTOM_DRAW |
215
-           OBS_SOURCE_DO_NOT_DUPLICATE,
216
+           OBS_SOURCE_DO_NOT_DUPLICATE | OBS_SOURCE_SRGB,
217
    .get_name = duplicator_capture_getname,
218
    .create = duplicator_capture_create,
219
    .destroy = duplicator_capture_destroy,
220
obs-studio-27.0.1.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/game-capture.c Changed
271
 
1
@@ -149,7 +149,9 @@
2
 
3
    ipc_pipe_server_t pipe;
4
    gs_texture_t *texture;
5
-   bool supports_srgb;
6
+   gs_texture_t *extra_texture;
7
+   gs_texrender_t *extra_texrender;
8
+   bool linear_sample;
9
    struct hook_info *global_hook_info;
10
    HANDLE keepalive_mutex;
11
    HANDLE hook_init;
12
@@ -332,12 +334,14 @@
13
    close_handle(&gc->texture_mutexes[0]);
14
    close_handle(&gc->texture_mutexes[1]);
15
 
16
-   if (gc->texture) {
17
-       obs_enter_graphics();
18
-       gs_texture_destroy(gc->texture);
19
-       obs_leave_graphics();
20
-       gc->texture = NULL;
21
-   }
22
+   obs_enter_graphics();
23
+   gs_texrender_destroy(gc->extra_texrender);
24
+   gc->extra_texrender = NULL;
25
+   gs_texture_destroy(gc->extra_texture);
26
+   gc->extra_texture = NULL;
27
+   gs_texture_destroy(gc->texture);
28
+   gc->texture = NULL;
29
+   obs_leave_graphics();
30
 
31
    if (gc->active)
32
        info("capture stopped");
33
@@ -1552,49 +1556,110 @@
34
 
35
 static inline bool init_shmem_capture(struct game_capture *gc)
36
 {
37
-   enum gs_color_format format;
38
-
39
-   gc->texture_buffers[0] =
40
-       (uint8_t *)gc->data + gc->shmem_data->tex1_offset;
41
-   gc->texture_buffers[1] =
42
-       (uint8_t *)gc->data + gc->shmem_data->tex2_offset;
43
-
44
-   gc->convert_16bit = is_16bit_format(gc->global_hook_info->format);
45
-   format = gc->convert_16bit
46
-            ? GS_BGRA
47
-            : convert_format(gc->global_hook_info->format);
48
+   const uint32_t dxgi_format = gc->global_hook_info->format;
49
+   const bool convert_16bit = is_16bit_format(dxgi_format);
50
+   const enum gs_color_format format =
51
+       convert_16bit ? GS_BGRA : convert_format(dxgi_format);
52
 
53
    obs_enter_graphics();
54
+   gs_texrender_destroy(gc->extra_texrender);
55
+   gc->extra_texrender = NULL;
56
+   gs_texture_destroy(gc->extra_texture);
57
+   gc->extra_texture = NULL;
58
    gs_texture_destroy(gc->texture);
59
-   gc->texture =
60
+   gc->texture = NULL;
61
+   gs_texture_t *const texture =
62
        gs_texture_create(gc->cx, gc->cy, format, 1, NULL, GS_DYNAMIC);
63
    obs_leave_graphics();
64
 
65
-   if (!gc->texture) {
66
+   bool success = texture != NULL;
67
+   if (success) {
68
+       const bool linear_sample = format != GS_R10G10B10A2;
69
+
70
+       gs_texrender_t *extra_texrender = NULL;
71
+       if (!linear_sample) {
72
+           extra_texrender =
73
+               gs_texrender_create(GS_BGRA, GS_ZS_NONE);
74
+           success = extra_texrender != NULL;
75
+           if (!success)
76
+               warn("init_shmem_capture: failed to create extra texrender");
77
+       }
78
+
79
+       if (success) {
80
+           gc->texture_buffers[0] = (uint8_t *)gc->data +
81
+                        gc->shmem_data->tex1_offset;
82
+           gc->texture_buffers[1] = (uint8_t *)gc->data +
83
+                        gc->shmem_data->tex2_offset;
84
+           gc->convert_16bit = convert_16bit;
85
+
86
+           gc->texture = texture;
87
+           gc->extra_texture = NULL;
88
+           gc->extra_texrender = extra_texrender;
89
+           gc->linear_sample = linear_sample;
90
+           gc->copy_texture = copy_shmem_tex;
91
+       } else {
92
+           gs_texture_destroy(texture);
93
+       }
94
+   } else {
95
        warn("init_shmem_capture: failed to create texture");
96
-       return false;
97
    }
98
 
99
-   gc->supports_srgb = true;
100
-   gc->copy_texture = copy_shmem_tex;
101
-   return true;
102
+   return success;
103
 }
104
 
105
 static inline bool init_shtex_capture(struct game_capture *gc)
106
 {
107
    obs_enter_graphics();
108
+   gs_texrender_destroy(gc->extra_texrender);
109
+   gc->extra_texrender = NULL;
110
+   gs_texture_destroy(gc->extra_texture);
111
+   gc->extra_texture = NULL;
112
    gs_texture_destroy(gc->texture);
113
-   gc->texture = gs_texture_open_shared(gc->shtex_data->tex_handle);
114
-   enum gs_color_format format = gs_texture_get_color_format(gc->texture);
115
-   gc->supports_srgb = gs_is_srgb_format(format);
116
-   obs_leave_graphics();
117
+   gc->texture = NULL;
118
+   gs_texture_t *const texture =
119
+       gs_texture_open_shared(gc->shtex_data->tex_handle);
120
+   bool success = texture != NULL;
121
+   if (success) {
122
+       enum gs_color_format format =
123
+           gs_texture_get_color_format(texture);
124
+       const bool ten_bit_srgb = (format == GS_R10G10B10A2);
125
+       enum gs_color_format linear_format =
126
+           ten_bit_srgb ? GS_BGRA : gs_generalize_format(format);
127
+       const bool linear_sample = (linear_format == format);
128
+       gs_texture_t *extra_texture = NULL;
129
+       gs_texrender_t *extra_texrender = NULL;
130
+       if (!linear_sample) {
131
+           if (ten_bit_srgb) {
132
+               extra_texrender = gs_texrender_create(
133
+                   linear_format, GS_ZS_NONE);
134
+               success = extra_texrender != NULL;
135
+               if (!success)
136
+                   warn("init_shtex_capture: failed to create extra texrender");
137
+           } else {
138
+               extra_texture = gs_texture_create(
139
+                   gs_texture_get_width(texture),
140
+                   gs_texture_get_height(texture),
141
+                   linear_format, 1, NULL, 0);
142
+               success = extra_texture != NULL;
143
+               if (!success)
144
+                   warn("init_shtex_capture: failed to create extra texture");
145
+           }
146
+       }
147
 
148
-   if (!gc->texture) {
149
+       if (success) {
150
+           gc->texture = texture;
151
+           gc->linear_sample = linear_sample;
152
+           gc->extra_texture = extra_texture;
153
+           gc->extra_texrender = extra_texrender;
154
+       } else {
155
+           gs_texture_destroy(texture);
156
+       }
157
+   } else {
158
        warn("init_shtex_capture: failed to open shared handle");
159
-       return false;
160
    }
161
+   obs_leave_graphics();
162
 
163
-   return true;
164
+   return success;
165
 }
166
 
167
 static bool start_capture(struct game_capture *gc)
168
@@ -1802,36 +1867,86 @@
169
            gc->global_hook_info->cy);
170
 }
171
 
172
-static void game_capture_render(void *data, gs_effect_t *effect)
173
+static void game_capture_render(void *data, gs_effect_t *unused)
174
 {
175
+   UNUSED_PARAMETER(unused);
176
+
177
    struct game_capture *gc = data;
178
    if (!gc->texture || !gc->active)
179
        return;
180
 
181
-   effect = obs_get_base_effect(gc->config.allow_transparency
182
-                        ? OBS_EFFECT_DEFAULT
183
-                        : OBS_EFFECT_OPAQUE);
184
+   const bool allow_transparency = gc->config.allow_transparency;
185
+   gs_effect_t *const effect = obs_get_base_effect(
186
+       allow_transparency ? OBS_EFFECT_DEFAULT : OBS_EFFECT_OPAQUE);
187
+
188
+   bool linear_sample = gc->linear_sample;
189
+   gs_texture_t *texture = gc->texture;
190
+   if (!linear_sample && !obs_source_get_texcoords_centered(gc->source)) {
191
+       gs_texture_t *const extra_texture = gc->extra_texture;
192
+       if (extra_texture) {
193
+           gs_copy_texture(extra_texture, texture);
194
+           texture = extra_texture;
195
+       } else {
196
+           gs_texrender_t *const texrender = gc->extra_texrender;
197
+           gs_texrender_reset(texrender);
198
+           const uint32_t cx = gs_texture_get_width(texture);
199
+           const uint32_t cy = gs_texture_get_height(texture);
200
+           if (gs_texrender_begin(texrender, cx, cy)) {
201
+               gs_effect_t *const default_effect =
202
+                   obs_get_base_effect(OBS_EFFECT_DEFAULT);
203
+               const bool previous =
204
+                   gs_framebuffer_srgb_enabled();
205
+               gs_enable_framebuffer_srgb(false);
206
+               gs_enable_blending(false);
207
+               gs_ortho(0.0f, (float)cx, 0.0f, (float)cy,
208
+                    -100.0f, 100.0f);
209
+               gs_eparam_t *const image =
210
+                   gs_effect_get_param_by_name(
211
+                       default_effect, "image");
212
+               gs_effect_set_texture(image, texture);
213
+               while (gs_effect_loop(default_effect, "Draw")) {
214
+                   gs_draw_sprite(texture, 0, 0, 0);
215
+               }
216
+               gs_enable_blending(true);
217
+               gs_enable_framebuffer_srgb(previous);
218
+
219
+               gs_texrender_end(texrender);
220
+
221
+               texture = gs_texrender_get_texture(texrender);
222
+           }
223
+       }
224
 
225
-   const bool linear_srgb = gs_get_linear_srgb() && gc->supports_srgb;
226
-   const bool previous = gs_set_linear_srgb(linear_srgb);
227
+       linear_sample = true;
228
+   }
229
 
230
-   while (gs_effect_loop(effect, "Draw")) {
231
-       obs_source_draw(gc->texture, 0, 0, 0, 0,
232
-               gc->global_hook_info->flip);
233
+   gs_eparam_t *const image = gs_effect_get_param_by_name(effect, "image");
234
+   const uint32_t flip = gc->global_hook_info->flip ? GS_FLIP_V : 0;
235
+   const char *tech_name = allow_transparency && !linear_sample
236
+                   ? "DrawSrgbDecompress"
237
+                   : "Draw";
238
+   while (gs_effect_loop(effect, tech_name)) {
239
+       const bool previous = gs_framebuffer_srgb_enabled();
240
+       gs_enable_framebuffer_srgb(allow_transparency || linear_sample);
241
+       gs_enable_blending(allow_transparency);
242
+       if (linear_sample)
243
+           gs_effect_set_texture_srgb(image, texture);
244
+       else
245
+           gs_effect_set_texture(image, texture);
246
+       gs_draw_sprite(texture, flip, 0, 0);
247
+       gs_enable_blending(true);
248
+       gs_enable_framebuffer_srgb(previous);
249
 
250
-       if (gc->config.allow_transparency && gc->config.cursor &&
251
+       if (allow_transparency && gc->config.cursor &&
252
            !gc->cursor_hidden) {
253
            game_capture_render_cursor(gc);
254
        }
255
    }
256
 
257
-   gs_set_linear_srgb(previous);
258
-
259
-   if (!gc->config.allow_transparency && gc->config.cursor &&
260
-       !gc->cursor_hidden) {
261
-       effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
262
+   if (!allow_transparency && gc->config.cursor && !gc->cursor_hidden) {
263
+       gs_effect_t *const default_effect =
264
+           obs_get_base_effect(OBS_EFFECT_DEFAULT);
265
 
266
-       while (gs_effect_loop(effect, "Draw")) {
267
+       while (gs_effect_loop(default_effect, "Draw")) {
268
            game_capture_render_cursor(gc);
269
        }
270
    }
271
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook-ver.h -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook-ver.h Changed
12
 
1
@@ -12,8 +12,8 @@
2
  * THIS IS YOUR ONLY WARNING. */
3
 
4
 #define HOOK_VER_MAJOR 1
5
-#define HOOK_VER_MINOR 6
6
-#define HOOK_VER_PATCH 0
7
+#define HOOK_VER_MINOR 7
8
+#define HOOK_VER_PATCH 1
9
 
10
 #define STRINGIFY(s) #s
11
 #define MAKE_VERSION_NAME(major, minor, patch) \
12
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/CMakeLists.txt -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/CMakeLists.txt Changed
24
 
1
@@ -17,14 +17,12 @@
2
    ../graphics-hook-ver.h
3
    ../graphics-hook-info.h
4
    ../hook-helpers.h
5
-   ../funchook.h
6
    ../obfuscate.h
7
    gl-decs.h
8
    d3d9-patches.hpp)
9
 
10
 set(graphics-hook_SOURCES
11
    graphics-hook.c
12
-   ../funchook.c
13
    ../obfuscate.c
14
    gl-capture.c
15
    d3d8-capture.cpp
16
@@ -57,7 +55,6 @@
17
 target_link_libraries(graphics-hook
18
    dxguid
19
    ipc-util
20
-   psapi
21
    ${DETOURS_LIBRARIES})
22
 
23
 if(CMAKE_SIZEOF_VOID_P EQUAL 8)
24
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/d3d10-capture.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/d3d10-capture.cpp Changed
18
 
1
@@ -3,7 +3,6 @@
2
 
3
 #include "dxgi-helpers.hpp"
4
 #include "graphics-hook.h"
5
-#include "../funchook.h"
6
 
7
 struct d3d10_data {
8
    ID3D10Device *device; /* do not release */
9
@@ -330,7 +329,7 @@
10
    data.cur_tex = next_tex;
11
 }
12
 
13
-void d3d10_capture(void *swap_ptr, void *backbuffer_ptr, bool)
14
+void d3d10_capture(void *swap_ptr, void *backbuffer_ptr)
15
 {
16
    IDXGIResource *dxgi_backbuffer = (IDXGIResource *)backbuffer_ptr;
17
    IDXGISwapChain *swap = (IDXGISwapChain *)swap_ptr;
18
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/d3d11-capture.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/d3d11-capture.cpp Changed
18
 
1
@@ -3,7 +3,6 @@
2
 
3
 #include "dxgi-helpers.hpp"
4
 #include "graphics-hook.h"
5
-#include "../funchook.h"
6
 
7
 struct d3d11_data {
8
    ID3D11Device *device;         /* do not release */
9
@@ -337,7 +336,7 @@
10
    data.cur_tex = next_tex;
11
 }
12
 
13
-void d3d11_capture(void *swap_ptr, void *backbuffer_ptr, bool)
14
+void d3d11_capture(void *swap_ptr, void *backbuffer_ptr)
15
 {
16
    IDXGIResource *dxgi_backbuffer = (IDXGIResource *)backbuffer_ptr;
17
    IDXGISwapChain *swap = (IDXGISwapChain *)swap_ptr;
18
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/d3d12-capture.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/d3d12-capture.cpp Changed
89
 
1
@@ -89,10 +89,9 @@
2
 
3
    for (UINT i = 0; i < bb.count; i++) {
4
        hr = data.device11on12->CreateWrappedResource(
5
-           bb.backbuffer[i], &rf11,
6
-           D3D12_RESOURCE_STATE_COPY_SOURCE,
7
-           D3D12_RESOURCE_STATE_PRESENT, __uuidof(ID3D11Resource),
8
-           (void **)&data.backbuffer11[i]);
9
+           bb.backbuffer[i], &rf11, D3D12_RESOURCE_STATE_PRESENT,
10
+           D3D12_RESOURCE_STATE_PRESENT,
11
+           IID_PPV_ARGS(&data.backbuffer11[i]));
12
        if (FAILED(hr)) {
13
            hlog_hr("create_d3d12_tex: failed to create "
14
                "backbuffer11",
15
@@ -119,14 +118,8 @@
16
        return false;
17
    }
18
 
19
-   for (UINT i = 0; i < bb.count; i++) {
20
-       data.device11on12->ReleaseWrappedResources(
21
-           &data.backbuffer11[i], 1);
22
-   }
23
-
24
    IDXGIResource *dxgi_res;
25
-   hr = data.copy_tex->QueryInterface(__uuidof(IDXGIResource),
26
-                      (void **)&dxgi_res);
27
+   hr = data.copy_tex->QueryInterface(&dxgi_res);
28
    if (FAILED(hr)) {
29
        hlog_hr("create_d3d12_tex: failed to query "
30
            "IDXGIResource interface from texture",
31
@@ -249,7 +242,7 @@
32
    data.cx = desc.BufferDesc.Width;
33
    data.cy = desc.BufferDesc.Height;
34
 
35
-   hr = swap->QueryInterface(__uuidof(IDXGISwapChain3), (void **)&swap3);
36
+   hr = swap->QueryInterface(&swap3);
37
    if (SUCCEEDED(hr)) {
38
        data.dxgi_1_4 = true;
39
        hlog("We're DXGI1.4 boys!");
40
@@ -274,8 +267,7 @@
41
    }
42
 
43
    for (UINT i = 0; i < bb.count; i++) {
44
-       hr = swap->GetBuffer(i, __uuidof(ID3D12Resource),
45
-                    (void **)&bb.backbuffer[i]);
46
+       hr = swap->GetBuffer(i, IID_PPV_ARGS(&bb.backbuffer[i]));
47
        if (SUCCEEDED(hr)) {
48
            bb.backbuffer[i]->Release();
49
        } else {
50
@@ -321,8 +313,7 @@
51
    }
52
 }
53
 
54
-static inline void d3d12_shtex_capture(IDXGISwapChain *swap,
55
-                      bool capture_overlay)
56
+static inline void d3d12_shtex_capture(IDXGISwapChain *swap)
57
 {
58
    bool dxgi_1_4 = data.dxgi_1_4;
59
    UINT cur_idx;
60
@@ -331,10 +322,6 @@
61
        IDXGISwapChain3 *swap3 =
62
            reinterpret_cast<IDXGISwapChain3 *>(swap);
63
        cur_idx = swap3->GetCurrentBackBufferIndex();
64
-       if (!capture_overlay) {
65
-           if (++cur_idx >= data.backbuffer_count)
66
-               cur_idx = 0;
67
-       }
68
    } else {
69
        cur_idx = data.cur_backbuffer;
70
    }
71
@@ -352,7 +339,7 @@
72
    }
73
 }
74
 
75
-void d3d12_capture(void *swap_ptr, void *, bool capture_overlay)
76
+void d3d12_capture(void *swap_ptr, void *)
77
 {
78
    IDXGISwapChain *swap = (IDXGISwapChain *)swap_ptr;
79
 
80
@@ -363,7 +350,7 @@
81
        d3d12_init(swap);
82
    }
83
    if (capture_ready()) {
84
-       d3d12_shtex_capture(swap, capture_overlay);
85
+       d3d12_shtex_capture(swap);
86
    }
87
 }
88
 
89
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/d3d8-capture.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/d3d8-capture.cpp Changed
114
 
1
@@ -2,7 +2,8 @@
2
 
3
 #include "../d3d8-api/d3d8.h"
4
 #include "graphics-hook.h"
5
-#include "../funchook.h"
6
+
7
+#include <detours.h>
8
 
9
 typedef HRESULT(STDMETHODCALLTYPE *reset_t)(IDirect3DDevice8 *,
10
                        D3DPRESENT_PARAMETERS *);
11
@@ -10,8 +11,8 @@
12
                          CONST RECT *, HWND,
13
                          CONST RGNDATA *);
14
 
15
-static struct func_hook present;
16
-static struct func_hook reset;
17
+reset_t RealReset = NULL;
18
+present_t RealPresent = NULL;
19
 
20
 struct d3d8_data {
21
    HMODULE d3d8;
22
@@ -250,17 +251,10 @@
23
 static HRESULT STDMETHODCALLTYPE hook_reset(IDirect3DDevice8 *device,
24
                        D3DPRESENT_PARAMETERS *parameters)
25
 {
26
-   HRESULT hr;
27
-
28
    if (capture_active())
29
        d3d8_free();
30
 
31
-   unhook(&reset);
32
-   reset_t call = (reset_t)reset.call_addr;
33
-   hr = call(device, parameters);
34
-   rehook(&reset);
35
-
36
-   return hr;
37
+   return RealReset(device, parameters);
38
 }
39
 
40
 static bool hooked_reset = false;
41
@@ -269,11 +263,19 @@
42
 {
43
    uintptr_t *vtable = *(uintptr_t **)device;
44
 
45
-   hook_init(&reset, (void *)vtable[14], (void *)hook_reset,
46
-         "IDirect3DDevice8::Reset");
47
-   rehook(&reset);
48
+   DetourTransactionBegin();
49
 
50
-   hooked_reset = true;
51
+   RealReset = (reset_t)vtable[14];
52
+   DetourAttach((PVOID *)&RealReset, hook_reset);
53
+
54
+   const LONG error = DetourTransactionCommit();
55
+   const bool success = error == NO_ERROR;
56
+   if (success) {
57
+       hlog("Hooked IDirect3DDevice8::Reset");
58
+       hooked_reset = true;
59
+   } else {
60
+       RealReset = nullptr;
61
+   }
62
 }
63
 
64
 static HRESULT STDMETHODCALLTYPE hook_present(IDirect3DDevice8 *device,
65
@@ -283,7 +285,6 @@
66
                          CONST RGNDATA *dirty_region)
67
 {
68
    IDirect3DSurface8 *backbuffer;
69
-   HRESULT hr;
70
 
71
    if (!hooked_reset)
72
        setup_reset_hooks(device);
73
@@ -294,12 +295,8 @@
74
        backbuffer->Release();
75
    }
76
 
77
-   unhook(&present);
78
-   present_t call = (present_t)present.call_addr;
79
-   hr = call(device, src_rect, dst_rect, override_window, dirty_region);
80
-   rehook(&present);
81
-
82
-   return hr;
83
+   return RealPresent(device, src_rect, dst_rect, override_window,
84
+              dirty_region);
85
 }
86
 
87
 typedef IDirect3D8 *(WINAPI *d3d8create_t)(UINT);
88
@@ -388,11 +385,20 @@
89
        return true;
90
    }
91
 
92
-   hook_init(&present, present_addr, (void *)hook_present,
93
-         "IDirect3DDevice8::Present");
94
+   DetourTransactionBegin();
95
 
96
-   rehook(&present);
97
+   RealPresent = (present_t)present_addr;
98
+   DetourAttach((PVOID *)&RealPresent, hook_present);
99
 
100
-   hlog("Hooked D3D8");
101
-   return true;
102
+   const LONG error = DetourTransactionCommit();
103
+   const bool success = error == NO_ERROR;
104
+   if (success) {
105
+       hlog("Hooked IDirect3DDevice8::Present");
106
+       hlog("Hooked D3D8");
107
+   } else {
108
+       RealPresent = nullptr;
109
+       hlog("Failed to attach Detours hook: %ld", error);
110
+   }
111
+
112
+   return success;
113
 }
114
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/d3d9-capture.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/d3d9-capture.cpp Changed
244
 
1
@@ -3,13 +3,14 @@
2
 #include <dxgi.h>
3
 
4
 #include "graphics-hook.h"
5
-#include "../funchook.h"
6
 #include "d3d9-patches.hpp"
7
 
8
+#include <detours.h>
9
+
10
 typedef HRESULT(STDMETHODCALLTYPE *present_t)(IDirect3DDevice9 *, CONST RECT *,
11
                          CONST RECT *, HWND,
12
                          CONST RGNDATA *);
13
-typedef HRESULT(STDMETHODCALLTYPE *present_ex_t)(IDirect3DDevice9 *,
14
+typedef HRESULT(STDMETHODCALLTYPE *present_ex_t)(IDirect3DDevice9Ex *,
15
                         CONST RECT *, CONST RECT *,
16
                         HWND, CONST RGNDATA *, DWORD);
17
 typedef HRESULT(STDMETHODCALLTYPE *present_swap_t)(IDirect3DSwapChain9 *,
18
@@ -24,11 +25,11 @@
19
 
20
 typedef HRESULT(WINAPI *createfactory1_t)(REFIID, void **);
21
 
22
-static struct func_hook present;
23
-static struct func_hook present_ex;
24
-static struct func_hook present_swap;
25
-static struct func_hook reset;
26
-static struct func_hook reset_ex;
27
+present_t RealPresent = NULL;
28
+present_ex_t RealPresentEx = NULL;
29
+present_swap_t RealPresentSwap = NULL;
30
+reset_t RealReset = NULL;
31
+reset_ex_t RealResetEx = NULL;
32
 
33
 struct d3d9_data {
34
    HMODULE d3d9;
35
@@ -641,17 +642,14 @@
36
                          CONST RGNDATA *dirty_region)
37
 {
38
    IDirect3DSurface9 *backbuffer = nullptr;
39
-   HRESULT hr;
40
 
41
    if (!hooked_reset)
42
        setup_reset_hooks(device);
43
 
44
    present_begin(device, backbuffer);
45
 
46
-   unhook(&present);
47
-   present_t call = (present_t)present.call_addr;
48
-   hr = call(device, src_rect, dst_rect, override_window, dirty_region);
49
-   rehook(&present);
50
+   const HRESULT hr = RealPresent(device, src_rect, dst_rect,
51
+                      override_window, dirty_region);
52
 
53
    present_end(device, backbuffer);
54
 
55
@@ -659,22 +657,18 @@
56
 }
57
 
58
 static HRESULT STDMETHODCALLTYPE hook_present_ex(
59
-   IDirect3DDevice9 *device, CONST RECT *src_rect, CONST RECT *dst_rect,
60
+   IDirect3DDevice9Ex *device, CONST RECT *src_rect, CONST RECT *dst_rect,
61
    HWND override_window, CONST RGNDATA *dirty_region, DWORD flags)
62
 {
63
    IDirect3DSurface9 *backbuffer = nullptr;
64
-   HRESULT hr;
65
 
66
    if (!hooked_reset)
67
        setup_reset_hooks(device);
68
 
69
    present_begin(device, backbuffer);
70
 
71
-   unhook(&present_ex);
72
-   present_ex_t call = (present_ex_t)present_ex.call_addr;
73
-   hr = call(device, src_rect, dst_rect, override_window, dirty_region,
74
-         flags);
75
-   rehook(&present_ex);
76
+   const HRESULT hr = RealPresentEx(device, src_rect, dst_rect,
77
+                    override_window, dirty_region, flags);
78
 
79
    present_end(device, backbuffer);
80
 
81
@@ -687,12 +681,11 @@
82
 {
83
    IDirect3DSurface9 *backbuffer = nullptr;
84
    IDirect3DDevice9 *device = nullptr;
85
-   HRESULT hr;
86
 
87
    if (!present_recurse) {
88
-       hr = swap->GetDevice(&device);
89
-       if (SUCCEEDED(hr)) {
90
-           device->Release();
91
+       IDirect3DDevice9 *temp;
92
+       if (SUCCEEDED(swap->GetDevice(&temp))) {
93
+           device = temp;
94
        }
95
    }
96
 
97
@@ -703,14 +696,13 @@
98
        present_begin(device, backbuffer);
99
    }
100
 
101
-   unhook(&present_swap);
102
-   present_swap_t call = (present_swap_t)present_swap.call_addr;
103
-   hr = call(swap, src_rect, dst_rect, override_window, dirty_region,
104
-         flags);
105
-   rehook(&present_swap);
106
+   const HRESULT hr = RealPresentSwap(
107
+       swap, src_rect, dst_rect, override_window, dirty_region, flags);
108
 
109
-   if (device)
110
+   if (device) {
111
        present_end(device, backbuffer);
112
+       device->Release();
113
+   }
114
 
115
    return hr;
116
 }
117
@@ -718,34 +710,20 @@
118
 static HRESULT STDMETHODCALLTYPE hook_reset(IDirect3DDevice9 *device,
119
                        D3DPRESENT_PARAMETERS *params)
120
 {
121
-   HRESULT hr;
122
-
123
    if (capture_active())
124
        d3d9_free();
125
 
126
-   unhook(&reset);
127
-   reset_t call = (reset_t)reset.call_addr;
128
-   hr = call(device, params);
129
-   rehook(&reset);
130
-
131
-   return hr;
132
+   return RealReset(device, params);
133
 }
134
 
135
 static HRESULT STDMETHODCALLTYPE hook_reset_ex(IDirect3DDevice9 *device,
136
                           D3DPRESENT_PARAMETERS *params,
137
                           D3DDISPLAYMODEEX *dmex)
138
 {
139
-   HRESULT hr;
140
-
141
    if (capture_active())
142
        d3d9_free();
143
 
144
-   unhook(&reset_ex);
145
-   reset_ex_t call = (reset_ex_t)reset_ex.call_addr;
146
-   hr = call(device, params, dmex);
147
-   rehook(&reset_ex);
148
-
149
-   return hr;
150
+   return RealResetEx(device, params, dmex);
151
 }
152
 
153
 static void setup_reset_hooks(IDirect3DDevice9 *device)
154
@@ -754,21 +732,30 @@
155
    uintptr_t *vtable = *(uintptr_t **)device;
156
    HRESULT hr;
157
 
158
-   hook_init(&reset, (void *)vtable[16], (void *)hook_reset,
159
-         "IDirect3DDevice9::Reset");
160
-   rehook(&reset);
161
+   DetourTransactionBegin();
162
 
163
-   hr = device->QueryInterface(__uuidof(IDirect3DDevice9Ex),
164
-                   (void **)&d3d9ex);
165
+   RealReset = (reset_t)vtable[16];
166
+   DetourAttach((PVOID *)&RealReset, hook_reset);
167
+
168
+   hr = device->QueryInterface(IID_PPV_ARGS(&d3d9ex));
169
    if (SUCCEEDED(hr)) {
170
-       hook_init(&reset_ex, (void *)vtable[132], (void *)hook_reset_ex,
171
-             "IDirect3DDevice9Ex::ResetEx");
172
-       rehook(&reset_ex);
173
+       RealResetEx = (reset_ex_t)vtable[132];
174
+       DetourAttach((PVOID *)&RealResetEx, hook_reset_ex);
175
 
176
        d3d9ex->Release();
177
    }
178
 
179
-   hooked_reset = true;
180
+   const LONG error = DetourTransactionCommit();
181
+   const bool success = error == NO_ERROR;
182
+   if (success) {
183
+       hlog("Hooked IDirect3DDevice9::Reset");
184
+       if (RealResetEx)
185
+           hlog("Hooked IDirect3DDevice9Ex::ResetEx");
186
+       hooked_reset = true;
187
+   } else {
188
+       RealReset = nullptr;
189
+       RealResetEx = nullptr;
190
+   }
191
 }
192
 
193
 typedef HRESULT(WINAPI *d3d9create_ex_t)(UINT, IDirect3D9Ex **);
194
@@ -878,23 +865,37 @@
195
        return true;
196
    }
197
 
198
+   DetourTransactionBegin();
199
+
200
    if (present_swap_addr) {
201
-       hook_init(&present_swap, present_swap_addr,
202
-             (void *)hook_present_swap,
203
-             "IDirect3DSwapChain9::Present");
204
-       rehook(&present_swap);
205
+       RealPresentSwap = (present_swap_t)present_swap_addr;
206
+       DetourAttach((PVOID *)&RealPresentSwap, hook_present_swap);
207
    }
208
    if (present_ex_addr) {
209
-       hook_init(&present_ex, present_ex_addr, (void *)hook_present_ex,
210
-             "IDirect3DDevice9Ex::PresentEx");
211
-       rehook(&present_ex);
212
+       RealPresentEx = (present_ex_t)present_ex_addr;
213
+       DetourAttach((PVOID *)&RealPresentEx, hook_present_ex);
214
    }
215
    if (present_addr) {
216
-       hook_init(&present, present_addr, (void *)hook_present,
217
-             "IDirect3DDevice9::Present");
218
-       rehook(&present);
219
+       RealPresent = (present_t)present_addr;
220
+       DetourAttach((PVOID *)&RealPresent, hook_present);
221
+   }
222
+
223
+   const LONG error = DetourTransactionCommit();
224
+   const bool success = error == NO_ERROR;
225
+   if (success) {
226
+       if (RealPresentSwap)
227
+           hlog("Hooked IDirect3DSwapChain9::Present");
228
+       if (RealPresentEx)
229
+           hlog("Hooked IDirect3DDevice9Ex::PresentEx");
230
+       if (RealPresent)
231
+           hlog("Hooked IDirect3DDevice9::Present");
232
+       hlog("Hooked D3D9");
233
+   } else {
234
+       RealPresentSwap = nullptr;
235
+       RealPresentEx = nullptr;
236
+       RealPresent = nullptr;
237
+       hlog("Failed to attach Detours hook: %ld", error);
238
    }
239
 
240
-   hlog("Hooked D3D9");
241
-   return true;
242
+   return success;
243
 }
244
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp Changed
179
 
1
@@ -5,7 +5,8 @@
2
 #include <inttypes.h>
3
 
4
 #include "graphics-hook.h"
5
-#include "../funchook.h"
6
+
7
+#include <detours.h>
8
 
9
 #if COMPILE_D3D12_HOOK
10
 #include <d3d12.h>
11
@@ -19,10 +20,10 @@
12
 typedef HRESULT(STDMETHODCALLTYPE *present1_t)(IDXGISwapChain1 *, UINT, UINT,
13
                           const DXGI_PRESENT_PARAMETERS *);
14
 
15
-static struct func_hook release;
16
-static struct func_hook resize_buffers;
17
-static struct func_hook present;
18
-static struct func_hook present1;
19
+release_t RealRelease = nullptr;
20
+resize_buffers_t RealResizeBuffers = nullptr;
21
+present_t RealPresent = nullptr;
22
+present1_t RealPresent1 = nullptr;
23
 
24
 thread_local bool dxgi_presenting = false;
25
 struct ID3D12CommandQueue *dxgi_possible_swap_queues[8]{};
26
@@ -31,7 +32,7 @@
27
 
28
 struct dxgi_swap_data {
29
    IDXGISwapChain *swap;
30
-   void (*capture)(void *, void *, bool);
31
+   void (*capture)(void *, void *);
32
    void (*free)(void);
33
 };
34
 
35
@@ -112,10 +113,7 @@
36
 
37
 static ULONG STDMETHODCALLTYPE hook_release(IUnknown *unknown)
38
 {
39
-   unhook(&release);
40
-   release_t call = (release_t)release.call_addr;
41
-   ULONG refs = call(unknown);
42
-   rehook(&release);
43
+   const ULONG refs = RealRelease(unknown);
44
 
45
    hlog_verbose("Release callback: Refs=%lu", refs);
46
    if (unknown == data.swap && refs == 0) {
47
@@ -155,11 +153,8 @@
48
        data.free();
49
    data.free = nullptr;
50
 
51
-   unhook(&resize_buffers);
52
-   resize_buffers_t call = (resize_buffers_t)resize_buffers.call_addr;
53
-   const HRESULT hr =
54
-       call(swap, buffer_count, width, height, format, flags);
55
-   rehook(&resize_buffers);
56
+   const HRESULT hr = RealResizeBuffers(swap, buffer_count, width, height,
57
+                        format, flags);
58
 
59
    resize_buffers_called = true;
60
 
61
@@ -223,16 +218,13 @@
62
        IUnknown *backbuffer = get_dxgi_backbuffer(swap);
63
 
64
        if (backbuffer) {
65
-           data.capture(swap, backbuffer, capture_overlay);
66
+           data.capture(swap, backbuffer);
67
            backbuffer->Release();
68
        }
69
    }
70
 
71
    dxgi_presenting = true;
72
-   unhook(&present);
73
-   present_t call = (present_t)present.call_addr;
74
-   const HRESULT hr = call(swap, sync_interval, flags);
75
-   rehook(&present);
76
+   const HRESULT hr = RealPresent(swap, sync_interval, flags);
77
    dxgi_presenting = false;
78
    dxgi_present_attempted = true;
79
 
80
@@ -250,7 +242,7 @@
81
            IUnknown *backbuffer = get_dxgi_backbuffer(swap);
82
 
83
            if (backbuffer) {
84
-               data.capture(swap, backbuffer, capture_overlay);
85
+               data.capture(swap, backbuffer);
86
                backbuffer->Release();
87
            }
88
        }
89
@@ -285,16 +277,13 @@
90
        if (backbuffer) {
91
            DXGI_SWAP_CHAIN_DESC1 desc;
92
            swap->GetDesc1(&desc);
93
-           data.capture(swap, backbuffer, capture_overlay);
94
+           data.capture(swap, backbuffer);
95
            backbuffer->Release();
96
        }
97
    }
98
 
99
    dxgi_presenting = true;
100
-   unhook(&present1);
101
-   present1_t call = (present1_t)present1.call_addr;
102
-   const HRESULT hr = call(swap, sync_interval, flags, params);
103
-   rehook(&present1);
104
+   const HRESULT hr = RealPresent1(swap, sync_interval, flags, params);
105
    dxgi_presenting = false;
106
    dxgi_present_attempted = true;
107
 
108
@@ -305,7 +294,7 @@
109
            IUnknown *backbuffer = get_dxgi_backbuffer(swap);
110
 
111
            if (backbuffer) {
112
-               data.capture(swap, backbuffer, capture_overlay);
113
+               data.capture(swap, backbuffer);
114
                backbuffer->Release();
115
            }
116
        }
117
@@ -337,30 +326,41 @@
118
        release_addr = get_offset_addr(
119
            dxgi_module, global_hook_info->offsets.dxgi2.release);
120
 
121
-   hook_init(&present, present_addr, (void *)hook_present,
122
-         "IDXGISwapChain::Present");
123
-   hlog("Hooked IDXGISwapChain::Present");
124
-   hook_init(&resize_buffers, resize_addr, (void *)hook_resize_buffers,
125
-         "IDXGISwapChain::ResizeBuffers");
126
-   hlog("Hooked IDXGISwapChain::ResizeBuffers");
127
+   DetourTransactionBegin();
128
+
129
+   RealPresent = (present_t)present_addr;
130
+   DetourAttach(&(PVOID &)RealPresent, hook_present);
131
+
132
+   RealResizeBuffers = (resize_buffers_t)resize_addr;
133
+   DetourAttach(&(PVOID &)RealResizeBuffers, hook_resize_buffers);
134
+
135
    if (present1_addr) {
136
-       hook_init(&present1, present1_addr, (void *)hook_present1,
137
-             "IDXGISwapChain1::Present1");
138
-       hlog("Hooked IDXGISwapChain::Present1");
139
+       RealPresent1 = (present1_t)present1_addr;
140
+       DetourAttach(&(PVOID &)RealPresent1, hook_present1);
141
    }
142
+
143
    if (release_addr) {
144
-       hook_init(&release, release_addr, (void *)hook_release,
145
-             "IDXGISwapChain::Release");
146
-       hlog("Hooked IDXGISwapChain::Release");
147
+       RealRelease = (release_t)release_addr;
148
+       DetourAttach(&(PVOID &)RealRelease, hook_release);
149
    }
150
 
151
-   rehook(&resize_buffers);
152
-   rehook(&present);
153
-   if (present1_addr)
154
-       rehook(&present1);
155
-   if (release_addr)
156
-       rehook(&release);
157
+   const LONG error = DetourTransactionCommit();
158
+   const bool success = error == NO_ERROR;
159
+   if (success) {
160
+       hlog("Hooked IDXGISwapChain::Present");
161
+       hlog("Hooked IDXGISwapChain::ResizeBuffers");
162
+       if (RealPresent1)
163
+           hlog("Hooked IDXGISwapChain1::Present1");
164
+       if (RealRelease)
165
+           hlog("Hooked IDXGISwapChain::Release");
166
+       hlog("Hooked DXGI");
167
+   } else {
168
+       RealPresent = nullptr;
169
+       RealResizeBuffers = nullptr;
170
+       RealPresent1 = nullptr;
171
+       RealRelease = nullptr;
172
+       hlog("Failed to attach Detours hook: %ld", error);
173
+   }
174
 
175
-   hlog("Hooked DXGI");
176
-   return true;
177
+   return success;
178
 }
179
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c Changed
160
 
1
@@ -11,7 +11,8 @@
2
 
3
 #include "gl-decs.h"
4
 #include "graphics-hook.h"
5
-#include "../funchook.h"
6
+
7
+#include <detours.h>
8
 
9
 #define DUMMY_WINDOW_CLASS_NAME L"graphics_hook_gl_dummy_window"
10
 
11
@@ -24,10 +25,15 @@
12
 
13
 /* clang-format on */
14
 
15
-static struct func_hook swap_buffers;
16
-static struct func_hook wgl_swap_layer_buffers;
17
-static struct func_hook wgl_swap_buffers;
18
-static struct func_hook wgl_delete_context;
19
+typedef BOOL(WINAPI *PFN_SwapBuffers)(HDC);
20
+typedef BOOL(WINAPI *PFN_WglSwapLayerBuffers)(HDC, UINT);
21
+typedef BOOL(WINAPI *PFN_WglSwapBuffers)(HDC);
22
+typedef BOOL(WINAPI *PFN_WglDeleteContext)(HGLRC);
23
+
24
+PFN_SwapBuffers RealSwapBuffers = NULL;
25
+PFN_WglSwapLayerBuffers RealWglSwapLayerBuffers = NULL;
26
+PFN_WglSwapBuffers RealWglSwapBuffers = NULL;
27
+PFN_WglDeleteContext RealWglDeleteContext = NULL;
28
 
29
 static bool darkest_dungeon_fix = false;
30
 static bool functions_initialized = false;
31
@@ -780,14 +786,9 @@
32
 
33
 static BOOL WINAPI hook_swap_buffers(HDC hdc)
34
 {
35
-   BOOL ret;
36
-
37
    gl_swap_begin(hdc);
38
 
39
-   unhook(&swap_buffers);
40
-   BOOL(WINAPI * call)(HDC) = swap_buffers.call_addr;
41
-   ret = call(hdc);
42
-   rehook(&swap_buffers);
43
+   const BOOL ret = RealSwapBuffers(hdc);
44
 
45
    gl_swap_end(hdc);
46
 
47
@@ -796,14 +797,9 @@
48
 
49
 static BOOL WINAPI hook_wgl_swap_buffers(HDC hdc)
50
 {
51
-   BOOL ret;
52
-
53
    gl_swap_begin(hdc);
54
 
55
-   unhook(&wgl_swap_buffers);
56
-   BOOL(WINAPI * call)(HDC) = wgl_swap_buffers.call_addr;
57
-   ret = call(hdc);
58
-   rehook(&wgl_swap_buffers);
59
+   const BOOL ret = RealWglSwapBuffers(hdc);
60
 
61
    gl_swap_end(hdc);
62
 
63
@@ -812,14 +808,9 @@
64
 
65
 static BOOL WINAPI hook_wgl_swap_layer_buffers(HDC hdc, UINT planes)
66
 {
67
-   BOOL ret;
68
-
69
    gl_swap_begin(hdc);
70
 
71
-   unhook(&wgl_swap_layer_buffers);
72
-   BOOL(WINAPI * call)(HDC, UINT) = wgl_swap_layer_buffers.call_addr;
73
-   ret = call(hdc, planes);
74
-   rehook(&wgl_swap_layer_buffers);
75
+   const BOOL ret = RealWglSwapLayerBuffers(hdc, planes);
76
 
77
    gl_swap_end(hdc);
78
 
79
@@ -828,8 +819,6 @@
80
 
81
 static BOOL WINAPI hook_wgl_delete_context(HGLRC hrc)
82
 {
83
-   BOOL ret;
84
-
85
    if (capture_active() && functions_initialized) {
86
        HDC last_hdc = jimglGetCurrentDC();
87
        HGLRC last_hrc = jimglGetCurrentContext();
88
@@ -839,12 +828,7 @@
89
        jimglMakeCurrent(last_hdc, last_hrc);
90
    }
91
 
92
-   unhook(&wgl_delete_context);
93
-   BOOL(WINAPI * call)(HGLRC) = wgl_delete_context.call_addr;
94
-   ret = call(hrc);
95
-   rehook(&wgl_delete_context);
96
-
97
-   return ret;
98
+   return RealWglDeleteContext(hrc);
99
 }
100
 
101
 static bool gl_register_window(void)
102
@@ -892,24 +876,44 @@
103
    wgl_slb_proc = base_get_proc("wglSwapLayerBuffers");
104
    wgl_sb_proc = base_get_proc("wglSwapBuffers");
105
 
106
-   hook_init(&swap_buffers, SwapBuffers, hook_swap_buffers, "SwapBuffers");
107
+   DetourTransactionBegin();
108
+
109
+   RealSwapBuffers = SwapBuffers;
110
+   DetourAttach((PVOID *)&RealSwapBuffers, hook_swap_buffers);
111
    if (wgl_dc_proc) {
112
-       hook_init(&wgl_delete_context, wgl_dc_proc,
113
-             hook_wgl_delete_context, "wglDeleteContext");
114
-       rehook(&wgl_delete_context);
115
+       RealWglDeleteContext = (PFN_WglDeleteContext)wgl_dc_proc;
116
+       DetourAttach((PVOID *)&RealWglDeleteContext,
117
+                hook_wgl_delete_context);
118
    }
119
    if (wgl_slb_proc) {
120
-       hook_init(&wgl_swap_layer_buffers, wgl_slb_proc,
121
-             hook_wgl_swap_layer_buffers, "wglSwapLayerBuffers");
122
-       rehook(&wgl_swap_layer_buffers);
123
+       RealWglSwapLayerBuffers = (PFN_WglSwapLayerBuffers)wgl_slb_proc;
124
+       DetourAttach((PVOID *)&RealWglSwapLayerBuffers,
125
+                hook_wgl_swap_layer_buffers);
126
    }
127
    if (wgl_sb_proc) {
128
-       hook_init(&wgl_swap_buffers, wgl_sb_proc, hook_wgl_swap_buffers,
129
-             "wglSwapBuffers");
130
-       rehook(&wgl_swap_buffers);
131
+       RealWglSwapBuffers = (PFN_WglSwapBuffers)wgl_sb_proc;
132
+       DetourAttach((PVOID *)&RealWglSwapBuffers,
133
+                hook_wgl_swap_buffers);
134
+   }
135
+
136
+   const LONG error = DetourTransactionCommit();
137
+   const bool success = error == NO_ERROR;
138
+   if (success) {
139
+       hlog("Hooked SwapBuffers");
140
+       if (RealWglDeleteContext)
141
+           hlog("Hooked wglDeleteContext");
142
+       if (RealWglSwapLayerBuffers)
143
+           hlog("Hooked wglSwapLayerBuffers");
144
+       if (RealWglSwapBuffers)
145
+           hlog("Hooked wglSwapBuffers");
146
+       hlog("Hooked GL");
147
+   } else {
148
+       RealSwapBuffers = NULL;
149
+       RealWglDeleteContext = NULL;
150
+       RealWglSwapLayerBuffers = NULL;
151
+       RealWglSwapBuffers = NULL;
152
+       hlog("Failed to attach Detours hook: %ld", error);
153
    }
154
 
155
-   rehook(&swap_buffers);
156
-
157
-   return true;
158
+   return success;
159
 }
160
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c Changed
9
 
1
@@ -4,7 +4,6 @@
2
 #include "graphics-hook.h"
3
 #include "../graphics-hook-ver.h"
4
 #include "../obfuscate.h"
5
-#include "../funchook.h"
6
 
7
 #define DEBUG_OUTPUT
8
 
9
obs-studio-27.0.1.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h -> obs-studio-27.1.3.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h Changed
18
 
1
@@ -57,13 +57,13 @@
2
 extern bool hook_vulkan(void);
3
 #endif
4
 
5
-extern void d3d10_capture(void *swap, void *backbuffer, bool capture_overlay);
6
+extern void d3d10_capture(void *swap, void *backbuffer);
7
 extern void d3d10_free(void);
8
-extern void d3d11_capture(void *swap, void *backbuffer, bool capture_overlay);
9
+extern void d3d11_capture(void *swap, void *backbuffer);
10
 extern void d3d11_free(void);
11
 
12
 #if COMPILE_D3D12_HOOK
13
-extern void d3d12_capture(void *swap, void *backbuffer, bool capture_overlay);
14
+extern void d3d12_capture(void *swap, void *backbuffer);
15
 extern void d3d12_free(void);
16
 #endif
17
 
18
obs-studio-27.0.1.tar.xz/plugins/win-capture/monitor-capture.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/monitor-capture.c Changed
10
 
1
@@ -152,7 +152,7 @@
2
 {
3
    struct monitor_capture *capture = data;
4
    dc_capture_render(&capture->data,
5
-             obs_get_base_effect(OBS_EFFECT_OPAQUE));
6
+             obs_source_get_texcoords_centered(capture->source));
7
 
8
    UNUSED_PARAMETER(effect);
9
 }
10
obs-studio-27.1.3.tar.xz/plugins/win-capture/nt-stuff.c Added
244
 
1
@@ -0,0 +1,242 @@
2
+#include <windows.h>
3
+#include <winternl.h>
4
+#include <stdbool.h>
5
+
6
+#define THREAD_STATE_WAITING 5
7
+#define THREAD_WAIT_REASON_SUSPENDED 5
8
+
9
+typedef struct _OBS_SYSTEM_PROCESS_INFORMATION2 {
10
+   ULONG NextEntryOffset;
11
+   ULONG ThreadCount;
12
+   BYTE Reserved1[48];
13
+   PVOID Reserved2[3];
14
+   HANDLE UniqueProcessId;
15
+   PVOID Reserved3;
16
+   ULONG HandleCount;
17
+   BYTE Reserved4[4];
18
+   PVOID Reserved5[11];
19
+   SIZE_T PeakPagefileUsage;
20
+   SIZE_T PrivatePageCount;
21
+   LARGE_INTEGER Reserved6[6];
22
+} OBS_SYSTEM_PROCESS_INFORMATION2;
23
+
24
+typedef struct _OBS_SYSTEM_THREAD_INFORMATION {
25
+   FILETIME KernelTime;
26
+   FILETIME UserTime;
27
+   FILETIME CreateTime;
28
+   DWORD WaitTime;
29
+   PVOID Address;
30
+   HANDLE UniqueProcessId;
31
+   HANDLE UniqueThreadId;
32
+   DWORD Priority;
33
+   DWORD BasePriority;
34
+   DWORD ContextSwitches;
35
+   DWORD ThreadState;
36
+   DWORD WaitReason;
37
+   DWORD Reserved1;
38
+} OBS_SYSTEM_THREAD_INFORMATION;
39
+
40
+#ifndef NT_SUCCESS
41
+#define NT_SUCCESS(status) ((NTSTATUS)(status) >= 0)
42
+#endif
43
+
44
+#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
45
+
46
+#define init_named_attribs(o, name)                   \
47
+   do {                                          \
48
+       (o)->Length = sizeof(*(o));           \
49
+       (o)->ObjectName = name;               \
50
+       (o)->RootDirectory = NULL;            \
51
+       (o)->Attributes = 0;                  \
52
+       (o)->SecurityDescriptor = NULL;       \
53
+       (o)->SecurityQualityOfService = NULL; \
54
+   } while (false)
55
+
56
+typedef void(WINAPI *RTLINITUNICODESTRINGFUNC)(PCUNICODE_STRING pstr,
57
+                          const wchar_t *lpstrName);
58
+typedef NTSTATUS(WINAPI *NTOPENFUNC)(PHANDLE phandle, ACCESS_MASK access,
59
+                    POBJECT_ATTRIBUTES objattr);
60
+typedef NTSTATUS(WINAPI *NTCREATEMUTANT)(PHANDLE phandle, ACCESS_MASK access,
61
+                    POBJECT_ATTRIBUTES objattr,
62
+                    BOOLEAN isowner);
63
+typedef ULONG(WINAPI *RTLNTSTATUSTODOSERRORFUNC)(NTSTATUS status);
64
+typedef NTSTATUS(WINAPI *NTQUERYSYSTEMINFORMATIONFUNC)(SYSTEM_INFORMATION_CLASS,
65
+                              PVOID, ULONG, PULONG);
66
+
67
+FARPROC get_nt_func(const char *name)
68
+{
69
+   static bool initialized = false;
70
+   static HANDLE ntdll = NULL;
71
+   if (!initialized) {
72
+       ntdll = GetModuleHandleW(L"ntdll");
73
+       initialized = true;
74
+   }
75
+
76
+   return GetProcAddress(ntdll, name);
77
+}
78
+
79
+void nt_set_last_error(NTSTATUS status)
80
+{
81
+   static bool initialized = false;
82
+   static RTLNTSTATUSTODOSERRORFUNC func = NULL;
83
+
84
+   if (!initialized) {
85
+       func = (RTLNTSTATUSTODOSERRORFUNC)get_nt_func(
86
+           "RtlNtStatusToDosError");
87
+       initialized = true;
88
+   }
89
+
90
+   if (func)
91
+       SetLastError(func(status));
92
+}
93
+
94
+void rtl_init_str(UNICODE_STRING *unistr, const wchar_t *str)
95
+{
96
+   static bool initialized = false;
97
+   static RTLINITUNICODESTRINGFUNC func = NULL;
98
+
99
+   if (!initialized) {
100
+       func = (RTLINITUNICODESTRINGFUNC)get_nt_func(
101
+           "RtlInitUnicodeString");
102
+       initialized = true;
103
+   }
104
+
105
+   if (func)
106
+       func(unistr, str);
107
+}
108
+
109
+#define MAKE_NT_OPEN_FUNC(func_name, nt_name, access)             \
110
+   HANDLE func_name(const wchar_t *name)                     \
111
+   {                                                         \
112
+       static bool initialized = false;                  \
113
+       static NTOPENFUNC open = NULL;                    \
114
+       HANDLE handle;                                    \
115
+       NTSTATUS status;                                  \
116
+       UNICODE_STRING unistr;                            \
117
+       OBJECT_ATTRIBUTES attr;                           \
118
+                                                                  \
119
+       if (!initialized) {                               \
120
+           open = (NTOPENFUNC)get_nt_func(#nt_name); \
121
+           initialized = true;                       \
122
+       }                                                 \
123
+                                                                  \
124
+       if (!open)                                        \
125
+           return NULL;                              \
126
+                                                                  \
127
+       rtl_init_str(&unistr, name);                      \
128
+       init_named_attribs(&attr, &unistr);               \
129
+                                                                  \
130
+       status = open(&handle, access, &attr);            \
131
+       if (NT_SUCCESS(status))                           \
132
+           return handle;                            \
133
+       nt_set_last_error(status);                        \
134
+       return NULL;                                      \
135
+   }
136
+
137
+MAKE_NT_OPEN_FUNC(nt_open_mutex, NtOpenMutant, SYNCHRONIZE)
138
+MAKE_NT_OPEN_FUNC(nt_open_event, NtOpenEvent, EVENT_MODIFY_STATE | SYNCHRONIZE)
139
+MAKE_NT_OPEN_FUNC(nt_open_map, NtOpenSection, FILE_MAP_READ | FILE_MAP_WRITE)
140
+
141
+NTSTATUS nt_query_information(SYSTEM_INFORMATION_CLASS info_class, PVOID info,
142
+                 ULONG info_len, PULONG ret_len)
143
+{
144
+   static bool initialized = false;
145
+   static NTQUERYSYSTEMINFORMATIONFUNC func = NULL;
146
+
147
+   if (!initialized) {
148
+       func = (NTQUERYSYSTEMINFORMATIONFUNC)get_nt_func(
149
+           "NtQuerySystemInformation");
150
+       initialized = true;
151
+   }
152
+
153
+   if (func)
154
+       return func(info_class, info, info_len, ret_len);
155
+   return (NTSTATUS)-1;
156
+}
157
+
158
+bool thread_is_suspended(DWORD process_id, DWORD thread_id)
159
+{
160
+   ULONG size = 524288;
161
+   bool suspended = false;
162
+   void *data = malloc(size);
163
+   if (!data)
164
+       return false;
165
+
166
+   for (;;) {
167
+       NTSTATUS stat = nt_query_information(SystemProcessInformation,
168
+                            data, size, &size);
169
+       if (NT_SUCCESS(stat))
170
+           break;
171
+
172
+       if (stat != STATUS_INFO_LENGTH_MISMATCH) {
173
+           goto fail;
174
+       }
175
+
176
+       free(data);
177
+       size += 524288;
178
+       data = malloc(size);
179
+       if (!data)
180
+           return false;
181
+   }
182
+
183
+   OBS_SYSTEM_PROCESS_INFORMATION2 *spi = data;
184
+
185
+   for (;;) {
186
+       if (spi->UniqueProcessId == (HANDLE)(DWORD_PTR)process_id) {
187
+           break;
188
+       }
189
+
190
+       ULONG offset = spi->NextEntryOffset;
191
+       if (!offset)
192
+           goto fail;
193
+
194
+       spi = (OBS_SYSTEM_PROCESS_INFORMATION2 *)((BYTE *)spi + offset);
195
+   }
196
+
197
+   OBS_SYSTEM_THREAD_INFORMATION *sti;
198
+   OBS_SYSTEM_THREAD_INFORMATION *info = NULL;
199
+   sti = (OBS_SYSTEM_THREAD_INFORMATION *)((BYTE *)spi + sizeof(*spi));
200
+
201
+   for (ULONG i = 0; i < spi->ThreadCount; i++) {
202
+       if (sti[i].UniqueThreadId == (HANDLE)(DWORD_PTR)thread_id) {
203
+           info = &sti[i];
204
+           break;
205
+       }
206
+   }
207
+
208
+   if (info) {
209
+       suspended = info->ThreadState == THREAD_STATE_WAITING &&
210
+               info->WaitReason == THREAD_WAIT_REASON_SUSPENDED;
211
+   }
212
+
213
+fail:
214
+   free(data);
215
+   return suspended;
216
+}
217
+
218
+HANDLE nt_create_mutex(const wchar_t *name)
219
+{
220
+   static bool initialized = false;
221
+   static NTCREATEMUTANT create = NULL;
222
+   HANDLE handle;
223
+   NTSTATUS status;
224
+   UNICODE_STRING unistr;
225
+   OBJECT_ATTRIBUTES attr;
226
+
227
+   if (!initialized) {
228
+       create = (NTCREATEMUTANT)get_nt_func("NtCreateMutant");
229
+       initialized = true;
230
+   }
231
+
232
+   if (!create)
233
+       return NULL;
234
+
235
+   rtl_init_str(&unistr, name);
236
+   init_named_attribs(&attr, &unistr);
237
+
238
+   status = create(&handle, SYNCHRONIZE, &attr, FALSE);
239
+   if (NT_SUCCESS(status))
240
+       return handle;
241
+   nt_set_last_error(status);
242
+   return NULL;
243
+}
244
obs-studio-27.0.1.tar.xz/plugins/win-capture/nt-stuff.h -> obs-studio-27.1.3.tar.xz/plugins/win-capture/nt-stuff.h Changed
245
 
1
@@ -1,238 +1,7 @@
2
 #pragma once
3
 
4
-#include <winternl.h>
5
-
6
-#define THREAD_STATE_WAITING 5
7
-#define THREAD_WAIT_REASON_SUSPENDED 5
8
-
9
-typedef struct _OBS_SYSTEM_PROCESS_INFORMATION2 {
10
-   ULONG NextEntryOffset;
11
-   ULONG ThreadCount;
12
-   BYTE Reserved1[48];
13
-   PVOID Reserved2[3];
14
-   HANDLE UniqueProcessId;
15
-   PVOID Reserved3;
16
-   ULONG HandleCount;
17
-   BYTE Reserved4[4];
18
-   PVOID Reserved5[11];
19
-   SIZE_T PeakPagefileUsage;
20
-   SIZE_T PrivatePageCount;
21
-   LARGE_INTEGER Reserved6[6];
22
-} OBS_SYSTEM_PROCESS_INFORMATION2;
23
-
24
-typedef struct _OBS_SYSTEM_THREAD_INFORMATION {
25
-   FILETIME KernelTime;
26
-   FILETIME UserTime;
27
-   FILETIME CreateTime;
28
-   DWORD WaitTime;
29
-   PVOID Address;
30
-   HANDLE UniqueProcessId;
31
-   HANDLE UniqueThreadId;
32
-   DWORD Priority;
33
-   DWORD BasePriority;
34
-   DWORD ContextSwitches;
35
-   DWORD ThreadState;
36
-   DWORD WaitReason;
37
-   DWORD Reserved1;
38
-} OBS_SYSTEM_THREAD_INFORMATION;
39
-
40
-#ifndef NT_SUCCESS
41
-#define NT_SUCCESS(status) ((NTSTATUS)(status) >= 0)
42
-#endif
43
-
44
-#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
45
-
46
-#define init_named_attribs(o, name)                   \
47
-   do {                                          \
48
-       (o)->Length = sizeof(*(o));           \
49
-       (o)->ObjectName = name;               \
50
-       (o)->RootDirectory = NULL;            \
51
-       (o)->Attributes = 0;                  \
52
-       (o)->SecurityDescriptor = NULL;       \
53
-       (o)->SecurityQualityOfService = NULL; \
54
-   } while (false)
55
-
56
-typedef void(WINAPI *RTLINITUNICODESTRINGFUNC)(PCUNICODE_STRING pstr,
57
-                          const wchar_t *lpstrName);
58
-typedef NTSTATUS(WINAPI *NTOPENFUNC)(PHANDLE phandle, ACCESS_MASK access,
59
-                    POBJECT_ATTRIBUTES objattr);
60
-typedef NTSTATUS(WINAPI *NTCREATEMUTANT)(PHANDLE phandle, ACCESS_MASK access,
61
-                    POBJECT_ATTRIBUTES objattr,
62
-                    BOOLEAN isowner);
63
-typedef ULONG(WINAPI *RTLNTSTATUSTODOSERRORFUNC)(NTSTATUS status);
64
-typedef NTSTATUS(WINAPI *NTQUERYSYSTEMINFORMATIONFUNC)(SYSTEM_INFORMATION_CLASS,
65
-                              PVOID, ULONG, PULONG);
66
-
67
-static FARPROC get_nt_func(const char *name)
68
-{
69
-   static bool initialized = false;
70
-   static HANDLE ntdll = NULL;
71
-   if (!initialized) {
72
-       ntdll = GetModuleHandleW(L"ntdll");
73
-       initialized = true;
74
-   }
75
-
76
-   return GetProcAddress(ntdll, name);
77
-}
78
-
79
-static void nt_set_last_error(NTSTATUS status)
80
-{
81
-   static bool initialized = false;
82
-   static RTLNTSTATUSTODOSERRORFUNC func = NULL;
83
-
84
-   if (!initialized) {
85
-       func = (RTLNTSTATUSTODOSERRORFUNC)get_nt_func(
86
-           "RtlNtStatusToDosError");
87
-       initialized = true;
88
-   }
89
-
90
-   if (func)
91
-       SetLastError(func(status));
92
-}
93
-
94
-static void rtl_init_str(UNICODE_STRING *unistr, const wchar_t *str)
95
-{
96
-   static bool initialized = false;
97
-   static RTLINITUNICODESTRINGFUNC func = NULL;
98
-
99
-   if (!initialized) {
100
-       func = (RTLINITUNICODESTRINGFUNC)get_nt_func(
101
-           "RtlInitUnicodeString");
102
-       initialized = true;
103
-   }
104
-
105
-   if (func)
106
-       func(unistr, str);
107
-}
108
-
109
-static NTSTATUS nt_query_information(SYSTEM_INFORMATION_CLASS info_class,
110
-                    PVOID info, ULONG info_len, PULONG ret_len)
111
-{
112
-   static bool initialized = false;
113
-   static NTQUERYSYSTEMINFORMATIONFUNC func = NULL;
114
-
115
-   if (!initialized) {
116
-       func = (NTQUERYSYSTEMINFORMATIONFUNC)get_nt_func(
117
-           "NtQuerySystemInformation");
118
-       initialized = true;
119
-   }
120
-
121
-   if (func)
122
-       return func(info_class, info, info_len, ret_len);
123
-   return (NTSTATUS)-1;
124
-}
125
-
126
-static bool thread_is_suspended(DWORD process_id, DWORD thread_id)
127
-{
128
-   ULONG size = 4096;
129
-   bool suspended = false;
130
-   void *data = malloc(size);
131
-
132
-   for (;;) {
133
-       NTSTATUS stat = nt_query_information(SystemProcessInformation,
134
-                            data, size, &size);
135
-       if (NT_SUCCESS(stat))
136
-           break;
137
-
138
-       if (stat != STATUS_INFO_LENGTH_MISMATCH) {
139
-           goto fail;
140
-       }
141
-
142
-       free(data);
143
-       size += 1024;
144
-       data = malloc(size);
145
-   }
146
-
147
-   OBS_SYSTEM_PROCESS_INFORMATION2 *spi = data;
148
-
149
-   for (;;) {
150
-       if (spi->UniqueProcessId == (HANDLE)(DWORD_PTR)process_id) {
151
-           break;
152
-       }
153
-
154
-       ULONG offset = spi->NextEntryOffset;
155
-       if (!offset)
156
-           goto fail;
157
-
158
-       spi = (OBS_SYSTEM_PROCESS_INFORMATION2 *)((BYTE *)spi + offset);
159
-   }
160
-
161
-   OBS_SYSTEM_THREAD_INFORMATION *sti;
162
-   OBS_SYSTEM_THREAD_INFORMATION *info = NULL;
163
-   sti = (OBS_SYSTEM_THREAD_INFORMATION *)((BYTE *)spi + sizeof(*spi));
164
-
165
-   for (ULONG i = 0; i < spi->ThreadCount; i++) {
166
-       if (sti[i].UniqueThreadId == (HANDLE)(DWORD_PTR)thread_id) {
167
-           info = &sti[i];
168
-           break;
169
-       }
170
-   }
171
-
172
-   if (info) {
173
-       suspended = info->ThreadState == THREAD_STATE_WAITING &&
174
-               info->WaitReason == THREAD_WAIT_REASON_SUSPENDED;
175
-   }
176
-
177
-fail:
178
-   free(data);
179
-   return suspended;
180
-}
181
-
182
-#define MAKE_NT_OPEN_FUNC(func_name, nt_name, access)             \
183
-   static HANDLE func_name(const wchar_t *name)              \
184
-   {                                                         \
185
-       static bool initialized = false;                  \
186
-       static NTOPENFUNC open = NULL;                    \
187
-       HANDLE handle;                                    \
188
-       NTSTATUS status;                                  \
189
-       UNICODE_STRING unistr;                            \
190
-       OBJECT_ATTRIBUTES attr;                           \
191
-                                                                  \
192
-       if (!initialized) {                               \
193
-           open = (NTOPENFUNC)get_nt_func(#nt_name); \
194
-           initialized = true;                       \
195
-       }                                                 \
196
-                                                                  \
197
-       if (!open)                                        \
198
-           return NULL;                              \
199
-                                                                  \
200
-       rtl_init_str(&unistr, name);                      \
201
-       init_named_attribs(&attr, &unistr);               \
202
-                                                                  \
203
-       status = open(&handle, access, &attr);            \
204
-       if (NT_SUCCESS(status))                           \
205
-           return handle;                            \
206
-       nt_set_last_error(status);                        \
207
-       return NULL;                                      \
208
-   }
209
-
210
-MAKE_NT_OPEN_FUNC(nt_open_mutex, NtOpenMutant, SYNCHRONIZE)
211
-MAKE_NT_OPEN_FUNC(nt_open_event, NtOpenEvent, EVENT_MODIFY_STATE | SYNCHRONIZE)
212
-MAKE_NT_OPEN_FUNC(nt_open_map, NtOpenSection, FILE_MAP_READ | FILE_MAP_WRITE)
213
-
214
-static HANDLE nt_create_mutex(const wchar_t *name)
215
-{
216
-   static bool initialized = false;
217
-   static NTCREATEMUTANT create = NULL;
218
-   HANDLE handle;
219
-   NTSTATUS status;
220
-   UNICODE_STRING unistr;
221
-   OBJECT_ATTRIBUTES attr;
222
-
223
-   if (!initialized) {
224
-       create = (NTCREATEMUTANT)get_nt_func("NtCreateMutant");
225
-       initialized = true;
226
-   }
227
-
228
-   if (!create)
229
-       return NULL;
230
-
231
-   rtl_init_str(&unistr, name);
232
-   init_named_attribs(&attr, &unistr);
233
-
234
-   status = create(&handle, SYNCHRONIZE, &attr, FALSE);
235
-   if (NT_SUCCESS(status))
236
-       return handle;
237
-   nt_set_last_error(status);
238
-   return NULL;
239
-}
240
+bool thread_is_suspended(DWORD process_id, DWORD thread_id);
241
+HANDLE nt_create_mutex(const wchar_t *name);
242
+HANDLE nt_open_mutex(const wchar_t *name);
243
+HANDLE nt_open_event(const wchar_t *name);
244
+HANDLE nt_open_map(const wchar_t *name);
245
obs-studio-27.0.1.tar.xz/plugins/win-capture/plugin-main.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/plugin-main.c Changed
41
 
1
@@ -68,12 +68,18 @@
2
 
3
 void init_hook_files(void);
4
 
5
+bool graphics_uses_d3d11 = false;
6
+bool wgc_supported = false;
7
+
8
 bool obs_module_load(void)
9
 {
10
    struct win_version_info ver;
11
    bool win8_or_above = false;
12
    char *config_dir;
13
 
14
+   struct win_version_info win1903 = {
15
+       .major = 10, .minor = 0, .build = 18362, .revis = 0};
16
+
17
    config_dir = obs_module_config_path(NULL);
18
    if (config_dir) {
19
        os_mkdirs(config_dir);
20
@@ -85,14 +91,17 @@
21
    win8_or_above = ver.major > 6 || (ver.major == 6 && ver.minor >= 2);
22
 
23
    obs_enter_graphics();
24
+   graphics_uses_d3d11 = gs_get_device_type() == GS_DEVICE_DIRECT3D_11;
25
+   obs_leave_graphics();
26
 
27
-   if (win8_or_above && gs_get_device_type() == GS_DEVICE_DIRECT3D_11)
28
+   if (graphics_uses_d3d11)
29
+       wgc_supported = win_version_compare(&ver, &win1903) >= 0;
30
+
31
+   if (win8_or_above && graphics_uses_d3d11)
32
        obs_register_source(&duplicator_capture_info);
33
    else
34
        obs_register_source(&monitor_capture_info);
35
 
36
-   obs_leave_graphics();
37
-
38
    obs_register_source(&window_capture_info);
39
 
40
    char *config_path = obs_module_config_path(NULL);
41
obs-studio-27.0.1.tar.xz/plugins/win-capture/window-capture.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/window-capture.c Changed
124
 
1
@@ -37,8 +37,7 @@
2
 typedef BOOL (*PFN_winrt_capture_active)(const struct winrt_capture *capture);
3
 typedef BOOL (*PFN_winrt_capture_show_cursor)(struct winrt_capture *capture,
4
                          BOOL visible);
5
-typedef void (*PFN_winrt_capture_render)(struct winrt_capture *capture,
6
-                    gs_effect_t *effect);
7
+typedef void (*PFN_winrt_capture_render)(struct winrt_capture *capture);
8
 typedef uint32_t (*PFN_winrt_capture_width)(const struct winrt_capture *capture);
9
 typedef uint32_t (*PFN_winrt_capture_height)(
10
    const struct winrt_capture *capture);
11
@@ -79,7 +78,6 @@
12
 
13
    struct dc_capture capture;
14
 
15
-   bool wgc_supported;
16
    bool previously_failed;
17
    void *winrt_module;
18
    struct winrt_exports exports;
19
@@ -174,6 +172,8 @@
20
    }
21
 }
22
 
23
+extern bool wgc_supported;
24
+
25
 static void update_settings(struct window_capture *wc, obs_data_t *s)
26
 {
27
    pthread_mutex_lock(&wc->update_mutex);
28
@@ -188,7 +188,7 @@
29
 
30
    build_window_strings(window, &wc->class, &wc->title, &wc->executable);
31
 
32
-   wc->method = choose_method(method, wc->wgc_supported, wc->class);
33
+   wc->method = choose_method(method, wgc_supported, wc->class);
34
    wc->priority = (enum window_priority)priority;
35
    wc->cursor = obs_data_get_bool(s, "cursor");
36
    wc->use_wildcards = obs_data_get_bool(s, "use_wildcards");
37
@@ -236,6 +236,8 @@
38
    return success;
39
 }
40
 
41
+extern bool graphics_uses_d3d11;
42
+
43
 static void *wc_create(obs_data_t *settings, obs_source_t *source)
44
 {
45
    struct window_capture *wc = bzalloc(sizeof(struct window_capture));
46
@@ -243,18 +245,12 @@
47
 
48
    pthread_mutex_init(&wc->update_mutex, NULL);
49
 
50
-   obs_enter_graphics();
51
-   const bool uses_d3d11 = gs_get_device_type() == GS_DEVICE_DIRECT3D_11;
52
-   obs_leave_graphics();
53
-
54
-   if (uses_d3d11) {
55
+   if (graphics_uses_d3d11) {
56
        static const char *const module = "libobs-winrt";
57
        wc->winrt_module = os_dlopen(module);
58
-       if (wc->winrt_module &&
59
-           load_winrt_imports(&wc->exports, wc->winrt_module,
60
-                      module) &&
61
-           wc->exports.winrt_capture_supported()) {
62
-           wc->wgc_supported = true;
63
+       if (wc->winrt_module) {
64
+           load_winrt_imports(&wc->exports, wc->winrt_module,
65
+                      module);
66
        }
67
    }
68
 
69
@@ -366,6 +362,9 @@
70
    UNUSED_PARAMETER(p);
71
 
72
    struct window_capture *wc = obs_properties_get_param(props);
73
+   if (!wc)
74
+       return false;
75
+
76
    update_settings(wc, settings);
77
 
78
    update_settings_visibility(props, wc);
79
@@ -382,6 +381,9 @@
80
                  obs_data_t *settings)
81
 {
82
    struct window_capture *wc = obs_properties_get_param(props);
83
+   if (!wc)
84
+       return false;
85
+
86
    update_settings(wc, settings);
87
 
88
    update_settings_visibility(props, wc);
89
@@ -410,7 +412,7 @@
90
    obs_property_list_add_int(p, TEXT_METHOD_AUTO, METHOD_AUTO);
91
    obs_property_list_add_int(p, TEXT_METHOD_BITBLT, METHOD_BITBLT);
92
    obs_property_list_add_int(p, TEXT_METHOD_WGC, METHOD_WGC);
93
-   obs_property_list_item_disable(p, 2, !wc->wgc_supported);
94
+   obs_property_list_item_disable(p, 2, !wgc_supported);
95
    obs_property_set_modified_callback(p, wc_capture_method_changed);
96
 
97
    p = obs_properties_add_list(ppts, "priority", TEXT_MATCH_PRIORITY,
98
@@ -571,13 +573,12 @@
99
 static void wc_render(void *data, gs_effect_t *effect)
100
 {
101
    struct window_capture *wc = data;
102
-   gs_effect_t *const opaque = obs_get_base_effect(OBS_EFFECT_OPAQUE);
103
    if (wc->method == METHOD_WGC) {
104
        if (wc->capture_winrt) {
105
            if (wc->exports.winrt_capture_active(
106
                    wc->capture_winrt)) {
107
                wc->exports.winrt_capture_render(
108
-                   wc->capture_winrt, opaque);
109
+                   wc->capture_winrt);
110
            } else {
111
                wc->exports.winrt_capture_free(
112
                    wc->capture_winrt);
113
@@ -585,7 +586,9 @@
114
            }
115
        }
116
    } else {
117
-       dc_capture_render(&wc->capture, opaque);
118
+       dc_capture_render(
119
+           &wc->capture,
120
+           obs_source_get_texcoords_centered(wc->source));
121
    }
122
 
123
    UNUSED_PARAMETER(effect);
124
obs-studio-27.0.1.tar.xz/plugins/win-capture/window-helpers.c -> obs-studio-27.1.3.tar.xz/plugins/win-capture/window-helpers.c Changed
6
 
1
@@ -1,4 +1,3 @@
2
-#define PSAPI_VERSION 1
3
 #include <obs.h>
4
 #include <util/dstr.h>
5
 
6
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/ar-SA.ini -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/ar-SA.ini Changed
34
 
1
@@ -1,6 +1,7 @@
2
 VideoCaptureDevice="جهاز التقاط الفيديو"
3
 Device="الجهاز"
4
 ColorSpace.Default="الإفتراضي"
5
+ColorRange="نظاق اللون"
6
 ColorRange.Default="الافتراضي"
7
 ColorRange.Partial="جزئي"
8
 ColorRange.Full="كامل"
9
@@ -9,17 +10,24 @@
10
 ConfigureCrossbar="تكوين العارضة"
11
 ResFPSType="نوع الأبعاد/FPS"
12
 ResFPSType.Custom="مخصص"
13
+ResFPSType.DevPreferred="الجهاز الافتراضي"
14
 FPS.Matching="تطابق إخراج FPS"
15
 FPS.Highest="أعلى FPS"
16
 Resolution="الأبعاد"
17
 VideoFormat="صيغة الفيديو"
18
 VideoFormat.Any="أي"
19
 VideoFormat.Unknown="المجهول (%1)"
20
+AudioOutputMode="وضع إخراج الصوت"
21
 AudioOutputMode.Capture="التقاط الصوت فقط"
22
+AudioOutputMode.DirectSound="إخراج صوت سطح المكتب (DirectSound)"
23
+AudioOutputMode.WaveOut="إخراج صوت سطح المكتب (WaveOut)"
24
 UseCustomAudioDevice="استخدام جهاز صوت مخصص"
25
 AudioDevice="جهاز الصوت"
26
+Buffering.Enable="تمكين"
27
+Buffering.Disable="تعطيل"
28
 Activate="تنشيط"
29
 Deactivate="إلغاء التنشيط"
30
+FlipVertically="عكس عمودي"
31
 Autorotation="تطبيق بيانات التدوير من الكاميرا (إن وجد)"
32
 Bitrate="معدّل البِت"
33
 Encoder.C985="مرمّز AVerMedia H.264 (c985)"
34
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/he-IL.ini -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/he-IL.ini Changed
13
 
1
@@ -29,9 +29,10 @@
2
 Buffering.AutoDetect="זיהוי אוטומטי"
3
 Buffering.Enable="אפשר"
4
 Buffering.Disable="בטל"
5
-Activate="הפעל"
6
+Activate="הפעלה"
7
 Deactivate="השבת"
8
 FlipVertically="הפוך אנכית"
9
+Autorotation="החל נתוני סיבוב מהמצלמה (אם קיימים)"
10
 DeactivateWhenNotShowing="השבת כאשר לא נראה"
11
 Bitrate="קצב נתונים"
12
 Encoder.C985="מקודד AverMedia H.264 (c985)"
13
obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/hi-IN.ini Added
41
 
1
@@ -0,0 +1,39 @@
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="रिजॉल्यूशन/FPS प्रकार"
14
+ResFPSType.Custom="निर्मित"
15
+ResFPSType.DevPreferred="डिवाइस डिफ़ॉल्ट"
16
+FPS.Matching="आउटपुट FPS से मिलान करें"
17
+FPS.Highest="अघिकतम FPS"
18
+Resolution="रिजॉल्यूशन"
19
+VideoFormat="वीडियो प्रारूप"
20
+VideoFormat.Any="कोई भी"
21
+VideoFormat.Unknown="अज्ञात (%1)"
22
+AudioOutputMode="ऑडियो आउटपुट मोड"
23
+AudioOutputMode.Capture="केवल ऑडियो कैप्चर करें"
24
+AudioOutputMode.DirectSound="आउटपुट डेस्कटॉप ऑडियो (DirectSound)"
25
+AudioOutputMode.WaveOut="आउटपुट डेस्कटॉप ऑडियो (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
+Deactivate="निष्क्रिय करें"
35
+FlipVertically="लंबवत पलटें"
36
+Autorotation="कैमरे से रोटेशन डेटा लागू करें (यदि कोई हो)"
37
+DeactivateWhenNotShowing="प्रदर्शित न होने पर निष्क्रिय करें"
38
+Bitrate="बिटरेट"
39
+Encoder.C985="AVerMedia H.264 एनकोडर (c985)"
40
+Encoder.C353="AVerMedia H.264 एनकोडर"
41
obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/kmr-TR.ini Added
41
 
1
@@ -0,0 +1,39 @@
2
+VideoCaptureDevice="Amûra girtina vîdyoyê"
3
+Device="Amûr"
4
+ColorSpace="Qada rengê"
5
+ColorSpace.Default="Berdest"
6
+ColorRange="Rêjeya rengê"
7
+ColorRange.Default="Berdest"
8
+ColorRange.Partial="Parçeyî"
9
+ColorRange.Full="Tijî"
10
+ConfigureAudio="Dengê pevsaz bike"
11
+ConfigureVideo="Vîdyoyê pevsaz bike"
12
+ConfigureCrossbar="Xaçerêzê pevsaz bike"
13
+ResFPSType="Çareserî/cuerya FPS"
14
+ResFPSType.Custom="Kesanekirî"
15
+ResFPSType.DevPreferred="Sazkariyên amûrê"
16
+FPS.Matching="Derketina FPS -ê lihev bike"
17
+FPS.Highest="FPS ya herî bilind"
18
+Resolution="Çareserî"
19
+VideoFormat="Formata Vîdyoyê"
20
+VideoFormat.Any="Kîjan be"
21
+VideoFormat.Unknown="Nenas (%1)"
22
+AudioOutputMode="Girtina derûna dengê"
23
+AudioOutputMode.Capture="Tenê dengê tomar bike"
24
+AudioOutputMode.DirectSound="Dengê sermaseyê derxe (Dengê rasterast)"
25
+AudioOutputMode.WaveOut="Dengê sermaseyê derxe (Derçûya pêlê)"
26
+UseCustomAudioDevice="Amûra deng ya kesane bi kar bîne"
27
+AudioDevice="Amûra dengê"
28
+Buffering="Bîrgeha demkî"
29
+Buffering.ToolTip="Gava ku bîrgeha demkî çalak be, daneyên vîdyoyê / dengê tomar dike da lêdana ku herî rewan û\nrast gengaz bikê, lê derengmayîn bêhtir dibe. Gava ku girtina\nbîrgeha demkî bi karta vîdyoyê tê bikar anîn, tê pêşniyarkirin ku ji bo encamên çêtirîn kart û\nbername li heman tarikê saz bike.\n\nKengî ku neçakkirî be, şanoya derengmayîna herî kêm dike, lê tarikê\n rastbûna kêm dikê. Ev ji bo kamerayên rûyê îdeal ye, an jî dema ku tu dixwazî çarçoveya pêşdîtinê ya\nbernameyê bi kar bînî da ku konsolê bidî lîstin.\n\nKontrolkirina bixweber (berdest) wê saz dike ku heke amûr dereng be, çalak dike û neçalak dike\nheke derengmayîn tune be."
30
+Buffering.AutoDetect="vedîtina bixwber"
31
+Buffering.Enable="Çalak bike"
32
+Buffering.Disable="Neçalak bike"
33
+Activate="Çalak bike"
34
+Deactivate="Neçalak bike"
35
+FlipVertically="Teqleya stûnî"
36
+Autorotation="Daneyên zivirandinê ji kamerayê bi kar bîne (heke hebe)"
37
+DeactivateWhenNotShowing="Dema nîşan neda neçalak bike"
38
+Bitrate="Leza bit"
39
+Encoder.C985="AVerMedia H.264 kodkerê (c985)"
40
+Encoder.C353="Kodkerê AVerMedia H.264"
41
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini Changed
9
 
1
@@ -31,6 +31,7 @@
2
 Activate="Aktiver"
3
 Deactivate="Deaktiver"
4
 FlipVertically="Vend loddrett"
5
+Autorotation="Bruk rotasjons data fra kamera (om finnes)"
6
 DeactivateWhenNotShowing="Deaktiver når denne ikke vises"
7
 Encoder.C985="AVerMedia H.264 koder (c985)"
8
 Encoder.C353="AVerMedia H.264 koder"
9
obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/nn-NO.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+Device="Eining"
3
+ColorSpace.Default="Standard"
4
+ColorRange.Default="Standard"
5
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/ro-RO.ini -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/ro-RO.ini Changed
10
 
1
@@ -24,7 +24,7 @@
2
 AudioOutputMode.WaveOut="Output audio desktop (WaveOut)"
3
 UseCustomAudioDevice="Folosește dispozitiv audio personalizat"
4
 AudioDevice="Dispozitiv audio"
5
-Buffering.ToolTip="Când este activat, păstrează în buffer datele video/audio pentru a asigura\nredarea cea mai netedă și cea mai precisă posibilă, dar cu costul unei\nlatențe crescute. Când folosești buffering cu o placă de captură video, este\nrecomandat să setezi placa și programul la aceeași frecvență de cadre\npentru cele mai bune rezultate.\n\nCând este dezactivat, asigură redarea cu cea mai mică latență, dar cu\ncostul preciziei redării cadrelor. Acest lucru este ideal pentru camerele\npentru față sau când vrei să folosești fereastra de previzualizare a\nprogramului pentru a te juca pe consolă.\n\nDetectează automat (implicit) îl setează activat dacă dispozitivul are\nîntârziere și dezactivat dacă nu are întârziere."
6
+Buffering.ToolTip="Când este activat, păstrează în buffer datele video/audio pentru a asigura\nredarea cea mai netedă și cea mai precisă posibilă, dar cu costul unei\nlatențe crescute. Când folosești buffering cu o placă de captură video,\neste recomandat să setezi placa și programul la aceeași frecvență de\ncadre pentru cele mai bune rezultate.\n\nCând este dezactivat, asigură redarea cu cea mai mică latență, dar cu\ncostul preciziei redării cadrelor. Acest lucru este ideal pentru camerele\npentru față sau când vrei să folosești fereastra de previzualizare a\nprogramului pentru a te juca pe consolă.\n\nDetectează automat (implicit) îl setează activat dacă dispozitivul are\nîntârziere și dezactivat dacă nu are întârziere."
7
 Buffering.AutoDetect="Detectează automat"
8
 Buffering.Enable="Activează"
9
 Buffering.Disable="Dezactivează"
10
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/sl-SI.ini -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/sl-SI.ini Changed
9
 
1
@@ -32,6 +32,7 @@
2
 Activate="Omogoči"
3
 Deactivate="Onemogoči"
4
 FlipVertically="Zrcali navpično"
5
+Autorotation="Uporabi podakte o obrnjenosti kamere (če obstajajo)"
6
 DeactivateWhenNotShowing="Onemogoči, ko ni prikazano"
7
 Bitrate="Bitna hitrost"
8
 Encoder.C985="Kodirnik AVerMedia H.264 (c985)"
9
obs-studio-27.0.1.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini Changed
10
 
1
@@ -30,7 +30,7 @@
2
 Buffering.Disable="Inaktivera"
3
 Activate="Aktivera"
4
 Deactivate="Inaktivera"
5
-FlipVertically="Vänd vertikalt"
6
+FlipVertically="Spegelvänd vertikalt"
7
 Autorotation="Tillämpa rotationsdata från kameran (om det finns någon)"
8
 DeactivateWhenNotShowing="Inaktivera när den inte visas"
9
 Bitrate="Bithastighet"
10
obs-studio-27.1.3.tar.xz/plugins/win-dshow/data/locale/szl-PL.ini Added
39
 
1
@@ -0,0 +1,37 @@
2
+VideoCaptureDevice="Maszina do chytanio wideo"
3
+Device="Maszina"
4
+ColorSpace="Przestrzyństwo farb"
5
+ColorSpace.Default="Sztandardowe"
6
+ColorRange="Zakrys farb"
7
+ColorRange.Default="Sztandardowy"
8
+ColorRange.Partial="Niyblank"
9
+ColorRange.Full="Połny"
10
+ConfigureAudio="Kōnfiguracyjo klangu"
11
+ConfigureVideo="Kōnfiguracyjo wideo"
12
+ConfigureCrossbar="Kōnfiguracyjo wchodu"
13
+ResFPSType="Rozdzielczość / Tryb FPS"
14
+ResFPSType.Custom="Niysztandardowy"
15
+ResFPSType.DevPreferred="Sztandardowe ôpcyje masziny"
16
+FPS.Matching="Napasuj do wychodowego FPS"
17
+FPS.Highest="Nojwyższy FPS"
18
+Resolution="Rozdzielczość"
19
+VideoFormat="Format wideo"
20
+VideoFormat.Any="Belejaki"
21
+VideoFormat.Unknown="Niyznōmy (%1)"
22
+AudioOutputMode="Tryb wyjścio audio"
23
+AudioOutputMode.Capture="Ino chytanie klangu"
24
+AudioOutputMode.DirectSound="Przekoż klang dalij (DirectSound)"
25
+AudioOutputMode.WaveOut="Przekoż klang dalij (WaveOut)"
26
+UseCustomAudioDevice="Użyj włosnego wyjścio audio"
27
+AudioDevice="Maszina audio"
28
+Buffering="Buforowanie"
29
+Buffering.AutoDetect="autōmatycznie"
30
+Buffering.Enable="włōnczōne"
31
+Buffering.Disable="wyłōnczōne"
32
+Activate="Włōncz"
33
+Deactivate="Wyłōncz"
34
+FlipVertically="Ôdbicie lustrzane w piōnie"
35
+Autorotation="Zastosuj dane tykajōnce zwyrtu z kamery (jeźli sōm)"
36
+DeactivateWhenNotShowing="Wyłōncz, kej niyma pokazowane"
37
+Encoder.C985="Enkoder AVerMedia H.264 (c985)"
38
+Encoder.C353="Enkoder AVerMedia H.264"
39
obs-studio-27.1.3.tar.xz/plugins/win-dshow/libdshowcapture/.gitignore Added
49
 
1
@@ -0,0 +1,47 @@
2
+*.exe
3
+*.dll
4
+
5
+/release/
6
+/debug/
7
+/builds/
8
+/other/
9
+Release_MD/
10
+Release/
11
+Debug/
12
+x64/
13
+ipch/
14
+GeneratedFiles/
15
+
16
+.hg
17
+tags
18
+*.trace
19
+*.vsp
20
+*.psess
21
+*.swp
22
+*.dat
23
+*.clbin
24
+*.log
25
+*.tlog
26
+*.sdf
27
+*.opensdf
28
+*.xml
29
+*.ipch
30
+*.css
31
+*.xslt
32
+*.aps
33
+*.suo
34
+*.ncb
35
+*.user
36
+*.lo
37
+*.ilk
38
+*.la
39
+*.o
40
+*.obj
41
+*.pdb
42
+*.res
43
+*.manifest
44
+*.dep
45
+*.zip
46
+*.lnk
47
+*.chm
48
+*~
49
obs-studio-27.1.3.tar.xz/plugins/win-dshow/libdshowcapture/tests/.gitignore Added
obs-studio-27.0.1.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-27.1.3.tar.xz/plugins/win-dshow/win-dshow.cpp Changed
69
 
1
@@ -709,7 +709,7 @@
2
           left == right;
3
 }
4
 
5
-static inline bool ResolutionValid(string res, int &cx, int &cy)
6
+static inline bool ResolutionValid(const string &res, int &cx, int &cy)
7
 {
8
    if (!res.size())
9
        return false;
10
@@ -816,7 +816,7 @@
11
 }
12
 
13
 static bool DetermineResolution(int &cx, int &cy, obs_data_t *settings,
14
-               VideoDevice dev)
15
+               VideoDevice &dev)
16
 {
17
    const char *res = obs_data_get_autoselect_string(settings, RESOLUTION);
18
    if (obs_data_has_autoselect_value(settings, RESOLUTION) &&
19
@@ -839,7 +839,8 @@
20
 static inline bool IsDelayedDevice(const VideoConfig &config)
21
 {
22
    return config.format > VideoFormat::MJPEG ||
23
-          wstrstri(config.name.c_str(), L"elgato") != NULL ||
24
+          (wstrstri(config.name.c_str(), L"elgato") != NULL &&
25
+       wstrstri(config.name.c_str(), L"facecam") == NULL) ||
26
           wstrstri(config.name.c_str(), L"stream engine") != NULL;
27
 }
28
 
29
@@ -932,8 +933,8 @@
30
        interval = best_interval;
31
    }
32
 
33
-   videoConfig.name = id.name.c_str();
34
-   videoConfig.path = id.path.c_str();
35
+   videoConfig.name = id.name;
36
+   videoConfig.path = id.path;
37
    videoConfig.useDefaultConfig = resType == ResType_Preferred;
38
    videoConfig.cx = cx;
39
    videoConfig.cy_abs = abs(cy);
40
@@ -1000,8 +1001,8 @@
41
        if (!DecodeDeviceId(id, audio_device_id.c_str()))
42
            return false;
43
 
44
-       audioConfig.name = id.name.c_str();
45
-       audioConfig.path = id.path.c_str();
46
+       audioConfig.name = id.name;
47
+       audioConfig.path = id.path;
48
 
49
    } else if (!deviceHasAudio) {
50
        return true;
51
@@ -1274,7 +1275,7 @@
52
 static bool DeviceIntervalChanged(obs_properties_t *props, obs_property_t *p,
53
                  obs_data_t *settings);
54
 
55
-static bool TryResolution(VideoDevice &dev, string res)
56
+static bool TryResolution(const VideoDevice &dev, const string &res)
57
 {
58
    int cx, cy;
59
    if (!ConvertRes(cx, cy, res.c_str()))
60
@@ -1284,7 +1285,7 @@
61
 }
62
 
63
 static bool SetResolution(obs_properties_t *props, obs_data_t *settings,
64
-             string res, bool autoselect = false)
65
+             const string &res, bool autoselect = false)
66
 {
67
    if (autoselect)
68
        obs_data_set_autoselect_string(settings, RESOLUTION,
69
obs-studio-27.0.1.tar.xz/plugins/win-mf/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/win-mf/data/locale/en-US.ini Changed
60
 
1
@@ -1,29 +1,29 @@
2
-MFAACEnc="Media Foundation AAC Encoder"
3
-Bitrate="Bitrate"
4
-
5
-MF.H264.EncoderName="Media Foundation H264 Encoder"
6
-MF.H264.Encoder="Encoder Name"
7
-MF.H264.LowLatency="Low Latency (Disable frame re-ordering)"
8
-MF.H264.BFrames="Consecutive B-Frame count"
9
-MF.H264.CustomBufsize="Use Custom Buffer Size"
10
-MF.H264.BufferSize="Buffer Size"
11
-MF.H264.CustomMaxBitrate="Use Custom Max Bitrate"
12
-MF.H264.Bitrate="Bitrate"
13
-MF.H264.MaxBitrate="Max Bitrate"
14
-MF.H264.KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
15
-MF.H264.RateControl="Rate Control"
16
-MF.H264.CBR="CBR (Constant Bitrate)"
17
-MF.H264.VBR="VBR (Variable Bitrate)"
18
-MF.H264.CQP="CQP (Constant Quality)"
19
-MF.H264.MinQP="Minimum QP"
20
-MF.H264.MaxQP="Maximum QP"
21
-MF.H264.QPI="QP I-Frame"
22
-MF.H264.QPP="QP P-Frame"
23
-MF.H264.QPB="QP B-Frame"
24
-MF.H264.Profile="Profile"
25
-MF.H264.Advanced="Advanced"
26
-
27
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Encoder"
28
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)"
29
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Encoder (Media Foundation)"
30
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Media Foundation)"
31
+MFAACEnc="Media Foundation AAC Encoder"
32
+Bitrate="Bitrate"
33
+
34
+MF.H264.EncoderName="Media Foundation H264 Encoder"
35
+MF.H264.Encoder="Encoder Name"
36
+MF.H264.LowLatency="Low Latency (Disable frame re-ordering)"
37
+MF.H264.BFrames="Consecutive B-Frame count"
38
+MF.H264.CustomBufsize="Use Custom Buffer Size"
39
+MF.H264.BufferSize="Buffer Size"
40
+MF.H264.CustomMaxBitrate="Use Custom Max Bitrate"
41
+MF.H264.Bitrate="Bitrate"
42
+MF.H264.MaxBitrate="Max Bitrate"
43
+MF.H264.KeyframeIntervalSec="Keyframe Interval (seconds, 0=auto)"
44
+MF.H264.RateControl="Rate Control"
45
+MF.H264.CBR="CBR (Constant Bitrate)"
46
+MF.H264.VBR="VBR (Variable Bitrate)"
47
+MF.H264.CQP="CQP (Constant Quality)"
48
+MF.H264.MinQP="Minimum QP"
49
+MF.H264.MaxQP="Maximum QP"
50
+MF.H264.QPI="QP I-Frame"
51
+MF.H264.QPP="QP P-Frame"
52
+MF.H264.QPB="QP B-Frame"
53
+MF.H264.Profile="Profile"
54
+MF.H264.Advanced="Advanced"
55
+
56
+MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Encoder"
57
+MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)"
58
+MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Encoder (Media Foundation)"
59
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Media Foundation)"
60
obs-studio-27.0.1.tar.xz/plugins/win-mf/data/locale/gd-GB.ini -> obs-studio-27.1.3.tar.xz/plugins/win-mf/data/locale/gd-GB.ini Changed
29
 
1
@@ -1,8 +1,27 @@
2
+MFAACEnc="Inneal-còdachaidh Media Foundation AAC"
3
 Bitrate="Reat bhiodan"
4
+MF.H264.EncoderName="Inneal-còdachaidh Media Foundation H264"
5
+MF.H264.Encoder="Ainm an inneil-chòdachaidh"
6
+MF.H264.LowLatency="Foillidheachd ìosal (ath-òrdachadh nam frèamaichean à comas)"
7
+MF.H264.BFrames="Cunntas leantach nam frèamaichean-B"
8
 MF.H264.CustomBufsize="Cleachd meud bufair gnàthaichte"
9
 MF.H264.BufferSize="Meud a’ bhufair"
10
+MF.H264.CustomMaxBitrate="Cleachd reat bhiodan as motha gnàthaichte"
11
 MF.H264.Bitrate="Reat bhiodan"
12
+MF.H264.MaxBitrate="Reat bhiodan as motha"
13
 MF.H264.KeyframeIntervalSec="Eadaramh nam frèamaichean-iuchrach (diog, fèin-obrachail)"
14
 MF.H264.RateControl="Smachd air an reat"
15
+MF.H264.CBR="CBR (reat bhiodan cunbhalach)"
16
+MF.H264.VBR="VBR (reat bhiodan caochlaideach)"
17
+MF.H264.CQP="CQP (càileachd chunbhalach)"
18
+MF.H264.MinQP="QP as lugha"
19
+MF.H264.MaxQP="QP as motha"
20
+MF.H264.QPI="Frèam-I QP"
21
+MF.H264.QPP="Frèam-P QP"
22
+MF.H264.QPB="Frèam-B QP"
23
 MF.H264.Profile="Pròifil"
24
 MF.H264.Advanced="Adhartach"
25
+MF.H264.EncoderSWMicrosoft="Inneal-còdachaidh bathair-bhog Microsoft H.264"
26
+MF.H264.EncoderHWAMD="Inneal-còdachaidh AMD Video Coding Engine H.264 (Media Foundation)"
27
+MF.H264.EncoderHWIntel="Inneal-còdachaidh Intel Quick Sync H.264 (Media Foundation)"
28
+MF.H264.EncoderHWNVIDIA="Inneal-còdachaidh NVIDIA NVENC H.264 (Media Foundation)"
29
obs-studio-27.1.3.tar.xz/plugins/win-mf/data/locale/hi-IN.ini Added
26
 
1
@@ -0,0 +1,24 @@
2
+MFAACEnc="Media Foundation AAC एनकोडर"
3
+Bitrate="बिटरेट"
4
+MF.H264.EncoderName="Media Foundation H264 एनकोडर"
5
+MF.H264.Encoder="एनकोडर नाम"
6
+MF.H264.LowLatency="कम विलंबता (फ़्रेम पुनः क्रमित करना अक्षम करें)"
7
+MF.H264.BFrames="निरन्तर बी-फ़्रेम गणना"
8
+MF.H264.CustomBufsize="निर्मित बफ़र आकार का प्रयोग करें"
9
+MF.H264.BufferSize="बफ़र आकार"
10
+MF.H264.CustomMaxBitrate="निर्मित महत्तम बिटरेट प्रयोग करें"
11
+MF.H264.Bitrate="बिटरेट"
12
+MF.H264.MaxBitrate="महत्तम बिटरेट"
13
+MF.H264.KeyframeIntervalSec="कीफ़्रेम अंतराल (सेकंड, 0=स्वतः)"
14
+MF.H264.RateControl="दर नियंत्रण"
15
+MF.H264.CBR="CBR (स्थिर बिटरेट)"
16
+MF.H264.VBR="VBR (वैरिएबल बिटरेट)"
17
+MF.H264.CQP="CQP (स्थिर गुणवत्ता)"
18
+MF.H264.MinQP="न्यूनतम QP"
19
+MF.H264.MaxQP="महत्तम QP"
20
+MF.H264.Profile="प्रोफ़ाइल"
21
+MF.H264.Advanced="उन्नत"
22
+MF.H264.EncoderSWMicrosoft="माइक्रोसॉफ्ट सॉफ्टवेयर H.264 एनकोडर"
23
+MF.H264.EncoderHWAMD="AMD वीडियो कोडिंग इंजन H.264 एनकोडर (मीडिया फाउंडेशन)"
24
+MF.H264.EncoderHWIntel="इंटेल क्विक सिंक H.264 एनकोडर (मीडिया फाउंडेशन)"
25
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 एनकोडर (मीडिया फाउंडेशन)"
26
obs-studio-27.1.3.tar.xz/plugins/win-mf/data/locale/kmr-TR.ini Added
26
 
1
@@ -0,0 +1,24 @@
2
+MFAACEnc="Kodkerê Media Foundation AAC"
3
+Bitrate="Leza bîtê"
4
+MF.H264.EncoderName="Media Foundation H264 kodker"
5
+MF.H264.Encoder="Navê kodker"
6
+MF.H264.LowLatency="Derengmayîna kêm (Ji nû ve sazkirina tarikê neçalak bike)"
7
+MF.H264.BFrames="Hejmara B-tarika li pey hev"
8
+MF.H264.CustomBufsize="Mezinahiya bîrgeha demkî ya kesanekirî bi kar bîne"
9
+MF.H264.BufferSize="Mezinahiya bîrgeha demkî"
10
+MF.H264.CustomMaxBitrate="Rêjeya bîtê herî bilind a kesanekirî bi kar bîne"
11
+MF.H264.Bitrate="Leza bîtê"
12
+MF.H264.MaxBitrate="Leza bit herî pir"
13
+MF.H264.KeyframeIntervalSec="Dabeşkera demkî di navbera tarikan de (çirke, 0=bixweber)"
14
+MF.H264.RateControl="Kontrolkirina rêjeyê"
15
+MF.H264.CBR="RBN (rêjeya bît a neguhêr )"
16
+MF.H264.VBR="RBG (rêjeya bît a guhêrî)"
17
+MF.H264.CQP="KD (kalîteya domdar)"
18
+MF.H264.MinQP="Kêmtirîn qalîteya wêneyê"
19
+MF.H264.MaxQP="Baştirîn qalîteya wêneyê"
20
+MF.H264.Profile="Profîl"
21
+MF.H264.Advanced="Pêşketî"
22
+MF.H264.EncoderSWMicrosoft="Kodkerê Microsoft software H.264"
23
+MF.H264.EncoderHWAMD="Kodkerê AMD Video Coding Engine H.264 (Media Foundation)"
24
+MF.H264.EncoderHWIntel="Kodkerê Intel Quick Sync H.264 (Media Foundation)"
25
+MF.H264.EncoderHWNVIDIA="Kodkerê NVIDIA NVENC H.264 (Media Foundation)"
26
obs-studio-27.1.3.tar.xz/plugins/win-mf/data/locale/nn-NO.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+MF.H264.Profile="Profil"
3
+MF.H264.Advanced="Avansert"
4
obs-studio-27.1.3.tar.xz/plugins/win-mf/data/locale/oc-FR.ini Added
3
 
1
@@ -0,0 +1,1 @@
2
+MF.H264.Profile="Perfil"
3
obs-studio-27.0.1.tar.xz/plugins/win-wasapi/data/locale/en-US.ini -> obs-studio-27.1.3.tar.xz/plugins/win-wasapi/data/locale/en-US.ini Changed
12
 
1
@@ -1,5 +1,5 @@
2
-AudioInput="Audio Input Capture"
3
-AudioOutput="Audio Output Capture"
4
-Device="Device"
5
-Default="Default"
6
-UseDeviceTiming="Use Device Timestamps"
7
+AudioInput="Audio Input Capture"
8
+AudioOutput="Audio Output Capture"
9
+Device="Device"
10
+Default="Default"
11
+UseDeviceTiming="Use Device Timestamps"
12
obs-studio-27.0.1.tar.xz/plugins/win-wasapi/data/locale/hi-IN.ini -> obs-studio-27.1.3.tar.xz/plugins/win-wasapi/data/locale/hi-IN.ini Changed
6
 
1
@@ -2,3 +2,4 @@
2
 AudioOutput="ऑडियो आउटपुट कैप्चर"
3
 Device="डिवाइस"
4
 Default="आरंभिक"
5
+UseDeviceTiming="डिवाइस टाइमस्टैम्प का उपयोग करें"
6
obs-studio-27.1.3.tar.xz/plugins/win-wasapi/data/locale/kmr-TR.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+AudioInput="Girtina têketina dengê"
3
+AudioOutput="Girtina derana dengê"
4
+Device="Amûr"
5
+Default="Berdest"
6
+UseDeviceTiming="Demjimêrên amûrê bi kar bîne"
7
obs-studio-27.1.3.tar.xz/plugins/win-wasapi/data/locale/nn-NO.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Device="Eining"
3
+Default="Standard"
4
obs-studio-27.1.3.tar.xz/plugins/win-wasapi/data/locale/szl-PL.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+AudioInput="Przechytywanie wchodu klangu"
3
+AudioOutput="Przechytywanie wyjścio klangu"
4
+Device="Maszina"
5
+Default="Sztandardowo"
6
+UseDeviceTiming="Używej znacznikōw czasu masziny"
7
Refresh

No build results available

Refresh

No rpmlint results available

Request History
boombatower's avatar

boombatower created request over 3 years ago

- Update to version 27.1.3:
* libobs: Update version to 27.1.2
* Revert "libobs: Don't return/set 0 mixers for non-audio sources"
* libobs: Update to version 27.1.2
* Revert "UI: Disable hotkeys when a user is expected to type text"
* libobs: Don't return/set 0 mixers for non-audio sources
* UI: Fix tab stop order for Draw safe areas
* UI: Do not disable AutoConf bandwidth test for YouTube
* libobs: Remove DrawSrgbDecompressPremultiplied
* UI: Fix Twitch bandwidth test checkbox
* UI: Remove thread from YouTube auto config
* obs-browser: Filter textures in linear space
* UI: Adjust minimum size of source toolbars smaller
* libobs/util: Add type test in darray macros for GCC
* libobs/util: Add a cast for da_push_back_array argument
* libobs: Fix const qualifier mismatch on DARRAY
* libobs: Add casts to da_push_back_array arguments
* libobs: DrawSrgbDecompress for default_rect.effect
* libobs: Simplify util_mul_div64 for x64 on Windows
* win-capture: Update graphics hook version to 1.7.1
* libobs: Update version to 27.1.1
* UI: Add missing Auth::Load() when duplicating/creating profile
* linux-capture: Fail when libdrm missing
* obs-browser: Update translations from Crowdin
* obs-browser: Update version to 2.16.2
* Update translations from Crowdin
* libobs: Update version to 27.1.0
* linux-capture: Add libdrm dependency check (#5326)
* Revert "UI: Update volume controls by callback"
* libobs: Make portal inhibitor asynchronous


boombatower's avatar

boombatower accepted request over 3 years ago

ok