Changes of Revision 46

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,140 @@
2
 -------------------------------------------------------------------
3
+Wed Jun 14 22:47:57 UTC 2017 - jimmy@boombatower.com
4
+
5
+- Update to version 19.0.2:
6
+  * UI: Fix drag & drop bug
7
+  * frontend-tools: Add automatic scene switcher for Linux
8
+  * UI: Add option to disable audio ducking on windows
9
+  * rtmp-services: Update ingests
10
+  * libobs/util: Add Get function to BPtr<>
11
+  * UI, obs-qsv11: Fix build in VisualStudio 2017
12
+  * UI: Fix warning in VisualStudio 2017
13
+  * obs-qsv11: Fix SEI crash caused by dangling pointer
14
+  * UI: Add ability to output to window
15
+  * UI: Always alternatively open backup scene json file
16
+  * libobs: Don't call unlink unnecessarily
17
+  * libobs/util: Add os_safe_replace function
18
+  * libobs/util: Use os_safe_replace in safe file writes
19
+  * libobs/util: Flush text files when writing
20
+  * libobs/util: Use MoveFileEx with MOVEFILE_REPLACE_EXISTING
21
+  * vlc-video: Add ability to shuffle playlist in VLC source
22
+  * Various: Optimize bundled PNG files
23
+  * text-freetype2: Make font lookup recursive on mac
24
+  * libobs: Use tex.Load for reverse NV12/I420 funcs
25
+  * UI: Fix settings dialog crashing on linux
26
+  * libobs: Fix tex.Load lookup (needs int3, not int2)
27
+  * libobs: Add random shader
28
+  * libobs: Fix skipped frames reporting
29
+  * libobs: Add functions to get logical/physical cores
30
+  * libobs: Pass exact data when calling obs_get_video_info
31
+  * libobs: Add function to allow custom output drawing
32
+  * libobs: Add function to allow getting output connect time
33
+  * libobs: Don't allow lagged frames to be counted as skipped
34
+  * obs-outputs: Add null output
35
+  * obs-outputs: Add connect time callback for rtmp output
36
+  * obs-outputs: Fix frame dropping when using ultrafast
37
+  * UI: Add function to enable/disable outputs
38
+  * UI: Don't subject base/output resolutions defaults
39
+  * UI: Limit default canvas res to 1920x1080 or below
40
+  * UI: Add 1920x1080/1280x720 to the settings base res list
41
+  * UI: Remove colon from a few locale items
42
+  * UI: Add auto-configuration wizard
43
+  * CI: OSX - Use wget instead of curl
44
+  * libobs: Fix os_safe_replace not working linux
45
+  * UI: Show invalid Bind to IP entries in the settings
46
+  * decklink: Fix compiler warning about ignored const
47
+  * decklink: Add option to disable the plugin
48
+  * decklink: Remove unused variables to fix warning
49
+  * win-capture: Hide cursor when in background (game capture)
50
+  * Various: Don't use boolean bitfields
51
+  * win-capture: Hide cursor when in background (window capture)
52
+  * rtmp-services: Rename hitbox.tv to Smashcast
53
+  * obs-ffmpeg: Add signal/proc to restart media playback
54
+  * CI: exclude .gitignore
55
+  * CI: Use git fetch --unshallow for OSX
56
+  * libobs/util: Add function to get free disk space
57
+  * libobs-opengl: Fix potential crash w/ viewports
58
+  * libobs: Add function to get average render time
59
+  * libobs: Add functions to get total/lagged frames
60
+  * libobs: Add obs_output_reconnecting func
61
+  * obs-ffmpeg: Implement get_total_bytes in recording outputs
62
+  * UI: Add function to get current memory usage (win32)
63
+  * UI: Add themeID values for colors to style sheets
64
+  * UI: Add stats dialog
65
+  * UI: Fix a few locale items, and add a few missing ones
66
+  * UI: Make Qt use locale text for QWizard buttons
67
+  * UI: Add helper class to translate message box buttons
68
+  * UI: Make sure all message box buttons are translated
69
+  * UI: Fix locale text for "OK" in question dialogs
70
+  * UI: Bring stats to front if it already exists
71
+  * UI: Add option to show stats on startup to general
72
+  * UI: Save/remember stats window geometry
73
+  * Revert "libobs: Allow source to fully control source flags (for now)"
74
+  * libobs: Don't use source flags for async buffering
75
+  * UI: Don't use "quit on last window closed"
76
+  * UI: Fix bug where Pre19Defaults would always be set
77
+  * UI: Don't count debug log messages in repeat detection
78
+  * UI: Warn user if multiple instances of the UI are open
79
+  * enc-amf: Version 2.1.3
80
+  * image-source: Allow custom bounding source size/aspect
81
+  * UI: Update quick transitions on transition add/removal
82
+  * libobs: Add scene item IDs
83
+  * win-dshow: Update libdshowcapture to 0.5.12
84
+  * UI: Add support for showing output error messages
85
+  * libobs: Add support for output error messages
86
+  * obs-outputs: Add output error messages for RTMP
87
+  * UI: Fix misleading log message when updating settings
88
+  * UI: Change output blocking bool to integer ref counter
89
+  * UI: Prevent user from starting ouputs while in settings
90
+  * UI: Move Stats to the view menu
91
+  * UI: Make Stats a regular window rather than dialog
92
+  * UI: Check to see if outputs valid when updating stats
93
+  * deps/media-playback: Remove unnecessary logging
94
+  * UI: Fix creation of log files with non-english paths
95
+  * libobs-d3d11: Only load vertex buffer before drawing
96
+  * deps/media-playback: Include SSE flags
97
+  * deps/media-playback: Do not seek network streams
98
+  * deps/media-playback: Init avformat in thread
99
+  * obs-ffmpeg: Only preload frames for local files
100
+  * obs-ffmpeg: Always close network sources when inactive
101
+  * libobs: Update to version 19.0.0
102
+  * libobs: Make obs_source_default_render exported
103
+  * obs-filters: Add Render Delay filter
104
+  * UI: Sort filter names when adding filters
105
+  * deps/media-playback: Discard packet returns of invalid sizes
106
+  * deps/media-playback: Use new FFmpeg decode funcs when possible
107
+  * deps/media-playback: Always check for new frame first
108
+  * UI: Fix cases where wizard bitrate is not capped
109
+  * UI: Remove advanced settings from final wizard results
110
+  * UI: Actually update service for wiz. bitrate limits
111
+  * UI: Fix enumeration of scene collections on first run
112
+  * obs-ffmpeg: Disable media source HW accel. for now
113
+  * libobs: Do not allow incompatible filters on sources
114
+  * rtmp-services: Preserve settings if service renamed
115
+  * obs-filters: Increase allowable render delay to 500ms
116
+  * enc-amf: Version 2.1.4
117
+  * VST: bump vst submodule ref
118
+  * Update translations from Crowdin
119
+  * UI: Change default autoconfig test bitrate
120
+  * AUTHORS: Update with data from Git and Crowdin
121
+  * deps/media-playback: Fix bug where inverted media would crash
122
+  * UI: Remove whitespace from end of autconfig stream key
123
+  * libobs/util: Also remove CR/LF from dstr_depad
124
+  * UI: Fix bug where auto-config settings wouldn't apply
125
+  * Fix German locale inconsistencies
126
+  * libobs: Always call stop callback
127
+  * UI: Unlock mutex before trying to stop output
128
+  * libobs: Fix bug where outputs would not set stopped event
129
+  * libobs: Update version to 19.0.1
130
+  * enc-amf: Version 2.1.5
131
+  * UI: Fix creation of crash log with non-english paths
132
+  * libobs-d3d11: Fix bug where vertex buffers would be reset
133
+  * UI: Fix autoconfig capping bitrate with "custom server"
134
+  * libobs: Update to version 19.0.2
135
+  * Revert "obs-ffmpeg/nvenc: Remove "default" preset"
136
+  * UI: Fix tooltip for "prefer hardware encoding"
137
+
138
+-------------------------------------------------------------------
139
 Tue May 02 19:05:40 UTC 2017 - jimmy@boombatower.com
140
 
141
 - Update to version 18.0.2:
142
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        18.0.2
4
+Version:        19.0.2
5
 Release:        0
6
 Summary:        A recording/broadcasting program
7
 
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/18.0.2</param>
6
+    <param name="revision">refs/tags/19.0.2</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">4684294bcd53193f4227fb31214a6417fdcd2b97</param>
6
+    <param name="changesrevision">870bf6b6fca2940f8cf37f10339564d393ac41bf</param>
7
   </service>
8
 </servicedata>
9
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/bg-BG.ini Deleted
8
 
1
@@ -1,6 +0,0 @@
2
-AMF.Util.Default="По подразбиране"
3
-AMF.Util.Manual="Ръчно"
4
-AMF.H264.Profile="Профил"
5
-AMF.H264.View.Advanced="Разширения"
6
-AMF.H264.Debug="Дебъг"
7
-
8
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/el-GR.ini Deleted
4
 
1
@@ -1,2 +0,0 @@
2
-AMF.H264.Profile="Προφίλ"
3
-
4
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/hr-HR.ini Deleted
35
 
1
@@ -1,33 +0,0 @@
2
-AMF.Util.Default="Podrazumevano"
3
-AMF.Util.Automatic="Automatski"
4
-AMF.Util.Toggle.Disabled="Onemogućeno"
5
-AMF.Util.Toggle.Enabled="Omogućeno"
6
-AMF.H264.Usage.Transcoding="Transkodiranje"
7
-AMF.H264.Usage.UltraLowLatency="Ultra nisko kašnjenje"
8
-AMF.H264.Usage.LowLatency="Nisko kašnjenje"
9
-AMF.H264.QualityPreset="Šablon kvaliteta"
10
-AMF.H264.QualityPreset.Speed="Brzina"
11
-AMF.H264.QualityPreset.Balanced="Izbalansirano"
12
-AMF.H264.QualityPreset.Quality="Kvalitet"
13
-AMF.H264.Profile="Profil"
14
-AMF.H264.ProfileLevel="Nivo profila"
15
-AMF.H264.RateControlMethod="Metoda kontrole protoka"
16
-AMF.H264.RateControlMethod.CQP="Konstantan kvalitet (CQP)"
17
-AMF.H264.RateControlMethod.CBR="Konstantan protok (CBR)"
18
-AMF.H264.RateControlMethod.VBR.Peak="Promenjivi protok (sa gornjom granicom) (VBR)"
19
-AMF.H264.RateControlMethod.VBR.Latency="Promenjivi protok (sa granicom kašnjenja) (VBR_LAT)"
20
-AMF.H264.Bitrate.Target="Ciljani protok"
21
-AMF.H264.Bitrate.Peak="Granica protoka"
22
-AMF.H264.QP.Minimum="Minimalni QP"
23
-AMF.H264.QP.Maximum="Maksimalni QP"
24
-AMF.H264.QP.IFrame="I-Frejm QP"
25
-AMF.H264.QP.PFrame="P-Frejm QP"
26
-AMF.H264.QP.BFrame="B-Frejm QP"
27
-AMF.H264.FillerData="Data za popunjavanje"
28
-AMF.H264.FrameSkipping="Preskakanje frejmova"
29
-AMF.H264.EnforceHRDCompatibility="Prisilna HRD kompatibilnost"
30
-AMF.H264.DeblockingFilter="Odblokirajući filter"
31
-AMF.H264.ScanType="Vrsta skeniranja"
32
-AMF.H264.ScanType.Progressive="Progresivno"
33
-AMF.H264.ScanType.Interlaced="Isprekidano"
34
-
35
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/sk-SK.ini Deleted
9
 
1
@@ -1,7 +0,0 @@
2
-AMF.H264.Preset="Predvoľba"
3
-AMF.H264.Preset.ResetToDefaults="Obnoviť predvolené"
4
-AMF.H264.Preset.HighQuality="Vysoká kvalita"
5
-AMF.H264.Preset.Twitch="Twitch"
6
-AMF.H264.Preset.YouTube="YouTube"
7
-AMF.H264.Profile="Profil"
8
-
9
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/sr-SP.ini Deleted
35
 
1
@@ -1,33 +0,0 @@
2
-AMF.Util.Default="Подразумевано"
3
-AMF.Util.Automatic="Аутоматски"
4
-AMF.Util.Toggle.Disabled="Онемогућено"
5
-AMF.Util.Toggle.Enabled="Омогућено"
6
-AMF.H264.Usage.Transcoding="Транскодирање"
7
-AMF.H264.Usage.UltraLowLatency="Ултра ниско кашњење"
8
-AMF.H264.Usage.LowLatency="Ниско кашњење"
9
-AMF.H264.QualityPreset="Шаблон квалитета"
10
-AMF.H264.QualityPreset.Speed="Брзина"
11
-AMF.H264.QualityPreset.Balanced="Избалансирано"
12
-AMF.H264.QualityPreset.Quality="Квалитет"
13
-AMF.H264.Profile="Профил"
14
-AMF.H264.ProfileLevel="Ниво профила"
15
-AMF.H264.RateControlMethod="Метода контроле протока"
16
-AMF.H264.RateControlMethod.CQP="Константан квалитет (CQP)"
17
-AMF.H264.RateControlMethod.CBR="Константан проток (CBR)"
18
-AMF.H264.RateControlMethod.VBR.Peak="Промењиви проток (са горњом границом) (VBR)"
19
-AMF.H264.RateControlMethod.VBR.Latency="Промењиви проток (са границом кашњења) (VBR_LAT)"
20
-AMF.H264.Bitrate.Target="Циљани проток"
21
-AMF.H264.Bitrate.Peak="Граница протока"
22
-AMF.H264.QP.Minimum="Минимални QP"
23
-AMF.H264.QP.Maximum="Максимални QP"
24
-AMF.H264.QP.IFrame="I-Фрејм QP"
25
-AMF.H264.QP.PFrame="P-Фрејм QP"
26
-AMF.H264.QP.BFrame="B-Фрејм QP"
27
-AMF.H264.FillerData="Подаци за попуњавање"
28
-AMF.H264.FrameSkipping="Прескакање фрејмова"
29
-AMF.H264.EnforceHRDCompatibility="Присилна HRD компатибилност"
30
-AMF.H264.DeblockingFilter="Одблокирајући филтер"
31
-AMF.H264.ScanType="Врста скенирања"
32
-AMF.H264.ScanType.Progressive="Прогресивно"
33
-AMF.H264.ScanType.Interlaced="Испрекидано"
34
-
35
obs-studio-18.0.2.tar.xz/AUTHORS -> obs-studio-19.0.2.tar.xz/AUTHORS Changed
327
 
1
@@ -7,19 +7,20 @@
2
 BtbN
3
 John Bradley
4
 Gol-D-Ace
5
-Colin Edwards
6
 Richard Stanway
7
+Colin Edwards
8
 Zachary Lund
9
 Michael Fabian Dirks
10
 Martell Malone
11
+cg2121
12
 Christoph Hohmann
13
 HomeWorld
14
-cg2121
15
 dodgepong
16
-derrod
17
 Ryan Foster
18
+derrod
19
 Radzaquiel
20
 Socapex
21
+juvester
22
 Skyler Lipthay
23
 SuslikV
24
 Arkkis
25
@@ -29,13 +30,14 @@
26
 Jess Mayo
27
 Kris Moore
28
 Carl Fürstenberg
29
-juvester
30
 Anry
31
 CoDEmanX
32
 Ján Mlynek
33
+Kurt Kartaltepe
34
 Manuel Kroeber
35
 sorayuki
36
 Alexandre Vicenzi
37
+Andrew Surzhynskyi
38
 Benjamin Klettbach
39
 bl
40
 Bl00drav3n
41
@@ -44,21 +46,21 @@
42
 Jeremiah Senkpiel
43
 John R. Bradley
44
 Kilian von Pflugk
45
+mntone
46
 Serge Paquet
47
 shiina424
48
 shousa
49
 Timo Gurr
50
 adray
51
 Andrei Nistor
52
-Andrew Surzhynskyi
53
 Azat Khasanshin
54
 Ben Torell
55
 bootkiller
56
 Brian S. Stephan
57
+e00E
58
 Eric Bataille
59
 Joseph El-Khouri
60
 jpk
61
-Kurt Kartaltepe
62
 Lexsus
63
 Lionheart Zhang
64
 paibox
65
@@ -89,6 +91,8 @@
66
 Cam
67
 CommanderRoot
68
 Copy Liu
69
+craftwar
70
+Cray Elliott
71
 cryptonaut
72
 Dan Dascalescu
73
 David Cooper
74
@@ -105,6 +109,7 @@
75
 Gökberk Yaltıraklı
76
 Haden F
77
 Iblis Lin
78
+Igor Bochkariov
79
 Jake Probst
80
 Jamy Timmermans
81
 Jimmy Berry
82
@@ -134,8 +139,10 @@
83
 Nicolas F
84
 Night
85
 Olle Kelderman
86
+Palakis
87
 pantonvich
88
 partouf
89
+Patrick Ancillotti
90
 Peter SZTANOJEV
91
 pipll
92
 raincomplex
93
@@ -147,11 +154,15 @@
94
 sam8641
95
 Seth Murphy
96
 Seung-Woo Kim
97
+Shamun
98
+Shaolin
99
 Simon
100
+SoraYuki
101
 Teemu Kauhanen
102
 thekrzos
103
 Thomas McGrew
104
 TotalCaesar659
105
+trwnh
106
 vic
107
 vividnightmare
108
 VodBox
109
@@ -182,6 +193,8 @@
110
     etxondoko
111
     Gol D. Ace (goldace)
112
     dodgepong
113
+Bengali
114
+    shamuntohamd
115
 Bulgarian
116
     kalmarin
117
     Seyhan Halil (yildirim17)
118
@@ -205,6 +218,8 @@
119
     copyliu
120
     wwj402_github
121
     Bing Feng (fengbing123)
122
+    Hexcolyte
123
+    Gol D. Ace (goldace)
124
     dodgepong
125
     WaterOtaku
126
 Chinese Traditional
127
@@ -217,7 +232,10 @@
128
     Inndy.Lin (inndy)
129
     Meng Hao Li (GazCore)
130
     Gol D. Ace (goldace)
131
+    Wingo Chan (wingo19932003)
132
+    ak-47root
133
     Watson Tsai (ashaneba)
134
+    Han-Jen Cheng (notexist)
135
     cai_miao
136
     Jimmy Huang (f56112000)
137
     chaironeko
138
@@ -233,9 +251,9 @@
139
     Kiznoh
140
 Danish
141
     Jens Hyllegaard (Hyllegaard)
142
+    NCAA
143
     Anders G. Jørgensen (spirit55555)
144
     MaltahlGaming (maltahlgaming)
145
-    NCAA
146
     Anders Urban (minikaliffen)
147
     Christian Henriksen (cnhenriksen)
148
     Gol D. Ace (goldace)
149
@@ -243,34 +261,43 @@
150
 Dutch
151
     Eric Bataille (ThoNohT)
152
     Michel Snippe (michelsnippe)
153
-    Nicole (NIsengo)
154
+    Greendweller
155
+    robbert0891 (robbertoorschot38)
156
+    Nicole (Dutchess_Nicole)
157
     Jasper J (JassieJ)
158
     Gol D. Ace (goldace)
159
+    Bo Alsemgeest (bo.alsemgeest.wausie)
160
     JorRy
161
+    Julian Meijboom (julianmeijboom)
162
+    markpc
163
 Estonian
164
     MartinEwing
165
     AndresTraks
166
 Finnish
167
     ArkkisN (j)
168
-    dodgepong
169
     Jarska
170
-    Jarppi (Jarppi01)
171
+    dodgepong
172
+    Obama (Obama44)
173
     Gol D. Ace (goldace)
174
     chaironeko
175
 French
176
     radzaquiel
177
-    Yberion
178
     Nunzio Conte (nunzioconte54)
179
-    Stéphane Lepin (Palakis)
180
+    Yberion
181
     Léo (leeo97one)
182
+    Stéphane Lepin (Palakis)
183
     DoK_-
184
     BoboopTeam
185
     DarkInFire
186
+    Ben Turner (ben-turner)
187
     steve_fr
188
     Grisou2907
189
+    Theguiguix
190
     McGuygnol
191
     Gabriel Dugny (Gabigabigo)
192
     Gol D. Ace (goldace)
193
+    GANGAT Naeem (zboggum)
194
+    kyllian (tardigradeus)
195
     dodgepong
196
     chaironeko
197
 Galician
198
@@ -288,12 +315,12 @@
199
     Dennis Giebert (Isegrim) (isegrimderwolf)
200
     Jonathan (macburgerjunior)
201
     Robin Hielscher (Jack0r)
202
+    Tim (robske_110) (robske110)
203
     BoJustus
204
     Jonas Otto (jottosmail)
205
     mdod
206
     Prince_of_Raop
207
     Tiim
208
-    Tim (robske_110) (robske110)
209
     WurstOnAir
210
 Greek
211
     Mepharees
212
@@ -306,6 +333,8 @@
213
     amirsher
214
     Chemi
215
     epic_ziver_D
216
+Hindi
217
+    shamuntohamd
218
 Hungarian
219
     Gige
220
     Adam Liszkai (adamos42)
221
@@ -314,13 +343,13 @@
222
 Italian
223
     LordShadow95
224
     Marocco2
225
+    smart2128
226
     dodgepong
227
     Edoardo Macrì (edomacri)
228
-    smart2128
229
     Edoardo “OfficialDJMela” Macrì (agersforum)
230
     ScemEnzo
231
-    Fisherozzo
232
     Gol D. Ace (goldace)
233
+    Fisherozzo
234
     Sergio Beneduce (sbeneduce)
235
     SkyLion
236
 Japanese
237
@@ -344,9 +373,10 @@
238
     Tommy (nwgat)
239
     Oddbjørn Grytdal (Fooshi)
240
     Decicus
241
+    Sander Skjegstad (r530er)
242
+    Legend27
243
     Gol D. Ace (goldace)
244
     areedw
245
-    Legend27
246
     chaironeko
247
     Mats Andreassen (MatsA)
248
 Pirate English
249
@@ -371,17 +401,18 @@
250
     joaoboia
251
     Gol D. Ace (goldace)
252
 Portuguese, Brazilian
253
+    Shaolin (admshao)
254
     Ramon Mendes (rbrgameplays)
255
     Fabio Madia (Shaolin)
256
-    Burkes
257
     TFSThiagoBR98
258
     CaioWzy
259
     clr0dr1g
260
+    mizifih
261
     aalonsomb
262
     André Gama (ToeOficial)
263
     Gol D. Ace (goldace)
264
-    dodgepong
265
     ThisGuy
266
+    dodgepong
267
 Romanian
268
     Cristian Silaghi (stelistcristi)
269
     banrek
270
@@ -396,12 +427,12 @@
271
     dodgepong
272
     Pavel (Shevalie)
273
     Maxim Gribanov (MaximGribanov)
274
+    Bugo
275
     Andy (anry025)
276
     fromgate
277
     Gol D. Ace (goldace)
278
     Andrei Stepanov (adem4ik)
279
     Vlad (KoTmaxHo)
280
-    Bugo
281
     Mixaill
282
     Sergei Fug1t1v3 (fug)
283
     Walt Gee (vovanych)
284
@@ -418,17 +449,19 @@
285
     Ján M (longmoped)
286
     Anton Lokaj (anlo)
287
     LoLLy Nka (lollynka279)
288
+    Gol D. Ace (goldace)
289
 Slovenian
290
     kristjan.krusic (krusic22)
291
-    ArcaneWater
292
     Gol D. Ace (goldace)
293
+    ArcaneWater
294
     dodgepong
295
 Spanish
296
     Roberto Lorenzo (HonzoNebro)
297
-    Marcos Vidal Martinez (M4RK22)
298
     Jaime Martinez Rincon (mrjaime1999)
299
+    Marcos Vidal Martinez (M4RK22)
300
     Jaime Muñoz Martín (jmmartin_5)
301
     Maximiliano Schtroumpftech Pena-Roig (som2tokmynam)
302
+    Ruben Deig Ramos (rdeigramos)
303
     Eleazar Córcoles (MtrElee3)
304
     Gol D. Ace (goldace)
305
     Sigge Stjärnholm (Kladdy)
306
@@ -453,6 +486,7 @@
307
     盛凤阁 (execzero)
308
     nongnoobjung (kitcharuk_4)
309
     dodgepong
310
+    Gol D. Ace (goldace)
311
 Turkish
312
     Ali Kömesöğütlü (Mobile46) (byzlo685)
313
     omer.karagoz (mrkaragoz)
314
@@ -469,9 +503,11 @@
315
     Юрій (Devinit)
316
     Andy (anry025)
317
     Maksym Tymoshyk (maximillian_)
318
+Urdu (Pakistan)
319
+    shamuntohamd
320
 Vietnamese
321
     Johnny “max20091” Utah (boostyourprogram)
322
     Hưng Nguyễn (hoyostudio)
323
     Hà Phi Hùng (haphihungcom)
324
+    Gol D. Ace (goldace)
325
     dodgepong
326
-    NCAA
327
obs-studio-18.0.2.tar.xz/CI/before-deploy-win.cmd -> obs-studio-19.0.2.tar.xz/CI/before-deploy-win.cmd Changed
8
 
1
@@ -1,3 +1,3 @@
2
-xcopy /e C:\projects\obs-studio\build32\rundir\RelWithDebInfo C:\projects\obs-studio\build\
3
-robocopy C:\projects\obs-studio\build64\rundir\RelWithDebInfo C:\projects\obs-studio\build\ /E /XC /XN /XO
4
+robocopy C:\projects\obs-studio\build32\rundir\RelWithDebInfo C:\projects\obs-studio\build\ /E /XF .gitignore
5
+robocopy C:\projects\obs-studio\build64\rundir\RelWithDebInfo C:\projects\obs-studio\build\ /E /XC /XN /XO /XF .gitignore
6
 7z a build.zip C:\projects\obs-studio\build\*
7
\ No newline at end of file
8
obs-studio-18.0.2.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-19.0.2.tar.xz/CI/install-dependencies-osx.sh Changed
47
 
1
@@ -1,14 +1,17 @@
2
 # Exit if something fails
3
 set -e
4
 
5
-git fetch --tags
6
+# Echo all commands before executing
7
+set -v
8
+
9
+git fetch --unshallow
10
 
11
 # Leave obs-studio folder
12
 cd ../
13
 
14
 # Install Packages app so we can build a package later
15
 # http://s.sudre.free.fr/Software/Packages/about.html
16
-curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg -f --retry 5 -C -
17
+wget --retry-connrefused --waitretry=1 https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg
18
 sudo installer -pkg ./Packages.pkg -target /
19
 
20
 brew update
21
@@ -20,21 +23,21 @@
22
 ccache -s || echo "CCache is not available."
23
 
24
 # Fetch and untar prebuilt OBS deps that are compatible with older versions of OSX
25
-curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/osx-deps.tar.gz -f --retry 5 -C -
26
+wget --retry-connrefused --waitretry=1 https://s3-us-west-2.amazonaws.com/obs-nightly/osx-deps.tar.gz
27
 tar -xf ./osx-deps.tar.gz -C /tmp
28
 
29
 # Fetch vlc codebase
30
-curl -L -o vlc-master.zip https://github.com/videolan/vlc/archive/master.zip -f --retry 5 -C -
31
+wget --retry-connrefused --waitretry=1 -O vlc-master.zip https://github.com/videolan/vlc/archive/master.zip
32
 unzip -q ./vlc-master.zip
33
 
34
 # Get sparkle
35
-curl -L -o ./sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/1.16.0/Sparkle-1.16.0.tar.bz2
36
+wget --retry-connrefused --waitretry=1 -O sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/1.16.0/Sparkle-1.16.0.tar.bz2
37
 mkdir ./sparkle
38
 tar -xf ./sparkle.tar.bz2 -C ./sparkle
39
 sudo cp -R ./sparkle/Sparkle.framework /Library/Frameworks/Sparkle.framework
40
 
41
 # CEF Stuff
42
-curl -kLO https://obs-nightly.s3-us-west-2.amazonaws.com/cef_binary_${CEF_BUILD_VERSION}_macosx64.tar.bz2 -f --retry 5 -C -
43
+wget --retry-connrefused --waitretry=1 https://obs-nightly.s3-us-west-2.amazonaws.com/cef_binary_${CEF_BUILD_VERSION}_macosx64.tar.bz2
44
 tar -xf ./cef_binary_${CEF_BUILD_VERSION}_macosx64.tar.bz2
45
 cd ./cef_binary_${CEF_BUILD_VERSION}_macosx64
46
 mkdir build
47
obs-studio-18.0.2.tar.xz/CI/install/osx/obs.png -> obs-studio-19.0.2.tar.xz/CI/install/osx/obs.png Changed
obs-studio-18.0.2.tar.xz/UI/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/UI/CMakeLists.txt Changed
41
 
1
@@ -131,12 +131,15 @@
2
    obs-app.cpp
3
    api-interface.cpp
4
    window-basic-main.cpp
5
+   window-basic-stats.cpp
6
    window-basic-filters.cpp
7
    window-basic-settings.cpp
8
    window-basic-interaction.cpp
9
    window-basic-properties.cpp
10
+   window-basic-auto-config.cpp
11
    window-basic-main-outputs.cpp
12
    window-basic-source-select.cpp
13
+   window-basic-auto-config-test.cpp
14
    window-basic-main-scene-collections.cpp
15
    window-basic-main-transitions.cpp
16
    window-basic-main-dropfiles.cpp
17
@@ -177,10 +180,12 @@
18
    platform.hpp
19
    window-main.hpp
20
    window-basic-main.hpp
21
+   window-basic-stats.hpp
22
    window-basic-filters.hpp
23
    window-basic-settings.hpp
24
    window-basic-interaction.hpp
25
    window-basic-properties.hpp
26
+   window-basic-auto-config.hpp
27
    window-basic-main-outputs.hpp
28
    window-basic-source-select.hpp
29
    window-license-agreement.hpp
30
@@ -217,6 +222,10 @@
31
 
32
 set(obs_UI
33
    forms/NameDialog.ui
34
+   forms/AutoConfigStartPage.ui
35
+   forms/AutoConfigVideoPage.ui
36
+   forms/AutoConfigStreamPage.ui
37
+   forms/AutoConfigTestPage.ui
38
    forms/OBSLicenseAgreement.ui
39
    forms/OBSLogReply.ui
40
    forms/OBSBasic.ui
41
obs-studio-18.0.2.tar.xz/UI/data/locale.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale.ini Changed
18
 
1
@@ -119,4 +119,13 @@
2
 Name=Lietuvių kalba
3
 
4
 [et-EE]
5
-Name=eesti keel
6
\ No newline at end of file
7
+Name=eesti keel
8
+
9
+[bn-BD]
10
+Name=বাংলা ভাষা
11
+
12
+[hi-IN]
13
+Name=हिन्दी
14
+
15
+[ur-PK]
16
+Name=اردو
17
\ No newline at end of file
18
obs-studio-18.0.2.tar.xz/UI/data/locale/ar-SA.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ar-SA.ini Changed
19
 
1
@@ -50,6 +50,12 @@
2
 Bottom="أسفل"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="التبديل بين مشهدي المعاينة و الاخراج بعد عملية الانتقال"
12
 QuickTransitions.SwapScenesTT="يقوم بتبديل مشهد المعاينة مع مشهد الاخراج بعد عملية الانتقال بين المشاهد (اذا كان مشهد الاخراج الاصلي لازال موجوداً) \n هذا لن يقوم بالتراجع عن اي تغييرات قمت بها على مشهد الاخراج الأصلي."
13
 QuickTransitions.DuplicateScene="استنساخ المشهد"
14
@@ -364,3 +370,4 @@
15
 
16
 
17
 
18
+
19
obs-studio-18.0.2.tar.xz/UI/data/locale/bg-BG.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/bg-BG.ini Changed
19
 
1
@@ -46,6 +46,12 @@
2
 
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 TitleBar.Profile="Профил"
12
 TitleBar.Scenes="Сцени"
13
 
14
@@ -302,3 +308,4 @@
15
 
16
 
17
 
18
+
19
obs-studio-19.0.2.tar.xz/UI/data/locale/bn-BD.ini Added
563
 
1
@@ -0,0 +1,561 @@
2
+
3
+Language="ইংরাজী"
4
+Region="মার্কিন যুক্তরাষ্ট্র"
5
+
6
+OK="ঠিক আছে"
7
+Apply="প্রয়োগ করুন"
8
+Cancel="বাতিল করুন"
9
+Close="বন্ধ করুন"
10
+Save="সংরক্ষণ করুন"
11
+Discard="অগ্রাহ্য"
12
+Disable="নিষ্ক্রিয়"
13
+Yes="হা"
14
+No="না"
15
+Add="যোগ"
16
+Remove="বাতিল"
17
+Rename="পুনঃনামকরণ"
18
+Interact="যোগাযোগ"
19
+Filters="ফিল্টার"
20
+Properties="প্যারামিটারসমূহ"
21
+MoveUp="উপরে উঠান"
22
+MoveDown="নিচে নামান"
23
+Settings="সেটিংস"
24
+Display="প্রদর্শন"
25
+Name="নাম"
26
+Exit="প্রস্থান করুন"
27
+Mixer="মিক্সার"
28
+Browse="ব্রাউজ"
29
+Mono="মোনো"
30
+Stereo="স্টিরিও"
31
+DroppedFrames="ছেড়ে দেওয়া ফ্রেমসমূহ %1 (%2 শতাংশ)"
32
+PreviewProjector="পূর্ণ পর্দা জুড়ে প্রোজেক্টর (প্রিভিউ)"
33
+SceneProjector="পূর্ণ পর্দা জুড়ে প্রোজেক্টর (দৃশ্য)"
34
+SourceProjector="পূর্ণ পর্দা জুড়ে প্রোজেক্টর (সূত্র)"
35
+Clear="পরিষ্কার"
36
+Revert="প্রত্যাবর্তন"
37
+Show="প্রদর্শন করা হবে"
38
+Hide="সরিয়ে রাখ"
39
+Untitled="শিরোনামহীন"
40
+New="নতুন"
41
+Duplicate="প্রতিলিপি"
42
+Enable="সচল"
43
+DisableOSXVSync="OSX ভি-সমকালীন নিষ্ক্রিয় করা হবে"
44
+ResetOSXVSyncOnExit="প্রস্থান করার সময় ভি-সমকালীন OSX রিসেট করুন"
45
+HighResourceUsage="এনকোডিং overloaded!  ভিডিও সেটিংস ডাউন বাঁক বা দ্রুত এনকোডিং প্রিসেট ব্যবহার করে বিবেচনা করুন."
46
+Transition="স্থানান্তর"
47
+QuickTransitions="দ্রুত অবস্থান্তর"
48
+Left="বামদিকে"
49
+Right="ডানদিকে"
50
+Top="শীর্ষ"
51
+Bottom="নিচে"
52
+Reset="পুনরায় ধার্য করুন"
53
+Hours="ঘন্টা"
54
+Minutes="মিনিট"
55
+Seconds="সেকেন্ড"
56
+Deprecated="অবচিত"
57
+ReplayBuffer="রিপ্লে বাফার"
58
+Import="ডাটা ইম্পোর্ট"
59
+Export="ডাটা এক্সপোর্ট"
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+Updater.Title="নতুন আপডেট পাওয়া যাবে"
68
+Updater.Text="নতুন হালনাগাদ সুপ্রাপ্য নয়:"
69
+Updater.UpdateNow="এখনই হালনাগাদ করুন"
70
+Updater.RemindMeLater="আমাকে পরে স্মরন করিয়ে দিন"
71
+Updater.Skip="এড়িয়ে যান সংস্করণ"
72
+Updater.Running.Title="বর্তমানে সক্রিয় কার্যক্রম"
73
+Updater.Running.Text="এর ফলাফলও বর্তমানে সক্রিয়। দয়া করে আপডেট করার চেষ্টা আগে কোনো সক্রিয় এর ফলাফলও বন্ধ"
74
+Updater.NoUpdatesAvailable.Title="কোন আধুনিকীকরণ উপলভ্য"
75
+Updater.NoUpdatesAvailable.Text="কোন আধুনিকীকরণ বর্তমানে পাওয়া যায়।"
76
+Updater.FailedToLaunch="হালনাগাদকারী আরম্ভ করতে ব্যর্থ"
77
+Updater.GameCaptureActive.Title="খেলার অধিগ্রহণ সক্রিয়"
78
+Updater.GameCaptureActive.Text="খেলার অধিগ্রহণ হুক লাইব্রেরী বর্তমানে ব্যবহার করা হচ্ছে।  দয়া করে দখল করা কোন গেম/প্রোগ্রাম বন্ধ করুন (অথবা windows পুনর্সূচনা করুন) এবং পুনরায় চেষ্টা করুন."
79
+
80
+QuickTransitions.SwapScenes="প্রাক-দৃশ্য/আউটপুট দৃশ্য হলে পরে প্রক্রিয়াতে অদলবদল"
81
+QuickTransitions.SwapScenesTT="যদি (আউটপুট মূল দৃশ্য এখনো বিদ্যমান আছে) প্রাক্-বীক্ষণ এবং আউটপুট দৃশ্য হলে পরে প্রক্রিয়াতে swaps। \nThis যে আউটপুট মূল দৃশ্যের জন্য তৈরি করা হয়েছে যাতে কোন পরিবর্তন বাতিল হবে না."
82
+QuickTransitions.DuplicateScene="অনুরূপ দৃশ্য"
83
+QuickTransitions.DuplicateSceneTT="একই দৃশ্য সম্পাদনা করতে পারবেন আউটপুট। \nTo উত্স সম্পাদনা বৈশিষ্ট্য আউটপুট পরিবর্তন ছাড়াই পরিবর্তন ছাড়াই রূপান্তর/দৃশ্যমানতা উৎস সম্পাদনা, অনুরূপ উৎস সক্রিয় করা হবে। \nChanging এই মান হবে রিসেট আউটপুট দৃশ্য বর্তমান থাকে (এটা এখনও আছে)."
84
+QuickTransitions.EditProperties="উৎসের অনুলিপি"
85
+QuickTransitions.EditPropertiesTT="সূত্র বৈশিষ্ট্য সম্পাদনা ছাড়া অনুরূপ দৃশ্য সক্রিয় হলে আউটপুট। \nThis পরিবর্তন কেবল ব্যবহার করা যেতে পারে অনুমতি দেয়, যখন একই দৃশ্যের এডিটিং,। \nCertain সূত্র (যেমন ধারণ বা প্রচার মাধ্যম) এটি সমর্থন করে না এবং আলাদাভাবে সম্পাদনা করা যাবে না। \nChanging এই মূল্য বর্তমান আউটপুট দৃশ্য পুনর্বিন্যাস করবে (যদি exists).\n\nWarning এখনো: উৎস duplicated করা হবে কারন -এর অতিরিক্ত সিস্টেম বা ভিডিও সম্পদ প্রয়োজন হতে পারে."
86
+QuickTransitions.HotkeyName="দ্রুত পরিবর্তন: %1"
87
+
88
+Basic.AddTransition="কনফিগার রূপান্তরণ যোগ করুন"
89
+Basic.RemoveTransition="কনফিগার অবস্থান্তর অপসারণ করুন"
90
+Basic.TransitionProperties="কোনও পরিবর্তন ঘটলে স্থানীয় বৈশিষ্ট্য"
91
+Basic.SceneTransitions="ঘটনাস্থলে অবস্থান্তর"
92
+Basic.TransitionDuration="সময়কাল"
93
+Basic.TogglePreviewProgramMode="স্টুডিও মোড"
94
+
95
+TransitionNameDlg.Text="কোনও পরিবর্তন ঘটলে স্থানীয় নাম লিখুন"
96
+TransitionNameDlg.Title="কোনও পরিবর্তন ঘটলে স্থানীয় নাম"
97
+
98
+TitleBar.Profile="প্রোফাইল"
99
+TitleBar.Scenes="দৃশ্য"
100
+
101
+NameExists.Title="নামটি ইতোমধ্যেই বিদ্যমান"
102
+NameExists.Text="নামটি ইতোমধ্যে ব্যবহৃত হচ্ছে."
103
+
104
+NoNameEntered.Title="একটি বৈধ বয়স লিখুন।"
105
+NoNameEntered.Text="তুমি খালি নাম ব্যবহার করতে পারবেন."
106
+
107
+ConfirmStart.Title="ধারা শুরু হয়?"
108
+ConfirmStart.Text="আপনি কি নিশ্চিত যে আপনি ধারা সূচনা করতে চান?"
109
+
110
+ConfirmStop.Title="স্রোত বন্ধ করতে?"
111
+ConfirmStop.Text="আপনি কি নিশ্চিত যে আপনি ধারা সূচনা করতে চান?"
112
+
113
+ConfirmExit.Title="OBS প্রস্থান করুন?"
114
+ConfirmExit.Text="OBS বর্তমানে সক্রিয় আছে।  সব নদী/রেকর্ডিং বন্ধ হয়ে যাবে।  আপনি কি নিশ্চিত যে আপনি প্রস্থান করতে চান?"
115
+
116
+ConfirmRemove.Title="টেমপ্লেট সংরক্ষণ করো"
117
+ConfirmRemove.Text="আপনি কি নিশ্চিত যে আপনি '$1' মুছে ফেলতে চান?"
118
+ConfirmRemove.TextMultiple="আপনি কি নিশ্চিত যে আপনি %1 আইটেম অপসারণ করতে চান?"
119
+
120
+Output.StartStreamFailed="স্ট্রীমিং চালু করতে ব্যর্থ হয়েছে"
121
+Output.StartRecordingFailed="রেকর্ড আরম্ভ করতে ব্যর্থ"
122
+Output.StartReplayFailed="রিপ্লে বাফার আরম্ভ করতে ব্যর্থ"
123
+Output.StartFailedGeneric="আউটপুট শুরু করতে ব্যর্থ হয়েছে।  Details.\n\nNote জন্য লগ চেক করুন: NVENC অথবা এএমডি encoders ব্যবহার করলে আপনার ভিডিও ড্রাইভার আপ-টু-ডেট রয়েছে নিশ্চিত করুন."
124
+
125
+Output.ConnectFail.Title="সংযোগ করতে ব্যর্থ হয়েছে"
126
+Output.ConnectFail.BadPath="ত্রুটিপূর্ণ URL পথ বা সংযোগ।  দয়া করে সেগুলো কার্যকর নিশ্চিত করতে আপনার সেটিংস চেক করুন."
127
+Output.ConnectFail.ConnectFailed="সার্ভারের সাথে সংযোগ স্থাপন করতে ব্যর্থ"
128
+Output.ConnectFail.InvalidStream="উল্লেখিত চ্যানেল বা ধারা কী, এ প্রবেশ করা যাচ্ছে না দয়া করে আপনার স্ট্রিম কী পরীক্ষা।  যদি সঠিক হয়, সমস্যা হতে পারে সার্ভারের সাথে সংযোগ স্থাপন করা হচ্ছে."
129
+Output.ConnectFail.Error="সার্ভারের সাথে সংযোগ করার চেষ্টা করার সময় একটি অপ্রত্যাশিত ত্রুটি সংঘটিত হয়েছে।  লগ ফাইল আরও তথ্য."
130
+Output.ConnectFail.Disconnected="সার্ভার থেকে সংযোগ বিচ্ছিন্ন হয়েছে."
131
+
132
+Output.RecordFail.Title="রেকর্ড আরম্ভ করতে ব্যর্থ"
133
+Output.RecordFail.Unsupported="আউটপুট ফরম্যাট হয়। অসমর্থিত বা একাধিক অডিও ট্র্যাক সমর্থন করে না।  অনুগ্রহ করে আপনার সেটিংস পরীক্ষা করুন এবং আবার চেষ্টা করুন."
134
+Output.RecordNoSpace.Title="অপর্যাপ্ত ডিস্ক পরিসর"
135
+Output.RecordNoSpace.Msg="না চালিয়ে রেকর্ড করার জন্য পর্যাপ্ত ডিস্ক পরিসর নেই."
136
+Output.RecordError.Title="রেকর্ড করার ত্রুটির"
137
+Output.RecordError.Msg="রেকর্ড করার সময় একটি অনির্দিষ্ট ত্রুটি সংঘটিত হয়েছে."
138
+Output.ReplayBuffer.NoHotkey.Title="কোন hotkey সেট!"
139
+Output.ReplayBuffer.NoHotkey.Msg="কোন রিপ্লে বাফারের জন্য সেট hotkey ছাড়া।  \"সংরক্ষণ\" hotkey রিপ্লে রেকর্ডিং সংরক্ষণের জন্য ব্যবহার করতে সেট করুন."
140
+
141
+Output.BadPath.Title="খারাপ পার্ট অনুসন্ধানname"
142
+Output.BadPath.Text="কনফিগার ফাইল আউটপুট পথটি সঠিক নয়।  অনুগ্রহ করে একটি কার্যকর পথ তৈরি করা হয়েছে নিশ্চিত করতে, আপনার সেটিংস পরীক্ষা করুন."
143
+
144
+LogReturnDialog="সফলভাবে আপলোড লগ"
145
+LogReturnDialog.CopyURL="URL অনুলিপি করুন"
146
+LogReturnDialog.ErrorUploadingLog="লগ ফাইল আপলোড করা হচ্ছে সমস্যা"
147
+
148
+LicenseAgreement="লাইসেন্স চুক্তি"
149
+LicenseAgreement.PleaseReview="দয়া করে আগে OBS. ব্যবহার করে এই অনুজ্ঞা শর্তাবলী পর্যালোচনা করুন  এই প্রোগ্রামটি ব্যবহার করে আপনি যে আপনি পড়েছেন এবং <a href='http://www.gnu.org/licenses/gpl-2.0.html'> v2.0 GNU সাধারণ পাবলিক লাইসেন্সের</a> শর্তাবলীর সাথে সম্মত হচ্ছেন স্বীকার করেন।  অনুগ্রহ করে এই চুক্তির বাকি দেখার সংঘ."
150
+LicenseAgreement.ClickIAgreeToContinue="আপনি এই চুক্তির শর্তাদি স্বীকার করেন, আমি Agree অব্যাহত রাখার জন্য ক্লিক করুন।  আপনি OBS. ব্যবহার করতে এই চুক্তি স্বীকার করতে হবে."
151
+LicenseAgreement.IAgree="আমি তোমাকে শ্রদ্ধা করি"
152
+LicenseAgreement.Exit="প্রস্থান করুন"
153
+
154
+Remux.SourceFile="OBS রেকর্ডিং"
155
+Remux.TargetFile="গন্তব্য ফাইল"
156
+Remux.Remux="Remux"
157
+Remux.OBSRecording="OBS রেকর্ডিং"
158
+Remux.FinishedTitle="Remuxing শেষ"
159
+Remux.Finished="Remuxed রেকর্ড"
160
+Remux.FinishedError="রেকর্ড remuxed, কিন্তু ফাইলটি অসম্পূর্ণ হতে পারে"
161
+Remux.SelectRecording="OBS রেকর্ডিং করুন …"
162
+Remux.SelectTarget="গন্তব্য ফাইল নির্বাচন করুন…"
163
+Remux.FileExistsTitle="লক্ষ্যবস্তু ফাইলটি বিদ্যমান"
164
+Remux.FileExists="লক্ষ্যবস্তু ফাইলটি বিদ্যমান, এটি প্রতিস্থাপন করতে চান?"
165
+Remux.ExitUnfinishedTitle="Remuxing অগ্রসর হচ্ছে"
166
+Remux.ExitUnfinished="Remuxing শেষ হয় না, এখন বন্ধ হতে পারে যেন গন্তব্য ফাইলটি ব্যবহারের অযোগ্য। আপনি কি নিশ্চিত যে আপনি remuxing বন্ধ করতে \nAre?"
167
+
168
+UpdateAvailable="নতুন আপডেট পাওয়া যাবে"
169
+UpdateAvailable.Text="সংস্করণ %1.%2.%3 পাওয়া যায়।  <a href='%4'> ডাউনলোড করতে এখানে ক্লিক করুন।</a>"
170
+
171
+Basic.DesktopDevice1="ডেস্কটপ অডিও"
172
+Basic.DesktopDevice2="ডেস্কটপ অডিও 2"
173
+Basic.AuxDevice1="মাইক/সহায়ক"
174
+Basic.AuxDevice2="মাইক/সহায়ক 2"
175
+Basic.AuxDevice3="মাইক/সহায়ক 3"
176
+Basic.AuxDevice4="মাইক/4 সহায়ক"
177
+
178
+Basic.Scene="দৃশ্য"
179
+Basic.DisplayCapture="অধিগ্রহণ প্রদর্শন করুন"
180
+
181
+Basic.Main.PreviewConextMenu.Enable="প্রাকদর্শন সক্রিয় করুন"
182
+
183
+ScaleFiltering="ফিল্টারিং এর আকার পরিবর্তন করো"
184
+ScaleFiltering.Point="বিন্দু"
185
+ScaleFiltering.Bilinear="Bilinear"
186
+ScaleFiltering.Bicubic="Bicubic"
187
+ScaleFiltering.Lanczos="Lanczos"
188
+
189
+Deinterlacing="Deinterlacing"
190
+Deinterlacing.Discard="অগ্রাহ্য"
191
+Deinterlacing.Retro="রেট্রো"
192
+Deinterlacing.Blend="মিশ্রণ"
193
+Deinterlacing.Blend2x="2 x মিশে"
194
+Deinterlacing.Linear="রৈখিক"
195
+Deinterlacing.Linear2x="রৈখিক 2 x"
196
+Deinterlacing.Yadif="Yadif"
197
+Deinterlacing.Yadif2x="Yadif 2 x"
198
+Deinterlacing.TopFieldFirst="প্রথম ক্ষেত্রে শীর্ষ"
199
+Deinterlacing.BottomFieldFirst="মাঠে প্রথমে নীচের"
200
+
201
+VolControl.SliderUnmuted="'%1'-এর জন্য ভলিয়ুম স্লাইডার: %2"
202
+VolControl.SliderMuted="'%1'-এর জন্য ভলিয়ুম স্লাইডার: %2 (বর্তমানে মিউট করা)"
203
+VolControl.Mute="কথা বলতে পারে '%1 '"
204
+VolControl.Properties="'%1'-এর জন্য বৈশিষ্ট্যসমূহ"
205
+
206
+Basic.Main.AddSceneDlg.Title="দৃশ্য যোগ করুন"
207
+Basic.Main.AddSceneDlg.Text="ঘটনাস্থলে নাম লিখুন"
208
+
209
+Basic.Main.DefaultSceneName.Text="ঘটনাস্থলে %1"
210
+
211
+Basic.Main.AddSceneCollection.Title="দৃশ্য সংগ্রহ যুক্ত করুন"
212
+Basic.Main.AddSceneCollection.Text="দৃশ্য সংগ্রহ নাম লিখুন"
213
+
214
+Basic.Main.RenameSceneCollection.Title="দৃশ্য সংগ্রহ পুনঃনামকরণ করুন"
215
+
216
+AddProfile.Title="প্রোফাইল যুক্ত করুন"
217
+AddProfile.Text="প্রোফাইলের নাম লিখুন"
218
+
219
+RenameProfile.Title="প্রোফাইল পুনঃনামকরণ করুন"
220
+
221
+Basic.Main.PreviewDisabled="প্রাক্-বীক্ষণ বর্তমানে নিষ্ক্রিয় করা হয়েছে"
222
+
223
+Basic.SourceSelect="সূত্র তৈরি/নির্বাচন করুন"
224
+Basic.SourceSelect.CreateNew="নতুন তৈরি করুন"
225
+Basic.SourceSelect.AddExisting="বর্তমান যুক্ত করুন"
226
+Basic.SourceSelect.AddVisible="উৎস করে প্রদর্শিত"
227
+
228
+Basic.PropertiesWindow="'%1'-এর জন্য বৈশিষ্ট্যসমূহ"
229
+Basic.PropertiesWindow.AutoSelectFormat="%1 (স্বয়ংনির্বাচন: %2)"
230
+Basic.PropertiesWindow.SelectColor="রঙ নির্বাচন করুন"
231
+Basic.PropertiesWindow.SelectFont="ফন্ট নির্বাচন করুন"
232
+Basic.PropertiesWindow.ConfirmTitle="বৈশিষ্ট্য পরিবর্তিত হয়েছে"
233
+Basic.PropertiesWindow.Confirm="এতে পরিবর্তন অসংরক্ষিত সংশোধনী রয়েছে।  আপনি তাদের রেখে দিতে চান?"
234
+Basic.PropertiesWindow.NoProperties="কোন বৈশিষ্ট্য সুপ্রাপ্য নয়"
235
+Basic.PropertiesWindow.AddFiles="ফাইল যোগ করুন"
236
+Basic.PropertiesWindow.AddDir="ডিরেক্টরিটি যোগ করুন"
237
+Basic.PropertiesWindow.AddURL="পথ/ইউআরএল যুক্ত করুন"
238
+Basic.PropertiesWindow.AddEditableListDir="\"%1\" ডিরেক্টরিটি যোগ করুন"
239
+Basic.PropertiesWindow.AddEditableListFiles="'%1 জন্য' ফাইলসমূহ যুক্ত করুন"
240
+Basic.PropertiesWindow.AddEditableListEntry="\"%1\" এন্ট্রি যোগ করো"
241
+Basic.PropertiesWindow.EditEditableListEntry="'%1' থেকে এন্ট্রি সম্পাদনা করুন"
242
+
243
+Basic.PropertiesView.FPS.Simple="FPS সাধারণ মানসমূহ"
244
+Basic.PropertiesView.FPS.Rational="যৌক্তিক FPS মান"
245
+Basic.PropertiesView.FPS.ValidFPSRanges="বৈধ FPS রেঞ্জ:"
246
+
247
+Basic.InteractionWindow="%1 সাথে মিথস্ক্রিয়া"
248
+
249
+Basic.StatusBar.Reconnecting="সংযোগ বিচ্ছিন্ন করে %2 (s) (%1 চেষ্টা) ইভেন্টটি পুনরায় সংযোগ করা হচ্ছে"
250
+Basic.StatusBar.AttemptingReconnect="পুনঃসংযোগের জন্য চেষ্টা করছে... (%1 প্রয়াস)"
251
+Basic.StatusBar.ReconnectSuccessful="প্রাইস সফল"
252
+Basic.StatusBar.Delay="বিলম্ব (সেকেন্ড%1)"
253
+Basic.StatusBar.DelayStartingIn="বিলম্ব (সেকেন্ড প্রতি %1 শুরু)"
254
+Basic.StatusBar.DelayStoppingIn="বিলম্ব (সেকেন্ড প্রতি %1 থামানো হচ্ছে)"
255
+Basic.StatusBar.DelayStartingStoppingIn="বিলম্ব (সেকেন্ড %1 বন্ধ, %2 সেকেন্ড থেকে শুরু)"
256
+
257
+Basic.Filters="ফিল্টার"
258
+Basic.Filters.AsyncFilters="অডিও/ভিডিও ফিল্টার"
259
+Basic.Filters.AudioFilters="অডিও ফিল্টার"
260
+Basic.Filters.EffectFilters="প্রভাব ফিল্টার"
261
+Basic.Filters.Title="জন্য '%1' ফিল্টার"
262
+Basic.Filters.AddFilter.Title="পরিশ্রুতক নাম"
263
+Basic.Filters.AddFilter.Text="দয়া করে ফিল্টার নাম নির্দিষ্টভাবে উল্লেখ করুন"
264
+
265
+Basic.TransformWindow="দৃশ্যে আইটেম রূপান্তর"
266
+Basic.TransformWindow.Position="অবস্থান"
267
+Basic.TransformWindow.Rotation="ঘুর্ণন"
268
+Basic.TransformWindow.Size="আকার"
269
+Basic.TransformWindow.Alignment="অবস্থান প্রান্তিককরণ"
270
+Basic.TransformWindow.BoundsType="লগ্ন বক্সে টাইপ করুন"
271
+Basic.TransformWindow.BoundsAlignment="বাক্স লগ্ন প্রান্তিককরণ"
272
+Basic.TransformWindow.Bounds="বাক্সের মাপ লগ্ন"
273
+Basic.TransformWindow.Crop="ক্রপ"
274
+
275
+Basic.TransformWindow.Alignment.TopLeft="উপরে বামে"
276
+Basic.TransformWindow.Alignment.TopCenter="উপরে কেন্দ্রে"
277
+Basic.TransformWindow.Alignment.TopRight="উপরে ডানে"
278
+Basic.TransformWindow.Alignment.CenterLeft="কেন্দ্র বাম"
279
+Basic.TransformWindow.Alignment.Center="কেন্দ্রে"
280
+Basic.TransformWindow.Alignment.CenterRight="কেন্দ্র ঠিক"
281
+Basic.TransformWindow.Alignment.BottomLeft="নিচে বামে"
282
+Basic.TransformWindow.Alignment.BottomCenter="নিচে কেন্দ্রে"
283
+Basic.TransformWindow.Alignment.BottomRight="নিচে ডানে"
284
+
285
+Basic.TransformWindow.BoundsType.None="কোন সীমা"
286
+Basic.TransformWindow.BoundsType.MaxOnly="সর্বোচ্চ সাইজ মাত্র"
287
+Basic.TransformWindow.BoundsType.ScaleInner="ভেতরের সীমা থেকে আকার পরিবর্তন করো"
288
+Basic.TransformWindow.BoundsType.ScaleOuter="বাইরের সীমা থেকে আকার পরিবর্তন করো"
289
+Basic.TransformWindow.BoundsType.ScaleToWidth="পাতার প্রস্থের মধ্যে সীমা আকার পরিবর্তন করো"
290
+Basic.TransformWindow.BoundsType.ScaleToHeight="সীমা উচ্চতা আকার পরিবর্তন করো"
291
+Basic.TransformWindow.BoundsType.Stretch="প্রসারিত করার সীমা"
292
+
293
+Basic.Main.AddSourceHelp.Title="উৎস যোগ করা যাচ্ছে না"
294
+Basic.Main.AddSourceHelp.Text="আপনি সূত্র যোগ করার নূন্যতম ১ দৃশ্য থাকতে হবে."
295
+
296
+Basic.Main.Scenes="দৃশ্য"
297
+Basic.Main.Sources="সোর্স"
298
+Basic.Main.Connecting="সংযোগ করা হচ্ছে..."
299
+Basic.Main.StartRecording="রেকর্ডিং শুরু করুন"
300
+Basic.Main.StartReplayBuffer="রিপ্লে বাফার শুরু"
301
+Basic.Main.StartStreaming="স্ট্রিমিং-এর শুরু"
302
+Basic.Main.StopRecording="রেকর্ডিং বন্ধ করুন"
303
+Basic.Main.StoppingRecording="রেকর্ড করা বন্ধ করা হচ্ছে..."
304
+Basic.Main.StopReplayBuffer="রিপ্লে বাফার বন্ধ"
305
+Basic.Main.StoppingReplayBuffer="রিপ্লে বাফার বন্ধ করা হচ্ছে..."
306
+Basic.Main.StopStreaming="স্ট্রিমিং বন্ধের"
307
+Basic.Main.StoppingStreaming="স্রোত বন্ধ হয়ে যাওয়ার..."
308
+Basic.Main.ForceStopStreaming="(অবকাশ বাতিল) Streaming বন্ধ"
309
+
310
+Basic.MainMenu.File="এবং ফাইল"
311
+Basic.MainMenu.File.Export="এবং এক্সপোর্ট করুন"
312
+Basic.MainMenu.File.Import="এবং আমদানি করুন"
313
+Basic.MainMenu.File.ShowRecordings="প্রদর্শন এবং রেকর্ডিং"
314
+Basic.MainMenu.File.Remux="রি ও মুক্স রেকর্ডিং"
315
+Basic.MainMenu.File.Settings="এবং সেটিংস"
316
+Basic.MainMenu.File.ShowSettingsFolder="বৈশিষ্ট্য ফোল্ডার প্রদর্শন করা হবে"
317
+Basic.MainMenu.File.ShowProfileFolder="প্রোফাইল ফোল্ডার প্রদর্শন করা হবে"
318
+Basic.MainMenu.AlwaysOnTop="&সবসময় চালু শীর্ষে"
319
+Basic.MainMenu.File.Exit="&প্রস্থান"
320
+
321
+Basic.MainMenu.Edit="&সম্পাদনা করুন"
322
+Basic.MainMenu.Edit.Undo="&বাতিল করুন"
323
+Basic.MainMenu.Edit.Redo="&পুনরায় করুন"
324
+Basic.MainMenu.Edit.UndoAction="&বাতিল করুন $1"
325
+Basic.MainMenu.Edit.RedoAction="&পুনরায় $1"
326
+Basic.MainMenu.Edit.LockPreview="&প্রাকদর্শন লক করুন"
327
+Basic.MainMenu.Edit.Scale="প্রাক্-বীক্ষণ &স্কেল"
328
+Basic.MainMenu.Edit.Scale.Window="ভেতর থেকে জানালা"
329
+Basic.MainMenu.Edit.Scale.Canvas="ক্যানভাস (%1x%2)"
330
+Basic.MainMenu.Edit.Scale.Output="আউটপুট (%1x%2)"
331
+Basic.MainMenu.Edit.Transform="এবং রূপান্তর"
332
+Basic.MainMenu.Edit.Transform.EditTransform="&রূপান্তর সম্পাদনা করুন..."
333
+Basic.MainMenu.Edit.Transform.CopyTransform="রূপান্তর অনুলিপি করুন"
334
+Basic.MainMenu.Edit.Transform.PasteTransform="রূপান্তর প্রতিলেপন করুন"
335
+Basic.MainMenu.Edit.Transform.ResetTransform="এবং রূপান্তর রিসেট করুন"
336
+Basic.MainMenu.Edit.Transform.Rotate90CW="CW 90 ডিগ্রী ঘোরাও"
337
+Basic.MainMenu.Edit.Transform.Rotate90CCW="CW 90 ডিগ্রী ঘোরাও"
338
+Basic.MainMenu.Edit.Transform.Rotate180="180 ডিগ্রী ঘোরাও"
339
+Basic.MainMenu.Edit.Transform.FlipHorizontal="ফ্লিপ এবং অনুভূমিক"
340
+Basic.MainMenu.Edit.Transform.FlipVertical="ফ্লিপ এবং উল্লম্ব"
341
+Basic.MainMenu.Edit.Transform.FitToScreen="এবং পর্দায় সমন্বয় করুন"
342
+Basic.MainMenu.Edit.Transform.StretchToScreen="এবং পর্দা করতে বিস্তৃত করুন"
343
+Basic.MainMenu.Edit.Transform.CenterToScreen="এবং পর্দার কেন্দ্রে"
344
+Basic.MainMenu.Edit.Order="ও যেন"
345
+Basic.MainMenu.Edit.Order.MoveUp="সরিয়ে নিন এবং আপ"
346
+Basic.MainMenu.Edit.Order.MoveDown="নিচে নামান"
347
+Basic.MainMenu.Edit.Order.MoveToTop="সরিয়ে দিতে ও শীর্ষ"
348
+Basic.MainMenu.Edit.Order.MoveToBottom="সরান এবং নিচে"
349
+Basic.MainMenu.Edit.AdvAudio="এবং অডিও উন্নত বৈশিষ্ট্য"
350
+
351
+Basic.MainMenu.View="এবং প্রদর্শন করুন"
352
+Basic.MainMenu.View.Toolbars="এবং টুলবার"
353
+Basic.MainMenu.View.Toolbars.Listboxes="এবং Listboxes"
354
+Basic.MainMenu.View.SceneTransitions="ঘটনাস্থলে অবস্থান্তর"
355
+Basic.MainMenu.View.StatusBar="স্ট্যাটাস বার"
356
+
357
+Basic.MainMenu.SceneCollection="এবং দৃশ্য সংগ্রহ"
358
+Basic.MainMenu.Profile="এবং প্রোফাইল"
359
+Basic.MainMenu.Profile.Import="প্রোফাইল আমদানি করুন"
360
+Basic.MainMenu.Profile.Export="প্রোফাইল রপ্তানি করুন"
361
+Basic.MainMenu.SceneCollection.Import="দৃশ্য সংগ্রহ আমদানি করুন"
362
+Basic.MainMenu.SceneCollection.Export="দৃশ্য সংগ্রহ আমদানি করুন"
363
+Basic.MainMenu.Profile.Exists="প্রোফাইল ইতোমধ্যেই বিদ্যমান"
364
+Basic.MainMenu.SceneCollection.Exists="দৃশ্য সংগ্রহ ইতোমধ্যে বিদ্যমান"
365
+
366
+Basic.MainMenu.Tools="ও সরঞ্জাম"
367
+
368
+Basic.MainMenu.Help="এবং সাহায্য"
369
+Basic.MainMenu.Help.Website="দর্শন ও ওয়েবসাইট"
370
+Basic.MainMenu.Help.Logs="এবং লগ ফাইল"
371
+Basic.MainMenu.Help.Logs.ShowLogs="এবং লগ ফাইলগুলো প্রদর্শন করুন"
372
+Basic.MainMenu.Help.Logs.UploadCurrentLog="আপলোড এবং বর্তমান লগ ফাইল"
373
+Basic.MainMenu.Help.Logs.UploadLastLog="আপলোড এবং সর্বশেষ লগ ফাইল"
374
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&View লগ দেখাও"
375
+Basic.MainMenu.Help.CheckForUpdates="হালনাগাদের জন্য পরীক্ষা করুন"
376
+
377
+Basic.Settings.ProgramRestart="এই প্রোগ্রামটি এই সেটিংস প্রভাবী করতে পুনর্সূচনা করা আবশ্যক."
378
+Basic.Settings.ConfirmTitle="পরিবর্তন করুন"
379
+Basic.Settings.Confirm="পরিবর্তন অসংরক্ষিত সংশোধনী রয়েছে।  পরিবর্তন সংরক্ষণ করব?"
380
+
381
+Basic.Settings.General="সাধারণ"
382
+Basic.Settings.General.Theme="থিম"
383
+Basic.Settings.General.Language="ভাষা"
384
+Basic.Settings.General.EnableAutoUpdates="প্রারম্ভকালে আপডেটের জন্য স্বয়ংক্রিয়ভাবে চেক করুন"
385
+Basic.Settings.General.WarnBeforeStartingStream="ধারা শুরু করার সময় নিশ্চিতকরণ সংলাপ প্রদর্শন করুন"
386
+Basic.Settings.General.WarnBeforeStoppingStream="ধারা শুরু করার সময় নিশ্চিতকরণ সংলাপ প্রদর্শন করুন"
387
+Basic.Settings.General.Projectors="প্রক্ষেপকের"
388
+Basic.Settings.General.HideProjectorCursor="প্রক্ষেপকের উপর কার্সর আড়াল করা হবে"
389
+Basic.Settings.General.ProjectorAlwaysOnTop="প্রজেক্টরে সবসময় উপরে রাখুন"
390
+Basic.Settings.General.Snapping="স্ন্যাপ উৎস প্রান্তিককরণ"
391
+Basic.Settings.General.ScreenSnapping="পর্দার প্রান্ত থেকে সূত্র স্ন্যাপ করুন"
392
+Basic.Settings.General.CenterSnapping="অনুভূমিক এবং উল্লম্ব কেন্দ্র সূত্র স্ন্যাপ করুন"
393
+Basic.Settings.General.SourceSnapping="অন্যান্য সূত্র থেকে সূত্র স্ন্যাপ করুন"
394
+Basic.Settings.General.SnapDistance="স্ন্যাপ সংবেদনশীলতা"
395
+Basic.Settings.General.RecordWhenStreaming="স্ট্রীমিং-এর সময় স্বয়ংক্রিয়ভাবে রেকর্ড"
396
+Basic.Settings.General.KeepRecordingWhenStreamStops="স্রোত থেমে যাবে যখন রেকর্ড রাখা"
397
+Basic.Settings.General.ReplayBufferWhileStreaming="স্ট্রীমিং-এর সময় স্বয়ংক্রিয়ভাবে রিপ্লে বাফার শুরু করুন"
398
+Basic.Settings.General.KeepReplayBufferStreamStops="রিপ্লে বাফার বহা ধারা বন্ধ হয়ে যায় তখন"
399
+Basic.Settings.General.SysTray="সিস্টেম ট্রে"
400
+Basic.Settings.General.SysTrayWhenStarted="ছোট থেকে শুরু করে, তখন সিস্টেম ট্রে"
401
+Basic.Settings.General.SystemTrayHideMinimize="টাস্ক বার এর পরিবর্তে সিস্টেম ট্রে থেকে সব সময় ছোট করুন"
402
+Basic.Settings.General.SaveProjectors="প্রস্থানকালে প্রক্ষেপকের সংরক্ষণ করো"
403
+
404
+Basic.Settings.Stream="ধারা"
405
+Basic.Settings.Stream.StreamType="স্ট্রিম ধরন"
406
+
407
+Basic.Settings.Output="আউটপুট"
408
+Basic.Settings.Output.Format="আমল লেখকবৃন্দ বিন্যাস"
409
+Basic.Settings.Output.Encoder="Encoder"
410
+Basic.Settings.Output.SelectDirectory="রেকর্ডিং ডিরেক্টরি নির্বাচন করুন"
411
+Basic.Settings.Output.SelectFile="রেকর্ড করা ফাইল নির্বাচন করুন"
412
+Basic.Settings.Output.EnforceBitrate="স্ট্রিমিং সার্ভিস বিটের সীমিত প্রয়োগ"
413
+Basic.Settings.Output.Mode="আউটপুট মোড"
414
+Basic.Settings.Output.Mode.Simple="সাধারণ"
415
+Basic.Settings.Output.Mode.Adv="অ্যাডভান্সড"
416
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg উত্পাদন"
417
+Basic.Settings.Output.UseReplayBuffer="রিপ্লে বাফার সক্রিয় করা হবে"
418
+Basic.Settings.Output.ReplayBuffer.SecondsMax="সর্বোচ্চ রিপ্লে সময় (সেকেন্ড)"
419
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="সর্বোচ্চ স্মৃতি (মেগাবাইট)"
420
+Basic.Settings.Output.ReplayBuffer.Estimate="ব্যবহার করা: %1 MB"
421
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="স্মৃতি ব্যবহার অনুমান করতে পারে না।  অনুগ্রহ করে স্মৃতি সর্বোচ্চ সীমা নির্ধারণ করুন."
422
+
423
+
424
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="আউটপুট ফাইল"
425
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="সাধারণ রেকর্ড ফরম্যাট"
426
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="সকল ফাইল"
427
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="ফাইল পথ বা URL"
428
+Basic.Settings.Output.Adv.FFmpeg.Format="কন্টেইনার ফরম্যাট"
429
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="অডিও"
430
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="ভিডিও"
431
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="পূর্ব-নির্ধারিত বিন্যাস"
432
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="কন্টেইনার ফরম্যাট বিবরণ"
433
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="অডিও/ভিডিও ফাইলের পথটি বা URL থেকে অনুমিত কোডেক"
434
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="পূর্ব-নির্ধারিত এনকোডার"
435
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="এনকোডার নিষ্ক্রিয় করা হবে"
436
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="ভিডিও এনকোডার"
437
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="ভিডিও এনকোডার সেটিংস (যদি থাকে)"
438
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="অডিও এনকোডার"
439
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="ভিডিও এনকোডার সেটিংস (যদি থাকে)"
440
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer সেটিংস (যদি থাকে)"
441
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Keyframe বিরতি (ফ্রেম)"
442
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="সব কোডেক প্রদর্শন করা হবে (যদিও সম্ভাব্য অসঙ্গত)"
443
+
444
+FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
445
+
446
+FilenameFormatting.TT="%CCYY বছর, চার digits\n%YY সালের শেষ দুটি অঙ্ক (00-99)\n%MM মাস হিসেবে দশমিক সংখ্যা (01-12) \n%DD মাসের জিরো-প্যাড, (01-31)\n%hh ঘন্টা 24 এইচ. আই. ভি ফরম্যাটে (00-23)\n%mm মিনিট (00-59) \n%ss (00-61) দ্বিতীয় \n%% এক শতাংশ sign\n%a সংক্ষিপ্ত সপ্তান্তের name\n%A পূর্ণ সপ্তান্তের name\n%b সংক্ষিপ্ত মাস name\n%B পুরো মাসের name\n%d দিনে মাসের শূন্য-প্যাড (01-31)\n%H ঘন্টা 24 জ বিন্যাস (00-23) \n%I ঘন্টা 12h বিন্যাস (01-12)\n%m মাস দশমিক সংখ্যা হিসেবে (01-12)\n%M মিনিট (00-59) \n%p বিকাল বা রাত designation\n%S দ্বিতীয় (00-61)\n%y সালের শেষ দুটি অঙ্ক থেকে ইউটিসি বা timezone\n নাম বা abbreviation\n%Z (00-99)\n%Y Year\n%z ISO 8601 অফসেট সময় অঞ্চল নাম বা abbreviation\n"
447
+
448
+Basic.Settings.Video="ভিডিও"
449
+Basic.Settings.Video.Adapter="ভিডিও অভিযোজক:"
450
+Basic.Settings.Video.BaseResolution="বেস (ক্যানভাস) নিয়মন:"
451
+Basic.Settings.Video.ScaledResolution="আউটপুট রেজুলেশন: (আকার পরিবর্তিত):"
452
+Basic.Settings.Video.DownscaleFilter="Downscale ফিল্টার:"
453
+Basic.Settings.Video.DisableAeroWindows="এ্যারো (শুধুমাত্র Windows) নিষ্ক্রিয় করা হবে"
454
+Basic.Settings.Video.FPS="FPS:"
455
+Basic.Settings.Video.FPSCommon="FPS সাধারণ মানসমূহ"
456
+Basic.Settings.Video.FPSInteger="পূর্ণসংখ্যা FPS মান"
457
+Basic.Settings.Video.FPSFraction="ভগ্নাংশের FPS মান"
458
+Basic.Settings.Video.Numerator="লব।:"
459
+Basic.Settings.Video.Denominator="হর:"
460
+Basic.Settings.Video.Renderer="রূপায়ন।:"
461
+Basic.Settings.Video.InvalidResolution="অবৈধ প্রস্তাব মান।  [width]x[height] (অর্থাৎ 1920 x 1080) থাকতে হবে"
462
+Basic.Settings.Video.CurrentlyActive="ভিডিও আউটপুট বর্তমানে সক্রিয় আছে।  ভিডিও বিন্যাসনসমূহ পরিবর্তন করতে কোন ভয়েস থেকে চালু করুন।."
463
+Basic.Settings.Video.DisableAero="এরো নিষ্ক্রিয় করুন"
464
+
465
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (সবচেয়ে দ্রুত, কিন্তু ঘোলাটে হলে স্কেল)"
466
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Sharpened স্কেল, 16 নমুনা)"
467
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Sharpened স্কেল, 32 নমুনা)"
468
+
469
+Basic.Settings.Audio="অডিও"
470
+Basic.Settings.Audio.SampleRate="নমুনা হার"
471
+Basic.Settings.Audio.Channels="চ্যানেলসমূহ"
472
+Basic.Settings.Audio.DesktopDevice="ডেস্কটপ অডিও ডিভাইস"
473
+Basic.Settings.Audio.DesktopDevice2="ডেস্কটপ অডিও ডিভাইস"
474
+Basic.Settings.Audio.AuxDevice="মাইক/সহযোগী অডিও ডিভাইস"
475
+Basic.Settings.Audio.AuxDevice2="মাইক/সহযোগী অডিও ডিভাইস"
476
+Basic.Settings.Audio.AuxDevice3="মাইক/সহযোগী অডিও ডিভাইস"
477
+Basic.Settings.Audio.EnablePushToMute="মৌন করার ধাক্কা সক্রিয় করা হবে"
478
+Basic.Settings.Audio.PushToMuteDelay="মৌন করার ধাক্কা বিলম্ব"
479
+Basic.Settings.Audio.EnablePushToTalk="পুশ করার কথা সক্রিয় করা হবে"
480
+Basic.Settings.Audio.PushToTalkDelay="পুশ করার কথা বিলম্ব"
481
+Basic.Settings.Audio.UnknownAudioDevice="[ডিভাইস সংযুক্ত নয় অথবা বিদ্যমান নয়।"
482
+
483
+Basic.Settings.Advanced="অ্যাডভান্সড"
484
+Basic.Settings.Advanced.General.ProcessPriority="প্রসেস"
485
+Basic.Settings.Advanced.General.ProcessPriority.High="বেশি"
486
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="স্বাভাবিকের উপরে"
487
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
488
+Basic.Settings.Advanced.General.ProcessPriority.Idle="নিষ্ক্রিয়"
489
+Basic.Settings.Advanced.FormatWarning="সতর্কতা: রং বিন্যাস ছাড়া NV12 রেকর্ডিং-এর জন্য প্রাথমিকভাবে উদ্দেশ্যে করা হয়, এবং স্ট্রীমিং-এর সময় সুপারিশকৃত নয়।  এর রং বিন্যাস রূপান্তরের ফলে সিপিইউ ব্যবহার বৃদ্ধি ভয়ংকর হতে পারে।."
490
+Basic.Settings.Advanced.Audio.BufferingTime="অডিও বাফারিং সময়"
491
+Basic.Settings.Advanced.Video.ColorFormat="রঙ বিন্যাস"
492
+Basic.Settings.Advanced.Video.ColorSpace="YUV কালার-স্পেস"
493
+Basic.Settings.Advanced.Video.ColorRange="YUV রং বিন্যাস"
494
+Basic.Settings.Advanced.Video.ColorRange.Partial="আংশিক"
495
+Basic.Settings.Advanced.Video.ColorRange.Full="পূর্ণ"
496
+Basic.Settings.Advanced.Audio.MonitoringDevice="অডিও মনিটরিং ডিভাইস"
497
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="পূর্ব-নির্ধারিত"
498
+Basic.Settings.Advanced.StreamDelay="স্ট্রিম বিলম্ব"
499
+Basic.Settings.Advanced.StreamDelay.Duration="দৈর্ঘ্য (সেকেন্ড)"
500
+Basic.Settings.Advanced.StreamDelay.Preserve="বিরোধিতায় লিপ্ত পয়েন্ট (বাড়তে দেরি) সংরক্ষণের সময় পুনরায় সংযোগ করা হচ্ছে"
501
+
502
+Basic.AdvAudio.AudioTracks="ট্র্যাক"
503
+
504
+Basic.Settings.Hotkeys="হট-কী"
505
+Basic.Settings.Hotkeys.Pair="%1 সাথে শেয়ার কী সমন্বয় কাজ হিসেবে মোড পাল্টায়"
506
+
507
+Basic.Hotkeys.SelectScene="ঘটনাস্থলে স্যুইচ করুন"
508
+
509
+Basic.SystemTray.Show="প্রদর্শন করা হবে"
510
+Basic.SystemTray.Hide="সরিয়ে রাখ"
511
+
512
+Basic.SystemTray.Message.Reconnecting="বিচ্ছিন্ন হয়ে গেছে।  পুনরায় সংযোগ করা হচ্ছে..."
513
+
514
+Hotkeys.Insert="প্রবেশ করান"
515
+Hotkeys.Delete="মুছে ফেলা"
516
+Hotkeys.Home="হোম"
517
+Hotkeys.End="সমাপ্ত"
518
+Hotkeys.PageUp="উপরের পাতা"
519
+Hotkeys.PageDown="নিচের পাতা"
520
+Hotkeys.NumLock="Num লক"
521
+Hotkeys.ScrollLock="স্ক্রল লক"
522
+Hotkeys.CapsLock="ক্যাপস লক"
523
+Hotkeys.Backspace="ব্যাকস্পেস"
524
+Hotkeys.Tab="ট্যাব"
525
+Hotkeys.Print="প্রিন্ট"
526
+Hotkeys.Pause="বিরাম"
527
+Hotkeys.Left="বামদিকে"
528
+Hotkeys.Right="ডানদিকে"
529
+Hotkeys.Up="উপরে"
530
+Hotkeys.Down="নিচের"
531
+Hotkeys.Windows="উইন্ডোজ"
532
+Hotkeys.Super="সুপার"
533
+Hotkeys.Menu="মেনু"
534
+Hotkeys.Space="জায়গা"
535
+Hotkeys.NumpadNum="Numpad %1"
536
+Hotkeys.NumpadMultiply="Numpad দ্বিগুণ"
537
+Hotkeys.NumpadDivide="Numpad ভাগ"
538
+Hotkeys.NumpadAdd="Numpad যুক্ত করুন"
539
+Hotkeys.NumpadSubtract="Numpad বিয়োগ"
540
+Hotkeys.NumpadDecimal="Numpad দশমিক"
541
+Hotkeys.AppleKeypadNum="%1 (কী-প্যাড)"
542
+Hotkeys.AppleKeypadMultiply="* (কী-প্যাড)"
543
+Hotkeys.AppleKeypadDivide="/ (কী-প্যাড)"
544
+Hotkeys.AppleKeypadAdd="/ (কী-প্যাড)"
545
+Hotkeys.AppleKeypadSubtract="/ (কী-প্যাড)"
546
+Hotkeys.AppleKeypadDecimal=". (কী-প্যাড)"
547
+Hotkeys.AppleKeypadEqual="/ (কী-প্যাড)"
548
+Hotkeys.MouseButton="মাউস %1"
549
+
550
+Mute="নিঃশব্দ করুন"
551
+Unmute="সবাক করুন"
552
+Push-to-mute="মৌন করার ধাক্কা"
553
+Push-to-talk="পুশ করার কথা"
554
+
555
+SceneItemShow="'%1' প্রদর্শন করা হবে"
556
+SceneItemHide="'%1' আড়াল করা হবে"
557
+
558
+OutputWarnings.NoTracksSelected="আপনি অবশ্যই কমপক্ষে একটি ট্র্যাক নির্বাচন"
559
+OutputWarnings.MultiTrackRecording="সতর্কতা: একাধিক ট্র্যাক রেকর্ড প্রতি নির্দিষ্ট ফরম্যাটে (যেমন FLV) সমর্থন করে না"
560
+OutputWarnings.MP4Recording="সতর্কতা: রেকর্ডিং MP4 কাছে সংরক্ষিত ফাইল (যেমন: BSODs ফলে, বিদ্যুৎ লোকসান, ইত্যাদি।) চূড়ান্ত করা না হলে নির্বাহ হওয়ার সময়ের অপুনরুদ্ধারযোগ্য করা হবে। আপনি যদি রেকর্ড করতে চান একাধিক অডিও ট্র্যাক MKV এবং remux রেকর্ড করা mp4 ব্যবহার করে এটি সম্পন্ন করার পর বিবেচনা (Remux রেকর্ডিং-> ফাইল)"
561
+
562
+
563
obs-studio-18.0.2.tar.xz/UI/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ca-ES.ini Changed
28
 
1
@@ -56,6 +56,19 @@
2
 ReplayBuffer="Memòria intermèdia de reproducció"
3
 Import="Importa"
4
 Export="Exporta"
5
+Copy="Copia"
6
+Paste="Enganxa"
7
+PasteReference="Enganxa (referència)"
8
+PasteDuplicate="Enganxa (duplicat)"
9
+RemuxRecordings="Conversions enregistrades"
10
+
11
+
12
+Copy.Filters="Copia els filtres"
13
+Paste.Filters="Enganxa els filtres"
14
+
15
+
16
+
17
+
18
 
19
 Updater.Title="Nova actualització disponible"
20
 Updater.Text="Hi ha una nova actualització disponible:"
21
@@ -617,3 +630,6 @@
22
 OutputWarnings.MultiTrackRecording="Advertiment: Alguns formats (com FLV) no suporten múltiples cançons per gravació"
23
 OutputWarnings.MP4Recording="Advertència: Els enregistraments desats en MP4 seran irrecuperables si l'arxiu no va poder finalitzar (p.ex. com a resultat de BSODs, pèrdues de potència, etc.). Si voleu enregistrar diverses pistes d'àudio utilitzi MKV i multiplexeu l'enregistrament a MP4 després que acabi (Fitxer-> Multiplexació d'enregistraments)"
24
 
25
+FinalScene.Title="Supressió de l'escena"
26
+FinalScene.Text="Cal que hi hagi almenys una escena."
27
+
28
obs-studio-18.0.2.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/cs-CZ.ini Changed
148
 
1
@@ -28,9 +28,12 @@
2
 Mono="Mono"
3
 Stereo="Stereo"
4
 DroppedFrames="Ztracené snímky %1 (%2%)"
5
-PreviewProjector="Náhled přes celou obrazovku"
6
-SceneProjector="Projektor (Scéna)"
7
-SourceProjector="Projektor (Zdroj)"
8
+PreviewProjector="Celoobrazovkový projektor (náhled)"
9
+SceneProjector="Celoobrazovkový projektor (scéna)"
10
+SourceProjector="Celoobrazovkový projektor (zdroj)"
11
+PreviewWindow="Projektor v okně (náhled)"
12
+SceneWindow="Projektor v okně (scéna)"
13
+SourceWindow="Projektor v okně (zdroj)"
14
 Clear="Vyčistit"
15
 Revert="Zvrátit"
16
 Show="Zobrazit"
17
@@ -56,6 +59,92 @@
18
 ReplayBuffer="Záznam do paměti"
19
 Import="Importovat"
20
 Export="Exportovat"
21
+Copy="Kopírovat"
22
+Paste="Vložit"
23
+PasteReference="Vložit (jako odkaz)"
24
+PasteDuplicate="Vložit (jako kopii)"
25
+RemuxRecordings="Převést nahrávky"
26
+Next="Další"
27
+Back="Zpět"
28
+
29
+AlreadyRunning.Title="OBS je již spuštěno"
30
+AlreadyRunning.Text="OBS již běží! Pokud jste to opravdu nechtěli udělat, tak prosím ukončete ostatní běžící instance programu OBS před spuštěním nové. Pokud máte nastavenu minimalizaci do lišty, tak se prosím podívejte, zda neběží tam."
31
+AlreadyRunning.LaunchAnyway="Spustit tak či tak"
32
+
33
+Copy.Filters="Kopírovat filtry"
34
+Paste.Filters="Vložit filtry"
35
+
36
+BandwidthTest.Region="Oblast"
37
+BandwidthTest.Region.US="Spojené státy"
38
+BandwidthTest.Region.EU="Evropa"
39
+BandwidthTest.Region.Asia="Asie"
40
+BandwidthTest.Region.Other="Jiná"
41
+
42
+Basic.FirstStartup.RunWizard="Chtěli byste použít průvodce nastavením? Pokud ne, nastavení můžete provést i manuálně a to po kliknutí na tlačítko Nastavení v hlavním okně."
43
+Basic.FirstStartup.RunWizard.BetaWarning="(Poznámka: Průvodce nastavením je aktuálně v betě)"
44
+Basic.FirstStartup.RunWizard.NoClicked="Pokud změníte názor, tak můžete kdykoliv spustit průvodce z nabídky Nástrojů."
45
+
46
+Basic.AutoConfig="Průvodce nastavením"
47
+Basic.AutoConfig.Beta="Průvodce nastavením (beta)"
48
+Basic.AutoConfig.ApplySettings="Použít"
49
+Basic.AutoConfig.StartPage="Informace o použití"
50
+Basic.AutoConfig.StartPage.SubTitle="Řekněte nám, k čemu chcete tento program používat"
51
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimalizovat pro vysílání, nahrávání je druhořadé"
52
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimalizovat pouze pro nahrávání, nebudu vysílat"
53
+Basic.AutoConfig.VideoPage="Nastavení obrazu"
54
+Basic.AutoConfig.VideoPage.SubTitle="Specifikujte nastavení obrazu, které budete chtít použít"
55
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Použít aktuální (%1x%2)"
56
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Obrazovka %1 (%2x%3)"
57
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Použít aktuální (%1)"
58
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 nebo 30, pokud to jde, použij 60"
59
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 nebo 30, ale preferuji vyšší rozlišení"
60
+Basic.AutoConfig.VideoPage.CanvasExplanation="Poznámka: Základní rozlišení není nutně stejné jako rozlišení, ve kterém budete vysílat či nahrávat. Vaše opravdové rozlišení může být několikrát zmenšeno oproti základnímu rozlišení, aby bylo sníženo využití prostředků nebo požadavků na bitrate."
61
+Basic.AutoConfig.StreamPage="Informace o vysílání"
62
+Basic.AutoConfig.StreamPage.SubTitle="Prosím zadejte své informace o vysílání"
63
+Basic.AutoConfig.StreamPage.Service="Služba"
64
+Basic.AutoConfig.StreamPage.Service.ShowAll="Zobrazit vše..."
65
+Basic.AutoConfig.StreamPage.Server="Server"
66
+Basic.AutoConfig.StreamPage.StreamKey="Vysílací klíč"
67
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Odkaz)"
68
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Odhadnout bitrate za pomocí testu rychlosti spojení (může to zabrat pár minut)"
69
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferovat hardwarové kódování"
70
+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."
71
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Varování o vysílání"
72
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Test rychlosti spojení bude vysílat náhodná data obrazu bez zvuku na váš kanál. Pokud jste schopni, doporučujeme abyste dočasně vypnuli ukládání nahrávek vysílání a nastavili kanál na soukromý, dokud nebude tento test dokončen. Přejete si pokračovat?"
73
+Basic.AutoConfig.TestPage="Konečné výsledky"
74
+Basic.AutoConfig.TestPage.SubTitle.Testing="Program právě provádí soubor testů pro výpočet ideálního nastavení"
75
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testování dokončeno"
76
+Basic.AutoConfig.TestPage.TestingBandwidth="Probíhá testování rychlosti spojení, zabere to pár minut..."
77
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Připojuji k: %1..."
78
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Nepodařilo se připojit k žádnému serveru, zkontrolujte své připojení a zkuste to znovu."
79
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testování rychlosti spojení pro: %1"
80
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testování kodéru pro vysílání, bude to minutka..."
81
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testování kodéru pro nahrávání, bude to minutka..."
82
+Basic.AutoConfig.TestPage.TestingRes="Testování rozlišení, zabere to pár minut..."
83
+Basic.AutoConfig.TestPage.TestingRes.Fail="Nezdařilo se spuštění kodéru"
84
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testování %1x%2 %3 FPS..."
85
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Kodér pro vysílání"
86
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Kodér pro nahrávání"
87
+Basic.AutoConfig.TestPage.Result.Header="Tento program určil, že tato přibližná nastavení jsou pro vás jako dělaná:"
88
+Basic.AutoConfig.TestPage.Result.Footer="Pro použití těchto nastavení klikněte na Použít. Pro změnu v průvodci klikněte na Zpět. Pokud si přejete změnit nastavení manuálně, klikněte na Zrušit a poté otevřete Nastavení."
89
+
90
+Basic.Stats="Statistika"
91
+Basic.Stats.CPUUsage="Využití CPU"
92
+Basic.Stats.HDDSpaceAvailable="Dostupné místo na HDD"
93
+Basic.Stats.MemoryUsage="Využití paměti"
94
+Basic.Stats.AverageTimeToRender="Průměrný čas vykreslování snímku"
95
+Basic.Stats.SkippedFrames="Přeskočené snímky kvůli chybě v kódování"
96
+Basic.Stats.MissedFrames="Nevyužité snímky z důvodu chyby ve vykreslování"
97
+Basic.Stats.Output.Stream="Vysílání"
98
+Basic.Stats.Output.Recording="Nahrávání"
99
+Basic.Stats.Status="Stav"
100
+Basic.Stats.Status.Recording="Nahrává se"
101
+Basic.Stats.Status.Live="ŽIVĚ"
102
+Basic.Stats.Status.Reconnecting="Obnovování připojení"
103
+Basic.Stats.Status.Inactive="Neaktivní"
104
+Basic.Stats.DroppedFrames="Ztracené snímky (síť)"
105
+Basic.Stats.MegabytesSent="Celkový datový výstup"
106
+Basic.Stats.Bitrate="Bitrate"
107
 
108
 Updater.Title="Aktualizace"
109
 Updater.Text="K dispozici je nová verze:"
110
@@ -375,11 +464,12 @@
111
 Basic.Settings.General.Theme="Vzhled"
112
 Basic.Settings.General.Language="Jazyk"
113
 Basic.Settings.General.EnableAutoUpdates="Automaticky kontrolovat aktualizace při spuštění"
114
+Basic.Settings.General.OpenStatsOnStartup="Otevřít okno statistik při spuštění"
115
 Basic.Settings.General.WarnBeforeStartingStream="Vyžadovat potvrzení pro spuštění vysílání"
116
 Basic.Settings.General.WarnBeforeStoppingStream="Vyžadovat potvrzení pro ukončení vysílání"
117
 Basic.Settings.General.Projectors="Projektory"
118
 Basic.Settings.General.HideProjectorCursor="Skrýt kurzor přes projektor"
119
-Basic.Settings.General.ProjectorAlwaysOnTop="Zobrazovat projektor vždy navrchu"
120
+Basic.Settings.General.ProjectorAlwaysOnTop="Zobrazovat projektory tak, aby vždy byly navrchu"
121
 Basic.Settings.General.Snapping="Přichycování zdrojů"
122
 Basic.Settings.General.ScreenSnapping="Přichytávat zdroje k okraji obrazovky"
123
 Basic.Settings.General.CenterSnapping="Přichytávat zdroje k vertikálnímu a horizontálnímu středu"
124
@@ -392,7 +482,7 @@
125
 Basic.Settings.General.SysTray="Systémová lišta"
126
 Basic.Settings.General.SysTrayWhenStarted="Minimalizovat do systémové lišty při spuštění"
127
 Basic.Settings.General.SystemTrayHideMinimize="Vždy minimalizovat do systémové lišty místo hlavního panelu"
128
-Basic.Settings.General.SaveProjectors="Při ukončení uložit projektory"
129
+Basic.Settings.General.SaveProjectors="Ukládat projektory při ukončení"
130
 
131
 Basic.Settings.Stream="Vysílání"
132
 Basic.Settings.Stream.StreamType="Typ vysílání"
133
@@ -538,6 +628,7 @@
134
 Basic.Settings.Advanced.Video.ColorRange.Full="Plné"
135
 Basic.Settings.Advanced.Audio.MonitoringDevice="Zařízení pro monitorování zvuku"
136
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Výchozí"
137
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Zakázat Windows výchozí utlumování zvuku"
138
 Basic.Settings.Advanced.StreamDelay="Zpoždění vysílání"
139
 Basic.Settings.Advanced.StreamDelay.Duration="Délka (vteřiny)"
140
 Basic.Settings.Advanced.StreamDelay.Preserve="Zachovat zpoždění při obnovení spojení (zvýšení zpoždění)"
141
@@ -617,3 +708,6 @@
142
 OutputWarnings.MultiTrackRecording="Varování: Některé formáty (např. FLV) nepodporují více zvukových stop na nahrávku"
143
 OutputWarnings.MP4Recording="Varování: Nahrávky uložené v MP4 nebude možné obnovit, pokud soubor nemohl být dokončen (např. po BSOD, výpadku napájení atp.). Pokud chcete nahrávat více zvukových stop, promyslete použití MKV a poté převodení do MP4 (Soubor -> Převést nahrávky)"
144
 
145
+FinalScene.Title="Odstranění scény"
146
+FinalScene.Text="Musí existovat alespoň jedna scéna, proto tuto není možno odstranit."
147
+
148
obs-studio-18.0.2.tar.xz/UI/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/da-DK.ini Changed
127
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Fuldskærmsprojektering (forhåndsvisning)"
3
 SceneProjector="Fuldskærmsprojektering (scene)"
4
 SourceProjector="Fuldskærmsprojektering (kilde)"
5
+PreviewWindow="Vinduesprojektering (forhåndsvisning)"
6
+SceneWindow="Vinduesprojektering (Scene)"
7
+SourceWindow="Vinduesprojektering (kilde)"
8
 Clear="Ryd"
9
 Revert="Gendan"
10
 Show="Vis"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Genafspilningsbuffer"
13
 Import="Importér"
14
 Export="Eksportér"
15
+Copy="Kopiér"
16
+Paste="Indsæt"
17
+PasteReference="Indsæt (reference)"
18
+PasteDuplicate="Indsæt (dublet)"
19
+RemuxRecordings="Remux-optagelser"
20
+Next="Næste"
21
+Back="Tilbage"
22
+
23
+AlreadyRunning.Title="OBS kører allerede"
24
+AlreadyRunning.Text="OBS kører allerede!  Medmindre dette er tilsigtet, så bedes du lukke enhver eksisterende OBS-proces, inden du forsøger at køre en ny.  Hvis du har OBS indstillet til at minimeres sig til systembakken, så tjek venligst om den stadig kører dér."
25
+AlreadyRunning.LaunchAnyway="Start alligevel"
26
+
27
+Copy.Filters="Kopieringsfiltre"
28
+Paste.Filters="Indsætningsfiltre"
29
+
30
+BandwidthTest.Region="Region"
31
+BandwidthTest.Region.US="USA"
32
+BandwidthTest.Region.EU="Europa"
33
+BandwidthTest.Region.Asia="Asien"
34
+BandwidthTest.Region.Other="Andet"
35
+
36
+Basic.FirstStartup.RunWizard="Ønsker du at køre autokonfigurationsguiden? Du kan også konfigurere dine indstillinger manuelt, ved at klikke på knappen Indstillinger i hovedvinduet."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Bemærk: Autokonfigurationsguiden er i øjeblikket i beta)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Skifter du mening, så kan du altid køre autokonfigurationsguiden igen fra menuen Værktøjer."
39
+
40
+Basic.AutoConfig="Autokonfigurationsguide"
41
+Basic.AutoConfig.Beta="Autokonfigurationsguide (beta)"
42
+Basic.AutoConfig.ApplySettings="Anvend indstillinger"
43
+Basic.AutoConfig.StartPage="Brugsoplysninger"
44
+Basic.AutoConfig.StartPage.SubTitle="Vælg hvad du ønsker at bruge programmet til"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimér til streaming, sekundært til optagelse"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimér kun til optagelse, jeg vil ikke foretage streaming"
47
+Basic.AutoConfig.VideoPage="Videoindstillinger"
48
+Basic.AutoConfig.VideoPage.SubTitle="Angiv de videoindstillinger du gerne vil benytte"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Brug aktuel (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Skærm %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Brug aktuel (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Enten 60 eller 30, men foretræk 60 når muligt"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Enten 60 eller 30, men foretræk høj opløsning"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Bemærk: Lærredets (basis) opløsning er ikke nødvendigvis identisk med den opløsning, du vil streame med eller optage i. Din aktuelle stream-/optagelsesopløsning kan blive nedskaleret fra lærredsopløsningen for at reducere ressourceforbrug eller krav til bithastigheden."
55
+Basic.AutoConfig.StreamPage="Streamoplysninger"
56
+Basic.AutoConfig.StreamPage.SubTitle="Indtast venligst dine stream oplysninger"
57
+Basic.AutoConfig.StreamPage.Service="Service"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Vis alle..."
59
+Basic.AutoConfig.StreamPage.Server="Server"
60
+Basic.AutoConfig.StreamPage.StreamKey="Streamnøgle"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Anslå bitrate med en båndbreddetest (kan tage et par minutter)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Foretræk hardwarekodning"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware kodning fjerne det meste CPU brug, men kan kræve højere bitrate for at opnå samme kvalitetsniveau."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamadvarsel"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Båndbreddetesten er ved at streame tilfældige videodata uden lyd til din kanal. Hvis du har mulighed for det, anbefales det at du midlertidigt fravælger at gemme streams og marker streamen som privat til testen er færdig. Fortsæt?"
67
+Basic.AutoConfig.TestPage="Endelige resultater"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Programmet udfører nu en række tests for at estimere de bedste indstillinger"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testen er færdig"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Foretager båndbreddetest, dette kan tage et par minutter..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Forbinder til: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Kunne ikke forbinde til nogen servere, kontroller venligst din internetforbindelse og prøv igen."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Tester båndbredde for: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Tester streamkodning, dette kan tage et øjeblik..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Tester optagelseskodning, dette kan tage et øjeblik..."
76
+Basic.AutoConfig.TestPage.TestingRes="Tester opløsninger, dette kan tage et par minutter..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Kunne ikke starte kodning"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Tester %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streamkodning"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Optagelseskodning"
81
+Basic.AutoConfig.TestPage.Result.Header="Programmet har bestemt, at disse anslåede indstillinger er de mest ideelle for dig:"
82
+Basic.AutoConfig.TestPage.Result.Footer="Klik på Anvend indstillinger for at benytte denne opsætning. Klik på Tilbage for at genopsætte guiden og forsøge igen. For at opsætte manuelt skal du klikke på Annullér og åbne Indstillinger."
83
+
84
+Basic.Stats="Statistikker"
85
+Basic.Stats.CPUUsage="CPU-forbrug"
86
+Basic.Stats.HDDSpaceAvailable="Harddiskplads tilgængelig"
87
+Basic.Stats.MemoryUsage="Hukommelsesforbrug"
88
+Basic.Stats.AverageTimeToRender="Gennemsnitstid for frame-rendering"
89
+Basic.Stats.SkippedFrames="Oversprang frames grundet kodningsforsinkelse"
90
+Basic.Stats.MissedFrames="Gået glip af frames grundet renderingsforsinkelse"
91
+Basic.Stats.Output.Stream="Stream"
92
+Basic.Stats.Output.Recording="Optagelse"
93
+Basic.Stats.Status="Status"
94
+Basic.Stats.Status.Recording="Optagelse"
95
+Basic.Stats.Status.Live="LIVE"
96
+Basic.Stats.Status.Reconnecting="Forsøger at oprette forbindelse igen"
97
+Basic.Stats.Status.Inactive="Inaktiv"
98
+Basic.Stats.DroppedFrames="Tabte frames (netværk)"
99
+Basic.Stats.MegabytesSent="Samlede Data Output"
100
+Basic.Stats.Bitrate="Bithastighed"
101
 
102
 Updater.Title="Ny opdatering tilgængelig"
103
 Updater.Text="Der er en ny opdatering tilgængelig:"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="Tema"
106
 Basic.Settings.General.Language="Sprog"
107
 Basic.Settings.General.EnableAutoUpdates="Automatisk søgning efter opdateringer ved opstart"
108
+Basic.Settings.General.OpenStatsOnStartup="Åbn statistik dialogboksen ved opstart"
109
 Basic.Settings.General.WarnBeforeStartingStream="Vis bekræftelses-dialog ved opstart af stream"
110
 Basic.Settings.General.WarnBeforeStoppingStream="Vis bekræftelses-dialog ved afslutning af stream"
111
 Basic.Settings.General.Projectors="Projektorer"
112
@@ -538,6 +628,7 @@
113
 Basic.Settings.Advanced.Video.ColorRange.Full="Fuld"
114
 Basic.Settings.Advanced.Audio.MonitoringDevice="Lyd overvågningsenhed"
115
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
116
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Deaktiver Windows lyddæmpning"
117
 Basic.Settings.Advanced.StreamDelay="Stream forsinkelse"
118
 Basic.Settings.Advanced.StreamDelay.Duration="Varighed (sekunder)"
119
 Basic.Settings.Advanced.StreamDelay.Preserve="Bevar afskæringspunkt (forøg forsinkelse) ved forbindelsesgendannelse"
120
@@ -617,3 +708,6 @@
121
 OutputWarnings.MultiTrackRecording="Advarsel: Visse formater (såsom FLV) understøtter ikke flere spor pr. optagelse"
122
 OutputWarnings.MP4Recording="Advarsel: MP4-optagelser vil ikke kunne genoprettes, hvis filen ikke kan færdiggøres (f.eks. som følge af BSODs, strømafbrydelse m.v.). Ønsker du at optage flere lydspor, overvej da at benytte MKV, og remuxe optagelsen til MP4, efter at den er færdiggjort (fil-> Remux optagelser)"
123
 
124
+FinalScene.Title="Slet scene"
125
+FinalScene.Text="Der kræves mindst én scene."
126
+
127
obs-studio-18.0.2.tar.xz/UI/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/de-DE.ini Changed
163
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Vollbild-Projektor (Vorschau)"
3
 SceneProjector="Vollbild-Projektor (Szene)"
4
 SourceProjector="Vollbild-Projektor (Quelle)"
5
+PreviewWindow="Fenstermodus-Projektor (Vorschau)"
6
+SceneWindow="Fenstermodus-Projektor (Szene)"
7
+SourceWindow="Fenstermodus-Projektor (Quelle)"
8
 Clear="Entfernen"
9
 Revert="Wiederherstellen"
10
 Show="Anzeigen"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Replaypuffer"
13
 Import="Importieren"
14
 Export="Exportieren"
15
+Copy="Kopieren"
16
+Paste="Einfügen"
17
+PasteReference="Einfügen (Referenz)"
18
+PasteDuplicate="Einfügen (Duplikat)"
19
+RemuxRecordings="Remuxe Aufnahmen"
20
+Next="Weiter"
21
+Back="Zurück"
22
+
23
+AlreadyRunning.Title="OBS wird bereits ausgeführt"
24
+AlreadyRunning.Text="OBS wird bereits ausgeführt! Bitte beenden Sie alle vorhandenen OBS Instanzen bevor Sie eine neue Instanz starten, es sei denn, Sie tun dies absichtlich. Wenn Sie OBS so eingestellt haben das es sich zum Infobereich minimiert, überprüfen Sie bitte, ob es dort läuft."
25
+AlreadyRunning.LaunchAnyway="Trotzdem starten"
26
+
27
+Copy.Filters="Filter kopieren"
28
+Paste.Filters="Filter einfügen"
29
+
30
+BandwidthTest.Region="Region"
31
+BandwidthTest.Region.US="USA"
32
+BandwidthTest.Region.EU="Europa"
33
+BandwidthTest.Region.Asia="Asien"
34
+BandwidthTest.Region.Other="Andere"
35
+
36
+Basic.FirstStartup.RunWizard="Möchten Sie den Autokonfigurationsassistent ausführen? Sie können Ihre Einstellungen auch manuell konfigurieren, indem Sie den Einstellungen-Knopf im Hauptfenster anklicken."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Hinweis: Der Autokonfigurationsassistent ist zurzeit im Betastatus)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Wenn Sie Ihre Meinung ändern, können Sie den Autokonfigurationsassistent jederzeit erneut aus dem Menü \"Werkzeuge\" ausführen."
39
+
40
+Basic.AutoConfig="Autokonfigurationsassistent"
41
+Basic.AutoConfig.Beta="Autokonfigurationsassistent (Beta)"
42
+Basic.AutoConfig.ApplySettings="Einstellungen übernehmen"
43
+Basic.AutoConfig.StartPage="Informationen zur Verwendung"
44
+Basic.AutoConfig.StartPage.SubTitle="Geben Sie an, wofür Sie das Programm verwenden möchten"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimieren für Streaming, Aufnehmen ist zweitrangig"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Nur für die Aufnahme optimieren, ich werde nicht streamen"
47
+Basic.AutoConfig.VideoPage="Videoeinstellungen"
48
+Basic.AutoConfig.VideoPage.SubTitle="Geben Sie die gewünschten Videoeinstellungen an, die Sie verwenden möchten"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Aktuelle verwenden (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Anzeige %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Aktuelle verwenden (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Entweder 60 oder 30, aber bevorzugt 60, wenn möglich"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Entweder 60 oder 30, aber hohe Auflösung bevorzugen"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Hinweis: Die Basis (Leinwand) Auflösung ist nicht unbedingt die Gleiche Auflösung mit der Sie Streamen oder Aufnehmen. Ihre tatsächliche Stream- / Aufzeichnungsauflösung kann ausgehend von der Leinwandauflösung herunterskaliert werden, um die Ressourcennutzung oder die Bitratenanforderungen zu reduzieren."
55
+Basic.AutoConfig.StreamPage="Streaminformationen"
56
+Basic.AutoConfig.StreamPage.SubTitle="Bitte geben Sie Ihre Streaminformationen ein"
57
+Basic.AutoConfig.StreamPage.Service="Plattform"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Alle anzeigen..."
59
+Basic.AutoConfig.StreamPage.Server="Server"
60
+Basic.AutoConfig.StreamPage.StreamKey="Streamschlüssel"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Schätzung der Bitrate mit Bandbreitentest (kann einige Minuten dauern)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardware-Codierung bevorzugen"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-Codierung beseitigt die meiste CPU-Auslastung, kann aber mehr Bitrate erfordern, um das gleiche Maß an Qualität zu erhalten."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamwarnung"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Der Bandbreitentest ist im Begriff, randomisierte Videodaten ohne Ton zu Ihrem Kanal zu streamen. Wenn Sie in der Lage sind, empfiehlt es sich, vorübergehend das Speichern von Videos abzuschalten und den Stream privat zu schalten, bis der Test abgeschlossen ist. Fortfahren?"
67
+Basic.AutoConfig.TestPage="Endergebnisse"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Das Programm führt nun eine Reihe von Tests durch, um die idealen Einstellungen abzuschätzen"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Tests abgeschlossen"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Führe Bandbreitentests durch, dies kann einige Minuten dauern..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Verbinde zu:  %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Keine Verbindung zu den Servern möglich, bitte überprüfen Sie ihre Internetverbindung und versuchen Sie es erneut."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Teste Bandbreite für: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Teste Streamcodierer, dies kann einige Minuten dauern..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Teste Aufnahmecodierer, dies kann einige Minuten dauern..."
76
+Basic.AutoConfig.TestPage.TestingRes="Teste Auflösungen, dies kann einige Minuten dauern..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Fehler beim Starten des Codierers"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Teste %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streamcodierer"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Aufnahmecodierer"
81
+Basic.AutoConfig.TestPage.Result.Header="Das Programm hat festgestellt, dass diese geschätzten Einstellungen für Sie am idealsten sind:"
82
+Basic.AutoConfig.TestPage.Result.Footer="Um den Assistenten neu zu konfigurieren und es erneut zu versuchen, klicken Sie auf Zurück."
83
+
84
+Basic.Stats="Statistiken"
85
+Basic.Stats.CPUUsage="CPU-Auslastung"
86
+Basic.Stats.HDDSpaceAvailable="Festplattenspeicher verfügbar"
87
+Basic.Stats.MemoryUsage="Speicherauslastung"
88
+Basic.Stats.AverageTimeToRender="Durchschnittliche Zeit, um Frame zu rendern"
89
+Basic.Stats.SkippedFrames="Übersprungene Frames, wegen Codierungsverzögerung"
90
+Basic.Stats.MissedFrames="Ausgelassene Frames. wegen Renderingverzögerung"
91
+Basic.Stats.Output.Stream="Stream"
92
+Basic.Stats.Output.Recording="Aufnahme"
93
+Basic.Stats.Status="Status"
94
+Basic.Stats.Status.Recording="Aufnahme"
95
+Basic.Stats.Status.Live="LIVE"
96
+Basic.Stats.Status.Reconnecting="Erneut verbinden"
97
+Basic.Stats.Status.Inactive="Inaktiv"
98
+Basic.Stats.DroppedFrames="Verworfene Frames (Netzwerk)"
99
+Basic.Stats.MegabytesSent="Insgesamte Datenausgabe"
100
+Basic.Stats.Bitrate="Bitrate"
101
 
102
 Updater.Title="Neues Update verfügbar"
103
 Updater.Text="Es ist ein neues Update verfügbar:"
104
@@ -113,7 +202,7 @@
105
 Output.StartStreamFailed="Fehler beim Start des Streams"
106
 Output.StartRecordingFailed="Fehler beim Starten der Aufnahme"
107
 Output.StartReplayFailed="Fehler beim Starten des Replaypuffers"
108
-Output.StartFailedGeneric="Start der Ausgabe fehlgeschlagen. Bitte überprüfen Sie die Logdatei für Details.\n\nHinweis: Wenn Sie die NVENC- oder AMD-Encoder verwenden, stellen Sie sicher, dass Ihre Videotreiber aktuell sind."
109
+Output.StartFailedGeneric="Start der Ausgabe fehlgeschlagen. Bitte überprüfen Sie die Logdatei für Details.\n\nHinweis: Wenn Sie die NVENC- oder AMD-Codierer verwenden, stellen Sie sicher, dass Ihre Videotreiber aktuell sind."
110
 
111
 Output.ConnectFail.Title="Verbindung fehlgeschlagen"
112
 Output.ConnectFail.BadPath="Ungültiger Pfad oder Verbindungs-URL. Bitte überprüfen Sie Ihre Einstellungen und stellen Sie sicher, dass diese korrekt sind."
113
@@ -375,6 +464,7 @@
114
 Basic.Settings.General.Theme="Motiv"
115
 Basic.Settings.General.Language="Sprache"
116
 Basic.Settings.General.EnableAutoUpdates="Beim Start nach Updates suchen"
117
+Basic.Settings.General.OpenStatsOnStartup="Statistikenfenster beim Start öffnen"
118
 Basic.Settings.General.WarnBeforeStartingStream="Bestätigungsdialog beim Streamstart anzeigen"
119
 Basic.Settings.General.WarnBeforeStoppingStream="Bestätigungsdialog beim Streamstop anzeigen"
120
 Basic.Settings.General.Projectors="Projektoren"
121
@@ -489,18 +579,18 @@
122
 FilenameFormatting.TT="%CCYY   Jahr, vier Ziffern\n%YY     Jahr, letzte zwei Ziffern (00-99)\n%MM      Monat als Dezimalzahl (01-12)\n%DD      Tag des Monats, mit Nullen aufgefüllt (01-31)\n%hh      Stunden im 24 Stunden Format (00-23)\n%mm       Minute (00-59)\n%ss     Sekunde (00-61)\n%%     Ein % Zeichen\n%a       Abgekürzter Wochentagsname\n%A      Voller Wochentagsname\n%b       Abgekürzer Monatsname\n%B       Voller Monatsname\n%d       Tag des Monats, mit Nullen aufgefüllt (01-31)\n%H       Stunden im 24 Stunden Format (00-23)\n%I        Stunden im 12 Stunden Format (01-12)\n%m        Monat als Dezimalzahl (01-12)\n%M       Minute (00-59)\n%p      AM oder PM Angabe\n%S       Sekunde (00-61)\n%y     Jahr, letzte zwei Ziffern (00-99)\n%Y       Jahr\n%z        ISO 8601 Verschiebung von UTC oder Zeitzone\n       Name oder Abkürzung\n%Z     Zeitzonenname oder Abkürzung\n"
123
 
124
 Basic.Settings.Video="Video"
125
-Basic.Settings.Video.Adapter="Grafikkarte:"
126
-Basic.Settings.Video.BaseResolution="Basis (Leinwand) Auflösung:"
127
-Basic.Settings.Video.ScaledResolution="Ausgabe (skaliert) Auflösung:"
128
-Basic.Settings.Video.DownscaleFilter="Skalierungs-Filter:"
129
+Basic.Settings.Video.Adapter="Grafikkarte"
130
+Basic.Settings.Video.BaseResolution="Basis (Leinwand) Auflösung"
131
+Basic.Settings.Video.ScaledResolution="Ausgabe (skaliert) Auflösung"
132
+Basic.Settings.Video.DownscaleFilter="Skalierungs-Filter"
133
 Basic.Settings.Video.DisableAeroWindows="Aero deaktivieren (nur Windows)"
134
-Basic.Settings.Video.FPS="FPS:"
135
+Basic.Settings.Video.FPS="FPS"
136
 Basic.Settings.Video.FPSCommon="Übliche FPS Werte"
137
 Basic.Settings.Video.FPSInteger="Ganzzahl FPS Wert"
138
 Basic.Settings.Video.FPSFraction="Bruchteil FPS Wert"
139
-Basic.Settings.Video.Numerator="Zähler:"
140
-Basic.Settings.Video.Denominator="Nenner:"
141
-Basic.Settings.Video.Renderer="Renderer:"
142
+Basic.Settings.Video.Numerator="Zähler"
143
+Basic.Settings.Video.Denominator="Nenner"
144
+Basic.Settings.Video.Renderer="Renderer"
145
 Basic.Settings.Video.InvalidResolution="Ungültige Auflösung. Muss sein [width]x[height] (z.B. 1920x1080)"
146
 Basic.Settings.Video.CurrentlyActive="Videoausgabe ist derzeit aktiv. Bitte schalten Sie alle Ausgaben ab, um die Videoeinstellungen zu ändern."
147
 Basic.Settings.Video.DisableAero="Aero deaktivieren"
148
@@ -538,6 +628,7 @@
149
 Basic.Settings.Advanced.Video.ColorRange.Full="Voll"
150
 Basic.Settings.Advanced.Audio.MonitoringDevice="Audiomonitoringgerät"
151
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
152
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows Audioducking deaktivieren"
153
 Basic.Settings.Advanced.StreamDelay="Stream-Verzögerung"
154
 Basic.Settings.Advanced.StreamDelay.Duration="Dauer (Sekunden)"
155
 Basic.Settings.Advanced.StreamDelay.Preserve="Lückenloses Wiederverbinden (erhöht Verzögerung, um Videoverlust zu vermeiden)"
156
@@ -617,3 +708,6 @@
157
 OutputWarnings.MultiTrackRecording="Warnung: Bestimmte Formate (z. B. FLV) unterstützen nicht mehrere Spuren pro Aufnahme"
158
 OutputWarnings.MP4Recording="Warnung: Aufnahmen, die in MP4 gespeichert werden, sind nicht wiederherstellbar, wenn die Datei nicht abgeschlossen werden kann (zum Beispiel als Folge von BSODs, Stromausfälle, etc). Wenn Sie mehrere Audiospuren aufnehmen möchten, sollten Sie MKV verwenden und die Aufnahme zu MP4 remuxen, nachdem sie fertig ist. (Datei-> Remuxe Aufnahmen)"
159
 
160
+FinalScene.Title="Szene löschen"
161
+FinalScene.Text="Es muss mindestens eine Szene vorhanden sein."
162
+
163
obs-studio-18.0.2.tar.xz/UI/data/locale/el-GR.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/el-GR.ini Changed
19
 
1
@@ -50,6 +50,12 @@
2
 
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 Basic.TransitionDuration="Διάρκεια"
12
 Basic.TogglePreviewProgramMode="Λειτουργία στούντιο"
13
 
14
@@ -376,3 +382,4 @@
15
 SceneItemHide="Απόκρυψη '%1'"
16
 
17
 
18
+
19
obs-studio-18.0.2.tar.xz/UI/data/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/en-US.ini Changed
149
 
1
@@ -36,6 +36,9 @@
2
 PreviewProjector="Fullscreen Projector (Preview)"
3
 SceneProjector="Fullscreen Projector (Scene)"
4
 SourceProjector="Fullscreen Projector (Source)"
5
+PreviewWindow="Windowed Projector (Preview)"
6
+SceneWindow="Windowed Projector (Scene)"
7
+SourceWindow="Windowed Projector (Source)"
8
 Clear="Clear"
9
 Revert="Revert"
10
 Show="Show"
11
@@ -66,11 +69,94 @@
12
 PasteReference="Paste (Reference)"
13
 PasteDuplicate="Paste (Duplicate)"
14
 RemuxRecordings="Remux Recordings"
15
+Next="Next"
16
+Back="Back"
17
+
18
+# warning if program already open
19
+AlreadyRunning.Title="OBS is already running"
20
+AlreadyRunning.Text="OBS is already running!  Unless you meant to do this, please shut down any existing instances of OBS before trying to run a new instance.  If you have OBS set to minimize to the system tray, please check to see if it's still running there."
21
+AlreadyRunning.LaunchAnyway="Launch Anyway"
22
 
23
 # copy filters
24
 Copy.Filters="Copy Filters"
25
 Paste.Filters="Paste Filters"
26
 
27
+# bandwidth test
28
+BandwidthTest.Region="Region"
29
+BandwidthTest.Region.US="United States"
30
+BandwidthTest.Region.EU="Europe"
31
+BandwidthTest.Region.Asia="Asia"
32
+BandwidthTest.Region.Other="Other"
33
+
34
+# first time startup
35
+Basic.FirstStartup.RunWizard="Would you like to run the auto-configuration wizard?  You can also manually configure your settings by clicking the Settings button in the main window."
36
+Basic.FirstStartup.RunWizard.BetaWarning="(Note: The auto-configuration wizard is currently in beta)"
37
+Basic.FirstStartup.RunWizard.NoClicked="If you change your mind, you can run the auto-configuration wizard any time again from the Tools menu."
38
+
39
+# auto config wizard
40
+Basic.AutoConfig="Auto-Configuration Wizard"
41
+Basic.AutoConfig.Beta="Auto-Configuration Wizard (Beta)"
42
+Basic.AutoConfig.ApplySettings="Apply Settings"
43
+Basic.AutoConfig.StartPage="Usage Information"
44
+Basic.AutoConfig.StartPage.SubTitle="Specify what you want to use the program for"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimize for streaming, recording is secondary"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimize just for recording, I will not be streaming"
47
+Basic.AutoConfig.VideoPage="Video Settings"
48
+Basic.AutoConfig.VideoPage.SubTitle="Specify the desired video settings you would like to use"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Use Current (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Display %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Use Current (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Either 60 or 30, but prefer 60 when possible"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Either 60 or 30, but prefer high resolution"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Note: The canvas (base) resolution is not necessarily the same as the resolution you will stream or record with.  Your actual stream/recording resolution may be scaled down from the canvas resolution to reduce resource usage or bitrate requirements."
55
+Basic.AutoConfig.StreamPage="Stream Information"
56
+Basic.AutoConfig.StreamPage.SubTitle="Please enter your stream information"
57
+Basic.AutoConfig.StreamPage.Service="Service"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Show All..."
59
+Basic.AutoConfig.StreamPage.Server="Server"
60
+Basic.AutoConfig.StreamPage.StreamKey="Stream Key"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimate bitrate with bandwidth test (may take a few minutes)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Prefer hardware encoding"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware Encoding eliminates most CPU usage, but may require more bitrate to obtain the same level of quality."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Stream warning"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="The bandwidth test is about to stream randomized video data without audio to your channel.  If you're able, it's recommended to temporarily turn off saving videos of streams and set the stream to private until after the test has completed.  Continue?"
67
+Basic.AutoConfig.TestPage="Final Results"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="The program is now executing a set of tests to estimate the most ideal settings"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testing complete"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Performing bandwidth test, this may take a few minutes..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Connecting to:  %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Failed to connect to any servers, please check your internet connection and try again."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testing bandwidth for:  %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testing stream encoder, this may take a minute..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testing recording encoder, this may take a minute..."
76
+Basic.AutoConfig.TestPage.TestingRes="Testing resolutions, this may take a few minutes..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Failed to start up encoder"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testing %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streaming Encoder"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Recording Encoder"
81
+Basic.AutoConfig.TestPage.Result.Header="The program has determined that these estimated settings are the most ideal for you:"
82
+Basic.AutoConfig.TestPage.Result.Footer="To use these settings, click Apply Settings.  To reconfigure the wizard and try again, click Back.  To manually configure settings yourself, click Cancel and open Settings."
83
+
84
+# stats
85
+Basic.Stats="Stats"
86
+Basic.Stats.CPUUsage="CPU Usage"
87
+Basic.Stats.HDDSpaceAvailable="HDD space available"
88
+Basic.Stats.MemoryUsage="Memory Usage"
89
+Basic.Stats.AverageTimeToRender="Average time to render frame"
90
+Basic.Stats.SkippedFrames="Skipped frames due to encoding lag"
91
+Basic.Stats.MissedFrames="Frames missed due to rendering lag"
92
+Basic.Stats.Output.Stream="Stream"
93
+Basic.Stats.Output.Recording="Recording"
94
+Basic.Stats.Status="Status"
95
+Basic.Stats.Status.Recording="Recording"
96
+Basic.Stats.Status.Live="LIVE"
97
+Basic.Stats.Status.Reconnecting="Reconnecting"
98
+Basic.Stats.Status.Inactive="Inactive"
99
+Basic.Stats.DroppedFrames="Dropped Frames (Network)"
100
+Basic.Stats.MegabytesSent="Total Data Output"
101
+Basic.Stats.Bitrate="Bitrate"
102
+
103
 # updater
104
 Updater.Title="New update available"
105
 Updater.Text="There is a new update available:"
106
@@ -437,6 +523,7 @@
107
 Basic.Settings.General.Theme="Theme"
108
 Basic.Settings.General.Language="Language"
109
 Basic.Settings.General.EnableAutoUpdates="Automatically check for updates on startup"
110
+Basic.Settings.General.OpenStatsOnStartup="Open stats dialog on startup"
111
 Basic.Settings.General.WarnBeforeStartingStream="Show confirmation dialog when starting streams"
112
 Basic.Settings.General.WarnBeforeStoppingStream="Show confirmation dialog when stopping streams"
113
 Basic.Settings.General.Projectors="Projectors"
114
@@ -558,18 +645,18 @@
115
 
116
 # basic mode 'video' settings
117
 Basic.Settings.Video="Video"
118
-Basic.Settings.Video.Adapter="Video Adapter:"
119
-Basic.Settings.Video.BaseResolution="Base (Canvas) Resolution:"
120
-Basic.Settings.Video.ScaledResolution="Output (Scaled) Resolution:"
121
-Basic.Settings.Video.DownscaleFilter="Downscale Filter:"
122
+Basic.Settings.Video.Adapter="Video Adapter"
123
+Basic.Settings.Video.BaseResolution="Base (Canvas) Resolution"
124
+Basic.Settings.Video.ScaledResolution="Output (Scaled) Resolution"
125
+Basic.Settings.Video.DownscaleFilter="Downscale Filter"
126
 Basic.Settings.Video.DisableAeroWindows="Disable Aero (Windows only)"
127
-Basic.Settings.Video.FPS="FPS:"
128
+Basic.Settings.Video.FPS="FPS"
129
 Basic.Settings.Video.FPSCommon="Common FPS Values"
130
 Basic.Settings.Video.FPSInteger="Integer FPS Value"
131
 Basic.Settings.Video.FPSFraction="Fractional FPS Value"
132
-Basic.Settings.Video.Numerator="Numerator:"
133
-Basic.Settings.Video.Denominator="Denominator:"
134
-Basic.Settings.Video.Renderer="Renderer:"
135
+Basic.Settings.Video.Numerator="Numerator"
136
+Basic.Settings.Video.Denominator="Denominator"
137
+Basic.Settings.Video.Renderer="Renderer"
138
 Basic.Settings.Video.InvalidResolution="Invalid resolution value.  Must be [width]x[height] (i.e. 1920x1080)"
139
 Basic.Settings.Video.CurrentlyActive="Video output is currently active.  Please turn off any outputs to change video settings."
140
 Basic.Settings.Video.DisableAero="Disable Aero"
141
@@ -610,6 +697,7 @@
142
 Basic.Settings.Advanced.Video.ColorRange.Full="Full"
143
 Basic.Settings.Advanced.Audio.MonitoringDevice="Audio Monitoring Device"
144
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default"
145
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Disable Windows audio ducking"
146
 Basic.Settings.Advanced.StreamDelay="Stream Delay"
147
 Basic.Settings.Advanced.StreamDelay.Duration="Duration (seconds)"
148
 Basic.Settings.Advanced.StreamDelay.Preserve="Preserve cutoff point (increase delay) when reconnecting"
149
obs-studio-18.0.2.tar.xz/UI/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/es-ES.ini Changed
203
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Proyector de pantalla completa (Previsualización)"
3
 SceneProjector="Proyector de pantalla completa (escena)"
4
 SourceProjector="Proyector de pantalla completa (fuente)"
5
+PreviewWindow="Proyector con ventana (Pre-visualización)"
6
+SceneWindow="Proyector con ventana (Escena)"
7
+SourceWindow="Proyector con ventana (Fuente)"
8
 Clear="Borrar"
9
 Revert="Revertir"
10
 Show="Mostrar"
11
@@ -56,6 +59,91 @@
12
 ReplayBuffer="Búfer de reproducción"
13
 Import="Importar"
14
 Export="Exportar"
15
+Copy="Copiar"
16
+Paste="Pegar"
17
+PasteReference="Pegar (referencia)"
18
+PasteDuplicate="Pegar (duplicado)"
19
+RemuxRecordings="Grabaciones Convertidas"
20
+Next="Siguiente"
21
+Back="Atrás"
22
+
23
+AlreadyRunning.Title="OBS ya se está ejecutando"
24
+AlreadyRunning.Text="¡OBS ya se está ejecutando! A no ser que quieras hacer esto, por favor, cierra todas las ventanas de OBS antes de intentar iniciar una nueva. Si tienes configurado OBS para que se minimize a la barra de tareas, prueba a ver si sigue ejecutándose ahí."
25
+AlreadyRunning.LaunchAnyway="Lanzar de todas maneras"
26
+
27
+Copy.Filters="Copiar filtros"
28
+Paste.Filters="Pegar filtros"
29
+
30
+BandwidthTest.Region="Región"
31
+BandwidthTest.Region.US="Estados Unidos"
32
+BandwidthTest.Region.EU="Europa"
33
+BandwidthTest.Region.Asia="Asia"
34
+BandwidthTest.Region.Other="Otros"
35
+
36
+Basic.FirstStartup.RunWizard="¿Deseas ejecutar el asistente de configuración automática? También puedes configurar tus ajustes manualmente al hacer clic en el botón \"Configuración\" de la ventana principal."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Nota: El asistente de configuración automática está en beta)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Si cambias tu mente, puede ejecutar al asistente de configuración automática cualquier momento desde el menú \"Herramientas\"."
39
+
40
+Basic.AutoConfig="Asistente de configuración automática"
41
+Basic.AutoConfig.Beta="Asistente de configuración automática (Beta)"
42
+Basic.AutoConfig.ApplySettings="Aplicar configuración"
43
+Basic.AutoConfig.StartPage="Información sobre el uso"
44
+Basic.AutoConfig.StartPage.SubTitle="Especifique para que quiere usar el programa"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimizar para transmisiones, la grabación es secundaria"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimizar solo para grabación, no voy a hacer una transmisión"
47
+Basic.AutoConfig.VideoPage="Ajustes de vídeo"
48
+Basic.AutoConfig.VideoPage.SubTitle="Especifique los ajustes de vídeo deseados que quiera usar"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Usar Actual (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Pantalla %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Usar actual (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 o 30, pero usar 60 cuando sea posible"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 o 30, pero usar alta resolución"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Nota: La resolución del lienzo (base) no es necesariamente la misma que la resolución de la transmisión o grabación. La resolución actual puede ser reducida del lienzo para reducir el uso de los recursos o del bitrate."
55
+Basic.AutoConfig.StreamPage="Información de servicio de Stream"
56
+Basic.AutoConfig.StreamPage.SubTitle="Por favor, introduce información sobre tu servicio de stream"
57
+Basic.AutoConfig.StreamPage.Service="Servicio"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar todos..."
59
+Basic.AutoConfig.StreamPage.Server="Servidor"
60
+Basic.AutoConfig.StreamPage.StreamKey="Clave de retransmisión"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Enlace)"
62
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificación por hardware"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Codificación por hardware elimina la mayoría del uso de la CPU, pero puede requerir mas bitrate para obtener el mismo nivel de calidad."
64
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Advertencia de transmisión"
65
+Basic.AutoConfig.StreamPage.StreamWarning.Text="La prueba de ancho de banda esta a punto de transmitir datos de video aleatorios sin audio a tu canal. Si puedes, es recomendable desactivar temporalmente el que se guarden los videos de las transmisiones y hacer la transmisión privada después de que la prueba haya finalizado. ¿Desea continuar?"
66
+Basic.AutoConfig.TestPage="Resultado final"
67
+Basic.AutoConfig.TestPage.SubTitle.Testing="El programa ahora esta ejecutando un conjunto de pruebas para estimar los ajustes óptimos"
68
+Basic.AutoConfig.TestPage.SubTitle.Complete="Prueba completada"
69
+Basic.AutoConfig.TestPage.TestingBandwidth="Ejecutando prueba de ancho de banda, esto puede tardar unos minutos..."
70
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Conectando a: %1..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="No se pudo conectar a ningún servidor. Por favor revise su conexión a Internet e inténtelo de nuevo."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Probando ancho de banda para: %1"
73
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Probando codificador de transmisión, esto puede tardar un minuto..."
74
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Probando codificador de grabación, esto puede tardar un minuto..."
75
+Basic.AutoConfig.TestPage.TestingRes="Probando resoluciones, esto puede tardar unos minutos..."
76
+Basic.AutoConfig.TestPage.TestingRes.Fail="No se pudo iniciar el codificador"
77
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Probando %1x%2 %3 FPS..."
78
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Codificador de transmisión"
79
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Codificador de grabación"
80
+Basic.AutoConfig.TestPage.Result.Header="El programa ha determinado que estos ajustes estimados son los mas óptimos para ti:"
81
+Basic.AutoConfig.TestPage.Result.Footer="Para utilizar estos ajustes, haga clic en \"Aplicar Configuración\". Para volver a configurar el asistente, haga clic en Atrás. Para configurar los ajustes por ti mismo, haga clic en Cancelar y abra los ajustes."
82
+
83
+Basic.Stats="Estadísticas"
84
+Basic.Stats.CPUUsage="Uso de CPU"
85
+Basic.Stats.HDDSpaceAvailable="Espacio disponible en disco"
86
+Basic.Stats.MemoryUsage="Uso de memoria"
87
+Basic.Stats.AverageTimeToRender="Tiempo de media para procesar un fotograma"
88
+Basic.Stats.SkippedFrames="Fotogramas saltados por retraso de procesamiento"
89
+Basic.Stats.MissedFrames="Fotogramas perdidos por retraso de procesamiento"
90
+Basic.Stats.Output.Stream="Transmisión"
91
+Basic.Stats.Output.Recording="Grabación"
92
+Basic.Stats.Status="Estado"
93
+Basic.Stats.Status.Recording="Grabando"
94
+Basic.Stats.Status.Live="EN VIVO"
95
+Basic.Stats.Status.Reconnecting="Volviendo a conectar"
96
+Basic.Stats.Status.Inactive="Inactivo"
97
+Basic.Stats.DroppedFrames="Fotogramas Perdidos (Red)"
98
+Basic.Stats.MegabytesSent="Salida de datos total"
99
+Basic.Stats.Bitrate="Bitrate"
100
 
101
 Updater.Title="Nueva actualización disponible"
102
 Updater.Text="Hay una nueva versión disponible:"
103
@@ -242,10 +330,10 @@
104
 Basic.StatusBar.Reconnecting="Desconectado, reconexión en %2 segundo(s) (tentativa%1)"
105
 Basic.StatusBar.AttemptingReconnect="Intentando volver a conectar... (intento %1)"
106
 Basic.StatusBar.ReconnectSuccessful="Reconexión exitosa"
107
-Basic.StatusBar.Delay="Retraso (%1 sec)"
108
-Basic.StatusBar.DelayStartingIn="Retraso (iniciando en %1 sec)"
109
-Basic.StatusBar.DelayStoppingIn="Retraso (parando en %1 sec)"
110
-Basic.StatusBar.DelayStartingStoppingIn="Retraso (parando en %1 sec, iniciando en %2 sec)"
111
+Basic.StatusBar.Delay="Retardo (%1 sec)"
112
+Basic.StatusBar.DelayStartingIn="Retardo (iniciando en %1 sec)"
113
+Basic.StatusBar.DelayStoppingIn="Retardo (parando en %1 sec)"
114
+Basic.StatusBar.DelayStartingStoppingIn="Retardo (parando en %1 sec, iniciando en %2 sec)"
115
 
116
 Basic.Filters="Filtros"
117
 Basic.Filters.AsyncFilters="Filtros de audio/vídeo"
118
@@ -298,7 +386,7 @@
119
 Basic.Main.StoppingReplayBuffer="Deteniendo la reproducción del búfer..."
120
 Basic.Main.StopStreaming="Detener Transmisión"
121
 Basic.Main.StoppingStreaming="Deteniendo la trasmisión..."
122
-Basic.Main.ForceStopStreaming="Parar Transmisión (descartar retraso)"
123
+Basic.Main.ForceStopStreaming="Parar Transmisión (descartar retardo)"
124
 
125
 Basic.MainMenu.File="&Archivo"
126
 Basic.MainMenu.File.Export="&Exportar"
127
@@ -375,6 +463,7 @@
128
 Basic.Settings.General.Theme="Tema"
129
 Basic.Settings.General.Language="Idioma"
130
 Basic.Settings.General.EnableAutoUpdates="Comprobar actualizaciones automáticamente al inicio"
131
+Basic.Settings.General.OpenStatsOnStartup="Abrir dialogo de estadísticas al inicio"
132
 Basic.Settings.General.WarnBeforeStartingStream="Mostrar diálogo de confirmación cuando se inicia una transmisión"
133
 Basic.Settings.General.WarnBeforeStoppingStream="Mostrar diálogo de confirmación cuando se para una transmisión"
134
 Basic.Settings.General.Projectors="Proyectores"
135
@@ -436,7 +525,7 @@
136
 Basic.Settings.Output.VideoBitrate="Bitrate de vídeo"
137
 Basic.Settings.Output.AudioBitrate="Bitrate de audio"
138
 Basic.Settings.Output.Reconnect="Reconectar automáticamente"
139
-Basic.Settings.Output.RetryDelay="Demora al reintentar (segundos)"
140
+Basic.Settings.Output.RetryDelay="Retardo al re-intentar (segundos)"
141
 Basic.Settings.Output.MaxRetries="Reintentos máximos"
142
 Basic.Settings.Output.Advanced="Habilitar la configuración de codificador avanzada"
143
 Basic.Settings.Output.EncoderPreset="Perfil de Codificador (más rapido = menos CPU)"
144
@@ -489,18 +578,18 @@
145
 FilenameFormatting.TT="%CCYY       Año, cuatro dígitos\n%YY        Año, ultimo dos dígitos (00-99)\n%MM        Mes como numero decimal (01-12)\n%DD        Día del mes, cero-añadido (01-31)\n%hh      Hora en formato 24h (00-23)\n%mm        Minuto (00-59)\n%ss     Segundo (00-61)\n%%     A % signo\n%a       Nombre del día semanal Abreviado\n%A        completo nombre dia semanal\n%b     Nombre del Mes Abreviado\n%B        Nombre completo del nombre del mes\n%d      Día del mes, cero-añadido (01-31)\n%H       Formato Hora en 24h (00-23)\n%I     Formato Hora en 12h (01-12)\n%m     Mes como numero decimal (01-12)\n%M     Minuto (00-59)\n%p      Designación AM o PM\n%S     Segundo (00-61)\n%y     Año, últimos dos dígitos (00-99)\n%Y        Year\n%z        ISO 8601 ajuste de UTC o zona horaria\n     nombre o abreviación\n%Z        Nombre de zona horaria o abreviación\n"
146
 
147
 Basic.Settings.Video="Vídeo"
148
-Basic.Settings.Video.Adapter="Adaptador de vídeo:"
149
-Basic.Settings.Video.BaseResolution="Resolución de la base (Canvas):"
150
-Basic.Settings.Video.ScaledResolution="Resolución de salida (Escalada):"
151
-Basic.Settings.Video.DownscaleFilter="Filtro de escala:"
152
+Basic.Settings.Video.Adapter="Adaptador de vídeo"
153
+Basic.Settings.Video.BaseResolution="Resolución de la base (Lienzo)"
154
+Basic.Settings.Video.ScaledResolution="Resolución de salida (Escalada)"
155
+Basic.Settings.Video.DownscaleFilter="Filtro de escala"
156
 Basic.Settings.Video.DisableAeroWindows="Desactivar Aero (sólo Windows)"
157
-Basic.Settings.Video.FPS="FPS:"
158
+Basic.Settings.Video.FPS="FPS"
159
 Basic.Settings.Video.FPSCommon="Valores comunes de FPS"
160
 Basic.Settings.Video.FPSInteger="Valor entero de FPS"
161
 Basic.Settings.Video.FPSFraction="Valor fraccional de FPS"
162
-Basic.Settings.Video.Numerator="Numerador:"
163
-Basic.Settings.Video.Denominator="Denominador:"
164
-Basic.Settings.Video.Renderer="Procesador:"
165
+Basic.Settings.Video.Numerator="Numerador"
166
+Basic.Settings.Video.Denominator="Denominador"
167
+Basic.Settings.Video.Renderer="Renderizador"
168
 Basic.Settings.Video.InvalidResolution="Valor de la resolución no válido.  Debe ser [ancho] x [altura] (por ejemplo, 1920 x 1080)"
169
 Basic.Settings.Video.CurrentlyActive="La salida de vídeo está actualmente activa.  Por favor apague cualquier salida para cambiar la configuración de vídeo."
170
 Basic.Settings.Video.DisableAero="Deshabilitar Aero"
171
@@ -518,9 +607,9 @@
172
 Basic.Settings.Audio.AuxDevice2="Dispositivo de audio Mic/auxiliar 2"
173
 Basic.Settings.Audio.AuxDevice3="Dispositivo de audio Mic/auxiliar 3"
174
 Basic.Settings.Audio.EnablePushToMute="Habilitar Pulsar para Silenciar"
175
-Basic.Settings.Audio.PushToMuteDelay="Retraso de Presionar para Silenciar"
176
+Basic.Settings.Audio.PushToMuteDelay="Retardo de Presionar para Silenciar"
177
 Basic.Settings.Audio.EnablePushToTalk="Habilitar Pulsar para Hablar"
178
-Basic.Settings.Audio.PushToTalkDelay="Retraso de Pulsar para Hablar"
179
+Basic.Settings.Audio.PushToTalkDelay="Retardo de Pulsar para Hablar"
180
 Basic.Settings.Audio.UnknownAudioDevice="[Dispositivo no conectado o no está disponible]"
181
 
182
 Basic.Settings.Advanced="Avanzado"
183
@@ -538,9 +627,10 @@
184
 Basic.Settings.Advanced.Video.ColorRange.Full="Completo"
185
 Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo de monitorización de audio"
186
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Por defecto"
187
-Basic.Settings.Advanced.StreamDelay="Retraso de la transmisión"
188
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Desactivar reducción de audio de Windows"
189
+Basic.Settings.Advanced.StreamDelay="Retardo de la transmisión"
190
 Basic.Settings.Advanced.StreamDelay.Duration="Duración (segundos)"
191
-Basic.Settings.Advanced.StreamDelay.Preserve="Preservar el punto de corte (aumento de retraso) al volver a conectar"
192
+Basic.Settings.Advanced.StreamDelay.Preserve="Preservar el punto de corte (aumento de retardo) al volver a conectar"
193
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Uso estimado de memoria: %1 MB"
194
 Basic.Settings.Advanced.Network="Red"
195
 Basic.Settings.Advanced.Network.BindToIP="Enlazar con IP"
196
@@ -617,3 +707,6 @@
197
 OutputWarnings.MultiTrackRecording="ADVERTENCIA: Ciertos formatos (como FLV) no admiten varias pistas por grabación"
198
 OutputWarnings.MP4Recording="ADVERTENCIA: Las grabaciones guardadas en MP4 será irrecuperables si el archivo no puede finalizarse (e.g. como resultado de BSODs, pérdidas de potencia, etcetera). Si quieres grabar varias pistas de audio utiliza MKV y reune la grabación a mp4 después de que termine (archivo-> Remux de grabaciones)"
199
 
200
+FinalScene.Title="Eliminar escena"
201
+FinalScene.Text="Debe haber al menos una escena."
202
+
203
obs-studio-18.0.2.tar.xz/UI/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/et-EE.ini Changed
301
 
1
@@ -8,7 +8,7 @@
2
 Close="Sulge"
3
 Save="Salvesta"
4
 Discard="Loobu muudatustest"
5
-Disable="Välja lülitatud"
6
+Disable="Lülita välja"
7
 Yes="Jah"
8
 No="Ei"
9
 Add="Lisa"
10
@@ -57,6 +57,12 @@
11
 Import="Impordi"
12
 Export="Ekspordi"
13
 
14
+
15
+
16
+
17
+
18
+
19
+
20
 Updater.Title="Uus värskendus saadaval"
21
 Updater.Text="Uus värskendus on saadaval:"
22
 Updater.UpdateNow="Värskenda kohe"
23
@@ -105,6 +111,7 @@
24
 
25
 ConfirmRemove.Title="Ümbernimetamise kinnitamine"
26
 ConfirmRemove.Text="Kas soovid kindlasti eemaldada '$1'?"
27
+ConfirmRemove.TextMultiple="Kas soovite kindlasti eemaldada %1 üksust?"
28
 
29
 Output.StartStreamFailed="Voogedastuse alustamine nurjus"
30
 Output.StartRecordingFailed="Salvestamise alustamine nurjus"
31
@@ -113,11 +120,24 @@
32
 Output.ConnectFail.BadPath="Vigane rada või ühenduse URL. Palun veendu, et valitud sätted on õiged."
33
 Output.ConnectFail.ConnectFailed="Serveriga ühendamine ebaõnnestus"
34
 
35
+Output.RecordFail.Title="Salvestamise alustamine nurjus"
36
+Output.RecordNoSpace.Title="Kettaruumi pole piisavalt"
37
+Output.RecordNoSpace.Msg="Pole piisavalt kettaruumi, et jätkata salvestamist."
38
 Output.RecordError.Title="Salvestamise tõrge"
39
+Output.RecordError.Msg="Salvestamise ajal ilmnes tundmatu tõrge."
40
+Output.ReplayBuffer.NoHotkey.Title="Kiirklahv pole seadistatud!"
41
+Output.ReplayBuffer.NoHotkey.Msg="\"Salvesta Taasesitus\" kiirklahv on seadistamata. Palun seadistage kiirklahv, mida soovite kasutada."
42
 
43
+Output.BadPath.Title="Halb failitee"
44
+Output.BadPath.Text="Konfigureeritud failiväljundi tee on vale. Palun kontrollige oma sätetes, kas õige failitee on valitud."
45
 
46
+LogReturnDialog="Logi üleslaadimine õnnestus"
47
 LogReturnDialog.CopyURL="Kopeeri aadress"
48
+LogReturnDialog.ErrorUploadingLog="Esines viga logifaili üleslaadimisel"
49
 
50
+LicenseAgreement="Litsentsileping"
51
+LicenseAgreement.PleaseReview="Palun vaadake üle lisentsi tingimused enne OBS-i kasutamist. Selle programmi kasutamisega tunnistate, et olete antud tingimused läbilugenud ja nõustute <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a> tingimustega. Palun kerige alla, et näha tervet lepingut."
52
+LicenseAgreement.ClickIAgreeToContinue="Kui nõustute lepingu tingimustega, klõpsake nõustun, et  jätkata.  Te peate nõustuma, et kasutada OBS-i."
53
 LicenseAgreement.IAgree="Nõustun"
54
 LicenseAgreement.Exit="Välju"
55
 
56
@@ -140,14 +160,22 @@
57
 
58
 Basic.DesktopDevice1="Töölaua heli"
59
 Basic.DesktopDevice2="Töölaua heli 2"
60
+Basic.AuxDevice1="Mikrofon/Aux"
61
+Basic.AuxDevice2="Mikrofon/Aux 2"
62
+Basic.AuxDevice3="Mikrofon/Aux 3"
63
+Basic.AuxDevice4="Mikrofon/Aux 4"
64
 
65
 Basic.Scene="Stseen"
66
+Basic.DisplayCapture="Kuvari hõive"
67
 
68
 Basic.Main.PreviewConextMenu.Enable="Lülita eelvaade sisse"
69
 
70
 ScaleFiltering.Point="Punkt"
71
 
72
+Deinterlacing.Retro="Retro"
73
+Deinterlacing.Blend="Sulanda"
74
 
75
+VolControl.Mute="Vaigista '%1'"
76
 VolControl.Properties="'%1' atribuudid"
77
 
78
 Basic.Main.AddSceneDlg.Title="Stseeni lisamine"
79
@@ -173,16 +201,27 @@
80
 Basic.SourceSelect.AddVisible="Tee allikas nähtavaks"
81
 
82
 Basic.PropertiesWindow="'%1' omadused"
83
+Basic.PropertiesWindow.SelectColor="Vali värv"
84
+Basic.PropertiesWindow.SelectFont="Vali font"
85
+Basic.PropertiesWindow.Confirm="On salvestamata muutusi.  Kas soovite neid säilitada?"
86
 Basic.PropertiesWindow.AddFiles="Lisa failid"
87
 Basic.PropertiesWindow.AddDir="Lisa kataloog"
88
 Basic.PropertiesWindow.AddURL="Lisa tee/URL"
89
 
90
+Basic.PropertiesView.FPS.Simple="Lihtsad FPS väärtused"
91
 
92
 
93
+Basic.StatusBar.ReconnectSuccessful="Taasühendumine edukas"
94
+Basic.StatusBar.Delay="Viivitus (%1 s)"
95
+Basic.StatusBar.DelayStartingIn="Viivitus (algab %1 s pärast)"
96
+Basic.StatusBar.DelayStoppingIn="Viivitus (lõppeb %1 s pärast)"
97
+Basic.StatusBar.DelayStartingStoppingIn="Viivitus (lõppeb %1 s pärast, algab %2 s pärast)"
98
 
99
 Basic.Filters="Filtrid"
100
+Basic.Filters.AsyncFilters="Audio/Video filtrid"
101
 Basic.Filters.AudioFilters="Helifiltrid"
102
 Basic.Filters.AddFilter.Title="Filtri nimi"
103
+Basic.Filters.AddFilter.Text="Palun määrake filtri nimi"
104
 
105
 Basic.TransformWindow.Position="Asukoht"
106
 Basic.TransformWindow.Rotation="Pööramine"
107
@@ -200,6 +239,8 @@
108
 Basic.TransformWindow.Alignment.BottomCenter="Alla keskele"
109
 Basic.TransformWindow.Alignment.BottomRight="Alla paremale"
110
 
111
+Basic.TransformWindow.BoundsType.None="Piirid määramata"
112
+Basic.TransformWindow.BoundsType.MaxOnly="Maksimaalne suurus ainult"
113
 
114
 Basic.Main.AddSourceHelp.Title="Allikat ei saa lisada"
115
 Basic.Main.AddSourceHelp.Text="Allika lisamiseks peab olema vähemalt üks stseen."
116
@@ -210,7 +251,12 @@
117
 Basic.Main.StartRecording="Alusta salvestamist"
118
 Basic.Main.StartStreaming="Alusta voogedastust"
119
 Basic.Main.StopRecording="Lõpeta salvestamine"
120
+Basic.Main.StoppingRecording="Salvestamise peatamine..."
121
+Basic.Main.StopReplayBuffer="Peata taasesituse puhver"
122
+Basic.Main.StoppingReplayBuffer="Taasesitus puhvri peatamine..."
123
 Basic.Main.StopStreaming="Lõpeta voogedastus"
124
+Basic.Main.StoppingStreaming="Voogedastuse peatamine..."
125
+Basic.Main.ForceStopStreaming="Lõpeta voogedastus (unusta viivitus)"
126
 
127
 Basic.MainMenu.File="&Fail"
128
 Basic.MainMenu.File.Export="&Ekspordi"
129
@@ -225,6 +271,9 @@
130
 Basic.MainMenu.Edit="Muuda (&E)"
131
 Basic.MainMenu.Edit.Undo="Võta tagasi (&U)"
132
 Basic.MainMenu.Edit.UndoAction="&Võta tagasi $1"
133
+Basic.MainMenu.Edit.LockPreview="&Lukusta eelvaade"
134
+Basic.MainMenu.Edit.Scale.Canvas="Lõuend (%1x%2)"
135
+Basic.MainMenu.Edit.Scale.Output="Väljund (%1x%2)"
136
 Basic.MainMenu.Edit.Transform.Rotate90CW="Pööra 90 kraadi paremale"
137
 Basic.MainMenu.Edit.Transform.Rotate90CCW="Pööra 90 kraadi vasakule"
138
 Basic.MainMenu.Edit.Transform.Rotate180="Pööra 180 kraadi"
139
@@ -244,15 +293,36 @@
140
 
141
 Basic.MainMenu.SceneCollection="&Stseeni kogumik"
142
 Basic.MainMenu.Profile="&Profiil"
143
+Basic.MainMenu.Profile.Import="Impordi profiil"
144
+Basic.MainMenu.Profile.Export="Ekspordi profiil"
145
+Basic.MainMenu.SceneCollection.Import="Impordi stseeni kollektsioon"
146
+Basic.MainMenu.SceneCollection.Export="Ekspordi stseeni kollektsioon"
147
+Basic.MainMenu.Profile.Exists="Profiil on juba olemas"
148
+Basic.MainMenu.SceneCollection.Exists="Stseeni kollektsioon on juba olemas"
149
 
150
+Basic.MainMenu.Tools="&Tööriistad"
151
 
152
+Basic.MainMenu.Help="&Abi"
153
+Basic.MainMenu.Help.Website="Külasta &Kodulehte"
154
 Basic.MainMenu.Help.Logs="&Logifailid"
155
+Basic.MainMenu.Help.Logs.ShowLogs="&Näita logifaile"
156
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Lae ülesse &praegune logifail"
157
+Basic.MainMenu.Help.Logs.UploadLastLog="Lae ülesse &viimatine logifail"
158
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Vaata praegust logifaili"
159
 Basic.MainMenu.Help.CheckForUpdates="Otsi värskendusi"
160
 
161
+Basic.Settings.ProgramRestart="Nende sätete jõustumiseks tuleb taaskäivitada programm."
162
+Basic.Settings.ConfirmTitle="Kinnita muudatused"
163
+Basic.Settings.Confirm="Teil on salvestamata muutusi.  Salvestame muudatused?"
164
 
165
+Basic.Settings.General="Üldine"
166
 Basic.Settings.General.Theme="Teema"
167
 Basic.Settings.General.Language="Keel"
168
 Basic.Settings.General.Projectors="Projektorid"
169
+Basic.Settings.General.SysTray="Süsteemi salve"
170
+Basic.Settings.General.SysTrayWhenStarted="Minimeeri süsteemi salve käivitumisel"
171
+Basic.Settings.General.SystemTrayHideMinimize="Alati Minimeeri süsteemi salve käivitumisel, tegumiriba asemel"
172
+Basic.Settings.General.SaveProjectors="Salvesta projektorid väljumisel"
173
 
174
 Basic.Settings.Stream="Voogedastus"
175
 Basic.Settings.Stream.StreamType="Voogedastuse tüüp"
176
@@ -261,14 +331,25 @@
177
 Basic.Settings.Output.Format="Salvestusvorming"
178
 Basic.Settings.Output.Encoder="Kodeerija"
179
 Basic.Settings.Output.SelectDirectory="Vali salvestuskaust"
180
+Basic.Settings.Output.SelectFile="Vali salvestus fail"
181
 Basic.Settings.Output.Mode="Väljundrežiim"
182
 Basic.Settings.Output.Mode.Simple="Lihtne"
183
 Basic.Settings.Output.Mode.Adv="Täpsemad seaded"
184
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg väljund"
185
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Ei saa hinnata mälukasutust.  Palun määrake maksimaalne piir."
186
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kadudeta kvaliteet, tohutult suur failimaht"
187
+Basic.Settings.Output.Simple.Warn.Lossless="Hoiatus: Kadudeta kvaliteet tekitab tohutult suuri faile!  Kadudeta kvaliteet võib kasutada kuni 7 Gb kettaruumi minuti kohta, kõrge eraldusvõime ja kaadrisagedusega.  Kadudeta kvaliteeti ei ole soovitatav kasutada pikkade salvestiste jaoks, kui teil just ei ole väga palju vaba kettaruumi."
188
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Kas soovite kindlasti kasutada kadudeta kvaliteeti?"
189
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Kadudeta kvaliteedi hoiatus!"
190
 Basic.Settings.Output.Simple.Encoder.Software="Tarkvara (x264)"
191
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Riistvara (QSV)"
192
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Riistvara (AMD)"
193
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Riistvara (NVENC)"
194
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Tarkvara (x264 madal CPU kasutus, suurendab faili suurust)"
195
+Basic.Settings.Output.VideoBitrate="Video bitikiirus"
196
+Basic.Settings.Output.AudioBitrate="Audio bitikiirus"
197
+Basic.Settings.Output.Reconnect="Taasühendu automaatselt"
198
+Basic.Settings.Output.EncoderPreset="Kodeerija eelseadistus(kõrgem = vähem CPU)"
199
 
200
 Basic.Settings.Output.Adv.AudioTrack="Helirada"
201
 Basic.Settings.Output.Adv.Streaming="Voogedastus"
202
@@ -276,45 +357,97 @@
203
 Basic.Settings.Output.Adv.Audio.Track2="Rada 2"
204
 Basic.Settings.Output.Adv.Audio.Track3="Rada 3"
205
 Basic.Settings.Output.Adv.Audio.Track4="Rada 4"
206
+Basic.Settings.Output.Adv.Audio.Track5="Rada 5"
207
+Basic.Settings.Output.Adv.Audio.Track6="Rada 6"
208
 
209
 Basic.Settings.Output.Adv.Recording="Salvestus"
210
 Basic.Settings.Output.Adv.Recording.Type="Tüüp"
211
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standartne"
212
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Kohandatud väljund (FFmpeg)"
213
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Kasuta voogedastuse kodeerijat)"
214
 Basic.Settings.Output.Adv.Recording.Filename="Failinime vorming"
215
 Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Kirjuta üle, kui fail on olemas"
216
 Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg väljundi tüüp"
217
 Basic.Settings.Output.Adv.FFmpeg.Type.URL="Kirjuta URL-ile"
218
 Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Kirjuta faili"
219
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Levinud salvestus formaadid"
220
 Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Kõik failid"
221
 Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Faili rada või URL"
222
 Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Heli"
223
 Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Video"
224
 Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Vaikevorming"
225
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Failiteest või URL-ist arvatud Audio/Video kodeering"
226
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Vaikekodeerija"
227
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Lülita välja kodeerija"
228
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video kodeerija"
229
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video kodeerija sätted (kui on)"
230
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Heli kodeerija"
231
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Heli kodeerija sätted (kui on)"
232
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Võtmekaadri intervall (kaadrit)"
233
 
234
 
235
 
236
 Basic.Settings.Video="Video"
237
 Basic.Settings.Video.Adapter="Kuvaadapter:"
238
+Basic.Settings.Video.BaseResolution="Alus (lõuendi) resolutsioon:"
239
+Basic.Settings.Video.FPS="FPS:"
240
 Basic.Settings.Video.Numerator="Lugeja:"
241
 Basic.Settings.Video.Denominator="Nimetaja:"
242
 Basic.Settings.Video.InvalidResolution="Eraldusvõime ei sobi. See peab olema kujul [width]x[height] (nt 1920x1080)"
243
 
244
 
245
+Basic.Settings.Audio="Heli"
246
+Basic.Settings.Audio.Channels="Kanalid"
247
 Basic.Settings.Audio.DesktopDevice="Töölaua heliseade"
248
 Basic.Settings.Audio.DesktopDevice2="Töölaua heliseade 2"
249
-
250
+Basic.Settings.Audio.UnknownAudioDevice="[Seade ühendamata või pole saadaval]"
251
+
252
+Basic.Settings.Advanced.General.ProcessPriority.High="Kõrge"
253
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Normaalsest kõrgem"
254
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normaalne"
255
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Tegevusetu"
256
+Basic.Settings.Advanced.Video.ColorFormat="Värvi formaat"
257
+Basic.Settings.Advanced.Video.ColorRange="YUV värviruumi vahemik"
258
 Basic.Settings.Advanced.Video.ColorRange.Partial="Osaline"
259
 Basic.Settings.Advanced.Video.ColorRange.Full="Täielik"
260
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Vaikeseade"
261
+Basic.Settings.Advanced.StreamDelay="Voogedastuse Viivitus"
262
+Basic.Settings.Advanced.StreamDelay.Duration="Kestvus (sekundit)"
263
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Hinnanguline mälu hõivatus: %1 MB"
264
+Basic.Settings.Advanced.Network="Võrk"
265
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Madal-viivitus režiim"
266
 
267
 Basic.AdvAudio.Name="Nimi"
268
 Basic.AdvAudio.Volume="Helitugevus (%)"
269
+Basic.AdvAudio.Monitoring.None="Välja lülitatud"
270
 Basic.AdvAudio.AudioTracks="Rajad"
271
 
272
+Basic.Settings.Hotkeys="Kiirklahvid"
273
 
274
 
275
+Basic.SystemTray.Show="Näita"
276
+Basic.SystemTray.Hide="Peida"
277
 
278
 
279
 Hotkeys.Insert="Sisesta"
280
 Hotkeys.Delete="Kustuta"
281
+Hotkeys.Home="Home"
282
+Hotkeys.PageUp="Page Up"
283
+Hotkeys.PageDown="Page Down"
284
+Hotkeys.NumLock="Num Lock"
285
+Hotkeys.ScrollLock="Scroll Lock"
286
+Hotkeys.CapsLock="Suurtähelukk"
287
+Hotkeys.Backspace="Tagasisammuklahv"
288
+Hotkeys.Tab="Tab"
289
+Hotkeys.Print="Prindi"
290
+Hotkeys.Left="Vasakule"
291
+Hotkeys.Right="Paremale"
292
+Hotkeys.Up="Üles"
293
+Hotkeys.Down="Alla"
294
+Hotkeys.Windows="Windows"
295
+Hotkeys.Menu="Menüü"
296
+
297
+Mute="Vaigista"
298
 
299
 
300
 
301
obs-studio-18.0.2.tar.xz/UI/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/eu-ES.ini Changed
127
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Pantaila osoko proiektorea (aurrebista)"
3
 SceneProjector="Pantaila osoko proiektorea (eszena)"
4
 SourceProjector="Pantaila osoko proiektorea (iturburua)"
5
+PreviewWindow="Leihodun proiektorea (aurrebista)"
6
+SceneWindow="Leihodun proiektorea (Eszena)"
7
+SourceWindow="Leihodun proiektorea (iturburua)"
8
 Clear="Garbitu"
9
 Revert="Leheneratu"
10
 Show="Erakutsi"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Erreprodukzio bufferra"
13
 Import="Inportatu"
14
 Export="Esportatu"
15
+Copy="Kopiatu"
16
+Paste="Itsatsi"
17
+PasteReference="Itsatsi (Erreferentzia)"
18
+PasteDuplicate="Itsatsi (Bikoiztu)"
19
+RemuxRecordings="Birmultiplexatu grabazioak"
20
+Next="Hurrengoa"
21
+Back="Atzera"
22
+
23
+AlreadyRunning.Title="OBS dagoeneko martxan dago"
24
+AlreadyRunning.Text="OBS dagoeneko martxan dago! Bestelakorik nahi ez baduzu Itxi irekita dagoen saioa beste saio bat ireki baino lehen. Ezarri baduzu OBS agertzea minimizatua sistemaren erretiluan begiratu eta oraindik exekutatzen ari den bertan."
25
+AlreadyRunning.LaunchAnyway="Abiarazi hala ere"
26
+
27
+Copy.Filters="Kopiatu iragazkiak"
28
+Paste.Filters="Itsatsi iragazkiak"
29
+
30
+BandwidthTest.Region="Eskualdea"
31
+BandwidthTest.Region.US="Estatu Batuak"
32
+BandwidthTest.Region.EU="Europa"
33
+BandwidthTest.Region.Asia="Asia"
34
+BandwidthTest.Region.Other="Beste bat"
35
+
36
+Basic.FirstStartup.RunWizard="Martxan jarri nahi duzu ezarpen automatikoen morroia? Bestela eskuz konfigura dezakezu zure ezarpenak leiho nagusiko Ezarpenak botoia klikatuta."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Oharra: ezarpen automatikoen morroia beta egoeran dago une honetan)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Iritziz aldatzen baduzu, martxan jar dezakezu ezarpen automatikoen morroia berriro Tresnen menuan."
39
+
40
+Basic.AutoConfig="Ezarpen automatikoen morroia"
41
+Basic.AutoConfig.Beta="Ezarpen automatikoen morroia (Beta)"
42
+Basic.AutoConfig.ApplySettings="Aplikatu ezarpenak"
43
+Basic.AutoConfig.StartPage="Erabilera-informazioa"
44
+Basic.AutoConfig.StartPage.SubTitle="Zehaztu zertarako erabili nahi duzun programa"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimizatu transmisiorako, grabazioa bigarren mailakoa da"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimizatu grabazioa, ez du transmitituko"
47
+Basic.AutoConfig.VideoPage="Bideo-ezarpenak"
48
+Basic.AutoConfig.VideoPage.SubTitle="Zehaztu erabili nahi dituzun bideo-ezarpenak"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Erabili unekoa (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Erakutsi %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Erabili unekoa (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Izan daiteke 60 edo 30, baina ahal izanez gero 60 nahiago"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Izan daiteke 60 edo 30, baina nahiago dut bereizmen altua"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Oharra: grabaziorako erabiliko duzun bereizmena ez du zertan oihalaren (oinarriaren) bereizmen berdina. Uneko transmisioaren/grabazioaren bereizmena behera eskalatu daiteke txikiagotzeko baliabideen erabilera edo bit emariaren eskakizuna."
55
+Basic.AutoConfig.StreamPage="Transmisioaren informazioa"
56
+Basic.AutoConfig.StreamPage.SubTitle="Sartu transmisioaren informazioa"
57
+Basic.AutoConfig.StreamPage.Service="Zerbitzua"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Erakutsi denak..."
59
+Basic.AutoConfig.StreamPage.Server="Zerbitzaria"
60
+Basic.AutoConfig.StreamPage.StreamKey="Transmisio giltza"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Esteka)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Kalkulatu bit emaria banda zabaleraren testaren bidez (minutu batzuk beharko ditu)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hobetsi hardware-kodeketa"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-kodeketa txikiagotzen du PUZaren erabilera, baina bit emari handiagoa eskatzen du kalitate maila bera lortzeko."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Transmisioaren alarma"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Banda zabaleraren testa zure kanalera audiorik gabeko ausazko bideo datuak transmitituko ditu. Posible baduzu, komeni da behin behinean transmisioen bideoen gordeketa ezgaitzea eta transmisio modua pribatua ezartzea testa bukatu arte. Jarraitu nahi duzu?"
67
+Basic.AutoConfig.TestPage="Azken emaitzak"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Programak une honetan test sorta bat exekutatzen ari da kalkulatzeko zein diren ezarpenik egokienak"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testa osatu da"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Banda zabalerako test bat egikaritzen, minutu batzuk beharko ditu..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Hona konektatzen: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Huts egin du hainbat zerbitzarirekin konektatzen, probatu zure Internet konexioa eta saiatu berriro."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Banda zabaleraren proba: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Transmisioaren kodeketa probatzen, minutu batzuk beharko ditu..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Grabazioaren kodeketa probatzen, minutu batzuk beharko ditu..."
76
+Basic.AutoConfig.TestPage.TestingRes="Bereizmenak probatzen, minutu batzuk beharko ditu..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Huts egin du kodetzailea abiatzen"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Probatzen %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Transmisioaren kodetzailea"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Grabazioaren kodetzailea"
81
+Basic.AutoConfig.TestPage.Result.Header="Programaren arabera hauek dira zuretzako ezarpenik egokienak:"
82
+Basic.AutoConfig.TestPage.Result.Footer="Ezarpen hauek onartzeko, klika Aplikatu ezarpenak. Morroiaren bidez birkonfiguratzeko eta saiatzeko berriro klika Atzera. Ezarpenak eskuz zehazteko klika Utzi eta ireki Ezarpenak."
83
+
84
+Basic.Stats="Estatistikak"
85
+Basic.Stats.CPUUsage="PUZ erabilpena"
86
+Basic.Stats.HDDSpaceAvailable="Toki erabilgarria disko gogorrean"
87
+Basic.Stats.MemoryUsage="Memoria erabilpena"
88
+Basic.Stats.AverageTimeToRender="Fotograma errendatzeko batez besteko denbora"
89
+Basic.Stats.SkippedFrames="Kodetze atzerapena dela eta saltatutako fotogramak"
90
+Basic.Stats.MissedFrames="Kodetze atzerapena dela eta galdutako fotogramak"
91
+Basic.Stats.Output.Stream="Transmisioa"
92
+Basic.Stats.Output.Recording="Grabazioa"
93
+Basic.Stats.Status="Egoera"
94
+Basic.Stats.Status.Recording="Grabatzen"
95
+Basic.Stats.Status.Live="Martxan"
96
+Basic.Stats.Status.Reconnecting="Birkonektatzen"
97
+Basic.Stats.Status.Inactive="Inaktiboa"
98
+Basic.Stats.DroppedFrames="Jaregindako fotogramak (Sarean)"
99
+Basic.Stats.MegabytesSent="Datu irteera denetara"
100
+Basic.Stats.Bitrate="Bit-emaria"
101
 
102
 Updater.Title="Eguneraketa berria eskuragarri"
103
 Updater.Text="Eguneraketa berri bat eskuragarri dago:"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="Gaia"
106
 Basic.Settings.General.Language="Hizkuntza"
107
 Basic.Settings.General.EnableAutoUpdates="Abiaraztean begiratu automatikoki eguneraketarik ba ote dagoen"
108
+Basic.Settings.General.OpenStatsOnStartup="Ireki estatistikak abiatzean"
109
 Basic.Settings.General.WarnBeforeStartingStream="Erakutsi baieztapen elkarrizketa transmisioak hasterakoan"
110
 Basic.Settings.General.WarnBeforeStoppingStream="Erakutsi baieztapen elkarrizketa transmisioak gelditzean"
111
 Basic.Settings.General.Projectors="Projektoreak"
112
@@ -538,6 +628,7 @@
113
 Basic.Settings.Advanced.Video.ColorRange.Full="Osoa"
114
 Basic.Settings.Advanced.Audio.MonitoringDevice="Audioa kontrolatzeko gailua"
115
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Lehenetsia"
116
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Ezgaitu Windows audio ducking"
117
 Basic.Settings.Advanced.StreamDelay="Taansmisio-atzerapena"
118
 Basic.Settings.Advanced.StreamDelay.Duration="Iraupena (segundoak)"
119
 Basic.Settings.Advanced.StreamDelay.Preserve="Mantendu ebaketa puntua (handitu atzerapena) birkonektatzean"
120
@@ -617,3 +708,6 @@
121
 OutputWarnings.MultiTrackRecording="Oharra: Zenbait formatuk (esaterako FLV-k) ez ditu pista anitzak onartzen grabazioan"
122
 OutputWarnings.MP4Recording="Kontuz: MP4 formatuz gordetako grabazioak izan daitezke berreskuraezinak fitxategia ezin bada bukatu (esate baterako energia etenagatik). Hainbat audio pista grabatu nahi baduzu erabil dezakezu MKV formatua eta mp4 bihurtu grabazioa bukatu ondoren (Fitxategia->Bihurtu grabazioak)"
123
 
124
+FinalScene.Title="Ezabatu eszena"
125
+FinalScene.Text="Gutxienez eszena bat egon behar du."
126
+
127
obs-studio-18.0.2.tar.xz/UI/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/fi-FI.ini Changed
136
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Peilaa monitoriin (Esikatselu)"
3
 SceneProjector="Peilaa monitoriin (Skene)"
4
 SourceProjector="Peilaa monitoriin (Lähde)"
5
+PreviewWindow="Peilaa ikkunaan (Esikatselu)"
6
+SceneWindow="Peilaa ikkunaan (Skene)"
7
+SourceWindow="Peilaa ikkunaan (Lähde)"
8
 Clear="Tyhjennä"
9
 Revert="Palauta"
10
 Show="Näytä"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Toistopuskuri"
13
 Import="Tuo"
14
 Export="Vie"
15
+Copy="Kopioi"
16
+Paste="Liitä"
17
+PasteReference="Liitä (viite)"
18
+PasteDuplicate="Liitä (Kopio)"
19
+RemuxRecordings="Muunna tallenteet"
20
+Next="Seuraava"
21
+Back="Edellinen"
22
+
23
+AlreadyRunning.Title="OBS on jo käynnissä"
24
+AlreadyRunning.Text="OBS on jo käynnissä! Ellet tarkoittanut tehdä näin, ole hyvä ja sulje aikaisemmat OBS-prosessit ennen uuden käynnistämistä. Jos olet asettanut OBS:n pienentymään ilmaisinalueelle, varmista ettei se ole siellä yhä päällä."
25
+AlreadyRunning.LaunchAnyway="Käynnistä joka tapauksessa"
26
+
27
+Copy.Filters="Kopioi suodattimet"
28
+Paste.Filters="Liitä suodattimet"
29
+
30
+BandwidthTest.Region="Alue"
31
+BandwidthTest.Region.US="Yhdysvallat"
32
+BandwidthTest.Region.EU="Eurooppa"
33
+BandwidthTest.Region.Asia="Aasia"
34
+BandwidthTest.Region.Other="Muu"
35
+
36
+Basic.FirstStartup.RunWizard="Haluatko määrittää asetukset automaattisesti? Voit myös määrittää asetukset käsin painamalla \"Asetukset\" -painiketta päänäkymässä."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Huomautus: automaattinen määritystoiminto on tällä hetkellä beta)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Jos muutat mielesi, voit käynnistää automaattisen määritystoiminnon milloin tahansa \"Työkalut\" -valikosta."
39
+
40
+Basic.AutoConfig="Automaattinen määritystoiminto"
41
+Basic.AutoConfig.Beta="Automaattinen määritystoiminto (Beta)"
42
+Basic.AutoConfig.ApplySettings="Ota käyttöön"
43
+Basic.AutoConfig.StartPage="Käyttötiedot"
44
+Basic.AutoConfig.StartPage.SubTitle="Määrittele kuinka haluat käyttää ohjelmaa"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimoi lähettämiseen, tallentaminen on toissijaista"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimoi tallentamiseen, lähettäminen on toissijaista"
47
+Basic.AutoConfig.VideoPage="Kuva-asetukset"
48
+Basic.AutoConfig.VideoPage.SubTitle="Määrittele haluamasi kuva-asetukset"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Käytä nykyistä (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Monitori %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Käytä nykyistä (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Joko 60 tai 30, mutta suositaan 60 kun mahdollista"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Joko 60 tai 30, mutta suositaan suurta resoluutiota"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Huomautus: Piirtoalueen resoluutio ei välttämättä ole sama kuin resoluutio jolla lähetetään tai tallennetaan. Lähetyksen/tallennuksen resoluutio saatetaan skaalata piirtoalueesta pienemmäksi resurssien käytön vähentämiseksi tai bitrate vaatimusten vuoksi."
55
+Basic.AutoConfig.StreamPage="Lähetyksen tiedot"
56
+Basic.AutoConfig.StreamPage.SubTitle="Ole hyvä ja syötä lähetyksen tiedot"
57
+Basic.AutoConfig.StreamPage.Service="Palvelu"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Näytä kaikki..."
59
+Basic.AutoConfig.StreamPage.Server="Palvelin"
60
+Basic.AutoConfig.StreamPage.StreamKey="Striimiavain"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Linkki)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Arvioi bitrate kaistan nopeustestin avulla (saattaa kestää muutaman minuutin)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Suosi laitteistoenkoodausta"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Laitteistoenkoodaus poistaa suurimman osan CPU-käytöstä, mutta saattaa vaatia suuremman bitraten saavuttaakseen saman laadun."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Lähetysvaroitus"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Kaistan testauksessa lähetetään satunnaista videodataa kanavallesi ilman ääntä. On suositeltavaa ottaa pois käytöstä lähetysten tallennus ja asettaa lähetys yksityiseksi, kunnes testi on suoritettu. Jatketaanko?"
67
+Basic.AutoConfig.TestPage="Lopulliset tulokset"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Ohjelma käynnistää nyt muutamia testejä ihanteellisten asetusten arvioimiseksi"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testaus valmis"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Suoritetaan kaistan testausta, tämä saattaa kestää muutaman minuutin..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Yhdistetään: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Palvelimiin ei saada yhteyttä, ole hyvä ja tarkista internet-yhteys ja yritä uudelleen."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testataan kaistaa: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testataan lähetysenkooderia, tämä saattaa kestää hetken..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testataan tallennusenkooderia, tämä saattaa kestää hetken..."
76
+Basic.AutoConfig.TestPage.TestingRes="Testataan resoluutioita, tämä saattaa kestää muutaman minuutin..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Enkooderin käynnistys epäonnistui"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testataan %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Lähetysenkooderi"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Tallennusenkooderi"
81
+Basic.AutoConfig.TestPage.Result.Header="Ohjelma on määrittänyt nämä asetukset ihanteellisimmaksi juuri sinulle:"
82
+Basic.AutoConfig.TestPage.Result.Footer="Ottaaksesi asetukset käyttöön, paina \"Ota käyttöön\". Määrittääksesi asetukset uudelleen, paina \"Edellinen\". Jos haluat määrittää asetukset itse, paina \"Peruuta\" ja avaa asetukset."
83
+
84
+Basic.Stats="Tilastot"
85
+Basic.Stats.CPUUsage="CPU-käyttö"
86
+Basic.Stats.HDDSpaceAvailable="Tallennustilaa vapaana"
87
+Basic.Stats.MemoryUsage="Muistinkäyttö"
88
+Basic.Stats.AverageTimeToRender="Keskimääräinen aika framen renderoimiseen"
89
+Basic.Stats.SkippedFrames="Ohitettuja frameja enkoodauksen hidastelusta"
90
+Basic.Stats.MissedFrames="Frameja menetetty renderoijan hidastelusta"
91
+Basic.Stats.Output.Stream="Lähetys"
92
+Basic.Stats.Output.Recording="Tallennus"
93
+Basic.Stats.Status="Tila"
94
+Basic.Stats.Status.Recording="Tallennus"
95
+Basic.Stats.Status.Live="LIVE"
96
+Basic.Stats.Status.Reconnecting="Yhdistetään uudelleen"
97
+Basic.Stats.Status.Inactive="Ei käytössä"
98
+Basic.Stats.DroppedFrames="Pudotettuja frameja (verkko)"
99
+Basic.Stats.MegabytesSent="Datan ulostulo yhteensä"
100
+Basic.Stats.Bitrate="Bitrate"
101
 
102
 Updater.Title="Uusi päivitys on saatavilla"
103
 Updater.Text="Uusi päivitys on saatavilla:"
104
@@ -303,7 +392,7 @@
105
 Basic.MainMenu.File="&Tiedosto"
106
 Basic.MainMenu.File.Export="&Vie"
107
 Basic.MainMenu.File.Import="T&uo"
108
-Basic.MainMenu.File.ShowRecordings="Näytä &tallennukset"
109
+Basic.MainMenu.File.ShowRecordings="Näytä &tallenteet"
110
 Basic.MainMenu.File.Remux="Mu&unna tallenne"
111
 Basic.MainMenu.File.Settings="&Asetukset"
112
 Basic.MainMenu.File.ShowSettingsFolder="Avaa asetuskansio"
113
@@ -375,6 +464,7 @@
114
 Basic.Settings.General.Theme="Teema"
115
 Basic.Settings.General.Language="Kieli"
116
 Basic.Settings.General.EnableAutoUpdates="Tarkista päivitykset automaattisesti käynnistäessä"
117
+Basic.Settings.General.OpenStatsOnStartup="Avaa tilastoikkuna käynnistyksessä"
118
 Basic.Settings.General.WarnBeforeStartingStream="Näytä varmistus-ikkuna kun lähetys aloitetaan"
119
 Basic.Settings.General.WarnBeforeStoppingStream="Näytä varmistus-ikkuna kun lähetys pysäytetään"
120
 Basic.Settings.General.Projectors="Peilaukset"
121
@@ -538,6 +628,7 @@
122
 Basic.Settings.Advanced.Video.ColorRange.Full="Täysi"
123
 Basic.Settings.Advanced.Audio.MonitoringDevice="Äänen monitorointilaite"
124
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Oletusarvo"
125
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Poista Windowsin äänien hiljennys käytöstä (Audio Ducking)"
126
 Basic.Settings.Advanced.StreamDelay="Lähetyksen viive"
127
 Basic.Settings.Advanced.StreamDelay.Duration="Kesto (sekunteina)"
128
 Basic.Settings.Advanced.StreamDelay.Preserve="Säilytä katkaisupiste (lisää viivettä) uudelleenyhdistettäessä"
129
@@ -617,3 +708,6 @@
130
 OutputWarnings.MultiTrackRecording="Varoitus: Jotkin muodot (kuten FLV), eivät tue useampaa raitaa per tallennus"
131
 OutputWarnings.MP4Recording="Varoitus: MP4-muotoon tallentaessa tiedostoista tulee lukukelvottomia, mikäli niitä ei voi viimeistellä. (esim. johtuen BSOD:sta, sähkökatkosta jne.) Jos haluat tallentaa useampaa ääniraitaa, kannattaa käyttää MKV-muotoa ja muuntaa jälkikäteen MP4:ksi. (Tiedosto->Muunna tallenne)"
132
 
133
+FinalScene.Title="Poista skene"
134
+FinalScene.Text="Ainakin yksi skene pitää olla olemassa."
135
+
136
obs-studio-18.0.2.tar.xz/UI/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/fr-FR.ini Changed
130
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Projecteur plein écran (aperçu)"
3
 SceneProjector="Projecteur plein écran (scène)"
4
 SourceProjector="Projecteur plein écran (source)"
5
+PreviewWindow="Projecteur fenêtré (aperçu)"
6
+SceneWindow="Projecteur fenêtré (scène)"
7
+SourceWindow="Projecteur fenêtré (source)"
8
 Clear="Effacer"
9
 Revert="Annuler"
10
 Show="Afficher"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Tampon de relecture"
13
 Import="Importer"
14
 Export="Exporter"
15
+Copy="Copier"
16
+Paste="Coller"
17
+PasteReference="Coller (Référence)"
18
+PasteDuplicate="Coller (Dupliquer)"
19
+RemuxRecordings="Convertir les enregistrements"
20
+Next="Suivant"
21
+Back="Retour"
22
+
23
+AlreadyRunning.Title="OBS est déjà en cours d'exécution"
24
+AlreadyRunning.Text="OBS est déjà en cours d'exécution, s'il vous plait, fermer toute autre instances existantes d'OBS avant d'en exécuter une nouvelle. Vérifier dans votre barre d'état  s'il n'est pas réduit et en cours d’exécution."
25
+AlreadyRunning.LaunchAnyway="Démarrer tout de même"
26
+
27
+Copy.Filters="Copier les filtres"
28
+Paste.Filters="Coller les filtres"
29
+
30
+BandwidthTest.Region="Région"
31
+BandwidthTest.Region.US="États-Unis"
32
+BandwidthTest.Region.EU="Europe"
33
+BandwidthTest.Region.Asia="Asie"
34
+BandwidthTest.Region.Other="Autre"
35
+
36
+Basic.FirstStartup.RunWizard="Exécutez l'Assistant de configuration  ? Vous pouvez configurer manuellement vos paramètre en cliquant sur le bouton des Paramètres situer dans la fenêtre principale."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Remarque : l’Assistant de configuration automatique est actuellement en version bêta)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Si vous changez d’avis, vous pouvez réexécuter l’Assistant de configuration automatique n’importe quel moment dans le menu outils."
39
+
40
+Basic.AutoConfig="Assistant de Configuration automatique"
41
+Basic.AutoConfig.Beta="Assistant de Configuration automatique (version bêta)"
42
+Basic.AutoConfig.ApplySettings="Appliquer les paramètres"
43
+Basic.AutoConfig.StartPage="Informations sur l’utilisation"
44
+Basic.AutoConfig.StartPage.SubTitle="Spécifiez ce que vous voulez utiliser le programme pour"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimiser pour diffusion, l’enregistrement est secondaire"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimiser pour l’enregistrement, je ne diffuse pas"
47
+Basic.AutoConfig.VideoPage="Paramètres vidéo"
48
+Basic.AutoConfig.VideoPage.SubTitle="Spécifiez les réglages vidéo que vous souhaitez utiliser"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Courant (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Écran %1 (%2x%3)_"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Courant (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 ou 30, mais préférez 60"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 ou 30, mais préfèrent haute résolution"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Remarque : la résolution (de base) du canevas n'est pas nécessairement la même que la résolution avec laquelle vous allez diffuser (stream) ou enregistrer. La résolution actuelle de stream/enregistrement peut être réduite à partir de la résolution du canevas afin de diminuer  l'utilisation des ressources et de la bande passante."
55
+Basic.AutoConfig.StreamPage="Information de flux"
56
+Basic.AutoConfig.StreamPage.SubTitle="Entrez vos informations de stream"
57
+Basic.AutoConfig.StreamPage.Service="Service"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Afficher tout..."
59
+Basic.AutoConfig.StreamPage.Server="Serveur"
60
+Basic.AutoConfig.StreamPage.StreamKey="Clé de stream"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Lien)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Test de la bande passantes pour estimer le débit(peut prendre quelques minutes)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Préférez l’encodage matériel"
64
+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 le même niveau de qualité."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Avertissement de diffusion"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Le test de bande passante est sur le point de diffuser (stream) des données vidéo aléatoire sans audio sur votre chaîne. Si vous avez la possibilité, il est recommandé de désactiver temporairement l'enregistrement des diffusions et de configurer le stream en privé jusqu'à ce que le test soit terminé. Continuer ?"
67
+Basic.AutoConfig.TestPage="Résultat final"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Le programme s’exécute maintenant une série de tests pour estimer les paramètres idéales"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Test complet"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Test de la bande passante en cours, cela peut prendre quelques minutes..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Connection à : %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Impossible de se connecter à aucun serveur, veuillez vérifier votre connexion internet et réessayez."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Test de la bande passante pour: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Test de l'encodeur de diffusion (stream), cela peut prendre une minute..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Test de l'encodeur d'enregistrement, cela peut prendre une minute..."
76
+Basic.AutoConfig.TestPage.TestingRes="Tests de résolutions, cela peut prendre quelques minutes..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Échec lors du démarrage de l'encodeur"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Test FPS %1x%2 %3..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Encodeur de diffusion"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Erreur d'enregistrement"
81
+Basic.AutoConfig.TestPage.Result.Header="Le programme a déterminé que ces estimations de paramètres sont idéal pour vous :"
82
+Basic.AutoConfig.TestPage.Result.Footer="Pour utiliser ces paramètres, cliquez sur « appliquer les paramètres. »  Pour reconfigurer l’Assistant et essayer de nouveau, cliquez sur « précédent. »  Pour configurer les paramètres vous-même, cliquez sur « Annuler et ouvrir les paramètres. »"
83
+
84
+Basic.Stats="Statistiques"
85
+Basic.Stats.CPUUsage="Utilisation CPU"
86
+Basic.Stats.HDDSpaceAvailable="Espace disque dur disponible"
87
+Basic.Stats.MemoryUsage="Utilisation de la mémoire"
88
+Basic.Stats.AverageTimeToRender="Temps moyen pour rendre une image"
89
+Basic.Stats.SkippedFrames="Sauts d'image dû à la latence d'encodage"
90
+Basic.Stats.MissedFrames="Images manqués en raison du retard de rendu"
91
+Basic.Stats.Output.Stream="Flux"
92
+Basic.Stats.Output.Recording="Enregistrement"
93
+Basic.Stats.Status="État"
94
+Basic.Stats.Status.Recording="Enregistrement en cours"
95
+Basic.Stats.Status.Live="DIRECT"
96
+Basic.Stats.Status.Reconnecting="Reconnexion"
97
+Basic.Stats.Status.Inactive="Inactif"
98
+Basic.Stats.DroppedFrames="Perte d’images (réseau)"
99
+Basic.Stats.MegabytesSent="Sortie Total des Données"
100
+Basic.Stats.Bitrate="Débit"
101
 
102
 Updater.Title="Nouvelle mise à jour disponible"
103
 Updater.Text="Une nouvelle mise à jour est disponible :"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="Thème"
106
 Basic.Settings.General.Language="Langue"
107
 Basic.Settings.General.EnableAutoUpdates="Vérifier automatiquement les mises à jour au démarrage"
108
+Basic.Settings.General.OpenStatsOnStartup="Ouvrir la boîte de dialogue des statistiques au démarrage"
109
 Basic.Settings.General.WarnBeforeStartingStream="Afficher une boîte de dialogue de confirmation au démarrage d'un stream"
110
 Basic.Settings.General.WarnBeforeStoppingStream="Afficher une boîte de dialogue de confirmation à l'arrêt d'un stream"
111
 Basic.Settings.General.Projectors="Projecteurs"
112
@@ -538,6 +628,7 @@
113
 Basic.Settings.Advanced.Video.ColorRange.Full="Complète"
114
 Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositif de surveillance audio"
115
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Par défaut"
116
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Désactiver l'atténuation audio de Windows"
117
 Basic.Settings.Advanced.StreamDelay="Retard du stream"
118
 Basic.Settings.Advanced.StreamDelay.Duration="Durée (en secondes)"
119
 Basic.Settings.Advanced.StreamDelay.Preserve="Préserver le point de coupure (augmente le retard) lors d'une reconnexion"
120
@@ -615,5 +706,8 @@
121
 
122
 OutputWarnings.NoTracksSelected="Vous devez sélectionner au moins une piste"
123
 OutputWarnings.MultiTrackRecording="Attention : Certains formats (comme FLV) ne supportent pas les pistes multiples pour un même enregistrement"
124
-OutputWarnings.MP4Recording="Avertissement: Les enregistrements sauvegardés sur MP4 seront irrécupérables si le fichier ne peut pas être finalisé (par exemple, à cause des BSOD, des pertes de puissance, etc.). Si vous voulez enregistrer plusieurs pistes audio, pensez à utiliser MKV et remux l'enregistrement au mp4 après qu'il est terminé (File-> Remux Recordings)"
125
+OutputWarnings.MP4Recording="Avertissement : les enregistrements sauvegardés en MP4 seront irrécupérables si le fichier ne peut pas être finalisé (ex. : à cause des BSOD, coupure de l'alimentation, etc...). Si vous voulez enregistrer plusieurs pistes audio, pensez à utiliser MKV et convertir l'enregistrement en mp4 après qu'il soit terminé (Fichier -> Convertir un enregistrement)"
126
+
127
+FinalScene.Title="Supprimer la scène"
128
+FinalScene.Text="Il doit y avoir au moins une scène."
129
 
130
obs-studio-18.0.2.tar.xz/UI/data/locale/gl-ES.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/gl-ES.ini Changed
19
 
1
@@ -48,6 +48,12 @@
2
 
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 Basic.AddTransition="Engadir transición configurable"
12
 Basic.RemoveTransition="Eliminar transición configurable"
13
 Basic.TransitionProperties="Propiedades da transición"
14
@@ -404,3 +410,4 @@
15
 OutputWarnings.NoTracksSelected="Debes seleccionar, cando menos, unha pista"
16
 OutputWarnings.MultiTrackRecording="Aviso: certos formatos (caso de FLV) non admiten múltiples pistas para gravar"
17
 
18
+
19
obs-studio-18.0.2.tar.xz/UI/data/locale/he-IL.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/he-IL.ini Changed
292
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="מקרן מסך מלא (תצוגה מקדימה)"
3
 SceneProjector="מקרן מסך מלא (סצנה)"
4
 SourceProjector="מקרן מסך מלא (מקור)"
5
+PreviewWindow="הקרנה בחלון (תצוגה מקדימה)"
6
+SceneWindow="הקרנה בחלון (סצנה)"
7
+SourceWindow="הקרנה בחלון (מקור)"
8
 Clear="נקה"
9
 Revert="החזר לקדמותו"
10
 Show="הצג"
11
@@ -48,7 +51,111 @@
12
 Right="ימין"
13
 Top="עליון"
14
 Bottom="תחתון"
15
-
16
+Reset="אפס"
17
+Hours="שעות"
18
+Minutes="דקות"
19
+Seconds="שניות"
20
+Deprecated="הוצא משימוש"
21
+ReplayBuffer="הרץ מחדש חוצץ"
22
+Import="יבא"
23
+Export="יצא"
24
+Copy="העתק"
25
+Paste="הדבק"
26
+PasteReference="הדבק (הפניה)"
27
+PasteDuplicate="הדבק (כפול)"
28
+RemuxRecordings="רימיקס הקלטות"
29
+Next="הבא"
30
+Back="קודם"
31
+
32
+AlreadyRunning.Title="OBS פועל כבר"
33
+AlreadyRunning.Text="OBS פועל כבר!  אלא אם התכוונת לעשות את זה, אנא סגור כל מופע קיים לפני נסיון להפעיל מופע חדש.  אנא בדוק אם קיים מופע  הגדר ממוזער במגש המערכת."
34
+AlreadyRunning.LaunchAnyway="הפעל בכל מקרה"
35
+
36
+Copy.Filters="העתק מסננים"
37
+Paste.Filters="הדבק מסננים"
38
+
39
+BandwidthTest.Region="אזור"
40
+BandwidthTest.Region.US="ארצות הברית"
41
+BandwidthTest.Region.EU="אירופה"
42
+BandwidthTest.Region.Asia="אסיה"
43
+BandwidthTest.Region.Other="אחר"
44
+
45
+Basic.FirstStartup.RunWizard="האם ברצונך להפעיל את אשף קביעת התצורה האוטומטית?  באפשרותך להגדיר את ההגדרות באופן ידני על ידי לחיצה על הלחצן ' קביעות ' בחלון הראשי."
46
+Basic.FirstStartup.RunWizard.BetaWarning="(הערה: אשף קביעת התצורה האוטומטית הוא כרגע בגרסת ביתא)"
47
+Basic.FirstStartup.RunWizard.NoClicked="אם תשנה את דעתך, באפשרותך להפעיל שוב את אשף קביעת התצורה האוטומטית בכל עת מתפריט הכלים."
48
+
49
+Basic.AutoConfig="אשף תצורה אוטומטית"
50
+Basic.AutoConfig.Beta="אשף קביעת התצורה האוטומטית (ביתא)"
51
+Basic.AutoConfig.ApplySettings="החל הגדרות"
52
+Basic.AutoConfig.StartPage="מידע אודות השימוש"
53
+Basic.AutoConfig.StartPage.SubTitle="ציין עבור מה ברצונך להשתמש בתוכנית"
54
+Basic.AutoConfig.StartPage.PrioritizeStreaming="מיטוב עבור הזרמה, הקלטה היא משנית"
55
+Basic.AutoConfig.StartPage.PrioritizeRecording="מיטוב רק עבור הקלטה, לא תהיה הזרמה"
56
+Basic.AutoConfig.VideoPage="הגדרות וידאו"
57
+Basic.AutoConfig.VideoPage.SubTitle="ציין את הגדרות הוידאו הרצויות עבורך"
58
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="השתמש בנוכחי (%1x%2)"
59
+Basic.AutoConfig.VideoPage.BaseResolution.Display="תצוגה %1 (%2x%3)"
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="הערה: רזוליית הבד (בסיס) הוא לא בהכרח זהה לרזולוצי ההזרמה או הקלטה.  ייתכן שרזולוציית הזרמה/הקלטה תוקטן בכדי להפחית את דרישות קצב הנתונים או המשאבים."
64
+Basic.AutoConfig.StreamPage="מידע על הזרם"
65
+Basic.AutoConfig.StreamPage.SubTitle="אנא הזן את פרטי הזרם"
66
+Basic.AutoConfig.StreamPage.Service="שירות"
67
+Basic.AutoConfig.StreamPage.Service.ShowAll="הצג הכל..."
68
+Basic.AutoConfig.StreamPage.Server="שרת"
69
+Basic.AutoConfig.StreamPage.StreamKey="מפתח הזרמת נתונים"
70
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(קישור)"
71
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="הערכת קצב נתונים עם בדיקת רוחב פס (עשוי להימשך דקות אחדות)"
72
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="העדף קידוד בחומרה"
73
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="קידוד בחומרה מבטלת רוב השימוש ב- CPU, אבל עשויים לדרוש קצב נתונים גבוה יותר בכדי להשיג את אותה רמת איכות."
74
+Basic.AutoConfig.StreamPage.StreamWarning.Title="אזהרת זרם"
75
+Basic.AutoConfig.TestPage="תוצאות סופיות"
76
+Basic.AutoConfig.TestPage.SubTitle.Testing="התוכנית מתבצעת עכשיו סט של בדיקות כדי להעריך את ההגדרות המיטביות"
77
+Basic.AutoConfig.TestPage.SubTitle.Complete="הבדיקה הסתיימה"
78
+Basic.AutoConfig.TestPage.TestingBandwidth="מבצע מבחן רוחב פס, פעולה זו עשויה להימשך מספר דקות..."
79
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="התחברות ל-: %1..."
80
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="התחברות לשרת כלשהו נכשלה, אנא בדוק את חיבור האינטרנט ונסה שוב."
81
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="בדיקות רוחב פס עבור: %1"
82
+Basic.AutoConfig.TestPage.TestingStreamEncoder="בדיקת זרם מקודד, זה עלול לקחת דקה..."
83
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="בדיקות מקודד הקלטה, זה עלול לקחת דקה..."
84
+Basic.AutoConfig.TestPage.TestingRes="בדיקת רזולוציות, פעולה זו עשויה להימשך מספר דקות..."
85
+Basic.AutoConfig.TestPage.TestingRes.Fail="נכשלה הפעלת המקודד"
86
+Basic.AutoConfig.TestPage.TestingRes.Resolution="בדיקת %1x%2 %3 מסגרות לדקה..."
87
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="מקודד זרימה"
88
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="מקודד הקלטה"
89
+Basic.AutoConfig.TestPage.Result.Header="התוכנית קבעה כי אלה ההגדרות המיטביות עבורך:"
90
+Basic.AutoConfig.TestPage.Result.Footer="כדי להשתמש בהגדרות אלה, לחץ על החל הגדרות.  כדי להגדיר מחדש את האשף ולנסות שוב, לחץ על אחורה.  להגדיר ידנית את הגדרות, לחץ על ביטול ולאחר מכן פתח את הגדרות."
91
+
92
+Basic.Stats="סטטיסטיקות"
93
+Basic.Stats.CPUUsage="שימוש במעבד"
94
+Basic.Stats.HDDSpaceAvailable="שטח דיסק קשיח זמין"
95
+Basic.Stats.MemoryUsage="שימוש בזיכרון"
96
+Basic.Stats.AverageTimeToRender="הזמן הממוצע לעיבוד מסגרת"
97
+Basic.Stats.SkippedFrames="המערכת דילגה על מסגרות עקב השהית קידוד"
98
+Basic.Stats.MissedFrames="מסגרות פוספסו עקב השהית קידוד"
99
+Basic.Stats.Output.Stream="זרם נתונים"
100
+Basic.Stats.Output.Recording="הקלטה"
101
+Basic.Stats.Status="מצב"
102
+Basic.Stats.Status.Recording="הקלטה"
103
+Basic.Stats.Status.Live="שידור חי"
104
+Basic.Stats.Status.Reconnecting="מתחבר מחדש"
105
+Basic.Stats.Status.Inactive="לא פעיל"
106
+Basic.Stats.DroppedFrames="השמטת מסגרות (רשת)"
107
+Basic.Stats.MegabytesSent="פלט נתונים כולל"
108
+Basic.Stats.Bitrate="קצב נתונים"
109
+
110
+Updater.Title="עידכון חדש זמין"
111
+Updater.Text="יש עדכון חדש זמין:"
112
+Updater.UpdateNow="עדכן עכשיו"
113
+Updater.RemindMeLater="הזכר לי מאוחר יותר"
114
+Updater.Skip="דלג על גירסה"
115
+Updater.Running.Title="תוכנית פעילה כעת"
116
+Updater.Running.Text="פלטים כרגע פעילים, אנא כבה פלטים פעילים לפני ביצוע עידכון"
117
+Updater.NoUpdatesAvailable.Title="אין עדכונים זמינים"
118
+Updater.NoUpdatesAvailable.Text="אין עדכונים זמינים כעת"
119
+Updater.FailedToLaunch="נכשלה הפעלת העידכון"
120
+Updater.GameCaptureActive.Title="לכידת משחק פעיל"
121
 
122
 QuickTransitions.SwapScenes="החלף סצינות תצוגה מקדימה/פלט לאחר המעבר"
123
 QuickTransitions.SwapScenesTT="החלף הסצינות של התצוגה המקדימה ושל הפלט לאחר המעבר (באם הסצינה המקורית של הפלט עדיין קיימת). \n פעולה זו לא תבטל כל שינוי שייתכן ובוצע לסצינה המקורית של הפלט."
124
@@ -90,6 +197,9 @@
125
 ConfirmRemove.Text="האם אתה בטוח שברצונך להסיר את '$1'?"
126
 ConfirmRemove.TextMultiple="האם אתה בטוח שברצונך להסיר %1 פריטים?"
127
 
128
+Output.StartStreamFailed="נכשלה הפעלת זרימה"
129
+Output.StartRecordingFailed="נכשלה הפעלת הקלטה"
130
+Output.StartReplayFailed="נכשלה הפעלת מאגר החוזר"
131
 
132
 Output.ConnectFail.Title="ההתחברות נכשלה"
133
 Output.ConnectFail.BadPath="URL לא חוקי של נתיב או חיבור.  נא בדוק את ההגדרות שלך כדי לוודא כי הם נכונים."
134
@@ -165,6 +275,10 @@
135
 Deinterlacing.TopFieldFirst="שדה עליון ראשון"
136
 Deinterlacing.BottomFieldFirst="שדה תחתון ראשון"
137
 
138
+VolControl.SliderUnmuted="מחוון העוצמה עבור '%1': %2"
139
+VolControl.SliderMuted="מחוון העוצמה עבור '%1': %2 (כרגע מושתק)"
140
+VolControl.Mute="השתק '%1'"
141
+VolControl.Properties="מאפיינים עבור '%1'"
142
 
143
 Basic.Main.AddSceneDlg.Title="הוסף סצנה"
144
 Basic.Main.AddSceneDlg.Text="אנא הזן את השם של הסצנה"
145
@@ -260,9 +374,12 @@
146
 Basic.Main.Sources="מקורות"
147
 Basic.Main.Connecting="מתחבר..."
148
 Basic.Main.StartRecording="התחל הקלטה"
149
+Basic.Main.StartReplayBuffer="התחל מאגר החוזר"
150
 Basic.Main.StartStreaming="התחל הזרמת נתונים"
151
 Basic.Main.StopRecording="עצור הקלטה"
152
 Basic.Main.StoppingRecording="עוצר הקלטה..."
153
+Basic.Main.StopReplayBuffer="עצור את המאגר החוזר"
154
+Basic.Main.StoppingReplayBuffer="עצירת מאגר החוזר..."
155
 Basic.Main.StopStreaming="עצור זרם נתונים"
156
 Basic.Main.StoppingStreaming="עוצר זרם נתונים..."
157
 Basic.Main.ForceStopStreaming="עצור זרם נתונים (בטל השהייה)"
158
@@ -284,8 +401,14 @@
159
 Basic.MainMenu.Edit.UndoAction="בטל $1(&U)"
160
 Basic.MainMenu.Edit.RedoAction="בצע שוב $1(&R)"
161
 Basic.MainMenu.Edit.LockPreview="&נעילת תצוגה מקדימה"
162
+Basic.MainMenu.Edit.Scale="תצוגה מקדימה & שינוי קנה מידה"
163
+Basic.MainMenu.Edit.Scale.Window="שינוי קנה מידה לחלון"
164
+Basic.MainMenu.Edit.Scale.Canvas="בד (%1x%2)"
165
+Basic.MainMenu.Edit.Scale.Output="פלט (%1x%2)"
166
 Basic.MainMenu.Edit.Transform="שנה(&T)"
167
 Basic.MainMenu.Edit.Transform.EditTransform="ערוך שינוי...(&E)"
168
+Basic.MainMenu.Edit.Transform.CopyTransform="העתק מעבר"
169
+Basic.MainMenu.Edit.Transform.PasteTransform="הדבק מעבר"
170
 Basic.MainMenu.Edit.Transform.ResetTransform="אפס שינוי(&R)"
171
 Basic.MainMenu.Edit.Transform.Rotate90CW="סובב 90 מעלות בכיוון השעון"
172
 Basic.MainMenu.Edit.Transform.Rotate90CCW="סובב 90 מעלות בניגוד לכיוון השעון"
173
@@ -310,6 +433,9 @@
174
 
175
 Basic.MainMenu.SceneCollection="אוסף סצינות(&S)"
176
 Basic.MainMenu.Profile="פרופיל(&P)"
177
+Basic.MainMenu.Profile.Import="ייבא פרופיל"
178
+Basic.MainMenu.Profile.Export="ייצא פרופיל"
179
+Basic.MainMenu.Profile.Exists="הפרופיל קיים כבר"
180
 
181
 Basic.MainMenu.Tools="& כלים"
182
 
183
@@ -329,8 +455,10 @@
184
 Basic.Settings.General="כללי"
185
 Basic.Settings.General.Theme="ערכת עיצוב"
186
 Basic.Settings.General.Language="שפה"
187
+Basic.Settings.General.EnableAutoUpdates="בדוק באופן אוטומטי אם יש עדכונים בעת ההפעלה"
188
 Basic.Settings.General.WarnBeforeStartingStream="הצג תיבת דו-שיח לאישור בעת הפעלת זרם נתונים"
189
 Basic.Settings.General.WarnBeforeStoppingStream="הצג תיבת דו-שיח לאישור בעת עצירת זרם נתונים"
190
+Basic.Settings.General.Projectors="מקרנים"
191
 Basic.Settings.General.HideProjectorCursor="הסתר את הסמן מעל מקרנים"
192
 Basic.Settings.General.Snapping="יישור הצמדת מקור"
193
 Basic.Settings.General.ScreenSnapping="הצמד מקורות לקצה המסך"
194
@@ -339,6 +467,10 @@
195
 Basic.Settings.General.SnapDistance="רגישות צמד"
196
 Basic.Settings.General.RecordWhenStreaming="הקלטה אוטומטית בעת הזרמת נתונים"
197
 Basic.Settings.General.KeepRecordingWhenStreamStops="המשך הקלטה כאשר הזרמת נתונים מפסיקה"
198
+Basic.Settings.General.SysTray="מגש המערכת"
199
+Basic.Settings.General.SysTrayWhenStarted="מזער למגש המערכת בתחילה"
200
+Basic.Settings.General.SystemTrayHideMinimize="מזער תמיד למגש המערכת במקום שורת המשימות"
201
+Basic.Settings.General.SaveProjectors="שמור את המקרנים ביציאה"
202
 
203
 Basic.Settings.Stream="זרם נתונים"
204
 Basic.Settings.Stream.StreamType="סוג זרם נתונים"
205
@@ -353,6 +485,14 @@
206
 Basic.Settings.Output.Mode.Simple="פשוט"
207
 Basic.Settings.Output.Mode.Adv="מתקדם"
208
 Basic.Settings.Output.Mode.FFmpeg="פלט FFmpeg"
209
+Basic.Settings.Output.UseReplayBuffer="הפעלת מאגר החוזר"
210
+Basic.Settings.Output.ReplayBuffer.SecondsMax="זמן החוזר המרבי (בשניות)"
211
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="זיכרון מרבי (מגה-בתים)"
212
+Basic.Settings.Output.ReplayBuffer.Estimate="הערך שימוש בזיכרון: %1 MB"
213
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="אין אפשרות להעריך את השימוש בזיכרון.  נא הגדר מגבלת זיכרון מירבי."
214
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(הערה: הקפד להגדיר hotkey עבור מאגר החוזר במקטע מקשי הקיצור)"
215
+Basic.Settings.Output.ReplayBuffer.Prefix="קידומת שם קובץ מאגר החוזר"
216
+Basic.Settings.Output.ReplayBuffer.Suffix="סיומת"
217
 Basic.Settings.Output.Simple.SavePath="נתיב הקלטה"
218
 Basic.Settings.Output.Simple.RecordingQuality="איכות הקלטה"
219
 Basic.Settings.Output.Simple.RecordingQuality.Stream="כמו זרם הנתונים"
220
@@ -368,6 +508,7 @@
221
 Basic.Settings.Output.Simple.Warn.MultipleQSV="אזהרה: לא ניתן להשתמש במקודדי QSV נפרדים מרובים בעת הזרמת נתונים והקלטה במקביל.  אם ברצונך להזרים ולהקליט בו זמנית, נא בצע שינוי במקודד  ההקלטה או מקודד זרם הנתונים."
222
 Basic.Settings.Output.Simple.Encoder.Software="תוכנה (x264)"
223
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="חומרה (QSV)"
224
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="חומרה (AMD)"
225
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="חומרה (NVENC)"
226
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="תוכנה (x 264 השימוש בהגדרת מעבד נמוך, גודל הקובץ גדל)"
227
 Basic.Settings.Output.VideoBitrate="קצב סיביות וידאו"
228
@@ -389,6 +530,8 @@
229
 Basic.Settings.Output.Adv.Audio.Track2="ערוץ 2"
230
 Basic.Settings.Output.Adv.Audio.Track3="ערוץ 3"
231
 Basic.Settings.Output.Adv.Audio.Track4="ערוץ 4"
232
+Basic.Settings.Output.Adv.Audio.Track5="מסלול 5"
233
+Basic.Settings.Output.Adv.Audio.Track6="מסלול 6"
234
 
235
 Basic.Settings.Output.Adv.Recording="הקלטה"
236
 Basic.Settings.Output.Adv.Recording.Type="סוג"
237
@@ -416,6 +559,8 @@
238
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="מקודד אודיו"
239
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="הגדרות מקודד שמע (אם בכלל)"
240
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="הגדרות Muxer (אם בכלל)"
241
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="מרווח מפתח(מסגרות)"
242
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="הצג את כל רכיבי codec (גם אם אינם תואמים)"
243
 
244
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
245
 
246
@@ -469,11 +614,17 @@
247
 Basic.Settings.Advanced.Video.ColorRange="טווח צבעים YUV"
248
 Basic.Settings.Advanced.Video.ColorRange.Partial="חלקי"
249
 Basic.Settings.Advanced.Video.ColorRange.Full="מלא"
250
+Basic.Settings.Advanced.Audio.MonitoringDevice="מכשיר ניטור אודיו"
251
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="ברירת מחדל"
252
+Basic.Settings.Advanced.Audio.DisableAudioDucking="בטל צימוד השמע של Windows"
253
 Basic.Settings.Advanced.StreamDelay="השהיית זרם נתונים"
254
 Basic.Settings.Advanced.StreamDelay.Duration="משך זמן (בשניות)"
255
 Basic.Settings.Advanced.StreamDelay.Preserve="שמר נקודת חיתוך (השהייה מוגדלת) בעת חיבור מחדש"
256
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="שימוש זיכרון משוער: %1 MB"
257
 Basic.Settings.Advanced.Network="רשת"
258
+Basic.Settings.Advanced.Network.BindToIP="אגד ל- IP"
259
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="הפעלת קוד רשת חדש"
260
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="מצב השהיה נמוך"
261
 
262
 Basic.AdvAudio="מאפייני קול מתקדמים"
263
 Basic.AdvAudio.Name="שם"
264
@@ -481,6 +632,10 @@
265
 Basic.AdvAudio.Mono="הפוך למונו"
266
 Basic.AdvAudio.Panning="איזון"
267
 Basic.AdvAudio.SyncOffset="היסט סינכרון (מילישניות)"
268
+Basic.AdvAudio.Monitoring="ניטור אודיו"
269
+Basic.AdvAudio.Monitoring.None="בטל ניתור"
270
+Basic.AdvAudio.Monitoring.MonitorOnly="ניתור בלבד (השתק פלט)"
271
+Basic.AdvAudio.Monitoring.Both="ניתור ופלט"
272
 Basic.AdvAudio.AudioTracks="ערוצים"
273
 
274
 Basic.Settings.Hotkeys="מקשי קיצור"
275
@@ -491,6 +646,7 @@
276
 Basic.SystemTray.Show="הצג"
277
 Basic.SystemTray.Hide="הסתר"
278
 
279
+Basic.SystemTray.Message.Reconnecting="ההתקשרות נותקה.  התחברות מחדש..."
280
 
281
 Hotkeys.Insert="הוסף"
282
 Hotkeys.Delete="מחק"
283
@@ -538,4 +694,8 @@
284
 
285
 OutputWarnings.NoTracksSelected="עליך לבחור ערוץ אחד לפחות"
286
 OutputWarnings.MultiTrackRecording="אזהרה: תבניות מסוימות (כגון FLV) אינם תומכים במספר רצועות להקלטה"
287
+OutputWarnings.MP4Recording="אזהרה: הקלטות שנשמרו MP4 תהיה בלתי שמישה במידה ולא ניתן להשלים את הקובץ (למשל כתוצאה מחלון כחול, אובדן כוח, וכו '). אם אתה רוצה להקליט מספר רצועות שמע, שקול להשתמש ב- MKV ובצע רימיקס ל- mp4 לאחר סיומה (קובץ-> Remux הקלטות)"
288
+
289
+FinalScene.Title="מחק סצינה"
290
+FinalScene.Text="נדרשת סצנה אחת לפחות."
291
 
292
obs-studio-18.0.2.tar.xz/UI/data/locale/hr-HR.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/hr-HR.ini Changed
19
 
1
@@ -55,6 +55,12 @@
2
 Deprecated="Prevaziđeno"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Zameni scene pregleda/izlaza nakon prelaza"
12
 QuickTransitions.SwapScenesTT="Zamenjuje scene pregleda i izlaza nakon prelaza (ako originalna scena izlaza još uvek postoji).\nOvo neće poništiti promene koje su načinjene nad originalnom scenom izlaza."
13
 QuickTransitions.DuplicateScene="Dupliraj scenu"
14
@@ -553,3 +559,4 @@
15
 OutputWarnings.NoTracksSelected="Morate odabrati makar jednu traku"
16
 OutputWarnings.MultiTrackRecording="Upozorenje: Određeni formati (kao što je FLV) ne podržavaju više traka po snimku"
17
 
18
+
19
obs-studio-18.0.2.tar.xz/UI/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/hu-HU.ini Changed
127
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Teljes képernyős projektor (Előnézet)"
3
 SceneProjector="Teljes képernyős projektor (Jelenet)"
4
 SourceProjector="Teljes képernyős projektor (Forrás)"
5
+PreviewWindow="Ablakos projektor (Előnézet)"
6
+SceneWindow="Ablakos projektor (Jelenet)"
7
+SourceWindow="Ablakos projektor (Forrás)"
8
 Clear="Törlés"
9
 Revert="Visszavonás"
10
 Show="Mutat"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Visszajátszás puffer"
13
 Import="Importálás"
14
 Export="Exportálás"
15
+Copy="Másolás"
16
+Paste="Beillesztés"
17
+PasteReference="Beillesztés (Referencia)"
18
+PasteDuplicate="Beillesztés (Másolat)"
19
+RemuxRecordings="Remux Felvételek"
20
+Next="Következő"
21
+Back="Vissza"
22
+
23
+AlreadyRunning.Title="Az OBS már fut"
24
+AlreadyRunning.Text="Az OBS már fut! Ha nem teljesen biztos benne mit tesz, akkor állítsa le az összes már futó OBS programot. Ha a programot úgy állította be, hogy rendszertálcára minimalizálódjon, akkor ellenőrizze, hogy ott megtalálható e."
25
+AlreadyRunning.LaunchAnyway="Indítás mégis"
26
+
27
+Copy.Filters="Szűrők másolása"
28
+Paste.Filters="Szűrők beillesztése"
29
+
30
+BandwidthTest.Region="Régió"
31
+BandwidthTest.Region.US="Egyesült Államok"
32
+BandwidthTest.Region.EU="Európa"
33
+BandwidthTest.Region.Asia="Ázsia"
34
+BandwidthTest.Region.Other="Egyéb"
35
+
36
+Basic.FirstStartup.RunWizard="Kívánja futtatni az automatikus konfiguráció varázslót? Természetesen manuálisan is konfigurálhatja a beállításokat a Beállítások gombra kattintva a fő ablakban."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Megjegyzés: az automatikus konfiguráció varázsló jelenleg béta fázisban van)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Ha meggondolja magát, bármikor futtathatja az automatikus konfiguráció varázslót az eszközök menüből."
39
+
40
+Basic.AutoConfig="Automatikus konfiguráció varázsló"
41
+Basic.AutoConfig.Beta="Automatikus konfiguráció varázsló (Béta)"
42
+Basic.AutoConfig.ApplySettings="Beállítások alkalmazása"
43
+Basic.AutoConfig.StartPage="Használati tudnivalók"
44
+Basic.AutoConfig.StartPage.SubTitle="Adja meg, hogy mire szeretné használni a programot"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Streamre optimalizálás, a felvétel másodlagos"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Felvételre optimalizálás, nem fogok streamelni"
47
+Basic.AutoConfig.VideoPage="Videó beállítások"
48
+Basic.AutoConfig.VideoPage.SubTitle="Adja meg milyen videó beállításokat kíván használni"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Aktuális (%1x%2) használata"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Megjelenítő %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Aktuális (%1) használata"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 vagy 30, de inkább 60, ha lehetséges"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 vagy 30, de inkább nagyobb felbontás"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Megjegyzés: A vászon (alap) felbontása nem feltétlenül ugyanaz, mint a stream vagy felvétel felbontása. A tényleges stream/felvétel felbontása esetlegesen lefele lesz skálázva az erőforrások leterheltsége vagy a bitsebesség követelmények elérése érdekében."
55
+Basic.AutoConfig.StreamPage="Stream információ"
56
+Basic.AutoConfig.StreamPage.SubTitle="Adja meg a stream információit"
57
+Basic.AutoConfig.StreamPage.Service="Szolgáltató"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Összes megjelenítése..."
59
+Basic.AutoConfig.StreamPage.Server="Szerver"
60
+Basic.AutoConfig.StreamPage.StreamKey="Stream kulcs"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bitsebesség megbecsülése sávszélesség teszttel (néhány percig is eltarthat)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Hardveres kódolás előnyben részesítése"
64
+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."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Stream figyelmeztetés"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="A sávszélesség teszt véletlenszerűsített videoadatokat fog közvetíteni hang nélkül a csatornájára. Ha tudja, ideiglenesen kapcsolja ki a streamek rögzítését és állítsa a streamet privátra amíg a teszt befejeződik. Folytatja?"
67
+Basic.AutoConfig.TestPage="Végeredmény"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="A program most különböző tesztekkel megbecsüli a legideálisabb beállításokat"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="A teszt befejeződött"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Sávszélesség teszt végrehajtása, ez egy pár percig eltarthat..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Csatlakozás szerverhez: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Nem sikerült kapcsolódni egy szerverhez sem, ellenőrizze az internetkapcsolatát és próbálja újra."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Sávszélesség vizsgálat: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Stream kódoló tesztelése, ez néhány percig is eltarthat..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Felvétel kódoló tesztelése, ez néhány percig is eltarthat..."
76
+Basic.AutoConfig.TestPage.TestingRes="Felbontás tesztelése, ez néhány percig is eltarthat..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Kódoló indítása sikertelen"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="%1x%2 %3 FPS tesztelése..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Stream kódoló"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Felvétel kódoló"
81
+Basic.AutoConfig.TestPage.Result.Header="A program megállapította, hogy ezek a becsült beállítások a legideálisabbak az ön számára:"
82
+Basic.AutoConfig.TestPage.Result.Footer="A beállítások használatához kattintson a Beállítások alkalmazása gombra. A varázsló újrakonfigurálásához és az újrapróbálkozáshoz, kattintson a Vissza gombra. A manuális beállításokhoz kattintson a Mégse gombra és nyissa meg a Beállításokat."
83
+
84
+Basic.Stats="Statisztika"
85
+Basic.Stats.CPUUsage="Processzorhasználat"
86
+Basic.Stats.HDDSpaceAvailable="Szabad merevlemez terület"
87
+Basic.Stats.MemoryUsage="Memóriahasználat"
88
+Basic.Stats.AverageTimeToRender="Átlagos képkocka feldolgozási idő"
89
+Basic.Stats.SkippedFrames="Kihagyott képkockák kódolási lag miatt"
90
+Basic.Stats.MissedFrames="Renderlag miatt nem fogadott képkockák"
91
+Basic.Stats.Output.Stream="Stream"
92
+Basic.Stats.Output.Recording="Felvétel"
93
+Basic.Stats.Status="Állapot"
94
+Basic.Stats.Status.Recording="Rögzítés"
95
+Basic.Stats.Status.Live="ÉLŐ"
96
+Basic.Stats.Status.Reconnecting="Újracsatlakozás"
97
+Basic.Stats.Status.Inactive="Inaktív"
98
+Basic.Stats.DroppedFrames="Képkockák ejtve (Hálózat)"
99
+Basic.Stats.MegabytesSent="Összes kimeneti adat"
100
+Basic.Stats.Bitrate="Bitsebesség"
101
 
102
 Updater.Title="Új frissítés elérhető"
103
 Updater.Text="Új frissítés elérhető:"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="Téma"
106
 Basic.Settings.General.Language="Nyelv"
107
 Basic.Settings.General.EnableAutoUpdates="Indításkor a frissítések automatikus ellenőrzése"
108
+Basic.Settings.General.OpenStatsOnStartup="Statisztikai párbeszédpanel megnyitása indításkor"
109
 Basic.Settings.General.WarnBeforeStartingStream="Megerősítő párbeszédpanel megjelenítése stream indításakor"
110
 Basic.Settings.General.WarnBeforeStoppingStream="Megerősítő párbeszédpanel megjelenítése stream leállításakor"
111
 Basic.Settings.General.Projectors="Projektorok"
112
@@ -538,6 +628,7 @@
113
 Basic.Settings.Advanced.Video.ColorRange.Full="Teljes"
114
 Basic.Settings.Advanced.Audio.MonitoringDevice="Hangfigyelő eszköz"
115
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Alapértelmezett"
116
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows hangerőcsökkentés lekapcsolása"
117
 Basic.Settings.Advanced.StreamDelay="Stream késleltetés"
118
 Basic.Settings.Advanced.StreamDelay.Duration="Időtartam (másodperc)"
119
 Basic.Settings.Advanced.StreamDelay.Preserve="Töréspont megőrzése (Késleltetés növeléssel) újrakapcsolódás esetén"
120
@@ -617,3 +708,6 @@
121
 OutputWarnings.MultiTrackRecording="Figyelem: Bizonyos formátumok (mint az FLV) nem támogatják a több sávot felvételenként"
122
 OutputWarnings.MP4Recording="Figyelem: Az MP4-be 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-be, miután elkészült. (Fájl->Felvételek remuxolása)"
123
 
124
+FinalScene.Title="Jelenet törlése"
125
+FinalScene.Text="Legalább egy jelenetnek lennie kell."
126
+
127
obs-studio-18.0.2.tar.xz/UI/data/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/it-IT.ini Changed
134
 
1
@@ -56,8 +56,33 @@
2
 ReplayBuffer="Buffer di replay"
3
 Import="Importa"
4
 Export="Esporta"
5
+Copy="Copia"
6
+Paste="Incolla"
7
+PasteReference="Incolla (riferimento)"
8
+PasteDuplicate="Incolla (duplicato)"
9
+RemuxRecordings="Remux registrazioni"
10
 
11
 
12
+Copy.Filters="Filtri di copia"
13
+Paste.Filters="Filtri di incollamento"
14
+
15
+
16
+
17
+
18
+
19
+Updater.Title="Nuovo aggiornamento disponibile"
20
+Updater.Text="C'è un nuovo aggiornamento disponibile:"
21
+Updater.UpdateNow="Aggiorna ora"
22
+Updater.RemindMeLater="Ricordamelo più tardi"
23
+Updater.Skip="Salta versione"
24
+Updater.Running.Title="Programma attualmente attivo"
25
+Updater.Running.Text="Uscite sono attualmente attive, chiudi qualsiasi uscita attiva prima di tentare l'aggiornamento"
26
+Updater.NoUpdatesAvailable.Title="Nessun aggiornamento disponibile"
27
+Updater.NoUpdatesAvailable.Text="Nessun aggiornamento attualmente disponibile"
28
+Updater.FailedToLaunch="Avvio dello strumento di aggiornamento non riuscito"
29
+Updater.GameCaptureActive.Title="Cattura gioco attivo"
30
+Updater.GameCaptureActive.Text="L'hook della libreria di cattura gioco è attualmente in uso. Chiudi qualsiasi gioco/programma oggetto di acquisizione (o riavvia Windows) e prova ancora."
31
+
32
 QuickTransitions.SwapScenes="Scambia scene di anteprima/uscita dopo la transizione"
33
 QuickTransitions.SwapScenesTT="Scambia le scene di uscita con quella in anteprima dopo la transizione (ammesso che la scena in uscita originale ci sia ancora).\nQuesto non modificherà eventuali cambiamenti apportati alla scena di uscita originale."
34
 QuickTransitions.DuplicateScene="Duplica scena"
35
@@ -98,6 +123,10 @@
36
 ConfirmRemove.Text="Sei sicuro di voler rimuovere '$1'?"
37
 ConfirmRemove.TextMultiple="Sei sicuro di volere rimuovere %1 elementi?"
38
 
39
+Output.StartStreamFailed="Avvio della trasmissione non riuscito"
40
+Output.StartRecordingFailed="Avvio della registrazione non riuscito"
41
+Output.StartReplayFailed="Avvio del buffer di riproduzione non riuscito"
42
+Output.StartFailedGeneric="L'avvio dell'uscita non è riuscito. Controlla il log per i dettagli.\n\nNote: se utilizzi i codificatori NVENC o AMD, assicurati che i driver video siano aggiornati."
43
 
44
 Output.ConnectFail.Title="Impossibile connettersi"
45
 Output.ConnectFail.BadPath="Percorso o URL di connessione non valido. Controlla le tue impostazioni per confermare che siano valide."
46
@@ -175,6 +204,10 @@
47
 Deinterlacing.TopFieldFirst="Priorità livello superiore"
48
 Deinterlacing.BottomFieldFirst="Priorità livello inferiore"
49
 
50
+VolControl.SliderUnmuted="Cursore del volume per '%1': %2"
51
+VolControl.SliderMuted="Cursore del volume per '%1': %2 (attualmente silenziato)"
52
+VolControl.Mute="Silenzia '%1'"
53
+VolControl.Properties="Proprietà di '%1'"
54
 
55
 Basic.Main.AddSceneDlg.Title="Aggiungi scena"
56
 Basic.Main.AddSceneDlg.Text="Inserisci il nome della scena"
57
@@ -354,8 +387,10 @@
58
 Basic.Settings.General="Generali"
59
 Basic.Settings.General.Theme="Tema"
60
 Basic.Settings.General.Language="Lingua"
61
+Basic.Settings.General.EnableAutoUpdates="Controlla aggiornamenti automaticamente all'avvio"
62
 Basic.Settings.General.WarnBeforeStartingStream="Chiedi conferma quando si avvia una diretta"
63
 Basic.Settings.General.WarnBeforeStoppingStream="Chiedi conferma quando si termina una diretta"
64
+Basic.Settings.General.Projectors="Proiettori"
65
 Basic.Settings.General.HideProjectorCursor="Nascondi cursore sopra proiettori"
66
 Basic.Settings.General.ProjectorAlwaysOnTop="Rendono i proiettori sempre in primo piano"
67
 Basic.Settings.General.Snapping="Allineamento Snapping Source"
68
@@ -365,8 +400,12 @@
69
 Basic.Settings.General.SnapDistance="Sensibilità Snap"
70
 Basic.Settings.General.RecordWhenStreaming="Registra automaticamente quando si è in diretta"
71
 Basic.Settings.General.KeepRecordingWhenStreamStops="Continua a registrare quando la diretta s'interrompe"
72
+Basic.Settings.General.ReplayBufferWhileStreaming="Avvia automaticamente il buffer di riproduzione durante la trasmissione"
73
+Basic.Settings.General.KeepReplayBufferStreamStops="Mantieni il buffer di riproduzione attiva quando la trasmissione si interrompe"
74
+Basic.Settings.General.SysTray="Vassoio di sistema"
75
 Basic.Settings.General.SysTrayWhenStarted="Minimizza all'area di notifica all'avvio"
76
 Basic.Settings.General.SystemTrayHideMinimize="Minimizza sempre nel vassoio di sistema invece che nella barra delle applicazioni"
77
+Basic.Settings.General.SaveProjectors="Salva i proiettori all'uscita"
78
 
79
 Basic.Settings.Stream="Stream"
80
 Basic.Settings.Stream.StreamType="Tipo di stream"
81
@@ -455,24 +494,26 @@
82
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Encoder Audio"
83
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Impostazioni codifica audio (se presente)"
84
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Impostazioni Muxer (se possibile)"
85
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Intervallo fotogrammi chiave (fotogrammi)"
86
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Mostra tutti i codec (anche se potenzialmente incompatibili)"
87
 
88
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
89
 
90
 FilenameFormatting.TT="%CCYY       Anno, quattro cifre\n%YY        Anno, ultime due cifre (00-99)\n%MM     Mese come numero decimale (01-12)\n%DD      Giorno del mese, zero-padded (01-31)\n%hh       Ore in formato 24 ore (00-23)\n%mm      Minuto (00-59)\n%ss     Secondi (00-61)\n%%     Un % segno\n%a      Giorno della settimana abbreviato\n%A Un nome del giorno della settimana intero\n%b     Nome del mese abbreviato\n%B        Nome del mese intero\n%d        Giorno del mese, zero-padded (01-31)\n%H        Ore in formato 24 ore (00-23)\n%I       Ore in formato 12 ore (01-12)\n%m       Mese come numero decimale (01-12)\n%M       Minuto (00-59)\n%p      Designazione AM o PM\n%S        Secondi (00-61)\n%y     Anno, ultime due lettere (00-99)\n%Y        Anno\n%z        ISO 8601 offset da UTC o fuso orario\n      Nome o abbreviazione\n%Z        Nome o abbreviazione del fuso orario\n"
91
 
92
 Basic.Settings.Video="Video"
93
-Basic.Settings.Video.Adapter="Adattatore video:"
94
-Basic.Settings.Video.BaseResolution="Risoluzione base (Canvas):"
95
-Basic.Settings.Video.ScaledResolution="Risoluzione output (scaled):"
96
-Basic.Settings.Video.DownscaleFilter="Filtro di rimpicciolimento:"
97
+Basic.Settings.Video.Adapter="Adattatore video"
98
+Basic.Settings.Video.BaseResolution="Risoluzione base (Canvas)"
99
+Basic.Settings.Video.ScaledResolution="Risoluzione output (scalata)"
100
+Basic.Settings.Video.DownscaleFilter="Filtro di rimpicciolimento"
101
 Basic.Settings.Video.DisableAeroWindows="Disabilita Aero (solo Windows)"
102
-Basic.Settings.Video.FPS="FPS:"
103
+Basic.Settings.Video.FPS="FPS"
104
 Basic.Settings.Video.FPSCommon="Valori FPS comuni"
105
 Basic.Settings.Video.FPSInteger="Valore FPS con numero intero"
106
 Basic.Settings.Video.FPSFraction="Valore FPS con numero frazionario"
107
-Basic.Settings.Video.Numerator="Numeratore:"
108
-Basic.Settings.Video.Denominator="Denominatore:"
109
-Basic.Settings.Video.Renderer="Renderer:"
110
+Basic.Settings.Video.Numerator="Numeratore"
111
+Basic.Settings.Video.Denominator="Denominatore"
112
+Basic.Settings.Video.Renderer="Renderer"
113
 Basic.Settings.Video.InvalidResolution="Valore di risoluzione invalido. Deve essere [larghezza]x[altezza] (es. 1920x1080)"
114
 Basic.Settings.Video.CurrentlyActive="L'output video è attualmente attivo. Spegni qualunque output per cambiare le impostazioni."
115
 Basic.Settings.Video.DisableAero="Disabilita Aero"
116
@@ -516,6 +557,8 @@
117
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Utilizzo di memoria stimato: %1 MB"
118
 Basic.Settings.Advanced.Network="Rete"
119
 Basic.Settings.Advanced.Network.BindToIP="Associa a IP"
120
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Attiva il nuovo codice di rete"
121
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Modalità a bassa latenza"
122
 
123
 Basic.AdvAudio="Proprietà audio avanzate"
124
 Basic.AdvAudio.Name="Nome"
125
@@ -585,4 +628,8 @@
126
 
127
 OutputWarnings.NoTracksSelected="Devi selezionare almeno una traccia"
128
 OutputWarnings.MultiTrackRecording="Attenzione: Alcuni formati (come FLV) non supportano più di una traccia per registrazione"
129
+OutputWarnings.MP4Recording="Avviso: le registrazioni salvate in MP4 non saranno recuperabili se il file non può essere finalizzato (ad es. a seguito di BSOD, perdite di potenza, ecc.). Se desideri registrare più tracce audio prendi in considerazione l'utilizzo di MKV e esegui il remux della registrazione in mp4 dopo che è finito (File-> Remux registrazioni)"
130
+
131
+FinalScene.Title="Elimina scena"
132
+FinalScene.Text="Deve esserci almeno una scena."
133
 
134
obs-studio-18.0.2.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ja-JP.ini Changed
187
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="全画面プロジェクター (プレビュー)"
3
 SceneProjector="全画面プロジェクター (シーン)"
4
 SourceProjector="全画面プロジェクター (ソース)"
5
+PreviewWindow="ウィンドウ プロジェクター (プレビュー)"
6
+SceneWindow="ウィンドウ プロジェクター (シーン)"
7
+SourceWindow="ウィンドウ プロジェクター (ソース)"
8
 Clear="クリア"
9
 Revert="元に戻す"
10
 Show="表示"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="リプレイバッファー"
13
 Import="インポート"
14
 Export="エクスポート"
15
+Copy="コピー"
16
+Paste="貼り付け"
17
+PasteReference="貼り付け (参照)"
18
+PasteDuplicate="貼り付け (複製)"
19
+RemuxRecordings="録画の再多重化"
20
+Next="次へ"
21
+Back="戻る"
22
+
23
+AlreadyRunning.Title="OBSは既に実行中です"
24
+AlreadyRunning.Text="OBSは既に実行されています!  この操作を行うつもりがない限り、新しいインスタンスを実行する前に既存のOBSインスタンスを終了してください。OBSがシステムトレイに最小化されるように設定されている場合は、まだ実行中であるかどうかを確認してください。"
25
+AlreadyRunning.LaunchAnyway="とにかく起動する"
26
+
27
+Copy.Filters="フィルタをコピーする"
28
+Paste.Filters="フィルタを貼り付ける"
29
+
30
+BandwidthTest.Region="地域"
31
+BandwidthTest.Region.US="米国"
32
+BandwidthTest.Region.EU="ヨーロッパ"
33
+BandwidthTest.Region.Asia="アジア"
34
+BandwidthTest.Region.Other="その他"
35
+
36
+Basic.FirstStartup.RunWizard="自動構成ウィザードを実行しますか? メインウィンドウの設定ボタンをクリックして手動で設定を構成することもできます。"
37
+Basic.FirstStartup.RunWizard.BetaWarning="(注意: 自動構成ウィザードは現在ベータ版)"
38
+Basic.FirstStartup.RunWizard.NoClicked="あなたの気が変わったら、ツールメニューからいつでも自動構成ウィザードを実行できます。"
39
+
40
+Basic.AutoConfig="自動構成ウィザード"
41
+Basic.AutoConfig.Beta="自動構成ウィザード (ベータ版)"
42
+Basic.AutoConfig.ApplySettings="設定を適用"
43
+Basic.AutoConfig.StartPage="使用情報"
44
+Basic.AutoConfig.StartPage.SubTitle="プログラムの使用目的を指定する"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="配信のために最適化し、録画は二次的なものとする"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="録画のために最適化し、配信はしない"
47
+Basic.AutoConfig.VideoPage="映像設定"
48
+Basic.AutoConfig.VideoPage.SubTitle="使用したい映像設定を指定する"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="現在の値を使用 (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="画面 %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="現在の値を使用 (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60または30のいずれか、可能なら60を優先"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60または30のいずれか、高解像度を優先"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="注: キャンバス (基本) 解像度は配信や録画の解像度と必ずしも同じではありません。 実際の配信/録画の解像度はリソース使用量やビットレート要求を減らすためにキャンバス解像度から縮小されたものを使用できます。"
55
+Basic.AutoConfig.StreamPage="配信情報"
56
+Basic.AutoConfig.StreamPage.SubTitle="配信情報を入力してください"
57
+Basic.AutoConfig.StreamPage.Service="サービス"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="すべて表示..."
59
+Basic.AutoConfig.StreamPage.Server="サーバー"
60
+Basic.AutoConfig.StreamPage.StreamKey="ストリームキー"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(リンク)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="帯域幅のテストでビットレートを推定する (数分かかることがあります)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="ハードウェアエンコードを優先する"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="ハードウェアエンコードは CPU 使用率がほとんどなくなりますが、同レベルの品質を得るためにはより多くのビットレートが必要になります。"
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="配信の警告"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="帯域幅のテストはランダム化された音声なしの映像データを自分のチャンネルに配信しようとしています。可能ならば、一時的に配信の映像保存をオフにしてテストが完了するまで配信を非公開に設定することをおすすめします。 続行しますか?"
67
+Basic.AutoConfig.TestPage="最終結果"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="プログラムは最も理想的な設定を推定するための一連のテストを現在実行中です"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="テスト完了"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="帯域幅テストの実行、これには数分かかることがあります..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="接続先:  %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="サーバーに接続できませんでした。インターネット接続を確認してからもう一度お試しください。"
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="帯域幅のテスト:  %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="配信エンコーダのテスト中、これには数分かかることがあります..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="録画エンコーダのテスト中、これには数分かかることがあります..."
76
+Basic.AutoConfig.TestPage.TestingRes="解像度のテスト中、これには数分かかることがあります..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="エンコーダの起動に失敗しました"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="テスト中 %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="配信エンコーダ"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="録画エンコーダ"
81
+Basic.AutoConfig.TestPage.Result.Header="プログラムはこれらの推定設定があなたにとって最も理想的であると判断しました:"
82
+Basic.AutoConfig.TestPage.Result.Footer="これらの設定を使用するには、設定を適用をクリックします。 ウィザードを再構成して再試行するには、戻るをクリックします。 手動で設定をするには、キャンセルをクリックして設定を開きます。"
83
+
84
+Basic.Stats="統計"
85
+Basic.Stats.CPUUsage="CPU使用率"
86
+Basic.Stats.HDDSpaceAvailable="HDDの空き容量"
87
+Basic.Stats.MemoryUsage="メモリ使用量"
88
+Basic.Stats.AverageTimeToRender="フレームをレンダリングする平均時間"
89
+Basic.Stats.SkippedFrames="エンコードのラグが原因でスキップされたフレーム"
90
+Basic.Stats.MissedFrames="レンダリングラグが原因で逃したフレーム"
91
+Basic.Stats.Output.Stream="配信"
92
+Basic.Stats.Output.Recording="録画"
93
+Basic.Stats.Status="状態"
94
+Basic.Stats.Status.Recording="録画中"
95
+Basic.Stats.Status.Live="配信中"
96
+Basic.Stats.Status.Reconnecting="再接続中"
97
+Basic.Stats.Status.Inactive="非アクティブ"
98
+Basic.Stats.DroppedFrames="ドロップフレーム (ネットワーク)"
99
+Basic.Stats.MegabytesSent="出力データの合計"
100
+Basic.Stats.Bitrate="ビットレート"
101
 
102
 Updater.Title="利用可能な更新"
103
 Updater.Text="利用可能な更新があります:"
104
@@ -119,7 +208,7 @@
105
 Output.ConnectFail.BadPath="パスかURLが無効です。再確認して下さい。"
106
 Output.ConnectFail.ConnectFailed="サーバーへの接続に失敗しました"
107
 Output.ConnectFail.InvalidStream="指定したチャンネルまたはストリームキーにアクセスできませんでした。ストリームキーを再確認してください。 それが正しい場合は、サーバーへの接続に問題があります。"
108
-Output.ConnectFail.Error="サーバー接続時に予期しないエラーが発生しました。ログファイルを確認して下さい。"
109
+Output.ConnectFail.Error="サーバー接続時に予期しないエラーが発生しました。ログファイルを確認してください。"
110
 Output.ConnectFail.Disconnected="サーバーから切断されました。"
111
 
112
 Output.RecordFail.Title="録画を開始できませんでした"
113
@@ -144,7 +233,7 @@
114
 LicenseAgreement.IAgree="同意する"
115
 LicenseAgreement.Exit="終了"
116
 
117
-Remux.SourceFile="OBS録画"
118
+Remux.SourceFile="OBS 録画"
119
 Remux.TargetFile="対象ファイル"
120
 Remux.Remux="再多重化"
121
 Remux.OBSRecording="OBS 録画"
122
@@ -375,11 +464,12 @@
123
 Basic.Settings.General.Theme="テーマ"
124
 Basic.Settings.General.Language="言語"
125
 Basic.Settings.General.EnableAutoUpdates="起動時に自動的に更新を確認する"
126
+Basic.Settings.General.OpenStatsOnStartup="起動時に統計ダイアログを開く"
127
 Basic.Settings.General.WarnBeforeStartingStream="配信を開始するときに確認ダイアログを表示する"
128
 Basic.Settings.General.WarnBeforeStoppingStream="配信を停止するときに確認ダイアログを表示する"
129
 Basic.Settings.General.Projectors="プロジェクター"
130
 Basic.Settings.General.HideProjectorCursor="プロジェクター上のカーソルを非表示にする"
131
-Basic.Settings.General.ProjectorAlwaysOnTop="プロジェクタを常に手前に表示させる"
132
+Basic.Settings.General.ProjectorAlwaysOnTop="プロジェクターを常に手前に表示させる"
133
 Basic.Settings.General.Snapping="ソース配置のスナップ"
134
 Basic.Settings.General.ScreenSnapping="画面の端にソースをスナップする"
135
 Basic.Settings.General.CenterSnapping="水平方向および垂直方向の中心にソースをスナップする"
136
@@ -445,7 +535,7 @@
137
 Basic.Settings.Output.NoSpaceFileName="スペースなしのファイル名を生成"
138
 
139
 Basic.Settings.Output.Adv.Rescale="出力をリスケールする"
140
-Basic.Settings.Output.Adv.AudioTrack="オーディオ トラック"
141
+Basic.Settings.Output.Adv.AudioTrack="音声トラック"
142
 Basic.Settings.Output.Adv.Streaming="配信"
143
 Basic.Settings.Output.Adv.ApplyServiceSettings="ストリーミングサービスのエンコーダ設定を適用する"
144
 Basic.Settings.Output.Adv.Audio.Track1="トラック 1"
145
@@ -489,18 +579,18 @@
146
 FilenameFormatting.TT="%CCYY       年, 4桁\n%YY      年, 下2桁 (00-99)\n%MM     月 数値 (01-12)\n%DD       日, 0埋め (01-31)\n%hh     時 24時間形式 (00-23)\n%mm       分 (00-59)\n%ss      秒 (00-61)\n%%       A % 記号\n%a      曜日 省略名\n%A      曜日 完全名\n%b      月 省略名\n%B       月 完全名\n%d       日, 0埋め (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       年, 下2桁 (00-99)\n%Y      年\n%z       ISO 8601 UTCタイムゾーンからのオフセット\n        名前または省略名\n%Z        タイムゾーン名または省略名\n"
147
 
148
 Basic.Settings.Video="映像"
149
-Basic.Settings.Video.Adapter="ビデオアダプター:"
150
-Basic.Settings.Video.BaseResolution="基本 (キャンバス) 解像度:"
151
-Basic.Settings.Video.ScaledResolution="出力 (スケーリング) 解像度:"
152
-Basic.Settings.Video.DownscaleFilter="縮小フィルタ:"
153
+Basic.Settings.Video.Adapter="ビデオアダプター"
154
+Basic.Settings.Video.BaseResolution="基本 (キャンバス) 解像度"
155
+Basic.Settings.Video.ScaledResolution="出力 (スケーリング) 解像度"
156
+Basic.Settings.Video.DownscaleFilter="縮小フィルタ"
157
 Basic.Settings.Video.DisableAeroWindows="エアロ無効 (Windows のみ)"
158
-Basic.Settings.Video.FPS="FPS:"
159
+Basic.Settings.Video.FPS="FPS"
160
 Basic.Settings.Video.FPSCommon="FPS 共通値"
161
 Basic.Settings.Video.FPSInteger="FPS 整数値"
162
 Basic.Settings.Video.FPSFraction="FPS 分数値"
163
-Basic.Settings.Video.Numerator="分子:"
164
-Basic.Settings.Video.Denominator="分母:"
165
-Basic.Settings.Video.Renderer="レンダラー:"
166
+Basic.Settings.Video.Numerator="分子"
167
+Basic.Settings.Video.Denominator="分母"
168
+Basic.Settings.Video.Renderer="レンダラー"
169
 Basic.Settings.Video.InvalidResolution="解像度の値が不正です。[幅]x[高さ] (例 1920x1080)にしてください"
170
 Basic.Settings.Video.CurrentlyActive="映像出力中です。映像設定を変更するには出力を停止してください。"
171
 Basic.Settings.Video.DisableAero="Aeroを無効にする"
172
@@ -538,6 +628,7 @@
173
 Basic.Settings.Advanced.Video.ColorRange.Full="全部"
174
 Basic.Settings.Advanced.Audio.MonitoringDevice="音声モニタリングデバイス"
175
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="既定"
176
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Windowsの音量を自動で下げる機能を無効にする"
177
 Basic.Settings.Advanced.StreamDelay="遅延配信"
178
 Basic.Settings.Advanced.StreamDelay.Duration="継続時間 (秒)"
179
 Basic.Settings.Advanced.StreamDelay.Preserve="再接続時にカットオフポイントを保持する (増加遅延)"
180
@@ -617,3 +708,6 @@
181
 OutputWarnings.MultiTrackRecording="警告: 特定のフォーマット (FLVなど) は1つの録画で複数のトラックをサポートしていません"
182
 OutputWarnings.MP4Recording="警告: ファイルをファイナライズ出来ない場合 (例えば、BSOD、電力損失などの結果として) はMP4に保存された録画は回復不能になります。 複数の音声トラックを録画する場合はMKVの利用を検討して録画の終了後にMP4に再多重化してください。(ファイル -> 録画の再多重化)"
183
 
184
+FinalScene.Title="シーンを削除する"
185
+FinalScene.Text="1つ以上のシーンが必要です。"
186
+
187
obs-studio-18.0.2.tar.xz/UI/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ko-KR.ini Changed
154
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="전체화면 프로젝터 (미리보기)"
3
 SceneProjector="전체화면 프로젝터 (장면)"
4
 SourceProjector="전체화면 프로젝터 (소스)"
5
+PreviewWindow="창 프로젝터 (미리보기)"
6
+SceneWindow="창 프로젝터 (장면)"
7
+SourceWindow="창 프로젝터 (소스)"
8
 Clear="단축키 해제"
9
 Revert="되돌리기"
10
 Show="보이기"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="리플레이 버퍼"
13
 Import="가져오기"
14
 Export="내보내기"
15
+Copy="복사"
16
+Paste="붙여넣기"
17
+PasteReference="붙여넣기 (참조)"
18
+PasteDuplicate="붙여넣기 (중복)"
19
+RemuxRecordings="녹화본 재다중화"
20
+Next="다음"
21
+Back="이전"
22
+
23
+AlreadyRunning.Title="OBS가 이미 실행 중입니다"
24
+AlreadyRunning.Text="OBS가 이미 실행 중입니다! 의도한 것이 아니라면 새로운 OBS를 실행하기 전에 이미 동작 중인 프로그램을 종료하십시오. OBS가 시스템 트레이에 최소화되어 있는지도 확인하십시오."
25
+AlreadyRunning.LaunchAnyway="경고를 무시하고 실행"
26
+
27
+Copy.Filters="필터를 복사"
28
+Paste.Filters="필터를 붙여넣기"
29
+
30
+BandwidthTest.Region="지역"
31
+BandwidthTest.Region.US="미국"
32
+BandwidthTest.Region.EU="유럽"
33
+BandwidthTest.Region.Asia="아시아"
34
+BandwidthTest.Region.Other="기타"
35
+
36
+Basic.FirstStartup.RunWizard="구성 마법사를 실행하겠습니까? 설정 창에서 수동으로 설정할 수도 있습니다."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(참고: 구성 마법사는 현재 베타 시험 중입니다)"
38
+Basic.FirstStartup.RunWizard.NoClicked="언제든지 도구 창에서 구성 마법사를 실행할 수 있습니다."
39
+
40
+Basic.AutoConfig="구성 마법사"
41
+Basic.AutoConfig.Beta="구성 마법사 (베타)"
42
+Basic.AutoConfig.ApplySettings="설정 적용"
43
+Basic.AutoConfig.StartPage="사용 정보"
44
+Basic.AutoConfig.StartPage.SubTitle="이 프로그램으로 무엇을 할지 알려주세요"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="방송 최적화, 녹화는 부차적으로 사용"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="녹화 최적화, 방송은 하지 않음"
47
+Basic.AutoConfig.VideoPage="비디오 설정"
48
+Basic.AutoConfig.VideoPage.SubTitle="원하는 비디오 설정을 알려주세요"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="현재 설정 사용 (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="디스플레이 %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="현재 설정 사용 (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 혹은 30, 하지만 가능하면 60을 선호"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 혹은 30, 하지만 높은 해상도를 선호"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="참고: 캔버스 (기본) 해상도는 방송 혹은 녹화하려는 해상도와 반드시 같을 필요는 없습니다. 실제 방송/녹화 해상도는 Pc 사양을 낮추거나 비트레이트 제한에 맞추기 위해 이 캔버스 해상도를 기준으로 축소할 수 있습니다."
55
+Basic.AutoConfig.StreamPage="방송 정보"
56
+Basic.AutoConfig.StreamPage.SubTitle="방송 정보를 입력하세요"
57
+Basic.AutoConfig.StreamPage.Service="서비스"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="모두 보기..."
59
+Basic.AutoConfig.StreamPage.Server="서버"
60
+Basic.AutoConfig.StreamPage.StreamKey="스트림 키"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(링크)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="대역폭 검사로 비트레이트 계산 (몇 분 정도 걸릴 수 있음)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="하드웨어 인코딩 선호"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="하드웨어 인코딩은 CPU 사용량을 대폭 줄일 수 있지만, 소프트웨어 인코덩과 동등한 품질을 달성하려면 더 많은 비트레이트가 필요합니다."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="방송 경고"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="대역폭 검사 작업은 무작위 영상 데이터를 사용자의 방송 채널로 송출합니다. 이 검사가 끝날 때까지 방송 서비스에서 저장 기능을 잠시 끄거나 방송을 비공개로 전환하는 것을 추천합니다. 계속할까요?"
67
+Basic.AutoConfig.TestPage="최종 결과"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="이 프로그램은 가장 이상적인 설정을 찾기 위해서 몇 가지 검사를 시행합니다."
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="검사 완료"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="대역폭 검사 중, 몇 분 정도 걸릴 수 있습니다..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="접속 시도 중: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="서버 접속에 실패했습니다. 인터넷 연결을 점검한 다음 다시 시도하세요."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="대역폭 검사를 수행합니다: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="방송 인코더 시험 중, 몇 분 정도 걸릴 수 있습니다..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="녹화 인코더 시험 중, 몇 분 정도 걸릴 수 있습니다..."
76
+Basic.AutoConfig.TestPage.TestingRes="해상도 시험 중, 몇 분 정도 걸릴 수 있습니다..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="인코더 시작 실패"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="%1x%2 %3 FPS 검사 중..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="방송 인코더"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="녹화 인코더"
81
+Basic.AutoConfig.TestPage.Result.Header="프로그램에서 측정한 가장 이상적인 설정:"
82
+Basic.AutoConfig.TestPage.Result.Footer="이 설정을 사용하려면 설정 적용을 누르세요. 구성 마법사를 다시 시작하려면 뒤로 가기를 누르세요. 수동으로 설정하고 싶다면 취소를 누른 다음 설정 창을 확인하세요."
83
+
84
+Basic.Stats="통계"
85
+Basic.Stats.CPUUsage="CPU 이용률"
86
+Basic.Stats.HDDSpaceAvailable="저장장치 공간 충분"
87
+Basic.Stats.MemoryUsage="메모리 사용"
88
+Basic.Stats.AverageTimeToRender="프레임을 렌더링하는데 필요한 평균 시간"
89
+Basic.Stats.SkippedFrames="인코딩 작업이 지연되어 생략된 프레임"
90
+Basic.Stats.MissedFrames="렌더링 작업이 지연되어 놓친 프레임"
91
+Basic.Stats.Output.Stream="방송"
92
+Basic.Stats.Output.Recording="녹화"
93
+Basic.Stats.Status="상태"
94
+Basic.Stats.Status.Recording="녹화 중"
95
+Basic.Stats.Status.Live="실황"
96
+Basic.Stats.Status.Reconnecting="다시 연결 중"
97
+Basic.Stats.Status.Inactive="작동 중지"
98
+Basic.Stats.DroppedFrames="드롭된 프레임 (네트워크)"
99
+Basic.Stats.MegabytesSent="데이터 출력 합계"
100
+Basic.Stats.Bitrate="비트레이트"
101
 
102
 Updater.Title="사용가능한 판올림이 있습니다"
103
 Updater.Text="새 판올림이 준비되었습니다:"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="테마"
106
 Basic.Settings.General.Language="언어"
107
 Basic.Settings.General.EnableAutoUpdates="프로그램을 시작할 때 자동으로 판올림이 있나 확인"
108
+Basic.Settings.General.OpenStatsOnStartup="시작 시 통계 창을 열기"
109
 Basic.Settings.General.WarnBeforeStartingStream="방송을 시작할 때 확인 대화 상자 표시"
110
 Basic.Settings.General.WarnBeforeStoppingStream="방송을 중단할 때 확인 대화 상자 표시"
111
 Basic.Settings.General.Projectors="프로젝터"
112
@@ -489,18 +579,18 @@
113
 FilenameFormatting.TT="%CCYY       연도, 네 자리\n%YY       연도, 마지막 두 자리 (00-99)\n%MM       월 십진법 (01-12)\n%DD      일, 선행 0 포함 (01-31)\n%hh     시 24 시간 형식 (00-23)\n%mm     Minute (00-59)\n%ss     초 (00-61)\n%%       A % sign\n%a        요일 축약\n%A       요일\n%b      월 축약\n%B        월\n%d       일, 선행 0 포함 (01-31)\n%H      시 24 시간 형식 (00-23)\n%I      시 12 시간 형식 (01-12)\n%m      월 십진법 (01-12)\n%M       분 (00-59)\n%p       AM 혹은 PM 구분\n%S     초 (00-61)\n%y       연도, 마지막 두 자리 (00-99)\n%Y        연도\n%z      UTC에서 ISO 8601 기준만큼 조정 혹은 시간대\n     이름 혹은 축약\n%Z        시간대 이름 혹은 축약\n"
114
 
115
 Basic.Settings.Video="비디오"
116
-Basic.Settings.Video.Adapter="비디오 어댑터:"
117
-Basic.Settings.Video.BaseResolution="기본 (캔버스) 해상도:"
118
-Basic.Settings.Video.ScaledResolution="출력 (조정된) 해상도:"
119
-Basic.Settings.Video.DownscaleFilter="축소 필터:"
120
+Basic.Settings.Video.Adapter="비디오 어댑터"
121
+Basic.Settings.Video.BaseResolution="기본 (캔버스) 해상도"
122
+Basic.Settings.Video.ScaledResolution="출력 (조정된) 해상도"
123
+Basic.Settings.Video.DownscaleFilter="축소 필터"
124
 Basic.Settings.Video.DisableAeroWindows="에어로 비활성화 (윈도우 전용)"
125
-Basic.Settings.Video.FPS="초당 프레임수(FPS):"
126
+Basic.Settings.Video.FPS="초당 프레임수(FPS)"
127
 Basic.Settings.Video.FPSCommon="공통 FPS 값"
128
 Basic.Settings.Video.FPSInteger="정수 FPS 값"
129
 Basic.Settings.Video.FPSFraction="분수 FPS 값"
130
-Basic.Settings.Video.Numerator="분자:"
131
-Basic.Settings.Video.Denominator="분모:"
132
-Basic.Settings.Video.Renderer="렌더러:"
133
+Basic.Settings.Video.Numerator="분자"
134
+Basic.Settings.Video.Denominator="분모"
135
+Basic.Settings.Video.Renderer="렌더러"
136
 Basic.Settings.Video.InvalidResolution="잘못된 값이 입력되었습니다. 반드시 [폭]x[높이]의 형식이어야 합니다. (예 1920x1080)"
137
 Basic.Settings.Video.CurrentlyActive="비디오가 현재 출력되고 있습니다. 비디오 설정을 변경하려면 관련 작업을 중단해야 합니다."
138
 Basic.Settings.Video.DisableAero="에어로 테마 끄기"
139
@@ -538,6 +628,7 @@
140
 Basic.Settings.Advanced.Video.ColorRange.Full="전체"
141
 Basic.Settings.Advanced.Audio.MonitoringDevice="오디오 모니터링 장치"
142
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="기본값"
143
+Basic.Settings.Advanced.Audio.DisableAudioDucking="윈도우 오디오 더킹 비활성화"
144
 Basic.Settings.Advanced.StreamDelay="방송 지연"
145
 Basic.Settings.Advanced.StreamDelay.Duration="기간 (초)"
146
 Basic.Settings.Advanced.StreamDelay.Preserve="재접속 시 잘려나간 지점 보관 (지연시간 증가)"
147
@@ -617,3 +708,6 @@
148
 OutputWarnings.MultiTrackRecording="경고: 일부 형식(예를 들어 FLV)은 녹화 하나에 여러 개의 트랙을 지원하지 않습니다"
149
 OutputWarnings.MP4Recording="경고: MP4로 녹화를 하면 파일이 마무리가 되지 않았을 때 (예를 들어 컴퓨터가 급작스럽게 꺼지거나 블루 스크린 오류가 일어나는 경우) 복구할 수 없습니다. 여러 개의 오디오 트랙을 녹음하고 싶다면 MKV 확장자로 녹화 한 뒤 재다중화 작업을 통해 mp4로 전환하십시오. (파일->재다중화 녹화)"
150
 
151
+FinalScene.Title="장면 삭제"
152
+FinalScene.Text="적어도 하나의 장면은 존재해야 합니다."
153
+
154
obs-studio-18.0.2.tar.xz/UI/data/locale/lt-LT.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/lt-LT.ini Changed
19
 
1
@@ -50,6 +50,12 @@
2
 Bottom="Iš apačios"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Sukeisti Peržiūros/Išvesties scenas po Perėjimo"
12
 QuickTransitions.SwapScenesTT="Sukeičia peržiūros ir išvesties scenas po perėjimo įvykdymo (jei originali išvesties scena vis dar egzistuoja).\nTai neatšauks jokių pakeitimų kurie galima buvo atlikti originalioje išvesties scenoje."
13
 QuickTransitions.DuplicateScene="Dubliuoti Sceną"
14
@@ -281,3 +287,4 @@
15
 
16
 
17
 
18
+
19
obs-studio-18.0.2.tar.xz/UI/data/locale/ms-MY.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ms-MY.ini Changed
19
 
1
@@ -54,6 +54,12 @@
2
 Seconds="Saat"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Tukar Pratonton/Pengeluaran Adegan Selepas Peralihan"
12
 QuickTransitions.SwapScenesTT="Menukarkan pratonton dan pengeluaran adegan-adegan selepas peralihan(jika pengeluaran adegan mash wujud).\nIni tidak akan mengundurkan sebarang perubahan yang mungkin telah dilakukan pada pengeluaran adegan yang asal."
13
 QuickTransitions.DuplicateScene="Klonkan Adegan"
14
@@ -419,3 +425,4 @@
15
 
16
 
17
 
18
+
19
obs-studio-18.0.2.tar.xz/UI/data/locale/nb-NO.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/nb-NO.ini Changed
153
 
1
@@ -56,6 +56,20 @@
2
 ReplayBuffer="Omspill Buffer"
3
 Import="Importer"
4
 Export="Eksporter"
5
+Copy="Kopier"
6
+Paste="Lim inn"
7
+PasteReference="Lim inn (Referanse)"
8
+PasteDuplicate="Lim inn (Duplikat)"
9
+RemuxRecordings="Remux Opptak"
10
+Next="Neste"
11
+Back="Tilbake"
12
+
13
+AlreadyRunning.Title="OBS kjører allerede"
14
+
15
+
16
+
17
+
18
+
19
 
20
 Updater.Title="Ny oppdatering tilgjengelig"
21
 Updater.Text="Det finnes en ny oppdatering:"
22
@@ -63,8 +77,11 @@
23
 Updater.RemindMeLater="Påminn meg senere"
24
 Updater.Skip="Hopp over versjon"
25
 Updater.Running.Title="Programmet er aktiv"
26
+Updater.Running.Text="Utganger er aktive, deaktiver alle aktive utganger før du forsøker å oppdatere"
27
 Updater.NoUpdatesAvailable.Title="Ingen oppdateringer er tilgjengelig"
28
 Updater.NoUpdatesAvailable.Text="Ingen oppdateringer er tilgjengelig"
29
+Updater.FailedToLaunch="Kunne ikke starte oppdaterer"
30
+Updater.GameCaptureActive.Title="Spillopptak aktivt"
31
 
32
 QuickTransitions.SwapScenes="Bytt forhåndsvisnings-/utgangsscener etter overgang"
33
 QuickTransitions.SwapScenesTT="Bytter forhåndsvisnings- og utgangsscenen etter overgang, hvis den originale utgangsscenen fortsatt eksisterer.\nDette vil ikke tilbakestille endringer på den originale utgangsscenen."
34
@@ -108,6 +125,7 @@
35
 
36
 Output.StartStreamFailed="Kan ikke starte streaming"
37
 Output.StartRecordingFailed="Kan ikke starte innspillingen"
38
+Output.StartReplayFailed="Kunne ikke starte replay bufferen"
39
 
40
 Output.ConnectFail.Title="Tilkobling misklytes"
41
 Output.ConnectFail.BadPath="Ugyldig filbane eller tilkoblings-URL. Vennligst bekreft at instillingene dine er riktige."
42
@@ -185,6 +203,10 @@
43
 Deinterlacing.TopFieldFirst="Øverste felt først"
44
 Deinterlacing.BottomFieldFirst="Nederste felt først"
45
 
46
+VolControl.SliderUnmuted="Volumskyveknappen for '%1': %2"
47
+VolControl.SliderMuted="Volumskyveknappen for '%1': %2 (dempet)"
48
+VolControl.Mute="Demp '%1'"
49
+VolControl.Properties="Egenskaper for '%1'"
50
 
51
 Basic.Main.AddSceneDlg.Title="Ny Scene"
52
 Basic.Main.AddSceneDlg.Text="Vennligst gi et navn til scenen."
53
@@ -309,9 +331,12 @@
54
 Basic.MainMenu.Edit.LockPreview="Lås Forhåndsvisning"
55
 Basic.MainMenu.Edit.Scale="Forhåndsvisning & Skalering"
56
 Basic.MainMenu.Edit.Scale.Window="Tilpass til vindu"
57
+Basic.MainMenu.Edit.Scale.Canvas="Lerret (%1x%2)"
58
+Basic.MainMenu.Edit.Scale.Output="Utgang (%1x%2)"
59
 Basic.MainMenu.Edit.Transform="&Transformer"
60
 Basic.MainMenu.Edit.Transform.EditTransform="&Redigér transformering..."
61
 Basic.MainMenu.Edit.Transform.CopyTransform="Kopiere transformering"
62
+Basic.MainMenu.Edit.Transform.PasteTransform="Lim inn transformering"
63
 Basic.MainMenu.Edit.Transform.ResetTransform="&Angre transformering"
64
 Basic.MainMenu.Edit.Transform.Rotate90CW="Rotér 90 grader med klokka"
65
 Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotér 90 grader mot klokka"
66
@@ -330,6 +355,7 @@
67
 
68
 Basic.MainMenu.View="&Vis"
69
 Basic.MainMenu.View.Toolbars="%Verktøylinje"
70
+Basic.MainMenu.View.Toolbars.Listboxes="&Listebokser"
71
 Basic.MainMenu.View.SceneTransitions="Sceneoverganger"
72
 Basic.MainMenu.View.StatusBar="Statuslinje"
73
 
74
@@ -360,10 +386,12 @@
75
 Basic.Settings.General="Generelt"
76
 Basic.Settings.General.Theme="Tema"
77
 Basic.Settings.General.Language="Språk"
78
+Basic.Settings.General.EnableAutoUpdates="Automatisk se etter oppdateringer ved oppstart"
79
 Basic.Settings.General.WarnBeforeStartingStream="Vis bekreftelsesdialogboks når du starter strømming"
80
 Basic.Settings.General.WarnBeforeStoppingStream="Vis bekreftelsesdialogboks når stanser strømming"
81
 Basic.Settings.General.Projectors="Projektorer"
82
 Basic.Settings.General.HideProjectorCursor="Skjul musepekeren over projektorer"
83
+Basic.Settings.General.ProjectorAlwaysOnTop="Alltid vis projektorer øverst"
84
 Basic.Settings.General.Snapping="Festing ved kildejustering"
85
 Basic.Settings.General.ScreenSnapping="Fest kilder til kanten av skjermen"
86
 Basic.Settings.General.CenterSnapping="Fest kilder til vannrett og loddrett midtpunkt"
87
@@ -371,6 +399,8 @@
88
 Basic.Settings.General.SnapDistance="Festingfølsomhet"
89
 Basic.Settings.General.RecordWhenStreaming="Spill inn automatisk ved strømming"
90
 Basic.Settings.General.KeepRecordingWhenStreamStops="Fortsett innspilling etter strømming"
91
+Basic.Settings.General.ReplayBufferWhileStreaming="Automatisk start replay bufferen når du strømmer"
92
+Basic.Settings.General.KeepReplayBufferStreamStops="Hold replay bufferen når du stopper strømmen"
93
 Basic.Settings.General.SysTrayWhenStarted="Minimer til systemstatusfelt ved oppstart"
94
 
95
 Basic.Settings.Stream="Strøm"
96
@@ -459,6 +489,7 @@
97
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Lydkoder"
98
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Lydkoderinstillinger (om noen)"
99
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Mukserinstillinger (om noen)"
100
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Vis alle kodeker (selv om potensielt ikke-kompatibel)"
101
 
102
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
103
 
104
@@ -470,13 +501,13 @@
105
 Basic.Settings.Video.ScaledResolution="Utgangsoppløsning (skalert):"
106
 Basic.Settings.Video.DownscaleFilter="Nedskaleringsfilter:"
107
 Basic.Settings.Video.DisableAeroWindows="Deaktiver Aero (kun Windows)"
108
-Basic.Settings.Video.FPS="FPS:"
109
+Basic.Settings.Video.FPS="FPS"
110
 Basic.Settings.Video.FPSCommon="FPS samleverdi"
111
 Basic.Settings.Video.FPSInteger="FPS heltallverdi"
112
 Basic.Settings.Video.FPSFraction="FPS brøkverdi"
113
-Basic.Settings.Video.Numerator="Teller:"
114
-Basic.Settings.Video.Denominator="Nevner:"
115
-Basic.Settings.Video.Renderer="Renderer:"
116
+Basic.Settings.Video.Numerator="Teller"
117
+Basic.Settings.Video.Denominator="Nevner"
118
+Basic.Settings.Video.Renderer="Renderer"
119
 Basic.Settings.Video.InvalidResolution="Ugyldig oppløsningsverdi. Må være [bredde]x[høyde] (f.eks. 1920x1080)"
120
 Basic.Settings.Video.CurrentlyActive="Bildeutgang er aktiv. Vennligst stans alle utganger for å endre bildeinstillingene."
121
 Basic.Settings.Video.DisableAero="Skru av Aero"
122
@@ -512,12 +543,14 @@
123
 Basic.Settings.Advanced.Video.ColorRange="YUV fargespekter"
124
 Basic.Settings.Advanced.Video.ColorRange.Partial="Delvis"
125
 Basic.Settings.Advanced.Video.ColorRange.Full="Full"
126
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
127
 Basic.Settings.Advanced.StreamDelay="Strømforsinkelse"
128
 Basic.Settings.Advanced.StreamDelay.Duration="Varighet (sekunder)"
129
 Basic.Settings.Advanced.StreamDelay.Preserve="Bevar avkuttingspunktet (øk forsinkelse) ved tilbakekobling"
130
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Anslått minnebruk: %1 MB"
131
 Basic.Settings.Advanced.Network="Nettverk"
132
 Basic.Settings.Advanced.Network.BindToIP="Bind til IP"
133
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Aktiver ny nettverk kode"
134
 
135
 Basic.AdvAudio="Avanserte lydinstillinger"
136
 Basic.AdvAudio.Name="Navn"
137
@@ -525,6 +558,10 @@
138
 Basic.AdvAudio.Mono="Nedmiks til mono"
139
 Basic.AdvAudio.Panning="Panorering"
140
 Basic.AdvAudio.SyncOffset="Synkronerings forskyvning (ms)"
141
+Basic.AdvAudio.Monitoring="Hør på kilde"
142
+Basic.AdvAudio.Monitoring.None="Ikke hør kilde"
143
+Basic.AdvAudio.Monitoring.MonitorOnly="Kun hør kilde (Ikke output kilde)"
144
+Basic.AdvAudio.Monitoring.Both="Hør og output kilde"
145
 Basic.AdvAudio.AudioTracks="Spor"
146
 
147
 Basic.Settings.Hotkeys="Hurtigtaster"
148
@@ -584,3 +621,4 @@
149
 OutputWarnings.NoTracksSelected="Du må velge minst ett spor"
150
 OutputWarnings.MultiTrackRecording="Advarsel: enkelte formater (som FLV) støtter ikke flere spor per opptak"
151
 
152
+
153
obs-studio-18.0.2.tar.xz/UI/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/nl-NL.ini Changed
190
 
1
@@ -5,7 +5,7 @@
2
 OK="OK"
3
 Apply="Toepassen"
4
 Cancel="Annuleren"
5
-Close="Afsluiten"
6
+Close="Sluiten"
7
 Save="Opslaan"
8
 Discard="Verwerpen"
9
 Disable="Uitschakelen"
10
@@ -20,7 +20,7 @@
11
 MoveUp="Omhoog Schuiven"
12
 MoveDown="Omlaag Schuiven"
13
 Settings="Instellingen"
14
-Display="Monitor"
15
+Display="Beeldscherm"
16
 Name="Naam"
17
 Exit="Afsluiten"
18
 Mixer="Mixer"
19
@@ -31,6 +31,9 @@
20
 PreviewProjector="Full-screen Projector (Preview)"
21
 SceneProjector="Full-screen Projector (Scène)"
22
 SourceProjector="Full-screen Projector (Bron)"
23
+PreviewWindow="Projectorvenster (Preview)"
24
+SceneWindow="Projectorvenster (Scène)"
25
+SourceWindow="Projectorvenster (Bron)"
26
 Clear="Wissen"
27
 Revert="Herstellen"
28
 Show="Weergeven"
29
@@ -56,6 +59,92 @@
30
 ReplayBuffer="Replay Buffer"
31
 Import="Importeer"
32
 Export="Exporteer"
33
+Copy="Kopiëren"
34
+Paste="plakken"
35
+PasteReference="Plakken (referentie)"
36
+PasteDuplicate="Plakken (dupliceren)"
37
+RemuxRecordings="Remux opnames"
38
+Next="Volgende"
39
+Back="Vorige"
40
+
41
+AlreadyRunning.Title="OBS is al actief"
42
+AlreadyRunning.Text="OBS is al actief! Tenzij je dit wilde doen, sluit a.u.b. alle reeds draaiende instanties van OBS voor je een nieuwe instantie opstart. Als je OBS hebt ingesteld om naar het systeemvak te minimaliseren, controleer dan of hij daar nog staat."
43
+AlreadyRunning.LaunchAnyway="Toch Starten"
44
+
45
+Copy.Filters="Kopieer Filters"
46
+Paste.Filters="Plak filters"
47
+
48
+BandwidthTest.Region="Regio"
49
+BandwidthTest.Region.US="Verenigde Staten"
50
+BandwidthTest.Region.EU="Europa"
51
+BandwidthTest.Region.Asia="Azië"
52
+BandwidthTest.Region.Other="Overig"
53
+
54
+Basic.FirstStartup.RunWizard="Wil je de automatische configuratieassistent gebruiken? Je kan ook de instellingen handmatig aanpassen door op Instellingen te klikken in het hoofdscherm."
55
+Basic.FirstStartup.RunWizard.BetaWarning="(Let op: de automatische configuratieassistent is momenteel in een beta-fase)"
56
+Basic.FirstStartup.RunWizard.NoClicked="Mocht je van gedachten veranderen, dan kun je de automatische configuratieassistent opnieuw starten vanuit het Help menu."
57
+
58
+Basic.AutoConfig="Automatische configuratieassistent"
59
+Basic.AutoConfig.Beta="Automatische configuratieassistent (Beta)"
60
+Basic.AutoConfig.ApplySettings="Instellingen toepassen"
61
+Basic.AutoConfig.StartPage="Gebruiksinformatie"
62
+Basic.AutoConfig.StartPage.SubTitle="Waar wil je het programma voor gebruiken?"
63
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimaliseren voor streamen, lokaal opnemen is minder belangrijk"
64
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimaliseren voor lokaal opnemen, ik ga niet streamen"
65
+Basic.AutoConfig.VideoPage="Video-instellingen"
66
+Basic.AutoConfig.VideoPage.SubTitle="Geef aan welke gewenste video-instellingen je wil gebruiken"
67
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Gebruik huidige (%1x%2)"
68
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Beeldscherm %1 (%2x%3)"
69
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Gebruik huidige (%1)"
70
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 of 30, maar geef de voorkeur aan 60 wanneer mogelijk"
71
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 of 30, maar geef de voorkeur aan een hoge resolutie"
72
+Basic.AutoConfig.VideoPage.CanvasExplanation="Let op: de basisresolutie (canvas) hoeft niet gelijk te zijn als de resolutie waarmee je streamt of opneemt. Je stream/opnameresolutie kan omlaag bijgeschaald worden vanaf de basisresolutie om de belasting op de computer of de benodigde bitrate te verlagen."
73
+Basic.AutoConfig.StreamPage="Stream-informatie"
74
+Basic.AutoConfig.StreamPage.SubTitle="Voer alstublieft uw stream-informatie in"
75
+Basic.AutoConfig.StreamPage.Service="Dienst"
76
+Basic.AutoConfig.StreamPage.Service.ShowAll="Toon alles..."
77
+Basic.AutoConfig.StreamPage.Server="Server"
78
+Basic.AutoConfig.StreamPage.StreamKey="Stream key"
79
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
80
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Schat bitrate met bandbreedte test (kan een paar minuten duren)"
81
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Geef de voorkeur aan hardware-encoding"
82
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hardware-encoding elimineert het meeste CPU-gebruik, maar heeft wellicht een hogere bitrate nodig om hetzelfde kwaliteitsniveau te bereiken."
83
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Streamwaarschuwing"
84
+Basic.AutoConfig.StreamPage.StreamWarning.Text="De bandbreedte-test is bezig met het streamen van willekeurige videogegevens zonder audio naar uw kanaal.  Indien mogelijk is het aanbevolen om tijdelijk het opslaan van video's van streams uit te schakelen en de stream privé  te maken tot de test is voltooid. Doorgaan?"
85
+Basic.AutoConfig.TestPage="Eindresultaat"
86
+Basic.AutoConfig.TestPage.SubTitle.Testing="Het programma voert nu een reeks testen uit om de meest ideale instellingen in te schatten"
87
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testen is afgerond"
88
+Basic.AutoConfig.TestPage.TestingBandwidth="Bandbreedte-test aan het uitvoeren, dit kan enkele minuten duren..."
89
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Verbinden met: %1..."
90
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Kon met geen enkele server verbinden, controleer je internetverbinding en probeer het opnieuw."
91
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Bandbreedte testen voor: %1"
92
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Stream encoder testen, dit kan even duren..."
93
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Opname encoder testen, dit kan even duren..."
94
+Basic.AutoConfig.TestPage.TestingRes="Beeldschermresoluties testen, dit kan enkele minuten duren..."
95
+Basic.AutoConfig.TestPage.TestingRes.Fail="Kon de encoder niet starten"
96
+Basic.AutoConfig.TestPage.TestingRes.Resolution="%1x%2 %3 FPS testen..."
97
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streamingencoder"
98
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Opname-encoder"
99
+Basic.AutoConfig.TestPage.Result.Header="Het programma heeft vastgesteld dat deze geschatte instellingen het meest ideaal zijn voor jou:"
100
+Basic.AutoConfig.TestPage.Result.Footer="Om deze instellingen te gebruiken, klik op Instellingen Toepassen. Om de configuratieassistent aan te passen, klik op Terug. Om de instellingen handmatig te bepalen, klik op Annuleren en open de instellingen."
101
+
102
+Basic.Stats="Statistieken"
103
+Basic.Stats.CPUUsage="Processorgebruik"
104
+Basic.Stats.HDDSpaceAvailable="Harde-schijfruimte beschikbaar"
105
+Basic.Stats.MemoryUsage="Geheugengebruik"
106
+Basic.Stats.AverageTimeToRender="Gemiddelde tijd om een frame te genereren"
107
+Basic.Stats.SkippedFrames="Overgeslagen frames als gevolg van encodervertraging"
108
+Basic.Stats.MissedFrames="Frames gemist als gevolg van rendervertraging"
109
+Basic.Stats.Output.Stream="Stream"
110
+Basic.Stats.Output.Recording="Lokale opname"
111
+Basic.Stats.Status="Status"
112
+Basic.Stats.Status.Recording="Opname bezig"
113
+Basic.Stats.Status.Live="LIVE"
114
+Basic.Stats.Status.Reconnecting="Opnieuw verbinden"
115
+Basic.Stats.Status.Inactive="Niet actief"
116
+Basic.Stats.DroppedFrames="Gedropte Frames (Netwerk)"
117
+Basic.Stats.MegabytesSent="Totale Gegevensuitvoer"
118
+Basic.Stats.Bitrate="Bitrate"
119
 
120
 Updater.Title="Update beschikbaar"
121
 Updater.Text="Er is een update beschikbaar:"
122
@@ -375,6 +464,7 @@
123
 Basic.Settings.General.Theme="Thema"
124
 Basic.Settings.General.Language="Taal"
125
 Basic.Settings.General.EnableAutoUpdates="Automatisch controleren op updates tijdens het opstarten"
126
+Basic.Settings.General.OpenStatsOnStartup="Open statistieken bij het opstarten"
127
 Basic.Settings.General.WarnBeforeStartingStream="Laat bevestigingsvenster zien bij het starten van streams"
128
 Basic.Settings.General.WarnBeforeStoppingStream="Laat bevestiginsvenster zien bij het stoppen van streams"
129
 Basic.Settings.General.Projectors="Projectoren"
130
@@ -481,24 +571,26 @@
131
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder"
132
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Audio Encoderinstellingen (indien gewenst)"
133
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxerinstellingen (indien aanwezig)"
134
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Tijd tussen keyframes (frames)"
135
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Toon alle codecs (ongeacht compatibiliteit)"
136
 
137
 FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z"
138
 
139
 FilenameFormatting.TT="%CCYY       Jaar, vier cijfers\n%YY     Jaar, laatste twee cijfers (00-99)\n%MM     Maand, cijfer (0-12)\n%DD       Dag van de maand, nul aangevuld (01-31)\n%hh        Uur in 24h formaat (00-23)\n%mm     Minuut (00-59)\n%ss     Seconde (00-61)\n%%     Een % teken\n%a     Dag van de week afgekort\n%A        Dag van de week volledig\n%b        Maand, afgekorte naam\n%B       Maand, volledige naam\n%d       Dag van de maand, nul aangevuld (01-31)\n%H     Uur in 24h formaat (00-23)\n%I      Uur in 12h formaat (01-12)\n%m      Maand, cijfer (01-12)\n%M       Minuut (00-59)\n%p      AM of PM\n%S        Second e(00-61)\n%y     Jaar, laatste twee cijfers (00-99)\n%Y      Jaar\n%z        ISO 8601 afstand van UTC of tijdzone\n      naam of afkorting\n%Z       naam of afkorting van tijdzone\n"
140
 
141
 Basic.Settings.Video="Video"
142
-Basic.Settings.Video.Adapter="Videoadapter:"
143
-Basic.Settings.Video.BaseResolution="Basisresolutie (Canvas):"
144
-Basic.Settings.Video.ScaledResolution="Uitvoerresolutie (Geschaald):"
145
-Basic.Settings.Video.DownscaleFilter="Resolutieverlagingsfilter:"
146
+Basic.Settings.Video.Adapter="Videoadapter"
147
+Basic.Settings.Video.BaseResolution="Basisresolutie (Canvas)"
148
+Basic.Settings.Video.ScaledResolution="Uitvoerresolutie (Geschaald)"
149
+Basic.Settings.Video.DownscaleFilter="Resolutieverlagingsfilter"
150
 Basic.Settings.Video.DisableAeroWindows="Aero Uitschakelen (alleen Windows)"
151
-Basic.Settings.Video.FPS="FPS:"
152
+Basic.Settings.Video.FPS="FPS"
153
 Basic.Settings.Video.FPSCommon="Gebruikelijke FPS-waardes"
154
 Basic.Settings.Video.FPSInteger="Geheel-getal FPS-waarde"
155
 Basic.Settings.Video.FPSFraction="Breuk FPS-waarde"
156
-Basic.Settings.Video.Numerator="Teller:"
157
-Basic.Settings.Video.Denominator="Noemer:"
158
-Basic.Settings.Video.Renderer="Renderer:"
159
+Basic.Settings.Video.Numerator="Teller"
160
+Basic.Settings.Video.Denominator="Noemer"
161
+Basic.Settings.Video.Renderer="Renderer"
162
 Basic.Settings.Video.InvalidResolution="Ongeldige resolutiewaarde.  Moet [breedte] x [hoogte] zijn (bijv. 1920 x 1080)"
163
 Basic.Settings.Video.CurrentlyActive="Video-uitvoer is momenteel actief. Schakel a.u.b. alle uitvoeren uit om video-instellingen aan te passen."
164
 Basic.Settings.Video.DisableAero="Aero uitschakelen"
165
@@ -536,12 +628,15 @@
166
 Basic.Settings.Advanced.Video.ColorRange.Full="Full"
167
 Basic.Settings.Advanced.Audio.MonitoringDevice="Audio monitoring apparaat"
168
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standaard"
169
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Schakel Windows audio ducking uit"
170
 Basic.Settings.Advanced.StreamDelay="Streamvertraging"
171
 Basic.Settings.Advanced.StreamDelay.Duration="Duur (seconden)"
172
 Basic.Settings.Advanced.StreamDelay.Preserve="Hervat op het eindpunt (verhoog vertraging) bij opnieuw verbinden"
173
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Geschat Geheugengebruik: %1 MB"
174
 Basic.Settings.Advanced.Network="Netwerk"
175
 Basic.Settings.Advanced.Network.BindToIP="Bind aan IP"
176
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Schakel nieuwe netwerkcode in"
177
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Lage latency modus"
178
 
179
 Basic.AdvAudio="Geavanceerde Audioinstellingen"
180
 Basic.AdvAudio.Name="Naam"
181
@@ -611,4 +706,8 @@
182
 
183
 OutputWarnings.NoTracksSelected="Selecteer a.u.b. ten minste een track"
184
 OutputWarnings.MultiTrackRecording="Waarschuwing: Sommige formaten (zoals FLV) bieden geen ondersteuning voor meerdere tracks per opname"
185
+OutputWarnings.MP4Recording="Waarschuwing: Opnames opgeslagen als MP4 zijn niet te herstellen als de opame niet correct afgerond kan worden (bijvoorbeeld door BSOD's, stroomuitval). Als je wil opnemen met meerdere audiotracks gebruik dan bij voorkeur MKV en remux de opname naar mp4 (Bestand -> Remux opnames)"
186
+
187
+FinalScene.Title="Verwijder scène"
188
+FinalScene.Text="Er moet tenminste één scène zijn."
189
 
190
obs-studio-18.0.2.tar.xz/UI/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/pl-PL.ini Changed
154
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Wyświetlanie na pełnym ekranie (podgląd)"
3
 SceneProjector="Wyświetlanie na pełnym ekranie (scena)"
4
 SourceProjector="Wyświetlanie na pełnym ekranie (źródło)"
5
+PreviewWindow="Podgląd w oknie (podgląd)"
6
+SceneWindow="Podgląd w oknie (scena)"
7
+SourceWindow="Podgląd w oknie (źródło)"
8
 Clear="Wyczyść"
9
 Revert="Przywróć"
10
 Show="Pokaż"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Buffer replayu"
13
 Import="Importuj"
14
 Export="Eksportuj"
15
+Copy="Kopiuj"
16
+Paste="Wklej"
17
+PasteReference="Wklej (odniesienie)"
18
+PasteDuplicate="Wklej (duplikat)"
19
+RemuxRecordings="Przepakuj nagrania"
20
+Next="Dalej"
21
+Back="Wstecz"
22
+
23
+AlreadyRunning.Title="OBS jest już uruchomiony"
24
+AlreadyRunning.Text="OBS jest już uruchomiony! Sprawdź wszystkie uruchomione wystąpienia OBS zanim uruchomisz go jeszcze raz. Jeżeli OBS jest zminimalizowany do zasobnika systemowego, sprawdź czy nie jest uruchomiony także w tym miejscu."
25
+AlreadyRunning.LaunchAnyway="Uruchom mimo to"
26
+
27
+Copy.Filters="Kopiuj filtry"
28
+Paste.Filters="Wklej filtry"
29
+
30
+BandwidthTest.Region="Region"
31
+BandwidthTest.Region.US="Stany Zjednoczone"
32
+BandwidthTest.Region.EU="Europa"
33
+BandwidthTest.Region.Asia="Azja"
34
+BandwidthTest.Region.Other="Inny"
35
+
36
+Basic.FirstStartup.RunWizard="Czy chcesz uruchomić kreatora konfiguracji automatycznej? Można również ręcznie skonfigurować ustawienia, klikając przycisk Ustawienia w oknie głównym."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Uwaga: Kreator konfiguracji automatycznej jest obecnie w wersji beta)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Jeżeli zmienisz zdanie, można uruchomić kreatora konfiguracji automatycznej każdej chwili ponownie z menu Narzędzia."
39
+
40
+Basic.AutoConfig="Kreator konfiguracji automatycznej"
41
+Basic.AutoConfig.Beta="Kreator konfiguracji automatycznej (Beta)"
42
+Basic.AutoConfig.ApplySettings="Zastosuj ustawienia"
43
+Basic.AutoConfig.StartPage="Sposób użytkowania"
44
+Basic.AutoConfig.StartPage.SubTitle="Określ w jaki sposób chcesz używać aplikacji"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optymalizuj pod kątem przesyłania strumieniowego, nagrywanie lokalne jest mniej istotne"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optymalizuj pod nagrywanie lokalne, nie będę strumieniować"
47
+Basic.AutoConfig.VideoPage="Ustawienia wideo"
48
+Basic.AutoConfig.VideoPage.SubTitle="Określ wybrane ustawienia wideo, których chcesz użyć"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Użyj bieżącej (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Monitor %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Użyj bieżącego (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 lub 30 ale preferuj 60"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 lub 30 ale preferuj większą rozdzielczość"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Rozdzielczość bazowa niekoniecznie musi być rozdzielczością wynikowego nagrania lub streamu. Ta druga może być efektem skalowania w dół w celu zmniejszenia wymagań poziomu przepływności lub dostępności zasobów potrzebnych do kompresji."
55
+Basic.AutoConfig.StreamPage="Informacja o streamie"
56
+Basic.AutoConfig.StreamPage.SubTitle="Podaj informacje o streamie"
57
+Basic.AutoConfig.StreamPage.Service="Serwis"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Pokaż wszystkie..."
59
+Basic.AutoConfig.StreamPage.Server="Serwer"
60
+Basic.AutoConfig.StreamPage.StreamKey="Klucz strumienia"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Oszacuj bitrate przy pomocy testu prędkości łącza (może potrwać parę minut)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferuj enkodowanie sprzętowe"
64
+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."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="   Ostrzeżenie"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="W celu przetestowania streamu na Twój kanał zostaną wysyłane losowo generowane dane wideo bez dźwięku. Jeżeli to możliwe, zaleca się na czas testu tymczasowo wyłączyć zapisywanie streamu na serwerze i ustawienie streamu w tryb prywatny. Kontynuować?"
67
+Basic.AutoConfig.TestPage="Wyniki końcowe"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Aplikacja przeprowadza obecnie serię testów w celu ustalenia najlepszych ustawień"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testowanie zakończone"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Wykonywanie testu przepustowości, może to potrwać kilka minut..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Łączenie z: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Nie można połączyć z żadnym serwerem. Sprawdź połączenie internetowe i spróbuj ponownie."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testowanie przepustowości dla: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testowanie enkodera streamu, może to chwilę potrwać..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testowanie enkodera nagrywania, może to chwilę potrwać..."
76
+Basic.AutoConfig.TestPage.TestingRes="Testowanie rozdzielczości, może to chwilę potrwać..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Uruchomienie enkodera nie powiodło się"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testuję %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Enkoder streamu"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Enkoder nagrywania"
81
+Basic.AutoConfig.TestPage.Result.Header="Aplikacja ustaliła poniższe ustawienia jako najbardziej idealne dla Ciebie:"
82
+Basic.AutoConfig.TestPage.Result.Footer="Aby użyć tych ustawień, kliknij przycisk Zastosuj ustawienia.  Aby ponownie skonfigurować kreatora i spróbować ponownie, kliknij przycisk Wstecz. Aby ręcznie skonfigurować ustawienia, kliknij przycisk Anuluj i otwórz Ustawienia."
83
+
84
+Basic.Stats="Statystyki"
85
+Basic.Stats.CPUUsage="Użycie procesora"
86
+Basic.Stats.HDDSpaceAvailable="Wolne miejsce na dysku"
87
+Basic.Stats.MemoryUsage="Wykorzystanie pamięci"
88
+Basic.Stats.AverageTimeToRender="Średni czas renderowania klatki"
89
+Basic.Stats.SkippedFrames="Pominięte klatki z powodu opóźnień enkodera"
90
+Basic.Stats.MissedFrames="Pominięte klatki z powodu opóźnień renderowania"
91
+Basic.Stats.Output.Stream="Stream"
92
+Basic.Stats.Output.Recording="Nagrywanie"
93
+Basic.Stats.Status="Status"
94
+Basic.Stats.Status.Recording="Nagrywanie"
95
+Basic.Stats.Status.Live="NA ŻYWO"
96
+Basic.Stats.Status.Reconnecting="Wznawianie połączenia"
97
+Basic.Stats.Status.Inactive="Nieaktywne"
98
+Basic.Stats.DroppedFrames="Zgubione klatki (sieć)"
99
+Basic.Stats.MegabytesSent="Całkowite dane wyjściowe"
100
+Basic.Stats.Bitrate="Przepływność (bitrate)"
101
 
102
 Updater.Title="Dostępna jest nowa aktualizacja"
103
 Updater.Text="Dostępna jest nowa aktualizacja:"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="Motyw"
106
 Basic.Settings.General.Language="Język"
107
 Basic.Settings.General.EnableAutoUpdates="Automatycznie sprawdzaj dostępność aktualizacji"
108
+Basic.Settings.General.OpenStatsOnStartup="Otwórz statystyki przy starcie aplikacji"
109
 Basic.Settings.General.WarnBeforeStartingStream="Pokaż komunikat potwierdzenia uruchomienia streamowania"
110
 Basic.Settings.General.WarnBeforeStoppingStream="Pokaż komunikat potwierdzenia zatrzymania streamowania"
111
 Basic.Settings.General.Projectors="Projektory"
112
@@ -489,18 +579,18 @@
113
 FilenameFormatting.TT="%CCYY       Rok, cztery cyfry\n%YY      Rok, ostatnie dwie cyfry (00-99)\n%MM       Miesiąc, liczba dziesiętna, dwie cyfry (01-12)\n%DD     Dzień, liczba dziesiętna, dwie cyfry (01-31)\n%hh       Godzina, format 24-godzinny, dwie cyfry (00-23)\n%mm        Minuta (00-59)\n%ss     Sekunda (00-61)\n%%     Znak %\n%a      Dzień tygodnia, skrót\n%A       Dzień tygodnia, pełna nazwa\n%b     Nazwa miesiąca, skrót\n%B       Nazwa miesiąca, pełna nazwa\n%d     Dzień miesiąca, dwie cyfry (01-31)\n%H      Godzina, format 24-godzinny, dwie cyfry (00-23)\n%I     Godzina, format 12-godzinny, dwie cyfry (01-12)\n%m     Miesiąc, dwie cyfry (01-12)\n%M     Minuta (00-59)\n%p      oznaczenie przed lub po południu\n%S        Sekunda (00-61)\n%y     Rok, ostatnie dwie cyfry (00-99)\n%Y        Rok\n%z     ISO 8601, przesunięcie od czasu UTC\n       nazwa lub skrót\n%Z     Nazwa lub skrót strefy czasowej\n"
114
 
115
 Basic.Settings.Video="Obraz"
116
-Basic.Settings.Video.Adapter="Karta graficzna:"
117
-Basic.Settings.Video.BaseResolution="Rozdzielczość bazowa (obraz):"
118
-Basic.Settings.Video.ScaledResolution="Rozdzielczość wynikowa (skalowana):"
119
-Basic.Settings.Video.DownscaleFilter="Filtr skalujący:"
120
+Basic.Settings.Video.Adapter="Karta graficzna"
121
+Basic.Settings.Video.BaseResolution="Rozdzielczość bazowa (obraz)"
122
+Basic.Settings.Video.ScaledResolution="Rozdzielczość wynikowa (skalowana)"
123
+Basic.Settings.Video.DownscaleFilter="Filtr skalujący"
124
 Basic.Settings.Video.DisableAeroWindows="Wyłącz Aero (tylko Windows)"
125
-Basic.Settings.Video.FPS="FPS (klatki na sekundę):"
126
+Basic.Settings.Video.FPS="FPS (klatki na sekundę)"
127
 Basic.Settings.Video.FPSCommon="Typowe wartości FPS"
128
 Basic.Settings.Video.FPSInteger="Całkowite wartości FPS"
129
 Basic.Settings.Video.FPSFraction="Ułamkowe wartości FPS"
130
-Basic.Settings.Video.Numerator="Licznik:"
131
-Basic.Settings.Video.Denominator="Mianownik:"
132
-Basic.Settings.Video.Renderer="Renderowanie:"
133
+Basic.Settings.Video.Numerator="Licznik"
134
+Basic.Settings.Video.Denominator="Mianownik"
135
+Basic.Settings.Video.Renderer="Renderowanie"
136
 Basic.Settings.Video.InvalidResolution="Nieprawidłowa rozdzielczość.  Wartość powinna mieć format [szerokość]x[wysokość] (np. 1920x1080)"
137
 Basic.Settings.Video.CurrentlyActive="Wyjście wideo jest aktywne. Należy wyłączyć wszelkie wyjścia, aby zmienić ustawienia wideo."
138
 Basic.Settings.Video.DisableAero="Wyłącz Aero"
139
@@ -538,6 +628,7 @@
140
 Basic.Settings.Advanced.Video.ColorRange.Full="Pełny"
141
 Basic.Settings.Advanced.Audio.MonitoringDevice="Monitorowane urządzenie audio"
142
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Domyślne"
143
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Wyłącz systemowe obniżanie głośności innych źródeł dźwięków"
144
 Basic.Settings.Advanced.StreamDelay="Opóźnienie streamu"
145
 Basic.Settings.Advanced.StreamDelay.Duration="Czas trwania (s)"
146
 Basic.Settings.Advanced.StreamDelay.Preserve="Zachowuj punkt przerwania (zwiększ opóźnienie) podczas ponownego łączenia"
147
@@ -617,3 +708,6 @@
148
 OutputWarnings.MultiTrackRecording="Ostrzeżenie: Pewne formaty plików (np. FLV) nie obsługują wielu ścieżek dźwiękowych"
149
 OutputWarnings.MP4Recording="Ostrzeżenie: Nagrania zapisanego w formacie mp4 nie będzie można odzyskać, jeśli plik nie zostanie zakończony poprawnie (np. w wyniku BSOD, braku prądu, itp.). Jeśli chcesz nagrać wiele ścieżek audio należy rozważyć użycie formatu mkv i remux nagrania do mp4 po zakończeniu (Plik -> Przepakuj nagrania)."
150
 
151
+FinalScene.Title="Usuń scenę"
152
+FinalScene.Text="Musi być co najmniej jedna scena."
153
+
154
obs-studio-18.0.2.tar.xz/UI/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/pt-BR.ini Changed
222
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Projetor em tela cheia(pré-visualização)"
3
 SceneProjector="Projetor em tela cheia(cena)"
4
 SourceProjector="Projetor em tela cheia(fonte)"
5
+PreviewWindow="Projetor em janela (Pré-visualização)"
6
+SceneWindow="Projetor em janela (Cena)"
7
+SourceWindow="Projetor em janela (Fonte)"
8
 Clear="Limpar"
9
 Revert="Desfazer"
10
 Show="Exibir"
11
@@ -54,8 +57,107 @@
12
 Seconds="Segundos"
13
 Deprecated="Obsoleto"
14
 ReplayBuffer="Buffer do Replay"
15
+Import="Importar"
16
 Export="Exportar"
17
-
18
+Copy="Copiar"
19
+Paste="Colar"
20
+PasteReference="Colar (Referência)"
21
+PasteDuplicate="Colar (Duplicar)"
22
+RemuxRecordings="Remixar Gravações"
23
+Next="Avançar"
24
+Back="Voltar"
25
+
26
+AlreadyRunning.Title="OBS já está em execução"
27
+AlreadyRunning.Text="OBS já está em execução! A menos que você tenha a intenção de fazer isso, por favor, feche todas as instâncias existentes do OBS antes de tentar executar uma nova. Se você tiver definido para minimizar o OBS na bandeja do sistema, verifique se ainda está lá em execução."
28
+AlreadyRunning.LaunchAnyway="Executar mesmo assim"
29
+
30
+Copy.Filters="Copiar Filtros"
31
+Paste.Filters="Colar Filtros"
32
+
33
+BandwidthTest.Region="Região"
34
+BandwidthTest.Region.US="Estados Unidos"
35
+BandwidthTest.Region.EU="Europa"
36
+BandwidthTest.Region.Asia="Ásia"
37
+BandwidthTest.Region.Other="Outro"
38
+
39
+Basic.FirstStartup.RunWizard="Você gostaria de executar o assistente de configuração?  Você também pode definir manualmente suas configurações clicando no botão \"Configurações\" na janela principal."
40
+Basic.FirstStartup.RunWizard.BetaWarning="(Nota: O assistente de configuração está atualmente em beta)"
41
+Basic.FirstStartup.RunWizard.NoClicked="Se você mudar de ideia, você pode executar o assistente de configuração a qualquer momento no menu \"Ferramentas\"."
42
+
43
+Basic.AutoConfig="Assistente de Configuração"
44
+Basic.AutoConfig.Beta="Assistente de Configuração (Beta)"
45
+Basic.AutoConfig.ApplySettings="Aplicar Configurações"
46
+Basic.AutoConfig.StartPage="Informações de Uso"
47
+Basic.AutoConfig.StartPage.SubTitle="Marque para que você deseja usar o programa"
48
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Otimizar para transmissão, gravação é opcional"
49
+Basic.AutoConfig.StartPage.PrioritizeRecording="Otimizar somente para gravação, eu não farei transmissão"
50
+Basic.AutoConfig.VideoPage="Configurações de Vídeo"
51
+Basic.AutoConfig.VideoPage.SubTitle="Marque as configurações desejadas que você gostaria de usar"
52
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Usar Atual (%1x%2)"
53
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Monitor %1 (%2x%3)"
54
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Usar Atual (%1)"
55
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 ou 30, mas prefiro 60 quando possível"
56
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 ou 30, mas prefiro alta resolução"
57
+Basic.AutoConfig.VideoPage.CanvasExplanation="Nota: A resolução da tela (base) não é necessariamente a mesma resolução que você transmitirá ou gravará. Sua resolução final da transmissão/gravação pode ser redimencionada da resolução da tela para reduzir o uso de recursos ou bitrate necessário."
58
+Basic.AutoConfig.StreamPage="Informações da Transmissão"
59
+Basic.AutoConfig.StreamPage.SubTitle="Por favor, digite suas informações para a transmissão"
60
+Basic.AutoConfig.StreamPage.Service="Serviço"
61
+Basic.AutoConfig.StreamPage.Service.ShowAll="Mostrar todos..."
62
+Basic.AutoConfig.StreamPage.Server="Servidor"
63
+Basic.AutoConfig.StreamPage.StreamKey="Chave da Transmissão"
64
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
65
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimar taxa de bits com teste de largura de banda (pode levar uns minutos)"
66
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Preferir codificação por hardware"
67
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Codificação por Hardware elimina a maioria do uso de CPU, mas pode exigir uma taxa de bits maior para obter o mesmo nível de qualidade."
68
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Aviso de Transmissão"
69
+Basic.AutoConfig.StreamPage.StreamWarning.Text="O teste de largura de banda está prestes a transmitir imagens aleatórias e sem áudio para o seu canal. Se for possível, é recomendável desativar temporariamente a gravação da transmissão e definir a transmissão como privada até que o teste seja concluído. Continuar?"
70
+Basic.AutoConfig.TestPage="Resultados Finais"
71
+Basic.AutoConfig.TestPage.SubTitle.Testing="O programa está executando um conjunto de testes para estimar as configurações ideais"
72
+Basic.AutoConfig.TestPage.SubTitle.Complete="Teste completo"
73
+Basic.AutoConfig.TestPage.TestingBandwidth="Executando teste de largura de banda, isso pode levar alguns minutos..."
74
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Conectando a:  %1..."
75
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Falha ao se conectar a qualquer servidor, verifique sua conexão com a Internet e tente novamente."
76
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Teste de largura de banda para: %1"
77
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testando codificador de transmissão, isto pode demorar um minuto..."
78
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testando codificador de gravação, isto pode demorar um minuto..."
79
+Basic.AutoConfig.TestPage.TestingRes="Testando resoluções, isto pode levar alguns minutos..."
80
+Basic.AutoConfig.TestPage.TestingRes.Fail="Falha ao iniciar o codificador"
81
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testando %1x%2 %3 QPS..."
82
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Codificador da Transmissão"
83
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Codificador da Gravação"
84
+Basic.AutoConfig.TestPage.Result.Header="O programa determinou que estas configurações estimadas são as mais ideais para você:"
85
+Basic.AutoConfig.TestPage.Result.Footer="Para usar essas configurações, clique em \"Aplicar Configurações\".  Para reconfigurar o assistente e tentar novamente, clique em \"Voltar\".  Para definir manualmente, clique em \"Cancelar\" e abra as \"Configurações\"."
86
+
87
+Basic.Stats="Estatísticas"
88
+Basic.Stats.CPUUsage="Uso de CPU"
89
+Basic.Stats.HDDSpaceAvailable="Espaço em disco disponível"
90
+Basic.Stats.MemoryUsage="Uso de Memória"
91
+Basic.Stats.AverageTimeToRender="Tempo médio para renderizar quadro"
92
+Basic.Stats.SkippedFrames="Quadros ignorados devido a demora na codificação"
93
+Basic.Stats.MissedFrames="Quadros perdidos devido a demora na renderização"
94
+Basic.Stats.Output.Stream="Transmissão"
95
+Basic.Stats.Output.Recording="Gravação"
96
+Basic.Stats.Status="Status"
97
+Basic.Stats.Status.Recording="Gravando"
98
+Basic.Stats.Status.Live="AO VIVO"
99
+Basic.Stats.Status.Reconnecting="Reconectando"
100
+Basic.Stats.Status.Inactive="Inativa"
101
+Basic.Stats.DroppedFrames="Quadros Perdidos (Rede)"
102
+Basic.Stats.MegabytesSent="Saída Total de Dados"
103
+Basic.Stats.Bitrate="Taxa de bits"
104
+
105
+Updater.Title="Nova atualização disponível"
106
+Updater.Text="Há uma nova atualização disponível:"
107
+Updater.UpdateNow="Atualizar agora"
108
+Updater.RemindMeLater="Lembre-me depois"
109
+Updater.Skip="Pular Versão"
110
+Updater.Running.Title="Programa atualmente em execução"
111
+Updater.Running.Text="Saídas estão atualmente ativas, por favor desligue quaisquer saídas ativas antes de tentar atualizar"
112
+Updater.NoUpdatesAvailable.Title="Nenhuma atualização disponível"
113
+Updater.NoUpdatesAvailable.Text="Não há atualizações disponíveis"
114
+Updater.FailedToLaunch="Falha ao iniciar o atualizador"
115
+Updater.GameCaptureActive.Title="Captura de jogo ativa"
116
+Updater.GameCaptureActive.Text="A biblioteca de captura de jogos está em uso. Feche todos os jogos / programas que estão sendo capturados (ou reinicie o computador) e tente novamente."
117
 
118
 QuickTransitions.SwapScenes="Trocar Cenas de Prévia/Saída após a Transição"
119
 QuickTransitions.SwapScenesTT="Troca a preview e a saída após transicionar (se a a cena original de saída ainda exisitr).\nIsto não irá desfazer nenhuma mudança que foi feita na cena original da saída."
120
@@ -97,6 +199,10 @@
121
 ConfirmRemove.Text="Tem certeza que deseja remover '$1'?"
122
 ConfirmRemove.TextMultiple="Você tem certeza que quer remover esses %1 itens?"
123
 
124
+Output.StartStreamFailed="Falha ao iniciar a transmissão"
125
+Output.StartRecordingFailed="Falha ao iniciar a gravação"
126
+Output.StartReplayFailed="Falha ao iniciar o buffer de repetição"
127
+Output.StartFailedGeneric="Falha ao iniciar a saída. Favor verificar o log para informação detalhada do erro.\n\nAviso: Se estiver usando os codificadores NVENC ou AMD, tenha certeza de que seus drivers estão atualizados."
128
 
129
 Output.ConnectFail.Title="Falha ao conectar"
130
 Output.ConnectFail.BadPath="Caminho inválido ou URL inválida. Por favor verifique se as configurações estão válidas."
131
@@ -174,6 +280,10 @@
132
 Deinterlacing.TopFieldFirst="Campo Superior Primeiro"
133
 Deinterlacing.BottomFieldFirst="Campo Inferior Primeiro"
134
 
135
+VolControl.SliderUnmuted="Barra de volume para '%1': %2"
136
+VolControl.SliderMuted="Barra de volume para '%1': %2 (atualmente silenciado)"
137
+VolControl.Mute="Silenciar '%1'"
138
+VolControl.Properties="Propriedades de '%1'"
139
 
140
 Basic.Main.AddSceneDlg.Title="Adicionar Cena"
141
 Basic.Main.AddSceneDlg.Text="Por favor, digite o nome da cena"
142
@@ -283,7 +393,7 @@
143
 Basic.MainMenu.File.Export="&Exportar"
144
 Basic.MainMenu.File.Import="&Importar"
145
 Basic.MainMenu.File.ShowRecordings="Mostrar &Gravações"
146
-Basic.MainMenu.File.Remux="Re&mux gravações"
147
+Basic.MainMenu.File.Remux="Trocar Container (&M)"
148
 Basic.MainMenu.File.Settings="&Configurações"
149
 Basic.MainMenu.File.ShowSettingsFolder="Mostrar pasta de configurações"
150
 Basic.MainMenu.File.ShowProfileFolder="Mostrar pasta de perfil"
151
@@ -353,8 +463,11 @@
152
 Basic.Settings.General="Geral"
153
 Basic.Settings.General.Theme="Tema"
154
 Basic.Settings.General.Language="Idioma"
155
+Basic.Settings.General.EnableAutoUpdates="Buscar novas atualizações ao iniciar o programa"
156
+Basic.Settings.General.OpenStatsOnStartup="Abrir janela de estatísticas na inicialização"
157
 Basic.Settings.General.WarnBeforeStartingStream="Mostrar diálogo de confirmação quando iniciar transmissões"
158
 Basic.Settings.General.WarnBeforeStoppingStream="Mostrar diálogo de confirmação quando terminar transmissões"
159
+Basic.Settings.General.Projectors="Projetores"
160
 Basic.Settings.General.HideProjectorCursor="Ocultar o cursor sobre projetores"
161
 Basic.Settings.General.ProjectorAlwaysOnTop="Colocar projetores sempre no topo"
162
 Basic.Settings.General.Snapping="Alinhamentos com encaixe na Cena"
163
@@ -364,7 +477,11 @@
164
 Basic.Settings.General.SnapDistance="Sensibilidade de Encaixamento"
165
 Basic.Settings.General.RecordWhenStreaming="Gravar automaticamente quando estiver transmitindo"
166
 Basic.Settings.General.KeepRecordingWhenStreamStops="Continuar gravando quando a transmissão parar"
167
+Basic.Settings.General.ReplayBufferWhileStreaming="Iniciar automaticamente o buffer de repetição durante a transmissão"
168
+Basic.Settings.General.KeepReplayBufferStreamStops="Manter o buffer de repetição ativo quando a transmissão parar"
169
+Basic.Settings.General.SysTray="Bandeja do sistema"
170
 Basic.Settings.General.SysTrayWhenStarted="Minimizar para a bandeja do sistema quando iniciar"
171
+Basic.Settings.General.SystemTrayHideMinimize="Sempre minimizar para a bandeja (ignorar barra de tarefas)"
172
 Basic.Settings.General.SaveProjectors="Salvar projetores ao sair"
173
 
174
 Basic.Settings.Stream="Stream"
175
@@ -454,6 +571,8 @@
176
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Codificador de áudio"
177
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Configurações do codificador de áudio(se houver)"
178
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Configurações do Muxer (se houver)"
179
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Intervalo de Keyframes (frames)"
180
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Mostrar todos os codecs (incluir potencialmente incompatíveis)"
181
 
182
 FilenameFormatting.completer="%CCYY-% MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %H-%M-%S\n%A %d-%Y-%m %Y-%m-%d %H-%M-%S\n%Y-%b-123_2_ 16_321 %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"
183
 
184
@@ -507,13 +626,17 @@
185
 Basic.Settings.Advanced.Video.ColorRange="Gama de cores YUV"
186
 Basic.Settings.Advanced.Video.ColorRange.Partial="Limitado"
187
 Basic.Settings.Advanced.Video.ColorRange.Full="Completo"
188
+Basic.Settings.Advanced.Audio.MonitoringDevice="Dispositivo de Monitoramento de Áudio"
189
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Padrão"
190
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Desativar a Oscilação de Áudio do Windows"
191
 Basic.Settings.Advanced.StreamDelay="Atraso da transmissão"
192
 Basic.Settings.Advanced.StreamDelay.Duration="Duração (segundos)"
193
 Basic.Settings.Advanced.StreamDelay.Preserve="Preservar o ponto de corte (aumento de atraso) quando reconectar"
194
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Uso de memória estimado: %1 MB"
195
 Basic.Settings.Advanced.Network="Rede"
196
 Basic.Settings.Advanced.Network.BindToIP="Transmitir pelo IP"
197
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Habilitar o novo código de rede"
198
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Modo de baixa latência"
199
 
200
 Basic.AdvAudio="Propriedades de áudio avançadas"
201
 Basic.AdvAudio.Name="Nome"
202
@@ -521,6 +644,10 @@
203
 Basic.AdvAudio.Mono="Downmix para Mono"
204
 Basic.AdvAudio.Panning="Balanceamento"
205
 Basic.AdvAudio.SyncOffset="Atraso de sincronização (ms)"
206
+Basic.AdvAudio.Monitoring="Monitoramento de Áudio"
207
+Basic.AdvAudio.Monitoring.None="Não monitorar"
208
+Basic.AdvAudio.Monitoring.MonitorOnly="Apenas monitorar (saída muda)"
209
+Basic.AdvAudio.Monitoring.Both="Monitorar e enviar áudio"
210
 Basic.AdvAudio.AudioTracks="Faixas"
211
 
212
 Basic.Settings.Hotkeys="Teclas de atalho"
213
@@ -579,4 +706,8 @@
214
 
215
 OutputWarnings.NoTracksSelected="Você deve selecionar pelo menos uma faixa"
216
 OutputWarnings.MultiTrackRecording="Aviso: Alguns formatos (como FLV) não suportam várias faixas por gravação"
217
+OutputWarnings.MP4Recording="Atenção: Gravações salvas em arquivos MP4 se tornarão irrecuperáveis se o arquivo não puder ser finalizado (ex: tela azul, queda de energia, etc.). Caso queira gravar várias faixas de áudio, considere usar MKV e usar a ferramenta de remux no arquivo resultante da gravação (Arquivo->Remux gravações)"
218
+
219
+FinalScene.Title="Excluir cena"
220
+FinalScene.Text="É preciso haver pelo menos uma cena."
221
 
222
obs-studio-18.0.2.tar.xz/UI/data/locale/pt-PT.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/pt-PT.ini Changed
46
 
1
@@ -54,6 +54,12 @@
2
 Seconds="Segundos"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Trocar pré-visualização/saída de cenas Depois de uma Transição"
12
 QuickTransitions.DuplicateScene="Duplicar cena"
13
 QuickTransitions.EditProperties="Fontes duplicadas"
14
@@ -409,18 +415,18 @@
15
 
16
 
17
 Basic.Settings.Video="Vídeo"
18
-Basic.Settings.Video.Adapter="Adaptador de Vídeo:"
19
-Basic.Settings.Video.BaseResolution="Resolução de base (tela):"
20
-Basic.Settings.Video.ScaledResolution="Resolução de saída (escalado):"
21
-Basic.Settings.Video.DownscaleFilter="Filtro de Escalamento:"
22
+Basic.Settings.Video.Adapter="Adaptador de Vídeo"
23
+Basic.Settings.Video.BaseResolution="Resolução de base (tela)"
24
+Basic.Settings.Video.ScaledResolution="Resolução de saída (escalado)"
25
+Basic.Settings.Video.DownscaleFilter="Filtro de Escalamento"
26
 Basic.Settings.Video.DisableAeroWindows="Desactivar Aero (apenas no Windows)"
27
-Basic.Settings.Video.FPS="FPS:"
28
+Basic.Settings.Video.FPS="FPS"
29
 Basic.Settings.Video.FPSCommon="Valor de FPS Comum"
30
 Basic.Settings.Video.FPSInteger="Valor de FPS Íntegro"
31
 Basic.Settings.Video.FPSFraction="Valor de FPS Fracional"
32
-Basic.Settings.Video.Numerator="Numerador:"
33
-Basic.Settings.Video.Denominator="Demoninador:"
34
-Basic.Settings.Video.Renderer="Renderizador:"
35
+Basic.Settings.Video.Numerator="Numerador"
36
+Basic.Settings.Video.Denominator="Demoninador"
37
+Basic.Settings.Video.Renderer="Renderizador"
38
 Basic.Settings.Video.InvalidResolution="Resolução Inválida, Tem de ser [largura]x[altura] (ex. 1920x1080)"
39
 Basic.Settings.Video.CurrentlyActive="A Saída de Vídeo encontra-se activa. Por favor desligue a saída de vídeo para mudar as definições de vídeo."
40
 Basic.Settings.Video.DisableAero="Desativar Aero"
41
@@ -528,3 +534,4 @@
42
 OutputWarnings.NoTracksSelected="Tem de selecionar pelo menos uma faixa"
43
 OutputWarnings.MultiTrackRecording="Aviso: Alguns formatos (como FLV) não suportam várias faixas por gravação"
44
 
45
+
46
obs-studio-18.0.2.tar.xz/UI/data/locale/ro-RO.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ro-RO.ini Changed
46
 
1
@@ -56,6 +56,12 @@
2
 Export="Exportă"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Comută între previzualizare/scenele de ieșire după tranziționare"
12
 QuickTransitions.SwapScenesTT="Schimba previzualizarea si scenele de output dupa tranzitionare (în cazul în care încă există outputul scenei originale). \nAceasta nu va anula nicio modificăre care au fost făcute la outputul scenei originale."
13
 QuickTransitions.DuplicateScene="Duplică scena"
14
@@ -417,18 +423,18 @@
15
 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"
16
 
17
 Basic.Settings.Video="Video"
18
-Basic.Settings.Video.Adapter="Adaptor video:"
19
-Basic.Settings.Video.BaseResolution="Rezoluție (canvas) de bază:"
20
-Basic.Settings.Video.ScaledResolution="Rezoluție (scalată) la ieșire:"
21
-Basic.Settings.Video.DownscaleFilter="Filtru pentru descalare:"
22
+Basic.Settings.Video.Adapter="Adaptor video"
23
+Basic.Settings.Video.BaseResolution="Rezoluție (canvas) de bază"
24
+Basic.Settings.Video.ScaledResolution="Rezoluție (scalată) la ieșire"
25
+Basic.Settings.Video.DownscaleFilter="Filtru pentru descalare"
26
 Basic.Settings.Video.DisableAeroWindows="Dezactivează Aero (Numai Windows)"
27
-Basic.Settings.Video.FPS="FPS:"
28
+Basic.Settings.Video.FPS="FPS"
29
 Basic.Settings.Video.FPSCommon="Valori FPS comune"
30
 Basic.Settings.Video.FPSInteger="Valoare cu număr întreg pentru FPS"
31
 Basic.Settings.Video.FPSFraction="Valoare FPS fracționată"
32
-Basic.Settings.Video.Numerator="Numărător:"
33
-Basic.Settings.Video.Denominator="Numitor:"
34
-Basic.Settings.Video.Renderer="Renderer:"
35
+Basic.Settings.Video.Numerator="Numărător"
36
+Basic.Settings.Video.Denominator="Numitor"
37
+Basic.Settings.Video.Renderer="Renderer"
38
 Basic.Settings.Video.InvalidResolution="Valoare rezoluţie invalidă.  Trebuie să fie [latime]x[înălţime] (de exemplu, 1920x1080)"
39
 Basic.Settings.Video.CurrentlyActive="Ieşirea video este în prezent activă.  Vă rugăm să opriţi orice ieşiri pentru a schimba setările video."
40
 Basic.Settings.Video.DisableAero="Dezactivează Aero"
41
@@ -536,3 +542,4 @@
42
 OutputWarnings.NoTracksSelected="Trebuie să selectezi cel puțin o pistă"
43
 OutputWarnings.MultiTrackRecording="Atenție: Anumite formate (precum FLV) nu suportă multiple piste per înregistrare"
44
 
45
+
46
obs-studio-18.0.2.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ru-RU.ini Changed
163
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Полноэкранный проектор (предпросмотр)"
3
 SceneProjector="Полноэкранный проектор (сцена)"
4
 SourceProjector="Полноэкранный проектор (источник)"
5
+PreviewWindow="Оконный проектор (Предпросмотр)"
6
+SceneWindow="Оконный проектор (Сцена)"
7
+SourceWindow="Оконный проектор (Источник)"
8
 Clear="Очистить"
9
 Revert="Вернуть"
10
 Show="Показать"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="Буфер повтора"
13
 Import="Импорт"
14
 Export="Экспорт"
15
+Copy="Копировать"
16
+Paste="Вставить"
17
+PasteReference="Вставить (Ссылка)"
18
+PasteDuplicate="Вставить (Дубликат)"
19
+RemuxRecordings="Ремультиплексирование записей"
20
+Next="Далее"
21
+Back="Назад"
22
+
23
+AlreadyRunning.Title="OBS уже запущен"
24
+AlreadyRunning.Text="OBS уже запущен! Пожалуйста, закройте все запущенные экземпляры OBS перед попыткой запустить новые (только если вы не хотели именно этого). Если вы настроили OBS на сворачивание в системный трей, пожалуйста, проверьте, возможно он до сих пор запущен."
25
+AlreadyRunning.LaunchAnyway="Запустить в любом случае"
26
+
27
+Copy.Filters="Копировать фильтры"
28
+Paste.Filters="Вставить фильтры"
29
+
30
+BandwidthTest.Region="Регион"
31
+BandwidthTest.Region.US="США"
32
+BandwidthTest.Region.EU="Европа"
33
+BandwidthTest.Region.Asia="Азия"
34
+BandwidthTest.Region.Other="Другой"
35
+
36
+Basic.FirstStartup.RunWizard="Хотите ли вы запустить Мастер автоматической настройки? Вы также можете настроить параметры вручную, нажав кнопку Настройки в главном окне."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(Примечание: Мастер автоматической настройки в настоящее время в бета-версии)"
38
+Basic.FirstStartup.RunWizard.NoClicked="Если вы передумаете, то в любой момент сможете запустить Мастер автоматической настройки из пункта меню Инструменты."
39
+
40
+Basic.AutoConfig="Мастер автоматической настройки"
41
+Basic.AutoConfig.Beta="Мастер автоматической настройки (Бета)"
42
+Basic.AutoConfig.ApplySettings="Применить настройки"
43
+Basic.AutoConfig.StartPage="Информация об использовании"
44
+Basic.AutoConfig.StartPage.SubTitle="Укажите, для чего вы хотите использовать программу"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Оптимизировать для трансляции, вторично для записи"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="Оптимизировать только для записи, я не буду вести трансляции"
47
+Basic.AutoConfig.VideoPage="Настройки видео"
48
+Basic.AutoConfig.VideoPage.SubTitle="Укажите нужные параметры видео, которые вы бы хотели использовать"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Использовать текущий (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Дисплей %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Использовать текущий (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 или 30, но предпочитать 60, когда это возможно"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 или 30, но предпочитать высокое разрешение"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="Примечание: Разрешение холста (базовое), не обязательно должно совпадать с разрешением трансляции или записи. Реальное разрешение вашей трансляции/записи может быть снижено для уменьшения использования ресурсов или битрейта."
55
+Basic.AutoConfig.StreamPage="Информация о трансляции"
56
+Basic.AutoConfig.StreamPage.SubTitle="Пожалуйста, введите вашу информацию о трансляциях"
57
+Basic.AutoConfig.StreamPage.Service="Сервис"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="Показать все..."
59
+Basic.AutoConfig.StreamPage.Server="Сервер"
60
+Basic.AutoConfig.StreamPage.StreamKey="Ключ потока"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Ссылка)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Посчитать битрейт во время теста пропускной способности (может занять несколько минут)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Предпочитать аппаратное кодирование"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Аппаратное кодирование снижает использование ЦП, но может потребовать больший битрейт, для достижения того же уровня качества."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Предупреждение трансляции"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Тест пропускной способности трансляции случайных видеоданных без звука на вашем канале. Рекомендуется временно отключить запись трансляции в файл и сделать трансляцию частной, пока тестирование не завершится. Продолжить?"
67
+Basic.AutoConfig.TestPage="Финальные результаты"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="Сейчас программа выполняет набор тестов для оценки самых лучших параметров"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="Тестирование завершено"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="Испытание пропускной способности, это может занять несколько минут..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Подключение к: %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Ошибка подключения к серверам. Пожалуйста, проверьте подключение к Интернету и повторите попытку."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Тестирование пропускной способности для: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Тестирование кодировщика трансляции, это может занять минуту..."
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Тестирование кодировщика записи, это может занять минуту..."
76
+Basic.AutoConfig.TestPage.TestingRes="Тестирование разрешений, это может занять несколько минут..."
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="Не удалось запустить кодировщик"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Тестирование %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Потоковый кодировщик"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Кодировщик записи"
81
+Basic.AutoConfig.TestPage.Result.Header="Программа определила, что эти примерные настройки наиболее вам подходят:"
82
+Basic.AutoConfig.TestPage.Result.Footer="Нажмите «Применить настройки» для использования этих параметров. Для повторной настройки с помощью мастера нажмите «Назад». Чтобы настроить нужные параметры самостоятельно, нажмите «Отмена» и откройте «Настройки»."
83
+
84
+Basic.Stats="Статистика"
85
+Basic.Stats.CPUUsage="Использование ЦП"
86
+Basic.Stats.HDDSpaceAvailable="Доступно места на диске"
87
+Basic.Stats.MemoryUsage="Использование памяти"
88
+Basic.Stats.AverageTimeToRender="Среднее время рендеринга кадра"
89
+Basic.Stats.SkippedFrames="Пропущенные кадры из-за задержки кодирования"
90
+Basic.Stats.MissedFrames="Кадры, пропущенные из-за отставания рендеринга"
91
+Basic.Stats.Output.Stream="Трансляция"
92
+Basic.Stats.Output.Recording="Запись"
93
+Basic.Stats.Status="Статус"
94
+Basic.Stats.Status.Recording="Включена"
95
+Basic.Stats.Status.Live="ПРЯМОЙ ЭФИР"
96
+Basic.Stats.Status.Reconnecting="Переподключение"
97
+Basic.Stats.Status.Inactive="Неактивна"
98
+Basic.Stats.DroppedFrames="Пропущенные кадры (Сеть)"
99
+Basic.Stats.MegabytesSent="Данных отправлено"
100
+Basic.Stats.Bitrate="Битрейт"
101
 
102
 Updater.Title="Доступно обновление"
103
 Updater.Text="Доступно новое обновление:"
104
@@ -375,6 +464,7 @@
105
 Basic.Settings.General.Theme="Тема"
106
 Basic.Settings.General.Language="Язык"
107
 Basic.Settings.General.EnableAutoUpdates="Проверять наличие обновлений при запуске"
108
+Basic.Settings.General.OpenStatsOnStartup="Открывать окно статистики при запуске"
109
 Basic.Settings.General.WarnBeforeStartingStream="Показывать окно подтверждения при запуске трансляции"
110
 Basic.Settings.General.WarnBeforeStoppingStream="Показывать окно подтверждения при остановке трансляции"
111
 Basic.Settings.General.Projectors="Проекторы"
112
@@ -405,7 +495,7 @@
113
 Basic.Settings.Output.EnforceBitrate="Следовать ограничениям битрейта, накладываемые потоковой службой"
114
 Basic.Settings.Output.Mode="Режим вывода"
115
 Basic.Settings.Output.Mode.Simple="Простой"
116
-Basic.Settings.Output.Mode.Adv="Расширенные"
117
+Basic.Settings.Output.Mode.Adv="Расширенный"
118
 Basic.Settings.Output.Mode.FFmpeg="Вывод FFmpeg"
119
 Basic.Settings.Output.UseReplayBuffer="Включить Буфер повтора"
120
 Basic.Settings.Output.ReplayBuffer.SecondsMax="Максимальное время повтора (секунд)"
121
@@ -489,18 +579,18 @@
122
 FilenameFormatting.TT="%CCYY   Год, четыре знака\n%YY      Год, последние два знака (00-99)\n%MM       Месяц в числовом значении (01-12)\n%DD      День месяца, ноль не опускается (01-31)\n%hh        Час в 24-часовом формате (00-23)\n%mm       Минута (00-59)\n%ss     Секунда (00-61)\n%%     Знак '%'\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      Обозначение AM или PM\n%S       Секунда (00-61)\n%y     Год, последние два знака (00-99)\n%Y        Год\n%z     ISO 8601 смещение от UTC или\n      название или сокращение часового пояса\n%Z      Название или сокращение часового пояса\n"
123
 
124
 Basic.Settings.Video="Видео"
125
-Basic.Settings.Video.Adapter="Видеоадаптер:"
126
-Basic.Settings.Video.BaseResolution="Базовое (основа) разрешение:"
127
-Basic.Settings.Video.ScaledResolution="Выходное (масштабированное) разрешение:"
128
-Basic.Settings.Video.DownscaleFilter="Фильтр масштабирования:"
129
+Basic.Settings.Video.Adapter="Видеоадаптер"
130
+Basic.Settings.Video.BaseResolution="Базовое (основа) разрешение"
131
+Basic.Settings.Video.ScaledResolution="Выходное (масштабированное) разрешение"
132
+Basic.Settings.Video.DownscaleFilter="Фильтр масштабирования"
133
 Basic.Settings.Video.DisableAeroWindows="Отключить Aero (только для Windows)"
134
-Basic.Settings.Video.FPS="FPS:"
135
+Basic.Settings.Video.FPS="FPS"
136
 Basic.Settings.Video.FPSCommon="Общие значения FPS"
137
 Basic.Settings.Video.FPSInteger="Целое значение FPS"
138
 Basic.Settings.Video.FPSFraction="Дробное значение FPS"
139
-Basic.Settings.Video.Numerator="Числитель:"
140
-Basic.Settings.Video.Denominator="Знаменатель:"
141
-Basic.Settings.Video.Renderer="Рендер:"
142
+Basic.Settings.Video.Numerator="Числитель"
143
+Basic.Settings.Video.Denominator="Знаменатель"
144
+Basic.Settings.Video.Renderer="Рендер"
145
 Basic.Settings.Video.InvalidResolution="Неверное разрешение.  Должно быть [Ширина]x[Высота] (т.е. 1920x1080)"
146
 Basic.Settings.Video.CurrentlyActive="Видео выход в данный момент активен. Пожалуйста, отключите все выходы, чтобы изменить настройки видео."
147
 Basic.Settings.Video.DisableAero="Отключить Aero"
148
@@ -538,6 +628,7 @@
149
 Basic.Settings.Advanced.Video.ColorRange.Full="Полный"
150
 Basic.Settings.Advanced.Audio.MonitoringDevice="Устройство прослушивания аудио"
151
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="По умолчанию"
152
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Отключить приглушение звуков Windows"
153
 Basic.Settings.Advanced.StreamDelay="Задержка потока"
154
 Basic.Settings.Advanced.StreamDelay.Duration="Продолжительность (секунд)"
155
 Basic.Settings.Advanced.StreamDelay.Preserve="Сохранить точку отсечки (увеличить задержку) при переподключении"
156
@@ -617,3 +708,6 @@
157
 OutputWarnings.MultiTrackRecording="Предупреждение: Некоторые форматы (такие как FLV) не поддерживают множественные звуковые дорожки"
158
 OutputWarnings.MP4Recording="Внимание: Записи, сохраненные в MP4 будут нечитаемы, если файл не будет завершен (например, в результате BSOD'а, потери напряжения в сети и т.д.). Если вы хотите записывать несколько аудио дорожек, рассмотрите использование MKV, и последующее ремультиплексирование в MP4 после завершения записи (Файл -> Ремультиплексирование записей)"
159
 
160
+FinalScene.Title="Удалить сцену"
161
+FinalScene.Text="Здесь должна быть по крайней мере одна сцена."
162
+
163
obs-studio-18.0.2.tar.xz/UI/data/locale/sk-SK.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/sk-SK.ini Changed
38
 
1
@@ -47,6 +47,12 @@
2
 Seconds="Sekundy"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.DuplicateScene="Duplikovať scénu"
12
 
13
 Basic.TransitionDuration="Trvanie"
14
@@ -243,14 +249,14 @@
15
 
16
 
17
 Basic.Settings.Video="Video"
18
-Basic.Settings.Video.Adapter="Video adaptér:"
19
+Basic.Settings.Video.Adapter="Video adaptér"
20
 Basic.Settings.Video.DisableAeroWindows="Vypnúť Aero (len Windows)"
21
-Basic.Settings.Video.FPS="FPS:"
22
+Basic.Settings.Video.FPS="FPS"
23
 Basic.Settings.Video.FPSCommon="Bežné hodnoty FPS"
24
 Basic.Settings.Video.FPSInteger="Celočíselná hodnota FPS"
25
 Basic.Settings.Video.FPSFraction="Zlomková hodnota FPS"
26
-Basic.Settings.Video.Numerator="Čitateľ:"
27
-Basic.Settings.Video.Denominator="Menovateľ:"
28
+Basic.Settings.Video.Numerator="Čitateľ"
29
+Basic.Settings.Video.Denominator="Menovateľ"
30
 Basic.Settings.Video.InvalidResolution="Neplatné rozlíšenie. Správne je [šírka]x[výška] (napr. 1920x1080)"
31
 Basic.Settings.Video.CurrentlyActive="Výstup videa je práve aktívny. Prosím, vypnite všetky výstupy na zmenu nastavení videa."
32
 
33
@@ -269,3 +275,4 @@
34
 
35
 
36
 
37
+
38
obs-studio-18.0.2.tar.xz/UI/data/locale/sl-SI.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/sl-SI.ini Changed
42
 
1
@@ -32,6 +32,12 @@
2
 
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 NameExists.Title="Ime že obstaja"
12
 NameExists.Text="Ime je že v uporabi."
13
 
14
@@ -209,16 +215,16 @@
15
 
16
 
17
 Basic.Settings.Video="Video"
18
-Basic.Settings.Video.Adapter="Grafična kartica:"
19
-Basic.Settings.Video.DownscaleFilter="Pomanjševalni filter:"
20
+Basic.Settings.Video.Adapter="Grafična kartica"
21
+Basic.Settings.Video.DownscaleFilter="Pomanjševalni filter"
22
 Basic.Settings.Video.DisableAeroWindows="Onemogoči Aero (samo Windows)"
23
-Basic.Settings.Video.FPS="FPS:"
24
+Basic.Settings.Video.FPS="FPS"
25
 Basic.Settings.Video.FPSCommon="Pogoste FPS vrednosti"
26
 Basic.Settings.Video.FPSInteger="Cela števila FPS"
27
 Basic.Settings.Video.FPSFraction="Decimalne FPS vrednosti"
28
-Basic.Settings.Video.Numerator="Števec:"
29
-Basic.Settings.Video.Denominator="Imenovalec:"
30
-Basic.Settings.Video.Renderer="Rendanje:"
31
+Basic.Settings.Video.Numerator="Števec"
32
+Basic.Settings.Video.Denominator="Imenovalec"
33
+Basic.Settings.Video.Renderer="Rendanje"
34
 Basic.Settings.Video.InvalidResolution="Neveljavna vrednost ločljivost. Biti mora [širina] x [višina] (npr. 1920x1080)"
35
 Basic.Settings.Video.CurrentlyActive="Video izhod je trenutno aktiven. Prosimo, izklopite kakšen koli izhod za spreminjanje nastavitev."
36
 
37
@@ -244,3 +250,4 @@
38
 
39
 
40
 
41
+
42
obs-studio-18.0.2.tar.xz/UI/data/locale/sr-CS.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/sr-CS.ini Changed
46
 
1
@@ -55,6 +55,12 @@
2
 Deprecated="Prevaziđeno"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Zameni scene pregleda/izlaza nakon prelaza"
12
 QuickTransitions.SwapScenesTT="Zamenjuje scene pregleda i izlaza nakon prelaza (ako originalna scena izlaza još uvek postoji).\nOvo neće poništiti promene koje su načinjene nad originalnom scenom izlaza."
13
 QuickTransitions.DuplicateScene="Dupliraj scenu"
14
@@ -434,18 +440,18 @@
15
 FilenameFormatting.TT="%CCYY       Godina, četiri cifre\n%YY       Godina, poslednje dve cifre (00-99)\n%MM        Mesec kao decimalni broj (01-12)\n%DD       Dan u mesecu, sa nulom ispred (01-31)\n%hh      Sat u 24-časovnom zapisu (00-23)\n%mm       Minut (00-59)\n%ss      Sekunda (00-61)\n%%     Znak procenta\n%a       Skraćeno ime dana u nedelji\n%A     Puno ime dana u nedelji\n%b     Skraćeno ime meseca\n%B     Puno ime meseca\n%d     Dan u mesecu, sa nulom ispred (01-31)\n%H       Sat u 24-časovnom zapisu (00-23)\n%I        Sat u 12-časovnom zapisu (01-12)\n%m        Mesec kao decimalni broj (01-12)\n%M        Minut (00-59)\n%p       Oznaka za pre ili posle podne\n%S       Sekunda (00-61)\n%y     Godina, poslednje dve cifre (00-99)\n%Y     Godina\n%z      ISO 8601 odstupanje od UTC ili ime\n        vremenske zone ili skraćenica\n%Z       Ime vremenske zone ili skraćenica\n"
16
 
17
 Basic.Settings.Video="Video"
18
-Basic.Settings.Video.Adapter="Video adapter:"
19
-Basic.Settings.Video.BaseResolution="Osnovna (površinska) rezolucija:"
20
-Basic.Settings.Video.ScaledResolution="Izlazna (skalirana) rezolucija:"
21
-Basic.Settings.Video.DownscaleFilter="Filter za skaliranje:"
22
+Basic.Settings.Video.Adapter="Video adapter"
23
+Basic.Settings.Video.BaseResolution="Osnovna (površinska) rezolucija"
24
+Basic.Settings.Video.ScaledResolution="Izlazna (skalirana) rezolucija"
25
+Basic.Settings.Video.DownscaleFilter="Filter za skaliranje"
26
 Basic.Settings.Video.DisableAeroWindows="Isključi Aero (samo za Windows)"
27
-Basic.Settings.Video.FPS="FPS:"
28
+Basic.Settings.Video.FPS="FPS"
29
 Basic.Settings.Video.FPSCommon="Uobičakene FPS vrednosti"
30
 Basic.Settings.Video.FPSInteger="Brojevna FPS vrednost"
31
 Basic.Settings.Video.FPSFraction="Brojevna FPS vrednost sa decimalama"
32
-Basic.Settings.Video.Numerator="Brojilac:"
33
-Basic.Settings.Video.Denominator="Imenilac:"
34
-Basic.Settings.Video.Renderer="Renderer:"
35
+Basic.Settings.Video.Numerator="Brojilac"
36
+Basic.Settings.Video.Denominator="Imenilac"
37
+Basic.Settings.Video.Renderer="Renderer"
38
 Basic.Settings.Video.InvalidResolution="Neispravna vrednost rezolucije. Mora biti [width]x[height] (npr. 1920x1080)"
39
 Basic.Settings.Video.CurrentlyActive="Video izlaz je trenutno aktivan. Molim isključite sve izlaze da promenite video podešavanja."
40
 Basic.Settings.Video.DisableAero="Onemogući Aero"
41
@@ -553,3 +559,4 @@
42
 OutputWarnings.NoTracksSelected="Morate odabrati makar jednu traku"
43
 OutputWarnings.MultiTrackRecording="Upozorenje: Određeni formati (kao što je FLV) ne podržavaju više traka po snimku"
44
 
45
+
46
obs-studio-18.0.2.tar.xz/UI/data/locale/sr-SP.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/sr-SP.ini Changed
46
 
1
@@ -55,6 +55,12 @@
2
 Deprecated="Превазиђено"
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 QuickTransitions.SwapScenes="Замени сцене прегледа/излаза након прелаза"
12
 QuickTransitions.SwapScenesTT="Замењује сцене прегледа и излаза након прелаза (ако оригинална сцена још увек постоји).\nОво неће поништити промене које су начињене над оригиналном сценом излаза."
13
 QuickTransitions.DuplicateScene="Дуплирај сцену"
14
@@ -434,18 +440,18 @@
15
 FilenameFormatting.TT="%CCYY       Година, четири цифре\n%YY       Година, последње две цифре (00-99)\n%MM     Месец као децимални број (01-12)\n%DD       Дан у месецу, са нулом испред (01-31)\n%hh      Сат у 24-часовном запису (00-23)\n%mm       Минут (00-59)\n%ss      Секунда (00-61)\n%%     Знак процента\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      ISO 8601 одступање од UTC или име\n     временске зоне ли скраћеница\n%Z        Име временске зоне или скраћеница\n"
16
 
17
 Basic.Settings.Video="Видео"
18
-Basic.Settings.Video.Adapter="Видео адаптер:"
19
-Basic.Settings.Video.BaseResolution="Основна (површинска) резолуција:"
20
-Basic.Settings.Video.ScaledResolution="Излазна (скалирана) резолуција:"
21
-Basic.Settings.Video.DownscaleFilter="Филтер за скалирање:"
22
+Basic.Settings.Video.Adapter="Видео адаптер"
23
+Basic.Settings.Video.BaseResolution="Основна (површинска) резолуција"
24
+Basic.Settings.Video.ScaledResolution="Излазна (скалирана) резолуција"
25
+Basic.Settings.Video.DownscaleFilter="Филтер за скалирање"
26
 Basic.Settings.Video.DisableAeroWindows="Искључи Aero (само за Windows)"
27
-Basic.Settings.Video.FPS="FPS:"
28
+Basic.Settings.Video.FPS="FPS"
29
 Basic.Settings.Video.FPSCommon="Уобичајене FPS вредности"
30
 Basic.Settings.Video.FPSInteger="Бројевна FPS вредност"
31
 Basic.Settings.Video.FPSFraction="Бројевна FPS вредност са децималама"
32
-Basic.Settings.Video.Numerator="Бројилац:"
33
-Basic.Settings.Video.Denominator="Именилац:"
34
-Basic.Settings.Video.Renderer="Рендерер:"
35
+Basic.Settings.Video.Numerator="Бројилац"
36
+Basic.Settings.Video.Denominator="Именилац"
37
+Basic.Settings.Video.Renderer="Рендерер"
38
 Basic.Settings.Video.InvalidResolution="Неисправна вредност резолуције. Мора бити [width]x[height] (нпр. 1920x1080)"
39
 Basic.Settings.Video.CurrentlyActive="Видео излаз је тренутно активан. Молим искључите све излазе да промените видео подешавања."
40
 Basic.Settings.Video.DisableAero="Онемогући Aero"
41
@@ -553,3 +559,4 @@
42
 OutputWarnings.NoTracksSelected="Морате одабрати макар једну траку"
43
 OutputWarnings.MultiTrackRecording="Упозорење: Одређени формати (као што је FLV) не подржавају више трака по снимку"
44
 
45
+
46
obs-studio-18.0.2.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/sv-SE.ini Changed
146
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Fullskärmsprojektor (förhandsvisning)"
3
 SceneProjector="Fullskärmsprojektor (scen)"
4
 SourceProjector="Fullskärmsprojektor (källa)"
5
+PreviewWindow="Fönsterprojektor (förhandsvisning)"
6
+SceneWindow="Fönsterprojektor (scen)"
7
+SourceWindow="Fönsterprojektor (källa)"
8
 Clear="Rensa"
9
 Revert="Återgå"
10
 Show="Visa"
11
@@ -56,6 +59,90 @@
12
 ReplayBuffer="Reprisbuffert"
13
 Import="Importera"
14
 Export="Exportera"
15
+Copy="Kopiera"
16
+Paste="Klistra in"
17
+PasteReference="Klistra in (referens)"
18
+PasteDuplicate="Klistra in (duplicera)"
19
+RemuxRecordings="Remuxa inspelningar"
20
+Next="Nästa"
21
+Back="Tillbaka"
22
+
23
+AlreadyRunning.Title="OBS körs redan"
24
+AlreadyRunning.LaunchAnyway="Kör ändå"
25
+
26
+Copy.Filters="Kopiera filter"
27
+Paste.Filters="Klistra in filter"
28
+
29
+BandwidthTest.Region="Region"
30
+BandwidthTest.Region.US="USA"
31
+BandwidthTest.Region.EU="Europa"
32
+BandwidthTest.Region.Asia="Asien"
33
+BandwidthTest.Region.Other="Övrigt"
34
+
35
+Basic.FirstStartup.RunWizard="Skulle du vilja köra den automatiska konfigurationsguiden? Du kan konfigurera dina inställningar manuellt genom att klicka på knappen Inställningar i huvudfönstret."
36
+Basic.FirstStartup.RunWizard.BetaWarning="(OBS: Den automatiska konfigurationsguiden är för nuvarande i betastadiet)"
37
+Basic.FirstStartup.RunWizard.NoClicked="Om du ändrar dig kan du köra den automatiska konfigurationsguiden när som helst från verktygsmenyn."
38
+
39
+Basic.AutoConfig="Automatisk konfigurationsguide"
40
+Basic.AutoConfig.Beta="Automatisk konfigurationsguide (beta)"
41
+Basic.AutoConfig.ApplySettings="Verkställ inställningar"
42
+Basic.AutoConfig.StartPage="Användningsinformation"
43
+Basic.AutoConfig.StartPage.SubTitle="Ange vad du vill använda programmet för"
44
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimera för strömning, inspelning sekundärt"
45
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimera endast för inspelning, jag kommer inte att strömma"
46
+Basic.AutoConfig.VideoPage="Videoinställningar"
47
+Basic.AutoConfig.VideoPage.SubTitle="Ange önskade videoinställningar som du vill använda"
48
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Använd nuvarande (%1x%2)"
49
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Bildskärm %1 (%2x%3)"
50
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Använd nuvarande (%1)"
51
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Antingen 60 eller 30, men föredra 60 när det är möjligt"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Antingen 60 eller 30, men föredra hög upplösning"
53
+Basic.AutoConfig.StreamPage="Ströminformation"
54
+Basic.AutoConfig.StreamPage.SubTitle="Ange din ströminformation"
55
+Basic.AutoConfig.StreamPage.Service="Tjänst"
56
+Basic.AutoConfig.StreamPage.Service.ShowAll="Visa alla..."
57
+Basic.AutoConfig.StreamPage.Server="Server"
58
+Basic.AutoConfig.StreamPage.StreamKey="Strömnyckel"
59
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Länk)"
60
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Uppskatta bithastighetens med ett bandbreddstest (kan ta några minuter)"
61
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Föredra hårdvarukodning"
62
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Hårdvarukodning eliminerar den mesta processoranvändningen, men kan kräva mer bithastighet för att uppnå samma kvalitetsnivå."
63
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Strömvarning"
64
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Bandbreddstestet kommer att strömma slumpad videodata utan ljud till din kanal. Om det fungerar, är det rekommenderat det att tillfälligt inaktivera att spara videor av strömmar och ändra strömmen till privat tills testet är färdigt. Fortsätta?"
65
+Basic.AutoConfig.TestPage="Slutgiltiga resultat"
66
+Basic.AutoConfig.TestPage.SubTitle.Testing="Programmet utför nu en grupp tester för att uppskatta de mest idealiska inställningarna"
67
+Basic.AutoConfig.TestPage.SubTitle.Complete="Testet slutfört"
68
+Basic.AutoConfig.TestPage.TestingBandwidth="Utför bandbreddstest, detta kan ta några minuter..."
69
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Ansluter till: %1..."
70
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Misslyckades att ansluta till någon server, kontrollera din Internetanslutning och försök igen."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Testar bandbredden för: %1"
72
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testar strömkodare, detta kan ta några minuter..."
73
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testar inspelningskodare, detta kan ta några minuter..."
74
+Basic.AutoConfig.TestPage.TestingRes="Testar upplösningar, detta kan ta några minuter..."
75
+Basic.AutoConfig.TestPage.TestingRes.Fail="Misslyckades att starta kodaren"
76
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testar %1x%2 i %3 bilder per sekund..."
77
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Strömningskodare"
78
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Inspelningskodare"
79
+Basic.AutoConfig.TestPage.Result.Header="Programmet har bestämt att dessa uppskattade inställningar är de mest idealiska för dig:"
80
+Basic.AutoConfig.TestPage.Result.Footer="För att använda dessa inställningar, klicka på Verkställ inställningar. För att omkonfigurera guiden och försöka igen, klicka på Tillbaka. För att konfigurera inställningarna manuellt, klicka på Avbryt och öppna Inställningar."
81
+
82
+Basic.Stats="Statistik"
83
+Basic.Stats.CPUUsage="CPU-användning"
84
+Basic.Stats.HDDSpaceAvailable="Tillgängligt hårddiskutrymme"
85
+Basic.Stats.MemoryUsage="Minnesanvändning"
86
+Basic.Stats.AverageTimeToRender="Medeltid för att rendera bildruta"
87
+Basic.Stats.SkippedFrames="Bildrutor som hoppades över p.g.a. kodningslagg"
88
+Basic.Stats.MissedFrames="Bildrutor som saknas p.g.a. renderingslagg"
89
+Basic.Stats.Output.Stream="Ström"
90
+Basic.Stats.Output.Recording="Inspelning"
91
+Basic.Stats.Status="Status"
92
+Basic.Stats.Status.Recording="Spelar in"
93
+Basic.Stats.Status.Live="SÄNDER"
94
+Basic.Stats.Status.Reconnecting="Återansluter"
95
+Basic.Stats.Status.Inactive="Inaktiv"
96
+Basic.Stats.DroppedFrames="Tappade bildrutor (nätverk)"
97
+Basic.Stats.MegabytesSent="Total datautmatning"
98
+Basic.Stats.Bitrate="Bithastighet"
99
 
100
 Updater.Title="Ny uppdatering tillgänglig"
101
 Updater.Text="Det finns en ny uppdatering tillgänglig:"
102
@@ -375,6 +462,7 @@
103
 Basic.Settings.General.Theme=" Tema"
104
 Basic.Settings.General.Language="Språk"
105
 Basic.Settings.General.EnableAutoUpdates="Sök efter uppdateringar automatiskt vid start"
106
+Basic.Settings.General.OpenStatsOnStartup="Öppna statistikfönstret vid uppstart"
107
 Basic.Settings.General.WarnBeforeStartingStream="Visa bekräftelsedialog när ström startas"
108
 Basic.Settings.General.WarnBeforeStoppingStream="Visa bekräftelsedialog när ström stoppas"
109
 Basic.Settings.General.Projectors="Projektorer"
110
@@ -492,15 +580,15 @@
111
 Basic.Settings.Video.Adapter="Grafikkort:"
112
 Basic.Settings.Video.BaseResolution="Grundupplösning (kanvas):"
113
 Basic.Settings.Video.ScaledResolution="Utdataupplösning (skalad):"
114
-Basic.Settings.Video.DownscaleFilter="Nedskalningsfilter:"
115
+Basic.Settings.Video.DownscaleFilter="Nedskalningsfilter"
116
 Basic.Settings.Video.DisableAeroWindows="Inaktivera Aero (endast Windows)"
117
-Basic.Settings.Video.FPS="FPS:"
118
+Basic.Settings.Video.FPS="FPS"
119
 Basic.Settings.Video.FPSCommon="Vanliga bildhastighetsvärden"
120
 Basic.Settings.Video.FPSInteger="Heltals-bildhastighetsvärde"
121
 Basic.Settings.Video.FPSFraction="Decimaltals-bildhastighetsvärde"
122
-Basic.Settings.Video.Numerator="Täljare:"
123
-Basic.Settings.Video.Denominator="Nämnare:"
124
-Basic.Settings.Video.Renderer="Renderare:"
125
+Basic.Settings.Video.Numerator="Täljare"
126
+Basic.Settings.Video.Denominator="Nämnare"
127
+Basic.Settings.Video.Renderer="Renderare"
128
 Basic.Settings.Video.InvalidResolution="Ogiltig upplösning. Måste anges som [bredd]x[höjd] (t.ex 1920x1080)"
129
 Basic.Settings.Video.CurrentlyActive="Videoutmatning är aktiv. Stoppa alla utmatningar för att kunna ändra videoinställningar."
130
 Basic.Settings.Video.DisableAero="Inaktivera Aero"
131
@@ -538,6 +626,7 @@
132
 Basic.Settings.Advanced.Video.ColorRange.Full="Full"
133
 Basic.Settings.Advanced.Audio.MonitoringDevice="Ljuduppspelningsenhet"
134
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Standard"
135
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Inaktivera audio ducking i Windows"
136
 Basic.Settings.Advanced.StreamDelay="Strömfördröjning"
137
 Basic.Settings.Advanced.StreamDelay.Duration="Varaktighet (sekunder)"
138
 Basic.Settings.Advanced.StreamDelay.Preserve="Behåll stoppunkten (öka fördröjningen) vid återanslutning"
139
@@ -616,3 +705,6 @@
140
 OutputWarnings.MultiTrackRecording="Varning: En del format (t.ex. FLV) stöder inte flera spår för varje inspelning"
141
 OutputWarnings.MP4Recording="Varning: Inspelningar som sparas som MP4 kommer inte att kunna återställas om filen inte kan slutföras (d.v.s. om en datorkrasch, strömavbrott, etc. skulle inträffa). Om du vill spela in flera ljudspår, överväg att använda MKV och remuxa inspelningen till mp4 när den är färdig (Arkiv->Remuxa inspelningar)"
142
 
143
+FinalScene.Title="Radera scen"
144
+FinalScene.Text="Det måste finnas minst en scen."
145
+
146
obs-studio-18.0.2.tar.xz/UI/data/locale/ta-IN.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/ta-IN.ini Changed
12
 
1
@@ -95,3 +95,10 @@
2
 
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
obs-studio-18.0.2.tar.xz/UI/data/locale/th-TH.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/th-TH.ini Changed
28
 
1
@@ -44,6 +44,12 @@
2
 
3
 
4
 
5
+
6
+
7
+
8
+
9
+
10
+
11
 ConfirmRemove.Title="ยืนยันการลบ"
12
 ConfirmRemove.Text="คุณแน่ใจแล้วหรือที่จะลบ '$1'?"
13
 
14
@@ -124,7 +130,7 @@
15
 
16
 Basic.Settings.Video="วีดีโอ"
17
 Basic.Settings.Video.DisableAeroWindows="ปิดการใช้งาน Aero (เฉพาะ Windows เท่านั้น)"
18
-Basic.Settings.Video.FPS="FPS:"
19
+Basic.Settings.Video.FPS="FPS"
20
 
21
 
22
 Basic.Settings.Audio="เสียง"
23
@@ -139,3 +145,4 @@
24
 
25
 
26
 
27
+
28
obs-studio-18.0.2.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/tr-TR.ini Changed
216
 
1
@@ -28,9 +28,12 @@
2
 Mono="Mono"
3
 Stereo="Stereo"
4
 DroppedFrames="Kaybedilen Kareler %1 (%2%)"
5
-PreviewProjector="Tam Ekran Yansıtması (Önizleme)"
6
-SceneProjector="Tam Ekran Yansıtması (Sahne)"
7
-SourceProjector="Tam Ekran Yansıtması (Kaynak)"
8
+PreviewProjector="Tam Ekran Projektör (Önizleme)"
9
+SceneProjector="Tam Ekran Projektör (Sahne)"
10
+SourceProjector="Tam Ekran Projektör (Kaynak)"
11
+PreviewWindow="Pencereli Projektör (Önizleme)"
12
+SceneWindow="Pencereli Projektör (Sahne)"
13
+SourceWindow="Pencereli Projektör (Kaynak)"
14
 Clear="Temizle"
15
 Revert="Eski Haline Döndür"
16
 Show="Göster"
17
@@ -39,7 +42,7 @@
18
 New="Yeni"
19
 Duplicate="Çoğalt"
20
 Enable="Etkinleştir"
21
-DisableOSXVSync="OSX V-Sync Devre Dışı Bırak"
22
+DisableOSXVSync="OSX V-Sync'i Devre Dışı Bırak"
23
 ResetOSXVSyncOnExit="OSX V-Sync'i Çıkışta Sıfırla"
24
 HighResourceUsage="Kodlama aşırı yüklendi!  Video ayarlarını kapatmayı veya daha hızlı bir kodlama ön ayarını kullanmayı düşünün."
25
 Transition="Geçiş"
26
@@ -56,6 +59,92 @@
27
 ReplayBuffer="Tekrar Oynatma Arabelleği"
28
 Import="İçe Aktar"
29
 Export="Dışa Aktar"
30
+Copy="Kopyala"
31
+Paste="Yapıştır"
32
+PasteReference="Yapıştır (Referans)"
33
+PasteDuplicate="Yapıştır (Çoğalt)"
34
+RemuxRecordings="Remux Kayıtları"
35
+Next="İleri"
36
+Back="Geri"
37
+
38
+AlreadyRunning.Title="OBS zaten çalışıyor"
39
+AlreadyRunning.Text="OBS zaten çalışıyor!  Bunu yapmak istemediyseniz, lütfen yeni bir örneği çalıştırmayı denemeden önce varolan tüm OBS örneklerini  kapatın. OBS'yi sistem tablasına küçülmesi için ayarladıysanız, lütfen hala çalışıp çalışmadığını görmek için orayı kontrol edin."
40
+AlreadyRunning.LaunchAnyway="Yine de Başlat"
41
+
42
+Copy.Filters="Filtreleri Kopyala"
43
+Paste.Filters="Filtreleri Yapıştır"
44
+
45
+BandwidthTest.Region="Bölge"
46
+BandwidthTest.Region.US="Amerika Birleşik Devletleri"
47
+BandwidthTest.Region.EU="Avrupa"
48
+BandwidthTest.Region.Asia="Asya"
49
+BandwidthTest.Region.Other="Diğer"
50
+
51
+Basic.FirstStartup.RunWizard="Otomatik yapılandırma sihirbazını çalıştırmak istiyor musunuz? Ana penceredeki Ayarlar düğmesine tıklayarak ayarlarınızı elle de yapılandırabilirsiniz."
52
+Basic.FirstStartup.RunWizard.BetaWarning="(Not: Otomatik yapılandırma sihirbazı şu anda beta'da)"
53
+Basic.FirstStartup.RunWizard.NoClicked="Fikrinizi değiştirirseniz, otomatik yapılandırma sihirbazını istediğiniz zaman Araçlar menüsünden yeniden çalıştırabilirsiniz."
54
+
55
+Basic.AutoConfig="Otomatik Yapılandırma Sihirbazı"
56
+Basic.AutoConfig.Beta="Otomatik Yapılandırma Sihirbazı (Beta)"
57
+Basic.AutoConfig.ApplySettings="Ayarları Uygula"
58
+Basic.AutoConfig.StartPage="Kullanım Bilgileri"
59
+Basic.AutoConfig.StartPage.SubTitle="Programı ne için kullanmak istediğinizi belirtin"
60
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Yayın için en iyi hale getir, kayıt ikinci sırada"
61
+Basic.AutoConfig.StartPage.PrioritizeRecording="Sadece kayıt için en iyi hale getir, yayın yapmayacağım"
62
+Basic.AutoConfig.VideoPage="Video Ayarları"
63
+Basic.AutoConfig.VideoPage.SubTitle="Kullanmak istediğiniz video ayarlarını belirtin"
64
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Şimdikini Kullan (%1x%2)"
65
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Ekran %1 (%2x%3)"
66
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Şimdikini Kullan (%1)"
67
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 ya da 30, ama olabilirse 60'ı tercih et"
68
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 ya da 30, ama yüksek çözünürlüğü tercih et"
69
+Basic.AutoConfig.VideoPage.CanvasExplanation="Not: Tuval (taban) çözünürlüğü yayın veya kayıt yapacağınız çözünürlük ile aynı olmak zorunda değildir. Gerçek yayın/kayıt çözünürlüğünüz kaynak kullanımı ve bit hızı gereksinimlerini düşürmek için tuval çözünürlüğünüzden aşağıya boyutlandırılabilir."
70
+Basic.AutoConfig.StreamPage="Yayın Bilgisi"
71
+Basic.AutoConfig.StreamPage.SubTitle="Lütfen yayın bilginizi girin"
72
+Basic.AutoConfig.StreamPage.Service="Hizmet"
73
+Basic.AutoConfig.StreamPage.Service.ShowAll="Tümünü Göster..."
74
+Basic.AutoConfig.StreamPage.Server="Sunucu"
75
+Basic.AutoConfig.StreamPage.StreamKey="Yayın Anahtarı"
76
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Bağlantı)"
77
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Bant genişliği testi ile bit hızını tahmin et (birkaç dakika alabilir)"
78
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Donanım kodlamayı tercih et"
79
+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."
80
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Yayın uyarısı"
81
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Bant genişliği testi kanalınıza ses olmayan rastlantısallaştırılmış video veri yayını yapmak üzere. Yapabiliyorsanız, test bitene kadar geçici bir süre yayınların videosunu kaydetmeyi kapatmanız ve yayını gizli olarak ayarlamanız önerilir. Devam edilsin mi?"
82
+Basic.AutoConfig.TestPage="Sonuçlar"
83
+Basic.AutoConfig.TestPage.SubTitle.Testing="Program en uygun ayarları tahmin etmek için şimdi bir dizi test yürütüyor"
84
+Basic.AutoConfig.TestPage.SubTitle.Complete="Test etme tamamlandı"
85
+Basic.AutoConfig.TestPage.TestingBandwidth="Bant genişliği testi yapılıyor, bu birkaç dakika alabilir..."
86
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Bağlanılıyor: %1..."
87
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Herhangi bir sunucuya bağlanamıyor, lütfen internet bağlantınızı kontrol edin ve tekrar deneyin."
88
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Bant genişliği test ediliyor: %1"
89
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Yayın kodlayıcı test ediliyor, bu bir dakika alabilir..."
90
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Kayıt kodlayıcı test ediliyor, bu bir dakika alabilir..."
91
+Basic.AutoConfig.TestPage.TestingRes="Çözünürlükler test ediliyor, bu birkaç dakika alabilir..."
92
+Basic.AutoConfig.TestPage.TestingRes.Fail="Kodlayıcı başlatılamadı"
93
+Basic.AutoConfig.TestPage.TestingRes.Resolution="%1x%2 %3 FPS test ediliyor..."
94
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Yayın Kodlayıcı"
95
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Kayıt Kodlayıcı"
96
+Basic.AutoConfig.TestPage.Result.Header="Program tahmin edilen bu ayarların sizin için en uygunu olduğunu belirledi:"
97
+Basic.AutoConfig.TestPage.Result.Footer="Bu ayarları kullanmak için, Ayarları Uygula'ya tıklayın. Sihirbazı yeniden yapılandırmak ve denemek için Geri'ye tıklayın. Ayarları kendiniz elle yapılandırmak için İptal'e tıklayın ve Ayarlar'ı açın."
98
+
99
+Basic.Stats="İstatistikler"
100
+Basic.Stats.CPUUsage="İşlemci Kullanımı"
101
+Basic.Stats.HDDSpaceAvailable="Mevcut HDD alanı"
102
+Basic.Stats.MemoryUsage="Bellek Kullanımı"
103
+Basic.Stats.AverageTimeToRender="Kare işleme için ortalama süre"
104
+Basic.Stats.SkippedFrames="Kodlama gecikmesi nedeniyle atlanan kareler"
105
+Basic.Stats.MissedFrames="İşleme gecikmesi nedeniyle kaçan kareler"
106
+Basic.Stats.Output.Stream="Yayın"
107
+Basic.Stats.Output.Recording="Kayıt"
108
+Basic.Stats.Status="Durum"
109
+Basic.Stats.Status.Recording="Kaydediliyor"
110
+Basic.Stats.Status.Live="CANLI"
111
+Basic.Stats.Status.Reconnecting="Yeniden bağlanıyor"
112
+Basic.Stats.Status.Inactive="Etkin değil"
113
+Basic.Stats.DroppedFrames="Atlanan Kareler (Ağ)"
114
+Basic.Stats.MegabytesSent="Toplam Veri Çıkışı"
115
+Basic.Stats.Bitrate="Bit Hızı"
116
 
117
 Updater.Title="Yeni güncelleme mevcut"
118
 Updater.Text="Mevcut yeni bir güncelleme var:"
119
@@ -110,17 +199,19 @@
120
 ConfirmRemove.Text="'$1''i kaldırmak istediğinizden emin misiniz?"
121
 ConfirmRemove.TextMultiple="%1 öğeyi kaldırmak istediğinizden emin misiniz?"
122
 
123
-Output.StartStreamFailed="Yayın işlemi başarısız oldu"
124
-Output.StartRecordingFailed="Kayıt işlemi başarısız oldu"
125
-Output.StartReplayFailed="Tekrar oynatma arabelleği başarısız oldu"
126
+Output.StartStreamFailed="Yayın başlatılamadı"
127
+Output.StartRecordingFailed="Kayıt başlatılamadı"
128
+Output.StartReplayFailed="Tekrar oynatma arabelleği başlatılamadı"
129
+Output.StartFailedGeneric="Çıkışı başlatma başarısız oldu. Detaylar için lütfen günlüğe bakın: \n\nNVENC veya AMD kodlayıcılarını kullanıyorsanız, video sürücülerinin güncel olduğundan emin olun."
130
 
131
 Output.ConnectFail.Title="Bağlantı kurulamadı"
132
 Output.ConnectFail.BadPath="Bağlantı adresiniz geçersiz. Ayarlarınızı kontrol edin ve geçerli bir adres giriniz."
133
 Output.ConnectFail.ConnectFailed="Sunucuya bağlanılamadı"
134
+Output.ConnectFail.InvalidStream="Belirtilen kanal veya yayın anahtarına erişilemedi, lütfen yayın anahtarınızı iyi kontrol edin. Eğer doğruysa, sunucuya bağlanırken sorun oluyor olabilir."
135
 Output.ConnectFail.Error="Sunucuya bağlanmaya çalışırken beklenmeyen bir hata oluştu.  Daha fazla bilgi için günlük dosyasına bakınız."
136
 Output.ConnectFail.Disconnected="Sunucu bağlantısı kesildi."
137
 
138
-Output.RecordFail.Title="Kayıt işlemi başarısız oldu"
139
+Output.RecordFail.Title="Kayıt başlatılamadı"
140
 Output.RecordFail.Unsupported="Çıkış biçimi ya desteklenmiyor ya da birden fazla sesi desteklemiyor. Lütfen ayarlarınızı kontrol edip tekrar deneyin."
141
 Output.RecordNoSpace.Title="Yetersiz disk alanı"
142
 Output.RecordNoSpace.Msg="Kayıt'aa devam etmek yeterli disk alanı yok."
143
@@ -373,6 +464,7 @@
144
 Basic.Settings.General.Theme="Tema"
145
 Basic.Settings.General.Language="Dil"
146
 Basic.Settings.General.EnableAutoUpdates="Başlangıçta güncellemeleri otomatik olarak kontrol et"
147
+Basic.Settings.General.OpenStatsOnStartup="Başlangıçta istatistikler iletişim kutusunu aç"
148
 Basic.Settings.General.WarnBeforeStartingStream="Yayın başlatırken onay iletişim kutusunu göster"
149
 Basic.Settings.General.WarnBeforeStoppingStream="Yayın durduğunda onay iletişim kutusunu göster"
150
 Basic.Settings.General.Projectors="Projektörler"
151
@@ -419,8 +511,13 @@
152
 Basic.Settings.Output.Simple.RecordingQuality.Small="Yüksek Kalite, Normal Dosya Boyutu"
153
 Basic.Settings.Output.Simple.RecordingQuality.HQ="Aynı Kaliteye Yakın, Büyük Dosya Boyutu"
154
 Basic.Settings.Output.Simple.RecordingQuality.Lossless="Kayıpsız Kalite, Çok Büyük Dosya Boyutu"
155
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Uyarı: Yayın video bit hızı  %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
156
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Uyarı: Yayın audio bit hızı  %1 olarak ayarlanacak, bu şu anki yayın hizmeti için üst sınırdır. Eğer %1 değerinin üstüne çıkmak istediğinizden eminseniz, gelişmiş kodlayıcı seçeneklerini etkinleştirin ve \"Yayın hizmetini bit hızı sınırlarına zorla\" işaretini kaldırın."
157
+Basic.Settings.Output.Simple.Warn.Encoder="Uyarı: Bir yazılım kodlayıcı ile yayın kalitesinden farklı kayıt yapmak eğer aynı anda hem kayıt hem de yayın yapıyorsanız ilave CPU kullanımı gerektirecektir."
158
+Basic.Settings.Output.Simple.Warn.Lossless="Uyarı: Kayıpsız kalite muazzam büyük dosya boyutları oluşturur! Kayıpsız kalite, yüksek çözünürlüklerde ve kare hızlarında, dakikada 7 gigabyte'a kadar disk alanı kullanabilir. Kayıpsız, kullanılabilir disk alanınız çok büyük değilse, uzun kayıtlar için tavsiye edilmez."
159
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Kayıpsız kalitede kullanmak istediğinizden emin misiniz?"
160
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Kayıpsız kalite uyarısı!"
161
+Basic.Settings.Output.Simple.Warn.MultipleQSV="Uyarı: Aynı anda yayın ve kayıt yaparken çoklu ayrı QSV kodlayıcı kullanamazsınız. Eğer aynı anda yayın ve kayıt yapmak istiyorsanız, lütfen kayıt kodlayıcısını yada yayın kodlayıcısını değiştirin."
162
 Basic.Settings.Output.Simple.Encoder.Software="Yazılım (x264)"
163
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Donanım (QSV)"
164
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Donanım (AMD)"
165
@@ -468,7 +565,7 @@
166
 Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Kapsayıcı Biçimi Açıklaması"
167
 Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Dosya yolu veya URL'den tahmini Video/Ses Kodeksi"
168
 Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Varsayılan Kodlayıcı"
169
-Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Kodlayıcı Devredışı"
170
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Kodlayıcıyı Devre Dışı Bırak"
171
 Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video Kodlayıcı"
172
 Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Video Kodlayıcı Ayarları (var ise)"
173
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Ses Kodlayıcı"
174
@@ -482,18 +579,18 @@
175
 FilenameFormatting.TT="%CCYY   Yıl, dört hane\n%YY     Yıl, son iki hane (00-99)\n%MM      Ay rakamla (01-12)\n%DD     Ayın günü, önü-sıfırlı (01-31)\n%hh     Saat 24s formatlı (00-23)\n%mm      Dakika (00-59)\n%ss     Saniye (00-61)\n%%      A % sign\n%a        Kısaltılmış gün adı\n%A     Tam gün adı\n%b     Kısaltılmış ay adı\n%B      Tam ay adı\n%d      Ayın günü, önü-sıfırlı (01-31)\n%H      Saat 24s formatlı (00-23)\n%I       Saat 12s formatlı (01-12)\n%m       Ay rakamla (01-12)\n%M      Dakika (00-59)\n%p      AM veya PM belirteci\n%S        Saniye (00-61)\n%y      Yıl, son iki hane (00-99)\n%Y       Yıl\n%z     UTC'ye göre ISO 8601 farkı veya zaman dilimi\n      adı veya kısaltması\n%Z     Zaman dilimi adı veya kısaltması\n"
176
 
177
 Basic.Settings.Video="Video"
178
-Basic.Settings.Video.Adapter="Video Bağdaştırıcı:"
179
-Basic.Settings.Video.BaseResolution="Temel (Tuval) Çözünürlüğü:"
180
-Basic.Settings.Video.ScaledResolution="Çıkış (Boyutlandırılmış) Çözünürlüğü:"
181
-Basic.Settings.Video.DownscaleFilter="Boyut Azaltma Filtresi:"
182
+Basic.Settings.Video.Adapter="Video Bağdaştırıcı"
183
+Basic.Settings.Video.BaseResolution="Temel (Tuval) Çözünürlüğü"
184
+Basic.Settings.Video.ScaledResolution="Çıkış (Boyutlandırılmış) Çözünürlüğü"
185
+Basic.Settings.Video.DownscaleFilter="Boyut Azaltma Filtresi"
186
 Basic.Settings.Video.DisableAeroWindows="Aero'yu Devre Dışı Bırak (yalnızca Windows)"
187
-Basic.Settings.Video.FPS="FPS:"
188
+Basic.Settings.Video.FPS="FPS"
189
 Basic.Settings.Video.FPSCommon="Ortak FPS Değerleri"
190
 Basic.Settings.Video.FPSInteger="Tamsayı FPS değeri"
191
 Basic.Settings.Video.FPSFraction="Kesirli FPS değeri"
192
-Basic.Settings.Video.Numerator="Pay:"
193
-Basic.Settings.Video.Denominator="Payda:"
194
-Basic.Settings.Video.Renderer="Yorumlayıcı:"
195
+Basic.Settings.Video.Numerator="Pay"
196
+Basic.Settings.Video.Denominator="Payda"
197
+Basic.Settings.Video.Renderer="İşleyici"
198
 Basic.Settings.Video.InvalidResolution="Geçersiz çözünürlük değeri. [Genişlik]x[Yükseklik] şeklinde olmalıdır. (örnek 1920x1080)"
199
 Basic.Settings.Video.CurrentlyActive="Video çıkışı şu anda etkin durumda.  Video ayarlarını değiştirmek için lütfen bütün çıkışları kapalı duruma getirin."
200
 Basic.Settings.Video.DisableAero="Aero'yu Devre Dışı Bırak"
201
@@ -531,6 +628,7 @@
202
 Basic.Settings.Advanced.Video.ColorRange.Full="Tam"
203
 Basic.Settings.Advanced.Audio.MonitoringDevice="Ses İzleme Aygıtı"
204
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Varsayılan"
205
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Windows ses alçaltmasını devre dışı bırak"
206
 Basic.Settings.Advanced.StreamDelay="Yayın Gecikmesi"
207
 Basic.Settings.Advanced.StreamDelay.Duration="Süre (saniye)"
208
 Basic.Settings.Advanced.StreamDelay.Preserve="Tatbik ederken kesim noktasını (gecikme artışı) koru"
209
@@ -610,3 +708,6 @@
210
 OutputWarnings.MultiTrackRecording="Uyarı: Bazı biçimler (FLV gibi) kayıt başına birden fazla parçayı desteklemez"
211
 OutputWarnings.MP4Recording="Uyarı: MP4'e kaydedilen kayıtlar eğer dosya sonlandırılamazsa kurtarılamaz (örneğin: Mavi Hata Ekranı, güç kesintisi v.b.). Eğer çoklu ses izi kaydetmek istiyorsanız MKV kullanmayı düşünün ve bittikten sonra sonra kayıtı mp4'e remuxlayabilirsiniz (Dosya->Remux Kayıtları)"
212
 
213
+FinalScene.Title="Sahneyi Sil"
214
+FinalScene.Text="En az bir sahne olması gerekiyor."
215
+
216
obs-studio-18.0.2.tar.xz/UI/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/uk-UA.ini Changed
158
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="Повноекранний Проектор (вікно Перегляду)"
3
 SceneProjector="Повноекранний Проектор (Сцена)"
4
 SourceProjector="Повноекранний Проектор (Джерело)"
5
+PreviewWindow="Віконний Проектор (вікно Перегляду)"
6
+SceneWindow="Віконний Проектор (Сцена)"
7
+SourceWindow="Віконний Проектор (Джерело)"
8
 Clear="Очистити"
9
 Revert="Відмінити"
10
 Show="Показати"
11
@@ -56,8 +59,94 @@
12
 ReplayBuffer="Буфер Повторів"
13
 Import="Імпорт"
14
 Export="Експорт"
15
-
16
-Updater.Title="Доступне оновлення"
17
+Copy="Копіювати"
18
+Paste="Вставити"
19
+PasteReference="Встивити (як вже існуюче)"
20
+PasteDuplicate="Вставити (як повну копію)"
21
+RemuxRecordings="Ремультиплексація Записів"
22
+Next="Далі"
23
+Back="Назад"
24
+
25
+AlreadyRunning.Title="OBS вже виконується"
26
+AlreadyRunning.Text="OBS вже запущено! Тільки якщо ви дійсно не намагаєтесь цього зробити, будь ласка позакривайте всі відкриті OBS перед тим як запускати нову копію. Якщо OBS налаштовано згортатися в трей, перевірте чи не виконується він там й досі."
27
+AlreadyRunning.LaunchAnyway="Все одно запустити"
28
+
29
+Copy.Filters="Копіювати фільтри"
30
+Paste.Filters="Вставити фільтри"
31
+
32
+BandwidthTest.Region="Регіон"
33
+BandwidthTest.Region.US="США"
34
+BandwidthTest.Region.EU="Європа"
35
+BandwidthTest.Region.Asia="Азія"
36
+BandwidthTest.Region.Other="Інше"
37
+
38
+Basic.FirstStartup.RunWizard="Бажаєте запустити майстр з автонастроювання? Можна також вручну настроїти параметри, натиснувши кнопку Налаштування в головному вікні."
39
+Basic.FirstStartup.RunWizard.BetaWarning="(Примітка: майстр з автонастроювання наразі в бета-версії)"
40
+Basic.FirstStartup.RunWizard.NoClicked="Якщо ви передумаєте, ви можете повторно запустити майстер з автонастроювання у будь-який час з меню Додаткові засоби."
41
+
42
+Basic.AutoConfig="Майстер з автонастроювання"
43
+Basic.AutoConfig.Beta="Майстер з автонастроювання (бета-версія)"
44
+Basic.AutoConfig.ApplySettings="Застосувати Налаштування"
45
+Basic.AutoConfig.StartPage="Інформація про використання"
46
+Basic.AutoConfig.StartPage.SubTitle="Вкажіть, для чого вам потрібна ця програма"
47
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Оптимізувати для трансляцій, запис буде вторинний"
48
+Basic.AutoConfig.StartPage.PrioritizeRecording="Оптимізувати тільки для запису, трансляції мене не хвилюють"
49
+Basic.AutoConfig.VideoPage="Налаштування Відео"
50
+Basic.AutoConfig.VideoPage.SubTitle="Вкажіть бажані налаштування Відео, які ви б хотіли використовувати"
51
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Використовувати поточне (%1x%2)"
52
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Дисплей %1 (%2x%3)"
53
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Використовувати поточне (%1)"
54
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 або 30, але краще 60, коли це можливо"
55
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 або 30, але краще висока роздільна здатність"
56
+Basic.AutoConfig.VideoPage.CanvasExplanation="Примітка: Роздільна здатність (Полотно), не обов'язково повинно дорівнювати роздільної здатності з якою ви плануєте транслювати  або записувати.  Роздільну здатність фактичної трансляції/запису може бути зменшено від роздільною здатності полотна задля зменшення використання ресурсів або зменшення вимог до бітрейту."
57
+Basic.AutoConfig.StreamPage="Інформація про Трансляцію"
58
+Basic.AutoConfig.StreamPage.SubTitle="Будь ласка, введіть інформацію щодо вашої Трансляції"
59
+Basic.AutoConfig.StreamPage.Service="Сервіс"
60
+Basic.AutoConfig.StreamPage.Service.ShowAll="Показати всі..."
61
+Basic.AutoConfig.StreamPage.Server="Сервер"
62
+Basic.AutoConfig.StreamPage.StreamKey="Ключ трансляції"
63
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Посилання)"
64
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Оцінка бітрейту за допомогою тесту з пропускної здатності (це може зайняти кілька хвилин)"
65
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Віддати перевагу апаратному енкодеру"
66
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Апаратне кодування зменшує використання ЦП, але може вимагати більший бітрейт для отримання того ж рівня якості."
67
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Попередження, Трансляція"
68
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Тест пропускної здатності буде транслювати випадкові відеодані без аудіо на ваш канал.  Якщо ви можете, рекомендується, щоб ви тимчасово вимкнути збереження відео потоків і встановили потік як приватний допоки тест не буде завершено. Продовжити?"
69
+Basic.AutoConfig.TestPage="Остаточні результати"
70
+Basic.AutoConfig.TestPage.SubTitle.Testing="Програма зараз виконує набір тестів, щоб знайти ідеальні налаштування"
71
+Basic.AutoConfig.TestPage.SubTitle.Complete="Тестування завершено"
72
+Basic.AutoConfig.TestPage.TestingBandwidth="Тест пропускної здатності триває, це може зайняти кілька хвилин..."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Підключення до: %1..."
74
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Не вдалося підключитися до жодного з серверів, будь ласка, перевірте підключення до Інтернету і спробуйте знову."
75
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Тестування пропускної здатності для: %1"
76
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Тестування енкодера трансляцій, це може зайняти хвилину..."
77
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Тестування енкодера записів, це може зайняти хвилину..."
78
+Basic.AutoConfig.TestPage.TestingRes="Тестування роздільної здатності, це може зайняти кілька хвилин..."
79
+Basic.AutoConfig.TestPage.TestingRes.Fail="Не вдалося запустити енкодер"
80
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Тестування %1x%2 %3 Кадр/сек..."
81
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Енкодер Трансляцій"
82
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Енкодер Записів"
83
+Basic.AutoConfig.TestPage.Result.Header="Програма визначила, що дані налаштування є ідеальним для вас:"
84
+Basic.AutoConfig.TestPage.Result.Footer="Щоб використовувати ці параметри, натисніть кнопку Застосувати Налаштування.  Щоб переналаштувати майстра та спробувати знов, натисніть кнопку Назад.  Можна вручну вказати всі параметри, для цього натисніть кнопку Скасувати та відкрите Налаштування."
85
+
86
+Basic.Stats="Статистика"
87
+Basic.Stats.CPUUsage="Використання ЦП"
88
+Basic.Stats.HDDSpaceAvailable="HDD, вільне місце"
89
+Basic.Stats.MemoryUsage="Використання пам'яті"
90
+Basic.Stats.AverageTimeToRender="Середній час побудови кадру"
91
+Basic.Stats.SkippedFrames="Кадри пропущені через перевантаження кодування"
92
+Basic.Stats.MissedFrames="Кадри пропущені через перевантаження візуалізації"
93
+Basic.Stats.Output.Stream="Трансляція"
94
+Basic.Stats.Output.Recording="Запис"
95
+Basic.Stats.Status="Стан"
96
+Basic.Stats.Status.Recording="Йде запис"
97
+Basic.Stats.Status.Live="НАЖИВО"
98
+Basic.Stats.Status.Reconnecting="Повторне підключення"
99
+Basic.Stats.Status.Inactive="Неактивно"
100
+Basic.Stats.DroppedFrames="Пропущено кадрів (мережа)"
101
+Basic.Stats.MegabytesSent="Загалом до Виводу"
102
+Basic.Stats.Bitrate="Бітрейт"
103
+
104
+Updater.Title="З'явилось оновлення"
105
 Updater.Text="Існує нове оновлення:"
106
 Updater.UpdateNow="Оновити зараз"
107
 Updater.RemindMeLater="Нагадати пізніше"
108
@@ -375,6 +464,7 @@
109
 Basic.Settings.General.Theme="Тема"
110
 Basic.Settings.General.Language="Мова"
111
 Basic.Settings.General.EnableAutoUpdates="Автоматично перевіряти наявність оновлень під час запуску"
112
+Basic.Settings.General.OpenStatsOnStartup="Відкривати вікно статистики під час запуску"
113
 Basic.Settings.General.WarnBeforeStartingStream="Показувати підтвердження для початку трансляції"
114
 Basic.Settings.General.WarnBeforeStoppingStream="Показувати підтвердження для закінчення трансляції"
115
 Basic.Settings.General.Projectors="Проектор"
116
@@ -489,18 +579,18 @@
117
 FilenameFormatting.TT="%CCYY   Рік, чотири цифри\n%YY      Рік, останні дві цифри (00-99)\n%MM     Місяць за номером (01-12)\n%DD      День місяця, ноль попереду (01-31)\n%hh     Години у 24-год. форматі (00-23)\n%mm       Мінути (00-59)\n%ss     Секунди (00-61)\n%%     Знак % \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     ISO 8601 поправка від UTC або часовий\n     пояс чи абревіатура\n%Z     Часовий пояс чи абревіатура\n"
118
 
119
 Basic.Settings.Video="Відео"
120
-Basic.Settings.Video.Adapter="Відеокарта:"
121
-Basic.Settings.Video.BaseResolution="Роздільна здатність (Полотно):"
122
-Basic.Settings.Video.ScaledResolution="Роздільна здатність (Вивід):"
123
-Basic.Settings.Video.DownscaleFilter="Фільтр масштабування:"
124
+Basic.Settings.Video.Adapter="Відеокарта"
125
+Basic.Settings.Video.BaseResolution="Роздільна здатність (Полотно)"
126
+Basic.Settings.Video.ScaledResolution="Роздільна здатність (Вивід)"
127
+Basic.Settings.Video.DownscaleFilter="Фільтр масштабування"
128
 Basic.Settings.Video.DisableAeroWindows="Вимкнути Aero (лише для Windows)"
129
-Basic.Settings.Video.FPS="Кадрів в секунду:"
130
+Basic.Settings.Video.FPS="Кадрів в секунду"
131
 Basic.Settings.Video.FPSCommon="Кадр/сек, загальні значення"
132
 Basic.Settings.Video.FPSInteger="Кадр/сек, цілі значення"
133
 Basic.Settings.Video.FPSFraction="Кадр/сек, дробові значення"
134
-Basic.Settings.Video.Numerator="Чисельник:"
135
-Basic.Settings.Video.Denominator="Знаменник:"
136
-Basic.Settings.Video.Renderer="Візуалізація:"
137
+Basic.Settings.Video.Numerator="Чисельник"
138
+Basic.Settings.Video.Denominator="Знаменник"
139
+Basic.Settings.Video.Renderer="Візуалізація"
140
 Basic.Settings.Video.InvalidResolution="Неприпустиме значення роздільної здатності.  Повинно бути [ширина]x[висота] (тобто, 1920x1080)"
141
 Basic.Settings.Video.CurrentlyActive="Вивід відео в даний час активний.  Будь ласка, зупинить весь вивід відео, щоб змінити настройки відео."
142
 Basic.Settings.Video.DisableAero="Вимкнути Aero"
143
@@ -538,6 +628,7 @@
144
 Basic.Settings.Advanced.Video.ColorRange.Full="Повний"
145
 Basic.Settings.Advanced.Audio.MonitoringDevice="Пристрій Тестування Аудіо (на слух)"
146
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="За замовчанням"
147
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Вимкнути у Windows опцію зменшення гучності під час зв'язку"
148
 Basic.Settings.Advanced.StreamDelay="Затримка трансляції"
149
 Basic.Settings.Advanced.StreamDelay.Duration="Тривалість (секунди)"
150
 Basic.Settings.Advanced.StreamDelay.Preserve="Зберегати точку роз'єднання (збільшує затримку) під час встановлення нового зв'язку"
151
@@ -617,3 +708,6 @@
152
 OutputWarnings.MultiTrackRecording="Попередження: Певні формати (наприклад, FLV) не підтримують кілька треків на запис"
153
 OutputWarnings.MP4Recording="Попередження: Запис в MP4 може стати невиправно пошкодженим, якщо файл не буде завершено (наприклад, в результаті BSOD, втрати живлення і т.п.). Якщо ви хочете, мати запис декількох звукових доріжок спробуйте використати MKV та зробіть ремультиплексацію запису до mp4 після того, як запис буде закінчено (Файл->Ремультиплексація Записів)"
154
 
155
+FinalScene.Title="Видалення сцени"
156
+FinalScene.Text="Повинна бути принаймні одна сцена."
157
+
158
obs-studio-18.0.2.tar.xz/UI/data/locale/vi-VN.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/vi-VN.ini Changed
315
 
1
@@ -52,11 +52,111 @@
2
 Hours="Giờ"
3
 Minutes="Phút"
4
 Seconds="Giây"
5
-
6
+Deprecated="Dừng cập nhật"
7
+ReplayBuffer="Replay Buffer"
8
+Import="Nhập"
9
+Export="Xuất"
10
+Copy="Chép"
11
+Paste="Dán"
12
+PasteReference="Dán (Tham khảo)"
13
+PasteDuplicate="Dán (Bản sao)"
14
+RemuxRecordings="Remux video"
15
+Next="Tiếp tục"
16
+Back="Quay lại"
17
+
18
+AlreadyRunning.Title="OBS đã chạy"
19
+AlreadyRunning.Text="OBS đã chạy rồi!  Trừ khi bạn muốn làm điều này, xin vui lòng tắt mọi chương trình hiện tại của OBS trước khi cố gắng chạy một chương trình mới.  Nếu bạn có OBS thiết lập để thu nhỏ trên khay hệ thống, xin vui lòng kiểm tra để xem nếu nó vẫn đang chạy hay không."
20
+AlreadyRunning.LaunchAnyway="Khởi động luôn"
21
+
22
+Copy.Filters="Sao chép các bộ lọc"
23
+Paste.Filters="Dán các bộ lọc"
24
+
25
+BandwidthTest.Region="Khu vực"
26
+BandwidthTest.Region.US="Hoa Kỳ"
27
+BandwidthTest.Region.EU="Châu Âu"
28
+BandwidthTest.Region.Asia="Châu Á"
29
+BandwidthTest.Region.Other="Khác"
30
+
31
+Basic.FirstStartup.RunWizard="Bạn có muốn chạy trình cấu hình tự động?  Bạn có thể cấu hình bằng tay cài đặt của bạn bằng cách nhấn vào nút Cài đặt trong cửa sổ chính."
32
+Basic.FirstStartup.RunWizard.BetaWarning="(Lưu ý: Trình cấu hình tự động đang trong phiên bản beta)"
33
+Basic.FirstStartup.RunWizard.NoClicked="Nếu bạn thay đổi, bạn có thể chạy trình cấu hình tự động bất kỳ lúc nào từ menu Công cụ."
34
+
35
+Basic.AutoConfig="Trình cấu hình tự động"
36
+Basic.AutoConfig.Beta="Trình cấu hình tự động (Beta)"
37
+Basic.AutoConfig.ApplySettings="Áp dụng các thiết lập"
38
+Basic.AutoConfig.StartPage="Thông tin sử dụng"
39
+Basic.AutoConfig.StartPage.SubTitle="Xác định bạn muốn sử dụng chương trình cho mục đích gì"
40
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Tối ưu hóa cho streaming, quay phim là thứ cấp"
41
+Basic.AutoConfig.StartPage.PrioritizeRecording="Tối ưu hóa chỉ cho quay phim, tôi sẽ không streaming"
42
+Basic.AutoConfig.VideoPage="Cài đặt video"
43
+Basic.AutoConfig.VideoPage.SubTitle="Chỉ rõ các thiết lập video bạn muốn sử dụng"
44
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Sử dụng hiện tại (%1x%2)"
45
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Màn hình %1 (%2x%3)"
46
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Sử dụng hiện tại (%1)"
47
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 hoặc 30, nhưng ưu tiên chọn 60 khi có thể"
48
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 hoặc 30, nhưng ưu tiên độ phân giải cao"
49
+Basic.AutoConfig.StreamPage="Thông tin stream"
50
+Basic.AutoConfig.StreamPage.SubTitle="Vui lòng nhập thông tin máy chủ stream của bạn"
51
+Basic.AutoConfig.StreamPage.Service="Dịch vụ"
52
+Basic.AutoConfig.StreamPage.Service.ShowAll="Hiện tất cả..."
53
+Basic.AutoConfig.StreamPage.Server="Máy chủ"
54
+Basic.AutoConfig.StreamPage.StreamKey="Khóa stream"
55
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Liên kết)"
56
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Ước tính bitrate với thử nghiệm băng thông (có thể mất vài phút)"
57
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Ưu tiên mã hóa bằng phần cứng"
58
+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 bitrate để có được chất lượng tương đương."
59
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Cảnh báo stream"
60
+Basic.AutoConfig.TestPage="Kết quả cuối cùng"
61
+Basic.AutoConfig.TestPage.SubTitle.Complete="Thử nghiệm hoàn tất"
62
+Basic.AutoConfig.TestPage.TestingBandwidth="Đang kiểm tra băng thông, điều này có thể mất vài phút..."
63
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Kết nối tới: %1..."
64
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Không thể kết nối tới tất cả các máy chủ. Vui lòng kiểm tra kết nối và thử lại."
65
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Thử nghiệm băng thông cho: %1"
66
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Thử mã hóa stream, điều này có thể mất vài phút..."
67
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Thử mã hóa quay video, điều này có thể mất vài phút..."
68
+Basic.AutoConfig.TestPage.TestingRes="Kiểm tra độ phân giải, điều này có thể mất vài phút..."
69
+Basic.AutoConfig.TestPage.TestingRes.Fail="Thất bại trong việc bắt đầu trình mã hóa"
70
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Thử nghiệm %1x%2 %3 FPS..."
71
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Mã hóa streaming"
72
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Mã hóa quay video"
73
+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:"
74
+Basic.AutoConfig.TestPage.Result.Footer="Để sử dụng các thiết lập này, nhấp vào Áp dụng cài đặt.  Để cấu hình lại và thử lại, bấm Lùi lại.  Để cấu hình thiết lập bằng tay, bấm Hủy bỏ và mở Cài đặt."
75
+
76
+Basic.Stats="Thống kê"
77
+Basic.Stats.CPUUsage="Sử dụng CPU"
78
+Basic.Stats.HDDSpaceAvailable="Không gian ổ cứng còn trống"
79
+Basic.Stats.MemoryUsage="Bộ nhớ đã sử dụng"
80
+Basic.Stats.AverageTimeToRender="Thời gian trung bình để vẽ hình"
81
+Basic.Stats.SkippedFrames="Khung hình bị bỏ qua do mã hóa bị lag"
82
+Basic.Stats.MissedFrames="Khung hình bị mất do mã hóa bị lag"
83
+Basic.Stats.Output.Stream="Stream"
84
+Basic.Stats.Output.Recording="Quay video"
85
+Basic.Stats.Status="Trạng thái"
86
+Basic.Stats.Status.Recording="Đang quay"
87
+Basic.Stats.Status.Live="TRỰC TIẾP"
88
+Basic.Stats.Status.Reconnecting="Đang kết nối lại"
89
+Basic.Stats.Status.Inactive="Không hoạt động"
90
+Basic.Stats.DroppedFrames="Khung hình bị rớt (Mạng)"
91
+Basic.Stats.MegabytesSent="Tổng dung lượng"
92
+Basic.Stats.Bitrate="Bitrate"
93
+
94
+Updater.Title="Có bản cập nhật mới"
95
+Updater.Text="Có sẵn một bản cập nhật mới:"
96
+Updater.UpdateNow="Cập nhật ngay"
97
+Updater.RemindMeLater="Hỏi lại sau"
98
+Updater.Skip="Bỏ qua phiên bản"
99
+Updater.Running.Title="Chương trình đang kích hoạt"
100
+Updater.Running.Text="Đầu ra đang được kích hoạt, vui lòng tắt bất kỳ đầu ra nào đang hoạt động trước khi bấm Cập nhật"
101
+Updater.NoUpdatesAvailable.Title="Không có cập nhật mới"
102
+Updater.NoUpdatesAvailable.Text="Không có bản cập nhật mới"
103
+Updater.FailedToLaunch="Thất bại khi mở trình cập nhật"
104
+Updater.GameCaptureActive.Title="Quay video đang hoạt động"
105
+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."
106
 
107
 QuickTransitions.SwapScenes="Hoán đổi cảnh Xem trước/Đầu ra sau khi Chuyển cảnh"
108
 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."
109
 QuickTransitions.DuplicateScene="Tạo bản sao cảnh"
110
+QuickTransitions.EditProperties="Bản sao nguồn"
111
 QuickTransitions.HotkeyName="C. cảnh nhanh: %1"
112
 
113
 Basic.AddTransition="Thêm cấu hình chuyển cảnh"
114
@@ -89,6 +189,10 @@
115
 ConfirmRemove.Text="Bạn có chắc bạn muốn loại bỏ '$1' không?"
116
 ConfirmRemove.TextMultiple="Bạn có chắc bạn muốn xóa %1 nội dung không?"
117
 
118
+Output.StartStreamFailed="Không thể bắt đầu streaming"
119
+Output.StartRecordingFailed="Không thể bắt đầu quay video"
120
+Output.StartReplayFailed="Không thể khởi động replay buffer"
121
+Output.StartFailedGeneric="Bắt đầu đầu ra đã thất bại. Vui lòng kiểm tra các bản ghi để biết thêm chi tiết.\n\nGhi chú: nếu bạn đang sử dụng bộ mã hóa NVENC hoặc AMD, hãy chắc chắn rằng các trình điều khiển GPU được cập nhật phiên bản mới nhất."
122
 
123
 Output.ConnectFail.Title="Không thể kết nối"
124
 Output.ConnectFail.BadPath="URL không hợp lệ của đường dẫn hoặc kết nối.  Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng họ là hợp lệ."
125
@@ -103,6 +207,8 @@
126
 Output.RecordNoSpace.Msg="Không còn đủ không gian đĩa để tiếp tục ghi âm."
127
 Output.RecordError.Title="Lỗi ghi âm"
128
 Output.RecordError.Msg="Một lỗi không xác định xảy ra trong khi ghi âm."
129
+Output.ReplayBuffer.NoHotkey.Title="Không có hotkey!"
130
+Output.ReplayBuffer.NoHotkey.Msg="Không hotkey lưu replay buffer.  Vui lòng đặt hotkey \"Lưu\" để sử dụng để lưu video."
131
 
132
 Output.BadPath.Title="Đường dẫn tệp xấu"
133
 Output.BadPath.Text="Đường dẫn đầu ra của cấu hình tệp không hợp lệ.  Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng một đường dẫn hợp lệ tập tin đã được thiết lập."
134
@@ -162,6 +268,8 @@
135
 Deinterlacing.Yadif="Yadif"
136
 Deinterlacing.Yadif2x="Yadif 2x"
137
 
138
+VolControl.Mute="Tắt tiếng '%1'"
139
+VolControl.Properties="Thuộc tính '%1'"
140
 
141
 Basic.Main.AddSceneDlg.Title="Thêm cảnh"
142
 Basic.Main.AddSceneDlg.Text="Vui lòng nhập tên của cảnh"
143
@@ -173,10 +281,10 @@
144
 
145
 Basic.Main.RenameSceneCollection.Title="Đổi tên cảnh bộ sưu tập"
146
 
147
-AddProfile.Title="Thêm hồ sơ"
148
+AddProfile.Title="Thêm cấu hình"
149
 AddProfile.Text="Vui lòng nhập tên cấu hình"
150
 
151
-RenameProfile.Title="Đổi tên hồ sơ"
152
+RenameProfile.Title="Đổi tên cấu hình"
153
 
154
 Basic.Main.PreviewDisabled="Xem trước hiện đang vô hiệu hoá"
155
 
156
@@ -257,9 +365,12 @@
157
 Basic.Main.Sources="Nguồn"
158
 Basic.Main.Connecting="Đang kết nối..."
159
 Basic.Main.StartRecording="Bắt đầu ghi"
160
+Basic.Main.StartReplayBuffer="Bắt đầu Replay Buffer"
161
 Basic.Main.StartStreaming="Bắt đầu Streaming"
162
 Basic.Main.StopRecording="Dừng ghi"
163
 Basic.Main.StoppingRecording="Dừng ghi video..."
164
+Basic.Main.StopReplayBuffer="Dừng Replay Buffer"
165
+Basic.Main.StoppingReplayBuffer="Đang dừng Replay Buffer..."
166
 Basic.Main.StopStreaming="Ngừng Streaming"
167
 Basic.Main.StoppingStreaming="Dừng stream..."
168
 Basic.Main.ForceStopStreaming="Ngừng Streaming (huỷ chậm trễ)"
169
@@ -271,7 +382,7 @@
170
 Basic.MainMenu.File.Remux="Re&mux bản ghi"
171
 Basic.MainMenu.File.Settings="&Cài đặt"
172
 Basic.MainMenu.File.ShowSettingsFolder="Hiển thị thư mục cài đặt"
173
-Basic.MainMenu.File.ShowProfileFolder="Hiển thị thư mục hồ sơ"
174
+Basic.MainMenu.File.ShowProfileFolder="Hiển thị thư mục cấu hình"
175
 Basic.MainMenu.AlwaysOnTop="&Luôn trên đầu trang"
176
 Basic.MainMenu.File.Exit="&Thoát"
177
 
178
@@ -281,6 +392,9 @@
179
 Basic.MainMenu.Edit.UndoAction="&Hoàn tác $1"
180
 Basic.MainMenu.Edit.RedoAction="&Làm lại $1"
181
 Basic.MainMenu.Edit.LockPreview="&Khóa xem trước"
182
+Basic.MainMenu.Edit.Scale="Xem trước & co dãn"
183
+Basic.MainMenu.Edit.Scale.Window="Co dãn cửa sổ"
184
+Basic.MainMenu.Edit.Scale.Output="Đầu ra (%1x%2)"
185
 Basic.MainMenu.Edit.Transform="&Biến đổi"
186
 Basic.MainMenu.Edit.Transform.EditTransform="&Chỉnh sửa biến đổi..."
187
 Basic.MainMenu.Edit.Transform.ResetTransform="&Đặt lại biến đổi"
188
@@ -305,7 +419,13 @@
189
 Basic.MainMenu.View.StatusBar="&Thanh trạng thái"
190
 
191
 Basic.MainMenu.SceneCollection="& Bộ sưu tập cảnh"
192
-Basic.MainMenu.Profile="&Hồ sơ"
193
+Basic.MainMenu.Profile="&Cấu hình"
194
+Basic.MainMenu.Profile.Import="Nhập cấu hình"
195
+Basic.MainMenu.Profile.Export="Xuất cấu hình"
196
+Basic.MainMenu.SceneCollection.Import="Nhập bộ sưu tập cảnh"
197
+Basic.MainMenu.SceneCollection.Export="Xuất bộ sưu tập cảnh"
198
+Basic.MainMenu.Profile.Exists="Cấu hình này đã tồn tại"
199
+Basic.MainMenu.SceneCollection.Exists="Bộ sưu tập cảnh đã tồn tại"
200
 
201
 Basic.MainMenu.Tools="&Công cụ"
202
 
203
@@ -325,8 +445,19 @@
204
 Basic.Settings.General="Chung"
205
 Basic.Settings.General.Theme="Theme"
206
 Basic.Settings.General.Language="Ngôn ngữ"
207
+Basic.Settings.General.EnableAutoUpdates="Tự động kiểm tra cập nhật khi khởi động"
208
+Basic.Settings.General.OpenStatsOnStartup="Mở hộp thoại thống kê khi khởi động"
209
+Basic.Settings.General.WarnBeforeStartingStream="Hiển thị hộp thoại xác nhận khi bắt đầu stream"
210
+Basic.Settings.General.WarnBeforeStoppingStream="Hiển thị hộp thoại xác nhận khi dừng lại stream"
211
 Basic.Settings.General.HideProjectorCursor="Ẩn con trỏ chuột trên màn chiếu"
212
 Basic.Settings.General.ProjectorAlwaysOnTop="Làm cho màn chiếu luôn luôn trên đầu"
213
+Basic.Settings.General.RecordWhenStreaming="Tự động quay video khi stream"
214
+Basic.Settings.General.KeepRecordingWhenStreamStops="Quay tiếp khi dừng stream"
215
+Basic.Settings.General.ReplayBufferWhileStreaming="Tự động bắt đầu replay buffer khi stream"
216
+Basic.Settings.General.KeepReplayBufferStreamStops="Để replay buffer tiếp tục chạy khi dừng stream"
217
+Basic.Settings.General.SysTray="Khay hệ thống"
218
+Basic.Settings.General.SysTrayWhenStarted="Thu nhỏ về khay hệ thống khi bắt đầu"
219
+Basic.Settings.General.SystemTrayHideMinimize="Luôn luôn thu nhỏ về khay hệ thống thay vì thanh tác vụ"
220
 
221
 Basic.Settings.Stream="Stream"
222
 Basic.Settings.Stream.StreamType="Kiểu Stream"
223
@@ -340,6 +471,13 @@
224
 Basic.Settings.Output.Mode.Simple="Dễ sử dụng"
225
 Basic.Settings.Output.Mode.Adv="Nâng cao"
226
 Basic.Settings.Output.Mode.FFmpeg="FFmpeg đầu ra"
227
+Basic.Settings.Output.UseReplayBuffer="Bật Replay Buffer"
228
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Thời gian phát lại tối đa (Giây)"
229
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Bộ nhớ tối đa (Megabyte)"
230
+Basic.Settings.Output.ReplayBuffer.Estimate="Ước tính bộ nhớ sử dụng: %1 MB"
231
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Không thể ước tính sử dụng bộ nhớ. Xin vui lòng thiết lập giới hạn bộ nhớ tối đa."
232
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Lưu ý: Hãy chắc chắn thiết lập một hotkey cho replay buffer trong phần hotkey)"
233
+Basic.Settings.Output.ReplayBuffer.Suffix="Hậu tố"
234
 Basic.Settings.Output.Simple.SavePath="Đường dẫn ghi âm"
235
 Basic.Settings.Output.Simple.RecordingQuality="Chất lượng ghi âm"
236
 Basic.Settings.Output.Simple.RecordingQuality.Stream="Giống như dòng"
237
@@ -350,6 +488,7 @@
238
 Basic.Settings.Output.Simple.Warn.Lossless="Cảnh báo: Lossless chất lượng tạo ra kích thước tập tin rất lớn!  Lossless chất lượng có thể sử dụng upward of 7 GB không gian đĩa cho một phút ở độ phân giải cao và framerates.  Lossless không nên dùng cho bản ghi âm dài trừ khi bạn có một số lượng rất lớn của không gian đĩa sẵn dùng."
239
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Bạn có chắc bạn muốn sử dụng lossless chất lượng?"
240
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless chất lượng cảnh báo!"
241
+Basic.Settings.Output.Simple.Warn.MultipleQSV="Chú ý: Bạn không thể sử dụng nhiều mã hóa QSV khi streaming và ghi âm cùng lúc.  Nếu bạn muốn stream và quay cùng lúc, xin vui lòng thay đổi mã hóa quay video hoặc mã hóa stream."
242
 Basic.Settings.Output.Simple.Encoder.Software="Phần mềm (x 264)"
243
 Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Phần cứng (QSV)"
244
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Phần cứng (AMD)"
245
@@ -401,22 +540,24 @@
246
 Basic.Settings.Output.Adv.FFmpeg.AEncoder="Mã hóa âm thanh"
247
 Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Thiết đặt bộ mã hóa video (nếu có)"
248
 Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Muxer cài đặt (nếu có)"
249
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Thời gian đặt Keyframe (giây)"
250
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Hiển thị tất cả các bộ mã hóa (ngay cả khi không tương thích)"
251
 
252
 
253
 
254
 Basic.Settings.Video="Video"
255
-Basic.Settings.Video.Adapter="Video Adapter:"
256
-Basic.Settings.Video.BaseResolution="Cơ sở (vải) độ phân giải:"
257
-Basic.Settings.Video.ScaledResolution="Độ phân giải (Kích thước) đầu ra:"
258
-Basic.Settings.Video.DownscaleFilter="Downscale lọc:"
259
+Basic.Settings.Video.Adapter="Video Adapter"
260
+Basic.Settings.Video.BaseResolution="Cơ sở (vải) độ phân giải"
261
+Basic.Settings.Video.ScaledResolution="Độ phân giải (Kích thước) đầu ra"
262
+Basic.Settings.Video.DownscaleFilter="Downscale lọc"
263
 Basic.Settings.Video.DisableAeroWindows="Vô hiệu hóa hàng không (Windows only)"
264
-Basic.Settings.Video.FPS="FPS:"
265
+Basic.Settings.Video.FPS="FPS"
266
 Basic.Settings.Video.FPSCommon="Giá trị phổ biến khung hình/giây"
267
 Basic.Settings.Video.FPSInteger="Giá trị số nguyên FPS"
268
 Basic.Settings.Video.FPSFraction="Phân đoạn FPS giá trị"
269
-Basic.Settings.Video.Numerator="Tử số:"
270
-Basic.Settings.Video.Denominator="Mẫu số:"
271
-Basic.Settings.Video.Renderer="Renderer:"
272
+Basic.Settings.Video.Numerator="Tử số"
273
+Basic.Settings.Video.Denominator="Mẫu số"
274
+Basic.Settings.Video.Renderer="Renderer"
275
 Basic.Settings.Video.InvalidResolution="Giá trị độ phân giải không hợp lệ.  Phải là [width]x[height] (tức là năm 1920 x 1080)"
276
 Basic.Settings.Video.CurrentlyActive="Đầu ra video là hiện đang hoạt động.  Hãy tắt vào bất kỳ kết quả đầu ra để thay đổi thiết đặt video."
277
 Basic.Settings.Video.DisableAero="Vô hiệu hóa Aero"
278
@@ -452,12 +593,16 @@
279
 Basic.Settings.Advanced.Video.ColorRange="Phạm vi màu YUV"
280
 Basic.Settings.Advanced.Video.ColorRange.Partial="Một phần"
281
 Basic.Settings.Advanced.Video.ColorRange.Full="Đầy đủ"
282
+Basic.Settings.Advanced.Audio.MonitoringDevice="Thiết bị giám sát âm thanh"
283
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Mặc định"
284
 Basic.Settings.Advanced.StreamDelay="Stream trễ"
285
 Basic.Settings.Advanced.StreamDelay.Duration="Thời gian (giây)"
286
 Basic.Settings.Advanced.StreamDelay.Preserve="Giữ điểm cắt (tăng chậm trễ) khi kết nối lại"
287
 Basic.Settings.Advanced.StreamDelay.MemoryUsage="Ước tính bộ nhớ sử dụng: %1 MB"
288
 Basic.Settings.Advanced.Network="Mạng"
289
 Basic.Settings.Advanced.Network.BindToIP="Liên kết với IP"
290
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Sử dụng mã mạng mới"
291
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Chế độ độ trễ thấp"
292
 
293
 Basic.AdvAudio="Thuộc tính âm thanh nâng cao"
294
 Basic.AdvAudio.Name="Tên"
295
@@ -465,6 +610,10 @@
296
 Basic.AdvAudio.Mono="Downmix để Mono"
297
 Basic.AdvAudio.Panning="Panning"
298
 Basic.AdvAudio.SyncOffset="Bù đắp đồng bộ (ms)"
299
+Basic.AdvAudio.Monitoring="Giám sát âm thanh"
300
+Basic.AdvAudio.Monitoring.None="Tắt giám sát"
301
+Basic.AdvAudio.Monitoring.MonitorOnly="Chỉ giám sát (không âm thanh ra)"
302
+Basic.AdvAudio.Monitoring.Both="Giám sát và ra âm thanh"
303
 Basic.AdvAudio.AudioTracks="Bài hát"
304
 
305
 Basic.Settings.Hotkeys="Phím nóng"
306
@@ -523,4 +672,8 @@
307
 
308
 OutputWarnings.NoTracksSelected="Bạn phải chọn ít nhất một track"
309
 OutputWarnings.MultiTrackRecording="Chú ý: Một số định dạng (chẳng hạn như FLV) không hỗ trợ nhiều track cho mỗi video"
310
+OutputWarnings.MP4Recording="Chú ý: các bản ghi âm được lưu ở dạng MP4 sẽ không thể phục hồi nếu các tập tin không thể được hoàn thành (ví dụ như bị màn hình xanh, mất điện, vv.). Nếu bạn muốn ghi nhiều âm thanh thì xem xét sử dụng MKV và remux video sang mp4 sau khi hoàn tất (Tập tin -> Remux video)"
311
+
312
+FinalScene.Title="Xóa cảnh"
313
+FinalScene.Text="Cần có ít nhất một cảnh."
314
 
315
obs-studio-18.0.2.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/zh-CN.ini Changed
164
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="全屏投影仪(预览)"
3
 SceneProjector="全屏投影仪 (现场)"
4
 SourceProjector="全屏投影仪(源)"
5
+PreviewWindow="开窗式投影机 (预览)"
6
+SceneWindow="开窗式投影机 (场景)"
7
+SourceWindow="开窗式投影机 (源)"
8
 Clear="清除"
9
 Revert="还原"
10
 Show="显示"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="重拨缓存"
13
 Import="导入"
14
 Export="导出"
15
+Copy="复制"
16
+Paste="粘贴"
17
+PasteReference="粘贴(引用)"
18
+PasteDuplicate="粘贴(重复)"
19
+RemuxRecordings="转封装录像"
20
+Next="下一个"
21
+Back="后退"
22
+
23
+AlreadyRunning.Title="OBS 已在运行"
24
+AlreadyRunning.Text="OBS 已经在运行! 除非你想要这样做, 请在你运行一个新的 OBS 前, 关闭任何已经在运行的 OBS. 如果你有一个 OBS 设置最小化到系统托盘, 请检查他是否仍在运行."
25
+AlreadyRunning.LaunchAnyway="无论如何启动"
26
+
27
+Copy.Filters="复制筛选器"
28
+Paste.Filters="粘贴筛选器"
29
+
30
+BandwidthTest.Region="区域"
31
+BandwidthTest.Region.US="美国"
32
+BandwidthTest.Region.EU="欧洲"
33
+BandwidthTest.Region.Asia="亚洲"
34
+BandwidthTest.Region.Other="其他"
35
+
36
+Basic.FirstStartup.RunWizard="你想要运行自动配置向导吗? 你也可手动可以通过单击主窗口中的设置按钮来配置你的设置."
37
+Basic.FirstStartup.RunWizard.BetaWarning="(注意: 自动配置向导目前处于 beta 阶段)"
38
+Basic.FirstStartup.RunWizard.NoClicked="如果你改变主意, 你可以随时从工具菜单再次运行自动配置向导."
39
+
40
+Basic.AutoConfig="自动配置向导"
41
+Basic.AutoConfig.Beta="自动配置向导(Beta)"
42
+Basic.AutoConfig.ApplySettings="应用设置"
43
+Basic.AutoConfig.StartPage="使用信息"
44
+Basic.AutoConfig.StartPage.SubTitle="选择你使用此程序的目的"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="优先考虑推流, 其次是录像"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="只优先考虑录像, 我不会推流"
47
+Basic.AutoConfig.VideoPage="视频设置"
48
+Basic.AutoConfig.VideoPage.SubTitle="指定你想要使用视频设置"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="使用当前 (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="显示 %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="使用当前 (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 或 30,但尽可能选择 60"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 或 30, 但优先选择高分辨率"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="注意: canvas(base) 分辨率并非与你将要推流或者录像的分辨率相同. 你实际的推流/录像的分辨率可能会从 canvas 的分辨率缩放来减少分辨率使用或者比特率需要."
55
+Basic.AutoConfig.StreamPage="流信息"
56
+Basic.AutoConfig.StreamPage.SubTitle="请输入你的流信息"
57
+Basic.AutoConfig.StreamPage.Service="服务"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="显示全部..."
59
+Basic.AutoConfig.StreamPage.Server="服务器"
60
+Basic.AutoConfig.StreamPage.StreamKey="流密钥"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(链接)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="通过带宽测试估计比特率(可能需要几分钟)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="优先选择硬件编码"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="硬件编码降低了大多数的 CPU 使用率, 但可能需要更多的比特率, 来获得同等的质量."
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="流警告"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="带宽测试将开始串流无音频的随机视频数据。如果可以,建议你暂时关闭视频保存功能并把串流设置成私人直到测试结束。要继续吗?"
67
+Basic.AutoConfig.TestPage="最终结果"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="该程序目前正在执行一系列的测试来估计最理想的设置"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="测试完成"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="执行带宽测试, 这可能需要几分钟..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="正在连接到 %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="无法连接任何服务器, 请检查你的网络连接并重试."
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="测试带宽: %1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="测试推流编码器, 这可能需要一分钟......"
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="测试录像编码器, 这可能需要一分钟..."
76
+Basic.AutoConfig.TestPage.TestingRes="测试分辨率, 这可能需要几分钟时间......"
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="未能启动编码器"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="测试 %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="推流编码器"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="录像编码器"
81
+Basic.AutoConfig.TestPage.Result.Header="程序已确定这些估计设置是最适合你:"
82
+Basic.AutoConfig.TestPage.Result.Footer="要使用这些设置, 单击应用设置. 要重新配置向导并再试一次, 单击后退. 要自己手动配置设置, 单击取消, 然后打开设置."
83
+
84
+Basic.Stats="统计"
85
+Basic.Stats.CPUUsage="CPU 使用率"
86
+Basic.Stats.HDDSpaceAvailable="可用的硬盘空间"
87
+Basic.Stats.MemoryUsage="内存使用"
88
+Basic.Stats.AverageTimeToRender="渲染帧平均时间"
89
+Basic.Stats.SkippedFrames="由于编码延迟跳过的帧"
90
+Basic.Stats.MissedFrames="由于渲染延迟错过的帧"
91
+Basic.Stats.Output.Stream="流"
92
+Basic.Stats.Output.Recording="录像"
93
+Basic.Stats.Status="状态"
94
+Basic.Stats.Status.Recording="录像"
95
+Basic.Stats.Status.Live="实时"
96
+Basic.Stats.Status.Reconnecting="重新连接中"
97
+Basic.Stats.Status.Inactive="未激活"
98
+Basic.Stats.DroppedFrames="丢弃的帧(网络)"
99
+Basic.Stats.MegabytesSent="总数据输出"
100
+Basic.Stats.Bitrate="比特率"
101
 
102
 Updater.Title="有可用的更新"
103
 Updater.Text="有可用的新版本:"
104
@@ -291,12 +380,12 @@
105
 Basic.Main.Connecting="连接中..."
106
 Basic.Main.StartRecording="开始录制"
107
 Basic.Main.StartReplayBuffer="开始回放缓存"
108
-Basic.Main.StartStreaming="开始串流"
109
+Basic.Main.StartStreaming="开始推流"
110
 Basic.Main.StopRecording="停止录制"
111
 Basic.Main.StoppingRecording="停止录制..."
112
 Basic.Main.StopReplayBuffer="停止回放缓存"
113
 Basic.Main.StoppingReplayBuffer="正在停止回放缓存..."
114
-Basic.Main.StopStreaming="停止串流"
115
+Basic.Main.StopStreaming="停止推流"
116
 Basic.Main.StoppingStreaming="停止推流..."
117
 Basic.Main.ForceStopStreaming="停止流 (放弃延迟)"
118
 
119
@@ -375,6 +464,7 @@
120
 Basic.Settings.General.Theme="主题"
121
 Basic.Settings.General.Language="语言"
122
 Basic.Settings.General.EnableAutoUpdates="启动时自动检查更新"
123
+Basic.Settings.General.OpenStatsOnStartup="在启动时打开统计对话框"
124
 Basic.Settings.General.WarnBeforeStartingStream="启动流时显示确认对话框"
125
 Basic.Settings.General.WarnBeforeStoppingStream="停止流时显示确认对话框"
126
 Basic.Settings.General.Projectors="投影仪"
127
@@ -394,7 +484,7 @@
128
 Basic.Settings.General.SystemTrayHideMinimize="总是最小化到系统托盘, 而不是任务栏"
129
 Basic.Settings.General.SaveProjectors="退出时保存投影仪"
130
 
131
-Basic.Settings.Stream="串流"
132
+Basic.Settings.Stream="流"
133
 Basic.Settings.Stream.StreamType="串流类型"
134
 
135
 Basic.Settings.Output="输出"
136
@@ -489,9 +579,9 @@
137
 FilenameFormatting.TT="%CCYY       年, 4位\n%YY      年, 后两位 (00-99)\n%MM     月份 (01-12)\n%DD     日, 用0补充 (01-31)\n%hh        24小时制小时 (00-23)\n%mm        分钟 (00-59)\n%ss     秒 (00-61)\n%%       A % sign\n%a        缩写工作日名称\n%A     完整工作日名称\n%b     缩写月份名称\n%B      完整月份名称\n%d      日, 用0补充 (01-31)\n%H     24小时制小时 (00-23)\n%I     12小时制小时 (01-12)\n%m     月份 (01-12)\n%M      分支 (00-59)\n%p      AM 或 PM\n%S     秒 (00-61)\n%y       年, 后两位 (00-99)\n%Y      年\n%z       ISO 8601 offset from UTC 或者 时区\n        名称或缩写\n%Z       时区名称或缩写\n"
138
 
139
 Basic.Settings.Video="视频"
140
-Basic.Settings.Video.Adapter="视频适配器:"
141
-Basic.Settings.Video.BaseResolution="基础 (Canvas) 分辨率:"
142
-Basic.Settings.Video.ScaledResolution="输出 (缩放) 分辨率:"
143
+Basic.Settings.Video.Adapter="视频适配器"
144
+Basic.Settings.Video.BaseResolution="基础 (Canvas) 分辨率"
145
+Basic.Settings.Video.ScaledResolution="输出 (缩放) 分辨率"
146
 Basic.Settings.Video.DownscaleFilter="缩放过滤器"
147
 Basic.Settings.Video.DisableAeroWindows="禁用 Aero (仅限 Windows)"
148
 Basic.Settings.Video.FPS="每秒帧数:"
149
@@ -538,6 +628,7 @@
150
 Basic.Settings.Advanced.Video.ColorRange.Full="全部"
151
 Basic.Settings.Advanced.Audio.MonitoringDevice="音频监测设备"
152
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="默认"
153
+Basic.Settings.Advanced.Audio.DisableAudioDucking="禁用 Windows 音频闪避"
154
 Basic.Settings.Advanced.StreamDelay="流延迟"
155
 Basic.Settings.Advanced.StreamDelay.Duration="持续时间 (秒)"
156
 Basic.Settings.Advanced.StreamDelay.Preserve="重新连接时保持截止点 (增加延迟)"
157
@@ -617,3 +708,6 @@
158
 OutputWarnings.MultiTrackRecording="警告: 某些格式 (如 FLV) 不支持每个录像多个轨道"
159
 OutputWarnings.MP4Recording="警告︰ 录制保存到 MP4 将无法恢复,如果该文件不能完成 (例如由于蓝屏死机,掉电等)。如果您想要记录多个音频轨道考虑使用 MKV 然后在它完成后 remux 录制到 mp4 (文件 -> Remux 录制文件)"
160
 
161
+FinalScene.Title="删除场景"
162
+FinalScene.Text="至少要有一个场景."
163
+
164
obs-studio-18.0.2.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/UI/data/locale/zh-TW.ini Changed
145
 
1
@@ -31,6 +31,9 @@
2
 PreviewProjector="全螢幕投影(預覽)"
3
 SceneProjector="全螢幕投影(場景)"
4
 SourceProjector="全螢幕投影(來源)"
5
+PreviewWindow="視窗化投影(預覽)"
6
+SceneWindow="視窗化投影(場景)"
7
+SourceWindow="視窗化投影(來源)"
8
 Clear="清除"
9
 Revert="復原"
10
 Show="顯示"
11
@@ -56,6 +59,92 @@
12
 ReplayBuffer="重播緩衝"
13
 Import="匯入"
14
 Export="匯出"
15
+Copy="複製"
16
+Paste="貼上"
17
+PasteReference="貼上 (參考)"
18
+PasteDuplicate="貼上 (重複)"
19
+RemuxRecordings="重新封裝錄影"
20
+Next="下一步"
21
+Back="返回"
22
+
23
+AlreadyRunning.Title="OBS 已在執行中"
24
+AlreadyRunning.Text="OBS 已在執行中!除非這是您的意圖,請在執行新的 OBS 前關閉現存的 OBS 。如果有設定 OBS 最小化到系統工具列,請確認是否仍在該處執行。"
25
+AlreadyRunning.LaunchAnyway="強制啟動"
26
+
27
+Copy.Filters="複製過濾器"
28
+Paste.Filters="貼上篩選器"
29
+
30
+BandwidthTest.Region="區域"
31
+BandwidthTest.Region.US="美國"
32
+BandwidthTest.Region.EU="歐洲"
33
+BandwidthTest.Region.Asia="亞洲"
34
+BandwidthTest.Region.Other="其他"
35
+
36
+Basic.FirstStartup.RunWizard="您想要運行自動設定精靈嗎? 也可以透過點選主視窗中的設定按鈕來手動設定。"
37
+Basic.FirstStartup.RunWizard.BetaWarning="(注意: 自動設定精靈目前處於 Beta 階段)"
38
+Basic.FirstStartup.RunWizard.NoClicked="如果你改變主意,可以隨時從工具功能表再次執行自動設定精靈。"
39
+
40
+Basic.AutoConfig="自動設定精靈"
41
+Basic.AutoConfig.Beta="自動設定精靈 (Beta)"
42
+Basic.AutoConfig.ApplySettings="套用設定"
43
+Basic.AutoConfig.StartPage="使用資訊"
44
+Basic.AutoConfig.StartPage.SubTitle="指定想運用的場合"
45
+Basic.AutoConfig.StartPage.PrioritizeStreaming="為串流最佳化,錄影為次要的"
46
+Basic.AutoConfig.StartPage.PrioritizeRecording="僅為錄影最佳化,將不會串流"
47
+Basic.AutoConfig.VideoPage="影像設定"
48
+Basic.AutoConfig.VideoPage.SubTitle="指定想使用的影像設定"
49
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="使用現在的 (%1x%2)"
50
+Basic.AutoConfig.VideoPage.BaseResolution.Display="顯示器 %1 (%2x%3)"
51
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="使用現在的 (%1)"
52
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 或 30,但可能時優先選擇 60"
53
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 或 30,但優先高解析度"
54
+Basic.AutoConfig.VideoPage.CanvasExplanation="注︰ 畫布(來源)解析度並不一定與串流或錄影相同。實際的串流/錄影解析度可以從畫布解析度縮小以減少資源使用或位元率需求。"
55
+Basic.AutoConfig.StreamPage="串流資訊"
56
+Basic.AutoConfig.StreamPage.SubTitle="請輸入您的串流資訊"
57
+Basic.AutoConfig.StreamPage.Service="服務"
58
+Basic.AutoConfig.StreamPage.Service.ShowAll="顯示全部..."
59
+Basic.AutoConfig.StreamPage.Server="伺服器"
60
+Basic.AutoConfig.StreamPage.StreamKey="串流金鑰"
61
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(連結)"
62
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="用頻寬測試估計位元率(可能需要幾分鐘)"
63
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="優先使用硬體編碼"
64
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="硬體編碼去除了大多數的 CPU 使用率,但可能需要更多的位元率以獲得同等的品質。"
65
+Basic.AutoConfig.StreamPage.StreamWarning.Title="串流警告"
66
+Basic.AutoConfig.StreamPage.StreamWarning.Text="頻寬測試即將串流隨機沒有音訊的影像資料到您的頻道。 如果能的話,建議暫時關閉保存影像串流並設定串流為私密直到完成測試。 要繼續嗎?"
67
+Basic.AutoConfig.TestPage="最後的結果"
68
+Basic.AutoConfig.TestPage.SubTitle.Testing="程式目前正在執行一系列的測試以估計最理想的設定"
69
+Basic.AutoConfig.TestPage.SubTitle.Complete="測試完成"
70
+Basic.AutoConfig.TestPage.TestingBandwidth="執行頻寬測試,這可能需要幾分鐘..."
71
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="連線到 %1..."
72
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="無法連線到任何伺服器,請檢查網路連線並重試。"
73
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="測試頻寬︰%1"
74
+Basic.AutoConfig.TestPage.TestingStreamEncoder="測試串流編碼器,這可能需要一分鐘......"
75
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="測試錄影編碼器,這可能需要一分鐘..."
76
+Basic.AutoConfig.TestPage.TestingRes="測試解析度,這可能需要幾分鐘時間......"
77
+Basic.AutoConfig.TestPage.TestingRes.Fail="無法啟動編碼器"
78
+Basic.AutoConfig.TestPage.TestingRes.Resolution="測試 %1x%2 %3 FPS..."
79
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="串流編碼器"
80
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="錄影編碼器"
81
+Basic.AutoConfig.TestPage.Result.Header="程式判斷這些估計設定是最適合你︰"
82
+Basic.AutoConfig.TestPage.Result.Footer="若要使用這些設置,請點選套用設定。要重新設定精靈並再試一次,點選返回。 要手動設定,點選取消,然後打開設定。"
83
+
84
+Basic.Stats="狀態"
85
+Basic.Stats.CPUUsage="CPU 使用率"
86
+Basic.Stats.HDDSpaceAvailable="可用硬碟空間"
87
+Basic.Stats.MemoryUsage="記憶體使用量"
88
+Basic.Stats.AverageTimeToRender="繪製訊框的平均時間"
89
+Basic.Stats.SkippedFrames="因為編碼的延遲而省略的訊框"
90
+Basic.Stats.MissedFrames="因為繪製的延遲而錯失的訊框"
91
+Basic.Stats.Output.Stream="串流"
92
+Basic.Stats.Output.Recording="錄影"
93
+Basic.Stats.Status="狀態"
94
+Basic.Stats.Status.Recording="正在錄製"
95
+Basic.Stats.Status.Live="直播中"
96
+Basic.Stats.Status.Reconnecting="重新連線中"
97
+Basic.Stats.Status.Inactive="未啟動"
98
+Basic.Stats.DroppedFrames="丟棄的訊框 (網路)"
99
+Basic.Stats.MegabytesSent="總輸出資料"
100
+Basic.Stats.Bitrate="位元率"
101
 
102
 Updater.Title="有新更新"
103
 Updater.Text="有新更新︰"
104
@@ -358,7 +447,7 @@
105
 
106
 Basic.MainMenu.Tools="工具(&T)"
107
 
108
-Basic.MainMenu.Help="幫助 (&H)"
109
+Basic.MainMenu.Help="說明 (&H)"
110
 Basic.MainMenu.Help.Website="前往 OBS 網站 (&W)"
111
 Basic.MainMenu.Help.Logs="Log 檔案 (&L)"
112
 Basic.MainMenu.Help.Logs.ShowLogs="顯示 Log (&S)"
113
@@ -375,6 +464,7 @@
114
 Basic.Settings.General.Theme="佈景主題"
115
 Basic.Settings.General.Language="語言"
116
 Basic.Settings.General.EnableAutoUpdates="啟動時自動檢查更新"
117
+Basic.Settings.General.OpenStatsOnStartup="在啟動時打開狀態對話欄"
118
 Basic.Settings.General.WarnBeforeStartingStream="啟動串流時顯示確認對話框"
119
 Basic.Settings.General.WarnBeforeStoppingStream="停止串流時顯示確認對話框"
120
 Basic.Settings.General.Projectors="投影"
121
@@ -490,7 +580,7 @@
122
 
123
 Basic.Settings.Video="影像"
124
 Basic.Settings.Video.Adapter="顯示卡:"
125
-Basic.Settings.Video.BaseResolution="來源(全畫面)解析度:"
126
+Basic.Settings.Video.BaseResolution="來源(畫布)解析度:"
127
 Basic.Settings.Video.ScaledResolution="輸出(縮放)解析度:"
128
 Basic.Settings.Video.DownscaleFilter="壓縮方式:"
129
 Basic.Settings.Video.DisableAeroWindows="暫時關閉 Aero 特效(僅限 Windows)"
130
@@ -538,6 +628,7 @@
131
 Basic.Settings.Advanced.Video.ColorRange.Full="完整"
132
 Basic.Settings.Advanced.Audio.MonitoringDevice="音訊監測設備"
133
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="預設裝置"
134
+Basic.Settings.Advanced.Audio.DisableAudioDucking="停用 Windows 雙層次音量自動調整"
135
 Basic.Settings.Advanced.StreamDelay="實況延遲"
136
 Basic.Settings.Advanced.StreamDelay.Duration="延遲(秒)"
137
 Basic.Settings.Advanced.StreamDelay.Preserve="重新連線時維持截止點 (增加延遲)"
138
@@ -617,3 +708,6 @@
139
 OutputWarnings.MultiTrackRecording="警告:某些格式 (例如 FLV) 不支援多個軌道錄製"
140
 OutputWarnings.MP4Recording="警告︰ 如果檔案無法完成,儲存成 MP4 的紀錄將無法復原 (例如由於 BSOD,斷電等)。如果想要記錄多個音軌請考慮儲存成 MKV 並在完成後重新封裝成 mp4(檔案 -> 重新封裝)"
141
 
142
+FinalScene.Title="刪除場景"
143
+FinalScene.Text="至少要有一個場景。"
144
+
145
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark.qss -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark.qss Changed
20
 
1
@@ -508,3 +508,18 @@
2
     color: rgb(192, 0, 0);
3
     font-weight: bold;
4
 }
5
+
6
+* [themeID="warning"] {
7
+    color: rgb(192, 128, 0);
8
+    font-weight: bold;
9
+}
10
+
11
+* [themeID="error"] {
12
+    color: rgb(192, 0, 0);
13
+    font-weight: bold;
14
+}
15
+
16
+* [themeID="good"] {
17
+    color: rgb(0, 192, 0);
18
+    font-weight: bold;
19
+}
20
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/cogwheel.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/cogwheel.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/down_arrow.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/down_arrow.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/minus.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/minus.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/mute.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/mute.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/plus.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/plus.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/unmute.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/unmute.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/up_arrow.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/up_arrow.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Dark/updown.png -> obs-studio-19.0.2.tar.xz/UI/data/themes/Dark/updown.png Changed
obs-studio-18.0.2.tar.xz/UI/data/themes/Default.qss -> obs-studio-19.0.2.tar.xz/UI/data/themes/Default.qss Changed
20
 
1
@@ -73,3 +73,18 @@
2
     color: rgb(192, 0, 0);
3
     font-weight: bold;
4
 }
5
+
6
+* [themeID="warning"] {
7
+    color: rgb(192, 128, 0);
8
+    font-weight: bold;
9
+}
10
+
11
+* [themeID="error"] {
12
+    color: rgb(192, 0, 0);
13
+    font-weight: bold;
14
+}
15
+
16
+* [themeID="good"] {
17
+    color: rgb(0, 128, 0);
18
+    font-weight: bold;
19
+}
20
obs-studio-19.0.2.tar.xz/UI/forms/AutoConfigFinishPage.ui Added
43
 
1
@@ -0,0 +1,41 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>AutoConfigFinishPage</class>
5
+ <widget class="QWidget" name="AutoConfigFinishPage">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>400</width>
11
+    <height>300</height>
12
+   </rect>
13
+  </property>
14
+  <property name="windowTitle">
15
+   <string notr="true"/>
16
+  </property>
17
+  <layout class="QVBoxLayout" name="verticalLayout">
18
+   <item>
19
+    <widget class="QLabel" name="label">
20
+     <property name="text">
21
+      <string notr="true"/>
22
+     </property>
23
+    </widget>
24
+   </item>
25
+   <item>
26
+    <spacer name="verticalSpacer">
27
+     <property name="orientation">
28
+      <enum>Qt::Vertical</enum>
29
+     </property>
30
+     <property name="sizeHint" stdset="0">
31
+      <size>
32
+       <width>20</width>
33
+       <height>40</height>
34
+      </size>
35
+     </property>
36
+    </spacer>
37
+   </item>
38
+  </layout>
39
+ </widget>
40
+ <resources/>
41
+ <connections/>
42
+</ui>
43
obs-studio-19.0.2.tar.xz/UI/forms/AutoConfigStartPage.ui Added
53
 
1
@@ -0,0 +1,51 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>AutoConfigStartPage</class>
5
+ <widget class="QWidget" name="AutoConfigStartPage">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>400</width>
11
+    <height>300</height>
12
+   </rect>
13
+  </property>
14
+  <property name="windowTitle">
15
+   <string notr="true"/>
16
+  </property>
17
+  <layout class="QVBoxLayout" name="verticalLayout">
18
+   <item>
19
+    <widget class="QRadioButton" name="prioritizeStreaming">
20
+     <property name="text">
21
+      <string>Basic.AutoConfig.StartPage.PrioritizeStreaming</string>
22
+     </property>
23
+     <property name="checked">
24
+      <bool>true</bool>
25
+     </property>
26
+    </widget>
27
+   </item>
28
+   <item>
29
+    <widget class="QRadioButton" name="prioritizeRecording">
30
+     <property name="text">
31
+      <string>Basic.AutoConfig.StartPage.PrioritizeRecording</string>
32
+     </property>
33
+    </widget>
34
+   </item>
35
+   <item>
36
+    <spacer name="verticalSpacer">
37
+     <property name="orientation">
38
+      <enum>Qt::Vertical</enum>
39
+     </property>
40
+     <property name="sizeHint" stdset="0">
41
+      <size>
42
+       <width>20</width>
43
+       <height>40</height>
44
+      </size>
45
+     </property>
46
+    </spacer>
47
+   </item>
48
+  </layout>
49
+ </widget>
50
+ <resources/>
51
+ <connections/>
52
+</ui>
53
obs-studio-19.0.2.tar.xz/UI/forms/AutoConfigStreamPage.ui Added
257
 
1
@@ -0,0 +1,255 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>AutoConfigStreamPage</class>
5
+ <widget class="QWidget" name="AutoConfigStreamPage">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>566</width>
11
+    <height>335</height>
12
+   </rect>
13
+  </property>
14
+  <property name="windowTitle">
15
+   <string notr="true"/>
16
+  </property>
17
+  <layout class="QFormLayout" name="formLayout">
18
+   <property name="fieldGrowthPolicy">
19
+    <enum>QFormLayout::ExpandingFieldsGrow</enum>
20
+   </property>
21
+   <property name="labelAlignment">
22
+    <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
23
+   </property>
24
+   <item row="1" column="0">
25
+    <widget class="QLabel" name="serviceLabel">
26
+     <property name="text">
27
+      <string>Basic.AutoConfig.StreamPage.Service</string>
28
+     </property>
29
+     <property name="buddy">
30
+      <cstring>service</cstring>
31
+     </property>
32
+    </widget>
33
+   </item>
34
+   <item row="1" column="1">
35
+    <widget class="QComboBox" name="service"/>
36
+   </item>
37
+   <item row="3" column="0">
38
+    <widget class="QLabel" name="streamKeyLabel">
39
+     <property name="text">
40
+      <string>Basic.AutoConfig.StreamPage.StreamKey</string>
41
+     </property>
42
+     <property name="openExternalLinks">
43
+      <bool>true</bool>
44
+     </property>
45
+     <property name="buddy">
46
+      <cstring>key</cstring>
47
+     </property>
48
+    </widget>
49
+   </item>
50
+   <item row="3" column="1">
51
+    <layout class="QHBoxLayout" name="horizontalLayout">
52
+     <item>
53
+      <widget class="QLineEdit" name="key">
54
+       <property name="inputMask">
55
+        <string notr="true"/>
56
+       </property>
57
+       <property name="text">
58
+        <string notr="true"/>
59
+       </property>
60
+       <property name="echoMode">
61
+        <enum>QLineEdit::Password</enum>
62
+       </property>
63
+      </widget>
64
+     </item>
65
+     <item>
66
+      <widget class="QPushButton" name="show">
67
+       <property name="text">
68
+        <string>Show</string>
69
+       </property>
70
+      </widget>
71
+     </item>
72
+    </layout>
73
+   </item>
74
+   <item row="6" column="1">
75
+    <widget class="QCheckBox" name="doBandwidthTest">
76
+     <property name="text">
77
+      <string>Basic.AutoConfig.StreamPage.PerformBandwidthTest</string>
78
+     </property>
79
+     <property name="checked">
80
+      <bool>true</bool>
81
+     </property>
82
+    </widget>
83
+   </item>
84
+   <item row="5" column="1">
85
+    <widget class="QCheckBox" name="preferHardware">
86
+     <property name="toolTip">
87
+      <string>Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip</string>
88
+     </property>
89
+     <property name="text">
90
+      <string>Basic.AutoConfig.StreamPage.PreferHardwareEncoding</string>
91
+     </property>
92
+     <property name="checked">
93
+      <bool>true</bool>
94
+     </property>
95
+    </widget>
96
+   </item>
97
+   <item row="6" column="0">
98
+    <spacer name="horizontalSpacer">
99
+     <property name="orientation">
100
+      <enum>Qt::Horizontal</enum>
101
+     </property>
102
+     <property name="sizeType">
103
+      <enum>QSizePolicy::Fixed</enum>
104
+     </property>
105
+     <property name="sizeHint" stdset="0">
106
+      <size>
107
+       <width>90</width>
108
+       <height>20</height>
109
+      </size>
110
+     </property>
111
+    </spacer>
112
+   </item>
113
+   <item row="2" column="0">
114
+    <widget class="QLabel" name="serverLabel">
115
+     <property name="text">
116
+      <string>Basic.AutoConfig.StreamPage.Server</string>
117
+     </property>
118
+    </widget>
119
+   </item>
120
+   <item row="0" column="0">
121
+    <widget class="QLabel" name="label_3">
122
+     <property name="text">
123
+      <string>Basic.Settings.Stream.StreamType</string>
124
+     </property>
125
+    </widget>
126
+   </item>
127
+   <item row="0" column="1">
128
+    <widget class="QComboBox" name="streamType"/>
129
+   </item>
130
+   <item row="2" column="1">
131
+    <widget class="QStackedWidget" name="serverStackedWidget">
132
+     <property name="currentIndex">
133
+      <number>0</number>
134
+     </property>
135
+     <widget class="QWidget" name="servicePage">
136
+      <layout class="QHBoxLayout" name="horizontalLayout_2">
137
+       <property name="leftMargin">
138
+        <number>0</number>
139
+       </property>
140
+       <property name="topMargin">
141
+        <number>0</number>
142
+       </property>
143
+       <property name="rightMargin">
144
+        <number>0</number>
145
+       </property>
146
+       <property name="bottomMargin">
147
+        <number>0</number>
148
+       </property>
149
+       <item>
150
+        <widget class="QComboBox" name="server"/>
151
+       </item>
152
+      </layout>
153
+     </widget>
154
+     <widget class="QWidget" name="customPage">
155
+      <layout class="QHBoxLayout" name="horizontalLayout_3">
156
+       <property name="leftMargin">
157
+        <number>0</number>
158
+       </property>
159
+       <property name="topMargin">
160
+        <number>0</number>
161
+       </property>
162
+       <property name="rightMargin">
163
+        <number>0</number>
164
+       </property>
165
+       <property name="bottomMargin">
166
+        <number>0</number>
167
+       </property>
168
+       <item>
169
+        <widget class="QLineEdit" name="customServer"/>
170
+       </item>
171
+      </layout>
172
+     </widget>
173
+    </widget>
174
+   </item>
175
+   <item row="7" column="1">
176
+    <widget class="QGroupBox" name="region">
177
+     <property name="title">
178
+      <string>BandwidthTest.Region</string>
179
+     </property>
180
+     <layout class="QGridLayout" name="gridLayout">
181
+      <item row="2" column="0">
182
+       <widget class="QCheckBox" name="regionAsia">
183
+        <property name="text">
184
+         <string>BandwidthTest.Region.Asia</string>
185
+        </property>
186
+       </widget>
187
+      </item>
188
+      <item row="0" column="0">
189
+       <widget class="QCheckBox" name="regionUS">
190
+        <property name="text">
191
+         <string>BandwidthTest.Region.US</string>
192
+        </property>
193
+       </widget>
194
+      </item>
195
+      <item row="0" column="1">
196
+       <widget class="QCheckBox" name="regionEU">
197
+        <property name="text">
198
+         <string>BandwidthTest.Region.EU</string>
199
+        </property>
200
+       </widget>
201
+      </item>
202
+      <item row="2" column="1">
203
+       <widget class="QCheckBox" name="regionOther">
204
+        <property name="text">
205
+         <string>BandwidthTest.Region.Other</string>
206
+        </property>
207
+       </widget>
208
+      </item>
209
+     </layout>
210
+    </widget>
211
+   </item>
212
+   <item row="4" column="1">
213
+    <widget class="QSpinBox" name="bitrate">
214
+     <property name="suffix">
215
+      <string notr="true"/>
216
+     </property>
217
+     <property name="minimum">
218
+      <number>500</number>
219
+     </property>
220
+     <property name="maximum">
221
+      <number>10000</number>
222
+     </property>
223
+     <property name="value">
224
+      <number>2500</number>
225
+     </property>
226
+    </widget>
227
+   </item>
228
+   <item row="4" column="0">
229
+    <widget class="QLabel" name="bitrateLabel">
230
+     <property name="text">
231
+      <string>Basic.Settings.Output.VideoBitrate</string>
232
+     </property>
233
+     <property name="buddy">
234
+      <cstring>bitrate</cstring>
235
+     </property>
236
+    </widget>
237
+   </item>
238
+  </layout>
239
+ </widget>
240
+ <tabstops>
241
+  <tabstop>streamType</tabstop>
242
+  <tabstop>service</tabstop>
243
+  <tabstop>server</tabstop>
244
+  <tabstop>customServer</tabstop>
245
+  <tabstop>key</tabstop>
246
+  <tabstop>show</tabstop>
247
+  <tabstop>preferHardware</tabstop>
248
+  <tabstop>doBandwidthTest</tabstop>
249
+  <tabstop>regionUS</tabstop>
250
+  <tabstop>regionEU</tabstop>
251
+  <tabstop>regionAsia</tabstop>
252
+  <tabstop>regionOther</tabstop>
253
+ </tabstops>
254
+ <resources/>
255
+ <connections/>
256
+</ui>
257
obs-studio-19.0.2.tar.xz/UI/forms/AutoConfigTestPage.ui Added
143
 
1
@@ -0,0 +1,141 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>AutoConfigTestPage</class>
5
+ <widget class="QWidget" name="AutoConfigTestPage">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>400</width>
11
+    <height>300</height>
12
+   </rect>
13
+  </property>
14
+  <property name="windowTitle">
15
+   <string notr="true"/>
16
+  </property>
17
+  <layout class="QVBoxLayout" name="verticalLayout">
18
+   <property name="leftMargin">
19
+    <number>0</number>
20
+   </property>
21
+   <property name="topMargin">
22
+    <number>0</number>
23
+   </property>
24
+   <property name="rightMargin">
25
+    <number>0</number>
26
+   </property>
27
+   <property name="bottomMargin">
28
+    <number>0</number>
29
+   </property>
30
+   <item>
31
+    <widget class="QStackedWidget" name="stackedWidget">
32
+     <property name="currentIndex">
33
+      <number>2</number>
34
+     </property>
35
+     <widget class="QWidget" name="testPage">
36
+      <layout class="QVBoxLayout" name="verticalLayout_2">
37
+       <item>
38
+        <widget class="QLabel" name="progressLabel">
39
+         <property name="text">
40
+          <string notr="true"/>
41
+         </property>
42
+        </widget>
43
+       </item>
44
+       <item>
45
+        <widget class="QLabel" name="subProgressLabel">
46
+         <property name="text">
47
+          <string notr="true"/>
48
+         </property>
49
+        </widget>
50
+       </item>
51
+       <item>
52
+        <widget class="QProgressBar" name="progressBar">
53
+         <property name="value">
54
+          <number>24</number>
55
+         </property>
56
+        </widget>
57
+       </item>
58
+       <item>
59
+        <spacer name="verticalSpacer">
60
+         <property name="orientation">
61
+          <enum>Qt::Vertical</enum>
62
+         </property>
63
+         <property name="sizeHint" stdset="0">
64
+          <size>
65
+           <width>20</width>
66
+           <height>40</height>
67
+          </size>
68
+         </property>
69
+        </spacer>
70
+       </item>
71
+      </layout>
72
+     </widget>
73
+     <widget class="QWidget" name="finishPage">
74
+      <layout class="QVBoxLayout" name="finishPageLayout">
75
+       <item>
76
+        <widget class="QLabel" name="finalResultLabel">
77
+         <property name="sizePolicy">
78
+          <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
79
+           <horstretch>0</horstretch>
80
+           <verstretch>0</verstretch>
81
+          </sizepolicy>
82
+         </property>
83
+         <property name="text">
84
+          <string>Basic.AutoConfig.TestPage.Result.Header</string>
85
+         </property>
86
+         <property name="wordWrap">
87
+          <bool>true</bool>
88
+         </property>
89
+        </widget>
90
+       </item>
91
+       <item>
92
+        <widget class="QLabel" name="finalResultLabel_2">
93
+         <property name="text">
94
+          <string>Basic.AutoConfig.TestPage.Result.Footer</string>
95
+         </property>
96
+         <property name="alignment">
97
+          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
98
+         </property>
99
+         <property name="wordWrap">
100
+          <bool>true</bool>
101
+         </property>
102
+        </widget>
103
+       </item>
104
+       <item>
105
+        <spacer name="verticalSpacer_2">
106
+         <property name="orientation">
107
+          <enum>Qt::Vertical</enum>
108
+         </property>
109
+         <property name="sizeHint" stdset="0">
110
+          <size>
111
+           <width>20</width>
112
+           <height>40</height>
113
+          </size>
114
+         </property>
115
+        </spacer>
116
+       </item>
117
+      </layout>
118
+     </widget>
119
+     <widget class="QWidget" name="errorPage">
120
+      <layout class="QVBoxLayout" name="verticalLayout_3">
121
+       <item>
122
+        <widget class="QLabel" name="errorLabel">
123
+         <property name="text">
124
+          <string notr="true"/>
125
+         </property>
126
+         <property name="alignment">
127
+          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
128
+         </property>
129
+         <property name="wordWrap">
130
+          <bool>true</bool>
131
+         </property>
132
+        </widget>
133
+       </item>
134
+      </layout>
135
+     </widget>
136
+    </widget>
137
+   </item>
138
+  </layout>
139
+ </widget>
140
+ <resources/>
141
+ <connections/>
142
+</ui>
143
obs-studio-19.0.2.tar.xz/UI/forms/AutoConfigVideoPage.ui Added
98
 
1
@@ -0,0 +1,96 @@
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>AutoConfigVideoPage</class>
5
+ <widget class="QWidget" name="AutoConfigVideoPage">
6
+  <property name="geometry">
7
+   <rect>
8
+    <x>0</x>
9
+    <y>0</y>
10
+    <width>470</width>
11
+    <height>300</height>
12
+   </rect>
13
+  </property>
14
+  <property name="windowTitle">
15
+   <string notr="true"/>
16
+  </property>
17
+  <layout class="QVBoxLayout" name="verticalLayout">
18
+   <item>
19
+    <layout class="QFormLayout" name="formLayout_2">
20
+     <property name="fieldGrowthPolicy">
21
+      <enum>QFormLayout::ExpandingFieldsGrow</enum>
22
+     </property>
23
+     <property name="labelAlignment">
24
+      <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
25
+     </property>
26
+     <item row="0" column="0">
27
+      <widget class="QLabel" name="label">
28
+       <property name="text">
29
+        <string>Basic.Settings.Video.BaseResolution</string>
30
+       </property>
31
+       <property name="buddy">
32
+        <cstring>canvasRes</cstring>
33
+       </property>
34
+      </widget>
35
+     </item>
36
+     <item row="0" column="1">
37
+      <widget class="QComboBox" name="canvasRes"/>
38
+     </item>
39
+     <item row="2" column="0">
40
+      <widget class="QLabel" name="label_3">
41
+       <property name="text">
42
+        <string>Basic.Settings.Video.FPS</string>
43
+       </property>
44
+       <property name="buddy">
45
+        <cstring>fps</cstring>
46
+       </property>
47
+      </widget>
48
+     </item>
49
+     <item row="2" column="1">
50
+      <widget class="QComboBox" name="fps"/>
51
+     </item>
52
+     <item row="3" column="0">
53
+      <spacer name="horizontalSpacer">
54
+       <property name="orientation">
55
+        <enum>Qt::Horizontal</enum>
56
+       </property>
57
+       <property name="sizeType">
58
+        <enum>QSizePolicy::Fixed</enum>
59
+       </property>
60
+       <property name="sizeHint" stdset="0">
61
+        <size>
62
+         <width>87</width>
63
+         <height>17</height>
64
+        </size>
65
+       </property>
66
+      </spacer>
67
+     </item>
68
+    </layout>
69
+   </item>
70
+   <item>
71
+    <widget class="QLabel" name="warningLabel">
72
+     <property name="text">
73
+      <string>Basic.AutoConfig.VideoPage.CanvasExplanation</string>
74
+     </property>
75
+     <property name="wordWrap">
76
+      <bool>true</bool>
77
+     </property>
78
+    </widget>
79
+   </item>
80
+   <item>
81
+    <spacer name="verticalSpacer">
82
+     <property name="orientation">
83
+      <enum>Qt::Vertical</enum>
84
+     </property>
85
+     <property name="sizeHint" stdset="0">
86
+      <size>
87
+       <width>20</width>
88
+       <height>40</height>
89
+      </size>
90
+     </property>
91
+    </spacer>
92
+   </item>
93
+  </layout>
94
+ </widget>
95
+ <resources/>
96
+ <connections/>
97
+</ui>
98
obs-studio-18.0.2.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-19.0.2.tar.xz/UI/forms/OBSBasic.ui Changed
42
 
1
@@ -981,14 +981,15 @@
2
     <addaction name="viewMenuToolbars"/>
3
     <addaction name="toggleSceneTransitions"/>
4
     <addaction name="toggleStatusBar"/>
5
+    <addaction name="separator"/>
6
+    <addaction name="stats"/>
7
    </widget>
8
    <widget class="QMenu" name="menuTools">
9
-    <property name="enabled">
10
-     <bool>false</bool>
11
-    </property>
12
     <property name="title">
13
      <string>Basic.MainMenu.Tools</string>
14
     </property>
15
+    <addaction name="autoConfigure"/>
16
+    <addaction name="separator"/>
17
    </widget>
18
    <addaction name="menu_File"/>
19
    <addaction name="menuBasic_MainMenu_Edit"/>
20
@@ -1462,6 +1463,21 @@
21
     <string>PasteDuplicate</string>
22
    </property>
23
   </action>
24
+  <action name="autoConfigure2">
25
+   <property name="text">
26
+    <string>Basic.AutoConfig</string>
27
+   </property>
28
+  </action>
29
+  <action name="autoConfigure">
30
+   <property name="text">
31
+    <string>Basic.AutoConfig.Beta</string>
32
+   </property>
33
+  </action>
34
+  <action name="stats">
35
+   <property name="text">
36
+    <string>Basic.Stats</string>
37
+   </property>
38
+  </action>
39
  </widget>
40
  <customwidgets>
41
   <customwidget>
42
obs-studio-18.0.2.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-19.0.2.tar.xz/UI/forms/OBSBasicSettings.ui Changed
454
 
1
@@ -200,16 +200,6 @@
2
                    <item row="1" column="1">
3
                     <widget class="QComboBox" name="theme"/>
4
                    </item>
5
-                   <item row="2" column="1">
6
-                    <widget class="QCheckBox" name="enableAutoUpdates">
7
-                     <property name="text">
8
-                      <string>Basic.Settings.General.EnableAutoUpdates</string>
9
-                     </property>
10
-                     <property name="checked">
11
-                      <bool>true</bool>
12
-                     </property>
13
-                    </widget>
14
-                   </item>
15
                    <item row="2" column="0">
16
                     <spacer name="horizontalSpacer_3">
17
                      <property name="orientation">
18
@@ -226,6 +216,23 @@
19
                      </property>
20
                     </spacer>
21
                    </item>
22
+                   <item row="2" column="1">
23
+                    <widget class="QCheckBox" name="enableAutoUpdates">
24
+                     <property name="text">
25
+                      <string>Basic.Settings.General.EnableAutoUpdates</string>
26
+                     </property>
27
+                     <property name="checked">
28
+                      <bool>true</bool>
29
+                     </property>
30
+                    </widget>
31
+                   </item>
32
+                   <item row="3" column="1">
33
+                    <widget class="QCheckBox" name="openStatsOnStartup">
34
+                     <property name="text">
35
+                      <string>Basic.Settings.General.OpenStatsOnStartup</string>
36
+                     </property>
37
+                    </widget>
38
+                   </item>
39
                   </layout>
40
                  </widget>
41
                 </item>
42
@@ -3501,8 +3508,8 @@
43
              <rect>
44
               <x>0</x>
45
               <y>0</y>
46
-              <width>803</width>
47
-              <height>738</height>
48
+              <width>593</width>
49
+              <height>761</height>
50
              </rect>
51
             </property>
52
             <layout class="QVBoxLayout" name="verticalLayout_16">
53
@@ -3755,6 +3762,13 @@
54
                    <item row="0" column="1">
55
                     <widget class="QComboBox" name="monitoringDevice"/>
56
                    </item>
57
+                   <item row="1" column="1">
58
+                    <widget class="QCheckBox" name="disableAudioDucking">
59
+                     <property name="text">
60
+                      <string>Basic.Settings.Advanced.Audio.DisableAudioDucking</string>
61
+                     </property>
62
+                    </widget>
63
+                   </item>
64
                   </layout>
65
                  </widget>
66
                 </item>
67
@@ -4277,8 +4291,8 @@
68
    <slot>setCurrentIndex(int)</slot>
69
    <hints>
70
     <hint type="sourcelabel">
71
-     <x>159</x>
72
-     <y>30</y>
73
+     <x>310</x>
74
+     <y>29</y>
75
     </hint>
76
     <hint type="destinationlabel">
77
      <x>241</x>
78
@@ -4309,12 +4323,12 @@
79
    <slot>setVisible(bool)</slot>
80
    <hints>
81
     <hint type="sourcelabel">
82
-     <x>240</x>
83
-     <y>46</y>
84
+     <x>250</x>
85
+     <y>39</y>
86
     </hint>
87
     <hint type="destinationlabel">
88
-     <x>240</x>
89
-     <y>44</y>
90
+     <x>250</x>
91
+     <y>39</y>
92
     </hint>
93
    </hints>
94
   </connection>
95
@@ -4325,12 +4339,12 @@
96
    <slot>setVisible(bool)</slot>
97
    <hints>
98
     <hint type="sourcelabel">
99
-     <x>240</x>
100
-     <y>46</y>
101
+     <x>250</x>
102
+     <y>39</y>
103
     </hint>
104
     <hint type="destinationlabel">
105
-     <x>160</x>
106
-     <y>44</y>
107
+     <x>250</x>
108
+     <y>39</y>
109
     </hint>
110
    </hints>
111
   </connection>
112
@@ -4341,12 +4355,12 @@
113
    <slot>setVisible(bool)</slot>
114
    <hints>
115
     <hint type="sourcelabel">
116
-     <x>240</x>
117
-     <y>46</y>
118
+     <x>250</x>
119
+     <y>39</y>
120
     </hint>
121
     <hint type="destinationlabel">
122
-     <x>240</x>
123
-     <y>43</y>
124
+     <x>250</x>
125
+     <y>39</y>
126
     </hint>
127
    </hints>
128
   </connection>
129
@@ -4357,12 +4371,12 @@
130
    <slot>setVisible(bool)</slot>
131
    <hints>
132
     <hint type="sourcelabel">
133
-     <x>240</x>
134
-     <y>46</y>
135
+     <x>250</x>
136
+     <y>39</y>
137
     </hint>
138
     <hint type="destinationlabel">
139
-     <x>160</x>
140
-     <y>43</y>
141
+     <x>250</x>
142
+     <y>39</y>
143
     </hint>
144
    </hints>
145
   </connection>
146
@@ -4378,7 +4392,7 @@
147
     </hint>
148
     <hint type="destinationlabel">
149
      <x>241</x>
150
-     <y>53</y>
151
+     <y>30</y>
152
     </hint>
153
    </hints>
154
   </connection>
155
@@ -4389,12 +4403,12 @@
156
    <slot>setEnabled(bool)</slot>
157
    <hints>
158
     <hint type="sourcelabel">
159
-     <x>168</x>
160
-     <y>67</y>
161
+     <x>259</x>
162
+     <y>60</y>
163
     </hint>
164
     <hint type="destinationlabel">
165
-     <x>250</x>
166
-     <y>67</y>
167
+     <x>228</x>
168
+     <y>50</y>
169
     </hint>
170
    </hints>
171
   </connection>
172
@@ -4405,12 +4419,12 @@
173
    <slot>setEnabled(bool)</slot>
174
    <hints>
175
     <hint type="sourcelabel">
176
-     <x>168</x>
177
-     <y>52</y>
178
+     <x>259</x>
179
+     <y>39</y>
180
     </hint>
181
     <hint type="destinationlabel">
182
-     <x>232</x>
183
-     <y>52</y>
184
+     <x>228</x>
185
+     <y>29</y>
186
     </hint>
187
    </hints>
188
   </connection>
189
@@ -4425,8 +4439,8 @@
190
      <y>56</y>
191
     </hint>
192
     <hint type="destinationlabel">
193
-     <x>232</x>
194
-     <y>56</y>
195
+     <x>228</x>
196
+     <y>50</y>
197
     </hint>
198
    </hints>
199
   </connection>
200
@@ -4453,12 +4467,12 @@
201
    <slot>setVisible(bool)</slot>
202
    <hints>
203
     <hint type="sourcelabel">
204
-     <x>240</x>
205
-     <y>46</y>
206
+     <x>250</x>
207
+     <y>39</y>
208
     </hint>
209
     <hint type="destinationlabel">
210
-     <x>240</x>
211
-     <y>45</y>
212
+     <x>250</x>
213
+     <y>39</y>
214
     </hint>
215
    </hints>
216
   </connection>
217
@@ -4469,12 +4483,12 @@
218
    <slot>setEnabled(bool)</slot>
219
    <hints>
220
     <hint type="sourcelabel">
221
-     <x>730</x>
222
-     <y>556</y>
223
+     <x>950</x>
224
+     <y>579</y>
225
     </hint>
226
     <hint type="destinationlabel">
227
-     <x>746</x>
228
-     <y>579</y>
229
+     <x>950</x>
230
+     <y>602</y>
231
     </hint>
232
    </hints>
233
   </connection>
234
@@ -4485,12 +4499,12 @@
235
    <slot>setEnabled(bool)</slot>
236
    <hints>
237
     <hint type="sourcelabel">
238
-     <x>830</x>
239
-     <y>556</y>
240
+     <x>950</x>
241
+     <y>579</y>
242
     </hint>
243
     <hint type="destinationlabel">
244
-     <x>826</x>
245
-     <y>602</y>
246
+     <x>950</x>
247
+     <y>625</y>
248
     </hint>
249
    </hints>
250
   </connection>
251
@@ -4501,12 +4515,12 @@
252
    <slot>setEnabled(bool)</slot>
253
    <hints>
254
     <hint type="sourcelabel">
255
-     <x>403</x>
256
-     <y>642</y>
257
+     <x>250</x>
258
+     <y>39</y>
259
     </hint>
260
     <hint type="destinationlabel">
261
-     <x>403</x>
262
-     <y>665</y>
263
+     <x>250</x>
264
+     <y>39</y>
265
     </hint>
266
    </hints>
267
   </connection>
268
@@ -4517,12 +4531,12 @@
269
    <slot>setEnabled(bool)</slot>
270
    <hints>
271
     <hint type="sourcelabel">
272
-     <x>733</x>
273
-     <y>317</y>
274
+     <x>950</x>
275
+     <y>340</y>
276
     </hint>
277
     <hint type="destinationlabel">
278
      <x>347</x>
279
-     <y>343</y>
280
+     <y>366</y>
281
     </hint>
282
    </hints>
283
   </connection>
284
@@ -4533,12 +4547,12 @@
285
    <slot>setEnabled(bool)</slot>
286
    <hints>
287
     <hint type="sourcelabel">
288
-     <x>774</x>
289
-     <y>317</y>
290
+     <x>950</x>
291
+     <y>340</y>
292
     </hint>
293
     <hint type="destinationlabel">
294
-     <x>782</x>
295
-     <y>343</y>
296
+     <x>950</x>
297
+     <y>366</y>
298
     </hint>
299
    </hints>
300
   </connection>
301
@@ -4549,12 +4563,12 @@
302
    <slot>setEnabled(bool)</slot>
303
    <hints>
304
     <hint type="sourcelabel">
305
-     <x>820</x>
306
-     <y>317</y>
307
+     <x>950</x>
308
+     <y>340</y>
309
     </hint>
310
     <hint type="destinationlabel">
311
-     <x>837</x>
312
-     <y>366</y>
313
+     <x>950</x>
314
+     <y>389</y>
315
     </hint>
316
    </hints>
317
   </connection>
318
@@ -4565,12 +4579,12 @@
319
    <slot>setEnabled(bool)</slot>
320
    <hints>
321
     <hint type="sourcelabel">
322
-     <x>881</x>
323
-     <y>317</y>
324
+     <x>950</x>
325
+     <y>340</y>
326
     </hint>
327
     <hint type="destinationlabel">
328
-     <x>890</x>
329
-     <y>389</y>
330
+     <x>950</x>
331
+     <y>412</y>
332
     </hint>
333
    </hints>
334
   </connection>
335
@@ -4581,12 +4595,12 @@
336
    <slot>setEnabled(bool)</slot>
337
    <hints>
338
     <hint type="sourcelabel">
339
-     <x>928</x>
340
-     <y>317</y>
341
+     <x>950</x>
342
+     <y>340</y>
343
     </hint>
344
     <hint type="destinationlabel">
345
-     <x>915</x>
346
-     <y>412</y>
347
+     <x>950</x>
348
+     <y>435</y>
349
     </hint>
350
    </hints>
351
   </connection>
352
@@ -4597,12 +4611,12 @@
353
    <slot>setEnabled(bool)</slot>
354
    <hints>
355
     <hint type="sourcelabel">
356
-     <x>803</x>
357
-     <y>199</y>
358
+     <x>950</x>
359
+     <y>222</y>
360
     </hint>
361
     <hint type="destinationlabel">
362
-     <x>820</x>
363
-     <y>222</y>
364
+     <x>950</x>
365
+     <y>245</y>
366
     </hint>
367
    </hints>
368
   </connection>
369
@@ -4613,12 +4627,12 @@
370
    <slot>setEnabled(bool)</slot>
371
    <hints>
372
     <hint type="sourcelabel">
373
-     <x>747</x>
374
-     <y>245</y>
375
+     <x>950</x>
376
+     <y>268</y>
377
     </hint>
378
     <hint type="destinationlabel">
379
-     <x>753</x>
380
-     <y>268</y>
381
+     <x>950</x>
382
+     <y>291</y>
383
     </hint>
384
    </hints>
385
   </connection>
386
@@ -4629,12 +4643,12 @@
387
    <slot>setEnabled(bool)</slot>
388
    <hints>
389
     <hint type="sourcelabel">
390
-     <x>431</x>
391
-     <y>422</y>
392
+     <x>250</x>
393
+     <y>39</y>
394
     </hint>
395
     <hint type="destinationlabel">
396
-     <x>356</x>
397
-     <y>443</y>
398
+     <x>250</x>
399
+     <y>39</y>
400
     </hint>
401
    </hints>
402
   </connection>
403
@@ -4645,12 +4659,12 @@
404
    <slot>setEnabled(bool)</slot>
405
    <hints>
406
     <hint type="sourcelabel">
407
-     <x>465</x>
408
-     <y>420</y>
409
+     <x>250</x>
410
+     <y>39</y>
411
     </hint>
412
     <hint type="destinationlabel">
413
-     <x>463</x>
414
-     <y>447</y>
415
+     <x>250</x>
416
+     <y>39</y>
417
     </hint>
418
    </hints>
419
   </connection>
420
@@ -4661,12 +4675,12 @@
421
    <slot>setEnabled(bool)</slot>
422
    <hints>
423
     <hint type="sourcelabel">
424
-     <x>533</x>
425
-     <y>420</y>
426
+     <x>250</x>
427
+     <y>39</y>
428
     </hint>
429
     <hint type="destinationlabel">
430
-     <x>557</x>
431
-     <y>446</y>
432
+     <x>250</x>
433
+     <y>39</y>
434
     </hint>
435
    </hints>
436
   </connection>
437
@@ -4677,12 +4691,12 @@
438
    <slot>setEnabled(bool)</slot>
439
    <hints>
440
     <hint type="sourcelabel">
441
-     <x>504</x>
442
-     <y>420</y>
443
+     <x>250</x>
444
+     <y>39</y>
445
     </hint>
446
     <hint type="destinationlabel">
447
-     <x>494</x>
448
-     <y>465</y>
449
+     <x>250</x>
450
+     <y>39</y>
451
     </hint>
452
    </hints>
453
   </connection>
454
obs-studio-18.0.2.tar.xz/UI/forms/images/add.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/add.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/configuration21_16.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/configuration21_16.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/down.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/down.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/editscene.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/editscene.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/invisible_mask.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/invisible_mask.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/list_remove.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/list_remove.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/live.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/live.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/mute.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/mute.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/obs.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/obs.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/properties.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/properties.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/advanced.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/advanced.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/applications-system-2.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/applications-system-2.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/decibel_audio_player.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/decibel_audio_player.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/network-bluetooth.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/network-bluetooth.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/network.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/network.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/preferences-desktop-keyboard-shortcuts.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/preferences-desktop-keyboard-shortcuts.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/preferences-system-network-3.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/preferences-system-network-3.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/system-settings-3.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/system-settings-3.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/settings/video-display-3.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/settings/video-display-3.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/tray_active.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/tray_active.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/unmute.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/unmute.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/up.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/up.png Changed
obs-studio-18.0.2.tar.xz/UI/forms/images/visible_mask.png -> obs-studio-19.0.2.tar.xz/UI/forms/images/visible_mask.png Changed
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt Changed
52
 
1
@@ -5,16 +5,10 @@
2
    include_directories(${COCOA})
3
 endif()
4
 
5
-if(WIN32 OR APPLE)
6
-   set(frontend-tools_HEADERS
7
-       auto-scene-switcher.hpp
8
-       )
9
-   set(frontend-tools_SOURCES
10
-       auto-scene-switcher.cpp
11
-       )
12
-   set(frontend-tools_UI
13
-       forms/auto-scene-switcher.ui
14
-       )
15
+if(UNIX)
16
+   find_package(X11 REQUIRED)
17
+   link_libraries(${X11_LIBRARIES})
18
+   include_directories(${X11_INCLUDE_DIR})
19
 endif()
20
 
21
 configure_file(
22
@@ -24,16 +18,19 @@
23
 set(frontend-tools_HEADERS
24
    ${frontend-tools_HEADERS}
25
    "${CMAKE_BINARY_DIR}/config/frontend-tools-config.h"
26
+   auto-scene-switcher.hpp
27
    output-timer.hpp
28
    tool-helpers.hpp
29
    )
30
 set(frontend-tools_SOURCES
31
    ${frontend-tools_SOURCES}
32
+   auto-scene-switcher.cpp
33
    frontend-tools.c
34
    output-timer.cpp
35
    )
36
 set(frontend-tools_UI
37
    ${frontend-tools_UI}
38
+   forms/auto-scene-switcher.ui
39
    forms/output-timer.ui
40
    )
41
 
42
@@ -64,6 +61,9 @@
43
 
44
    set(frontend-tools_PLATFORM_LIBS
45
        ${COCOA})
46
+else()
47
+   set(frontend-tools_PLATFORM_SOURCES
48
+       auto-scene-switcher-nix.cpp)
49
 endif()
50
 
51
 qt5_wrap_ui(frontend-tools_UI_HEADERS
52
obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/auto-scene-switcher-nix.cpp Added
213
 
1
@@ -0,0 +1,211 @@
2
+#include <X11/Xlib.h>
3
+#include <X11/Xatom.h>
4
+#include <X11/Xutil.h>
5
+#undef Bool
6
+#undef CursorShape
7
+#undef Expose
8
+#undef KeyPress
9
+#undef KeyRelease
10
+#undef FocusIn
11
+#undef FocusOut
12
+#undef FontChange
13
+#undef None
14
+#undef Status
15
+#undef Unsorted
16
+#include <util/platform.h>
17
+#include "auto-scene-switcher.hpp"
18
+
19
+using namespace std;
20
+
21
+static Display* xdisplay = 0;
22
+
23
+Display *disp()
24
+{
25
+   if (!xdisplay)
26
+       xdisplay = XOpenDisplay(NULL);
27
+
28
+   return xdisplay;
29
+}
30
+
31
+void cleanupDisplay()
32
+{
33
+   if (!xdisplay)
34
+       return;
35
+
36
+   XCloseDisplay(xdisplay);
37
+   xdisplay = 0;
38
+}
39
+
40
+static bool ewmhIsSupported()
41
+{
42
+   Display *display = disp();
43
+   Atom netSupportingWmCheck = XInternAtom(display,
44
+           "_NET_SUPPORTING_WM_CHECK", true);
45
+   Atom actualType;
46
+   int format = 0;
47
+   unsigned long num = 0, bytes = 0;
48
+   unsigned char *data = NULL;
49
+   Window ewmh_window = 0;
50
+
51
+   int status = XGetWindowProperty(
52
+           display,
53
+           DefaultRootWindow(display),
54
+           netSupportingWmCheck,
55
+           0L,
56
+           1L,
57
+           false,
58
+           XA_WINDOW,
59
+           &actualType,
60
+           &format,
61
+           &num,
62
+           &bytes,
63
+           &data);
64
+
65
+   if (status == Success) {
66
+       if (num > 0) {
67
+           ewmh_window = ((Window*)data)[0];
68
+       }
69
+       if (data) {
70
+           XFree(data);
71
+           data = NULL;
72
+       }
73
+   }
74
+
75
+   if (ewmh_window) {
76
+       status = XGetWindowProperty(
77
+               display,
78
+               ewmh_window,
79
+               netSupportingWmCheck,
80
+               0L,
81
+               1L,
82
+               false,
83
+               XA_WINDOW,
84
+               &actualType,
85
+               &format,
86
+               &num,
87
+               &bytes,
88
+               &data);
89
+       if (status != Success || num == 0 ||
90
+               ewmh_window != ((Window*)data)[0]) {
91
+           ewmh_window = 0;
92
+       }
93
+       if (status == Success && data) {
94
+           XFree(data);
95
+       }
96
+   }
97
+
98
+   return ewmh_window != 0;
99
+}
100
+
101
+static std::vector<Window> getTopLevelWindows()
102
+{
103
+   std::vector<Window> res;
104
+
105
+   res.resize(0);
106
+
107
+   if (!ewmhIsSupported()) {
108
+       return res;
109
+   }
110
+
111
+   Atom netClList = XInternAtom(disp(), "_NET_CLIENT_LIST", true);
112
+   Atom actualType;
113
+   int format;
114
+   unsigned long num, bytes;
115
+   Window* data = 0;
116
+
117
+   for (int i = 0; i < ScreenCount(disp()); ++i) {
118
+       Window rootWin = RootWindow(disp(), i);
119
+
120
+       int status = XGetWindowProperty(
121
+               disp(),
122
+               rootWin,
123
+               netClList,
124
+               0L,
125
+               ~0L,
126
+               false,
127
+               AnyPropertyType,
128
+               &actualType,
129
+               &format,
130
+               &num,
131
+               &bytes,
132
+               (uint8_t**)&data);
133
+
134
+       if (status != Success) {
135
+           continue;
136
+       }
137
+
138
+       for (unsigned long i = 0; i < num; ++i)
139
+           res.emplace_back(data[i]);
140
+
141
+       XFree(data);
142
+   }
143
+
144
+   return res;
145
+}
146
+
147
+static std::string GetWindowTitle(size_t i)
148
+{
149
+   Window w = getTopLevelWindows().at(i);
150
+   std::string windowTitle;
151
+   char* name;
152
+
153
+   int status = XFetchName(disp(), w, &name);
154
+   if (status >= Success && name != nullptr)
155
+   {
156
+       std::string str(name);
157
+       windowTitle = str;
158
+   }
159
+
160
+   XFree(name);
161
+
162
+   return windowTitle;
163
+}
164
+
165
+void GetWindowList(vector<string> &windows)
166
+{
167
+   windows.resize(0);
168
+
169
+   for (size_t i = 0; i < getTopLevelWindows().size(); ++i){
170
+       if (GetWindowTitle(i) != "")
171
+           windows.emplace_back(GetWindowTitle(i));
172
+   }
173
+}
174
+
175
+void GetCurrentWindowTitle(string &title)
176
+{
177
+   if (!ewmhIsSupported()) {
178
+       return;
179
+   }
180
+
181
+   Atom active = XInternAtom(disp(), "_NET_ACTIVE_WINDOW", true);
182
+   Atom actualType;
183
+   int format;
184
+   unsigned long num, bytes;
185
+   Window* data = 0;
186
+   char* name;
187
+
188
+   Window rootWin = RootWindow(disp(), 0);
189
+
190
+   XGetWindowProperty(
191
+           disp(),
192
+           rootWin,
193
+           active,
194
+           0L,
195
+           ~0L,
196
+           false,
197
+           AnyPropertyType,
198
+           &actualType,
199
+           &format,
200
+           &num,
201
+           &bytes,
202
+           (uint8_t**)&data);
203
+
204
+   int status = XFetchName(disp(), data[0], &name);
205
+
206
+   if (status >= Success && name != nullptr) {
207
+       std::string str(name);
208
+       title = str;
209
+   }
210
+
211
+   XFree(name);
212
+}
213
obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/bn-BD.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+SceneSwitcher="স্বয়ংক্রিয় দৃশ্য পরিবর্তক"
3
+SceneSwitcher.OnNoMatch.SwitchTo="পরিবর্তন করুন:"
4
+SceneSwitcher.CheckInterval="সক্রিয় উইন্ডো শিরোনাম চেক করুন প্রতি:"
5
+InvalidRegex.Text="এক্সপ্রেশন প্রবেশ করিয়েছেন তা অবৈধ।."
6
+Active="সক্রিয়"
7
+Inactive="নিষ্ক্রিয়"
8
+
9
+Captions.AudioSource="অডিও উৎস"
10
+Captions.CurrentSystemLanguage="বর্তমান সিস্টেমের ভাষা (%1)"
11
+
12
+OutputTimer="আউটপুট টাইমার"
13
+OutputTimer.Stream="এর পরে বন্ধ।:"
14
+
15
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ca-ES.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Subtítols (Experimental)"
3
 Captions.AudioSource="Font d'àudio"
4
 Captions.CurrentSystemLanguage="Idioma actual del sistema (%1)"
5
+Captions.Provider="Proveïdor"
6
+Captions.Error.GenericFail="No s'ha pogut iniciar els subtítols"
7
 
8
 OutputTimer="Temporitzador de sortida"
9
 OutputTimer.Stream="Atura la transmissió després de:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/cs-CZ.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Titulky (experiment.)"
3
 Captions.AudioSource="Zdroj zvuku"
4
 Captions.CurrentSystemLanguage="Aktuální systémový jazyk (%1)"
5
+Captions.Provider="Zprostředkovatel"
6
+Captions.Error.GenericFail="Nezdařilo se spuštění titulků"
7
 
8
 OutputTimer="Časovač"
9
 OutputTimer.Stream="Přestat vysílat po:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/da-DK.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Undertekster (eksperimentel)"
3
 Captions.AudioSource="Lydkilde"
4
 Captions.CurrentSystemLanguage="Aktuelt systemsprog (%1)"
5
+Captions.Provider="Leverandør"
6
+Captions.Error.GenericFail="Kunne ikke starte tekster"
7
 
8
 OutputTimer="Output-timer"
9
 OutputTimer.Stream="Stands streaming efter:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Untertitel (experimentell)"
3
 Captions.AudioSource="Audioquelle"
4
 Captions.CurrentSystemLanguage="Aktuelle Systemsprache (%1)"
5
+Captions.Provider="Service"
6
+Captions.Error.GenericFail="Fehler beim Starten der Untertitel"
7
 
8
 OutputTimer="Ausgabetimer"
9
 OutputTimer.Stream="Stoppe Stream nach:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Subtítulos (Experimental)"
3
 Captions.AudioSource="Fuente de audio"
4
 Captions.CurrentSystemLanguage="Idioma actual del sistema (%1)"
5
+Captions.Provider="Proveedor"
6
+Captions.Error.GenericFail="Fallo al iniciar los subtítulos"
7
 
8
 OutputTimer="Temporizador de salida"
9
 OutputTimer.Stream="Detener la transmisión después de:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/et-EE.ini Changed
17
 
1
@@ -4,6 +4,8 @@
2
 SceneSwitcher.OnNoMatch.SwitchTo="Lülitu ümber:"
3
 SceneSwitcher.CheckInterval="Kontrollige aktiivse akna pealkiri iga:"
4
 SceneSwitcher.ActiveOrNotActive="Stseen vahetaja on:"
5
+InvalidRegex.Title="Kehtetu regulaaravaldis"
6
+InvalidRegex.Text="Sisestatud regulaaravaldis on kehtetu."
7
 Active="Aktiivne"
8
 Inactive="Inaktiivne"
9
 Start="Alusta"
10
@@ -18,4 +20,6 @@
11
 OutputTimer.Record="Lõpeta voogedastus pärast:"
12
 OutputTimer.Stream.StoppingIn="Voogedastus lõppeb:"
13
 OutputTimer.Record.StoppingIn="Salvestamine lõppeb:"
14
+OutputTimer.Stream.EnableEverytime="Lülita voogedastuse taimer alati sisse"
15
+OutputTimer.Record.EnableEverytime="Lülita salvestus taimer alati sisse"
16
 
17
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Epigrafeak (esperimentala)"
3
 Captions.AudioSource="Audio-iturburua"
4
 Captions.CurrentSystemLanguage="Sistemaren hizkuntza (%1)"
5
+Captions.Provider="Hornitzailea"
6
+Captions.Error.GenericFail="Huts egin du grabazioak"
7
 
8
 OutputTimer="Irteera tenporizadorea"
9
 OutputTimer.Stream="Gelditu transmisioa hau pasata:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fi-FI.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Kuvatekstit (Experimental)"
3
 Captions.AudioSource="Äänilähde"
4
 Captions.CurrentSystemLanguage="Järjestelmän kieli (%1)"
5
+Captions.Provider="Tarjoaja"
6
+Captions.Error.GenericFail="Kuvatekstityksen aloittaminen epäonnistui"
7
 
8
 OutputTimer="Ulostulo-ajastin"
9
 OutputTimer.Stream="Pysäyttää lähetyksen:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fr-FR.ini Changed
19
 
1
@@ -2,7 +2,7 @@
2
 SceneSwitcher.OnNoMatch="Si aucune fenêtre ne correspond :"
3
 SceneSwitcher.OnNoMatch.DontSwitch="Ne rien faire"
4
 SceneSwitcher.OnNoMatch.SwitchTo="Basculer vers :"
5
-SceneSwitcher.CheckInterval="Détecter le titre de la fenêtre active toutes les :"
6
+SceneSwitcher.CheckInterval="Vérifier le titre de la fenêtre active toutes les :"
7
 SceneSwitcher.ActiveOrNotActive="Etat du sélecteur automatique :"
8
 InvalidRegex.Title="Expression invalide"
9
 InvalidRegex.Text="L'expression régulière saisie est invalide."
10
@@ -14,6 +14,8 @@
11
 Captions="Sous-titres (expérimental)"
12
 Captions.AudioSource="Source audio"
13
 Captions.CurrentSystemLanguage="Langue du système (%1)"
14
+Captions.Provider="Sous-Titres"
15
+Captions.Error.GenericFail="Impossible de démarrer les sous-titres"
16
 
17
 OutputTimer="Minuterie des sorties"
18
 OutputTimer.Stream="Arrêter le streaming dans :"
19
obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/he-IL.ini Added
27
 
1
@@ -0,0 +1,25 @@
2
+SceneSwitcher.OnNoMatch="כאשר אין חלון מתאים:"
3
+SceneSwitcher.OnNoMatch.DontSwitch="אל תעבור"
4
+SceneSwitcher.OnNoMatch.SwitchTo="עבור ל:"
5
+SceneSwitcher.CheckInterval="בדוק כותרת חלון פעיל בכל:"
6
+InvalidRegex.Title="ביטוי רגולרי לא חוקי"
7
+InvalidRegex.Text="הביטוי הרגולרי שהזנת אינו חוקי."
8
+Active="פעיל"
9
+Inactive="לא פעיל"
10
+Start="התחל"
11
+Stop="עצור"
12
+
13
+Captions="כיתובים (ניסיוני)"
14
+Captions.AudioSource="מקור שמע"
15
+Captions.CurrentSystemLanguage="שפת המערכת הנוכחי (%1)"
16
+Captions.Provider="ספק"
17
+Captions.Error.GenericFail="נכשלה הפעלת כיתובים"
18
+
19
+OutputTimer="פלט טיימר"
20
+OutputTimer.Stream="הפסק הזרמה לאחר:"
21
+OutputTimer.Record="עצור את הקלטה לאחר:"
22
+OutputTimer.Stream.StoppingIn="הזרמה עוצרת ב:"
23
+OutputTimer.Record.StoppingIn="הקלטה עוצרת ב:"
24
+OutputTimer.Stream.EnableEverytime="הפעל טיימר הזרמה כל פעם"
25
+OutputTimer.Record.EnableEverytime="הפעל טיימר הקלטה כל פעם"
26
+
27
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hu-HU.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Feliratok (Kísérleti)"
3
 Captions.AudioSource="Audio forrás"
4
 Captions.CurrentSystemLanguage="Rendszer aktuális nyelve (%1)"
5
+Captions.Provider="Szolgáltató"
6
+Captions.Error.GenericFail="Felirat indítása sikertelen"
7
 
8
 OutputTimer="Kimeneti időzítő"
9
 OutputTimer.Stream="Stream leállítása:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ja-JP.ini Changed
14
 
1
@@ -11,9 +11,11 @@
2
 Start="開始"
3
 Stop="停止"
4
 
5
-Captions="見出し (実験的)"
6
+Captions="字幕 (実験的)"
7
 Captions.AudioSource="音声ソース"
8
 Captions.CurrentSystemLanguage="現在のシステム言語 (%1)"
9
+Captions.Provider="プロバイダ"
10
+Captions.Error.GenericFail="字幕の開始に失敗しました"
11
 
12
 OutputTimer="出力タイマー"
13
 OutputTimer.Stream="配信停止の時間設定:"
14
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ko-KR.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="자막 (실험적 기능)"
3
 Captions.AudioSource="오디오 소스"
4
 Captions.CurrentSystemLanguage="현재 시스템 언어 (%1)"
5
+Captions.Provider="공급자"
6
+Captions.Error.GenericFail="자막을 시작하지 못했습니다"
7
 
8
 OutputTimer="출력 시간 설정"
9
 OutputTimer.Stream="이 시간 이후 방송 중단:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nl-NL.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Ondertiteling (Experimenteel)"
3
 Captions.AudioSource="Audiobron"
4
 Captions.CurrentSystemLanguage="Huidige Systeemtaal (%1)"
5
+Captions.Provider="Provider"
6
+Captions.Error.GenericFail="Kon de ondertitelingen niet starten"
7
 
8
 OutputTimer="Uitvoertimer"
9
 OutputTimer.Stream="Stop met streamen na:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Podpisy (eksperymentalne)"
3
 Captions.AudioSource="Źródła dźwięku"
4
 Captions.CurrentSystemLanguage="Obecny język systemu (%1)"
5
+Captions.Provider="Silnik"
6
+Captions.Error.GenericFail="Uruchomienie napisów nie powiodło się"
7
 
8
 OutputTimer="Wyłącznik czasowy"
9
 OutputTimer.Stream="Zatrzymaj stream po:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-BR.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Legendas (Experimental)"
3
 Captions.AudioSource="Fonte de Áudio"
4
 Captions.CurrentSystemLanguage="Idioma Atual do Sistema (%1)"
5
+Captions.Provider="Provedor"
6
+Captions.Error.GenericFail="Falha ao iniciar legendas"
7
 
8
 OutputTimer="Temporizador de saída"
9
 OutputTimer.Stream="Parar a transmissão após:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Субтитры (экспериментально)"
3
 Captions.AudioSource="Источник звука"
4
 Captions.CurrentSystemLanguage="Текущий язык системы (%1)"
5
+Captions.Provider="Поставщик"
6
+Captions.Error.GenericFail="Не удалось запустить субтитры"
7
 
8
 OutputTimer="Таймер записи и стрима"
9
 OutputTimer.Stream="Завершить стрим через:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Undertexter (experimentell)"
3
 Captions.AudioSource="Ljudkälla"
4
 Captions.CurrentSystemLanguage="Aktuellt systemspråk (%1)"
5
+Captions.Provider="Tillhandahållare"
6
+Captions.Error.GenericFail="Det gick inte att starta undertexter"
7
 
8
 OutputTimer="Utdatatimer"
9
 OutputTimer.Stream="Sluta streama efter:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/tr-TR.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Altyazı (Deneysel)"
3
 Captions.AudioSource="Ses kaynağı"
4
 Captions.CurrentSystemLanguage="Geçerli Sistem Dili (%1)"
5
+Captions.Provider="Sağlayıcı"
6
+Captions.Error.GenericFail="Altyazı başlatılamadı"
7
 
8
 OutputTimer="Çıkış Zamanlayıcısı"
9
 OutputTimer.Stream="Şuradan sonra yayını durdur:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/uk-UA.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="Субтитри (експериментально)"
3
 Captions.AudioSource="Джерело Аудіо"
4
 Captions.CurrentSystemLanguage="Поточна мова Системи (%1)"
5
+Captions.Provider="Постачальник"
6
+Captions.Error.GenericFail="Не вдалося запустити субтитри"
7
 
8
 OutputTimer="Таймер для Виводу"
9
 OutputTimer.Stream="Закінчити трансляцію за:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="标题(实验)"
3
 Captions.AudioSource="音频源"
4
 Captions.CurrentSystemLanguage="当前系统语言 (%1)"
5
+Captions.Provider="供应商"
6
+Captions.Error.GenericFail="启动捕获失败"
7
 
8
 OutputTimer="输出计时器"
9
 OutputTimer.Stream="停止流处理后:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-TW.ini Changed
10
 
1
@@ -14,6 +14,8 @@
2
 Captions="標題 (實驗)"
3
 Captions.AudioSource="音訊源"
4
 Captions.CurrentSystemLanguage="目前系統語言 (%1)"
5
+Captions.Provider="提供程式"
6
+Captions.Error.GenericFail="啟動標題失敗"
7
 
8
 OutputTimer="輸出計時器"
9
 OutputTimer.Stream="在下面時間後停止串流:"
10
obs-studio-18.0.2.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools.c -> obs-studio-19.0.2.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools.c Changed
38
 
1
@@ -4,10 +4,8 @@
2
 OBS_DECLARE_MODULE()
3
 OBS_MODULE_USE_DEFAULT_LOCALE("frontend-tools", "en-US")
4
 
5
-#if defined(_WIN32) || defined(__APPLE__)
6
 void InitSceneSwitcher();
7
 void FreeSceneSwitcher();
8
-#endif
9
 
10
 #if defined(_WIN32) && BUILD_CAPTIONS
11
 void InitCaptions();
12
@@ -19,23 +17,19 @@
13
 
14
 bool obs_module_load(void)
15
 {
16
-#if defined(_WIN32) || defined(__APPLE__)
17
-   InitSceneSwitcher();
18
-#endif
19
 #if defined(_WIN32) && BUILD_CAPTIONS
20
    InitCaptions();
21
 #endif
22
+   InitSceneSwitcher();
23
    InitOutputTimer();
24
    return true;
25
 }
26
 
27
 void obs_module_unload(void)
28
 {
29
-#if defined(_WIN32) || defined(__APPLE__)
30
-   FreeSceneSwitcher();
31
-#endif
32
 #if defined(_WIN32) && BUILD_CAPTIONS
33
    FreeCaptions();
34
 #endif
35
+   FreeSceneSwitcher();
36
    FreeOutputTimer();
37
 }
38
obs-studio-18.0.2.tar.xz/UI/obs-app.cpp -> obs-studio-19.0.2.tar.xz/UI/obs-app.cpp Changed
198
 
1
@@ -61,7 +61,7 @@
2
 static string currentLogFile;
3
 static string lastLogFile;
4
 
5
-static bool portable_mode = false;
6
+bool portable_mode = false;
7
 static bool log_verbose = false;
8
 static bool unfiltered_log = false;
9
 bool opt_start_streaming = false;
10
@@ -344,11 +344,11 @@
11
    def_log_handler(log_level, msg, args2, nullptr);
12
 #endif
13
 
14
-   if (too_many_repeated_entries(logFile, msg, str))
15
-       return;
16
-
17
-   if (log_level <= LOG_INFO || log_verbose)
18
+   if (log_level <= LOG_INFO || log_verbose) {
19
+       if (too_many_repeated_entries(logFile, msg, str))
20
+           return;
21
        LogStringChunk(logFile, str);
22
+   }
23
 
24
 #if defined(_WIN32) && defined(OBS_DEBUGBREAK_ON_ERROR)
25
    if (log_level <= LOG_ERROR && IsDebuggerPresent())
26
@@ -410,6 +410,11 @@
27
    config_set_default_bool(globalConfig, "BasicWindow",
28
            "ShowStatusBar", true);
29
 
30
+#ifdef _WIN32
31
+   config_set_default_bool(globalConfig, "Audio", "DisableAudioDucking",
32
+           true);
33
+#endif
34
+
35
 #ifdef __APPLE__
36
    config_set_default_bool(globalConfig, "Video", "DisableOSXVSync", true);
37
    config_set_default_bool(globalConfig, "Video", "ResetOSXVSyncOnExit",
38
@@ -578,6 +583,7 @@
39
 bool OBSApp::InitGlobalConfig()
40
 {
41
    char path[512];
42
+   bool changed = false;
43
 
44
    int len = GetConfigPath(path, sizeof(path),
45
            "obs-studio/global.ini");
46
@@ -601,6 +607,7 @@
47
            config_set_string(globalConfig,
48
                    "Basic", "SceneCollectionFile",
49
                    path.c_str());
50
+           changed = true;
51
        }
52
    }
53
 
54
@@ -612,9 +619,24 @@
55
                    opt_starting_profile.c_str());
56
            config_set_string(globalConfig, "Basic", "ProfileDir",
57
                    path.c_str());
58
+           changed = true;
59
        }
60
    }
61
 
62
+   if (!config_has_user_value(globalConfig, "General", "Pre19Defaults")) {
63
+       uint32_t lastVersion = config_get_int(globalConfig, "General",
64
+               "LastVersion");
65
+       bool useOldDefaults = lastVersion &&
66
+           lastVersion < MAKE_SEMANTIC_VERSION(19, 0, 0);
67
+
68
+       config_set_bool(globalConfig, "General", "Pre19Defaults",
69
+               useOldDefaults);
70
+       changed = true;
71
+   }
72
+
73
+   if (changed)
74
+       config_save_safe(globalConfig, "tmp", nullptr);
75
+
76
    return InitGlobalConfigDefaults();
77
 }
78
 
79
@@ -733,6 +755,13 @@
80
 
81
 OBSApp::~OBSApp()
82
 {
83
+#ifdef _WIN32
84
+   bool disableAudioDucking = config_get_bool(globalConfig, "Audio",
85
+           "DisableAudioDucking");
86
+   if (disableAudioDucking)
87
+       DisableAudioDucking(false);
88
+#endif
89
+
90
 #ifdef __APPLE__
91
    bool vsyncDiabled = config_get_bool(globalConfig, "Video",
92
            "DisableOSXVSync");
93
@@ -851,6 +880,13 @@
94
    config_set_default_string(globalConfig, "Basic", "SceneCollectionFile",
95
            Str("Untitled"));
96
 
97
+#ifdef _WIN32
98
+   bool disableAudioDucking = config_get_bool(globalConfig, "Audio",
99
+           "DisableAudioDucking");
100
+   if (disableAudioDucking)
101
+       DisableAudioDucking(true);
102
+#endif
103
+
104
 #ifdef __APPLE__
105
    if (config_get_bool(globalConfig, "Video", "DisableOSXVSync"))
106
        EnableOSXVSync(false);
107
@@ -903,6 +939,8 @@
108
        blog(LOG_INFO, "Portable mode: %s",
109
                portable_mode ? "true" : "false");
110
 
111
+       setQuitOnLastWindowClosed(false);
112
+
113
        mainWindow = new OBSBasic();
114
 
115
        mainWindow->setAttribute(Qt::WA_DeleteOnClose, true);
116
@@ -1185,8 +1223,16 @@
117
    dst << "obs-studio/logs/" << currentLogFile.c_str();
118
 
119
    BPtr<char> path(GetConfigPathPtr(dst.str().c_str()));
120
+
121
+#ifdef _WIN32
122
+   BPtr<wchar_t> wpath;
123
+   os_utf8_to_wcs_ptr(path, 0, &wpath);
124
+   logFile.open(wpath,
125
+           ios_base::in | ios_base::out | ios_base::trunc);
126
+#else
127
    logFile.open(path,
128
            ios_base::in | ios_base::out | ios_base::trunc);
129
+#endif
130
 
131
    if (logFile.is_open()) {
132
        delete_oldest_file("obs-studio/logs");
133
@@ -1289,6 +1335,46 @@
134
 
135
        program.installTranslator(&translator);
136
 
137
+#ifdef _WIN32
138
+       /* --------------------------------------- */
139
+       /* check and warn if already running       */
140
+
141
+       bool already_running = false;
142
+       RunOnceMutex rom = GetRunOnceMutex(already_running);
143
+
144
+       if (already_running) {
145
+           blog(LOG_WARNING, "\n================================");
146
+           blog(LOG_WARNING, "Warning: OBS is already running!");
147
+           blog(LOG_WARNING, "================================\n");
148
+
149
+           QMessageBox::StandardButtons buttons(
150
+                   QMessageBox::Yes | QMessageBox::Cancel);
151
+           QMessageBox mb(QMessageBox::Question,
152
+                   QTStr("AlreadyRunning.Title"),
153
+                   QTStr("AlreadyRunning.Text"),
154
+                   buttons,
155
+                   nullptr);
156
+           mb.setButtonText(QMessageBox::Yes,
157
+                   QTStr("AlreadyRunning.LaunchAnyway"));
158
+           mb.setButtonText(QMessageBox::Cancel, QTStr("Cancel"));
159
+           mb.setDefaultButton(QMessageBox::Cancel);
160
+
161
+           QMessageBox::StandardButton button;
162
+           button = (QMessageBox::StandardButton)mb.exec();
163
+           if (button == QMessageBox::Cancel) {
164
+               blog(LOG_INFO, "User shut down the program "
165
+                       "because OBS was already "
166
+                       "running");
167
+               return 0;
168
+           }
169
+
170
+           blog(LOG_WARNING, "User is now running a secondary "
171
+                   "instance of OBS!");
172
+       }
173
+
174
+       /* --------------------------------------- */
175
+#endif
176
+
177
        if (!program.OBSInit())
178
            return 0;
179
 
180
@@ -1328,8 +1414,16 @@
181
    BPtr<char> path(GetConfigPathPtr(name.c_str()));
182
 
183
    fstream file;
184
-   file.open(path, ios_base::in | ios_base::out | ios_base::trunc |
185
+
186
+#ifdef _WIN32
187
+   BPtr<wchar_t> wpath;
188
+   os_utf8_to_wcs_ptr(path, 0, &wpath);
189
+   file.open(wpath, ios_base::in | ios_base::out | ios_base::trunc |
190
+           ios_base::binary);
191
+#else
192
+   file.open(path, ios_base::in | ios_base::out | ios_base::trunc |
193
            ios_base::binary);
194
+#endif
195
    file << text;
196
    file.close();
197
 
198
obs-studio-18.0.2.tar.xz/UI/obs-app.hpp -> obs-studio-19.0.2.tar.xz/UI/obs-app.hpp Changed
9
 
1
@@ -176,6 +176,7 @@
2
    return window->GetProfilePath(path, size, file);
3
 }
4
 
5
+extern bool portable_mode;
6
 extern bool opt_start_streaming;
7
 extern bool opt_start_recording;
8
 extern bool opt_start_replaybuffer;
9
obs-studio-18.0.2.tar.xz/UI/platform-windows.cpp -> obs-studio-19.0.2.tar.xz/UI/platform-windows.cpp Changed
130
 
1
@@ -30,6 +30,13 @@
2
 #include <shellapi.h>
3
 #include <shlobj.h>
4
 #include <Dwmapi.h>
5
+#include <psapi.h>
6
+#include <mmdeviceapi.h>
7
+#include <audiopolicy.h>
8
+
9
+#include <util/windows/WinHandle.hpp>
10
+#include <util/windows/HRError.hpp>
11
+#include <util/windows/ComPtr.hpp>
12
 
13
 static inline bool check_path(const char* data, const char *path,
14
        string &output)
15
@@ -216,3 +223,114 @@
16
    ex_style |= WS_EX_ACCEPTFILES;
17
    SetWindowLongPtr(hwnd, GWL_EXSTYLE, ex_style);
18
 }
19
+
20
+bool DisableAudioDucking(bool disable)
21
+{
22
+   ComPtr<IMMDeviceEnumerator>   devEmum;
23
+   ComPtr<IMMDevice>             device;
24
+   ComPtr<IAudioSessionManager2> sessionManager2;
25
+   ComPtr<IAudioSessionControl>  sessionControl;
26
+   ComPtr<IAudioSessionControl2> sessionControl2;
27
+
28
+   HRESULT result = CoCreateInstance(__uuidof(MMDeviceEnumerator),
29
+           nullptr, CLSCTX_INPROC_SERVER,
30
+           __uuidof(IMMDeviceEnumerator),
31
+           (void **)&devEmum);
32
+   if (FAILED(result))
33
+       return false;
34
+
35
+   result = devEmum->GetDefaultAudioEndpoint(eRender, eConsole, &device);
36
+   if (FAILED(result))
37
+       return false;
38
+
39
+   result = device->Activate(__uuidof(IAudioSessionManager2),
40
+           CLSCTX_INPROC_SERVER, nullptr,
41
+           (void **)&sessionManager2);
42
+   if (FAILED(result))
43
+       return false;
44
+
45
+   result = sessionManager2->GetAudioSessionControl(nullptr, 0,
46
+           &sessionControl);
47
+   if (FAILED(result))
48
+       return false;
49
+
50
+   result = sessionControl->QueryInterface(&sessionControl2);
51
+   if (FAILED(result))
52
+       return false;
53
+
54
+   result = sessionControl2->SetDuckingPreference(disable);
55
+   return SUCCEEDED(result);
56
+}
57
+
58
+uint64_t CurrentMemoryUsage()
59
+{
60
+   PROCESS_MEMORY_COUNTERS pmc = {};
61
+   pmc.cb = sizeof(pmc);
62
+
63
+   if (!GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)))
64
+       return 0;
65
+
66
+   return (uint64_t)pmc.WorkingSetSize;
67
+}
68
+
69
+struct RunOnceMutexData {
70
+   WinHandle handle;
71
+
72
+   inline RunOnceMutexData(HANDLE h) : handle(h) {}
73
+};
74
+
75
+RunOnceMutex::RunOnceMutex(RunOnceMutex &&rom)
76
+{
77
+   delete data;
78
+   data = rom.data;
79
+   rom.data = nullptr;
80
+}
81
+
82
+RunOnceMutex::~RunOnceMutex()
83
+{
84
+   delete data;
85
+}
86
+
87
+RunOnceMutex &RunOnceMutex::operator=(RunOnceMutex &&rom)
88
+{
89
+   delete data;
90
+   data = rom.data;
91
+   rom.data = nullptr;
92
+   return *this;
93
+}
94
+
95
+RunOnceMutex GetRunOnceMutex(bool &already_running)
96
+{
97
+   string name;
98
+
99
+   if (!portable_mode) {
100
+       name = "OBSStudioCore";
101
+   } else {
102
+       char path[500];
103
+       *path = 0;
104
+       GetConfigPath(path, sizeof(path), "");
105
+       name = "OBSStudioPortable";
106
+       name += path;
107
+   }
108
+
109
+   BPtr<wchar_t> wname;
110
+   os_utf8_to_wcs_ptr(name.c_str(), name.size(), &wname);
111
+
112
+   if (wname) {
113
+       wchar_t *temp = wname;
114
+       while (*temp) {
115
+           if (!iswalnum(*temp))
116
+               *temp = L'_';
117
+           temp++;
118
+       }
119
+   }
120
+
121
+   HANDLE h = OpenMutexW(SYNCHRONIZE, false, wname.Get());
122
+   already_running = !!h;
123
+
124
+   if (!already_running)
125
+       h = CreateMutexW(nullptr, false, wname.Get());
126
+
127
+   RunOnceMutex rom(h ? new RunOnceMutexData(h) : nullptr);
128
+   return rom;
129
+}
130
obs-studio-18.0.2.tar.xz/UI/platform.hpp -> obs-studio-19.0.2.tar.xz/UI/platform.hpp Changed
26
 
1
@@ -42,6 +42,24 @@
2
 void SetAeroEnabled(bool enable);
3
 void SetProcessPriority(const char *priority);
4
 void SetWin32DropStyle(QWidget *window);
5
+bool DisableAudioDucking(bool disable);
6
+uint64_t CurrentMemoryUsage();
7
+
8
+struct RunOnceMutexData;
9
+
10
+class RunOnceMutex {
11
+   RunOnceMutexData *data = nullptr;
12
+public:
13
+   RunOnceMutex(RunOnceMutexData *data_) : data(data_) {}
14
+   RunOnceMutex(const RunOnceMutex &rom) = delete;
15
+   RunOnceMutex(RunOnceMutex &&rom);
16
+   ~RunOnceMutex();
17
+
18
+   RunOnceMutex &operator=(const RunOnceMutex &rom) = delete;
19
+   RunOnceMutex &operator=(RunOnceMutex &&rom);
20
+};
21
+
22
+RunOnceMutex GetRunOnceMutex(bool &already_running);
23
 #endif
24
 
25
 #ifdef __APPLE__
26
obs-studio-18.0.2.tar.xz/UI/qt-wrappers.cpp -> obs-studio-19.0.2.tar.xz/UI/qt-wrappers.cpp Changed
62
 
1
@@ -16,6 +16,8 @@
2
 ******************************************************************************/
3
 
4
 #include "qt-wrappers.hpp"
5
+#include "obs-app.hpp"
6
+
7
 #include <graphics/graphics.h>
8
 #include <QWidget>
9
 #include <QLayout>
10
@@ -42,6 +44,51 @@
11
    va_end(args);
12
 }
13
 
14
+QMessageBox::StandardButton OBSMessageBox::question(
15
+       QWidget *parent,
16
+       const QString &title,
17
+       const QString &text,
18
+       QMessageBox::StandardButtons buttons,
19
+       QMessageBox::StandardButton defaultButton)
20
+{
21
+   QMessageBox mb(QMessageBox::Question,
22
+           title, text, buttons,
23
+           parent);
24
+   mb.setDefaultButton(defaultButton);
25
+   if (buttons & QMessageBox::Ok) \
26
+       mb.setButtonText(QMessageBox::Ok, QTStr("OK"));
27
+#define translate_button(x) \
28
+   if (buttons & QMessageBox::x) \
29
+       mb.setButtonText(QMessageBox::x, QTStr(#x));
30
+   translate_button(Open);
31
+   translate_button(Save);
32
+   translate_button(Cancel);
33
+   translate_button(Close);
34
+   translate_button(Discard);
35
+   translate_button(Apply);
36
+   translate_button(Reset);
37
+   translate_button(Yes);
38
+   translate_button(No);
39
+   translate_button(No);
40
+   translate_button(Abort);
41
+   translate_button(Retry);
42
+   translate_button(Ignore);
43
+#undef translate_button
44
+   return (QMessageBox::StandardButton)mb.exec();
45
+}
46
+
47
+void OBSMessageBox::information(
48
+       QWidget *parent,
49
+       const QString &title,
50
+       const QString &text)
51
+{
52
+   QMessageBox mb(QMessageBox::Information,
53
+           title, text, QMessageBox::Ok,
54
+           parent);
55
+   mb.setButtonText(QMessageBox::Ok, QTStr("OK"));
56
+   mb.exec();
57
+}
58
+
59
 void QTToGSWindow(WId windowId, gs_window &gswindow)
60
 {
61
 #ifdef _WIN32
62
obs-studio-18.0.2.tar.xz/UI/qt-wrappers.hpp -> obs-studio-19.0.2.tar.xz/UI/qt-wrappers.hpp Changed
33
 
1
@@ -17,6 +17,7 @@
2
 
3
 #pragma once
4
 
5
+#include <QMessageBox>
6
 #include <QWidget>
7
 #include <obs.hpp>
8
 
9
@@ -29,8 +30,23 @@
10
 class QDataStream;
11
 class QWidget;
12
 class QLayout;
13
+class QString;
14
 struct gs_window;
15
 
16
+class OBSMessageBox {
17
+public:
18
+   static QMessageBox::StandardButton question(
19
+           QWidget *parent,
20
+           const QString &title,
21
+           const QString &text,
22
+           QMessageBox::StandardButtons buttons = QMessageBox::StandardButtons( QMessageBox::Yes | QMessageBox::No ),
23
+           QMessageBox::StandardButton defaultButton = QMessageBox::NoButton);
24
+   static void information(
25
+           QWidget *parent,
26
+           const QString &title,
27
+           const QString &text);
28
+};
29
+
30
 void OBSErrorBox(QWidget *parent, const char *msg, ...);
31
 
32
 void QTToGSWindow(WId windowId, gs_window &gswindow);
33
obs-studio-18.0.2.tar.xz/UI/win-update/win-update.cpp -> obs-studio-19.0.2.tar.xz/UI/win-update/win-update.cpp Changed
102
 
1
@@ -1,6 +1,7 @@
2
 #include "win-update-helpers.hpp"
3
 #include "update-window.hpp"
4
 #include "remote-text.hpp"
5
+#include "qt-wrappers.hpp"
6
 #include "win-update.hpp"
7
 #include "obs-app.hpp"
8
 
9
@@ -479,7 +480,7 @@
10
 
11
 void AutoUpdateThread::infoMsg(const QString &title, const QString &text)
12
 {
13
-   QMessageBox::information(App()->GetMainWindow(), title, text);
14
+   OBSMessageBox::information(App()->GetMainWindow(), title, text);
15
 }
16
 
17
 void AutoUpdateThread::info(const QString &title, const QString &text)
18
@@ -490,20 +491,20 @@
19
            Q_ARG(QString, text));
20
 }
21
 
22
-int AutoUpdateThread::queryUpdateSlot(bool manualUpdate, const QString &text)
23
+int AutoUpdateThread::queryUpdateSlot(bool localManualUpdate, const QString &text)
24
 {
25
-   OBSUpdate updateDlg(App()->GetMainWindow(), manualUpdate, text);
26
+   OBSUpdate updateDlg(App()->GetMainWindow(), localManualUpdate, text);
27
    return updateDlg.exec();
28
 }
29
 
30
-int AutoUpdateThread::queryUpdate(bool manualUpdate, const char *text_utf8)
31
+int AutoUpdateThread::queryUpdate(bool localManualUpdate, const char *text_utf8)
32
 {
33
    int ret = OBSUpdate::No;
34
    QString text = text_utf8;
35
    QMetaObject::invokeMethod(this, "queryUpdateSlot",
36
            Qt::BlockingQueuedConnection,
37
            Q_RETURN_ARG(int, ret),
38
-           Q_ARG(bool, manualUpdate),
39
+           Q_ARG(bool, localManualUpdate),
40
            Q_ARG(QString, text));
41
    return ret;
42
 }
43
@@ -536,7 +537,7 @@
44
    string         text;
45
    string         error;
46
    string         signature;
47
-   CryptProvider  provider;
48
+   CryptProvider  localProvider;
49
    BYTE           manifestHash[BLAKE2_HASH_LENGTH];
50
    bool           updatesAvailable = false;
51
    bool           success;
52
@@ -579,7 +580,7 @@
53
    /* ----------------------------------- *
54
     * create signature provider           */
55
 
56
-   if (!CryptAcquireContext(&provider,
57
+   if (!CryptAcquireContext(&localProvider,
58
                             nullptr,
59
                             MS_ENH_RSA_AES_PROV,
60
                             PROV_RSA_AES,
61
@@ -587,7 +588,7 @@
62
        throw strprintf("CryptAcquireContext failed: %lu",
63
                GetLastError());
64
 
65
-   ::provider = provider;
66
+   provider = localProvider;
67
 
68
    /* ----------------------------------- *
69
     * avoid downloading manifest again    */
70
@@ -638,7 +639,7 @@
71
        if (responseCode == 404)
72
            return;
73
 
74
-       throw strprintf("Failed to fetch manifest file: %s", error);   
75
+       throw strprintf("Failed to fetch manifest file: %s", error.c_str());
76
    }
77
 
78
    /* ----------------------------------- *
79
@@ -658,11 +659,11 @@
80
    if (responseCode == 200) {
81
        if (!QuickWriteFile(manifestPath, text.data(), text.size()))
82
            throw strprintf("Could not write file '%s'",
83
-                   manifestPath);
84
+                   manifestPath.Get());
85
    } else {
86
        if (!QuickReadFile(manifestPath, text))
87
            throw strprintf("Could not read file '%s'",
88
-                   manifestPath);
89
+                   manifestPath.Get());
90
    }
91
 
92
    /* ----------------------------------- *
93
@@ -764,7 +765,7 @@
94
        QString msg = QTStr("Updater.FailedToLaunch");
95
        info(msg, msg);
96
        throw strprintf("Can't launch updater '%s': %d",
97
-               updateFilePath, GetLastError());
98
+               updateFilePath.Get(), GetLastError());
99
    }
100
 
101
    /* force OBS to perform another update check immediately after updating
102
obs-studio-19.0.2.tar.xz/UI/window-basic-auto-config-test.cpp Added
1112
 
1
@@ -0,0 +1,1110 @@
2
+#include <chrono>
3
+
4
+#include <QFormLayout>
5
+
6
+#include <obs.hpp>
7
+#include <util/platform.h>
8
+#include <graphics/vec4.h>
9
+#include <graphics/graphics.h>
10
+#include <graphics/math-extra.h>
11
+
12
+#include "window-basic-auto-config.hpp"
13
+#include "window-basic-main.hpp"
14
+#include "qt-wrappers.hpp"
15
+#include "obs-app.hpp"
16
+
17
+#include "ui_AutoConfigTestPage.h"
18
+
19
+#define wiz reinterpret_cast<AutoConfig*>(wizard())
20
+
21
+using namespace std;
22
+
23
+/* ------------------------------------------------------------------------- */
24
+
25
+class TestMode {
26
+   obs_video_info ovi;
27
+   OBSSource source[6];
28
+
29
+   static void render_rand(void *, uint32_t cx, uint32_t cy)
30
+   {
31
+       gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
32
+       gs_eparam_t *randomvals[3] = {
33
+           gs_effect_get_param_by_name(solid, "randomvals1"),
34
+           gs_effect_get_param_by_name(solid, "randomvals2"),
35
+           gs_effect_get_param_by_name(solid, "randomvals3")
36
+       };
37
+
38
+       struct vec4 r;
39
+
40
+       for (int i = 0; i < 3; i++) {
41
+           vec4_set(&r,
42
+               rand_float(true) * 100.0f,
43
+               rand_float(true) * 100.0f,
44
+               rand_float(true) * 50000.0f + 10000.0f,
45
+               0.0f);
46
+           gs_effect_set_vec4(randomvals[i], &r);
47
+       }
48
+
49
+       while (gs_effect_loop(solid, "Random"))
50
+           gs_draw_sprite(nullptr, 0, cx, cy);
51
+   }
52
+
53
+public:
54
+   inline TestMode()
55
+   {
56
+       obs_get_video_info(&ovi);
57
+       obs_add_main_render_callback(render_rand, this);
58
+
59
+       for (uint32_t i = 0; i < 6; i++) {
60
+           source[i] = obs_get_output_source(i);
61
+           obs_source_release(source[i]);
62
+           obs_set_output_source(i, nullptr);
63
+       }
64
+   }
65
+
66
+   inline ~TestMode()
67
+   {
68
+       for (uint32_t i = 0; i < 6; i++)
69
+           obs_set_output_source(i, source[i]);
70
+
71
+       obs_remove_main_render_callback(render_rand, this);
72
+       obs_reset_video(&ovi);
73
+   }
74
+
75
+   inline void SetVideo(int cx, int cy, int fps_num, int fps_den)
76
+   {
77
+       obs_video_info newOVI = ovi;
78
+
79
+       newOVI.output_width = (uint32_t)cx;
80
+       newOVI.output_height = (uint32_t)cy;
81
+       newOVI.fps_num = (uint32_t)fps_num;
82
+       newOVI.fps_den = (uint32_t)fps_den;
83
+
84
+       obs_reset_video(&newOVI);
85
+   }
86
+};
87
+
88
+/* ------------------------------------------------------------------------- */
89
+
90
+#define TEST_STR(x)             "Basic.AutoConfig.TestPage." x
91
+#define SUBTITLE_TESTING        TEST_STR("Subtitle.Testing")
92
+#define SUBTITLE_COMPLETE       TEST_STR("Subtitle.Complete")
93
+#define TEST_BW                 TEST_STR("TestingBandwidth")
94
+#define TEST_BW_CONNECTING      TEST_STR("TestingBandwidth.Connecting")
95
+#define TEST_BW_CONNECT_FAIL    TEST_STR("TestingBandwidth.ConnectFailed")
96
+#define TEST_BW_SERVER          TEST_STR("TestingBandwidth.Server")
97
+#define TEST_RES                TEST_STR("TestingRes")
98
+#define TEST_RES_VAL            TEST_STR("TestingRes.Resolution")
99
+#define TEST_RES_FAIL           TEST_STR("TestingRes.Fail")
100
+#define TEST_SE                 TEST_STR("TestingStreamEncoder")
101
+#define TEST_RE                 TEST_STR("TestingRecordingEncoder")
102
+#define TEST_RESULT_SE          TEST_STR("Result.StreamingEncoder")
103
+#define TEST_RESULT_RE          TEST_STR("Result.RecordingEncoder")
104
+
105
+void AutoConfigTestPage::StartBandwidthStage()
106
+{
107
+   ui->progressLabel->setText(QTStr(TEST_BW));
108
+   testThread = std::thread([this] () {TestBandwidthThread();});
109
+}
110
+
111
+void AutoConfigTestPage::StartStreamEncoderStage()
112
+{
113
+   ui->progressLabel->setText(QTStr(TEST_SE));
114
+   testThread = std::thread([this] () {TestStreamEncoderThread();});
115
+}
116
+
117
+void AutoConfigTestPage::StartRecordingEncoderStage()
118
+{
119
+   ui->progressLabel->setText(QTStr(TEST_RE));
120
+   testThread = std::thread([this] () {TestRecordingEncoderThread();});
121
+}
122
+
123
+void AutoConfigTestPage::GetServers(std::vector<ServerInfo> &servers)
124
+{
125
+   OBSData settings = obs_data_create();
126
+   obs_data_release(settings);
127
+   obs_data_set_string(settings, "service", wiz->serviceName.c_str());
128
+
129
+   obs_properties_t *ppts = obs_get_service_properties("rtmp_common");
130
+   obs_property_t *p = obs_properties_get(ppts, "service");
131
+   obs_property_modified(p, settings);
132
+
133
+   p = obs_properties_get(ppts, "server");
134
+   size_t count = obs_property_list_item_count(p);
135
+   servers.reserve(count);
136
+
137
+   for (size_t i = 0; i < count; i++) {
138
+       const char *name = obs_property_list_item_name(p, i);
139
+       const char *server = obs_property_list_item_string(p, i);
140
+
141
+       if (wiz->CanTestServer(name)) {
142
+           ServerInfo info(name, server);
143
+           servers.push_back(info);
144
+       }
145
+   }
146
+
147
+   obs_properties_destroy(ppts);
148
+}
149
+
150
+static inline void string_depad_key(string &key)
151
+{
152
+   while (!key.empty()) {
153
+       char ch = key.back();
154
+       if (ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r')
155
+           key.pop_back();
156
+       else
157
+           break;
158
+   }
159
+}
160
+
161
+void AutoConfigTestPage::TestBandwidthThread()
162
+{
163
+   bool connected = false;
164
+   bool stopped = false;
165
+
166
+   TestMode testMode;
167
+   testMode.SetVideo(128, 128, 60, 1);
168
+
169
+   QMetaObject::invokeMethod(this, "Progress", Q_ARG(int, 0));
170
+
171
+   /*
172
+    * create encoders
173
+    * create output
174
+    * test for 10 seconds
175
+    */
176
+
177
+   QMetaObject::invokeMethod(this, "UpdateMessage",
178
+           Q_ARG(QString, QStringLiteral("")));
179
+
180
+   /* -----------------------------------*/
181
+   /* create obs objects                 */
182
+
183
+   const char *serverType = wiz->customServer
184
+       ? "rtmp_custom"
185
+       : "rtmp_common";
186
+
187
+   OBSEncoder vencoder = obs_video_encoder_create("obs_x264",
188
+           "test_x264", nullptr, nullptr);
189
+   OBSEncoder aencoder = obs_audio_encoder_create("ffmpeg_aac",
190
+           "test_aac", nullptr, 0, nullptr);
191
+   OBSService service = obs_service_create(serverType,
192
+           "test_service", nullptr, nullptr);
193
+   OBSOutput output = obs_output_create("rtmp_output",
194
+           "test_stream", nullptr, nullptr);
195
+   obs_output_release(output);
196
+   obs_encoder_release(vencoder);
197
+   obs_encoder_release(aencoder);
198
+   obs_service_release(service);
199
+
200
+   /* -----------------------------------*/
201
+   /* configure settings                 */
202
+
203
+   // service: "service", "server", "key"
204
+   // vencoder: "bitrate", "rate_control",
205
+   //           obs_service_apply_encoder_settings
206
+   // aencoder: "bitrate"
207
+   // output: "bind_ip" via main config -> "Output", "BindIP"
208
+   //         obs_output_set_service
209
+
210
+   OBSData service_settings = obs_data_create();
211
+   OBSData vencoder_settings = obs_data_create();
212
+   OBSData aencoder_settings = obs_data_create();
213
+   OBSData output_settings = obs_data_create();
214
+   obs_data_release(service_settings);
215
+   obs_data_release(vencoder_settings);
216
+   obs_data_release(aencoder_settings);
217
+   obs_data_release(output_settings);
218
+
219
+   std::string key = wiz->key;
220
+   if (wiz->service == AutoConfig::Service::Twitch) {
221
+       string_depad_key(key);
222
+       key += "?bandwidthtest";
223
+   }
224
+
225
+   obs_data_set_string(service_settings, "service",
226
+           wiz->serviceName.c_str());
227
+   obs_data_set_string(service_settings, "key", key.c_str());
228
+
229
+   obs_data_set_int(vencoder_settings, "bitrate", wiz->startingBitrate);
230
+   obs_data_set_string(vencoder_settings, "rate_control", "CBR");
231
+   obs_data_set_string(vencoder_settings, "preset", "veryfast");
232
+   obs_data_set_int(vencoder_settings, "keyint_sec", 2);
233
+
234
+   obs_data_set_int(aencoder_settings, "bitrate", 32);
235
+
236
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
237
+   const char *bind_ip = config_get_string(main->Config(), "Output",
238
+           "BindIP");
239
+   obs_data_set_string(output_settings, "bind_ip", bind_ip);
240
+
241
+   /* -----------------------------------*/
242
+   /* determine which servers to test    */
243
+
244
+   std::vector<ServerInfo> servers;
245
+   if (wiz->customServer)
246
+       servers.emplace_back(wiz->server.c_str(), wiz->server.c_str());
247
+   else
248
+       GetServers(servers);
249
+
250
+   /* just use the first server if it only has one alternate server */
251
+   if (servers.size() < 3)
252
+       servers.resize(1);
253
+
254
+   /* -----------------------------------*/
255
+   /* apply settings                     */
256
+
257
+   obs_service_update(service, service_settings);
258
+   obs_service_apply_encoder_settings(service,
259
+           vencoder_settings, aencoder_settings);
260
+
261
+   obs_encoder_update(vencoder, vencoder_settings);
262
+   obs_encoder_update(aencoder, aencoder_settings);
263
+   obs_output_update(output, output_settings);
264
+
265
+   /* -----------------------------------*/
266
+   /* connect encoders/services/outputs  */
267
+
268
+   obs_encoder_set_video(vencoder, obs_get_video());
269
+   obs_encoder_set_audio(aencoder, obs_get_audio());
270
+
271
+   obs_output_set_video_encoder(output, vencoder);
272
+   obs_output_set_audio_encoder(output, aencoder, 0);
273
+
274
+   obs_output_set_service(output, service);
275
+
276
+   /* -----------------------------------*/
277
+   /* connect signals                    */
278
+
279
+   auto on_started = [&] ()
280
+   {
281
+       unique_lock<mutex> lock(m);
282
+       connected = true;
283
+       stopped = false;
284
+       cv.notify_one();
285
+   };
286
+
287
+   auto on_stopped = [&] ()
288
+   {
289
+       unique_lock<mutex> lock(m);
290
+       connected = false;
291
+       stopped = true;
292
+       cv.notify_one();
293
+   };
294
+
295
+   using on_started_t = decltype(on_started);
296
+   using on_stopped_t = decltype(on_stopped);
297
+
298
+   auto pre_on_started = [] (void *data, calldata_t *)
299
+   {
300
+       on_started_t &on_started =
301
+           *reinterpret_cast<on_started_t*>(data);
302
+       on_started();
303
+   };
304
+
305
+   auto pre_on_stopped = [] (void *data, calldata_t *)
306
+   {
307
+       on_stopped_t &on_stopped =
308
+           *reinterpret_cast<on_stopped_t*>(data);
309
+       on_stopped();
310
+   };
311
+
312
+   signal_handler *sh = obs_output_get_signal_handler(output);
313
+   signal_handler_connect(sh, "start", pre_on_started, &on_started);
314
+   signal_handler_connect(sh, "stop", pre_on_stopped, &on_stopped);
315
+
316
+   /* -----------------------------------*/
317
+   /* test servers                       */
318
+
319
+   bool success = false;
320
+
321
+   for (size_t i = 0; i < servers.size(); i++) {
322
+       auto &server = servers[i];
323
+
324
+       connected = false;
325
+       stopped = false;
326
+
327
+       int per = int((i + 1) * 100 / servers.size());
328
+       QMetaObject::invokeMethod(this, "Progress", Q_ARG(int, per));
329
+       QMetaObject::invokeMethod(this, "UpdateMessage",
330
+               Q_ARG(QString, QTStr(TEST_BW_CONNECTING)
331
+                   .arg(server.name.c_str())));
332
+
333
+       obs_data_set_string(service_settings, "server",
334
+               server.address.c_str());
335
+       obs_service_update(service, service_settings);
336
+
337
+       if (!obs_output_start(output))
338
+           continue;
339
+
340
+       unique_lock<mutex> ul(m);
341
+       if (cancel) {
342
+           ul.unlock();
343
+           obs_output_force_stop(output);
344
+           return;
345
+       }
346
+       if (!stopped && !connected)
347
+           cv.wait(ul);
348
+       if (cancel) {
349
+           ul.unlock();
350
+           obs_output_force_stop(output);
351
+           return;
352
+       }
353
+       if (!connected)
354
+           continue;
355
+
356
+       QMetaObject::invokeMethod(this, "UpdateMessage",
357
+               Q_ARG(QString, QTStr(TEST_BW_SERVER)
358
+                   .arg(server.name.c_str())));
359
+
360
+       uint64_t t_start = os_gettime_ns();
361
+
362
+       cv.wait_for(ul, chrono::seconds(10));
363
+       if (stopped)
364
+           continue;
365
+       if (cancel) {
366
+           ul.unlock();
367
+           obs_output_force_stop(output);
368
+           return;
369
+       }
370
+
371
+       obs_output_stop(output);
372
+       cv.wait(ul);
373
+
374
+       uint64_t total_time = os_gettime_ns() - t_start;
375
+
376
+       int total_bytes = (int)obs_output_get_total_bytes(output);
377
+       uint64_t bitrate = (uint64_t)total_bytes * 8
378
+           * 1000000000 / total_time / 1000;
379
+
380
+       if (obs_output_get_frames_dropped(output) ||
381
+           (int)bitrate < (wiz->startingBitrate * 75 / 100)) {
382
+           server.bitrate = (int)bitrate * 70 / 100;
383
+       } else {
384
+           server.bitrate = wiz->startingBitrate;
385
+       }
386
+
387
+       server.ms = obs_output_get_connect_time_ms(output);
388
+       success = true;
389
+   }
390
+
391
+   if (!success) {
392
+       QMetaObject::invokeMethod(this, "Failure",
393
+               Q_ARG(QString, QTStr(TEST_BW_CONNECT_FAIL)));
394
+       return;
395
+   }
396
+
397
+   int bestBitrate = 0;
398
+   int bestMS = 0x7FFFFFFF;
399
+   string bestServer;
400
+   string bestServerName;
401
+
402
+   for (auto &server : servers) {
403
+       bool close = abs(server.bitrate - bestBitrate) < 400;
404
+
405
+       if ((!close && server.bitrate > bestBitrate) ||
406
+           (close && server.ms < bestMS)) {
407
+           bestServer = server.address;
408
+           bestServerName = server.name;
409
+           bestBitrate = server.bitrate;
410
+           bestMS = server.ms;
411
+       }
412
+   }
413
+
414
+   wiz->server = bestServer;
415
+   wiz->serverName = bestServerName;
416
+   wiz->idealBitrate = bestBitrate;
417
+
418
+   QMetaObject::invokeMethod(this, "NextStage");
419
+}
420
+
421
+/* this is used to estimate the lower bitrate limit for a given
422
+ * resolution/fps.  yes, it is a totally arbitrary equation that gets
423
+ * the closest to the expected values */
424
+static long double EstimateBitrateVal(int cx, int cy, int fps_num, int fps_den)
425
+{
426
+   long fps = (long double)fps_num / (long double)fps_den;
427
+   long double areaVal = pow((long double)(cx * cy), 0.85l);
428
+   return areaVal * sqrt(pow(fps, 1.1l));
429
+}
430
+
431
+static long double EstimateMinBitrate(int cx, int cy, int fps_num, int fps_den)
432
+{
433
+   long double val = EstimateBitrateVal(1920, 1080, 60, 1) / 5800.0l;
434
+   return EstimateBitrateVal(cx, cy, fps_num, fps_den) / val;
435
+}
436
+
437
+static long double EstimateUpperBitrate(int cx, int cy, int fps_num, int fps_den)
438
+{
439
+   long double val = EstimateBitrateVal(1280, 720, 30, 1) / 3000.0l;
440
+   return EstimateBitrateVal(cx, cy, fps_num, fps_den) / val;
441
+}
442
+
443
+struct Result {
444
+   int cx;
445
+   int cy;
446
+   int fps_num;
447
+   int fps_den;
448
+
449
+   inline Result(int cx_, int cy_, int fps_num_, int fps_den_)
450
+       : cx(cx_), cy(cy_), fps_num(fps_num_), fps_den(fps_den_)
451
+   {
452
+   }
453
+};
454
+
455
+static void CalcBaseRes(int &baseCX, int &baseCY)
456
+{
457
+   const int maxBaseArea = 1920 * 1200;
458
+   const int clipResArea = 1920 * 1080;
459
+
460
+   /* if base resolution unusually high, recalculate to a more reasonable
461
+    * value to start the downscaling at, based upon 1920x1080's area.
462
+    *
463
+    * for 16:9 resolutions this will always change the starting value to
464
+    * 1920x1080 */
465
+   if ((baseCX * baseCY) > maxBaseArea) {
466
+       long double xyAspect =
467
+           (long double)baseCX / (long double)baseCY;
468
+       baseCY = (int)sqrt((long double)clipResArea / xyAspect);
469
+       baseCX = (int)((long double)baseCY * xyAspect);
470
+   }
471
+}
472
+
473
+bool AutoConfigTestPage::TestSoftwareEncoding()
474
+{
475
+   TestMode testMode;
476
+   QMetaObject::invokeMethod(this, "UpdateMessage",
477
+           Q_ARG(QString, QStringLiteral("")));
478
+
479
+   /* -----------------------------------*/
480
+   /* create obs objects                 */
481
+
482
+   OBSEncoder vencoder = obs_video_encoder_create("obs_x264",
483
+           "test_x264", nullptr, nullptr);
484
+   OBSEncoder aencoder = obs_audio_encoder_create("ffmpeg_aac",
485
+           "test_aac", nullptr, 0, nullptr);
486
+   OBSOutput output = obs_output_create("null_output",
487
+           "null", nullptr, nullptr);
488
+   obs_output_release(output);
489
+   obs_encoder_release(vencoder);
490
+   obs_encoder_release(aencoder);
491
+
492
+   /* -----------------------------------*/
493
+   /* configure settings                 */
494
+
495
+   OBSData aencoder_settings = obs_data_create();
496
+   OBSData vencoder_settings = obs_data_create();
497
+   obs_data_release(aencoder_settings);
498
+   obs_data_release(vencoder_settings);
499
+   obs_data_set_int(aencoder_settings, "bitrate", 32);
500
+
501
+   if (wiz->type != AutoConfig::Type::Recording) {
502
+       obs_data_set_int(vencoder_settings, "keyint_sec", 2);
503
+       obs_data_set_int(vencoder_settings, "bitrate",
504
+               wiz->idealBitrate);
505
+       obs_data_set_string(vencoder_settings, "rate_control", "CBR");
506
+       obs_data_set_string(vencoder_settings, "profile", "main");
507
+       obs_data_set_string(vencoder_settings, "preset", "veryfast");
508
+   } else {
509
+       obs_data_set_int(vencoder_settings, "crf", 20);
510
+       obs_data_set_string(vencoder_settings, "rate_control", "CRF");
511
+       obs_data_set_string(vencoder_settings, "profile", "high");
512
+       obs_data_set_string(vencoder_settings, "preset", "veryfast");
513
+   }
514
+
515
+   /* -----------------------------------*/
516
+   /* apply settings                     */
517
+
518
+   obs_encoder_update(vencoder, vencoder_settings);
519
+   obs_encoder_update(aencoder, aencoder_settings);
520
+
521
+   /* -----------------------------------*/
522
+   /* connect encoders/services/outputs  */
523
+
524
+   obs_output_set_video_encoder(output, vencoder);
525
+   obs_output_set_audio_encoder(output, aencoder, 0);
526
+
527
+   /* -----------------------------------*/
528
+   /* connect signals                    */
529
+
530
+   auto on_stopped = [&] ()
531
+   {
532
+       unique_lock<mutex> lock(m);
533
+       cv.notify_one();
534
+   };
535
+
536
+   using on_stopped_t = decltype(on_stopped);
537
+
538
+   auto pre_on_stopped = [] (void *data, calldata_t *)
539
+   {
540
+       on_stopped_t &on_stopped =
541
+           *reinterpret_cast<on_stopped_t*>(data);
542
+       on_stopped();
543
+   };
544
+
545
+   signal_handler *sh = obs_output_get_signal_handler(output);
546
+   signal_handler_connect(sh, "deactivate", pre_on_stopped, &on_stopped);
547
+
548
+   /* -----------------------------------*/
549
+   /* calculate starting resolution      */
550
+
551
+   int baseCX = wiz->baseResolutionCX;
552
+   int baseCY = wiz->baseResolutionCY;
553
+   CalcBaseRes(baseCX, baseCY);
554
+
555
+   /* -----------------------------------*/
556
+   /* calculate starting test rates      */
557
+
558
+   int pcores = os_get_physical_cores();
559
+   int lcores = os_get_logical_cores();
560
+   int maxDataRate;
561
+   if (lcores > 8 || pcores > 4) {
562
+       /* superb */
563
+       maxDataRate = 1920 * 1200 * 60 + 1000;
564
+
565
+   } else if (lcores > 4 && pcores == 4) {
566
+       /* great */
567
+       maxDataRate = 1920 * 1080 * 60 + 1000;
568
+
569
+   } else if (pcores == 4) {
570
+       /* okay */
571
+       maxDataRate = 1920 * 1080 * 30 + 1000;
572
+
573
+   } else {
574
+       /* toaster */
575
+       maxDataRate = 960 * 540 * 30 + 1000;
576
+   }
577
+
578
+   /* -----------------------------------*/
579
+   /* perform tests                      */
580
+
581
+   vector<Result> results;
582
+   int i = 0;
583
+   int count = 1;
584
+
585
+   auto testRes = [&] (long double div, int fps_num, int fps_den,
586
+           bool force)
587
+   {
588
+       int per = ++i * 100 / count;
589
+       QMetaObject::invokeMethod(this, "Progress", Q_ARG(int, per));
590
+
591
+       /* no need for more than 3 tests max */
592
+       if (results.size() >= 3)
593
+           return true;
594
+
595
+       if (!fps_num || !fps_den) {
596
+           fps_num = wiz->specificFPSNum;
597
+           fps_den = wiz->specificFPSDen;
598
+       }
599
+
600
+       long double fps = ((long double)fps_num / (long double)fps_den);
601
+
602
+       int cx = int((long double)baseCX / div);
603
+       int cy = int((long double)baseCY / div);
604
+
605
+       if (!force && wiz->type != AutoConfig::Type::Recording) {
606
+           int est = EstimateMinBitrate(cx, cy, fps_num, fps_den);
607
+           if (est > wiz->idealBitrate)
608
+               return true;
609
+       }
610
+
611
+       long double rate = (long double)cx * (long double)cy * fps;
612
+       if (!force && rate > maxDataRate)
613
+           return true;
614
+
615
+       testMode.SetVideo(cx, cy, fps_num, fps_den);
616
+
617
+       obs_encoder_set_video(vencoder, obs_get_video());
618
+       obs_encoder_set_audio(aencoder, obs_get_audio());
619
+       obs_encoder_update(vencoder, vencoder_settings);
620
+
621
+       obs_output_set_media(output, obs_get_video(), obs_get_audio());
622
+
623
+       QString cxStr = QString::number(cx);
624
+       QString cyStr = QString::number(cy);
625
+
626
+       QString fpsStr = (fps_den > 1)
627
+           ? QString::number(fps, 'f', 2)
628
+           : QString::number(fps, 'g', 2);
629
+
630
+       QMetaObject::invokeMethod(this, "UpdateMessage",
631
+               Q_ARG(QString, QTStr(TEST_RES_VAL)
632
+                   .arg(cxStr, cyStr, fpsStr)));
633
+
634
+       unique_lock<mutex> ul(m);
635
+       if (cancel)
636
+           return false;
637
+
638
+       if (!obs_output_start(output)) {
639
+           QMetaObject::invokeMethod(this, "Failure",
640
+                   Q_ARG(QString, QTStr(TEST_RES_FAIL)));
641
+           return false;
642
+       }
643
+
644
+       cv.wait_for(ul, chrono::seconds(5));
645
+
646
+       obs_output_stop(output);
647
+       cv.wait(ul);
648
+
649
+       int skipped = (int)video_output_get_skipped_frames(
650
+               obs_get_video());
651
+       if (force || skipped <= 10)
652
+           results.emplace_back(cx, cy, fps_num, fps_den);
653
+
654
+       return !cancel;
655
+   };
656
+
657
+   if (wiz->specificFPSNum && wiz->specificFPSDen) {
658
+       count = 5;
659
+       if (!testRes(1.0, 0, 0, false)) return false;
660
+       if (!testRes(1.5, 0, 0, false)) return false;
661
+       if (!testRes(1.0 / 0.6, 0, 0, false)) return false;
662
+       if (!testRes(2.0, 0, 0, false)) return false;
663
+       if (!testRes(2.25, 0, 0, true)) return false;
664
+   } else {
665
+       count = 10;
666
+       if (!testRes(1.0, 60, 1, false)) return false;
667
+       if (!testRes(1.0, 30, 1, false)) return false;
668
+       if (!testRes(1.5, 60, 1, false)) return false;
669
+       if (!testRes(1.5, 30, 1, false)) return false;
670
+       if (!testRes(1.0 / 0.6, 60, 1, false)) return false;
671
+       if (!testRes(1.0 / 0.6, 30, 1, false)) return false;
672
+       if (!testRes(2.0, 60, 1, false)) return false;
673
+       if (!testRes(2.0, 30, 1, false)) return false;
674
+       if (!testRes(2.25, 60, 1, false)) return false;
675
+       if (!testRes(2.25, 30, 1, true)) return false;
676
+   }
677
+
678
+   /* -----------------------------------*/
679
+   /* find preferred settings            */
680
+
681
+   int minArea = 960 * 540 + 1000;
682
+
683
+   if (!wiz->specificFPSNum && wiz->preferHighFPS && results.size() > 1) {
684
+       Result &result1 = results[0];
685
+       Result &result2 = results[1];
686
+
687
+       if (result1.fps_num == 30 && result2.fps_num == 60) {
688
+           int nextArea = result2.cx * result2.cy;
689
+           if (nextArea >= minArea)
690
+               results.erase(results.begin());
691
+       }
692
+   }
693
+
694
+   Result result = results.front();
695
+   wiz->idealResolutionCX = result.cx;
696
+   wiz->idealResolutionCY = result.cy;
697
+   wiz->idealFPSNum = result.fps_num;
698
+   wiz->idealFPSDen = result.fps_den;
699
+
700
+   long double fUpperBitrate = EstimateUpperBitrate(
701
+           result.cx, result.cy, result.fps_num, result.fps_den);
702
+
703
+   int upperBitrate = int(floor(fUpperBitrate / 50.0l) * 50.0l);
704
+
705
+   if (wiz->streamingEncoder != AutoConfig::Encoder::x264) {
706
+       upperBitrate *= 114;
707
+       upperBitrate /= 100;
708
+   }
709
+
710
+   if (wiz->idealBitrate > upperBitrate)
711
+       wiz->idealBitrate = upperBitrate;
712
+
713
+   softwareTested = true;
714
+   return true;
715
+}
716
+
717
+void AutoConfigTestPage::FindIdealHardwareResolution()
718
+{
719
+   int baseCX = wiz->baseResolutionCX;
720
+   int baseCY = wiz->baseResolutionCY;
721
+   CalcBaseRes(baseCX, baseCY);
722
+
723
+   vector<Result> results;
724
+
725
+   int pcores = os_get_physical_cores();
726
+   int maxDataRate;
727
+   if (pcores >= 4) {
728
+       maxDataRate = 1920 * 1200 * 60 + 1000;
729
+   } else {
730
+       maxDataRate = 1280 * 720 * 30 + 1000;
731
+   }
732
+
733
+   auto testRes = [&] (long double div, int fps_num, int fps_den,
734
+           bool force)
735
+   {
736
+       if (results.size() >= 3)
737
+           return;
738
+
739
+       if (!fps_num || !fps_den) {
740
+           fps_num = wiz->specificFPSNum;
741
+           fps_den = wiz->specificFPSDen;
742
+       }
743
+
744
+       long double fps = ((long double)fps_num / (long double)fps_den);
745
+
746
+       int cx = int((long double)baseCX / div);
747
+       int cy = int((long double)baseCY / div);
748
+
749
+       long double rate = (long double)cx * (long double)cy * fps;
750
+       if (!force && rate > maxDataRate)
751
+           return;
752
+
753
+       int minBitrate = EstimateMinBitrate(cx, cy, fps_num, fps_den)
754
+           * 114 / 100;
755
+       if (wiz->type == AutoConfig::Type::Recording)
756
+           force = true;
757
+       if (force || wiz->idealBitrate >= minBitrate)
758
+           results.emplace_back(cx, cy, fps_num, fps_den);
759
+   };
760
+
761
+   if (wiz->specificFPSNum && wiz->specificFPSDen) {
762
+       testRes(1.0, 0, 0, false);
763
+       testRes(1.5, 0, 0, false);
764
+       testRes(1.0 / 0.6, 0, 0, false);
765
+       testRes(2.0, 0, 0, false);
766
+       testRes(2.25, 0, 0, true);
767
+   } else {
768
+       testRes(1.0, 60, 1, false);
769
+       testRes(1.0, 30, 1, false);
770
+       testRes(1.5, 60, 1, false);
771
+       testRes(1.5, 30, 1, false);
772
+       testRes(1.0 / 0.6, 60, 1, false);
773
+       testRes(1.0 / 0.6, 30, 1, false);
774
+       testRes(2.0, 60, 1, false);
775
+       testRes(2.0, 30, 1, false);
776
+       testRes(2.25, 60, 1, false);
777
+       testRes(2.25, 30, 1, true);
778
+   }
779
+
780
+   int minArea = 960 * 540 + 1000;
781
+
782
+   if (!wiz->specificFPSNum && wiz->preferHighFPS && results.size() > 1) {
783
+       Result &result1 = results[0];
784
+       Result &result2 = results[1];
785
+
786
+       if (result1.fps_num == 30 && result2.fps_num == 60) {
787
+           int nextArea = result2.cx * result2.cy;
788
+           if (nextArea >= minArea)
789
+               results.erase(results.begin());
790
+       }
791
+   }
792
+
793
+   Result result = results.front();
794
+   wiz->idealResolutionCX = result.cx;
795
+   wiz->idealResolutionCY = result.cy;
796
+   wiz->idealFPSNum = result.fps_num;
797
+   wiz->idealFPSDen = result.fps_den;
798
+}
799
+
800
+void AutoConfigTestPage::TestStreamEncoderThread()
801
+{
802
+   bool preferHardware = wiz->preferHardware;
803
+   if (!softwareTested) {
804
+       if (!preferHardware || !wiz->hardwareEncodingAvailable) {
805
+           if (!TestSoftwareEncoding()) {
806
+               return;
807
+           }
808
+       }
809
+   }
810
+
811
+   if (preferHardware && !softwareTested && wiz->hardwareEncodingAvailable)
812
+       FindIdealHardwareResolution();
813
+
814
+   if (!softwareTested) {
815
+       if (wiz->nvencAvailable)
816
+           wiz->streamingEncoder = AutoConfig::Encoder::NVENC;
817
+       else if (wiz->qsvAvailable)
818
+           wiz->streamingEncoder = AutoConfig::Encoder::QSV;
819
+       else
820
+           wiz->streamingEncoder = AutoConfig::Encoder::AMD;
821
+   } else {
822
+       wiz->streamingEncoder = AutoConfig::Encoder::x264;
823
+   }
824
+
825
+   QMetaObject::invokeMethod(this, "NextStage");
826
+}
827
+
828
+void AutoConfigTestPage::TestRecordingEncoderThread()
829
+{
830
+   if (!wiz->hardwareEncodingAvailable && !softwareTested) {
831
+       if (!TestSoftwareEncoding()) {
832
+           return;
833
+       }
834
+   }
835
+
836
+   if (wiz->type == AutoConfig::Type::Recording &&
837
+       wiz->hardwareEncodingAvailable)
838
+       FindIdealHardwareResolution();
839
+
840
+   wiz->recordingQuality = AutoConfig::Quality::High;
841
+
842
+   bool recordingOnly = wiz->type == AutoConfig::Type::Recording;
843
+
844
+   if (wiz->hardwareEncodingAvailable) {
845
+       if (wiz->nvencAvailable)
846
+           wiz->recordingEncoder = AutoConfig::Encoder::NVENC;
847
+       else if (wiz->qsvAvailable)
848
+           wiz->recordingEncoder = AutoConfig::Encoder::QSV;
849
+       else
850
+           wiz->recordingEncoder = AutoConfig::Encoder::AMD;
851
+   } else {
852
+       wiz->recordingEncoder = AutoConfig::Encoder::x264;
853
+   }
854
+
855
+   if (wiz->recordingEncoder != AutoConfig::Encoder::NVENC) {
856
+       if (!recordingOnly) {
857
+           wiz->recordingEncoder = AutoConfig::Encoder::Stream;
858
+           wiz->recordingQuality = AutoConfig::Quality::Stream;
859
+       }
860
+   }
861
+
862
+   QMetaObject::invokeMethod(this, "NextStage");
863
+}
864
+
865
+#define ENCODER_TEXT(x) "Basic.Settings.Output.Simple.Encoder." x
866
+#define ENCODER_SOFTWARE ENCODER_TEXT("Software")
867
+#define ENCODER_NVENC    ENCODER_TEXT("Hardware.NVENC")
868
+#define ENCODER_QSV      ENCODER_TEXT("Hardware.QSV")
869
+#define ENCODER_AMD      ENCODER_TEXT("Hardware.AMD")
870
+
871
+#define QUALITY_SAME "Basic.Settings.Output.Simple.RecordingQuality.Stream"
872
+#define QUALITY_HIGH "Basic.Settings.Output.Simple.RecordingQuality.Small"
873
+
874
+void AutoConfigTestPage::FinalizeResults()
875
+{
876
+   ui->stackedWidget->setCurrentIndex(1);
877
+   setSubTitle(QTStr(SUBTITLE_COMPLETE));
878
+
879
+   QFormLayout *form = results;
880
+
881
+   auto encName = [] (AutoConfig::Encoder enc) -> QString
882
+   {
883
+       switch (enc) {
884
+       case AutoConfig::Encoder::x264:
885
+           return QTStr(ENCODER_SOFTWARE);
886
+       case AutoConfig::Encoder::NVENC:
887
+           return QTStr(ENCODER_NVENC);
888
+       case AutoConfig::Encoder::QSV:
889
+           return QTStr(ENCODER_QSV);
890
+       case AutoConfig::Encoder::AMD:
891
+           return QTStr(ENCODER_AMD);
892
+       case AutoConfig::Encoder::Stream:
893
+           return QTStr(QUALITY_SAME);
894
+       }
895
+
896
+       return QTStr(ENCODER_SOFTWARE);
897
+   };
898
+
899
+   auto newLabel = [this] (const char *str) -> QLabel *
900
+   {
901
+       return new QLabel(QTStr(str), this);
902
+   };
903
+
904
+   if (wiz->type != AutoConfig::Type::Recording) {
905
+       const char *serverType = wiz->customServer
906
+           ? "rtmp_custom"
907
+           : "rtmp_common";
908
+
909
+       OBSService service = obs_service_create(serverType,
910
+               "temp_service", nullptr, nullptr);
911
+       obs_service_release(service);
912
+
913
+       OBSData service_settings = obs_data_create();
914
+       OBSData vencoder_settings = obs_data_create();
915
+       obs_data_release(service_settings);
916
+       obs_data_release(vencoder_settings);
917
+
918
+       obs_data_set_int(vencoder_settings, "bitrate",
919
+               wiz->idealBitrate);
920
+
921
+       obs_data_set_string(service_settings, "service",
922
+               wiz->serviceName.c_str());
923
+       obs_service_update(service, service_settings);
924
+       obs_service_apply_encoder_settings(service,
925
+               vencoder_settings, nullptr);
926
+
927
+       wiz->idealBitrate = (int)obs_data_get_int(vencoder_settings,
928
+               "bitrate");
929
+
930
+       if (!wiz->customServer)
931
+           form->addRow(
932
+               newLabel("Basic.AutoConfig.StreamPage.Service"),
933
+               new QLabel(wiz->serviceName.c_str(),
934
+                   ui->finishPage));
935
+       form->addRow(newLabel("Basic.AutoConfig.StreamPage.Server"),
936
+           new QLabel(wiz->serverName.c_str(), ui->finishPage));
937
+       form->addRow(newLabel("Basic.Settings.Output.VideoBitrate"),
938
+           new QLabel(QString::number(wiz->idealBitrate),
939
+               ui->finishPage));
940
+       form->addRow(newLabel(TEST_RESULT_SE),
941
+           new QLabel(encName(wiz->streamingEncoder),
942
+               ui->finishPage));
943
+   }
944
+
945
+   QString baseRes = QString("%1x%2").arg(
946
+           QString::number(wiz->baseResolutionCX),
947
+           QString::number(wiz->baseResolutionCY));
948
+   QString scaleRes = QString("%1x%2").arg(
949
+           QString::number(wiz->idealResolutionCX),
950
+           QString::number(wiz->idealResolutionCY));
951
+
952
+   if (wiz->recordingEncoder != AutoConfig::Encoder::Stream ||
953
+       wiz->recordingQuality != AutoConfig::Quality::Stream)
954
+       form->addRow(newLabel(TEST_RESULT_RE),
955
+           new QLabel(encName(wiz->recordingEncoder),
956
+               ui->finishPage));
957
+
958
+   QString recQuality;
959
+
960
+   switch (wiz->recordingQuality) {
961
+   case AutoConfig::Quality::High:
962
+       recQuality = QTStr(QUALITY_HIGH);
963
+       break;
964
+   case AutoConfig::Quality::Stream:
965
+       recQuality = QTStr(QUALITY_SAME);
966
+       break;
967
+   }
968
+
969
+   form->addRow(newLabel("Basic.Settings.Output.Simple.RecordingQuality"),
970
+       new QLabel(recQuality, ui->finishPage));
971
+
972
+   long double fps =
973
+       (long double)wiz->idealFPSNum / (long double)wiz->idealFPSDen;
974
+
975
+   QString fpsStr = (wiz->idealFPSDen > 1)
976
+       ? QString::number(fps, 'f', 2)
977
+       : QString::number(fps, 'g', 2);
978
+
979
+   form->addRow(newLabel("Basic.Settings.Video.BaseResolution"),
980
+       new QLabel(baseRes, ui->finishPage));
981
+   form->addRow(newLabel("Basic.Settings.Video.ScaledResolution"),
982
+       new QLabel(scaleRes, ui->finishPage));
983
+   form->addRow(newLabel("Basic.Settings.Video.FPS"),
984
+       new QLabel(fpsStr, ui->finishPage));
985
+}
986
+
987
+#define STARTING_SEPARATOR \
988
+   "\n==== Auto-config wizard testing commencing ======\n"
989
+#define STOPPING_SEPARATOR \
990
+   "\n==== Auto-config wizard testing stopping ========\n"
991
+
992
+void AutoConfigTestPage::NextStage()
993
+{
994
+   if (testThread.joinable())
995
+       testThread.join();
996
+   if (cancel)
997
+       return;
998
+
999
+   ui->subProgressLabel->setText(QString());
1000
+
1001
+   /* make it skip to bandwidth stage if only set to config recording */
1002
+   if (stage == Stage::Starting) {
1003
+       if (!started) {
1004
+           blog(LOG_INFO, STARTING_SEPARATOR);
1005
+           started = true;
1006
+       }
1007
+
1008
+       if (wiz->type == AutoConfig::Type::Recording) {
1009
+           stage = Stage::StreamEncoder;
1010
+       } else if (!wiz->bandwidthTest) {
1011
+           stage = Stage::BandwidthTest;
1012
+       }
1013
+   }
1014
+
1015
+   if (stage == Stage::Starting) {
1016
+       stage = Stage::BandwidthTest;
1017
+       StartBandwidthStage();
1018
+
1019
+   } else if (stage == Stage::BandwidthTest) {
1020
+       stage = Stage::StreamEncoder;
1021
+       StartStreamEncoderStage();
1022
+
1023
+   } else if (stage == Stage::StreamEncoder) {
1024
+       stage = Stage::RecordingEncoder;
1025
+       StartRecordingEncoderStage();
1026
+
1027
+   } else {
1028
+       stage = Stage::Finished;
1029
+       FinalizeResults();
1030
+       emit completeChanged();
1031
+   }
1032
+}
1033
+
1034
+void AutoConfigTestPage::UpdateMessage(QString message)
1035
+{
1036
+   ui->subProgressLabel->setText(message);
1037
+}
1038
+
1039
+void AutoConfigTestPage::Failure(QString message)
1040
+{
1041
+   ui->errorLabel->setText(message);
1042
+   ui->stackedWidget->setCurrentIndex(2);
1043
+}
1044
+
1045
+void AutoConfigTestPage::Progress(int percentage)
1046
+{
1047
+   ui->progressBar->setValue(percentage);
1048
+}
1049
+
1050
+AutoConfigTestPage::AutoConfigTestPage(QWidget *parent)
1051
+   : QWizardPage (parent),
1052
+     ui          (new Ui_AutoConfigTestPage)
1053
+{
1054
+   ui->setupUi(this);
1055
+   setTitle(QTStr("Basic.AutoConfig.TestPage"));
1056
+   setSubTitle(QTStr(SUBTITLE_TESTING));
1057
+   setCommitPage(true);
1058
+}
1059
+
1060
+AutoConfigTestPage::~AutoConfigTestPage()
1061
+{
1062
+   delete ui;
1063
+
1064
+   if (testThread.joinable()) {
1065
+       {
1066
+           unique_lock<mutex> ul(m);
1067
+           cancel = true;
1068
+           cv.notify_one();
1069
+       }
1070
+       testThread.join();
1071
+   }
1072
+
1073
+   if (started)
1074
+       blog(LOG_INFO, STOPPING_SEPARATOR);
1075
+}
1076
+
1077
+void AutoConfigTestPage::initializePage()
1078
+{
1079
+   setSubTitle(QTStr(SUBTITLE_TESTING));
1080
+   stage = Stage::Starting;
1081
+   softwareTested = false;
1082
+   cancel = false;
1083
+   DeleteLayout(results);
1084
+   results = new QFormLayout();
1085
+   results->setContentsMargins(0, 0, 0, 0);
1086
+   ui->finishPageLayout->insertLayout(1, results);
1087
+   ui->stackedWidget->setCurrentIndex(0);
1088
+   NextStage();
1089
+}
1090
+
1091
+void AutoConfigTestPage::cleanupPage()
1092
+{
1093
+   if (testThread.joinable()) {
1094
+       {
1095
+           unique_lock<mutex> ul(m);
1096
+           cancel = true;
1097
+           cv.notify_one();
1098
+       }
1099
+       testThread.join();
1100
+   }
1101
+}
1102
+
1103
+bool AutoConfigTestPage::isComplete() const
1104
+{
1105
+   return stage == Stage::Finished;
1106
+}
1107
+
1108
+int AutoConfigTestPage::nextId() const
1109
+{
1110
+   return -1;
1111
+}
1112
obs-studio-19.0.2.tar.xz/UI/window-basic-auto-config.cpp Added
808
 
1
@@ -0,0 +1,806 @@
2
+#include "window-basic-auto-config.hpp"
3
+#include "window-basic-main.hpp"
4
+#include "qt-wrappers.hpp"
5
+#include "obs-app.hpp"
6
+
7
+#include <QMessageBox>
8
+#include <QScreen>
9
+
10
+#include <obs.hpp>
11
+
12
+#include "ui_AutoConfigStartPage.h"
13
+#include "ui_AutoConfigVideoPage.h"
14
+#include "ui_AutoConfigStreamPage.h"
15
+
16
+#define wiz reinterpret_cast<AutoConfig*>(wizard())
17
+
18
+/* ------------------------------------------------------------------------- */
19
+
20
+#define SERVICE_PATH "service.json"
21
+
22
+static OBSData OpenServiceSettings(std::string &type)
23
+{
24
+   char serviceJsonPath[512];
25
+   int ret = GetProfilePath(serviceJsonPath, sizeof(serviceJsonPath),
26
+           SERVICE_PATH);
27
+   if (ret <= 0)
28
+       return OBSData();
29
+
30
+   OBSData data = obs_data_create_from_json_file_safe(serviceJsonPath,
31
+           "bak");
32
+   obs_data_release(data);
33
+
34
+   obs_data_set_default_string(data, "type", "rtmp_common");
35
+   type = obs_data_get_string(data, "type");
36
+
37
+   OBSData settings = obs_data_get_obj(data, "settings");
38
+   obs_data_release(settings);
39
+
40
+   return settings;
41
+}
42
+
43
+static void GetServiceInfo(std::string &type, std::string &service,
44
+       std::string &server, std::string &key)
45
+{
46
+   OBSData settings = OpenServiceSettings(type);
47
+
48
+   service = obs_data_get_string(settings, "service");
49
+   server = obs_data_get_string(settings, "server");
50
+   key = obs_data_get_string(settings, "key");
51
+}
52
+
53
+/* ------------------------------------------------------------------------- */
54
+
55
+AutoConfigStartPage::AutoConfigStartPage(QWidget *parent)
56
+   : QWizardPage (parent),
57
+     ui          (new Ui_AutoConfigStartPage)
58
+{
59
+   ui->setupUi(this);
60
+   setTitle(QTStr("Basic.AutoConfig.StartPage"));
61
+   setSubTitle(QTStr("Basic.AutoConfig.StartPage.SubTitle"));
62
+}
63
+
64
+AutoConfigStartPage::~AutoConfigStartPage()
65
+{
66
+   delete ui;
67
+}
68
+
69
+int AutoConfigStartPage::nextId() const
70
+{
71
+   return AutoConfig::VideoPage;
72
+}
73
+
74
+void AutoConfigStartPage::on_prioritizeStreaming_clicked()
75
+{
76
+   wiz->type = AutoConfig::Type::Streaming;
77
+}
78
+
79
+void AutoConfigStartPage::on_prioritizeRecording_clicked()
80
+{
81
+   wiz->type = AutoConfig::Type::Recording;
82
+}
83
+
84
+/* ------------------------------------------------------------------------- */
85
+
86
+#define RES_TEXT(x)             "Basic.AutoConfig.VideoPage." x
87
+#define RES_USE_CURRENT         RES_TEXT("BaseResolution.UseCurrent")
88
+#define RES_USE_DISPLAY         RES_TEXT("BaseResolution.Display")
89
+#define FPS_USE_CURRENT         RES_TEXT("FPS.UseCurrent")
90
+#define FPS_PREFER_HIGH_FPS     RES_TEXT("FPS.PreferHighFPS")
91
+#define FPS_PREFER_HIGH_RES     RES_TEXT("FPS.PreferHighRes")
92
+
93
+AutoConfigVideoPage::AutoConfigVideoPage(QWidget *parent)
94
+   : QWizardPage (parent),
95
+     ui          (new Ui_AutoConfigVideoPage)
96
+{
97
+   ui->setupUi(this);
98
+
99
+   setTitle(QTStr("Basic.AutoConfig.VideoPage"));
100
+   setSubTitle(QTStr("Basic.AutoConfig.VideoPage.SubTitle"));
101
+
102
+   obs_video_info ovi;
103
+   obs_get_video_info(&ovi);
104
+
105
+   long double fpsVal =
106
+       (long double)ovi.fps_num / (long double)ovi.fps_den;
107
+
108
+   QString fpsStr = (ovi.fps_den > 1)
109
+       ? QString::number(fpsVal, 'f', 2)
110
+       : QString::number(fpsVal, 'g', 2);
111
+
112
+   ui->fps->addItem(QTStr(FPS_PREFER_HIGH_FPS),
113
+           (int)AutoConfig::FPSType::PreferHighFPS);
114
+   ui->fps->addItem(QTStr(FPS_PREFER_HIGH_RES),
115
+           (int)AutoConfig::FPSType::PreferHighRes);
116
+   ui->fps->addItem(QTStr(FPS_USE_CURRENT).arg(fpsStr),
117
+           (int)AutoConfig::FPSType::UseCurrent);
118
+   ui->fps->addItem(QStringLiteral("30"), (int)AutoConfig::FPSType::fps30);
119
+   ui->fps->addItem(QStringLiteral("60"), (int)AutoConfig::FPSType::fps60);
120
+   ui->fps->setCurrentIndex(0);
121
+
122
+   QString cxStr = QString::number(ovi.base_width);
123
+   QString cyStr = QString::number(ovi.base_height);
124
+
125
+   int encRes = int(ovi.base_width << 16) | int(ovi.base_height);
126
+   ui->canvasRes->addItem(QTStr(RES_USE_CURRENT).arg(cxStr, cyStr),
127
+           (int)encRes);
128
+
129
+   QList<QScreen*> screens = QGuiApplication::screens();
130
+   for (int i = 0; i < screens.size(); i++) {
131
+       QScreen *screen = screens[i];
132
+       QSize as = screen->size();
133
+
134
+       encRes = int(as.width() << 16) | int(as.height());
135
+
136
+       QString str = QTStr(RES_USE_DISPLAY)
137
+           .arg(QString::number(i + 1),
138
+                QString::number(as.width()),
139
+                QString::number(as.height()));
140
+
141
+       ui->canvasRes->addItem(str, encRes);
142
+   }
143
+
144
+   auto addRes = [&] (int cx, int cy)
145
+   {
146
+       encRes = (cx << 16) | cy;
147
+       QString str = QString("%1x%2").arg(
148
+               QString::number(cx),
149
+               QString::number(cy));
150
+       ui->canvasRes->addItem(str, encRes);
151
+   };
152
+
153
+   addRes(1920, 1080);
154
+   addRes(1280, 720);
155
+
156
+   ui->canvasRes->setCurrentIndex(0);
157
+}
158
+
159
+AutoConfigVideoPage::~AutoConfigVideoPage()
160
+{
161
+   delete ui;
162
+}
163
+
164
+int AutoConfigVideoPage::nextId() const
165
+{
166
+   return wiz->type == AutoConfig::Type::Recording
167
+       ? AutoConfig::TestPage
168
+       : AutoConfig::StreamPage;
169
+}
170
+
171
+bool AutoConfigVideoPage::validatePage()
172
+{
173
+   int encRes = ui->canvasRes->currentData().toInt();
174
+   wiz->baseResolutionCX = encRes >> 16;
175
+   wiz->baseResolutionCY = encRes & 0xFFFF;
176
+   wiz->fpsType = (AutoConfig::FPSType)ui->fps->currentData().toInt();
177
+
178
+   obs_video_info ovi;
179
+   obs_get_video_info(&ovi);
180
+
181
+   switch (wiz->fpsType) {
182
+   case AutoConfig::FPSType::PreferHighFPS:
183
+       wiz->specificFPSNum = 0;
184
+       wiz->specificFPSDen = 0;
185
+       wiz->preferHighFPS = true;
186
+       break;
187
+   case AutoConfig::FPSType::PreferHighRes:
188
+       wiz->specificFPSNum = 0;
189
+       wiz->specificFPSDen = 0;
190
+       wiz->preferHighFPS = false;
191
+       break;
192
+   case AutoConfig::FPSType::UseCurrent:
193
+       wiz->specificFPSNum = ovi.fps_num;
194
+       wiz->specificFPSDen = ovi.fps_den;
195
+       wiz->preferHighFPS = false;
196
+       break;
197
+   case AutoConfig::FPSType::fps30:
198
+       wiz->specificFPSNum = 30;
199
+       wiz->specificFPSDen = 1;
200
+       wiz->preferHighFPS = false;
201
+       break;
202
+   case AutoConfig::FPSType::fps60:
203
+       wiz->specificFPSNum = 60;
204
+       wiz->specificFPSDen = 1;
205
+       wiz->preferHighFPS = false;
206
+       break;
207
+   }
208
+
209
+   return true;
210
+}
211
+
212
+/* ------------------------------------------------------------------------- */
213
+
214
+AutoConfigStreamPage::AutoConfigStreamPage(QWidget *parent)
215
+   : QWizardPage (parent),
216
+     ui          (new Ui_AutoConfigStreamPage)
217
+{
218
+   ui->setupUi(this);
219
+   ui->bitrateLabel->setVisible(false);
220
+   ui->bitrate->setVisible(false);
221
+
222
+   ui->streamType->addItem(obs_service_get_display_name("rtmp_common"));
223
+   ui->streamType->addItem(obs_service_get_display_name("rtmp_custom"));
224
+
225
+   setTitle(QTStr("Basic.AutoConfig.StreamPage"));
226
+   setSubTitle(QTStr("Basic.AutoConfig.StreamPage.SubTitle"));
227
+
228
+   LoadServices(false);
229
+
230
+   connect(ui->streamType, SIGNAL(currentIndexChanged(int)),
231
+           this, SLOT(ServiceChanged()));
232
+   connect(ui->service, SIGNAL(currentIndexChanged(int)),
233
+           this, SLOT(ServiceChanged()));
234
+   connect(ui->customServer, SIGNAL(textChanged(const QString &)),
235
+           this, SLOT(ServiceChanged()));
236
+   connect(ui->doBandwidthTest, SIGNAL(toggled(bool)),
237
+           this, SLOT(ServiceChanged()));
238
+
239
+   connect(ui->service, SIGNAL(currentIndexChanged(int)),
240
+           this, SLOT(UpdateServerList()));
241
+
242
+   connect(ui->streamType, SIGNAL(currentIndexChanged(int)),
243
+           this, SLOT(UpdateKeyLink()));
244
+   connect(ui->service, SIGNAL(currentIndexChanged(int)),
245
+           this, SLOT(UpdateKeyLink()));
246
+
247
+   connect(ui->key, SIGNAL(textChanged(const QString &)),
248
+           this, SLOT(UpdateCompleted()));
249
+   connect(ui->regionUS, SIGNAL(toggled(bool)),
250
+           this, SLOT(UpdateCompleted()));
251
+   connect(ui->regionEU, SIGNAL(toggled(bool)),
252
+           this, SLOT(UpdateCompleted()));
253
+   connect(ui->regionAsia, SIGNAL(toggled(bool)),
254
+           this, SLOT(UpdateCompleted()));
255
+   connect(ui->regionOther, SIGNAL(toggled(bool)),
256
+           this, SLOT(UpdateCompleted()));
257
+}
258
+
259
+AutoConfigStreamPage::~AutoConfigStreamPage()
260
+{
261
+   delete ui;
262
+}
263
+
264
+bool AutoConfigStreamPage::isComplete() const
265
+{
266
+   return ready;
267
+}
268
+
269
+int AutoConfigStreamPage::nextId() const
270
+{
271
+   return AutoConfig::TestPage;
272
+}
273
+
274
+bool AutoConfigStreamPage::validatePage()
275
+{
276
+   OBSData service_settings = obs_data_create();
277
+   obs_data_release(service_settings);
278
+
279
+   wiz->customServer = ui->streamType->currentIndex() == 1;
280
+
281
+   const char *serverType = wiz->customServer
282
+       ? "rtmp_custom"
283
+       : "rtmp_common";
284
+
285
+   if (!wiz->customServer) {
286
+       obs_data_set_string(service_settings, "service",
287
+               QT_TO_UTF8(ui->service->currentText()));
288
+   }
289
+
290
+   OBSService service = obs_service_create(serverType, "temp_service",
291
+           service_settings, nullptr);
292
+   obs_service_release(service);
293
+
294
+   int bitrate = 10000;
295
+   if (!ui->doBandwidthTest->isChecked()) {
296
+       bitrate = ui->bitrate->value();
297
+       wiz->idealBitrate = bitrate;
298
+   }
299
+
300
+   OBSData settings = obs_data_create();
301
+   obs_data_release(settings);
302
+   obs_data_set_int(settings, "bitrate", bitrate);
303
+   obs_service_apply_encoder_settings(service, settings, nullptr);
304
+
305
+   if (wiz->customServer) {
306
+       QString server = ui->customServer->text();
307
+       wiz->server = wiz->serverName = QT_TO_UTF8(server);
308
+   } else {
309
+       wiz->serverName = QT_TO_UTF8(ui->server->currentText());
310
+       wiz->server = QT_TO_UTF8(ui->server->currentData().toString());
311
+   }
312
+
313
+   wiz->bandwidthTest = ui->doBandwidthTest->isChecked();
314
+   wiz->startingBitrate = (int)obs_data_get_int(settings, "bitrate");
315
+   wiz->idealBitrate = wiz->startingBitrate;
316
+   wiz->regionUS = ui->regionUS->isChecked();
317
+   wiz->regionEU = ui->regionEU->isChecked();
318
+   wiz->regionAsia = ui->regionAsia->isChecked();
319
+   wiz->regionOther = ui->regionOther->isChecked();
320
+   wiz->serviceName = QT_TO_UTF8(ui->service->currentText());
321
+   if (ui->preferHardware)
322
+       wiz->preferHardware = ui->preferHardware->isChecked();
323
+   wiz->key = QT_TO_UTF8(ui->key->text());
324
+
325
+   if (!wiz->customServer) {
326
+       if (wiz->serviceName == "Twitch")
327
+           wiz->service = AutoConfig::Service::Twitch;
328
+       else if (wiz->serviceName == "hitbox.tv")
329
+           wiz->service = AutoConfig::Service::Hitbox;
330
+       else if (wiz->serviceName == "beam.pro")
331
+           wiz->service = AutoConfig::Service::Beam;
332
+       else
333
+           wiz->service = AutoConfig::Service::Other;
334
+   } else {
335
+       wiz->service = AutoConfig::Service::Other;
336
+   }
337
+
338
+   if (wiz->service != AutoConfig::Service::Twitch && wiz->bandwidthTest) {
339
+       QMessageBox::StandardButton button;
340
+#define WARNING_TEXT(x) QTStr("Basic.AutoConfig.StreamPage.StreamWarning." x)
341
+       button = OBSMessageBox::question(this,
342
+               WARNING_TEXT("Title"),
343
+               WARNING_TEXT("Text"));
344
+#undef WARNING_TEXT
345
+
346
+       if (button == QMessageBox::No)
347
+           return false;
348
+   }
349
+
350
+   return true;
351
+}
352
+
353
+void AutoConfigStreamPage::on_show_clicked()
354
+{
355
+   if (ui->key->echoMode() == QLineEdit::Password) {
356
+       ui->key->setEchoMode(QLineEdit::Normal);
357
+       ui->show->setText(QTStr("Hide"));
358
+   } else {
359
+       ui->key->setEchoMode(QLineEdit::Password);
360
+       ui->show->setText(QTStr("Show"));
361
+   }
362
+}
363
+
364
+void AutoConfigStreamPage::ServiceChanged()
365
+{
366
+   bool showMore = ui->service->currentData().toBool();
367
+   if (showMore)
368
+       return;
369
+
370
+   std::string service = QT_TO_UTF8(ui->service->currentText());
371
+   bool regionBased = service == "Twitch" ||
372
+                      service == "hitbox.tv" ||
373
+                      service == "beam.pro";
374
+   bool testBandwidth = ui->doBandwidthTest->isChecked();
375
+   bool custom = ui->streamType->currentIndex() == 1;
376
+
377
+   ui->service->setVisible(!custom);
378
+   ui->serviceLabel->setVisible(!custom);
379
+
380
+   ui->formLayout->removeWidget(ui->serviceLabel);
381
+   ui->formLayout->removeWidget(ui->service);
382
+
383
+   ui->formLayout->removeWidget(ui->serverLabel);
384
+   ui->formLayout->removeWidget(ui->serverStackedWidget);
385
+
386
+   if (custom) {
387
+       ui->formLayout->insertRow(1, ui->serverLabel,
388
+               ui->serverStackedWidget);
389
+
390
+       ui->region->setVisible(false);
391
+       ui->serverStackedWidget->setCurrentIndex(1);
392
+       ui->serverStackedWidget->setVisible(true);
393
+       ui->serverLabel->setVisible(true);
394
+   } else {
395
+       ui->formLayout->insertRow(1, ui->serviceLabel, ui->service);
396
+
397
+       if (!testBandwidth)
398
+           ui->formLayout->insertRow(2, ui->serverLabel,
399
+                   ui->serverStackedWidget);
400
+
401
+       ui->region->setVisible(regionBased && testBandwidth);
402
+       ui->serverStackedWidget->setCurrentIndex(0);
403
+       ui->serverStackedWidget->setHidden(testBandwidth);
404
+       ui->serverLabel->setHidden(testBandwidth);
405
+   }
406
+
407
+   wiz->testRegions = regionBased && testBandwidth;
408
+
409
+   ui->bitrateLabel->setHidden(testBandwidth);
410
+   ui->bitrate->setHidden(testBandwidth);
411
+
412
+   UpdateCompleted();
413
+}
414
+
415
+void AutoConfigStreamPage::UpdateKeyLink()
416
+{
417
+   bool custom = ui->streamType->currentIndex() == 1;
418
+   QString serviceName = ui->service->currentText();
419
+
420
+   if (custom)
421
+       serviceName = "";
422
+
423
+   QString text = QTStr("Basic.AutoConfig.StreamPage.StreamKey");
424
+   if (serviceName == "Twitch") {
425
+       text += " <a href=\"https://";
426
+       text += "www.twitch.tv/broadcast/dashboard/streamkey";
427
+       text += "\">";
428
+       text += QTStr("Basic.AutoConfig.StreamPage.StreamKey.LinkToSite");
429
+       text += "</a>";
430
+   } else if (serviceName == "YouTube / YouTube Gaming") {
431
+       text += " <a href=\"https://";
432
+       text += "www.youtube.com/live_dashboard";
433
+       text += "\">";
434
+       text += QTStr("Basic.AutoConfig.StreamPage.StreamKey.LinkToSite");
435
+       text += "</a>";
436
+   }
437
+
438
+   ui->streamKeyLabel->setText(text);
439
+}
440
+
441
+void AutoConfigStreamPage::LoadServices(bool showAll)
442
+{
443
+   obs_properties_t *props = obs_get_service_properties("rtmp_common");
444
+
445
+   OBSData settings = obs_data_create();
446
+   obs_data_release(settings);
447
+
448
+   obs_data_set_bool(settings, "show_all", showAll);
449
+
450
+   obs_property_t *prop = obs_properties_get(props, "show_all");
451
+   obs_property_modified(prop, settings);
452
+
453
+   ui->service->blockSignals(true);
454
+   ui->service->clear();
455
+
456
+   QStringList names;
457
+
458
+   obs_property_t *services = obs_properties_get(props, "service");
459
+   size_t services_count = obs_property_list_item_count(services);
460
+   for (size_t i = 0; i < services_count; i++) {
461
+       const char *name = obs_property_list_item_string(services, i);
462
+       names.push_back(name);
463
+   }
464
+
465
+   if (showAll)
466
+       names.sort();
467
+
468
+   for (QString &name : names)
469
+       ui->service->addItem(name);
470
+
471
+   if (!lastService.isEmpty()) {
472
+       int idx = ui->service->findText(lastService);
473
+       if (idx != -1)
474
+           ui->service->setCurrentIndex(idx);
475
+   }
476
+
477
+   if (!showAll) {
478
+       ui->service->addItem(
479
+           QTStr("Basic.AutoConfig.StreamPage.Service.ShowAll"),
480
+           QVariant(true));
481
+   }
482
+
483
+   obs_properties_destroy(props);
484
+
485
+   ui->service->blockSignals(false);
486
+}
487
+
488
+void AutoConfigStreamPage::UpdateServerList()
489
+{
490
+   QString serviceName = ui->service->currentText();
491
+   bool showMore = ui->service->currentData().toBool();
492
+
493
+   if (showMore) {
494
+       LoadServices(true);
495
+       ui->service->showPopup();
496
+       return;
497
+   } else {
498
+       lastService = serviceName;
499
+   }
500
+
501
+   obs_properties_t *props = obs_get_service_properties("rtmp_common");
502
+   obs_property_t *services = obs_properties_get(props, "service");
503
+
504
+   OBSData settings = obs_data_create();
505
+   obs_data_release(settings);
506
+
507
+   obs_data_set_string(settings, "service", QT_TO_UTF8(serviceName));
508
+   obs_property_modified(services, settings);
509
+
510
+   obs_property_t *servers = obs_properties_get(props, "server");
511
+
512
+   ui->server->clear();
513
+
514
+   size_t servers_count = obs_property_list_item_count(servers);
515
+   for (size_t i = 0; i < servers_count; i++) {
516
+       const char *name = obs_property_list_item_name(servers, i);
517
+       const char *server = obs_property_list_item_string(servers, i);
518
+       ui->server->addItem(name, server);
519
+   }
520
+
521
+   obs_properties_destroy(props);
522
+}
523
+
524
+void AutoConfigStreamPage::UpdateCompleted()
525
+{
526
+   if (ui->key->text().isEmpty()) {
527
+       ready = false;
528
+   } else {
529
+       bool custom = ui->streamType->currentIndex() == 1;
530
+       if (custom) {
531
+           ready = !ui->customServer->text().isEmpty();
532
+       } else {
533
+           ready = !wiz->testRegions ||
534
+               ui->regionUS->isChecked() ||
535
+               ui->regionEU->isChecked() ||
536
+               ui->regionAsia->isChecked() ||
537
+               ui->regionOther->isChecked();
538
+       }
539
+   }
540
+   emit completeChanged();
541
+}
542
+
543
+/* ------------------------------------------------------------------------- */
544
+
545
+AutoConfig::AutoConfig(QWidget *parent)
546
+   : QWizard(parent)
547
+{
548
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(parent);
549
+   main->EnableOutputs(false);
550
+
551
+   installEventFilter(CreateShortcutFilter());
552
+
553
+   std::string serviceType;
554
+   GetServiceInfo(serviceType, serviceName, server, key);
555
+#ifdef _WIN32
556
+   setWizardStyle(QWizard::ModernStyle);
557
+#endif
558
+   AutoConfigStreamPage *streamPage = new AutoConfigStreamPage();
559
+
560
+   setPage(StartPage, new AutoConfigStartPage());
561
+   setPage(VideoPage, new AutoConfigVideoPage());
562
+   setPage(StreamPage, streamPage);
563
+   setPage(TestPage, new AutoConfigTestPage());
564
+   setWindowTitle(QTStr("Basic.AutoConfig.Beta"));
565
+
566
+   obs_video_info ovi;
567
+   obs_get_video_info(&ovi);
568
+
569
+   baseResolutionCX = ovi.base_width;
570
+   baseResolutionCY = ovi.base_height;
571
+
572
+   /* ----------------------------------------- */
573
+   /* load service/servers                      */
574
+
575
+   customServer = serviceType == "rtmp_custom";
576
+
577
+   QComboBox *serviceList = streamPage->ui->service;
578
+
579
+   if (!serviceName.empty()) {
580
+       serviceList->blockSignals(true);
581
+
582
+       int count = serviceList->count();
583
+       bool found = false;
584
+
585
+       for (int i = 0; i < count; i++) {
586
+           QString name = serviceList->itemText(i);
587
+
588
+           if (name == serviceName.c_str()) {
589
+               serviceList->setCurrentIndex(i);
590
+               found = true;
591
+               break;
592
+           }
593
+       }
594
+
595
+       if (!found) {
596
+           serviceList->insertItem(0, serviceName.c_str());
597
+           serviceList->setCurrentIndex(0);
598
+       }
599
+
600
+       serviceList->blockSignals(false);
601
+   }
602
+
603
+   streamPage->UpdateServerList();
604
+   streamPage->UpdateKeyLink();
605
+
606
+   if (!customServer) {
607
+       QComboBox *serverList = streamPage->ui->server;
608
+       int idx = serverList->findData(QString(server.c_str()));
609
+       if (idx == -1)
610
+           idx = 0;
611
+
612
+       serverList->setCurrentIndex(idx);
613
+   } else {
614
+       streamPage->ui->customServer->setText(server.c_str());
615
+       streamPage->ui->streamType->setCurrentIndex(1);
616
+   }
617
+
618
+   if (!key.empty())
619
+       streamPage->ui->key->setText(key.c_str());
620
+
621
+   int bitrate = config_get_int(main->Config(), "SimpleOutput", "VBitrate");
622
+   streamPage->ui->bitrate->setValue(bitrate);
623
+   streamPage->ServiceChanged();
624
+
625
+   streamPage->ui->preferHardware->setChecked(os_get_physical_cores() <= 4);
626
+
627
+   TestHardwareEncoding();
628
+   if (!hardwareEncodingAvailable) {
629
+       delete streamPage->ui->preferHardware;
630
+       streamPage->ui->preferHardware = nullptr;
631
+   }
632
+
633
+   setOptions(0);
634
+   setButtonText(QWizard::FinishButton,
635
+           QTStr("Basic.AutoConfig.ApplySettings"));
636
+   setButtonText(QWizard::BackButton, QTStr("Back"));
637
+   setButtonText(QWizard::NextButton, QTStr("Next"));
638
+   setButtonText(QWizard::CancelButton, QTStr("Cancel"));
639
+}
640
+
641
+AutoConfig::~AutoConfig()
642
+{
643
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
644
+   main->EnableOutputs(true);
645
+}
646
+
647
+void AutoConfig::TestHardwareEncoding()
648
+{
649
+   size_t idx = 0;
650
+   const char *id;
651
+   while (obs_enum_encoder_types(idx++, &id)) {
652
+       if (strcmp(id, "ffmpeg_nvenc") == 0)
653
+           hardwareEncodingAvailable = nvencAvailable = true;
654
+       else if (strcmp(id, "obs_qsv11") == 0)
655
+           hardwareEncodingAvailable = qsvAvailable = true;
656
+       else if (strcmp(id, "amd_amf_h264") == 0)
657
+           hardwareEncodingAvailable = vceAvailable = true;
658
+   }
659
+}
660
+
661
+bool AutoConfig::CanTestServer(const char *server)
662
+{
663
+   if (!testRegions || (regionUS && regionEU && regionAsia && regionOther))
664
+       return true;
665
+
666
+   if (service == Service::Twitch) {
667
+       if (astrcmp_n(server, "US West:", 8) == 0 ||
668
+           astrcmp_n(server, "US East:", 8) == 0 ||
669
+           astrcmp_n(server, "US Central:", 11) == 0) {
670
+           return regionUS;
671
+       } else if (astrcmp_n(server, "EU:", 3) == 0) {
672
+           return regionEU;
673
+       } else if (astrcmp_n(server, "Asia:", 5) == 0) {
674
+           return regionAsia;
675
+       } else if (regionOther) {
676
+           return true;
677
+       }
678
+   } else if (service == Service::Hitbox) {
679
+       if (strcmp(server, "Default") == 0) {
680
+           return true;
681
+       } else if (astrcmp_n(server, "US-West:", 8) == 0 ||
682
+                  astrcmp_n(server, "US-East:", 8) == 0) {
683
+           return regionUS;
684
+       } else if (astrcmp_n(server, "EU-", 3) == 0) {
685
+           return regionEU;
686
+       } else if (astrcmp_n(server, "South Korea:", 12) == 0 ||
687
+                  astrcmp_n(server, "Asia:", 5) == 0 ||
688
+                  astrcmp_n(server, "China:", 6) == 0) {
689
+           return regionAsia;
690
+       } else if (regionOther) {
691
+           return true;
692
+       }
693
+   } else if (service == Service::Beam) {
694
+       if (astrcmp_n(server, "US:", 3) == 0) {
695
+           return regionUS;
696
+       } else if (astrcmp_n(server, "EU:", 3) == 0) {
697
+           return regionEU;
698
+       } else if (astrcmp_n(server, "South Korea:", 12) == 0 ||
699
+                  astrcmp_n(server, "Asia:", 5) == 0) {
700
+           return regionAsia;
701
+       } else if (regionOther) {
702
+           return true;
703
+       }
704
+   } else {
705
+       return true;
706
+   }
707
+
708
+   return false;
709
+}
710
+
711
+void AutoConfig::done(int result)
712
+{
713
+   QWizard::done(result);
714
+
715
+   if (result == QDialog::Accepted) {
716
+       if (type == Type::Streaming)
717
+           SaveStreamSettings();
718
+       SaveSettings();
719
+   }
720
+}
721
+
722
+inline const char *AutoConfig::GetEncoderId(Encoder enc)
723
+{
724
+   switch (enc) {
725
+   case Encoder::NVENC:
726
+       return SIMPLE_ENCODER_NVENC;
727
+   case Encoder::QSV:
728
+       return SIMPLE_ENCODER_QSV;
729
+   case Encoder::AMD:
730
+       return SIMPLE_ENCODER_AMD;
731
+   default:
732
+       return SIMPLE_ENCODER_X264;
733
+   }
734
+};
735
+
736
+void AutoConfig::SaveStreamSettings()
737
+{
738
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
739
+
740
+   /* ---------------------------------- */
741
+   /* save service                       */
742
+
743
+   const char *service_id = customServer
744
+       ? "rtmp_custom"
745
+       : "rtmp_common";
746
+
747
+   obs_service_t *oldService = main->GetService();
748
+   OBSData hotkeyData = obs_hotkeys_save_service(oldService);
749
+   obs_data_release(hotkeyData);
750
+
751
+   OBSData settings = obs_data_create();
752
+   obs_data_release(settings);
753
+
754
+   if (!customServer)
755
+       obs_data_set_string(settings, "service", serviceName.c_str());
756
+   obs_data_set_string(settings, "server", server.c_str());
757
+   obs_data_set_string(settings, "key", key.c_str());
758
+
759
+   OBSService newService = obs_service_create(service_id,
760
+           "default_service", settings, hotkeyData);
761
+   obs_service_release(newService);
762
+
763
+   if (!newService)
764
+       return;
765
+
766
+   main->SetService(newService);
767
+   main->SaveService();
768
+
769
+   /* ---------------------------------- */
770
+   /* save stream settings               */
771
+
772
+   config_set_int(main->Config(), "SimpleOutput", "VBitrate",
773
+           idealBitrate);
774
+   config_set_string(main->Config(), "SimpleOutput", "StreamEncoder",
775
+           GetEncoderId(streamingEncoder));
776
+   config_remove_value(main->Config(), "SimpleOutput", "UseAdvanced");
777
+}
778
+
779
+void AutoConfig::SaveSettings()
780
+{
781
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
782
+
783
+   if (recordingEncoder != Encoder::Stream)
784
+       config_set_string(main->Config(), "SimpleOutput", "RecEncoder",
785
+               GetEncoderId(recordingEncoder));
786
+
787
+   const char *quality = recordingQuality == Quality::High
788
+       ? "Small"
789
+       : "Stream";
790
+
791
+   config_set_string(main->Config(), "Output", "Mode", "Simple");
792
+   config_set_string(main->Config(), "SimpleOutput", "RecQuality", quality);
793
+   config_set_int(main->Config(), "Video", "BaseCX", baseResolutionCX);
794
+   config_set_int(main->Config(), "Video", "BaseCY", baseResolutionCY);
795
+   config_set_int(main->Config(), "Video", "OutputCX", idealResolutionCX);
796
+   config_set_int(main->Config(), "Video", "OutputCY", idealResolutionCY);
797
+
798
+   if (fpsType != FPSType::UseCurrent) {
799
+       config_set_uint(main->Config(), "Video", "FPSType", 0);
800
+       config_set_string(main->Config(), "Video", "FPSCommon",
801
+               std::to_string(idealFPSNum).c_str());
802
+   }
803
+
804
+   main->ResetVideo();
805
+   main->ResetOutputs();
806
+   config_save_safe(main->Config(), "tmp", nullptr);
807
+}
808
obs-studio-19.0.2.tar.xz/UI/window-basic-auto-config.hpp Added
250
 
1
@@ -0,0 +1,248 @@
2
+#pragma once
3
+
4
+#include <QWizard>
5
+#include <QPointer>
6
+#include <QFormLayout>
7
+#include <QWizardPage>
8
+
9
+#include <condition_variable>
10
+#include <utility>
11
+#include <thread>
12
+#include <vector>
13
+#include <string>
14
+#include <mutex>
15
+
16
+class Ui_AutoConfigStartPage;
17
+class Ui_AutoConfigVideoPage;
18
+class Ui_AutoConfigStreamPage;
19
+class Ui_AutoConfigTestPage;
20
+
21
+class AutoConfig : public QWizard {
22
+   Q_OBJECT
23
+
24
+   friend class AutoConfigStartPage;
25
+   friend class AutoConfigVideoPage;
26
+   friend class AutoConfigStreamPage;
27
+   friend class AutoConfigTestPage;
28
+
29
+   enum class Type {
30
+       Invalid,
31
+       Streaming,
32
+       Recording
33
+   };
34
+
35
+   enum class Service {
36
+       Twitch,
37
+       Hitbox,
38
+       Beam,
39
+       Other
40
+   };
41
+
42
+   enum class Encoder {
43
+       x264,
44
+       NVENC,
45
+       QSV,
46
+       AMD,
47
+       Stream
48
+   };
49
+
50
+   enum class Quality {
51
+       Stream,
52
+       High
53
+   };
54
+
55
+   enum class FPSType : int {
56
+       PreferHighFPS,
57
+       PreferHighRes,
58
+       UseCurrent,
59
+       fps30,
60
+       fps60
61
+   };
62
+
63
+   static inline const char *GetEncoderId(Encoder enc);
64
+
65
+   Service service = Service::Other;
66
+   Quality recordingQuality = Quality::Stream;
67
+   Encoder recordingEncoder = Encoder::Stream;
68
+   Encoder streamingEncoder = Encoder::x264;
69
+   Type type = Type::Streaming;
70
+   FPSType fpsType = FPSType::PreferHighFPS;
71
+   int idealBitrate = 2500;
72
+   int baseResolutionCX = 1920;
73
+   int baseResolutionCY = 1080;
74
+   int idealResolutionCX = 1280;
75
+   int idealResolutionCY = 720;
76
+   int idealFPSNum = 60;
77
+   int idealFPSDen = 1;
78
+   std::string serviceName;
79
+   std::string serverName;
80
+   std::string server;
81
+   std::string key;
82
+
83
+   bool hardwareEncodingAvailable = false;
84
+   bool nvencAvailable = false;
85
+   bool qsvAvailable = false;
86
+   bool vceAvailable = false;
87
+
88
+   int startingBitrate = 2500;
89
+   bool customServer = false;
90
+   bool bandwidthTest = false;
91
+   bool testRegions = true;
92
+   bool regionUS = true;
93
+   bool regionEU = true;
94
+   bool regionAsia = true;
95
+   bool regionOther = true;
96
+   bool preferHighFPS = false;
97
+   bool preferHardware = false;
98
+   int specificFPSNum = 0;
99
+   int specificFPSDen = 0;
100
+
101
+   void TestHardwareEncoding();
102
+   bool CanTestServer(const char *server);
103
+
104
+   virtual void done(int result) override;
105
+
106
+   void SaveStreamSettings();
107
+   void SaveSettings();
108
+
109
+public:
110
+   AutoConfig(QWidget *parent);
111
+   ~AutoConfig();
112
+
113
+   enum Page {
114
+       StartPage,
115
+       VideoPage,
116
+       StreamPage,
117
+       TestPage
118
+   };
119
+};
120
+
121
+class AutoConfigStartPage : public QWizardPage {
122
+   Q_OBJECT
123
+
124
+   friend class AutoConfig;
125
+
126
+   Ui_AutoConfigStartPage *ui;
127
+
128
+public:
129
+   AutoConfigStartPage(QWidget *parent = nullptr);
130
+   ~AutoConfigStartPage();
131
+
132
+   virtual int nextId() const override;
133
+
134
+public slots:
135
+   void on_prioritizeStreaming_clicked();
136
+   void on_prioritizeRecording_clicked();
137
+};
138
+
139
+class AutoConfigVideoPage : public QWizardPage {
140
+   Q_OBJECT
141
+
142
+   friend class AutoConfig;
143
+
144
+   Ui_AutoConfigVideoPage *ui;
145
+
146
+public:
147
+   AutoConfigVideoPage(QWidget *parent = nullptr);
148
+   ~AutoConfigVideoPage();
149
+
150
+   virtual int nextId() const override;
151
+   virtual bool validatePage() override;
152
+};
153
+
154
+class AutoConfigStreamPage : public QWizardPage {
155
+   Q_OBJECT
156
+
157
+   friend class AutoConfig;
158
+
159
+   Ui_AutoConfigStreamPage *ui;
160
+   QString lastService;
161
+   bool ready = false;
162
+
163
+   void LoadServices(bool showAll);
164
+
165
+public:
166
+   AutoConfigStreamPage(QWidget *parent = nullptr);
167
+   ~AutoConfigStreamPage();
168
+
169
+   virtual bool isComplete() const override;
170
+   virtual int nextId() const override;
171
+   virtual bool validatePage() override;
172
+
173
+public slots:
174
+   void on_show_clicked();
175
+   void ServiceChanged();
176
+   void UpdateKeyLink();
177
+   void UpdateServerList();
178
+   void UpdateCompleted();
179
+};
180
+
181
+class AutoConfigTestPage : public QWizardPage {
182
+   Q_OBJECT
183
+
184
+   friend class AutoConfig;
185
+
186
+   QPointer<QFormLayout> results;
187
+
188
+   Ui_AutoConfigTestPage *ui;
189
+   std::thread testThread;
190
+   std::condition_variable cv;
191
+   std::mutex m;
192
+   bool cancel = false;
193
+   bool started = false;
194
+
195
+   enum class Stage {
196
+       Starting,
197
+       BandwidthTest,
198
+       StreamEncoder,
199
+       RecordingEncoder,
200
+       Finished
201
+   };
202
+
203
+   Stage stage = Stage::Starting;
204
+   bool softwareTested = false;
205
+
206
+   void StartBandwidthStage();
207
+   void StartStreamEncoderStage();
208
+   void StartRecordingEncoderStage();
209
+
210
+   void FindIdealHardwareResolution();
211
+   bool TestSoftwareEncoding();
212
+
213
+   void TestBandwidthThread();
214
+   void TestStreamEncoderThread();
215
+   void TestRecordingEncoderThread();
216
+
217
+   void FinalizeResults();
218
+
219
+   struct ServerInfo {
220
+       std::string name;
221
+       std::string address;
222
+       int bitrate = 0;
223
+       int ms = -1;
224
+
225
+       inline ServerInfo() {}
226
+
227
+       inline ServerInfo(const char *name_, const char *address_)
228
+           : name(name_), address(address_)
229
+       {
230
+       }
231
+   };
232
+
233
+   void GetServers(std::vector<ServerInfo> &servers);
234
+
235
+public:
236
+   AutoConfigTestPage(QWidget *parent = nullptr);
237
+   ~AutoConfigTestPage();
238
+
239
+   virtual void initializePage() override;
240
+   virtual void cleanupPage() override;
241
+   virtual bool isComplete() const override;
242
+   virtual int nextId() const override;
243
+
244
+public slots:
245
+   void NextStage();
246
+   void UpdateMessage(QString message);
247
+   void Failure(QString message);
248
+   void Progress(int percentage);
249
+};
250
obs-studio-18.0.2.tar.xz/UI/window-basic-filters.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-filters.cpp Changed
93
 
1
@@ -26,6 +26,7 @@
2
 
3
 #include <QMessageBox>
4
 #include <QCloseEvent>
5
+#include <vector>
6
 #include <string>
7
 #include <QMenu>
8
 #include <QVariant>
9
@@ -322,20 +323,43 @@
10
 QMenu *OBSBasicFilters::CreateAddFilterPopupMenu(bool async)
11
 {
12
    uint32_t sourceFlags = obs_source_get_output_flags(source);
13
-   const char *type;
14
+   const char *type_str;
15
    bool foundValues = false;
16
    size_t idx = 0;
17
 
18
+   struct FilterInfo {
19
+       string type;
20
+       string name;
21
+
22
+       inline FilterInfo(const char *type_, const char *name_)
23
+           : type(type_), name(name_)
24
+       {}
25
+   };
26
+
27
+   vector<FilterInfo> types;
28
+   while (obs_enum_filter_types(idx++, &type_str)) {
29
+       const char *name = obs_source_get_display_name(type_str);
30
+
31
+       auto it = types.begin();
32
+       for (; it != types.end(); ++it) {
33
+           if (it->name >= name)
34
+               break;
35
+       }
36
+
37
+       types.emplace(it, type_str, name);
38
+   }
39
+
40
    QMenu *popup = new QMenu(QTStr("Add"), this);
41
-   while (obs_enum_filter_types(idx++, &type)) {
42
-       const char *name = obs_source_get_display_name(type);
43
-       uint32_t filterFlags = obs_get_source_output_flags(type);
44
+   for (FilterInfo &type : types) {
45
+       uint32_t filterFlags = obs_get_source_output_flags(
46
+               type.type.c_str());
47
 
48
        if (!filter_compatible(async, sourceFlags, filterFlags))
49
            continue;
50
 
51
-       QAction *popupItem = new QAction(QT_UTF8(name), this);
52
-       popupItem->setData(QT_UTF8(type));
53
+       QAction *popupItem = new QAction(QT_UTF8(type.name.c_str()),
54
+               this);
55
+       popupItem->setData(QT_UTF8(type.type.c_str()));
56
        connect(popupItem, SIGNAL(triggered(bool)),
57
                this, SLOT(AddFilterFromAction()));
58
        popup->addAction(popupItem);
59
@@ -365,7 +389,7 @@
60
            return;
61
 
62
        if (name.empty()) {
63
-           QMessageBox::information(this,
64
+           OBSMessageBox::information(this,
65
                    QTStr("NoNameEntered.Title"),
66
                    QTStr("NoNameEntered.Text"));
67
            AddNewFilter(id);
68
@@ -375,7 +399,7 @@
69
        existing_filter = obs_source_get_filter_by_name(source,
70
                name.c_str());
71
        if (existing_filter) {
72
-           QMessageBox::information(this,
73
+           OBSMessageBox::information(this,
74
                    QTStr("NameExists.Title"),
75
                    QTStr("NameExists.Text"));
76
            obs_source_release(existing_filter);
77
@@ -678,13 +702,13 @@
78
        listItem->setText(QT_UTF8(prevName));
79
 
80
        if (foundFilter) {
81
-           QMessageBox::information(window(),
82
+           OBSMessageBox::information(window(),
83
                QTStr("NameExists.Title"),
84
                QTStr("NameExists.Text"));
85
            obs_source_release(foundFilter);
86
 
87
        } else if (name.empty()) {
88
-           QMessageBox::information(window(),
89
+           OBSMessageBox::information(window(),
90
                QTStr("NoNameEntered.Title"),
91
                QTStr("NoNameEntered.Text"));
92
        }
93
obs-studio-18.0.2.tar.xz/UI/window-basic-main-dropfiles.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main-dropfiles.cpp Changed
25
 
1
@@ -67,13 +67,23 @@
2
    switch (image) {
3
    case DropType_RawText:
4
        obs_data_set_string(settings, "text", data);
5
+#ifdef _WIN32
6
        type = "text_gdiplus";
7
+#else
8
+       type = "text_ft2_source";
9
+#endif
10
        break;
11
    case DropType_Text:
12
+#ifdef _WIN32
13
        obs_data_set_bool(settings, "read_from_file", true);
14
        obs_data_set_string(settings, "file", data);
15
        name = QUrl::fromLocalFile(QString(data)).fileName();
16
        type = "text_gdiplus";
17
+#else
18
+       obs_data_set_bool(settings, "from_file", true);
19
+       obs_data_set_string(settings, "text_file", data);
20
+       type = "text_ft2_source";
21
+#endif
22
        break;
23
    case DropType_Image:
24
        obs_data_set_string(settings, "file", data);
25
obs-studio-18.0.2.tar.xz/UI/window-basic-main-outputs.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main-outputs.cpp Changed
104
 
1
@@ -1,6 +1,7 @@
2
 #include <string>
3
 #include <algorithm>
4
 #include <QMessageBox>
5
+#include "qt-wrappers.hpp"
6
 #include "audio-encoders.hpp"
7
 #include "window-basic-main.hpp"
8
 #include "window-basic-main-outputs.hpp"
9
@@ -47,11 +48,14 @@
10
 {
11
    BasicOutputHandler *output = static_cast<BasicOutputHandler*>(data);
12
    int code = (int)calldata_int(params, "code");
13
+   const char *last_error = calldata_string(params, "last_error");
14
+
15
+   QString arg_last_error = QString::fromUtf8(last_error);
16
 
17
    output->streamingActive = false;
18
    output->delayActive = false;
19
    QMetaObject::invokeMethod(output->main,
20
-           "StreamingStop", Q_ARG(int, code));
21
+           "StreamingStop", Q_ARG(int, code), Q_ARG(QString, arg_last_error));
22
 }
23
 
24
 static void OBSStartRecording(void *data, calldata_t *params)
25
@@ -565,21 +569,21 @@
26
        int bitrate)
27
 {
28
    // Static Properties
29
-   obs_data_set_int(settings, "AMF.H264.Usage", 0);
30
-   obs_data_set_int(settings, "AMF.H264.Profile", 100); // High
31
+   obs_data_set_int(settings, "Usage", 0);
32
+   obs_data_set_int(settings, "Profile", 100); // High
33
    obs_data_set_string(settings, "profile", "high"); // High
34
    
35
    // Rate Control Properties
36
-   obs_data_set_int(settings, "AMF.H264.RateControlMethod", 1);
37
+   obs_data_set_int(settings, "RateControlMethod", 1);
38
    obs_data_set_string(settings, "rate_control", "CBR");
39
-   obs_data_set_int(settings, "AMF.H264.Bitrate.Target", bitrate);
40
+   obs_data_set_int(settings, "Bitrate.Target", bitrate);
41
    obs_data_set_int(settings, "bitrate", bitrate);
42
-   obs_data_set_int(settings, "AMF.H264.FillerData", 1);
43
-   obs_data_set_int(settings, "AMF.H264.VBVBuffer", 1);
44
-   obs_data_set_int(settings, "AMF.H264.VBVBuffer.Size", bitrate);
45
+   obs_data_set_int(settings, "FillerData", 1);
46
+   obs_data_set_int(settings, "VBVBuffer", 1);
47
+   obs_data_set_int(settings, "VBVBuffer.Size", bitrate);
48
    
49
    // Picture Control Properties
50
-   obs_data_set_double(settings, "AMF.H264.KeyframeInterval", 2.0);
51
+   obs_data_set_double(settings, "KeyframeInterval", 2.0);
52
    obs_data_set_int(settings, "keyint_sec", 2);
53
 }
54
 
55
@@ -588,21 +592,21 @@
56
    obs_data_t *settings = obs_data_create();
57
 
58
    // Static Properties
59
-   obs_data_set_int(settings, "AMF.H264.Usage", 0);
60
-   obs_data_set_int(settings, "AMF.H264.Profile", 100); // High
61
+   obs_data_set_int(settings, "Usage", 0);
62
+   obs_data_set_int(settings, "Profile", 100); // High
63
    obs_data_set_string(settings, "profile", "high"); // High
64
 
65
    // Rate Control Properties
66
-   obs_data_set_int(settings, "AMF.H264.RateControlMethod", 0);
67
+   obs_data_set_int(settings, "RateControlMethod", 0);
68
    obs_data_set_string(settings, "rate_control", "CQP");
69
-   obs_data_set_int(settings, "AMF.H264.QP.IFrame", cqp);
70
-   obs_data_set_int(settings, "AMF.H264.QP.PFrame", cqp);
71
-   obs_data_set_int(settings, "AMF.H264.QP.BFrame", cqp);
72
-   obs_data_set_int(settings, "AMF.H264.VBVBuffer", 1);
73
-   obs_data_set_int(settings, "AMF.H264.VBVBuffer.Size", 50000);
74
+   obs_data_set_int(settings, "QP.IFrame", cqp);
75
+   obs_data_set_int(settings, "QP.PFrame", cqp);
76
+   obs_data_set_int(settings, "QP.BFrame", cqp);
77
+   obs_data_set_int(settings, "VBVBuffer", 1);
78
+   obs_data_set_int(settings, "VBVBuffer.Size", 100000);
79
 
80
    // Picture Control Properties
81
-   obs_data_set_double(settings, "AMF.H264.KeyframeInterval", 2.0);
82
+   obs_data_set_double(settings, "KeyframeInterval", 2.0);
83
    obs_data_set_int(settings, "keyint_sec", 2);
84
 
85
    // Update and release
86
@@ -778,7 +782,7 @@
87
 
88
    if (!dir) {
89
        if (main->isVisible())
90
-           QMessageBox::information(main,
91
+           OBSMessageBox::information(main,
92
                    QTStr("Output.BadPath.Title"),
93
                    QTStr("Output.BadPath.Text"));
94
        else
95
@@ -1398,7 +1402,7 @@
96
 
97
        if (!dir) {
98
            if (main->isVisible())
99
-               QMessageBox::information(main,
100
+               OBSMessageBox::information(main,
101
                        QTStr("Output.BadPath.Title"),
102
                        QTStr("Output.BadPath.Text"));
103
            else
104
obs-studio-18.0.2.tar.xz/UI/window-basic-main-profiles.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main-profiles.cpp Changed
35
 
1
@@ -102,13 +102,13 @@
2
            return false;
3
        }
4
        if (name.empty()) {
5
-           QMessageBox::information(parent,
6
+           OBSMessageBox::information(parent,
7
                    QTStr("NoNameEntered.Title"),
8
                    QTStr("NoNameEntered.Text"));
9
            continue;
10
        }
11
        if (ProfileExists(name.c_str())) {
12
-           QMessageBox::information(parent,
13
+           OBSMessageBox::information(parent,
14
                    QTStr("NameExists.Title"),
15
                    QTStr("NameExists.Text"));
16
            continue;
17
@@ -407,7 +407,7 @@
18
    QString text = QTStr("ConfirmRemove.Text");
19
    text.replace("$1", QT_UTF8(oldName.c_str()));
20
 
21
-   QMessageBox::StandardButton button = QMessageBox::question(this,
22
+   QMessageBox::StandardButton button = OBSMessageBox::question(this,
23
            QTStr("ConfirmRemove.Title"), text);
24
    if (button == QMessageBox::No)
25
        return;
26
@@ -487,7 +487,7 @@
27
                    profileDir + "/recordEncoder.json");
28
            RefreshProfiles();
29
        } else {
30
-           QMessageBox::information(this,
31
+           OBSMessageBox::information(this,
32
                    QTStr("Basic.MainMenu.Profile.Import"),
33
                    QTStr("Basic.MainMenu.Profile.Exists"));
34
        }
35
obs-studio-18.0.2.tar.xz/UI/window-basic-main-scene-collections.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main-scene-collections.cpp Changed
58
 
1
@@ -114,13 +114,13 @@
2
            return false;
3
        }
4
        if (name.empty()) {
5
-           QMessageBox::information(parent,
6
+           OBSMessageBox::information(parent,
7
                    QTStr("NoNameEntered.Title"),
8
                    QTStr("NoNameEntered.Text"));
9
            continue;
10
        }
11
        if (SceneCollectionExists(name.c_str())) {
12
-           QMessageBox::information(parent,
13
+           OBSMessageBox::information(parent,
14
                    QTStr("NameExists.Title"),
15
                    QTStr("NameExists.Text"));
16
            continue;
17
@@ -221,9 +221,22 @@
18
 
19
    EnumSceneCollections(addCollection);
20
 
21
+   /* force saving of first scene collection on first run, otherwise
22
+    * no scene collections will show up */
23
+   if (!count) {
24
+       long prevDisableVal = disableSaving;
25
+
26
+       disableSaving = 0;
27
+       SaveProjectNow();
28
+       disableSaving = prevDisableVal;
29
+
30
+       EnumSceneCollections(addCollection);
31
+   }
32
+
33
    ui->actionRemoveSceneCollection->setEnabled(count > 1);
34
 
35
    OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
36
+
37
    main->OpenSavedProjectors();
38
    main->ui->actionPasteFilters->setEnabled(false);
39
    main->ui->actionPasteRef->setEnabled(false);
40
@@ -317,7 +330,7 @@
41
    QString text = QTStr("ConfirmRemove.Text");
42
    text.replace("$1", QT_UTF8(oldName.c_str()));
43
 
44
-   QMessageBox::StandardButton button = QMessageBox::question(this,
45
+   QMessageBox::StandardButton button = OBSMessageBox::question(this,
46
            QTStr("ConfirmRemove.Title"), text);
47
    if (button == QMessageBox::No)
48
        return;
49
@@ -382,7 +395,7 @@
50
            QFile::copy(file, path + filename);
51
            RefreshSceneCollections();
52
        } else {
53
-           QMessageBox::information(this,
54
+           OBSMessageBox::information(this,
55
                QTStr("Basic.MainMenu.SceneCollection.Import"),
56
                QTStr("Basic.MainMenu.SceneCollection.Exists"));
57
        }
58
obs-studio-18.0.2.tar.xz/UI/window-basic-main-transitions.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main-transitions.cpp Changed
102
 
1
@@ -364,7 +364,7 @@
2
 
3
    if (accepted) {
4
        if (name.empty()) {
5
-           QMessageBox::information(this,
6
+           OBSMessageBox::information(this,
7
                    QTStr("NoNameEntered.Title"),
8
                    QTStr("NoNameEntered.Text"));
9
            AddTransition();
10
@@ -373,7 +373,7 @@
11
 
12
        source = FindTransition(name.c_str());
13
        if (source) {
14
-           QMessageBox::information(this,
15
+           OBSMessageBox::information(this,
16
                    QTStr("NameExists.Title"),
17
                    QTStr("NameExists.Text"));
18
 
19
@@ -392,6 +392,9 @@
20
 
21
        if (api)
22
            api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
23
+
24
+       ClearQuickTransitionWidgets();
25
+       RefreshQuickTransitions();
26
    }
27
 }
28
 
29
@@ -445,6 +448,9 @@
30
 
31
    if (api)
32
        api->on_event(OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED);
33
+
34
+   ClearQuickTransitionWidgets();
35
+   RefreshQuickTransitions();
36
 }
37
 
38
 void OBSBasic::RenameTransition()
39
@@ -464,7 +470,7 @@
40
 
41
    if (accepted) {
42
        if (name.empty()) {
43
-           QMessageBox::information(this,
44
+           OBSMessageBox::information(this,
45
                    QTStr("NoNameEntered.Title"),
46
                    QTStr("NoNameEntered.Text"));
47
            RenameTransition();
48
@@ -473,7 +479,7 @@
49
 
50
        source = FindTransition(name.c_str());
51
        if (source) {
52
-           QMessageBox::information(this,
53
+           OBSMessageBox::information(this,
54
                    QTStr("NameExists.Title"),
55
                    QTStr("NameExists.Text"));
56
 
57
@@ -483,8 +489,11 @@
58
 
59
        obs_source_set_name(transition, name.c_str());
60
        int idx = ui->transitions->findData(variant);
61
-       if (idx != -1)
62
+       if (idx != -1) {
63
            ui->transitions->setItemText(idx, QT_UTF8(name.c_str()));
64
+           ClearQuickTransitionWidgets();
65
+           RefreshQuickTransitions();
66
+       }
67
    }
68
 }
69
 
70
@@ -919,6 +928,31 @@
71
    quickTransitions.erase(quickTransitions.begin() + idx);
72
 }
73
 
74
+void OBSBasic::ClearQuickTransitionWidgets()
75
+{
76
+   if (!IsPreviewProgramMode())
77
+       return;
78
+
79
+   QVBoxLayout *programLayout =
80
+       reinterpret_cast<QVBoxLayout*>(programOptions->layout());
81
+
82
+   for (int idx = 0;; idx++) {
83
+       QLayoutItem *item = programLayout->itemAt(idx);
84
+       if (!item)
85
+           break;
86
+
87
+       QWidget *widget = item->widget();
88
+       if (!widget)
89
+           continue;
90
+
91
+       int id = widget->property("id").toInt();
92
+       if (id != 0) {
93
+           delete widget;
94
+           idx--;
95
+       }
96
+   }
97
+}
98
+
99
 void OBSBasic::RefreshQuickTransitions()
100
 {
101
    if (!IsPreviewProgramMode())
102
obs-studio-18.0.2.tar.xz/UI/window-basic-main.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main.cpp Changed
672
 
1
@@ -32,6 +32,7 @@
2
 #include <util/util.hpp>
3
 #include <util/platform.h>
4
 #include <util/profiler.hpp>
5
+#include <util/dstr.hpp>
6
 #include <graphics/math-defs.h>
7
 
8
 #include "obs-app.hpp"
9
@@ -40,8 +41,10 @@
10
 #include "item-widget-helpers.hpp"
11
 #include "window-basic-settings.hpp"
12
 #include "window-namedialog.hpp"
13
+#include "window-basic-auto-config.hpp"
14
 #include "window-basic-source-select.hpp"
15
 #include "window-basic-main.hpp"
16
+#include "window-basic-stats.hpp"
17
 #include "window-basic-main-outputs.hpp"
18
 #include "window-basic-properties.hpp"
19
 #include "window-log-reply.hpp"
20
@@ -625,20 +628,12 @@
21
 
22
 void OBSBasic::Load(const char *file)
23
 {
24
-   if (!file || !os_file_exists(file)) {
25
-       blog(LOG_INFO, "No scene file found, creating default scene");
26
-       CreateDefaultScene(true);
27
-       SaveProject();
28
-       return;
29
-   }
30
-
31
    disableSaving++;
32
 
33
    obs_data_t *data = obs_data_create_from_json_file_safe(file, "bak");
34
    if (!data) {
35
        disableSaving--;
36
-       blog(LOG_ERROR, "Failed to load '%s', creating default scene",
37
-               file);
38
+       blog(LOG_INFO, "No scene file found, creating default scene");
39
        CreateDefaultScene(true);
40
        SaveProject();
41
        return;
42
@@ -921,6 +916,17 @@
43
    uint32_t cx = primaryScreen->size().width();
44
    uint32_t cy = primaryScreen->size().height();
45
 
46
+   bool oldResolutionDefaults = config_get_bool(App()->GlobalConfig(),
47
+           "General", "Pre19Defaults");
48
+
49
+   /* use 1920x1080 for new default base res if main monitor is above
50
+    * 1920x1080, but don't apply for people from older builds -- only to
51
+    * new users */
52
+   if (!oldResolutionDefaults && (cx * cy) > (1920 * 1080)) {
53
+       cx = 1920;
54
+       cy = 1080;
55
+   }
56
+
57
    /* ----------------------------------------------------- */
58
    /* move over mixer values in advanced if older config */
59
    if (config_has_user_value(basicConfig, "AdvOut", "RecTrackIndex") &&
60
@@ -1004,6 +1010,14 @@
61
    config_set_default_uint  (basicConfig, "Video", "BaseCX",   cx);
62
    config_set_default_uint  (basicConfig, "Video", "BaseCY",   cy);
63
 
64
+   /* don't allow BaseCX/BaseCY to be susceptible to defaults changing */
65
+   if (!config_has_user_value(basicConfig, "Video", "BaseCX") ||
66
+       !config_has_user_value(basicConfig, "Video", "BaseCY")) {
67
+       config_set_uint(basicConfig, "Video", "BaseCX", cx);
68
+       config_set_uint(basicConfig, "Video", "BaseCY", cy);
69
+       config_save_safe(basicConfig, "tmp", nullptr);
70
+   }
71
+
72
    config_set_default_string(basicConfig, "Output", "FilenameFormatting",
73
            "%CCYY-%MM-%DD %hh-%mm-%ss");
74
 
75
@@ -1036,6 +1050,15 @@
76
    config_set_default_uint  (basicConfig, "Video", "OutputCX", scale_cx);
77
    config_set_default_uint  (basicConfig, "Video", "OutputCY", scale_cy);
78
 
79
+   /* don't allow OutputCX/OutputCY to be susceptible to defaults
80
+    * changing */
81
+   if (!config_has_user_value(basicConfig, "Video", "OutputCX") ||
82
+       !config_has_user_value(basicConfig, "Video", "OutputCY")) {
83
+       config_set_uint(basicConfig, "Video", "OutputCX", scale_cx);
84
+       config_set_uint(basicConfig, "Video", "OutputCY", scale_cy);
85
+       config_save_safe(basicConfig, "tmp", nullptr);
86
+   }
87
+
88
    config_set_default_uint  (basicConfig, "Video", "FPSType", 0);
89
    config_set_default_string(basicConfig, "Video", "FPSCommon", "30");
90
    config_set_default_uint  (basicConfig, "Video", "FPSInt", 30);
91
@@ -1402,6 +1425,39 @@
92
    SystemTray(true);
93
 
94
    OpenSavedProjectors();
95
+
96
+   bool has_last_version = config_has_user_value(App()->GlobalConfig(),
97
+           "General", "LastVersion");
98
+   bool first_run = config_get_bool(App()->GlobalConfig(), "General",
99
+           "FirstRun");
100
+
101
+   if (!first_run) {
102
+       config_set_bool(App()->GlobalConfig(), "General", "FirstRun",
103
+               true);
104
+       config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
105
+   }
106
+
107
+   if (!first_run && !has_last_version && !Active()) {
108
+       QString msg;
109
+       msg = QTStr("Basic.FirstStartup.RunWizard");
110
+       msg += "\n\n";
111
+       msg += QTStr("Basic.FirstStartup.RunWizard.BetaWarning");
112
+
113
+       QMessageBox::StandardButton button =
114
+           OBSMessageBox::question(this, QTStr("Basic.AutoConfig"),
115
+                   msg);
116
+
117
+       if (button == QMessageBox::Yes) {
118
+           on_autoConfigure_triggered();
119
+       } else {
120
+           msg = QTStr("Basic.FirstStartup.RunWizard.NoClicked");
121
+           OBSMessageBox::information(this,
122
+                   QTStr("Basic.AutoConfig"), msg);
123
+       }
124
+   }
125
+
126
+   if (config_get_bool(basicConfig, "General", "OpenStatsOnStartup"))
127
+       on_stats_triggered();
128
 }
129
 
130
 void OBSBasic::InitHotkeys()
131
@@ -2144,7 +2200,7 @@
132
        int count = ui->scenes->count();
133
 
134
        if (count == 1) {
135
-           QMessageBox::information(this,
136
+           OBSMessageBox::information(this,
137
                        QTStr("FinalScene.Title"),
138
                        QTStr("FinalScene.Text"));
139
            return false;
140
@@ -2254,7 +2310,7 @@
141
            return;
142
 
143
        if (name.empty()) {
144
-           QMessageBox::information(this,
145
+           OBSMessageBox::information(this,
146
                    QTStr("NoNameEntered.Title"),
147
                    QTStr("NoNameEntered.Text"));
148
            continue;
149
@@ -2262,7 +2318,7 @@
150
 
151
        obs_source_t *source = obs_get_source_by_name(name.c_str());
152
        if (source) {
153
-           QMessageBox::information(this,
154
+           OBSMessageBox::information(this,
155
                    QTStr("NameExists.Title"),
156
                    QTStr("NameExists.Text"));
157
 
158
@@ -2636,6 +2692,9 @@
159
 
160
 int OBSBasic::ResetVideo()
161
 {
162
+   if (outputHandler && outputHandler->Active())
163
+       return OBS_VIDEO_CURRENTLY_ACTIVE;
164
+
165
    ProfileScope("OBSBasic::ResetVideo");
166
 
167
    struct obs_video_info ovi;
168
@@ -2686,6 +2745,12 @@
169
 
170
    ret = AttemptToResetVideo(&ovi);
171
    if (IS_WIN32 && ret != OBS_VIDEO_SUCCESS) {
172
+       if (ret == OBS_VIDEO_CURRENTLY_ACTIVE) {
173
+           blog(LOG_WARNING, "Tried to reset when "
174
+                             "already active");
175
+           return ret;
176
+       }
177
+
178
        /* Try OpenGL if DirectX fails on windows */
179
        if (astrcmpi(ovi.graphics_module, DL_OPENGL) != 0) {
180
            blog(LOG_WARNING, "Failed to initialize obs video (%d) "
181
@@ -2807,10 +2872,16 @@
182
        }
183
    }
184
 
185
+   for (QPointer<QWidget> &projector : windowProjectors) {
186
+       delete projector;
187
+       projector.clear();
188
+   }
189
    for (QPointer<QWidget> &projector : projectors) {
190
        delete projector;
191
        projector.clear();
192
    }
193
+
194
+   delete stats;
195
 }
196
 
197
 void OBSBasic::EnumDialogs()
198
@@ -2883,7 +2954,7 @@
199
    if (outputHandler && outputHandler->Active()) {
200
        SetShowing(true);
201
 
202
-       QMessageBox::StandardButton button = QMessageBox::question(
203
+       QMessageBox::StandardButton button = OBSMessageBox::question(
204
                this, QTStr("ConfirmExit.Title"),
205
                QTStr("ConfirmExit.Text"));
206
 
207
@@ -2916,6 +2987,8 @@
208
    /* Clear all scene data (dialogs, widgets, widget sub-items, scenes,
209
     * sources, etc) so that all references are released before shutdown */
210
    ClearSceneData();
211
+
212
+   App()->quit();
213
 }
214
 
215
 void OBSBasic::changeEvent(QEvent *event)
216
@@ -3068,6 +3141,12 @@
217
        AddProjectorMenuMonitors(sceneProjectorMenu, this,
218
                SLOT(OpenSceneProjector()));
219
        popup.addMenu(sceneProjectorMenu);
220
+
221
+       QAction *sceneWindow = popup.addAction(
222
+               QTStr("SceneWindow"),
223
+               this, SLOT(OpenSceneWindow()));
224
+
225
+       popup.addAction(sceneWindow);
226
        popup.addSeparator();
227
        popup.addAction(QTStr("Filters"), this,
228
                SLOT(OpenSceneFilters()));
229
@@ -3097,7 +3176,7 @@
230
 
231
    if (accepted) {
232
        if (name.empty()) {
233
-           QMessageBox::information(this,
234
+           OBSMessageBox::information(this,
235
                    QTStr("NoNameEntered.Title"),
236
                    QTStr("NoNameEntered.Text"));
237
            on_actionAddScene_triggered();
238
@@ -3106,7 +3185,7 @@
239
 
240
        obs_source_t *source = obs_get_source_by_name(name.c_str());
241
        if (source) {
242
-           QMessageBox::information(this,
243
+           OBSMessageBox::information(this,
244
                    QTStr("NameExists.Title"),
245
                    QTStr("NameExists.Text"));
246
 
247
@@ -3335,6 +3414,12 @@
248
 
249
        popup.addMenu(previewProjector);
250
 
251
+       QAction *previewWindow = popup.addAction(
252
+               QTStr("PreviewWindow"),
253
+               this, SLOT(OpenPreviewWindow()));
254
+
255
+       popup.addAction(previewWindow);
256
+
257
        popup.addSeparator();
258
    }
259
 
260
@@ -3379,6 +3464,12 @@
261
        AddProjectorMenuMonitors(sourceProjector, this,
262
                SLOT(OpenSourceProjector()));
263
 
264
+       QAction *sourceWindow = popup.addAction(
265
+               QTStr("SourceWindow"),
266
+               this, SLOT(OpenSourceWindow()));
267
+
268
+       popup.addAction(sourceWindow);
269
+
270
        popup.addSeparator();
271
        if (isAsyncVideo) {
272
            popup.addMenu(AddDeinterlacingMenu(source));
273
@@ -3389,6 +3480,7 @@
274
        popup.addSeparator();
275
 
276
        popup.addMenu(sourceProjector);
277
+       popup.addAction(sourceWindow);
278
        popup.addSeparator();
279
 
280
        action = popup.addAction(QTStr("Interact"), this,
281
@@ -3515,7 +3607,7 @@
282
 {
283
    if (!GetCurrentScene()) {
284
        // Tell the user he needs a scene first (help beginners).
285
-       QMessageBox::information(this,
286
+       OBSMessageBox::information(this,
287
                QTStr("Basic.Main.AddSourceHelp.Title"),
288
                QTStr("Basic.Main.AddSourceHelp.Text"));
289
        return;
290
@@ -3750,7 +3842,7 @@
291
    ui->menuLogFiles->setEnabled(true);
292
 
293
    if (text.isEmpty()) {
294
-       QMessageBox::information(this,
295
+       OBSMessageBox::information(this,
296
                QTStr("LogReturnDialog.ErrorUploadingLog"),
297
                error);
298
        return;
299
@@ -3778,11 +3870,11 @@
300
        listItem->setText(QT_UTF8(prevName));
301
 
302
        if (foundSource) {
303
-           QMessageBox::information(parent,
304
+           OBSMessageBox::information(parent,
305
                QTStr("NameExists.Title"),
306
                QTStr("NameExists.Text"));
307
        } else if (name.empty()) {
308
-           QMessageBox::information(parent,
309
+           OBSMessageBox::information(parent,
310
                QTStr("NoNameEntered.Title"),
311
                QTStr("NoNameEntered.Text"));
312
        }
313
@@ -3866,6 +3958,8 @@
314
 {
315
    if (outputHandler->StreamingActive())
316
        return;
317
+   if (disableOutputsRef)
318
+       return;
319
 
320
    if (api)
321
        api->on_event(OBS_FRONTEND_EVENT_STREAMING_STARTING);
322
@@ -3931,6 +4025,7 @@
323
 {
324
    if (ui->profileMenu->isEnabled()) {
325
        ui->profileMenu->setEnabled(false);
326
+       ui->autoConfigure->setEnabled(false);
327
        App()->IncrementSleepInhibition();
328
        UpdateProcessPriority();
329
 
330
@@ -3943,6 +4038,7 @@
331
 {
332
    if (!outputHandler->Active() && !ui->profileMenu->isEnabled()) {
333
        ui->profileMenu->setEnabled(true);
334
+       ui->autoConfigure->setEnabled(true);
335
        App()->DecrementSleepInhibition();
336
        ClearProcessPriority();
337
 
338
@@ -4078,34 +4174,45 @@
339
        api->on_event(OBS_FRONTEND_EVENT_STREAMING_STOPPING);
340
 }
341
 
342
-void OBSBasic::StreamingStop(int code)
343
+void OBSBasic::StreamingStop(int code, QString last_error)
344
 {
345
-   const char *errorMessage;
346
+   const char *errorDescription;
347
+   DStr errorMessage;
348
+   bool use_last_error = false;
349
 
350
    switch (code) {
351
    case OBS_OUTPUT_BAD_PATH:
352
-       errorMessage = Str("Output.ConnectFail.BadPath");
353
+       errorDescription = Str("Output.ConnectFail.BadPath");
354
        break;
355
 
356
    case OBS_OUTPUT_CONNECT_FAILED:
357
-       errorMessage = Str("Output.ConnectFail.ConnectFailed");
358
+       use_last_error = true;
359
+       errorDescription = Str("Output.ConnectFail.ConnectFailed");
360
        break;
361
 
362
    case OBS_OUTPUT_INVALID_STREAM:
363
-       errorMessage = Str("Output.ConnectFail.InvalidStream");
364
+       errorDescription = Str("Output.ConnectFail.InvalidStream");
365
        break;
366
 
367
    default:
368
    case OBS_OUTPUT_ERROR:
369
-       errorMessage = Str("Output.ConnectFail.Error");
370
+       use_last_error = true;
371
+       errorDescription = Str("Output.ConnectFail.Error");
372
        break;
373
 
374
    case OBS_OUTPUT_DISCONNECTED:
375
        /* doesn't happen if output is set to reconnect.  note that
376
         * reconnects are handled in the output, not in the UI */
377
-       errorMessage = Str("Output.ConnectFail.Disconnected");
378
+       use_last_error = true;
379
+       errorDescription = Str("Output.ConnectFail.Disconnected");
380
    }
381
 
382
+   if (use_last_error && !last_error.isEmpty())
383
+       dstr_printf(errorMessage, "%s\n\n%s", errorDescription,
384
+           QT_TO_UTF8(last_error));
385
+   else
386
+       dstr_copy(errorMessage, errorDescription);
387
+
388
    ui->statusbar->StreamStopped();
389
 
390
    ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
391
@@ -4125,11 +4232,11 @@
392
    blog(LOG_INFO, STREAMING_STOP);
393
 
394
    if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
395
-       QMessageBox::information(this,
396
+       OBSMessageBox::information(this,
397
                QTStr("Output.ConnectFail.Title"),
398
                QT_UTF8(errorMessage));
399
    } else if (code != OBS_OUTPUT_SUCCESS && !isVisible()) {
400
-       SysTrayNotify(QT_UTF8(errorMessage), QSystemTrayIcon::Warning);
401
+       SysTrayNotify(QT_UTF8(errorDescription), QSystemTrayIcon::Warning);
402
    }
403
 
404
    if (!startStreamMenu.isNull()) {
405
@@ -4143,6 +4250,8 @@
406
 {
407
    if (outputHandler->RecordingActive())
408
        return;
409
+   if (disableOutputsRef)
410
+       return;
411
 
412
    if (api)
413
        api->on_event(OBS_FRONTEND_EVENT_RECORDING_STARTING);
414
@@ -4201,17 +4310,17 @@
415
    blog(LOG_INFO, RECORDING_STOP);
416
 
417
    if (code == OBS_OUTPUT_UNSUPPORTED && isVisible()) {
418
-       QMessageBox::information(this,
419
+       OBSMessageBox::information(this,
420
                QTStr("Output.RecordFail.Title"),
421
                QTStr("Output.RecordFail.Unsupported"));
422
 
423
    } else if (code == OBS_OUTPUT_NO_SPACE && isVisible()) {
424
-       QMessageBox::information(this,
425
+       OBSMessageBox::information(this,
426
                QTStr("Output.RecordNoSpace.Title"),
427
                QTStr("Output.RecordNoSpace.Msg"));
428
 
429
    } else if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
430
-       QMessageBox::information(this,
431
+       OBSMessageBox::information(this,
432
                QTStr("Output.RecordError.Title"),
433
                QTStr("Output.RecordError.Msg"));
434
 
435
@@ -4243,6 +4352,8 @@
436
        return;
437
    if (outputHandler->ReplayBufferActive())
438
        return;
439
+   if (disableOutputsRef)
440
+       return;
441
 
442
    obs_output_t *output = outputHandler->replayBuffer;
443
    obs_data_t *hotkeys = obs_hotkeys_save_output(output);
444
@@ -4253,7 +4364,7 @@
445
    obs_data_release(hotkeys);
446
 
447
    if (!count) {
448
-       QMessageBox::information(this,
449
+       OBSMessageBox::information(this,
450
                RP_NO_HOTKEY_TITLE,
451
                RP_NO_HOTKEY_TEXT);
452
        return;
453
@@ -4326,17 +4437,17 @@
454
    blog(LOG_INFO, REPLAY_BUFFER_STOP);
455
 
456
    if (code == OBS_OUTPUT_UNSUPPORTED && isVisible()) {
457
-       QMessageBox::information(this,
458
+       OBSMessageBox::information(this,
459
                QTStr("Output.RecordFail.Title"),
460
                QTStr("Output.RecordFail.Unsupported"));
461
 
462
    } else if (code == OBS_OUTPUT_NO_SPACE && isVisible()) {
463
-       QMessageBox::information(this,
464
+       OBSMessageBox::information(this,
465
                QTStr("Output.RecordNoSpace.Title"),
466
                QTStr("Output.RecordNoSpace.Msg"));
467
 
468
    } else if (code != OBS_OUTPUT_SUCCESS && isVisible()) {
469
-       QMessageBox::information(this,
470
+       OBSMessageBox::information(this,
471
                QTStr("Output.RecordError.Title"),
472
                QTStr("Output.RecordError.Msg"));
473
 
474
@@ -4367,7 +4478,7 @@
475
 
476
        if (confirm && isVisible()) {
477
            QMessageBox::StandardButton button =
478
-               QMessageBox::question(this,
479
+               OBSMessageBox::question(this,
480
                        QTStr("ConfirmStop.Title"),
481
                        QTStr("ConfirmStop.Text"));
482
 
483
@@ -4382,7 +4493,7 @@
484
 
485
        if (confirm && isVisible()) {
486
            QMessageBox::StandardButton button =
487
-               QMessageBox::question(this,
488
+               OBSMessageBox::question(this,
489
                        QTStr("ConfirmStart.Title"),
490
                        QTStr("ConfirmStart.Text"));
491
 
492
@@ -4465,7 +4576,12 @@
493
    AddProjectorMenuMonitors(previewProjector, this,
494
            SLOT(OpenPreviewProjector()));
495
 
496
+   QAction *previewWindow = popup.addAction(
497
+           QTStr("PreviewWindow"),
498
+           this, SLOT(OpenPreviewWindow()));
499
+
500
    popup.addMenu(previewProjector);
501
+   popup.addAction(previewWindow);
502
    popup.exec(QCursor::pos());
503
 
504
    UNUSED_PARAMETER(pos);
505
@@ -4901,7 +5017,8 @@
506
 void OBSBasic::NudgeLeft()     {Nudge(1,  MoveDir::Left);}
507
 void OBSBasic::NudgeRight()    {Nudge(1,  MoveDir::Right);}
508
 
509
-void OBSBasic::OpenProjector(obs_source_t *source, int monitor)
510
+void OBSBasic::OpenProjector(obs_source_t *source, int monitor, bool window,
511
+       QString title)
512
 {
513
    /* seriously?  10 monitors? */
514
    if (monitor > 9 || monitor > QGuiApplication::screens().size() - 1)
515
@@ -4912,29 +5029,45 @@
516
    if (source == nullptr)
517
        isPreview = true;
518
 
519
-   delete projectors[monitor];
520
-   projectors[monitor].clear();
521
-
522
-   RemoveSavedProjectors(monitor);
523
-
524
-   OBSProjector *projector = new OBSProjector(nullptr, source);
525
+   if (!window) {
526
+       delete projectors[monitor];
527
+       projectors[monitor].clear();
528
+       RemoveSavedProjectors(monitor);
529
+   }
530
 
531
+   OBSProjector *projector = new OBSProjector(nullptr, source, !!window);
532
    const char *name = obs_source_get_name(source);
533
 
534
-   if (isPreview) {
535
-       previewProjectorArray.at((size_t)monitor) = 1;
536
-   } else {
537
-       projectorArray.at((size_t)monitor) = name;
538
+   if (!window) {
539
+       if (isPreview) {
540
+           previewProjectorArray.at((size_t)monitor) = 1;
541
+       } else {
542
+           projectorArray.at((size_t)monitor) = name;
543
+       }
544
    }
545
 
546
-   projector->Init(monitor);
547
-   projectors[monitor] = projector;
548
+   if (!window) {
549
+       projector->Init(monitor, false, nullptr);
550
+       projectors[monitor] = projector;
551
+   } else {
552
+       projector->Init(monitor, true, title);
553
+
554
+       for (auto &projPtr : windowProjectors) {
555
+           if (!projPtr) {
556
+               projPtr = projector;
557
+               projector = nullptr;
558
+           }
559
+       }
560
+
561
+       if (projector)
562
+           windowProjectors.push_back(projector);
563
+   }
564
 }
565
 
566
 void OBSBasic::OpenPreviewProjector()
567
 {
568
    int monitor = sender()->property("monitor").toInt();
569
-   OpenProjector(nullptr, monitor);
570
+   OpenProjector(nullptr, monitor, false);
571
 }
572
 
573
 void OBSBasic::OpenSourceProjector()
574
@@ -4944,7 +5077,7 @@
575
    if (!item)
576
        return;
577
 
578
-   OpenProjector(obs_sceneitem_get_source(item), monitor);
579
+   OpenProjector(obs_sceneitem_get_source(item), monitor, false);
580
 }
581
 
582
 void OBSBasic::OpenSceneProjector()
583
@@ -4954,7 +5087,44 @@
584
    if (!scene)
585
        return;
586
 
587
-   OpenProjector(obs_scene_get_source(scene), monitor);
588
+   OpenProjector(obs_scene_get_source(scene), monitor, false);
589
+}
590
+
591
+void OBSBasic::OpenPreviewWindow()
592
+{
593
+   int monitor = sender()->property("monitor").toInt();
594
+   QString title = QTStr("PreviewWindow");
595
+   OpenProjector(nullptr, monitor, true, title);
596
+}
597
+
598
+void OBSBasic::OpenSourceWindow()
599
+{
600
+   int monitor = sender()->property("monitor").toInt();
601
+   OBSSceneItem item = GetCurrentSceneItem();
602
+   OBSSource source = obs_sceneitem_get_source(item);
603
+   QString text = QString::fromUtf8(obs_source_get_name(source));
604
+
605
+   QString title = QTStr("SourceWindow") + " - " + text;
606
+
607
+   if (!item)
608
+       return;
609
+
610
+   OpenProjector(obs_sceneitem_get_source(item), monitor, true, title);
611
+}
612
+
613
+void OBSBasic::OpenSceneWindow()
614
+{
615
+   int monitor = sender()->property("monitor").toInt();
616
+   OBSScene scene = GetCurrentScene();
617
+   OBSSource source = obs_scene_get_source(scene);
618
+   QString text = QString::fromUtf8(obs_source_get_name(source));
619
+
620
+   QString title = QTStr("SceneWindow") + " - " + text;
621
+
622
+   if (!scene)
623
+       return;
624
+
625
+   OpenProjector(obs_scene_get_source(scene), monitor, true, title);
626
 }
627
 
628
 void OBSBasic::OpenSavedProjectors()
629
@@ -4974,14 +5144,14 @@
630
                    continue;
631
                }
632
 
633
-               OpenProjector(source, (int)i);
634
+               OpenProjector(source, (int)i, false);
635
                obs_source_release(source);
636
            }
637
        }
638
 
639
        for (size_t i = 0; i < previewProjectorArray.size(); i++) {
640
            if (previewProjectorArray.at(i) == 1) {
641
-               OpenProjector(nullptr, (int)i);
642
+               OpenProjector(nullptr, (int)i, false);
643
            }
644
        }
645
    }
646
@@ -5337,3 +5507,25 @@
647
 
648
    obs_source_copy_filters(dstSource, source);
649
 }
650
+
651
+void OBSBasic::on_autoConfigure_triggered()
652
+{
653
+   AutoConfig test(this);
654
+   test.setModal(true);
655
+   test.show();
656
+   test.exec();
657
+}
658
+
659
+void OBSBasic::on_stats_triggered()
660
+{
661
+   if (!stats.isNull()) {
662
+       stats->show();
663
+       stats->raise();
664
+       return;
665
+   }
666
+
667
+   OBSBasicStats *statsDlg;
668
+   statsDlg = new OBSBasicStats(nullptr);
669
+   statsDlg->show();
670
+   stats = statsDlg;
671
+}
672
obs-studio-18.0.2.tar.xz/UI/window-basic-main.hpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-main.hpp Changed
93
 
1
@@ -42,6 +42,7 @@
2
 class QListWidgetItem;
3
 class VolControl;
4
 class QNetworkReply;
5
+class OBSBasicStats;
6
 
7
 #include "ui_OBSBasic.h"
8
 
9
@@ -158,6 +159,9 @@
10
    ConfigFile    basicConfig;
11
 
12
    QPointer<QWidget> projectors[10];
13
+   QList<QPointer<QWidget>> windowProjectors;
14
+
15
+   QPointer<QWidget> stats;
16
 
17
    QPointer<QMenu> startStreamMenu;
18
 
19
@@ -233,7 +237,8 @@
20
    void ClearSceneData();
21
 
22
    void Nudge(int dist, MoveDir dir);
23
-   void OpenProjector(obs_source_t *source, int monitor);
24
+   void OpenProjector(obs_source_t *source, int monitor, bool window,
25
+           QString title = nullptr);
26
 
27
    void GetAudioSourceFilters();
28
    void GetAudioSourceProperties();
29
@@ -277,6 +282,7 @@
30
    void RemoveQuickTransitionHotkey(QuickTransition *qt);
31
    void LoadQuickTransitions(obs_data_array_t *array);
32
    obs_data_array_t *SaveQuickTransitions();
33
+   void ClearQuickTransitionWidgets();
34
    void RefreshQuickTransitions();
35
    void CreateDefaultQuickTransitions();
36
 
37
@@ -312,6 +318,8 @@
38
    int   programCX = 0, programCY = 0;
39
    float programScale = 0.0f;
40
 
41
+   int disableOutputsRef = 0;
42
+
43
    inline bool IsPreviewProgramMode() const
44
    {
45
        return os_atomic_load_bool(&previewProgramMode);
46
@@ -355,7 +363,7 @@
47
 
48
    void StreamingStart();
49
    void StreamStopping();
50
-   void StreamingStop(int errorcode);
51
+   void StreamingStop(int errorcode, QString last_error);
52
 
53
    void StartRecording();
54
    void StopRecording();
55
@@ -491,6 +499,16 @@
56
    void SaveService();
57
    bool LoadService();
58
 
59
+   inline void EnableOutputs(bool enable)
60
+   {
61
+       if (enable) {
62
+           if (--disableOutputsRef < 0)
63
+               disableOutputsRef = 0;
64
+       } else {
65
+           disableOutputsRef++;
66
+       }
67
+   }
68
+
69
    void ReorderSceneItem(obs_sceneitem_t *item, size_t idx);
70
 
71
    QMenu *AddDeinterlacingMenu(obs_source_t *source);
72
@@ -604,6 +622,9 @@
73
 
74
    void on_modeSwitch_clicked();
75
 
76
+   void on_autoConfigure_triggered();
77
+   void on_stats_triggered();
78
+
79
    void logUploadFinished(const QString &text, const QString &error);
80
 
81
    void updateCheckFinished();
82
@@ -636,6 +657,10 @@
83
    void OpenSourceProjector();
84
    void OpenSceneProjector();
85
 
86
+   void OpenPreviewWindow();
87
+   void OpenSourceWindow();
88
+   void OpenSceneWindow();
89
+
90
 public slots:
91
    void on_actionResetTransform_triggered();
92
 
93
obs-studio-18.0.2.tar.xz/UI/window-basic-properties.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-properties.cpp Changed
10
 
1
@@ -265,7 +265,7 @@
2
 {
3
    QMessageBox::StandardButton button;
4
 
5
-   button = QMessageBox::question(this,
6
+   button = OBSMessageBox::question(this,
7
            QTStr("Basic.PropertiesWindow.ConfirmTitle"),
8
            QTStr("Basic.PropertiesWindow.Confirm"),
9
            QMessageBox::Save | QMessageBox::Discard |
10
obs-studio-18.0.2.tar.xz/UI/window-basic-settings.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-settings.cpp Changed
214
 
1
@@ -151,6 +151,23 @@
2
    return false;
3
 }
4
 
5
+static inline bool SetInvalidValue(QComboBox *combo, const char *name,
6
+   const char *data = nullptr)
7
+{
8
+   combo->insertItem(0, name, data);
9
+
10
+   QStandardItemModel *model =
11
+       dynamic_cast<QStandardItemModel*>(combo->model());
12
+   if (!model)
13
+       return false;
14
+
15
+   QStandardItem *item = model->item(0);
16
+   item->setFlags(Qt::NoItemFlags);
17
+
18
+   combo->setCurrentIndex(0);
19
+   return true;
20
+}
21
+
22
 static inline QString GetComboData(QComboBox *combo)
23
 {
24
    int idx = combo->currentIndex();
25
@@ -260,6 +277,8 @@
26
 
27
    ui->setupUi(this);
28
 
29
+   main->EnableOutputs(false);
30
+
31
    PopulateAACBitrates({ui->simpleOutputABitrate,
32
            ui->advOutTrack1Bitrate, ui->advOutTrack2Bitrate,
33
            ui->advOutTrack3Bitrate, ui->advOutTrack4Bitrate,
34
@@ -274,6 +293,7 @@
35
    HookWidget(ui->language,             COMBO_CHANGED,  GENERAL_CHANGED);
36
    HookWidget(ui->theme,            COMBO_CHANGED,  GENERAL_CHANGED);
37
    HookWidget(ui->enableAutoUpdates,    CHECK_CHANGED,  GENERAL_CHANGED);
38
+   HookWidget(ui->openStatsOnStartup,   CHECK_CHANGED,  GENERAL_CHANGED);
39
    HookWidget(ui->warnBeforeStreamStart,CHECK_CHANGED,  GENERAL_CHANGED);
40
    HookWidget(ui->warnBeforeStreamStop, CHECK_CHANGED,  GENERAL_CHANGED);
41
    HookWidget(ui->hideProjectorCursor,  CHECK_CHANGED,  GENERAL_CHANGED);
42
@@ -393,6 +413,9 @@
43
 #if defined(_WIN32) || defined(__APPLE__)
44
    HookWidget(ui->monitoringDevice,     COMBO_CHANGED,  ADV_CHANGED);
45
 #endif
46
+#ifdef _WIN32
47
+   HookWidget(ui->disableAudioDucking,  CHECK_CHANGED,  ADV_CHANGED);
48
+#endif
49
    HookWidget(ui->filenameFormatting,   EDIT_CHANGED,   ADV_CHANGED);
50
    HookWidget(ui->overwriteIfExists,    CHECK_CHANGED,  ADV_CHANGED);
51
    HookWidget(ui->simpleRBPrefix,       EDIT_CHANGED,   ADV_CHANGED);
52
@@ -461,6 +484,9 @@
53
    delete ui->advancedGeneralGroupBox;
54
    delete ui->enableNewSocketLoop;
55
    delete ui->enableLowLatencyMode;
56
+#ifdef __APPLE__
57
+   delete ui->disableAudioDucking;
58
+#endif
59
    ui->rendererLabel = nullptr;
60
    ui->renderer = nullptr;
61
    ui->adapterLabel = nullptr;
62
@@ -470,6 +496,9 @@
63
    ui->advancedGeneralGroupBox = nullptr;
64
    ui->enableNewSocketLoop = nullptr;
65
    ui->enableLowLatencyMode = nullptr;
66
+#ifdef __APPLE__
67
+   ui->disableAudioDucking = nullptr;
68
+#endif
69
 #endif
70
 
71
 #ifndef __APPLE__
72
@@ -627,6 +656,11 @@
73
    UpdateAutomaticReplayBufferCheckboxes();
74
 }
75
 
76
+OBSBasicSettings::~OBSBasicSettings()
77
+{
78
+   main->EnableOutputs(true);
79
+}
80
+
81
 void OBSBasicSettings::SaveCombo(QComboBox *widget, const char *section,
82
        const char *value)
83
 {
84
@@ -931,6 +965,9 @@
85
            "General", "EnableAutoUpdates");
86
    ui->enableAutoUpdates->setChecked(enableAutoUpdates);
87
 #endif
88
+   bool openStatsOnStartup = config_get_bool(main->Config(),
89
+           "General", "OpenStatsOnStartup");
90
+   ui->openStatsOnStartup->setChecked(openStatsOnStartup);
91
 
92
    bool recordWhenStreaming = config_get_bool(GetGlobalConfig(),
93
            "BasicWindow", "RecordWhenStreaming");
94
@@ -1208,12 +1245,21 @@
95
 
96
    ui->baseResolution->clear();
97
 
98
+   auto addRes = [this] (int cx, int cy)
99
+   {
100
+       QString res = ResString(cx, cy).c_str();
101
+       if (ui->baseResolution->findText(res) == -1)
102
+           ui->baseResolution->addItem(res);
103
+   };
104
+
105
    for (QScreen* screen: QGuiApplication::screens()) {
106
        QSize as = screen->size();
107
-       string res = ResString(as.width(), as.height());
108
-       ui->baseResolution->addItem(res.c_str());
109
+       addRes(as.width(), as.height());
110
    }
111
 
112
+   addRes(1920, 1080);
113
+   addRes(1280, 720);
114
+
115
    string outputResString = ResString(out_cx, out_cy);
116
 
117
    ui->baseResolution->lineEdit()->setText(ResString(cx, cy).c_str());
118
@@ -2014,22 +2060,8 @@
119
    LoadRendererList();
120
 
121
 #if defined(_WIN32) || defined(__APPLE__)
122
-   QComboBox *cb = ui->monitoringDevice;
123
-   idx = cb->findData(monDevId);
124
-   if (idx == -1) {
125
-       cb->insertItem(0, monDevName, monDevId);
126
-
127
-       QStandardItemModel *model =
128
-           dynamic_cast<QStandardItemModel*>(cb->model());
129
-       if (!model)
130
-           return;
131
-
132
-       QStandardItem *item = model->item(0);
133
-       item->setFlags(Qt::NoItemFlags);
134
-
135
-       idx = 0;
136
-   }
137
-   cb->setCurrentIndex(idx);
138
+   if (!SetComboByValue(ui->monitoringDevice, monDevId))
139
+       SetInvalidValue(ui->monitoringDevice, monDevName, monDevId);
140
 #endif
141
 
142
    ui->filenameFormatting->setText(filename);
143
@@ -2050,7 +2082,8 @@
144
    SetComboByName(ui->colorSpace, videoColorSpace);
145
    SetComboByValue(ui->colorRange, videoColorRange);
146
 
147
-   SetComboByValue(ui->bindToIP, bindIP);
148
+   if (!SetComboByValue(ui->bindToIP, bindIP))
149
+       SetInvalidValue(ui->bindToIP, bindIP, bindIP);
150
 
151
    if (video_output_active(obs_get_video())) {
152
        ui->advancedVideoContainer->setEnabled(false);
153
@@ -2065,6 +2098,10 @@
154
    ui->resetOSXVSync->setChecked(resetOSXVSync);
155
    ui->resetOSXVSync->setEnabled(disableOSXVSync);
156
 #elif _WIN32
157
+   bool disableAudioDucking = config_get_bool(App()->GlobalConfig(),
158
+           "Audio", "DisableAudioDucking");
159
+   ui->disableAudioDucking->setChecked(disableAudioDucking);
160
+
161
    const char *processPriority = config_get_string(App()->GlobalConfig(),
162
            "General", "ProcessPriority");
163
    bool enableNewSocketLoop = config_get_bool(main->Config(), "Output",
164
@@ -2412,6 +2449,10 @@
165
                "EnableAutoUpdates",
166
                ui->enableAutoUpdates->isChecked());
167
 #endif
168
+   if (WidgetChanged(ui->openStatsOnStartup))
169
+       config_set_bool(main->Config(), "General",
170
+               "OpenStatsOnStartup",
171
+               ui->openStatsOnStartup->isChecked());
172
    if (WidgetChanged(ui->snappingEnabled))
173
        config_set_bool(GetGlobalConfig(), "BasicWindow",
174
                "SnappingEnabled",
175
@@ -2585,6 +2626,16 @@
176
    SaveCombo(ui->monitoringDevice, "Audio", "MonitoringDeviceName");
177
    SaveComboData(ui->monitoringDevice, "Audio", "MonitoringDeviceId");
178
 #endif
179
+
180
+#ifdef _WIN32
181
+   if (WidgetChanged(ui->disableAudioDucking)) {
182
+       bool disable = ui->disableAudioDucking->isChecked();
183
+       config_set_bool(App()->GlobalConfig(),
184
+               "Audio", "DisableAudioDucking", disable);
185
+       DisableAudioDucking(disable);
186
+   }
187
+#endif
188
+
189
    SaveEdit(ui->filenameFormatting, "Output", "FilenameFormatting");
190
    SaveEdit(ui->simpleRBPrefix, "SimpleOutput", "RecRBPrefix");
191
    SaveEdit(ui->simpleRBSuffix, "SimpleOutput", "RecRBSuffix");
192
@@ -2970,7 +3021,7 @@
193
 {
194
    QMessageBox::StandardButton button;
195
 
196
-   button = QMessageBox::question(this,
197
+   button = OBSMessageBox::question(this,
198
            QTStr("Basic.Settings.ConfirmTitle"),
199
            QTStr("Basic.Settings.Confirm"),
200
            QMessageBox::Yes | QMessageBox::No |
201
@@ -3835,10 +3886,9 @@
202
            QString("\n\n") +
203
            SIMPLE_OUTPUT_WARNING("Lossless.Msg");
204
 
205
-       button = QMessageBox::question(this,
206
+       button = OBSMessageBox::question(this,
207
                SIMPLE_OUTPUT_WARNING("Lossless.Title"),
208
-               warningString,
209
-               QMessageBox::Yes | QMessageBox::No);
210
+               warningString);
211
 
212
        if (button == QMessageBox::No) {
213
            QMetaObject::invokeMethod(ui->simpleOutRecQuality,
214
obs-studio-18.0.2.tar.xz/UI/window-basic-settings.hpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-settings.hpp Changed
7
 
1
@@ -303,4 +303,5 @@
2
 
3
 public:
4
    OBSBasicSettings(QWidget *parent);
5
+   ~OBSBasicSettings();
6
 };
7
obs-studio-18.0.2.tar.xz/UI/window-basic-source-select.cpp -> obs-studio-19.0.2.tar.xz/UI/window-basic-source-select.cpp Changed
19
 
1
@@ -154,7 +154,7 @@
2
 
3
    obs_source_t *source = obs_get_source_by_name(name);
4
    if (source) {
5
-       QMessageBox::information(parent,
6
+       OBSMessageBox::information(parent,
7
                QTStr("NameExists.Title"),
8
                QTStr("NameExists.Text"));
9
 
10
@@ -190,7 +190,7 @@
11
        AddExisting(QT_TO_UTF8(item->text()), visible, false);
12
    } else {
13
        if (ui->sourceName->text().isEmpty()) {
14
-           QMessageBox::information(this,
15
+           OBSMessageBox::information(this,
16
                    QTStr("NoNameEntered.Title"),
17
                    QTStr("NoNameEntered.Text"));
18
            return;
19
obs-studio-19.0.2.tar.xz/UI/window-basic-stats.cpp Added
501
 
1
@@ -0,0 +1,499 @@
2
+#include "obs-frontend-api/obs-frontend-api.h"
3
+
4
+#include "window-basic-stats.hpp"
5
+#include "window-basic-main.hpp"
6
+#include "platform.hpp"
7
+#include "obs-app.hpp"
8
+
9
+#include <QDesktopWidget>
10
+#include <QPushButton>
11
+#include <QScrollArea>
12
+#include <QVBoxLayout>
13
+#include <QHBoxLayout>
14
+#include <QGridLayout>
15
+
16
+#include <string>
17
+
18
+#define TIMER_INTERVAL 2000
19
+
20
+static void setThemeID(QWidget *widget, const QString &themeID)
21
+{
22
+   if (widget->property("themeID").toString() != themeID) {
23
+       widget->setProperty("themeID", themeID);
24
+
25
+       /* force style sheet recalculation */
26
+       QString qss = widget->styleSheet();
27
+       widget->setStyleSheet("/* */");
28
+       widget->setStyleSheet(qss);
29
+   }
30
+}
31
+
32
+OBSBasicStats::OBSBasicStats(QWidget *parent)
33
+   : QWidget             (parent),
34
+     cpu_info            (os_cpu_usage_info_start()),
35
+     timer               (this)
36
+{
37
+   QVBoxLayout *mainLayout = new QVBoxLayout();
38
+   QGridLayout *topLayout = new QGridLayout();
39
+   outputLayout = new QGridLayout();
40
+
41
+   int row = 0;
42
+
43
+   auto newStatBare = [&] (QString name, QWidget *label, int col)
44
+   {
45
+       QLabel *typeLabel = new QLabel(name, this);
46
+       topLayout->addWidget(typeLabel, row, col);
47
+       topLayout->addWidget(label, row++, col + 1);
48
+   };
49
+
50
+   auto newStat = [&] (const char *strLoc, QWidget *label, int col)
51
+   {
52
+       std::string str = "Basic.Stats.";
53
+       str += strLoc;
54
+       newStatBare(QTStr(str.c_str()), label, col);
55
+   };
56
+
57
+   /* --------------------------------------------- */
58
+
59
+   cpuUsage = new QLabel(this);
60
+   hddSpace = new QLabel(this);
61
+#ifdef _WIN32
62
+   memUsage = new QLabel(this);
63
+#endif
64
+
65
+   newStat("CPUUsage", cpuUsage, 0);
66
+   newStat("HDDSpaceAvailable", hddSpace, 0);
67
+#ifdef _WIN32
68
+   newStat("MemoryUsage", memUsage, 0);
69
+#endif
70
+
71
+   fps = new QLabel(this);
72
+   renderTime = new QLabel(this);
73
+   skippedFrames = new QLabel(this);
74
+   missedFrames = new QLabel(this);
75
+   row = 0;
76
+
77
+   newStatBare("FPS", fps, 2);
78
+   newStat("AverageTimeToRender", renderTime, 2);
79
+   newStat("MissedFrames", missedFrames, 2);
80
+   newStat("SkippedFrames", skippedFrames, 2);
81
+
82
+   /* --------------------------------------------- */
83
+
84
+   QPushButton *closeButton = new QPushButton(QTStr("Close"));
85
+   QPushButton *resetButton = new QPushButton(QTStr("Reset"));
86
+   QHBoxLayout *buttonLayout = new QHBoxLayout;
87
+   buttonLayout->addStretch();
88
+   buttonLayout->addWidget(resetButton);
89
+   buttonLayout->addWidget(closeButton);
90
+
91
+   /* --------------------------------------------- */
92
+
93
+   int col = 0;
94
+   auto addOutputCol = [&] (const char *loc)
95
+   {
96
+       QLabel *label = new QLabel(QTStr(loc), this);
97
+       label->setStyleSheet("font-weight: bold");
98
+       outputLayout->addWidget(label, 0, col++);
99
+   };
100
+
101
+   addOutputCol("Basic.Settings.Output");
102
+   addOutputCol("Basic.Stats.Status");
103
+   addOutputCol("Basic.Stats.DroppedFrames");
104
+   addOutputCol("Basic.Stats.MegabytesSent");
105
+   addOutputCol("Basic.Stats.Bitrate");
106
+
107
+   /* --------------------------------------------- */
108
+
109
+   AddOutputLabels(QTStr("Basic.Stats.Output.Stream"));
110
+   AddOutputLabels(QTStr("Basic.Stats.Output.Recording"));
111
+
112
+   /* --------------------------------------------- */
113
+
114
+   QVBoxLayout *outputContainerLayout = new QVBoxLayout();
115
+   outputContainerLayout->addLayout(outputLayout);
116
+   outputContainerLayout->addStretch();
117
+
118
+   QWidget *widget = new QWidget(this);
119
+   widget->setLayout(outputContainerLayout);
120
+
121
+   QScrollArea *scrollArea = new QScrollArea(this);
122
+   scrollArea->setWidget(widget);
123
+   scrollArea->setWidgetResizable(true);
124
+
125
+   /* --------------------------------------------- */
126
+
127
+   mainLayout->addLayout(topLayout);
128
+   mainLayout->addWidget(scrollArea);
129
+   mainLayout->addLayout(buttonLayout);
130
+   setLayout(mainLayout);
131
+
132
+   /* --------------------------------------------- */
133
+
134
+   connect(closeButton, &QPushButton::clicked, [this] () {close();});
135
+   connect(resetButton, &QPushButton::clicked, [this] () {Reset();});
136
+
137
+   installEventFilter(CreateShortcutFilter());
138
+
139
+   resize(800, 280);
140
+   setWindowFlags(Qt::Window |
141
+                  Qt::WindowMinimizeButtonHint |
142
+                  Qt::WindowCloseButtonHint);
143
+   setWindowTitle(QTStr("Basic.Stats"));
144
+   setWindowModality(Qt::NonModal);
145
+   setAttribute(Qt::WA_DeleteOnClose, true);
146
+
147
+   QObject::connect(&timer, &QTimer::timeout, this, &OBSBasicStats::Update);
148
+   timer.setInterval(TIMER_INTERVAL);
149
+   timer.start();
150
+   Update();
151
+
152
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
153
+
154
+   const char *geometry = config_get_string(main->Config(),
155
+           "Stats", "geometry");
156
+   if (geometry != NULL) {
157
+       QByteArray byteArray = QByteArray::fromBase64(
158
+               QByteArray(geometry));
159
+       restoreGeometry(byteArray);
160
+
161
+       QRect windowGeometry = normalGeometry();
162
+       if (!WindowPositionValid(windowGeometry)) {
163
+           QRect rect = App()->desktop()->geometry();
164
+           setGeometry(QStyle::alignedRect(
165
+                       Qt::LeftToRight,
166
+                       Qt::AlignCenter,
167
+                       size(), rect));
168
+       }
169
+   }
170
+}
171
+
172
+void OBSBasicStats::closeEvent(QCloseEvent *event)
173
+{
174
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
175
+   if (isVisible()) {
176
+       config_set_string(main->Config(),
177
+               "Stats", "geometry",
178
+               saveGeometry().toBase64().constData());
179
+       config_save_safe(main->Config(), "tmp", nullptr);
180
+   }
181
+
182
+   QWidget::closeEvent(event);
183
+}
184
+
185
+OBSBasicStats::~OBSBasicStats()
186
+{
187
+   os_cpu_usage_info_destroy(cpu_info);
188
+}
189
+
190
+void OBSBasicStats::AddOutputLabels(QString name)
191
+{
192
+   OutputLabels ol;
193
+   ol.name = new QLabel(name, this);
194
+   ol.status = new QLabel(this);
195
+   ol.droppedFrames = new QLabel(this);
196
+   ol.megabytesSent = new QLabel(this);
197
+   ol.bitrate = new QLabel(this);
198
+
199
+   int newPointSize = ol.status->font().pointSize();
200
+   newPointSize *= 13;
201
+   newPointSize /= 10;
202
+   QString qss =
203
+       QString("font-size: %1pt").arg(QString::number(newPointSize));
204
+   ol.status->setStyleSheet(qss);
205
+
206
+   int col = 0;
207
+   int row = outputLabels.size() + 1;
208
+   outputLayout->addWidget(ol.name, row, col++);
209
+   outputLayout->addWidget(ol.status, row, col++);
210
+   outputLayout->addWidget(ol.droppedFrames, row, col++);
211
+   outputLayout->addWidget(ol.megabytesSent, row, col++);
212
+   outputLayout->addWidget(ol.bitrate, row, col++);
213
+   outputLabels.push_back(ol);
214
+}
215
+
216
+static uint32_t first_encoded = 0xFFFFFFFF;
217
+static uint32_t first_skipped = 0xFFFFFFFF;
218
+static uint32_t first_rendered = 0xFFFFFFFF;
219
+static uint32_t first_lagged = 0xFFFFFFFF;
220
+
221
+void OBSBasicStats::Update()
222
+{
223
+   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
224
+
225
+   /* TODO: Un-hardcode */
226
+
227
+   struct obs_video_info ovi = {};
228
+   obs_get_video_info(&ovi);
229
+
230
+   OBSOutput strOutput = obs_frontend_get_streaming_output();
231
+   OBSOutput recOutput = obs_frontend_get_recording_output();
232
+   obs_output_release(strOutput);
233
+   obs_output_release(recOutput);
234
+
235
+   if (!strOutput || !recOutput)
236
+       return;
237
+
238
+   /* ------------------------------------------- */
239
+   /* general usage                               */
240
+
241
+   double curFPS = obs_get_active_fps();
242
+   double obsFPS = (double)ovi.fps_num / (double)ovi.fps_den;
243
+
244
+   QString str = QString::number(curFPS, 'f', 2);
245
+   fps->setText(str);
246
+
247
+   if (curFPS < (obsFPS * 0.8))
248
+       setThemeID(fps, "error");
249
+   else if (curFPS < (obsFPS * 0.95))
250
+       setThemeID(fps, "warning");
251
+   else
252
+       setThemeID(fps, "");
253
+
254
+   /* ------------------ */
255
+
256
+   double usage = os_cpu_usage_info_query(cpu_info);
257
+   str = QString::number(usage, 'g', 2) + QStringLiteral("%");
258
+   cpuUsage->setText(str);
259
+
260
+   /* ------------------ */
261
+
262
+   const char *mode = config_get_string(main->Config(), "Output", "Mode");
263
+   const char *path = strcmp(mode, "Advanced") ?
264
+       config_get_string(main->Config(), "SimpleOutput", "FilePath") :
265
+       config_get_string(main->Config(), "AdvOut", "RecFilePath");
266
+
267
+#define MBYTE (1024ULL * 1024ULL)
268
+#define GBYTE (1024ULL * 1024ULL * 1024ULL)
269
+#define TBYTE (1024ULL * 1024ULL * 1024ULL * 1024ULL)
270
+   uint64_t num_bytes = os_get_free_disk_space(path);
271
+   QString abrv = QStringLiteral(" MB");
272
+   long double num;
273
+
274
+   num = (long double)num_bytes / (1024.0l * 1024.0l);
275
+   if (num_bytes > TBYTE) {
276
+       num /= 1024.0l * 1024.0l;
277
+       abrv = QStringLiteral(" TB");
278
+   } else if (num_bytes > GBYTE) {
279
+       num /= 1024.0l;
280
+       abrv = QStringLiteral(" GB");
281
+   }
282
+
283
+   str = QString::number(num, 'f', 1) + abrv;
284
+   hddSpace->setText(str);
285
+
286
+   if (num_bytes < GBYTE)
287
+       setThemeID(hddSpace, "error");
288
+   else if (num_bytes < (5 * GBYTE))
289
+       setThemeID(hddSpace, "warning");
290
+   else
291
+       setThemeID(hddSpace, "");
292
+
293
+   /* ------------------ */
294
+
295
+#ifdef _WIN32
296
+   num = (long double)CurrentMemoryUsage() / (1024.0l * 1024.0l);
297
+
298
+   str = QString::number(num, 'f', 1) + QStringLiteral(" MB");
299
+   memUsage->setText(str);
300
+#endif
301
+
302
+   /* ------------------ */
303
+
304
+   num = (long double)obs_get_average_frame_time_ns() / 1000000.0l;
305
+
306
+   str = QString::number(num, 'f', 1) + QStringLiteral(" ms");
307
+   renderTime->setText(str);
308
+
309
+   long double fpsFrameTime =
310
+       (long double)ovi.fps_den * 1000.0l / (long double)ovi.fps_num;
311
+
312
+   if (num > fpsFrameTime)
313
+       setThemeID(renderTime, "error");
314
+   else if (num > fpsFrameTime * 0.75l)
315
+       setThemeID(renderTime, "warning");
316
+   else
317
+       setThemeID(renderTime, "");
318
+
319
+   /* ------------------ */
320
+
321
+   video_t *video = obs_get_video();
322
+   uint32_t total_encoded = video_output_get_total_frames(video);
323
+   uint32_t total_skipped = video_output_get_skipped_frames(video);
324
+
325
+   if (total_encoded < first_encoded || total_skipped < first_skipped) {
326
+       first_encoded = total_encoded;
327
+       first_skipped = total_skipped;
328
+   }
329
+   total_encoded -= first_encoded;
330
+   total_skipped -= first_skipped;
331
+
332
+   num = total_encoded
333
+       ? (long double)total_skipped / (long double)total_encoded
334
+       : 0.0l;
335
+   num *= 100.0l;
336
+
337
+   str = QString("%1 / %2 (%3%)").arg(
338
+           QString::number(total_skipped),
339
+           QString::number(total_encoded),
340
+           QString::number(num, 'f', 1));
341
+   skippedFrames->setText(str);
342
+
343
+   if (num > 5.0l)
344
+       setThemeID(skippedFrames, "error");
345
+   else if (num > 1.0l)
346
+       setThemeID(skippedFrames, "warning");
347
+   else
348
+       setThemeID(skippedFrames, "");
349
+
350
+   /* ------------------ */
351
+
352
+   uint32_t total_rendered = obs_get_total_frames();
353
+   uint32_t total_lagged   = obs_get_lagged_frames();
354
+
355
+   if (total_rendered < first_rendered || total_lagged < first_lagged) {
356
+       first_rendered = total_rendered;
357
+       first_lagged   = total_lagged;
358
+   }
359
+   total_rendered -= first_rendered;
360
+   total_lagged   -= first_lagged;
361
+
362
+   num = total_rendered
363
+       ? (long double)total_lagged / (long double)total_rendered
364
+       : 0.0l;
365
+   num *= 100.0l;
366
+
367
+   str = QString("%1 / %2 (%3%)").arg(
368
+           QString::number(total_lagged),
369
+           QString::number(total_rendered),
370
+           QString::number(num, 'f', 1));
371
+   missedFrames->setText(str);
372
+
373
+   if (num > 5.0l)
374
+       setThemeID(missedFrames, "error");
375
+   else if (num > 1.0l)
376
+       setThemeID(missedFrames, "warning");
377
+   else
378
+       setThemeID(missedFrames, "");
379
+
380
+   /* ------------------------------------------- */
381
+   /* recording/streaming stats                   */
382
+
383
+   outputLabels[0].Update(strOutput);
384
+   outputLabels[1].Update(recOutput);
385
+}
386
+
387
+void OBSBasicStats::Reset()
388
+{
389
+   timer.start();
390
+
391
+   first_encoded  = 0xFFFFFFFF;
392
+   first_skipped  = 0xFFFFFFFF;
393
+   first_rendered = 0xFFFFFFFF;
394
+   first_lagged   = 0xFFFFFFFF;
395
+
396
+   OBSOutput strOutput = obs_frontend_get_streaming_output();
397
+   OBSOutput recOutput = obs_frontend_get_recording_output();
398
+   obs_output_release(strOutput);
399
+   obs_output_release(recOutput);
400
+
401
+   outputLabels[0].Reset(strOutput);
402
+   outputLabels[1].Reset(recOutput);
403
+   Update();
404
+}
405
+
406
+void OBSBasicStats::OutputLabels::Update(obs_output_t *output)
407
+{
408
+   if (!output)
409
+       return;
410
+
411
+   const char *id = obs_obj_get_id(output);
412
+   bool rec = strcmp(id, "rtmp_output") != 0;
413
+
414
+   uint64_t totalBytes = obs_output_get_total_bytes(output);
415
+   uint64_t curTime = os_gettime_ns();
416
+   uint64_t bytesSent = totalBytes;
417
+
418
+   if (bytesSent < lastBytesSent)
419
+       bytesSent = 0;
420
+   if (bytesSent == 0)
421
+       lastBytesSent = 0;
422
+
423
+   uint64_t bitsBetween = (bytesSent - lastBytesSent) * 8;
424
+   long double timePassed = (long double)(curTime - lastBytesSentTime) /
425
+       1000000000.0l;
426
+   long double kbps = (long double)bitsBetween /
427
+       timePassed / 1000.0l;
428
+
429
+   if (timePassed < 0.01l)
430
+       kbps = 0.0l;
431
+
432
+   QString str = QTStr("Basic.Stats.Status.Inactive");
433
+   QString themeID;
434
+   if (rec) {
435
+       if (obs_output_active(output))
436
+           str = QTStr("Basic.Stats.Status.Recording");
437
+   } else {
438
+       if (obs_output_active(output)) {
439
+           if (obs_output_reconnecting(output)) {
440
+               str = QTStr("Basic.Stats.Status.Reconnecting");
441
+               themeID = "error";
442
+           } else {
443
+               str = QTStr("Basic.Stats.Status.Live");
444
+               themeID = "good";
445
+           }
446
+       }
447
+   }
448
+
449
+   status->setText(str);
450
+   setThemeID(status, themeID);
451
+
452
+   long double num = (long double)totalBytes / (1024.0l * 1024.0l);
453
+
454
+   megabytesSent->setText(
455
+           QString("%1 MB").arg(QString::number(num, 'f', 1)));
456
+   bitrate->setText(
457
+           QString("%1 kb/s").arg(QString::number(kbps, 'f', 0)));
458
+
459
+   if (!rec) {
460
+       int total = obs_output_get_total_frames(output);
461
+       int dropped = obs_output_get_frames_dropped(output);
462
+
463
+       if (total < first_total || dropped < first_dropped) {
464
+           first_total   = 0;
465
+           first_dropped = 0;
466
+       }
467
+
468
+       total   -= first_total;
469
+       dropped -= first_dropped;
470
+
471
+       num = total
472
+           ? (long double)dropped / (long double)total * 100.0l
473
+           : 0.0l;
474
+
475
+       str = QString("%1 / %2 (%3%)").arg(
476
+               QString::number(dropped),
477
+               QString::number(total),
478
+               QString::number(num, 'f', 1));
479
+       droppedFrames->setText(str);
480
+
481
+       if (num > 5.0l)
482
+           setThemeID(droppedFrames, "error");
483
+       else if (num > 1.0l)
484
+           setThemeID(droppedFrames, "warning");
485
+       else
486
+           setThemeID(droppedFrames, "");
487
+   }
488
+
489
+   lastBytesSent     = bytesSent;
490
+   lastBytesSentTime = curTime;
491
+}
492
+
493
+void OBSBasicStats::OutputLabels::Reset(obs_output_t *output)
494
+{
495
+   if (!output)
496
+       return;
497
+
498
+   first_total   = obs_output_get_total_frames(output);
499
+   first_dropped = obs_output_get_frames_dropped(output);
500
+}
501
obs-studio-19.0.2.tar.xz/UI/window-basic-stats.hpp Added
62
 
1
@@ -0,0 +1,60 @@
2
+#pragma once
3
+
4
+#include <obs.hpp>
5
+#include <util/platform.h>
6
+#include <QPointer>
7
+#include <QWidget>
8
+#include <QTimer>
9
+#include <QLabel>
10
+#include <QList>
11
+
12
+class QGridLayout;
13
+class QCloseEvent;
14
+
15
+class OBSBasicStats : public QWidget {
16
+   Q_OBJECT
17
+
18
+   QLabel *fps = nullptr;
19
+   QLabel *cpuUsage = nullptr;
20
+   QLabel *hddSpace = nullptr;
21
+   QLabel *memUsage = nullptr;
22
+
23
+   QLabel *renderTime = nullptr;
24
+   QLabel *skippedFrames = nullptr;
25
+   QLabel *missedFrames = nullptr;
26
+
27
+   QGridLayout *outputLayout = nullptr;
28
+
29
+   os_cpu_usage_info_t *cpu_info = nullptr;
30
+
31
+   QTimer timer;
32
+
33
+   struct OutputLabels {
34
+       QPointer<QLabel> name;
35
+       QPointer<QLabel> status;
36
+       QPointer<QLabel> droppedFrames;
37
+       QPointer<QLabel> megabytesSent;
38
+       QPointer<QLabel> bitrate;
39
+
40
+       uint64_t lastBytesSent = 0;
41
+       uint64_t lastBytesSentTime = 0;
42
+
43
+       int first_total = 0;
44
+       int first_dropped = 0;
45
+
46
+       void Update(obs_output_t *output);
47
+       void Reset(obs_output_t *output);
48
+   };
49
+
50
+   QList<OutputLabels> outputLabels;
51
+
52
+   void AddOutputLabels(QString name);
53
+   void Update();
54
+   void Reset();
55
+
56
+   virtual void closeEvent(QCloseEvent *event) override;
57
+
58
+public:
59
+   OBSBasicStats(QWidget *parent = nullptr);
60
+   ~OBSBasicStats();
61
+};
62
obs-studio-18.0.2.tar.xz/UI/window-projector.cpp -> obs-studio-19.0.2.tar.xz/UI/window-projector.cpp Changed
99
 
1
@@ -9,14 +9,18 @@
2
 #include "platform.hpp"
3
 #include "obs-app.hpp"
4
 
5
-OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_)
6
+OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, bool window)
7
    : OBSQTDisplay                 (widget,
8
-                                   Qt::Window | Qt::FramelessWindowHint |
9
-                   Qt::X11BypassWindowManagerHint),
10
+                                   Qt::Window),
11
      source                       (source_),
12
      removedSignal                (obs_source_get_signal_handler(source),
13
                                    "remove", OBSSourceRemoved, this)
14
 {
15
+   if (!window) {
16
+       setWindowFlags(Qt::FramelessWindowHint |
17
+               Qt::X11BypassWindowManagerHint);
18
+   }
19
+
20
    setAttribute(Qt::WA_DeleteOnClose, true);
21
 
22
    //disable application quit when last window closed
23
@@ -34,13 +38,14 @@
24
 
25
    bool hideCursor = config_get_bool(GetGlobalConfig(),
26
            "BasicWindow", "HideProjectorCursor");
27
-   if (hideCursor) {
28
+   if (hideCursor && !window) {
29
        QPixmap empty(16, 16);
30
        empty.fill(Qt::transparent);
31
        setCursor(QCursor(empty));
32
    }
33
 
34
    App()->IncrementSleepInhibition();
35
+   resize(480, 270);
36
 }
37
 
38
 OBSProjector::~OBSProjector()
39
@@ -50,29 +55,36 @@
40
    App()->DecrementSleepInhibition();
41
 }
42
 
43
-void OBSProjector::Init(int monitor)
44
+void OBSProjector::Init(int monitor, bool window, QString title)
45
 {
46
    QScreen *screen = QGuiApplication::screens()[monitor];
47
 
48
-   setGeometry(screen->geometry());
49
+   if (!window)
50
+       setGeometry(screen->geometry());
51
 
52
    bool alwaysOnTop = config_get_bool(GetGlobalConfig(),
53
            "BasicWindow", "ProjectorAlwaysOnTop");
54
-   if (alwaysOnTop)
55
+   if (alwaysOnTop && !window)
56
        SetAlwaysOnTop(this, true);
57
 
58
+   if (window)
59
+       setWindowTitle(title);
60
+
61
    show();
62
 
63
    if (source)
64
        obs_source_inc_showing(source);
65
 
66
-   QAction *action = new QAction(this);
67
-   action->setShortcut(Qt::Key_Escape);
68
-   addAction(action);
69
-
70
-   connect(action, SIGNAL(triggered()), this, SLOT(EscapeTriggered()));
71
+   if (!window) {
72
+       QAction *action = new QAction(this);
73
+       action->setShortcut(Qt::Key_Escape);
74
+       addAction(action);
75
+       connect(action, SIGNAL(triggered()), this,
76
+               SLOT(EscapeTriggered()));
77
+   }
78
 
79
    savedMonitor = monitor;
80
+   isWindow = window;
81
 }
82
 
83
 void OBSProjector::OBSRender(void *data, uint32_t cx, uint32_t cy)
84
@@ -136,8 +148,12 @@
85
 
86
 void OBSProjector::EscapeTriggered()
87
 {
88
-   OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
89
-   main->RemoveSavedProjectors(savedMonitor);
90
+   if (!isWindow) {
91
+       OBSBasic *main =
92
+           reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
93
+
94
+       main->RemoveSavedProjectors(savedMonitor);
95
+   }
96
 
97
    deleteLater();
98
 }
99
obs-studio-18.0.2.tar.xz/UI/window-projector.hpp -> obs-studio-19.0.2.tar.xz/UI/window-projector.hpp Changed
18
 
1
@@ -19,13 +19,14 @@
2
    void mousePressEvent(QMouseEvent *event) override;
3
 
4
    int savedMonitor = 0;
5
+   bool isWindow = false;
6
 
7
 private slots:
8
    void EscapeTriggered();
9
 
10
 public:
11
-   OBSProjector(QWidget *parent, obs_source_t *source);
12
+   OBSProjector(QWidget *parent, obs_source_t *source, bool window);
13
    ~OBSProjector();
14
 
15
-   void Init(int monitor);
16
+   void Init(int monitor, bool window, QString title);
17
 };
18
obs-studio-18.0.2.tar.xz/UI/window-remux.cpp -> obs-studio-19.0.2.tar.xz/UI/window-remux.cpp Changed
22
 
1
@@ -157,9 +157,8 @@
2
 void OBSRemux::Remux()
3
 {
4
    if (QFileInfo::exists(ui->targetFile->text()))
5
-       if (QMessageBox::question(this, QTStr("Remux.FileExistsTitle"),
6
-                   QTStr("Remux.FileExists"),
7
-                   QMessageBox::Yes | QMessageBox::No) !=
8
+       if (OBSMessageBox::question(this, QTStr("Remux.FileExistsTitle"),
9
+                   QTStr("Remux.FileExists")) !=
10
                QMessageBox::Yes)
11
            return;
12
 
13
@@ -201,7 +200,7 @@
14
 
15
 void OBSRemux::remuxFinished(bool success)
16
 {
17
-   QMessageBox::information(this, QTStr("Remux.FinishedTitle"),
18
+   OBSMessageBox::information(this, QTStr("Remux.FinishedTitle"),
19
            success ?
20
            QTStr("Remux.Finished") : QTStr("Remux.FinishedError"));
21
 
22
obs-studio-18.0.2.tar.xz/deps/media-playback/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/deps/media-playback/CMakeLists.txt Changed
17
 
1
@@ -21,6 +21,15 @@
2
    ${media-playback_HEADERS}
3
    ${media-playback_SOURCES}
4
    )
5
+
6
+if(NOT MSVC)
7
+   target_compile_options(media-playback
8
+       PUBLIC
9
+           -mmmx
10
+           -msse
11
+           -msse2)
12
+endif()
13
+
14
 target_include_directories(media-playback
15
    PUBLIC .
16
    )
17
obs-studio-18.0.2.tar.xz/deps/media-playback/media-playback/decode.c -> obs-studio-19.0.2.tar.xz/deps/media-playback/media-playback/decode.c Changed
111
 
1
@@ -204,6 +204,53 @@
2
    }
3
 }
4
 
5
+static int decode_packet(struct mp_decode *d, int *got_frame)
6
+{
7
+   int ret;
8
+   *got_frame = 0;
9
+
10
+#ifdef USE_NEW_FFMPEG_DECODE_API
11
+   ret = avcodec_receive_frame(d->decoder, d->frame);
12
+   if (ret != 0 && ret != AVERROR(EAGAIN)) {
13
+       if (ret == AVERROR_EOF)
14
+           ret = 0;
15
+       return ret;
16
+   }
17
+
18
+   if (ret != 0) {
19
+       ret = avcodec_send_packet(d->decoder, &d->pkt);
20
+       if (ret != 0 && ret != AVERROR(EAGAIN)) {
21
+           if (ret == AVERROR_EOF)
22
+               ret = 0;
23
+           return ret;
24
+       }
25
+
26
+       ret = avcodec_receive_frame(d->decoder, d->frame);
27
+       if (ret != 0 && ret != AVERROR(EAGAIN)) {
28
+           if (ret == AVERROR_EOF)
29
+               ret = 0;
30
+           return ret;
31
+       }
32
+
33
+       *got_frame = (ret == 0);
34
+       ret = d->pkt.size;
35
+   } else {
36
+       ret = 0;
37
+       *got_frame = 1;
38
+   }
39
+
40
+#else
41
+   if (d->audio) {
42
+       ret = avcodec_decode_audio4(d->decoder,
43
+               d->frame, got_frame, &d->pkt);
44
+   } else {
45
+       ret = avcodec_decode_video2(d->decoder,
46
+               d->frame, got_frame, &d->pkt);
47
+   }
48
+#endif
49
+   return ret;
50
+}
51
+
52
 bool mp_decode_next(struct mp_decode *d)
53
 {
54
    bool eof = d->m->eof;
55
@@ -232,32 +279,29 @@
56
            }
57
        }
58
 
59
-       if (d->audio) {
60
-           ret = avcodec_decode_audio4(d->decoder,
61
-                   d->frame, &got_frame, &d->pkt);
62
-       } else {
63
-           if (d->m->is_network && !d->got_first_keyframe) {
64
-               if (d->pkt.flags & AV_PKT_FLAG_KEY) {
65
-                   d->got_first_keyframe = true;
66
-               } else {
67
-                   av_packet_unref(&d->orig_pkt);
68
-                   av_init_packet(&d->orig_pkt);
69
-                   av_init_packet(&d->pkt);
70
-                   d->packet_pending = false;
71
-                   return true;
72
-               }
73
+       if (!d->audio && d->m->is_network && !d->got_first_keyframe) {
74
+           if (d->pkt.flags & AV_PKT_FLAG_KEY) {
75
+               d->got_first_keyframe = true;
76
+           } else {
77
+               av_packet_unref(&d->orig_pkt);
78
+               av_init_packet(&d->orig_pkt);
79
+               av_init_packet(&d->pkt);
80
+               d->packet_pending = false;
81
+               return true;
82
            }
83
-
84
-           ret = avcodec_decode_video2(d->decoder,
85
-                   d->frame, &got_frame, &d->pkt);
86
        }
87
+
88
+       ret = decode_packet(d, &got_frame);
89
+
90
        if (!got_frame && ret == 0) {
91
            d->eof = true;
92
            return true;
93
        }
94
        if (ret < 0) {
95
+#ifdef DETAILED_DEBUG_INFO
96
            blog(LOG_DEBUG, "MP: decode failed: %s",
97
                    av_err2str(ret));
98
+#endif
99
 
100
            if (d->packet_pending) {
101
                av_packet_unref(&d->orig_pkt);
102
@@ -276,7 +320,7 @@
103
                d->pkt.size -= ret;
104
            }
105
 
106
-           if (d->pkt.size == 0) {
107
+           if (d->pkt.size <= 0) {
108
                av_packet_unref(&d->orig_pkt);
109
                av_init_packet(&d->orig_pkt);
110
                av_init_packet(&d->pkt);
111
obs-studio-18.0.2.tar.xz/deps/media-playback/media-playback/media.c -> obs-studio-19.0.2.tar.xz/deps/media-playback/media-playback/media.c Changed
170
 
1
@@ -289,6 +289,7 @@
2
        return;
3
    }
4
 
5
+   bool flip = false;
6
    if (m->swscale) {
7
        int ret = sws_scale(m->swscale,
8
                (const uint8_t *const *)f->data, f->linesize,
9
@@ -297,17 +298,24 @@
10
        if (ret < 0)
11
            return;
12
 
13
+       flip = m->scale_linesizes[0] < 0 && m->scale_linesizes[1] == 0;
14
        for (size_t i = 0; i < 4; i++) {
15
            frame->data[i] = m->scale_pic[i];
16
-           frame->linesize[i] = m->scale_linesizes[i];
17
+           frame->linesize[i] = abs(m->scale_linesizes[i]);
18
        }
19
+
20
    } else {
21
+       flip = f->linesize[0] < 0 && f->linesize[1] == 0;
22
+
23
        for (size_t i = 0; i < MAX_AV_PLANES; i++) {
24
            frame->data[i] = f->data[i];
25
-           frame->linesize[i] = f->linesize[i];
26
+           frame->linesize[i] = abs(f->linesize[i]);
27
        }
28
    }
29
 
30
+   if (flip)
31
+       frame->data[0] -= frame->linesize[0] * (f->height - 1);
32
+
33
    new_format = convert_pixel_format(m->scale_format);
34
    new_space  = convert_color_space(f->colorspace);
35
    new_range  = m->force_range == VIDEO_RANGE_DEFAULT
36
@@ -346,7 +354,7 @@
37
        m->play_sys_ts - base_sys_ts;
38
    frame->width = f->width;
39
    frame->height = f->height;
40
-   frame->flip = false;
41
+   frame->flip = flip;
42
 
43
    if (preload)
44
        m->v_preload_cb(m->opaque, frame);
45
@@ -391,10 +399,13 @@
46
        ? av_rescale_q(seek_pos, AV_TIME_BASE_Q, stream->time_base)
47
        : seek_pos;
48
 
49
-   int ret = av_seek_frame(m->fmt, 0, seek_target, seek_flags);
50
-   if (ret < 0) {
51
-       blog(LOG_WARNING, "MP: Failed to seek: %s", av_err2str(ret));
52
-       return false;
53
+   if (!m->is_network) {
54
+       int ret = av_seek_frame(m->fmt, 0, seek_target, seek_flags);
55
+       if (ret < 0) {
56
+           blog(LOG_WARNING, "MP: Failed to seek: %s",
57
+                   av_err2str(ret));
58
+           return false;
59
+       }
60
    }
61
 
62
    if (m->has_video && !m->is_network)
63
@@ -467,12 +478,51 @@
64
    return eof;
65
 }
66
 
67
+static bool init_avformat(mp_media_t *m)
68
+{
69
+   AVInputFormat *format = NULL;
70
+
71
+   if (m->format_name && *m->format_name) {
72
+       format = av_find_input_format(m->format_name);
73
+       if (!format)
74
+           blog(LOG_INFO, "MP: Unable to find input format for "
75
+                   "'%s'", m->path);
76
+   }
77
+
78
+   int ret = avformat_open_input(&m->fmt, m->path, format, NULL);
79
+   if (ret < 0) {
80
+       blog(LOG_WARNING, "MP: Failed to open media: '%s'", m->path);
81
+       return false;
82
+   }
83
+
84
+   if (avformat_find_stream_info(m->fmt, NULL) < 0) {
85
+       blog(LOG_WARNING, "MP: Failed to find stream info for '%s'",
86
+               m->path);
87
+       return false;
88
+   }
89
+
90
+   m->has_video = mp_decode_init(m, AVMEDIA_TYPE_VIDEO, m->hw);
91
+   m->has_audio = mp_decode_init(m, AVMEDIA_TYPE_AUDIO, m->hw);
92
+
93
+   if (!m->has_video && !m->has_audio) {
94
+       blog(LOG_WARNING, "MP: Could not initialize audio or video: "
95
+               "'%s'", m->path);
96
+       return false;
97
+   }
98
+
99
+   return true;
100
+}
101
+
102
 static void *mp_media_thread(void *opaque)
103
 {
104
    mp_media_t *m = opaque;
105
 
106
    os_set_thread_name("mp_media_thread");
107
 
108
+   if (!init_avformat(m)) {
109
+       return NULL;
110
+   }
111
+
112
    mp_media_reset(m);
113
 
114
    for (;;) {
115
@@ -530,8 +580,6 @@
116
        const char *format_name,
117
        bool hw)
118
 {
119
-   AVInputFormat *format = NULL;
120
-
121
    if (pthread_mutex_init(&m->mutex, NULL) != 0) {
122
        blog(LOG_WARNING, "MP: Failed to init mutex");
123
        return false;
124
@@ -541,33 +589,9 @@
125
        return false;
126
    }
127
 
128
-   if (format_name && *format_name) {
129
-       format = av_find_input_format(format_name);
130
-       if (!format)
131
-           blog(LOG_INFO, "MP: Unable to find input format for "
132
-                   "'%s'", path);
133
-   }
134
-
135
-   int ret = avformat_open_input(&m->fmt, path, format, NULL);
136
-   if (ret < 0) {
137
-       blog(LOG_WARNING, "MP: Failed to open media: '%s'", path);
138
-       return false;
139
-   }
140
-
141
-   if (avformat_find_stream_info(m->fmt, NULL) < 0) {
142
-       blog(LOG_WARNING, "MP: Failed to find stream info for '%s'",
143
-               path);
144
-       return false;
145
-   }
146
-
147
-   m->has_video = mp_decode_init(m, AVMEDIA_TYPE_VIDEO, hw);
148
-   m->has_audio = mp_decode_init(m, AVMEDIA_TYPE_AUDIO, hw);
149
-
150
-   if (!m->has_video && !m->has_audio) {
151
-       blog(LOG_WARNING, "MP: Could not initialize audio or video: "
152
-               "'%s'", path);
153
-       return false;
154
-   }
155
+   m->path = path ? bstrdup(path) : NULL;
156
+   m->format_name = format_name ? bstrdup(format_name) : NULL;
157
+   m->hw = hw;
158
 
159
    if (pthread_create(&m->thread, NULL, mp_media_thread, m) != 0) {
160
        blog(LOG_WARNING, "MP: Could not create media thread");
161
@@ -647,6 +671,8 @@
162
    avformat_close_input(&media->fmt);
163
    sws_freeContext(media->swscale);
164
    av_freep(&media->scale_pic[0]);
165
+   bfree(media->path);
166
+   bfree(media->format_name);
167
    memset(media, 0, sizeof(*media));
168
    pthread_mutex_init_value(&media->mutex);
169
 }
170
obs-studio-18.0.2.tar.xz/deps/media-playback/media-playback/media.h -> obs-studio-19.0.2.tar.xz/deps/media-playback/media-playback/media.h Changed
32
 
1
@@ -51,6 +51,9 @@
2
    mp_audio_cb a_cb;
3
    void *opaque;
4
 
5
+   char *path;
6
+   char *format_name;
7
+
8
    enum AVPixelFormat scale_format;
9
    struct SwsContext *swscale;
10
    int scale_linesizes[4];
11
@@ -63,6 +66,7 @@
12
    bool has_audio;
13
    bool is_file;
14
    bool eof;
15
+   bool hw;
16
 
17
    struct obs_source_frame obsframe;
18
    enum video_colorspace cur_space;
19
@@ -104,6 +108,12 @@
20
 extern void mp_media_play(mp_media_t *media, bool loop);
21
 extern void mp_media_stop(mp_media_t *media);
22
 
23
+/* #define DETAILED_DEBUG_INFO */
24
+
25
+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
26
+#define USE_NEW_FFMPEG_DECODE_API
27
+#endif
28
+
29
 #ifdef __cplusplus
30
 }
31
 #endif
32
obs-studio-18.0.2.tar.xz/docs/doxygen/obs.png -> obs-studio-19.0.2.tar.xz/docs/doxygen/obs.png Changed
obs-studio-18.0.2.tar.xz/libobs-d3d11/d3d11-shader.cpp -> obs-studio-19.0.2.tar.xz/libobs-d3d11/d3d11-shader.cpp Changed
10
 
1
@@ -287,6 +287,8 @@
2
 
3
 void gs_shader_destroy(gs_shader_t *shader)
4
 {
5
+   if (shader && shader->device->lastVertexShader == shader)
6
+       shader->device->lastVertexShader = nullptr;
7
    delete shader;
8
 }
9
 
10
obs-studio-18.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-19.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.cpp Changed
91
 
1
@@ -929,33 +929,40 @@
2
    return texture->type;
3
 }
4
 
5
-void device_load_vertexbuffer(gs_device_t *device, gs_vertbuffer_t *vertbuffer)
6
+void gs_device::LoadVertexBufferData()
7
 {
8
-   if (device->curVertexBuffer == vertbuffer)
9
-       return;
10
-
11
-   device->curVertexBuffer = vertbuffer;
12
-
13
-   if (!device->curVertexShader)
14
+   if (curVertexBuffer == lastVertexBuffer &&
15
+       curVertexShader == lastVertexShader)
16
        return;
17
 
18
    vector<ID3D11Buffer*> buffers;
19
    vector<uint32_t> strides;
20
    vector<uint32_t> offsets;
21
 
22
-   if (vertbuffer) {
23
-       vertbuffer->MakeBufferList(device->curVertexShader,
24
+   if (curVertexBuffer && curVertexShader) {
25
+       curVertexBuffer->MakeBufferList(curVertexShader,
26
                buffers, strides);
27
    } else {
28
-       size_t buffersToClear =
29
-           device->curVertexShader->NumBuffersExpected();
30
+       size_t buffersToClear = curVertexShader
31
+           ? curVertexShader->NumBuffersExpected() : 0;
32
        buffers.resize(buffersToClear);
33
        strides.resize(buffersToClear);
34
    }
35
 
36
    offsets.resize(buffers.size());
37
-   device->context->IASetVertexBuffers(0, (UINT)buffers.size(),
38
+   context->IASetVertexBuffers(0, (UINT)buffers.size(),
39
            buffers.data(), strides.data(), offsets.data());
40
+
41
+   lastVertexBuffer = curVertexBuffer;
42
+   lastVertexShader = curVertexShader;
43
+}
44
+
45
+void device_load_vertexbuffer(gs_device_t *device, gs_vertbuffer_t *vertbuffer)
46
+{
47
+   if (device->curVertexBuffer == vertbuffer)
48
+       return;
49
+
50
+   device->curVertexBuffer = vertbuffer;
51
 }
52
 
53
 void device_load_indexbuffer(gs_device_t *device, gs_indexbuffer_t *indexbuffer)
54
@@ -1032,9 +1039,6 @@
55
            return;
56
        }
57
 
58
-       if (curVB)
59
-           device_load_vertexbuffer(device, NULL);
60
-
61
        shader    = vs->shader;
62
        layout    = vs->layout;
63
        constants = vs->constants;
64
@@ -1044,9 +1048,6 @@
65
    device->context->VSSetShader(shader, NULL, 0);
66
    device->context->IASetInputLayout(layout);
67
    device->context->VSSetConstantBuffers(0, 1, &constants);
68
-
69
-   if (vertshader && curVB)
70
-       device_load_vertexbuffer(device, curVB);
71
 }
72
 
73
 static inline void clear_textures(gs_device_t *device)
74
@@ -1348,6 +1349,7 @@
75
        if (effect)
76
            gs_effect_update_params(effect);
77
 
78
+       device->LoadVertexBufferData();
79
        device->UpdateBlendState();
80
        device->UpdateRasterState();
81
        device->UpdateZStencilState();
82
@@ -1926,6 +1928,8 @@
83
 
84
 void gs_vertexbuffer_destroy(gs_vertbuffer_t *vertbuffer)
85
 {
86
+   if (vertbuffer && vertbuffer->device->lastVertexBuffer == vertbuffer)
87
+       vertbuffer->device->lastVertexBuffer = nullptr;
88
    delete vertbuffer;
89
 }
90
 
91
obs-studio-18.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-19.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.hpp Changed
20
 
1
@@ -789,6 +789,9 @@
2
    gs_pixel_shader             *curPixelShader = nullptr;
3
    gs_swap_chain               *curSwapChain = nullptr;
4
 
5
+   gs_vertex_buffer            *lastVertexBuffer = nullptr;
6
+   gs_vertex_shader            *lastVertexShader = nullptr;
7
+
8
    bool                        zstencilStateChanged = true;
9
    bool                        rasterStateChanged = true;
10
    bool                        blendStateChanged = true;
11
@@ -829,6 +832,8 @@
12
    void UpdateRasterState();
13
    void UpdateBlendState();
14
 
15
+   void LoadVertexBufferData();
16
+
17
    inline void CopyTex(ID3D11Texture2D *dst,
18
            uint32_t dst_x, uint32_t dst_y,
19
            gs_texture_t *src, uint32_t src_x, uint32_t src_y,
20
obs-studio-18.0.2.tar.xz/libobs-opengl/gl-subsystem.c -> obs-studio-19.0.2.tar.xz/libobs-opengl/gl-subsystem.c Changed
26
 
1
@@ -1232,17 +1232,21 @@
2
 void device_set_viewport(gs_device_t *device, int x, int y, int width,
3
        int height)
4
 {
5
-   uint32_t base_height;
6
+   uint32_t base_height = 0;
7
+   int gl_y = 0;
8
 
9
    /* GL uses bottom-up coordinates for viewports.  We want top-down */
10
    if (device->cur_render_target) {
11
        base_height = get_target_height(device);
12
-   } else {
13
+   } else if (device->cur_swap) {
14
        uint32_t dw;
15
        gl_getclientsize(device->cur_swap, &dw, &base_height);
16
    }
17
 
18
-   glViewport(x, base_height - y - height, width, height);
19
+   if (base_height)
20
+       gl_y = base_height - y - height;
21
+
22
+   glViewport(x, gl_y, width, height);
23
    if (!gl_success("glViewport"))
24
        blog(LOG_ERROR, "device_set_viewport (GL) failed");
25
 
26
obs-studio-18.0.2.tar.xz/libobs/audio-monitoring/win32/wasapi-output.c -> obs-studio-19.0.2.tar.xz/libobs/audio-monitoring/win32/wasapi-output.c Changed
12
 
1
@@ -35,8 +35,8 @@
2
    audio_resampler_t  *resampler;
3
    uint32_t           sample_rate;
4
    uint32_t           channels;
5
-   bool               source_has_video : 1;
6
-   bool               ignore : 1;
7
+   bool               source_has_video;
8
+   bool               ignore;
9
 
10
    int64_t            lowest_audio_offset;
11
    struct circlebuf   delay_buffer;
12
obs-studio-18.0.2.tar.xz/libobs/data/format_conversion.effect -> obs-studio-19.0.2.tar.xz/libobs/data/format_conversion.effect Changed
104
 
1
@@ -37,6 +37,11 @@
2
 uniform float     input_width_i_d2;
3
 uniform float     input_height_i_d2;
4
 
5
+uniform int       int_width;
6
+uniform int       int_input_width;
7
+uniform int       int_u_plane_offset;
8
+uniform int       int_v_plane_offset;
9
+
10
 uniform texture2d image;
11
 
12
 sampler_state def_sampler {
13
@@ -235,6 +240,13 @@
14
        return out_val[2];
15
 }
16
 
17
+float GetIntOffsetColor(int offset)
18
+{
19
+   return image.Load(int3(offset % int_input_width,
20
+                          offset / int_input_width,
21
+                          0)).r;
22
+}
23
+
24
 float4 PSPacked422_Reverse(VertInOut vert_in, int u_pos, int v_pos,
25
        int y0_pos, int y1_pos) : TARGET
26
 {
27
@@ -250,59 +262,37 @@
28
            texel[u_pos], texel[v_pos], 1.0);
29
 }
30
 
31
-float GetOffsetColor(float offset)
32
-{
33
-   float2 uv;
34
-
35
-   offset += PRECISION_OFFSET;
36
-   uv.x = floor(fmod(offset, input_width)) * input_width_i;
37
-   uv.y = floor(offset * input_width_i)    * input_height_i;
38
-
39
-   uv.xy += float2(input_width_i_d2, input_height_i_d2);
40
-
41
-   return image.Sample(def_sampler, uv).r;
42
-}
43
-
44
 float4 PSPlanar420_Reverse(VertInOut vert_in) : TARGET
45
 {
46
-   float x = vert_in.uv.x;
47
-   float y = vert_in.uv.y;
48
-   float x_offset   = floor(x * width  + PRECISION_OFFSET);
49
-   float y_offset   = floor(y * height + PRECISION_OFFSET);
50
+   int x = int(vert_in.uv.x * width  + PRECISION_OFFSET);
51
+   int y = int(vert_in.uv.y * height + PRECISION_OFFSET);
52
 
53
-   float lum_offset = y_offset * width + x_offset + PRECISION_OFFSET;
54
-   lum_offset       = floor(lum_offset);
55
-
56
-   float ch_offset  = floor(y_offset * 0.5 + PRECISION_OFFSET) * width_d2 +
57
-       (x_offset * 0.5) + PRECISION_OFFSET;
58
-   ch_offset        = floor(ch_offset);
59
+   int lum_offset = y * int_width + x;
60
+   int chroma_offset = (y / 2) * (int_width / 2) + x / 2;
61
+   int chroma1    = int_u_plane_offset + chroma_offset;
62
+   int chroma2    = int_v_plane_offset + chroma_offset;
63
 
64
    return float4(
65
-       GetOffsetColor(lum_offset),
66
-       GetOffsetColor(u_plane_offset + ch_offset),
67
-       GetOffsetColor(v_plane_offset + ch_offset),
68
+       GetIntOffsetColor(lum_offset),
69
+       GetIntOffsetColor(chroma1),
70
+       GetIntOffsetColor(chroma2),
71
        1.0
72
    );
73
 }
74
 
75
 float4 PSNV12_Reverse(VertInOut vert_in) : TARGET
76
 {
77
-   float x = vert_in.uv.x;
78
-   float y = vert_in.uv.y;
79
-   float x_offset   = floor(x * width  + PRECISION_OFFSET);
80
-   float y_offset   = floor(y * height + PRECISION_OFFSET);
81
-
82
-   float lum_offset = y_offset * width + x_offset + PRECISION_OFFSET;
83
-   lum_offset       = floor(lum_offset);
84
+   int x = int(vert_in.uv.x * width  + PRECISION_OFFSET);
85
+   int y = int(vert_in.uv.y * height + PRECISION_OFFSET);
86
 
87
-   float ch_offset  = floor(y_offset * 0.5 + PRECISION_OFFSET) * width_d2 +
88
-       (x_offset * 0.5);
89
-   ch_offset        = floor(ch_offset * 2.0 + PRECISION_OFFSET);
90
+   int lum_offset    = y * int_width + x;
91
+   int chroma_offset = (y / 2) * (int_width / 2) + x / 2;
92
+   int chroma        = int_u_plane_offset + chroma_offset * 2;
93
 
94
    return float4(
95
-       GetOffsetColor(lum_offset),
96
-       GetOffsetColor(u_plane_offset + ch_offset),
97
-       GetOffsetColor(u_plane_offset + ch_offset + 1.0),
98
+       GetIntOffsetColor(lum_offset),
99
+       GetIntOffsetColor(chroma),
100
+       GetIntOffsetColor(chroma + 1),
101
        1.0
102
    );
103
 }
104
obs-studio-18.0.2.tar.xz/libobs/data/solid.effect -> obs-studio-19.0.2.tar.xz/libobs/data/solid.effect Changed
45
 
1
@@ -1,6 +1,10 @@
2
 uniform float4x4 ViewProj;
3
 uniform float4 color = {1.0, 1.0, 1.0, 1.0};
4
 
5
+uniform float4 randomvals1;
6
+uniform float4 randomvals2;
7
+uniform float4 randomvals3;
8
+
9
 struct SolidVertInOut {
10
    float4 pos : POSITION;
11
 };
12
@@ -17,6 +21,19 @@
13
    return color;
14
 }
15
 
16
+float rand(float4 pos, float4 rand_vals)
17
+{
18
+   return 0.5 + 0.5 * frac(sin(dot(pos.xy, float2(rand_vals.x, rand_vals.y))) * rand_vals.z);
19
+}
20
+
21
+float4 PSRandom(SolidVertInOut vert_in) : TARGET
22
+{
23
+   return float4(rand(vert_in.pos, randomvals1),
24
+                 rand(vert_in.pos, randomvals2),
25
+                 rand(vert_in.pos, randomvals3),
26
+                 1.0);
27
+}
28
+
29
 struct SolidColoredVertInOut {
30
    float4 pos   : POSITION;
31
    float4 color : COLOR;
32
@@ -52,3 +69,12 @@
33
        pixel_shader  = PSSolidColored(vert_in);
34
    }
35
 }
36
+
37
+technique Random
38
+{
39
+   pass
40
+   {
41
+       vertex_shader = VSSolid(vert_in);
42
+       pixel_shader  = PSRandom(vert_in);
43
+   }
44
+}
45
obs-studio-18.0.2.tar.xz/libobs/media-io/video-io.c -> obs-studio-19.0.2.tar.xz/libobs/media-io/video-io.c Changed
94
 
1
@@ -16,6 +16,7 @@
2
 ******************************************************************************/
3
 
4
 #include <assert.h>
5
+#include <inttypes.h>
6
 #include "../util/bmem.h"
7
 #include "../util/platform.h"
8
 #include "../util/profiler.h"
9
@@ -34,6 +35,7 @@
10
 
11
 struct cached_frame_info {
12
    struct video_data frame;
13
+   int skipped;
14
    int count;
15
 };
16
 
17
@@ -114,6 +116,7 @@
18
 {
19
    struct cached_frame_info *frame_info;
20
    bool complete;
21
+   bool skipped;
22
 
23
    /* -------------------------------- */
24
 
25
@@ -143,6 +146,7 @@
26
 
27
    frame_info->frame.timestamp += video->frame_time;
28
    complete = --frame_info->count == 0;
29
+   skipped = frame_info->skipped > 0;
30
 
31
    if (complete) {
32
        if (++video->first_added == video->info.cache_size)
33
@@ -150,6 +154,9 @@
34
 
35
        if (++video->available_frames == video->info.cache_size)
36
            video->last_added = video->first_added;
37
+   } else if (skipped) {
38
+       --frame_info->skipped;
39
+       ++video->skipped_frames;
40
    }
41
 
42
    pthread_mutex_unlock(&video->data_mutex);
43
@@ -333,6 +340,11 @@
44
 
45
    pthread_mutex_lock(&video->input_mutex);
46
 
47
+   if (video->inputs.num == 0) {
48
+       video->skipped_frames = 0;
49
+       video->total_frames = 0;
50
+   }
51
+
52
    if (video_get_input_idx(video, callback, param) == DARRAY_INVALID) {
53
        struct video_input input;
54
        memset(&input, 0, sizeof(input));
55
@@ -378,6 +390,20 @@
56
        da_erase(video->inputs, idx);
57
    }
58
 
59
+   if (video->inputs.num == 0) {
60
+       double percentage_skipped = (double)video->skipped_frames /
61
+           (double)video->total_frames * 100.0;
62
+
63
+       if (video->skipped_frames)
64
+           blog(LOG_INFO, "Video stopped, number of "
65
+                   "skipped frames due "
66
+                   "to encoding lag: "
67
+                   "%"PRIu32"/%"PRIu32" (%0.1f%%)",
68
+                   video->skipped_frames,
69
+                   video->total_frames,
70
+                   percentage_skipped);
71
+   }
72
+
73
    pthread_mutex_unlock(&video->input_mutex);
74
 }
75
 
76
@@ -403,8 +429,8 @@
77
    pthread_mutex_lock(&video->data_mutex);
78
 
79
    if (video->available_frames == 0) {
80
-       video->skipped_frames += count;
81
        video->cache[video->last_added].count += count;
82
+       video->cache[video->last_added].skipped += count;
83
        locked = false;
84
 
85
    } else {
86
@@ -416,6 +442,7 @@
87
        cfi = &video->cache[video->last_added];
88
        cfi->frame.timestamp = timestamp;
89
        cfi->count = count;
90
+       cfi->skipped = 0;
91
 
92
        memcpy(frame, &cfi->frame, sizeof(*frame));
93
 
94
obs-studio-18.0.2.tar.xz/libobs/obs-cocoa.c -> obs-studio-19.0.2.tar.xz/libobs/obs-cocoa.c Changed
26
 
1
@@ -94,23 +94,8 @@
2
 
3
 static void log_processor_cores(void)
4
 {
5
-   size_t size;
6
-   int    physical_cores = 0, logical_cores = 0;
7
-   int    ret;
8
-
9
-   size = sizeof(physical_cores);
10
-   ret = sysctlbyname("machdep.cpu.core_count", &physical_cores,
11
-           &size, NULL, 0);
12
-   if (ret != 0)
13
-       return;
14
-
15
-   ret = sysctlbyname("machdep.cpu.thread_count", &logical_cores,
16
-           &size, NULL, 0);
17
-   if (ret != 0)
18
-       return;
19
-
20
    blog(LOG_INFO, "Physical Cores: %d, Logical Cores: %d",
21
-           physical_cores, logical_cores);
22
+           os_get_physical_cores(), os_get_logical_cores());
23
 }
24
 
25
 static void log_available_memory(void)
26
obs-studio-18.0.2.tar.xz/libobs/obs-config.h -> obs-studio-19.0.2.tar.xz/libobs/obs-config.h Changed
10
 
1
@@ -27,7 +27,7 @@
2
 /*
3
  * Increment if major breaking API changes
4
  */
5
-#define LIBOBS_API_MAJOR_VER  18
6
+#define LIBOBS_API_MAJOR_VER  19
7
 
8
 /*
9
  * Increment if backward-compatible additions
10
obs-studio-18.0.2.tar.xz/libobs/obs-data.c -> obs-studio-19.0.2.tar.xz/libobs/obs-data.c Changed
9
 
1
@@ -682,7 +682,6 @@
2
 
3
            /* delete current file if corrupt to prevent it from
4
             * being backed up again */
5
-           os_unlink(json_file);
6
            os_rename(backup_file.array, json_file);
7
 
8
            file_data = obs_data_create_from_json_file(json_file);
9
obs-studio-18.0.2.tar.xz/libobs/obs-hotkey.c -> obs-studio-19.0.2.tar.xz/libobs/obs-hotkey.c Changed
23
 
1
@@ -1197,8 +1197,8 @@
2
 
3
 struct obs_hotkey_internal_inject {
4
    obs_key_combination_t hotkey;
5
-   bool                  pressed : 1;
6
-   bool                  strict_modifiers : 1;
7
+   bool                  pressed;
8
+   bool                  strict_modifiers;
9
 };
10
 
11
 static inline bool inject_hotkey(void *data,
12
@@ -1251,8 +1251,8 @@
13
 
14
 struct obs_query_hotkeys_helper {
15
    uint32_t modifiers;
16
-   bool     no_press : 1;
17
-   bool     strict_modifiers : 1;
18
+   bool     no_press;
19
+   bool     strict_modifiers;
20
 };
21
 
22
 static inline bool query_hotkey(void *data,
23
obs-studio-18.0.2.tar.xz/libobs/obs-internal.h -> obs-studio-19.0.2.tar.xz/libobs/obs-internal.h Changed
115
 
1
@@ -140,8 +140,8 @@
2
    obs_hotkey_pair_id          pair_id;
3
    obs_hotkey_id               id[2];
4
    obs_hotkey_active_func      func[2];
5
-   bool                        pressed0 : 1;
6
-   bool                        pressed1 : 1;
7
+   bool                        pressed0;
8
+   bool                        pressed1;
9
    void                        *data[2];
10
 };
11
 
12
@@ -166,8 +166,8 @@
13
 
14
 struct obs_hotkey_binding {
15
    obs_key_combination_t       key;
16
-   bool                        pressed : 1;
17
-   bool                        modifiers_match : 1;
18
+   bool                        pressed;
19
+   bool                        modifiers_match;
20
 
21
    obs_hotkey_id               hotkey_id;
22
    obs_hotkey_t                *hotkey;
23
@@ -244,6 +244,7 @@
24
    int                             cur_texture;
25
 
26
    uint64_t                        video_time;
27
+   uint64_t                        video_avg_frame_time_ns;
28
    double                          video_fps;
29
    video_t                         *video;
30
    pthread_t                       video_thread;
31
@@ -275,6 +276,8 @@
32
    gs_effect_t                     *deinterlace_blend_2x_effect;
33
    gs_effect_t                     *deinterlace_yadif_effect;
34
    gs_effect_t                     *deinterlace_yadif_2x_effect;
35
+
36
+   struct obs_video_info           ovi;
37
 };
38
 
39
 struct audio_monitor;
40
@@ -313,6 +316,8 @@
41
    pthread_mutex_t                 encoders_mutex;
42
    pthread_mutex_t                 services_mutex;
43
    pthread_mutex_t                 audio_sources_mutex;
44
+   pthread_mutex_t                 draw_callbacks_mutex;
45
+   DARRAY(struct draw_callback)    draw_callbacks;
46
 
47
    struct obs_view                 main_view;
48
 
49
@@ -332,9 +337,9 @@
50
    pthread_t                       hotkey_thread;
51
    bool                            hotkey_thread_initialized;
52
    os_event_t                      *stop_event;
53
-   bool                            thread_disable_press : 1;
54
-   bool                            strict_modifiers : 1;
55
-   bool                            reroute_hotkeys : 1;
56
+   bool                            thread_disable_press;
57
+   bool                            strict_modifiers;
58
+   bool                            reroute_hotkeys;
59
    DARRAY(obs_hotkey_binding_t)    bindings;
60
 
61
    obs_hotkey_callback_router_func router_func;
62
@@ -603,6 +608,7 @@
63
    bool                            async_flip;
64
    bool                            async_active;
65
    bool                            async_update_texture;
66
+   bool                            async_unbuffered;
67
    struct obs_source_frame         *async_preload_frame;
68
    DARRAY(struct async_frame)      async_cache;
69
    DARRAY(struct obs_source_frame*)async_frames;
70
@@ -639,12 +645,12 @@
71
    obs_hotkey_pair_id              mute_unmute_key;
72
    obs_hotkey_id                   push_to_mute_key;
73
    obs_hotkey_id                   push_to_talk_key;
74
-   bool                            push_to_mute_enabled : 1;
75
-   bool                            push_to_mute_pressed : 1;
76
-   bool                            user_push_to_mute_pressed : 1;
77
-   bool                            push_to_talk_enabled : 1;
78
-   bool                            push_to_talk_pressed : 1;
79
-   bool                            user_push_to_talk_pressed : 1;
80
+   bool                            push_to_mute_enabled;
81
+   bool                            push_to_mute_pressed;
82
+   bool                            user_push_to_mute_pressed;
83
+   bool                            push_to_talk_enabled;
84
+   bool                            push_to_talk_pressed;
85
+   bool                            user_push_to_talk_pressed;
86
    uint64_t                        push_to_mute_delay;
87
    uint64_t                        push_to_mute_stop_time;
88
    uint64_t                        push_to_talk_delay;
89
@@ -666,7 +672,7 @@
90
    uint32_t                        transition_cx;
91
    uint32_t                        transition_cy;
92
    uint32_t                        transition_fixed_duration;
93
-   bool                            transition_use_fixed_duration : 1;
94
+   bool                            transition_use_fixed_duration;
95
    enum obs_transition_mode        transition_mode;
96
    enum obs_transition_scale_type  transition_scale_type;
97
    struct matrix4                  transition_matrices[2];
98
@@ -830,7 +836,6 @@
99
    uint32_t                        starting_drawn_count;
100
    uint32_t                        starting_lagged_count;
101
    uint32_t                        starting_frame_count;
102
-   uint32_t                        starting_skipped_frame_count;
103
 
104
    int                             total_frames;
105
 
106
@@ -867,6 +872,8 @@
107
    volatile long                   delay_restart_refs;
108
    volatile bool                   delay_active;
109
    volatile bool                   delay_capturing;
110
+
111
+   char                            *last_error_message;
112
 };
113
 
114
 static inline void do_output_signal(struct obs_output *output,
115
obs-studio-18.0.2.tar.xz/libobs/obs-output.c -> obs-studio-19.0.2.tar.xz/libobs/obs-output.c Changed
151
 
1
@@ -212,6 +212,8 @@
2
        circlebuf_free(&output->delay_data);
3
        if (output->owns_info_id)
4
            bfree((void*)output->info.id);
5
+       if (output->last_error_message)
6
+           bfree(output->last_error_message);
7
        bfree(output);
8
    }
9
 }
10
@@ -228,6 +230,10 @@
11
 
12
    os_event_wait(output->stopping_event);
13
    output->stop_code = 0;
14
+   if (output->last_error_message) {
15
+       bfree(output->last_error_message);
16
+       output->last_error_message = NULL;
17
+   }
18
 
19
    if (output->context.data)
20
        success = output->info.start(output->context.data);
21
@@ -235,8 +241,6 @@
22
    if (success && output->video) {
23
        output->starting_frame_count =
24
            video_output_get_total_frames(output->video);
25
-       output->starting_skipped_frame_count =
26
-           video_output_get_skipped_frames(output->video);
27
        output->starting_drawn_count = obs->video.total_frames;
28
        output->starting_lagged_count = obs->video.lagged_frames;
29
    }
30
@@ -280,24 +284,19 @@
31
    struct obs_core_video *video = &obs->video;
32
 
33
    uint32_t video_frames  = video_output_get_total_frames(output->video);
34
-   uint32_t video_skipped = video_output_get_skipped_frames(output->video);
35
 
36
    uint32_t total   = video_frames  - output->starting_frame_count;
37
-   uint32_t skipped = video_skipped - output->starting_skipped_frame_count;
38
 
39
    uint32_t drawn  = video->total_frames - output->starting_drawn_count;
40
    uint32_t lagged = video->lagged_frames - output->starting_lagged_count;
41
 
42
    int dropped = obs_output_get_frames_dropped(output);
43
 
44
-   double percentage_skipped = 0.0f;
45
    double percentage_lagged = 0.0f;
46
    double percentage_dropped = 0.0f;
47
 
48
-   if (total) {
49
-       percentage_skipped = (double)skipped / (double)total * 100.0;
50
+   if (total)
51
        percentage_dropped = (double)dropped / (double)total * 100.0;
52
-   }
53
    if (drawn)
54
        percentage_lagged = (double)lagged  / (double)drawn * 100.0;
55
 
56
@@ -307,11 +306,6 @@
57
    blog(LOG_INFO, "Output '%s': Total drawn frames: %"PRIu32,
58
            output->context.name, drawn);
59
 
60
-   if (total && skipped)
61
-       blog(LOG_INFO, "Output '%s': Number of skipped frames due "
62
-               "to encoding lag: %"PRIu32" (%0.1f%%)",
63
-               output->context.name,
64
-               skipped, percentage_skipped);
65
    if (drawn && lagged)
66
        blog(LOG_INFO, "Output '%s': Number of lagged frames due "
67
                "to rendering lag/stalls: %"PRIu32" (%0.1f%%)",
68
@@ -352,10 +346,10 @@
69
            obs_output_end_data_capture(output);
70
            os_event_signal(output->stopping_event);
71
        } else {
72
-           call_stop = data_active(output);
73
+           call_stop = true;
74
        }
75
    } else {
76
-       call_stop = data_active(output);
77
+       call_stop = true;
78
    }
79
 
80
    if (output->context.data && call_stop) {
81
@@ -1570,12 +1564,15 @@
82
 static inline void signal_stop(struct obs_output *output)
83
 {
84
    struct calldata params;
85
-   uint8_t stack[128];
86
 
87
-   calldata_init_fixed(&params, stack, sizeof(stack));
88
+   calldata_init(&params);
89
+   calldata_set_string(&params, "last_error", output->last_error_message);
90
    calldata_set_int(&params, "code", output->stop_code);
91
    calldata_set_ptr(&params, "output", output);
92
+
93
    signal_handler_signal(output->context.signals, "stop", &params);
94
+
95
+   calldata_free(&params);
96
 }
97
 
98
 static inline void convert_flags(const struct obs_output *output,
99
@@ -1822,6 +1819,7 @@
100
        if (signal) {
101
            signal_stop(output);
102
            output->stop_code = OBS_OUTPUT_SUCCESS;
103
+           os_event_signal(output->stopping_event);
104
        }
105
        return;
106
    }
107
@@ -2117,3 +2115,43 @@
108
    }
109
    return 0;
110
 }
111
+
112
+int obs_output_get_connect_time_ms(obs_output_t *output)
113
+{
114
+   if (!obs_output_valid(output, "obs_output_get_connect_time_ms"))
115
+       return -1;
116
+
117
+   if (output->info.get_connect_time_ms)
118
+       return output->info.get_connect_time_ms(output->context.data);
119
+   return -1;
120
+}
121
+
122
+const char *obs_output_get_last_error(obs_output_t *output)
123
+{
124
+   if (!obs_output_valid(output, "obs_output_get_last_error"))
125
+       return NULL;
126
+
127
+   return output->last_error_message;
128
+}
129
+
130
+void obs_output_set_last_error(obs_output_t *output, const char *message)
131
+{
132
+   if (!obs_output_valid(output, "obs_output_set_last_error"))
133
+       return;
134
+
135
+   if (output->last_error_message)
136
+       bfree(output->last_error_message);
137
+
138
+   if (message)
139
+       output->last_error_message = bstrdup(message);
140
+   else
141
+       output->last_error_message = NULL;
142
+}
143
+
144
+bool obs_output_reconnecting(const obs_output_t *output)
145
+{
146
+   if (!obs_output_valid(output, "obs_output_reconnecting"))
147
+       return false;
148
+
149
+   return reconnecting(output);
150
+}
151
obs-studio-18.0.2.tar.xz/libobs/obs-output.h -> obs-studio-19.0.2.tar.xz/libobs/obs-output.h Changed
9
 
1
@@ -66,6 +66,7 @@
2
    void (*free_type_data)(void *type_data);
3
 
4
    float (*get_congestion)(void *data);
5
+   int (*get_connect_time_ms)(void *data);
6
 };
7
 
8
 EXPORT void obs_register_output_s(const struct obs_output_info *info,
9
obs-studio-18.0.2.tar.xz/libobs/obs-scene.c -> obs-studio-19.0.2.tar.xz/libobs/obs-scene.c Changed
107
 
1
@@ -71,6 +71,8 @@
2
    signal_handler_add_array(obs_source_get_signal_handler(source),
3
            obs_scene_signals);
4
 
5
+   scene->id_counter = 0;
6
+
7
    if (pthread_mutexattr_init(&attr) != 0)
8
        goto fail;
9
    if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0)
10
@@ -608,6 +610,9 @@
11
    obs_data_set_default_int(item_data, "align",
12
            OBS_ALIGN_TOP | OBS_ALIGN_LEFT);
13
 
14
+   if (obs_data_has_user_value(item_data, "id"))
15
+       item->id = obs_data_get_int(item_data, "id");
16
+
17
    item->rot     = (float)obs_data_get_double(item_data, "rot");
18
    item->align   = (uint32_t)obs_data_get_int(item_data, "align");
19
    visible = obs_data_get_bool(item_data, "visible");
20
@@ -659,8 +664,9 @@
21
    update_item_transform(item);
22
 }
23
 
24
-static void scene_load(void *scene, obs_data_t *settings)
25
+static void scene_load(void *data, obs_data_t *settings)
26
 {
27
+   struct obs_scene *scene = data;
28
    obs_data_array_t *items = obs_data_get_array(settings, "items");
29
    size_t           count, i;
30
 
31
@@ -676,6 +682,9 @@
32
        obs_data_release(item_data);
33
    }
34
 
35
+   if (obs_data_has_user_value(settings, "id_counter"))
36
+       scene->id_counter = obs_data_get_int(settings, "id_counter");
37
+
38
    obs_data_array_release(items);
39
 }
40
 
41
@@ -699,6 +708,7 @@
42
    obs_data_set_int  (item_data, "crop_top",     (int)item->crop.top);
43
    obs_data_set_int  (item_data, "crop_right",   (int)item->crop.right);
44
    obs_data_set_int  (item_data, "crop_bottom",  (int)item->crop.bottom);
45
+   obs_data_set_int  (item_data, "id",           item->id);
46
 
47
    if (item->scale_filter == OBS_SCALE_POINT)
48
        scale_filter = "point";
49
@@ -731,6 +741,8 @@
50
        item = item->next;
51
    }
52
 
53
+   obs_data_set_int(settings, "id_counter", scene->id_counter);
54
+
55
    full_unlock(scene);
56
 
57
    obs_data_set_array(settings, "items", array);
58
@@ -1160,6 +1172,28 @@
59
    return item;
60
 }
61
 
62
+obs_sceneitem_t *obs_scene_find_sceneitem_by_id(obs_scene_t *scene, int64_t id)
63
+{
64
+   struct obs_scene_item *item;
65
+
66
+   if (!scene)
67
+       return NULL;
68
+
69
+   full_lock(scene);
70
+
71
+   item = scene->first_item;
72
+   while (item) {
73
+       if (item->id == id)
74
+           break;
75
+
76
+       item = item->next;
77
+   }
78
+
79
+   full_unlock(scene);
80
+
81
+   return item;
82
+}
83
+
84
 void obs_scene_enum_items(obs_scene_t *scene,
85
        bool (*callback)(obs_scene_t*, obs_sceneitem_t*, void*),
86
        void *param)
87
@@ -1307,6 +1341,7 @@
88
 
89
    item = bzalloc(sizeof(struct obs_scene_item));
90
    item->source  = source;
91
+   item->id      = ++scene->id_counter;
92
    item->parent  = scene;
93
    item->ref     = 1;
94
    item->align   = OBS_ALIGN_TOP | OBS_ALIGN_LEFT;
95
@@ -1919,3 +1954,11 @@
96
    if (os_atomic_dec_long(&item->defer_update) == 0)
97
        update_item_transform(item);
98
 }
99
+
100
+int64_t obs_sceneitem_get_id(const obs_sceneitem_t *item)
101
+{
102
+   if (!obs_ptr_valid(item, "obs_sceneitem_get_id"))
103
+       return 0;
104
+
105
+   return item->id;
106
+}
107
obs-studio-18.0.2.tar.xz/libobs/obs-scene.h -> obs-studio-19.0.2.tar.xz/libobs/obs-scene.h Changed
19
 
1
@@ -32,6 +32,8 @@
2
    volatile long         ref;
3
    volatile bool         removed;
4
 
5
+   int64_t               id;
6
+
7
    struct obs_scene      *parent;
8
    struct obs_source     *source;
9
    volatile long         active_refs;
10
@@ -76,6 +78,8 @@
11
 struct obs_scene {
12
    struct obs_source     *source;
13
 
14
+   int64_t               id_counter;
15
+
16
    pthread_mutex_t       video_mutex;
17
    pthread_mutex_t       audio_mutex;
18
    struct obs_scene_item *first_item;
19
obs-studio-18.0.2.tar.xz/libobs/obs-source-deinterlace.c -> obs-studio-19.0.2.tar.xz/libobs/obs-source-deinterlace.c Changed
10
 
1
@@ -27,7 +27,7 @@
2
    uint64_t frame_offset = 0;
3
    size_t idx = 1;
4
 
5
-   if ((source->flags & OBS_SOURCE_FLAG_UNBUFFERED) != 0) {
6
+   if (source->async_unbuffered) {
7
        while (source->async_frames.num > 2) {
8
            da_erase(source->async_frames, 0);
9
            remove_async_frame(source, next_frame);
10
obs-studio-18.0.2.tar.xz/libobs/obs-source.c -> obs-studio-19.0.2.tar.xz/libobs/obs-source.c Changed
128
 
1
@@ -330,8 +330,6 @@
2
    if (!private)
3
        obs_source_init_audio_hotkeys(source);
4
 
5
-   source->flags = source->default_flags;
6
-
7
    /* allow the source to be created even if creation fails so that the
8
     * user's data doesn't become lost */
9
    if (info)
10
@@ -344,6 +342,7 @@
11
            private ? "private " : "", name, id);
12
    obs_source_dosignal(source, "source_create", NULL);
13
 
14
+   source->flags = source->default_flags;
15
    source->enabled = true;
16
    return source;
17
 
18
@@ -1490,6 +1489,12 @@
19
    gs_effect_set_float(param, val);
20
 }
21
 
22
+static inline void set_eparami(gs_effect_t *effect, const char *name, int val)
23
+{
24
+   gs_eparam_t *param = gs_effect_get_param_by_name(effect, name);
25
+   gs_effect_set_int(param, val);
26
+}
27
+
28
 static bool update_async_texrender(struct obs_source *source,
29
        const struct obs_source_frame *frame,
30
        gs_texture_t *tex, gs_texrender_t *texrender)
31
@@ -1517,22 +1522,16 @@
32
    gs_effect_set_texture(gs_effect_get_param_by_name(conv, "image"), tex);
33
    set_eparam(conv, "width",  (float)cx);
34
    set_eparam(conv, "height", (float)cy);
35
-   set_eparam(conv, "width_i",  1.0f / cx);
36
-   set_eparam(conv, "height_i", 1.0f / cy);
37
    set_eparam(conv, "width_d2",  cx * 0.5f);
38
-   set_eparam(conv, "height_d2", cy * 0.5f);
39
    set_eparam(conv, "width_d2_i",  1.0f / (cx * 0.5f));
40
-   set_eparam(conv, "height_d2_i", 1.0f / (cy * 0.5f));
41
-   set_eparam(conv, "input_width",  convert_width);
42
-   set_eparam(conv, "input_height", convert_height);
43
-   set_eparam(conv, "input_width_i",  1.0f / convert_width);
44
-   set_eparam(conv, "input_height_i", 1.0f / convert_height);
45
    set_eparam(conv, "input_width_i_d2",  (1.0f / convert_width)  * 0.5f);
46
-   set_eparam(conv, "input_height_i_d2", (1.0f / convert_height) * 0.5f);
47
-   set_eparam(conv, "u_plane_offset",
48
-           (float)source->async_plane_offset[0]);
49
-   set_eparam(conv, "v_plane_offset",
50
-           (float)source->async_plane_offset[1]);
51
+
52
+   set_eparami(conv, "int_width", (int)cx);
53
+   set_eparami(conv, "int_input_width", (int)source->async_convert_width);
54
+   set_eparami(conv, "int_u_plane_offset",
55
+           (int)source->async_plane_offset[0]);
56
+   set_eparami(conv, "int_v_plane_offset",
57
+           (int)source->async_plane_offset[1]);
58
 
59
    gs_ortho(0.f, (float)cx, 0.f, (float)cy, -100.f, 100.f);
60
 
61
@@ -1696,7 +1695,7 @@
62
    source->rendering_filter = false;
63
 }
64
 
65
-static void obs_source_default_render(obs_source_t *source)
66
+void obs_source_default_render(obs_source_t *source)
67
 {
68
    gs_effect_t    *effect     = obs->video.default_effect;
69
    gs_technique_t *tech       = gs_effect_get_technique(effect, "Draw");
70
@@ -1887,6 +1886,18 @@
71
        filter->filter_target : NULL;
72
 }
73
 
74
+static bool filter_compatible(obs_source_t *source, obs_source_t *filter)
75
+{
76
+   uint32_t s_caps = source->info.output_flags;
77
+   uint32_t f_caps = filter->info.output_flags;
78
+
79
+   if ((f_caps & OBS_SOURCE_AUDIO) != 0 &&
80
+       (f_caps & OBS_SOURCE_VIDEO) == 0)
81
+       f_caps &= ~OBS_SOURCE_ASYNC;
82
+
83
+   return (s_caps & f_caps) == f_caps;
84
+}
85
+
86
 void obs_source_filter_add(obs_source_t *source, obs_source_t *filter)
87
 {
88
    struct calldata cd;
89
@@ -1906,6 +1917,11 @@
90
        return;
91
    }
92
 
93
+   if (!filter_compatible(source, filter)) {
94
+       pthread_mutex_unlock(&source->filter_mutex);
95
+       return;
96
+   }
97
+
98
    obs_source_addref(filter);
99
 
100
    filter->filter_parent = source;
101
@@ -2603,7 +2619,7 @@
102
    uint64_t frame_time = next_frame->timestamp;
103
    uint64_t frame_offset = 0;
104
 
105
-   if ((source->flags & OBS_SOURCE_FLAG_UNBUFFERED) != 0) {
106
+   if (source->async_unbuffered) {
107
        while (source->async_frames.num > 1) {
108
            da_erase(source->async_frames, 0);
109
            remove_async_frame(source, next_frame);
110
@@ -4021,3 +4037,17 @@
111
    return obs_source_valid(source, "obs_source_get_monitoring_type") ?
112
        source->monitoring_type : OBS_MONITORING_TYPE_NONE;
113
 }
114
+
115
+void obs_source_set_async_unbuffered(obs_source_t *source, bool unbuffered)
116
+{
117
+   if (!obs_source_valid(source, "obs_source_set_async_unbuffered"))
118
+       return;
119
+
120
+   source->async_unbuffered = unbuffered;
121
+}
122
+
123
+bool obs_source_async_unbuffered(const obs_source_t *source)
124
+{
125
+   return obs_source_valid(source, "obs_source_async_unbuffered") ?
126
+       source->async_unbuffered : false;
127
+}
128
obs-studio-18.0.2.tar.xz/libobs/obs-video.c -> obs-studio-19.0.2.tar.xz/libobs/obs-video.c Changed
65
 
1
@@ -105,6 +105,19 @@
2
    gs_clear(GS_CLEAR_COLOR, &clear_color, 1.0f, 0);
3
 
4
    set_render_size(video->base_width, video->base_height);
5
+
6
+   pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
7
+
8
+   for (size_t i = 0; i < obs->data.draw_callbacks.num; i++) {
9
+       struct draw_callback *callback;
10
+       callback = obs->data.draw_callbacks.array+i;
11
+
12
+       callback->draw(callback->param,
13
+               video->base_width, video->base_height);
14
+   }
15
+
16
+   pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
17
+
18
    obs_view_render(&obs->data.main_view);
19
 
20
    video->textures_rendered[cur_texture] = true;
21
@@ -573,6 +586,7 @@
22
 {
23
    uint64_t last_time = 0;
24
    uint64_t interval = video_output_get_frame_time(obs->video.video);
25
+   uint64_t frame_time_total_ns = 0;
26
    uint64_t fps_total_ns = 0;
27
    uint32_t fps_total_frames = 0;
28
 
29
@@ -586,6 +600,9 @@
30
    profile_register_root(video_thread_name, interval);
31
 
32
    while (!video_output_stopped(obs->video.video)) {
33
+       uint64_t frame_start = os_gettime_ns();
34
+       uint64_t frame_time_ns;
35
+
36
        profile_start(video_thread_name);
37
 
38
        profile_start(tick_sources_name);
39
@@ -600,18 +617,25 @@
40
        output_frame();
41
        profile_end(output_frame_name);
42
 
43
+       frame_time_ns = os_gettime_ns() - frame_start;
44
+
45
        profile_end(video_thread_name);
46
 
47
        profile_reenable_thread();
48
 
49
        video_sleep(&obs->video, &obs->video.video_time, interval);
50
 
51
+       frame_time_total_ns += frame_time_ns;
52
        fps_total_ns += (obs->video.video_time - last_time);
53
        fps_total_frames++;
54
 
55
        if (fps_total_ns >= 1000000000ULL) {
56
            obs->video.video_fps = (double)fps_total_frames /
57
                ((double)fps_total_ns / 1000000000.0);
58
+           obs->video.video_avg_frame_time_ns =
59
+               frame_time_total_ns / (uint64_t)fps_total_frames;
60
+
61
+           frame_time_total_ns = 0;
62
            fps_total_ns = 0;
63
            fps_total_frames = 0;
64
        }
65
obs-studio-18.0.2.tar.xz/libobs/obs-windows.c -> obs-studio-19.0.2.tar.xz/libobs/obs-windows.c Changed
58
 
1
@@ -105,54 +105,10 @@
2
    RegCloseKey(key);
3
 }
4
 
5
-static DWORD num_logical_cores(ULONG_PTR mask)
6
-{
7
-   DWORD     left_shift    = sizeof(ULONG_PTR) * 8 - 1;
8
-   DWORD     bit_set_count = 0;
9
-   ULONG_PTR bit_test      = (ULONG_PTR)1 << left_shift;
10
-
11
-   for (DWORD i = 0; i <= left_shift; ++i) {
12
-       bit_set_count += ((mask & bit_test) ? 1 : 0);
13
-       bit_test      /= 2;
14
-   }
15
-
16
-   return bit_set_count;
17
-}
18
-
19
 static void log_processor_cores(void)
20
 {
21
-   PSYSTEM_LOGICAL_PROCESSOR_INFORMATION info = NULL, temp = NULL;
22
-   DWORD len = 0;
23
-
24
-   GetLogicalProcessorInformation(info, &len);
25
-   if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
26
-       return;
27
-
28
-   info = malloc(len);
29
-
30
-   if (GetLogicalProcessorInformation(info, &len)) {
31
-       DWORD num            = len / sizeof(*info);
32
-       int   physical_cores = 0;
33
-       int   logical_cores  = 0;
34
-
35
-       temp = info;
36
-
37
-       for (DWORD i = 0; i < num; i++) {
38
-           if (temp->Relationship == RelationProcessorCore) {
39
-               ULONG_PTR mask = temp->ProcessorMask;
40
-
41
-               physical_cores++;
42
-               logical_cores += num_logical_cores(mask);
43
-           }
44
-
45
-           temp++;
46
-       }
47
-
48
-       blog(LOG_INFO, "Physical Cores: %d, Logical Cores: %d",
49
-               physical_cores, logical_cores);
50
-   }
51
-
52
-   free(info);
53
+   blog(LOG_INFO, "Physical Cores: %d, Logical Cores: %d",
54
+           os_get_physical_cores(), os_get_logical_cores());
55
 }
56
 
57
 static void log_available_memory(void)
58
obs-studio-18.0.2.tar.xz/libobs/obs.c -> obs-studio-19.0.2.tar.xz/libobs/obs.c Changed
154
 
1
@@ -390,6 +390,7 @@
2
        return OBS_VIDEO_FAIL;
3
 
4
    video->thread_initialized = true;
5
+   video->ovi = *ovi;
6
    return OBS_VIDEO_SUCCESS;
7
 }
8
 
9
@@ -541,6 +542,7 @@
10
    assert(data != NULL);
11
 
12
    pthread_mutex_init_value(&obs->data.displays_mutex);
13
+   pthread_mutex_init_value(&obs->data.draw_callbacks_mutex);
14
 
15
    if (pthread_mutexattr_init(&attr) != 0)
16
        return false;
17
@@ -558,6 +560,8 @@
18
        goto fail;
19
    if (pthread_mutex_init(&data->services_mutex, &attr) != 0)
20
        goto fail;
21
+   if (pthread_mutex_init(&obs->data.draw_callbacks_mutex, NULL) != 0)
22
+       goto fail;
23
    if (!obs_view_init(&data->main_view))
24
        goto fail;
25
 
26
@@ -613,6 +617,8 @@
27
    pthread_mutex_destroy(&data->outputs_mutex);
28
    pthread_mutex_destroy(&data->encoders_mutex);
29
    pthread_mutex_destroy(&data->services_mutex);
30
+   pthread_mutex_destroy(&data->draw_callbacks_mutex);
31
+   da_free(data->draw_callbacks);
32
 }
33
 
34
 static const char *obs_signals[] = {
35
@@ -1008,28 +1014,11 @@
36
 bool obs_get_video_info(struct obs_video_info *ovi)
37
 {
38
    struct obs_core_video *video = &obs->video;
39
-   const struct video_output_info *info;
40
 
41
    if (!obs || !video->graphics)
42
        return false;
43
 
44
-   info = video_output_get_info(video->video);
45
-   if (!info)
46
-       return false;
47
-
48
-   memset(ovi, 0, sizeof(struct obs_video_info));
49
-   ovi->base_width    = video->base_width;
50
-   ovi->base_height   = video->base_height;
51
-   ovi->gpu_conversion= video->gpu_conversion;
52
-   ovi->scale_type    = video->scale_type;
53
-   ovi->colorspace    = info->colorspace;
54
-   ovi->range         = info->range;
55
-   ovi->output_width  = info->width;
56
-   ovi->output_height = info->height;
57
-   ovi->output_format = info->format;
58
-   ovi->fps_num       = info->fps_num;
59
-   ovi->fps_den       = info->fps_den;
60
-
61
+   *ovi = video->ovi;
62
    return true;
63
 }
64
 
65
@@ -1465,6 +1454,7 @@
66
    obs_data_t   *hotkeys  = obs_data_get_obj(source_data, "hotkeys");
67
    double       volume;
68
    int64_t      sync;
69
+   uint32_t     flags;
70
    uint32_t     mixers;
71
    int          di_order;
72
    int          di_mode;
73
@@ -1485,6 +1475,10 @@
74
    mixers = (uint32_t)obs_data_get_int(source_data, "mixers");
75
    obs_source_set_audio_mixers(source, mixers);
76
 
77
+   obs_data_set_default_int(source_data, "flags", source->default_flags);
78
+   flags = (uint32_t)obs_data_get_int(source_data, "flags");
79
+   obs_source_set_flags(source, flags);
80
+
81
    obs_data_set_default_bool(source_data, "enabled", true);
82
    obs_source_set_enabled(source,
83
            obs_data_get_bool(source_data, "enabled"));
84
@@ -1607,6 +1601,7 @@
85
    float      volume      = obs_source_get_volume(source);
86
    uint32_t   mixers      = obs_source_get_audio_mixers(source);
87
    int64_t    sync        = obs_source_get_sync_offset(source);
88
+   uint32_t   flags       = obs_source_get_flags(source);
89
    const char *name       = obs_source_get_name(source);
90
    const char *id         = obs_source_get_id(source);
91
    bool       enabled     = obs_source_enabled(source);
92
@@ -1634,6 +1629,7 @@
93
    obs_data_set_obj   (source_data, "settings", settings);
94
    obs_data_set_int   (source_data, "mixers",   mixers);
95
    obs_data_set_int   (source_data, "sync",     sync);
96
+   obs_data_set_int   (source_data, "flags",    flags);
97
    obs_data_set_double(source_data, "volume",   volume);
98
    obs_data_set_bool  (source_data, "enabled",  enabled);
99
    obs_data_set_bool  (source_data, "muted",    muted);
100
@@ -1860,6 +1856,11 @@
101
    return obs ? obs->video.video_fps : 0.0;
102
 }
103
 
104
+uint64_t obs_get_average_frame_time_ns(void)
105
+{
106
+   return obs ? obs->video.video_avg_frame_time_ns : 0;
107
+}
108
+
109
 enum obs_obj_type obs_obj_get_type(void *obj)
110
 {
111
    struct obs_context_data *context = obj;
112
@@ -1935,3 +1936,41 @@
113
    if (id)
114
        *id = obs->audio.monitoring_device_id;
115
 }
116
+
117
+void obs_add_main_render_callback(
118
+       void (*draw)(void *param, uint32_t cx, uint32_t cy),
119
+       void *param)
120
+{
121
+   if (!obs)
122
+       return;
123
+
124
+   struct draw_callback data = {draw, param};
125
+
126
+   pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
127
+   da_push_back(obs->data.draw_callbacks, &data);
128
+   pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
129
+}
130
+
131
+void obs_remove_main_render_callback(
132
+       void (*draw)(void *param, uint32_t cx, uint32_t cy),
133
+       void *param)
134
+{
135
+   if (!obs)
136
+       return;
137
+
138
+   struct draw_callback data = {draw, param};
139
+
140
+   pthread_mutex_lock(&obs->data.draw_callbacks_mutex);
141
+   da_erase_item(obs->data.draw_callbacks, &data);
142
+   pthread_mutex_unlock(&obs->data.draw_callbacks_mutex);
143
+}
144
+
145
+uint32_t obs_get_total_frames(void)
146
+{
147
+   return obs ? obs->video.total_frames : 0;
148
+}
149
+
150
+uint32_t obs_get_lagged_frames(void)
151
+{
152
+   return obs ? obs->video.lagged_frames : 0;
153
+}
154
obs-studio-18.0.2.tar.xz/libobs/obs.h -> obs-studio-19.0.2.tar.xz/libobs/obs.h Changed
91
 
1
@@ -591,6 +591,13 @@
2
 EXPORT bool obs_set_audio_monitoring_device(const char *name, const char *id);
3
 EXPORT void obs_get_audio_monitoring_device(const char **name, const char **id);
4
 
5
+EXPORT void obs_add_main_render_callback(
6
+       void (*draw)(void *param, uint32_t cx, uint32_t cy),
7
+       void *param);
8
+EXPORT void obs_remove_main_render_callback(
9
+       void (*draw)(void *param, uint32_t cx, uint32_t cy),
10
+       void *param);
11
+
12
 
13
 /* ------------------------------------------------------------------------- */
14
 /* View context */
15
@@ -620,6 +627,10 @@
16
 EXPORT uint64_t obs_get_video_frame_time(void);
17
 
18
 EXPORT double obs_get_active_fps(void);
19
+EXPORT uint64_t obs_get_average_frame_time_ns(void);
20
+
21
+EXPORT uint32_t obs_get_total_frames(void);
22
+EXPORT uint32_t obs_get_lagged_frames(void);
23
 
24
 
25
 /* ------------------------------------------------------------------------- */
26
@@ -760,6 +771,9 @@
27
  */
28
 EXPORT obs_source_t *obs_filter_get_target(const obs_source_t *filter);
29
 
30
+/** Used to directly render a non-async source without any filter processing */
31
+EXPORT void obs_source_default_render(obs_source_t *source);
32
+
33
 /** Adds a filter to the source (which is used whenever the source is used) */
34
 EXPORT void obs_source_filter_add(obs_source_t *source, obs_source_t *filter);
35
 
36
@@ -823,8 +837,8 @@
37
  */
38
 EXPORT bool obs_source_showing(const obs_source_t *source);
39
 
40
-/** Specifies that async video frames should be played as soon as possible */
41
-#define OBS_SOURCE_FLAG_UNBUFFERED             (1<<0)
42
+/** Unused flag */
43
+#define OBS_SOURCE_FLAG_UNUSED_1               (1<<0)
44
 /** Specifies to force audio to mono */
45
 #define OBS_SOURCE_FLAG_FORCE_MONO             (1<<1)
46
 
47
@@ -1089,6 +1103,10 @@
48
 EXPORT void obs_source_get_audio_mix(const obs_source_t *source,
49
        struct obs_source_audio_mix *audio);
50
 
51
+EXPORT void obs_source_set_async_unbuffered(obs_source_t *source,
52
+       bool unbuffered);
53
+EXPORT bool obs_source_async_unbuffered(const obs_source_t *source);
54
+
55
 /* ------------------------------------------------------------------------- */
56
 /* Transition-specific functions */
57
 enum obs_transition_target {
58
@@ -1203,6 +1221,9 @@
59
 EXPORT obs_sceneitem_t *obs_scene_find_source(obs_scene_t *scene,
60
        const char *name);
61
 
62
+EXPORT obs_sceneitem_t *obs_scene_find_sceneitem_by_id(obs_scene_t *scene,
63
+       int64_t id);
64
+
65
 /** Enumerates sources within a scene */
66
 EXPORT void obs_scene_enum_items(obs_scene_t *scene,
67
        bool (*callback)(obs_scene_t*, obs_sceneitem_t*, void*),
68
@@ -1251,6 +1272,8 @@
69
 EXPORT void obs_sceneitem_set_bounds(obs_sceneitem_t *item,
70
        const struct vec2 *bounds);
71
 
72
+EXPORT int64_t obs_sceneitem_get_id(const obs_sceneitem_t *item);
73
+
74
 EXPORT void  obs_sceneitem_get_pos(const obs_sceneitem_t *item,
75
        struct vec2 *pos);
76
 EXPORT float obs_sceneitem_get_rot(const obs_sceneitem_t *item);
77
@@ -1489,6 +1512,13 @@
78
 #endif
79
 
80
 EXPORT float obs_output_get_congestion(obs_output_t *output);
81
+EXPORT int obs_output_get_connect_time_ms(obs_output_t *output);
82
+
83
+EXPORT bool obs_output_reconnecting(const obs_output_t *output);
84
+
85
+/** Pass a string of the last output error, for UI use */
86
+EXPORT void obs_output_set_last_error(obs_output_t *output,
87
+       const char *message);
88
 
89
 /* ------------------------------------------------------------------------- */
90
 /* Functions used by outputs */
91
obs-studio-18.0.2.tar.xz/libobs/util/config-file.c -> obs-studio-19.0.2.tar.xz/libobs/util/config-file.c Changed
18
 
1
@@ -445,14 +445,10 @@
2
        if (*backup_ext != '.')
3
            dstr_cat(&backup_file, ".");
4
        dstr_cat(&backup_file, backup_ext);
5
-
6
-       os_unlink(backup_file.array);
7
-       os_rename(file, backup_file.array);
8
-   } else {
9
-       os_unlink(file);
10
    }
11
 
12
-   os_rename(temp_file.array, file);
13
+   if (os_safe_replace(file, temp_file.array, backup_file.array) != 0)
14
+       ret = CONFIG_ERROR;
15
 
16
 cleanup:
17
    pthread_mutex_unlock(&config->mutex);
18
obs-studio-18.0.2.tar.xz/libobs/util/dstr.c -> obs-studio-19.0.2.tar.xz/libobs/util/dstr.c Changed
31
 
1
@@ -197,6 +197,11 @@
2
    return NULL;
3
 }
4
 
5
+static inline bool is_padding(char ch)
6
+{
7
+   return ch == ' ' || ch == '\t' || ch == '\n' || ch == '\r';
8
+}
9
+
10
 char *strdepad(char *str)
11
 {
12
    char *temp;
13
@@ -210,7 +215,7 @@
14
    temp = str;
15
 
16
    /* remove preceding spaces/tabs */
17
-   while (*temp == ' ' || *temp == '\t')
18
+   while (is_padding(*temp))
19
        ++temp;
20
 
21
    len = strlen(str);
22
@@ -219,7 +224,7 @@
23
 
24
    if (len) {
25
        temp = str + (len-1);
26
-       while (*temp == ' ' || *temp == '\t')
27
+       while (is_padding(*temp))
28
            *(temp--) = 0;
29
    }
30
 
31
obs-studio-18.0.2.tar.xz/libobs/util/platform-cocoa.m -> obs-studio-19.0.2.tar.xz/libobs/util/platform-cocoa.m Changed
52
 
1
@@ -22,6 +22,8 @@
2
 #include <dlfcn.h>
3
 #include <time.h>
4
 #include <unistd.h>
5
+#include <sys/types.h>
6
+#include <sys/sysctl.h>
7
 
8
 #include <CoreServices/CoreServices.h>
9
 #include <mach/mach.h>
10
@@ -312,3 +314,41 @@
11
        bfree(info);
12
    }
13
 }
14
+
15
+static int physical_cores = 0;
16
+static int logical_cores = 0;
17
+static bool core_count_initialized = false;
18
+
19
+static void os_get_cores_internal(void)
20
+{
21
+   if (core_count_initialized)
22
+       return;
23
+
24
+   core_count_initialized = true;
25
+
26
+   size_t size;
27
+   int    ret;
28
+
29
+   size = sizeof(physical_cores);
30
+   ret = sysctlbyname("machdep.cpu.core_count", &physical_cores,
31
+           &size, NULL, 0);
32
+   if (ret != 0)
33
+       return;
34
+
35
+   ret = sysctlbyname("machdep.cpu.thread_count", &logical_cores,
36
+           &size, NULL, 0);
37
+}
38
+
39
+int os_get_physical_cores(void)
40
+{
41
+   if (!core_count_initialized)
42
+       os_get_cores_internal();
43
+   return physical_cores;
44
+}
45
+
46
+int os_get_logical_cores(void)
47
+{
48
+   if (!core_count_initialized)
49
+       os_get_cores_internal();
50
+   return logical_cores;
51
+}
52
obs-studio-18.0.2.tar.xz/libobs/util/platform-nix.c -> obs-studio-19.0.2.tar.xz/libobs/util/platform-nix.c Changed
85
 
1
@@ -432,6 +432,13 @@
2
    return rename(old_path, new_path);
3
 }
4
 
5
+int os_safe_replace(const char *target, const char *from, const char *backup)
6
+{
7
+   if (backup && os_file_exists(target) && rename(target, backup) != 0)
8
+       return -1;
9
+   return rename(from, target);
10
+}
11
+
12
 #if !defined(__APPLE__)
13
 os_performance_token_t *os_request_high_performance(const char *reason)
14
 {
15
@@ -615,3 +622,69 @@
16
 {
17
    raise(SIGTRAP);
18
 }
19
+
20
+#ifndef __APPLE__
21
+static int physical_cores = 0;
22
+static int logical_cores = 0;
23
+static bool core_count_initialized = false;
24
+
25
+/* return sysconf(_SC_NPROCESSORS_ONLN); */
26
+
27
+static void os_get_cores_internal(void)
28
+{
29
+   if (core_count_initialized)
30
+       return;
31
+
32
+   core_count_initialized = true;
33
+
34
+   logical_cores = sysconf(_SC_NPROCESSORS_ONLN);
35
+
36
+#ifndef __linux__
37
+   physical_cores = logical_cores;
38
+#else
39
+   char *text = os_quick_read_utf8_file("/proc/cpuinfo");
40
+   char *core_id = text;
41
+
42
+   if (!text || !*text) {
43
+       physical_cores = logical_cores;
44
+       return;
45
+   }
46
+
47
+   for (;;) {
48
+       core_id = strstr(core_id, "\ncore id");
49
+       if (!core_id)
50
+           break;
51
+       physical_cores++;
52
+       core_id++;
53
+   }
54
+
55
+   if (physical_cores == 0)
56
+       physical_cores = logical_cores;
57
+
58
+   bfree(text);
59
+#endif
60
+}
61
+
62
+int os_get_physical_cores(void)
63
+{
64
+   if (!core_count_initialized)
65
+       os_get_cores_internal();
66
+   return physical_cores;
67
+}
68
+
69
+int os_get_logical_cores(void)
70
+{
71
+   if (!core_count_initialized)
72
+       os_get_cores_internal();
73
+   return logical_cores;
74
+}
75
+#endif
76
+
77
+uint64_t os_get_free_disk_space(const char *dir)
78
+{
79
+   struct statvfs info;
80
+   if (statvfs(dir, &info) != 0)
81
+       return 0;
82
+
83
+   return (uint64_t)info.f_frsize * (uint64_t)info.f_bavail;
84
+}
85
obs-studio-18.0.2.tar.xz/libobs/util/platform-windows.c -> obs-studio-19.0.2.tar.xz/libobs/util/platform-windows.c Changed
132
 
1
@@ -549,7 +549,8 @@
2
        goto error;
3
    }
4
 
5
-   code = MoveFileW(old_path_utf16, new_path_utf16) ? 0 : -1;
6
+   code = MoveFileExW(old_path_utf16, new_path_utf16,
7
+           MOVEFILE_REPLACE_EXISTING) ? 0 : -1;
8
 
9
 error:
10
    bfree(old_path_utf16);
11
@@ -557,6 +558,36 @@
12
    return code;
13
 }
14
 
15
+int os_safe_replace(const char *target, const char *from, const char *backup)
16
+{
17
+   wchar_t *wtarget = NULL;
18
+   wchar_t *wfrom = NULL;
19
+   wchar_t *wbackup = NULL;
20
+   int code = -1;
21
+
22
+   if (!target || !from)
23
+       return -1;
24
+   if (!os_utf8_to_wcs_ptr(target, 0, &wtarget))
25
+       return -1;
26
+   if (!os_utf8_to_wcs_ptr(from, 0, &wfrom))
27
+       goto fail;
28
+   if (backup && !os_utf8_to_wcs_ptr(backup, 0, &wbackup))
29
+       goto fail;
30
+
31
+   if (ReplaceFileW(wtarget, wfrom, wbackup, 0, NULL, NULL)) {
32
+       code = 0;
33
+   } else if (GetLastError() == ERROR_FILE_NOT_FOUND) {
34
+       code = MoveFileExW(wfrom, wtarget, MOVEFILE_REPLACE_EXISTING)
35
+           ? 0 : -1;
36
+   }
37
+
38
+fail:
39
+   bfree(wtarget);
40
+   bfree(wfrom);
41
+   bfree(wbackup);
42
+   return code;
43
+}
44
+
45
 BOOL WINAPI DllMain(HINSTANCE hinst_dll, DWORD reason, LPVOID reserved)
46
 {
47
    switch (reason) {
48
@@ -848,3 +879,83 @@
49
 {
50
    __debugbreak();
51
 }
52
+
53
+DWORD num_logical_cores(ULONG_PTR mask)
54
+{
55
+   DWORD     left_shift    = sizeof(ULONG_PTR) * 8 - 1;
56
+   DWORD     bit_set_count = 0;
57
+   ULONG_PTR bit_test      = (ULONG_PTR)1 << left_shift;
58
+
59
+   for (DWORD i = 0; i <= left_shift; ++i) {
60
+       bit_set_count += ((mask & bit_test) ? 1 : 0);
61
+       bit_test      /= 2;
62
+   }
63
+
64
+   return bit_set_count;
65
+}
66
+
67
+static int physical_cores = 0;
68
+static int logical_cores = 0;
69
+static bool core_count_initialized = false;
70
+
71
+static void os_get_cores_internal(void)
72
+{
73
+   PSYSTEM_LOGICAL_PROCESSOR_INFORMATION info = NULL, temp = NULL;
74
+   DWORD len = 0;
75
+
76
+   if (core_count_initialized)
77
+       return;
78
+
79
+   core_count_initialized = true;
80
+
81
+   GetLogicalProcessorInformation(info, &len);
82
+   if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
83
+       return;
84
+
85
+   info = malloc(len);
86
+
87
+   if (GetLogicalProcessorInformation(info, &len)) {
88
+       DWORD num = len / sizeof(*info);
89
+       temp = info;
90
+
91
+       for (DWORD i = 0; i < num; i++) {
92
+           if (temp->Relationship == RelationProcessorCore) {
93
+               ULONG_PTR mask = temp->ProcessorMask;
94
+
95
+               physical_cores++;
96
+               logical_cores += num_logical_cores(mask);
97
+           }
98
+
99
+           temp++;
100
+       }
101
+   }
102
+
103
+   free(info);
104
+}
105
+
106
+int os_get_physical_cores(void)
107
+{
108
+   if (!core_count_initialized)
109
+       os_get_cores_internal();
110
+   return physical_cores;
111
+}
112
+
113
+int os_get_logical_cores(void)
114
+{
115
+   if (!core_count_initialized)
116
+       os_get_cores_internal();
117
+   return logical_cores;
118
+}
119
+
120
+uint64_t os_get_free_disk_space(const char *dir)
121
+{
122
+   wchar_t *wdir = NULL;
123
+   if (!os_utf8_to_wcs_ptr(dir, 0, &wdir))
124
+       return 0;
125
+
126
+   ULARGE_INTEGER free;
127
+   bool success = !!GetDiskFreeSpaceExW(wdir, &free, NULL, NULL);
128
+   bfree(wdir);
129
+
130
+   return success ? free.QuadPart : 0;
131
+}
132
obs-studio-18.0.2.tar.xz/libobs/util/platform.c -> obs-studio-19.0.2.tar.xz/libobs/util/platform.c Changed
37
 
1
@@ -248,6 +248,7 @@
2
    if (mbs_len)
3
        fwrite(mbs, 1, mbs_len, f);
4
    bfree(mbs);
5
+   fflush(f);
6
    fclose(f);
7
 
8
    return true;
9
@@ -264,6 +265,7 @@
10
        fwrite("\xEF\xBB\xBF", 1, 3, f);
11
    if (len)
12
        fwrite(str, 1, len, f);
13
+   fflush(f);
14
    fclose(f);
15
 
16
    return true;
17
@@ -297,17 +299,10 @@
18
        if (*backup_ext != '.')
19
            dstr_cat(&backup_path, ".");
20
        dstr_cat(&backup_path, backup_ext);
21
-
22
-       os_unlink(backup_path.array);
23
-       os_rename(path, backup_path.array);
24
-
25
-       dstr_free(&backup_path);
26
-   } else {
27
-       os_unlink(path);
28
    }
29
 
30
-   os_rename(temp_path.array, path);
31
-   success = true;
32
+   if (os_safe_replace(path, temp_path.array, backup_path.array) == 0)
33
+       success = true;
34
 
35
 cleanup:
36
    dstr_free(&backup_path);
37
obs-studio-18.0.2.tar.xz/libobs/util/platform.h -> obs-studio-19.0.2.tar.xz/libobs/util/platform.h Changed
29
 
1
@@ -153,6 +153,8 @@
2
 EXPORT char *os_getcwd(char *path, size_t size);
3
 EXPORT int os_chdir(const char *path);
4
 
5
+EXPORT uint64_t os_get_free_disk_space(const char *dir);
6
+
7
 #define MKDIR_EXISTS   1
8
 #define MKDIR_SUCCESS  0
9
 #define MKDIR_ERROR   -1
10
@@ -161,6 +163,8 @@
11
 EXPORT int os_mkdirs(const char *path);
12
 EXPORT int os_rename(const char *old_path, const char *new_path);
13
 EXPORT int os_copyfile(const char *file_in, const char *file_out);
14
+EXPORT int os_safe_replace(const char *target_path, const char *from_path,
15
+       const char *backup_path);
16
 
17
 EXPORT char *os_generate_formatted_filename(const char *extension, bool space,
18
        const char *format);
19
@@ -174,6 +178,9 @@
20
 
21
 EXPORT void os_breakpoint(void);
22
 
23
+EXPORT int os_get_physical_cores(void);
24
+EXPORT int os_get_logical_cores(void);
25
+
26
 #ifdef _MSC_VER
27
 #define strtoll _strtoi64
28
 #if _MSC_VER < 1900
29
obs-studio-18.0.2.tar.xz/libobs/util/util.hpp -> obs-studio-19.0.2.tar.xz/libobs/util/util.hpp Changed
10
 
1
@@ -46,6 +46,8 @@
2
    inline bool operator!()     {return ptr == NULL;}
3
    inline bool operator==(T p) {return ptr == p;}
4
    inline bool operator!=(T p) {return ptr != p;}
5
+
6
+   inline T *Get() const       {return ptr;}
7
 };
8
 
9
 class ConfigFile {
10
obs-studio-19.0.2.tar.xz/plugins/coreaudio-encoder/data/locale/bn-BD.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+CoreAudioAAC="CoreAudio AAC এনকোডার"
3
+Bitrate="বিটরেট"
4
+OutputSamplerate="আউটপুট নমুনার হার"
5
+UseInputSampleRate="ইনপুট (OBS) নমুনা রেট (অসমর্থিত bitrates তালিকা হতে পারে) ব্যবহার করুন"
6
+
7
obs-studio-18.0.2.tar.xz/plugins/decklink/audio-repack.c -> obs-studio-19.0.2.tar.xz/plugins/decklink/audio-repack.c Changed
28
 
1
@@ -25,7 +25,7 @@
2
    squash data array
3
 
4
    | FL | FR |LFE | FC | BL | BR |emp |emp |
5
-    |    |       x      |    |
6
+     |    |       x      |    |
7
    | FL | FR | FC |LFE | BL | BR |
8
  */
9
 int repack_8to6ch_swap23(struct audio_repack *repack,
10
@@ -34,8 +34,6 @@
11
    if (check_buffer(repack, frame_count) < 0)
12
        return -1;
13
 
14
-   const uint32_t size = frame_count * repack->base_src_size;
15
-
16
    const __m128i *src = (__m128i *)bsrc;
17
    const __m128i *esrc = src + frame_count;
18
    uint32_t *dst = (uint32_t *)repack->packet_buffer;
19
@@ -62,8 +60,6 @@
20
    if (check_buffer(repack, frame_count) < 0)
21
        return -1;
22
 
23
-   const uint32_t size = frame_count * repack->base_src_size;
24
-
25
    const __m128i *src = (__m128i *)bsrc;
26
    const __m128i *esrc = src + frame_count;
27
    __m128i *dst = (__m128i *)repack->packet_buffer;
28
obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/bn-BD.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+BlackmagicDevice="Blackmagic যন্ত্র"
3
+Device="ডিভাইস"
4
+PixelFormat="পিক্সেল বিন্যাস"
5
+
6
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/ca-ES.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Mode"
3
 Buffering="Usa memòria intermèdia"
4
 PixelFormat="Format de píxel"
5
+ChannelFormat="Canal"
6
+ChannelFormat.None="Cap"
7
+ChannelFormat.2_0ch="Estèreo "
8
+ChannelFormat.5_1ch="5.1"
9
+ChannelFormat.5_1chBack="5.1 (posterior)"
10
+ChannelFormat.7_1ch="7.1"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/cs-CZ.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Mód"
3
 Buffering="Použít vyrovnávací paměť"
4
 PixelFormat="Formát pixelů"
5
+ChannelFormat="Kanály"
6
+ChannelFormat.None="Žádný"
7
+ChannelFormat.2_0ch="Stereo"
8
+ChannelFormat.5_1ch="5.1"
9
+ChannelFormat.5_1chBack="5.1 (zadní)"
10
+ChannelFormat.7_1ch="7.1"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/da-DK.ini Changed
15
 
1
@@ -1,6 +1,12 @@
2
-BlackmagicDevice="Blackmagic enhed"
3
+BlackmagicDevice="Blackmagic-enhed"
4
 Device="Enhed"
5
 Mode="Tilstand"
6
 Buffering="Brug buffering"
7
 PixelFormat="Pixel format"
8
+ChannelFormat="Kanal"
9
+ChannelFormat.None="Intet"
10
+ChannelFormat.2_0ch="2kan"
11
+ChannelFormat.5_1ch="5.1kan"
12
+ChannelFormat.5_1chBack="5.1kan (bag)"
13
+ChannelFormat.7_1ch="7.1kan"
14
 
15
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/de-DE.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Modus"
3
 Buffering="Buffering benutzen"
4
 PixelFormat="Pixelformat"
5
+ChannelFormat="Kanal"
6
+ChannelFormat.None="Keins"
7
+ChannelFormat.2_0ch="2 Kanal"
8
+ChannelFormat.5_1ch="5.1 Kanal"
9
+ChannelFormat.5_1chBack="5.1 Kanal (hinten)"
10
+ChannelFormat.7_1ch="7.1 Kanal"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/es-ES.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Modo"
3
 Buffering="Utilizar el almacenamiento en búfer"
4
 PixelFormat="Formato de píxel"
5
+ChannelFormat="Canal"
6
+ChannelFormat.None="Ninguno"
7
+ChannelFormat.2_0ch="Estéreo "
8
+ChannelFormat.5_1ch="5.1"
9
+ChannelFormat.5_1chBack="5.1 (posterior)"
10
+ChannelFormat.7_1ch="7.1"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/eu-ES.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Modua"
3
 Buffering="Erabili Bufferreratzea"
4
 PixelFormat="Pixel formatua"
5
+ChannelFormat="Kanala"
6
+ChannelFormat.None="Ezer ez"
7
+ChannelFormat.2_0ch="2k"
8
+ChannelFormat.5_1ch="5.1k"
9
+ChannelFormat.5_1chBack="5.1k (Atzera)"
10
+ChannelFormat.7_1ch="7.1k"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/fi-FI.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Tila"
3
 Buffering="Käytä puskurointia"
4
 PixelFormat="Pikselimuoto"
5
+ChannelFormat="Kanava"
6
+ChannelFormat.None="Ei mitään"
7
+ChannelFormat.2_0ch="2ch"
8
+ChannelFormat.5_1ch="5.1ch"
9
+ChannelFormat.5_1chBack="5.1ch (Taka)"
10
+ChannelFormat.7_1ch="7.1ch"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/fr-FR.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Mode"
3
 Buffering="Utiliser la mise en mémoire tampon"
4
 PixelFormat="Format de pixel"
5
+ChannelFormat="Canaux audio"
6
+ChannelFormat.None="Aucun"
7
+ChannelFormat.2_0ch="canal 2"
8
+ChannelFormat.5_1ch="canal 5.1"
9
+ChannelFormat.5_1chBack="canal (arrière) 5.1"
10
+ChannelFormat.7_1ch="canal 7.1"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/hu-HU.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Mód"
3
 Buffering="Pufferelés használata"
4
 PixelFormat="Képpont formátum"
5
+ChannelFormat="Csatorna"
6
+ChannelFormat.None="Nincs"
7
+ChannelFormat.2_0ch="2cs"
8
+ChannelFormat.5_1ch="5.1cs"
9
+ChannelFormat.5_1chBack="5.1cs (Hátsó)"
10
+ChannelFormat.7_1ch="7.1cs"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/it-IT.ini Changed
16
 
1
@@ -1,6 +1,12 @@
2
 BlackmagicDevice="Blackmagic Device"
3
 Device="Dispositivo"
4
 Mode="Modalità"
5
-Buffering="Usa Buffer"
6
-PixelFormat="Formato Pixel"
7
+Buffering="Usa buffer"
8
+PixelFormat="Formato pixel"
9
+ChannelFormat="Canale"
10
+ChannelFormat.None="Nessuno"
11
+ChannelFormat.2_0ch="2 canali"
12
+ChannelFormat.5_1ch="5.1 canali"
13
+ChannelFormat.5_1chBack="5.1 canali (retro)"
14
+ChannelFormat.7_1ch="7.1 canali"
15
 
16
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/ja-JP.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="モード"
3
 Buffering="バッファリングを使用する"
4
 PixelFormat="ピクセルフォーマット"
5
+ChannelFormat="チャンネル"
6
+ChannelFormat.None="未設定"
7
+ChannelFormat.2_0ch="2ch"
8
+ChannelFormat.5_1ch="5.1ch"
9
+ChannelFormat.5_1chBack="5.1ch (背部)"
10
+ChannelFormat.7_1ch="7.1ch"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/ko-KR.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="방식"
3
 Buffering="버퍼링 사용"
4
 PixelFormat="픽셀 형식"
5
+ChannelFormat="채널"
6
+ChannelFormat.None="없음"
7
+ChannelFormat.2_0ch="2채널"
8
+ChannelFormat.5_1ch="5.1채널"
9
+ChannelFormat.5_1chBack="5.1채널 (후면)"
10
+ChannelFormat.7_1ch="7.1채널"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/nl-NL.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Modus"
3
 Buffering="Buffering Gebruiken"
4
 PixelFormat="Pixelindeling"
5
+ChannelFormat="Kanaal"
6
+ChannelFormat.None="Geen"
7
+ChannelFormat.2_0ch="2ch"
8
+ChannelFormat.5_1ch="5.1ch"
9
+ChannelFormat.5_1chBack="5.1ch (Achter)"
10
+ChannelFormat.7_1ch="7.1ch"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/pl-PL.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Tryb"
3
 Buffering="Użyj buforowania"
4
 PixelFormat="Format pikseli"
5
+ChannelFormat="Kanały"
6
+ChannelFormat.None="Brak"
7
+ChannelFormat.2_0ch="2.0"
8
+ChannelFormat.5_1ch="5.1"
9
+ChannelFormat.5_1chBack="5.1 (tylne)"
10
+ChannelFormat.7_1ch="7.1"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/pt-BR.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Modo"
3
 Buffering="Utilizar Buffering"
4
 PixelFormat="Formato de Pixel"
5
+ChannelFormat="Canal"
6
+ChannelFormat.None="Nenhum"
7
+ChannelFormat.2_0ch="2.0"
8
+ChannelFormat.5_1ch="5.1"
9
+ChannelFormat.5_1chBack="5.1 (Traseiro)"
10
+ChannelFormat.7_1ch="7.1"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/ru-RU.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Режим"
3
 Buffering="Использовать буферизацию"
4
 PixelFormat="Формат пикселей"
5
+ChannelFormat="Конфигурация каналов"
6
+ChannelFormat.None="Нет"
7
+ChannelFormat.2_0ch="2-канальный"
8
+ChannelFormat.5_1ch="5.1-канальный"
9
+ChannelFormat.5_1chBack="5.1-канальный (Тыловой)"
10
+ChannelFormat.7_1ch="7.1-канальный"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/sv-SE.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Läge"
3
 Buffering="Använd buffert"
4
 PixelFormat="Bildpunktsformat"
5
+ChannelFormat="Kanal"
6
+ChannelFormat.None="Ingen"
7
+ChannelFormat.2_0ch="2ch"
8
+ChannelFormat.5_1ch="5.1ch"
9
+ChannelFormat.5_1chBack="5.1ch (bakom)"
10
+ChannelFormat.7_1ch="7.1ch"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/tr-TR.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Mod"
3
 Buffering="Arabelleği Kullan"
4
 PixelFormat="Piksel Biçimi"
5
+ChannelFormat="Kanal"
6
+ChannelFormat.None="Hiçbiri"
7
+ChannelFormat.2_0ch="2ch"
8
+ChannelFormat.5_1ch="5.1ch"
9
+ChannelFormat.5_1chBack="5.1ch (Arka)"
10
+ChannelFormat.7_1ch="7.1ch"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/uk-UA.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="Режим"
3
 Buffering="Увімкнути буферизацію"
4
 PixelFormat="Формат пікселів"
5
+ChannelFormat="Звук (канали)"
6
+ChannelFormat.None="Немає"
7
+ChannelFormat.2_0ch="2-канальний"
8
+ChannelFormat.5_1ch="5.1-канальний"
9
+ChannelFormat.5_1chBack="5.1-канальний (Back)"
10
+ChannelFormat.7_1ch="7.1-канальний"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/zh-CN.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="模式"
3
 Buffering="使用缓冲"
4
 PixelFormat="像素格式"
5
+ChannelFormat="频道"
6
+ChannelFormat.None="无"
7
+ChannelFormat.2_0ch="2ch"
8
+ChannelFormat.5_1ch="5.1ch"
9
+ChannelFormat.5_1chBack="5.1ch (后)"
10
+ChannelFormat.7_1ch="7.1ch"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/decklink/data/locale/zh-TW.ini Changed
12
 
1
@@ -3,4 +3,10 @@
2
 Mode="模式"
3
 Buffering="使用緩衝"
4
 PixelFormat="像素格式"
5
+ChannelFormat="聲道"
6
+ChannelFormat.None="無"
7
+ChannelFormat.2_0ch="雙聲道"
8
+ChannelFormat.5_1ch="5.1聲道"
9
+ChannelFormat.5_1chBack="5.1聲道(後置環繞喇叭)"
10
+ChannelFormat.7_1ch="7.1聲道"
11
 
12
obs-studio-18.0.2.tar.xz/plugins/decklink/decklink-device.cpp -> obs-studio-19.0.2.tar.xz/plugins/decklink/decklink-device.cpp Changed
10
 
1
@@ -128,7 +128,7 @@
2
    return name;
3
 }
4
 
5
-const int32_t DeckLinkDevice::GetMaxChannel(void) const
6
+int32_t DeckLinkDevice::GetMaxChannel(void) const
7
 {
8
    return maxChannel;
9
 }
10
obs-studio-18.0.2.tar.xz/plugins/decklink/decklink-device.hpp -> obs-studio-19.0.2.tar.xz/plugins/decklink/decklink-device.hpp Changed
10
 
1
@@ -31,7 +31,7 @@
2
    const std::string& GetHash(void) const;
3
    const std::vector<DeckLinkDeviceMode *>& GetModes(void) const;
4
    const std::string& GetName(void) const;
5
-   const int32_t GetMaxChannel(void) const;
6
+   int32_t GetMaxChannel(void) const;
7
 
8
    bool GetInput(IDeckLinkInput **input);
9
 
10
obs-studio-18.0.2.tar.xz/plugins/decklink/linux/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/decklink/linux/CMakeLists.txt Changed
12
 
1
@@ -1,5 +1,10 @@
2
 project(linux-decklink)
3
 
4
+if(DISABLE_DECKLINK)
5
+   message(STATUS "decklink plugin disabled")
6
+   return()
7
+endif()
8
+
9
 set(linux-decklink-sdk_HEADERS
10
    decklink-sdk/DeckLinkAPI.h
11
    decklink-sdk/DeckLinkAPIConfiguration.h
12
obs-studio-18.0.2.tar.xz/plugins/decklink/mac/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/decklink/mac/CMakeLists.txt Changed
12
 
1
@@ -1,5 +1,10 @@
2
 project(mac-decklink)
3
 
4
+if(DISABLE_DECKLINK)
5
+   message(STATUS "decklink plugin disabled")
6
+   return()
7
+endif()
8
+
9
 find_library(COREFOUNDATION CoreFoundation)
10
 
11
 include_directories(${COREFOUNDATION})
12
obs-studio-18.0.2.tar.xz/plugins/decklink/plugin-main.cpp -> obs-studio-19.0.2.tar.xz/plugins/decklink/plugin-main.cpp Changed
15
 
1
@@ -31,12 +31,7 @@
2
 static void decklink_enable_buffering(DeckLink *decklink, bool enabled)
3
 {
4
    obs_source_t *source = decklink->GetSource();
5
-   uint32_t flags = obs_source_get_flags(source);
6
-   if (enabled)
7
-       flags &= ~OBS_SOURCE_FLAG_UNBUFFERED;
8
-   else
9
-       flags |= OBS_SOURCE_FLAG_UNBUFFERED;
10
-   obs_source_set_flags(source, flags);
11
+   obs_source_set_async_unbuffered(source, !enabled);
12
 }
13
 
14
 static void *decklink_create(obs_data_t *settings, obs_source_t *source)
15
obs-studio-18.0.2.tar.xz/plugins/decklink/win/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/decklink/win/CMakeLists.txt Changed
12
 
1
@@ -1,5 +1,10 @@
2
 project(win-decklink)
3
 
4
+if(DISABLE_DECKLINK)
5
+   message(STATUS "decklink plugin disabled")
6
+   return()
7
+endif()
8
+
9
 include(IDLFileHelper)
10
 
11
 set(win-decklink-sdk_IDLS
12
obs-studio-18.0.2.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md Changed
44
 
1
@@ -1,13 +1,36 @@
2
-# 2.0.0.0 - The 'Ashes of the Phoenix' Update
3
-The plugin rises from the no-update-phase back to bring you an even better experience with High Efficiency Video Coding (HEVC) encoding, Variance Based Adaptive Quantitization (VBAQ), Pre-Pass support and Asynchronous Queue mode.
4
+# 2.1.5 - Now with full-range colors! (Hotfix 2)
5
+Gone are the days of boring bland partial range recordings, here are the days of full range videos! With 2.1 the plugin implements several much wanted features, upgrading a few features from experimental to normal use and fixing a bunch of potential bugs.
6
 
7
-High Efficiency Video Coding (H265/HEVC) is available on the Polaris architecture and offers massively better quality for the same bitrate, essentially resulting in lower bitrates looking much better. This means that at 1000 kbit H265/HEVC you can get close or surpass the quality of 2500 kbit H264/AVC in many types of scenes and motion. Unfortunately it never took off as it only got slightly better quality than VP9 and AV1 is already beating it in terms of speed and quality.
8
+Hotfix 1: 'Encoding overloaded!' should no longer show up for systems which were perfectly capable recording at the same fps in versions before 2.x. Also fixed debug log lines showing up without the Debug option being checked.
9
+Hotfix 2: Added a workaround for a Driver-induced crash when running 32-bit OBS Studio.
10
 
11
-Variance Based Adaptive Quantitization (VBAQ) and Pre-Pass are both methods to better distribute the Bitrate in a given frame. VBAQ works on the principle of visual perception, while Pre-Pass looks at which areas need more Bitrate to not end up being blocky. Enabling both will result in a much better output with no change in Bitrate.
12
+## Changelog
13
+### 2.1.5
14
+* Added a workaround for a 32-bit crash caused by AMD Driver 17.5.2 and earlier.
15
 
16
-Asynchronous Queue is a new feature that used to be the standard behaviour in earlier versions. Since no two CPUs are the same, Asynchronous Queue offers a way to use multiple cores of the CPU for the encoding task, instead of just handling everything on a single core. This feature is in very early stages, so it will probably cause issues unless absolutely needed.
17
+### 2.1.4
18
+* Updated translations from CrowdIn and fixed a typo in en-US.
19
 
20
-## Changelog
21
+### 2.1.3
22
+* Fixed debug log lines showing up even though 'Debug' wasn't checked.
23
+* Fixed 'Encoding overloaded!' by making Asynchronous Queue the default behaviour and removing that option.
24
+* Added 'Multi-Threading' and 'Queue Size' option which can be used to fine-tune the Asynchronous Queue behaviour.
25
+
26
+### 2.1.2
27
+* Fixed full range color causing crushed blacks and whites.
28
+* Further improved the internal main encoding loop code.
29
+
30
+### 2.1.1
31
+* Updated Translations from CrowdIn.
32
+* Fixed plugin starting encoding before encoder is actually ready.
33
+* Fixed some properties not being applied.
34
+
35
+### 2.1.0
36
+* Fixed B-Frames not working properly. (#234)
37
+* Added experimental I/P/B/Skip Period and Interval. (#220)
38
+* Fixed a possible crash with OBS calling functions on a destroyed instance.
39
+
40
+### 2.0.0
41
 * Redesigned the internal structure to be much faster for much less CPU usage.
42
 * Fixed several object lifetime issues that were only visible while debugging.
43
 * Massively improved capability testing which now allows us to see the exact limits of the encoder.
44
obs-studio-18.0.2.tar.xz/plugins/enc-amf/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/CMakeLists.txt Changed
71
 
1
@@ -6,7 +6,7 @@
2
 ################################################################################
3
 SET(enc-amf_VERSION_MAJOR 2)
4
 SET(enc-amf_VERSION_MINOR 1)
5
-SET(enc-amf_VERSION_PATCH 0)
6
+SET(enc-amf_VERSION_PATCH 5)
7
 configure_file(
8
    "${PROJECT_SOURCE_DIR}/#Resources/package.in.bat"
9
    "${PROJECT_SOURCE_DIR}/#Resources/package.bat"
10
@@ -27,6 +27,10 @@
11
    "Include/amf.h"
12
    "Include/amf-capabilities.h"
13
    "Include/amf-encoder.h"
14
+   "Include/amf-encoder-h264.h"
15
+   "Include/enc-h264.h"
16
+   "Include/amf-encoder-h265.h"
17
+   "Include/enc-h265.h"
18
    "Include/api-base.h"
19
    "Include/api-host.h"
20
    "Include/api-opengl.h"
21
@@ -39,6 +43,10 @@
22
    "Source/amf.cpp"
23
    "Source/amf-capabilities.cpp"
24
    "Source/amf-encoder.cpp"
25
+   "Source/amf-encoder-h264.cpp"
26
+   "Source/enc-h264.cpp"
27
+   "Source/amf-encoder-h265.cpp"
28
+   "Source/enc-h265.cpp"
29
    "Source/api-base.cpp"
30
    "Source/api-host.cpp"
31
    "Source/api-opengl.cpp"
32
@@ -147,38 +155,6 @@
33
 endif()
34
 
35
 ################################################################################
36
-# Optional Features
37
-################################################################################
38
-# AVC Encoding
39
-OPTION(BUILD_AMF_AVC "AMF Plugin: Build AVC (H264) support" ON)
40
-
41
-if(BUILD_AMF_AVC)
42
-   add_definitions(-DWITH_AVC)
43
-   LIST(APPEND enc-amf_HEADERS
44
-       "Include/amf-encoder-h264.h"
45
-       "Include/enc-h264.h"
46
-   )
47
-   LIST(APPEND enc-amf_SOURCES
48
-       "Source/amf-encoder-h264.cpp"
49
-       "Source/enc-h264.cpp"
50
-   )
51
-endif()
52
-
53
-# HEVC Encoding
54
-OPTION(BUILD_AMF_HEVC "AMF Plugin: Build HEVC support" ON)
55
-if(BUILD_AMF_HEVC)
56
-   add_definitions(-DWITH_HEVC)
57
-   LIST(APPEND enc-amf_HEADERS
58
-       "Include/amf-encoder-h265.h"
59
-       "Include/enc-h265.h"
60
-   )
61
-   LIST(APPEND enc-amf_SOURCES
62
-       "Source/amf-encoder-h265.cpp"
63
-       "Source/enc-h265.cpp"
64
-   )
65
-endif()
66
-
67
-################################################################################
68
 # Build
69
 ################################################################################
70
 ADD_LIBRARY(enc-amf MODULE
71
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Include/amf-encoder.h -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Include/amf-encoder.h Changed
101
 
1
@@ -188,7 +188,7 @@
2
                std::shared_ptr<API::IAPI> videoAPI, API::Adapter videoAdapter,
3
                bool useOpenCLSubmission, bool useOpenCLConversion,
4
                ColorFormat colorFormat, ColorSpace colorSpace, bool fullRangeColor,
5
-               bool useAsyncQueue, size_t asyncQueueSize);
6
+               bool multiThreaded, size_t queueSize);
7
            public:
8
            virtual ~Encoder();
9
 
10
@@ -219,10 +219,13 @@
11
            bool IsFullRangeColor();
12
 
13
            //void SetAsynchronousQueueEnabled(bool v);
14
-           bool IsAsynchronousQueueEnabled();
15
+           bool IsMultiThreaded();
16
 
17
            //void SetAsynchronousQueueSize(size_t v);
18
-           size_t GetAsynchronousQueueSize();
19
+           size_t GetQueueSize();
20
+
21
+           void SetDebug(bool v);
22
+           bool IsDebug();
23
 
24
            //bool Initialize();
25
            #pragma endregion Initialization
26
@@ -289,6 +292,7 @@
27
            virtual void SetFrameSkippingPeriod(uint32_t v);
28
            virtual uint32_t GetFrameSkippingPeriod();
29
 
30
+           /// false skips every nth frame, true keeps every nth frame.
31
            virtual void SetFrameSkippingBehaviour(bool v);
32
            virtual bool GetFrameSkippingBehaviour();
33
 
34
@@ -434,7 +438,7 @@
35
            bool m_OpenCL;
36
            bool m_OpenCLSubmission; // Submit Frames using OpenCL
37
            bool m_OpenCLConversion; // Convert Frames using OpenCL instead of DirectCompute
38
-           bool m_HaveFirstFrame;
39
+           bool m_Debug;
40
 
41
            // Properties
42
            uint64_t m_UniqueId;
43
@@ -442,24 +446,36 @@
44
            ColorFormat m_ColorFormat;
45
            ColorSpace m_ColorSpace;
46
            bool m_FullColorRange;
47
+           size_t m_QueueSize;
48
+
49
+           /// Resolution + Rate
50
            std::pair<uint32_t, uint32_t> m_Resolution;
51
            std::pair<uint32_t, uint32_t> m_FrameRate;
52
            double_t m_FrameRateFraction;
53
+
54
+           /// Timings
55
            double_t m_TimestampStep;
56
            uint64_t m_TimestampStepRounded;
57
-           uint64_t m_TimestampOffset = 0;
58
+           uint64_t m_TimestampOffset;
59
            std::chrono::nanoseconds m_SubmitQueryWaitTimer;
60
-           uint64_t m_SubmitQueryAttempts = 8;
61
-           uint32_t m_PeriodIDR = 1;
62
-           uint32_t m_PeriodIFrame = 0;
63
-           uint32_t m_PeriodPFrame = 0;
64
-           uint32_t m_PeriodBFrame = 0;
65
-           uint32_t m_FrameSkipPeriod = 0;
66
-           bool m_FrameSkipKeepOnlyNth = false; // false = drop every xth frame, true = drop all but every xth frame
67
-           
68
-           // Threading
69
-           bool m_AsyncQueue;
70
-           size_t m_AsyncQueueSize;
71
+           uint64_t m_SubmitQueryAttempts;
72
+           uint64_t m_InitialFrameLatency;
73
+
74
+           /// Status
75
+           uint64_t m_SubmittedFrameCount;
76
+           bool m_InitialFramesSent;
77
+           bool m_InitialPacketRetrieved;
78
+
79
+           /// Periods
80
+           uint32_t m_PeriodIDR;
81
+           uint32_t m_PeriodIFrame;
82
+           uint32_t m_PeriodPFrame;
83
+           uint32_t m_PeriodBFrame;
84
+           uint32_t m_FrameSkipPeriod;
85
+           bool m_FrameSkipKeepOnlyNth; // false = drop every xth frame, true = drop all but every xth frame
86
+
87
+           /// Multi-Threading
88
+           bool m_MultiThreading;
89
            struct EncoderThreadingData {
90
                // Thread
91
                std::thread worker;
92
@@ -469,7 +485,7 @@
93
                std::condition_variable condvar;
94
                std::mutex mutex;
95
                // Data
96
-               std::queue<amf::AMFDataPtr> queue;
97
+               amf::AMFDataPtr data;
98
            } *m_AsyncSend, *m_AsyncRetrieve;
99
        };
100
    }
101
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Include/plugin.h -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Include/plugin.h Changed
10
 
1
@@ -23,6 +23,8 @@
2
 */
3
 
4
 #pragma once
5
+#include <inttypes.h>
6
+
7
 #define NOMINMAX
8
 #define NOINOUT
9
 
10
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Include/strings.h -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Include/strings.h Changed
12
 
1
@@ -134,8 +134,8 @@
2
 #define P_VIDEO_ADAPTER                "Video.Adapter"
3
 #define P_OPENCL_TRANSFER          "OpenCL.Transfer"
4
 #define P_OPENCL_CONVERSION            "OpenCL.Conversion"
5
-#define P_ASYNCHRONOUSQUEUE            "AsynchronousQueue"
6
-#define P_ASYNCHRONOUSQUEUE_SIZE   "AsynchronousQueue.Size"
7
+#define P_MULTITHREADING           "MultiThreading"
8
+#define P_QUEUESIZE                    "QueueSize"
9
 #define P_DEBUG                        "Debug"
10
 
11
 #define P_VIEW                     "View"
12
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Include/utility.h -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Include/utility.h Changed
109
 
1
@@ -26,14 +26,10 @@
2
 #include "amf.h"
3
 #include "amf-encoder.h"
4
 #include "components/VideoConverter.h"
5
-#ifdef WITH_AVC
6
 #include "amf-encoder-h264.h"
7
 #include "components/VideoEncoderVCE.h"
8
-#endif
9
-#ifdef WITH_HEVC
10
 #include "amf-encoder-h265.h"
11
 #include "components/VideoEncoderHEVC.h"
12
-#endif
13
 
14
 namespace Utility {
15
    uint64_t GetUniqueIdentifier();
16
@@ -53,92 +49,60 @@
17
 
18
    // Usage
19
    const char* UsageToString(Plugin::AMD::Usage v);
20
-   #ifdef WITH_AVC
21
    AMF_VIDEO_ENCODER_USAGE_ENUM UsageToAMFH264(Plugin::AMD::Usage v);
22
    Plugin::AMD::Usage UsageFromAMFH264(AMF_VIDEO_ENCODER_USAGE_ENUM v);
23
-   #endif
24
-   #ifdef WITH_HEVC
25
    AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM UsageToAMFH265(Plugin::AMD::Usage v);
26
    Plugin::AMD::Usage UsageFromAMFH265(AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM v);
27
-   #endif
28
 
29
    // Quality Preset
30
    const char* QualityPresetToString(Plugin::AMD::QualityPreset v);
31
-   #ifdef WITH_AVC
32
    AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM QualityPresetToAMFH264(Plugin::AMD::QualityPreset v);
33
    Plugin::AMD::QualityPreset QualityPresetFromAMFH264(AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM v);
34
-   #endif
35
-   #ifdef WITH_HEVC
36
    AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM QualityPresetToAMFH265(Plugin::AMD::QualityPreset v);
37
    Plugin::AMD::QualityPreset QualityPresetFromAMFH265(AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM v);
38
-   #endif
39
 
40
    // Profile
41
    const char* ProfileToString(Plugin::AMD::Profile v);
42
-   #ifdef WITH_AVC
43
    AMF_VIDEO_ENCODER_PROFILE_ENUM ProfileToAMFH264(Plugin::AMD::Profile v);
44
    Plugin::AMD::Profile ProfileFromAMFH264(AMF_VIDEO_ENCODER_PROFILE_ENUM v);
45
-   #endif
46
-   #ifdef WITH_HEVC
47
    AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM ProfileToAMFH265(Plugin::AMD::Profile v);
48
    Plugin::AMD::Profile ProfileFromAMFH265(AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM v);
49
-   #endif
50
 
51
    // Tier
52
-   #ifdef WITH_HEVC
53
    const char* TierToString(Plugin::AMD::H265::Tier v);
54
    AMF_VIDEO_ENCODER_HEVC_TIER_ENUM TierToAMFH265(Plugin::AMD::H265::Tier v);
55
    Plugin::AMD::H265::Tier TierFromAMFH265(AMF_VIDEO_ENCODER_HEVC_TIER_ENUM v);
56
-   #endif
57
 
58
    // Coding Type
59
    const char* CodingTypeToString(Plugin::AMD::CodingType v);
60
-   #ifdef WITH_AVC
61
    AMF_VIDEO_ENCODER_CODING_ENUM CodingTypeToAMFH264(Plugin::AMD::CodingType v);
62
    Plugin::AMD::CodingType CodingTypeFromAMFH264(AMF_VIDEO_ENCODER_CODING_ENUM v);
63
-   #endif
64
-   #ifdef WITH_HEVC
65
    int64_t CodingTypeToAMFH265(Plugin::AMD::CodingType v);
66
    Plugin::AMD::CodingType CodingTypeFromAMFH265(int64_t v);
67
-   #endif
68
 
69
    // Rate Control Method
70
    const char* RateControlMethodToString(Plugin::AMD::RateControlMethod v);
71
-   #ifdef WITH_AVC
72
    AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM RateControlMethodToAMFH264(Plugin::AMD::RateControlMethod v);
73
    Plugin::AMD::RateControlMethod RateControlMethodFromAMFH264(AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM v);
74
-   #endif
75
-   #ifdef WITH_HEVC
76
    AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM RateControlMethodToAMFH265(Plugin::AMD::RateControlMethod v);
77
    Plugin::AMD::RateControlMethod RateControlMethodFromAMFH265(AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM v);
78
-   #endif
79
 
80
    // Pre-Pass Method
81
    const char* PrePassModeToString(Plugin::AMD::PrePassMode v);
82
-   #ifdef WITH_AVC
83
    AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM PrePassModeToAMFH264(Plugin::AMD::PrePassMode v);
84
    Plugin::AMD::PrePassMode PrePassModeFromAMFH264(AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM v);
85
-   #endif
86
 
87
    // GOP Type
88
-   #ifdef WITH_HEVC
89
    const char* GOPTypeToString(Plugin::AMD::H265::GOPType v);
90
    Plugin::AMD::H265::GOPType GOPTypeFromAMFH265(int64_t v);
91
    int64_t GOPTypeToAMFH265(Plugin::AMD::H265::GOPType v);
92
-   #endif
93
 
94
    // Slicing
95
-   #ifdef WITH_AVC
96
    const char* SliceModeToString(Plugin::AMD::H264::SliceMode v);
97
-   #endif
98
    const char* SliceControlModeToString(Plugin::AMD::SliceControlMode v);
99
 
100
-   #ifdef WITH_AVC
101
    Plugin::AMD::ProfileLevel H264ProfileLevel(std::pair<uint32_t, uint32_t> resolution, std::pair<uint32_t, uint32_t> frameRate);
102
-   #endif
103
-   #ifdef WITH_HEVC
104
    Plugin::AMD::ProfileLevel H265ProfileLevel(std::pair<uint32_t, uint32_t> resolution, std::pair<uint32_t, uint32_t> frameRate);
105
-   #endif
106
 
107
    //////////////////////////////////////////////////////////////////////////
108
    // Threading Specific
109
obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/bn-BD.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+Utility.Manual="ম্যানুয়াল"
3
+Utility.Switch.Disabled="অসমর্থ"
4
+Preset.ResetToDefaults="ডিফল্ট অবস্থায়ে রিসেট করো"
5
+Preset.Recording="রেকর্ড"
6
+Preset.HighQuality="খুবই ভালো মানের"
7
+Preset.YouTube="ইউটিউব"
8
+Usage="ব্যবহারের ধরন"
9
+Usage.Description="AMF উচিত হবে টিভির জন্য কি ব্যবহার: \n-'\@Usage.Transcoding\@' (প্রস্তাবিত) সাধারণ উদ্দেশ্যে ট্রান্সকোড করা হচ্ছে। \n-'\@Usage.UltraLowLatency\@' হল খুব কম সুপ্ত এনকোডিং জন্য, \n-'\@Usage.LowLatency\@' হয়ত কলমটি একটু উপরে সুপ্ত। \nStreaming একমাত্র সমর্থন করে '\@Usage.Transcoding\@ সাথে' মতো উপরে, সমস্ত মূল্য রেকর্ড করার জন্য ব্যবহার করা যেতে পারে."
10
+
11
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/ca-ES.ini Changed
54
 
1
@@ -71,6 +71,10 @@
2
 FillerData.Description="En activar les dades de farciment es permet al codificador mantenir almenys \@Bitrate.Target\@ omplint l'espai que falta amb informació sense valor."
3
 FrameSkipping="Omissió de fotogrames"
4
 FrameSkipping.Description="L'omissió de fotogrames permet al codificador saltar fotogrames per complir amb el requeriment de la\@Bitrate.Target\@.\nQuan el codificador salta un fotograma inserirà una NAL que repetirà l'últim fotograma codificat a la transmissió.\nPot ajudar amb \@Bitrate.Target\@ molt baixes."
5
+FrameSkipping.Period="Període de salt de fotograma"
6
+FrameSkipping.Period.Description="Interval (en fotogrames) entre fotogrames omesos. Això es pot utilitzar per simular una tassa de refresc més baix que OBS es fixa mentre es pot tenir un flux vàlid."
7
+FrameSkipping.Behaviour="Comportament del salt de fotograma"
8
+FrameSkipping.Behaviour.Description="Definiu com es comporta el salt de fotogrames."
9
 VBAQ="VBAQ"
10
 VBAQ.Description="En activar l'ús de 'Quantització adaptativa basada en la variació' (VBAQ) que es basa en la variació del pixel per a una millor distribució de la taxa de bits. \nFunciona amb la idea que el sistema visual humà és menys sensible als artefactes en àrees altament texturades i així mourà la tassa de bits cap a superfícies més suaus. \nEn activar-lo pot portar a millores en la qualitat subjectiva en cert contingut."
11
 EnforceHRD="Força l'HRD"
12
@@ -83,12 +87,24 @@
13
 VBVBuffer.Size.Description="La mida de la memòria intermèdia VBV que s'utilitza per al control de la tassa de marcs en una seqüencia."
14
 VBVBuffer.InitialFullness="Amplitud inicial de la memòria intermèdia VBV"
15
 VBVBuffer.InitialFullness.Description="Com de ple és la memòria intermèdia VMV inicialment (en %), només afectarà la seqüència inicial de la codificació."
16
-KeyframeInterval="Interval de fotogrames clau"
17
-KeyframeInterval.Description="Interval (en segons) entre fotogrames clau."
18
-H264.IDRPeriod="Període IDR (en marcs)"
19
-H264.IDRPeriod.Description="Defineix la distància entre Instantaneous Decoding Refreshes (IDR) en fotogrames. També controla la mida de la seqüència del GOP."
20
-H265.IDRPeriod="Període IDR (en GOPs)"
21
-H265.IDRPeriod.Description="Defineix la distància entre actualitzacions de descodificació instantània (IDR) en GOPs."
22
+Interval.Keyframe="Interval de fotogrames clau"
23
+Interval.Keyframe.Description="Interval (en segons) entre fotogrames clau."
24
+Period.IDR.H264="Període IDR (en marcs)"
25
+Period.IDR.H264.Description="Defineix la distància entre actualitzacions de descodificació instantània (IDR) en fotogrames."
26
+Period.IDR.H265="Període IDR (en GOPs)"
27
+Period.IDR.H265.Description="Defineix la distància entre actualitzacions de descodificació instantània (IDR) en GOPs."
28
+Interval.IFrame="Interval I-Frame"
29
+Interval.IFrame.Description="Interval (en segons) entre I-Frames. I-Frames anul·la els P-Frames i els B-Frames."
30
+Period.IFrame="Període I-Frame (en fotogrames)"
31
+Period.IFrame.Description="Distància (en fotogrames) entre I-Frames. I-Frames anul·la els P-Frames i els B-Frames."
32
+Interval.PFrame="Interval P-Frame"
33
+Interval.PFrame.Description="Interval (en segons) entre P-Frames. P-Frames anul·la els B-Frames."
34
+Period.PFrame="Període P-Frame (en fotogrames)"
35
+Period.PFrame.Description="Distància (en fotogrames) entre P-Frames. P-Frames anul·la els B-Frames."
36
+Interval.BFrame="Interval B-Frame"
37
+Interval.BFrame.Description="Interval (en segons) entre B-Frames."
38
+Period.BFrame="Període B-Frame (en fotogrames)"
39
+Period.BFrame.Description="Distància (en fotogrames) entre B-Frames."
40
 GOP.Type="Tipus de GOP"
41
 GOP.Type.Description="Quin tipus de GOP s'ha d'utilitzar: \n - ' \@GOP. Type.Fixed\@' utilitzarà sempre distàncies fixes entre cada GOP. \n - ' \@GOP. Type.Variable\@' permet GOPs de diferents mides, depenent del que es necessiti.\n'\@GOP. Type.Fixed\@' és com els treballs d'implementació H264 i el millor per a les transmissions de xarxa local, mentre que ' \@GOP. Type.Variable\@' és el millor per a enregistraments d'alta qualitat i de baix grandària."
42
 GOP.Type.Fixed="Fix"
43
@@ -120,8 +136,8 @@
44
 Video.API.Description="Quina API hauria d'utilitzar el rerefons?"
45
 Video.Adapter="Adaptador de vídeo"
46
 Video.Adapter.Description="En quin adaptador hauríem d'intentar codificar?"
47
-OpenCL="OpenCL"
48
-OpenCL.Description="S'hauria de fer servir l'OpenCL per enviar marcs? Tècnicament és més ràpid, però causa problemes amb els controladors d'Intel (degut a biblioteques OpenCL incompatibles)."
49
+OpenCL.Transfer="Transferència OpenCL"
50
+OpenCL.Conversion="Conversió OpenCL"
51
 View="Mode de visualització"
52
 View.Description="Quines propietats s'han de mostrar?\nEn utilitzar '\@View.Master\@' us desqualifica per rebre suport."
53
 View.Basic="Bàsic"
54
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/cs-CZ.ini Changed
28
 
1
@@ -7,14 +7,26 @@
2
 Preset.ResetToDefaults="Obnovit výchozí"
3
 Preset.Recording="Nahrávání"
4
 Preset.HighQuality="Vysoká kvalita"
5
+Preset.Indistinguishable="Nerozeznatelné"
6
+Preset.Lossless="Lossless"
7
 Preset.Twitch="Twitch"
8
 Preset.YouTube="YouTube"
9
 Usage="Využití"
10
 Usage.UltraLowLatency="Ultra nízká odezva"
11
+Usage.LowLatency="Nízká odezva"
12
 Usage.Webcam="Webkamera"
13
+QualityPreset="Profil kvality"
14
+QualityPreset.Speed="Rychlost"
15
 QualityPreset.Balanced="Vyvážený"
16
 QualityPreset.Quality="Kvalita"
17
 Profile="Profil"
18
 ProfileLevel="Úroveň profilu"
19
+Tier="Úroveň"
20
+AspectRatio="Poměr stran"
21
+View.Basic="Základní"
22
+View.Advanced="Pokročilý"
23
+View.Expert="Expert"
24
+View.Master="Mistr"
25
+Debug="Ladění"
26
 AMF.H264.MaximumLTRFrames="Maximální počet LTR snímků"
27
 
28
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/da-DK.ini Changed
130
 
1
@@ -12,13 +12,128 @@
2
 Preset.Twitch="Twitch"
3
 Preset.YouTube="YouTube"
4
 Usage="Brug"
5
+Usage.Description="Hvilken anvendelse, AMF bør indstilles til:\n- '\@AMF.H264.Usage.Transcoding\@' er omkodning til generelle formål (anbefalet),\n - '\@AMF.H264.Usage.UltraLowLatency\@' er til virkelig lav-forsinkelseskodning,\n- '\@AMF.H264.Usage.LowLatency\@' er tilsvarende ovennævnte med en lidt større forsinkelse.\nStreaming understøtter kun '\@AMF.H264.Usage.Transcoding\@', alle andre værdier kan benyttes til optagelse."
6
 Usage.Transcoding="Transcoding"
7
 Usage.UltraLowLatency="Ultra lav latenstid"
8
 Usage.LowLatency="Lav latenstid"
9
 Usage.Webcam="Webcam"
10
 QualityPreset="Kvalitets profiler"
11
+QualityPreset.Description="Hvilken Kvalitetsforudindstilling AMF bør forsøges målrettet imod:\n- '\@QualityPreset.Speed\@' er den hurtigste, men har den ringeste kvalitet,\n- '\@QualityPreset.Balanced\@' er en balanceret blanding af begge,\n- '\@QualityPreset.Quality\@' giver den bedste kvalitet for en given bithastighed."
12
 QualityPreset.Speed="Hastighed"
13
 QualityPreset.Balanced="Balanceret"
14
 QualityPreset.Quality="Kvalitet"
15
 Profile="Profil"
16
+Profile.Description="Hvilken profil at indkode med. Sorteret efter bedst understøttede (øverst) til bedste kvalitet (nederst)."
17
+ProfileLevel="Profilniveau"
18
+ProfileLevel.Description="Benyttet profilniveau. Det er bedst at lade dette stå på \@Utility.Automatic\@."
19
+Tier="Niveau"
20
+Tier.Description="Benyttet indkodningsniveau. 'Høj' er målrettet brug med høj bitrate/båndbredde, mens 'Grundlæggende' er målrettet almindelig mediebrug."
21
+AspectRatio="Billedformat"
22
+AspectRatio.Description="Hvilke billedformat outputfilen skal kodes til."
23
+CodingType="Kodningstype"
24
+CodingType.Description="Benyttede kodningstype:\n* '\@Utility.Automatic\@' udgør AMF-bestemt (anbefalet). \n* 'CALVC' (kontekstafhængig variabellængdekodning) er hurtigere, men større.\n* 'CABAC' (kontekstafhængig binær aritmetik-kodning) er langsommere, men mindre."
25
+MaximumReferenceFrames="Maksimalt antal Referencebilleder"
26
+MaximumReferenceFrames.Description="Hvor mange billeder encoderen maks. kan benytte under kodning. Har direkte indvirkning på kodningskvalitet."
27
+RateControlMethod="Hastighedskontrolmetode"
28
+RateControlMethod.Description="Hvilken hastighedskontrolmetode, der skal bør anvendes:\n - '\@RateControlMethod.CQP\@' tildeler fast I-/P-/B-billede QP-værdier,\n-'\@RateControlMethod.CBR\@' forbliver på den foruddefinerede Bithastighed (v.h.a. udfyldningsdata) (anbefales til streaming),\n-'\@RateControlMethod.VBR\@' forbliver under den angivne Bithastighed, \n-'\@RateControlMethod.VBRLAT\@' forbliver tæt på den foruddefinerede Bithastighed, hvis GPU-latens og -belastning muliggør det, ellers vil højere bithastighed blive anvendt (anbefales til optagelse)."
29
+RateControlMethod.CQP="Konstant QP (CQP)"
30
+RateControlMethod.CBR="Konstant Bithastighed (CBR)"
31
+RateControlMethod.VBR="Variabel Bithastighed (Maksimumsbegrænsning) (VBR)"
32
+RateControlMethod.VBRLAT="Variabel Bithastighed (Latensbegrænset) (VBR_LAT)"
33
+PrePassMode="Prepass-tilstand"
34
+PrePassMode.Description="Prepass (prægennemløb) er et sekundært gennemløb m.h.p. en bedre fordeling af bithastigheden i en sekvens, men effekten heraf kan variere fra kort til kort."
35
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (kvart størrelse)"
36
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (halv størrelse)"
37
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (fuld størrelse)"
38
+Bitrate.Target="Bithastighedsmål"
39
+Bitrate.Target.Description="Den tilstræbte bithastighed i den overordnede sekvens."
40
+Bitrate.Peak="Maks. bithastighed"
41
+Bitrate.Peak.Description="Den tilstræbte maksimale bithastighed i den overordnede sekvens."
42
+QP.IFrame="I-Frame QP"
43
+QP.IFrame.Description="Fast QP-værdi til brug for I-Frames."
44
+QP.PFrame="P-Frame QP"
45
+QP.PFrame.Description="Fast QP-værdi til brug for P-Frames."
46
+QP.BFrame="B-Frame QP"
47
+QP.BFrame.Description="Fast QP-værdi til brug for B-Frames."
48
+QP.Minimum="Minimum QP"
49
+QP.Minimum.Description="Laveste QP-værdi til brug i en Frame."
50
+QP.IFrame.Minimum="Minimum I-Frame QP"
51
+QP.IFrame.Minimum.Description="Laveste QP-værdi til brug i en I-Frame."
52
+QP.PFrame.Minimum="Minimum P-Frame QP"
53
+QP.PFrame.Minimum.Description="Laveste QP-værdi til brug i en P-Frame."
54
+QP.Maximum="Maksimum QP"
55
+QP.Maximum.Description="Højeste QP-værdi til brug i en Frame."
56
+QP.IFrame.Maximum="Minimum I-Frame QP"
57
+QP.IFrame.Maximum.Description="Højeste QP-værdi til brug i en Frame."
58
+QP.PFrame.Maximum="Minimum P-Frame QP"
59
+QP.PFrame.Maximum.Description="Højeste QP-værdi til brug i en P-Frame."
60
+FillerData="Udfyldningsdata"
61
+FillerData.Description="Aktivering af Udfyldningsdata tillader encoderen at holde mininum \@Bitrate.Target\@ ved at udfylde den resterende plads i en sekvens med tom information."
62
+FrameSkipping="Billedoverspring (Frame Skipping)"
63
+FrameSkipping.Description="Billedoverspringning tillader encoderen at udelader billeder, for at opfylde \@Bitrate.Target\@ kravene.\nNår encoder udelader (dropper) et billede, indsættes i stedet en gentag-sidste-billede (repeat-sidste-frame) NAL i streamen.\nKan hjælpe med meget lave \@Bitrate.Target\@ krav."
64
+FrameSkipping.Period="Overspring Frame-periode"
65
+FrameSkipping.Period.Description="Interval (i Frames) mellem oversprungne frames. Dette kan benyttes til at simulere en lavere billedhastighed end OBS er indstillet til og samtidig stadig have en gyldig stream."
66
+FrameSkipping.Behaviour="Overspring Frame-adfærd"
67
+FrameSkipping.Behaviour.Description="Definér adfærden for Frame-overspringning."
68
+FrameSkipping.SkipNth="Overspring kun hver N'te frame"
69
+FrameSkipping.KeepNth="Behold kun hver N'te frame"
70
+VBAQ="VBAQ"
71
+VBAQ.Description="Aktivér brugen af 'Variance Based Adaptive Quantization' (VBAQ), som er baseret på pixelvarians til bedre distribution af bithastigheden.\nDet baserer sig på ideén om, at det menneskelige visuelle system er mindre følsomt over for artefakter i stærkt strukturerede områder og dermed vil påvirke bithastigheden i retning af glattere overflader.\nAktivering af dette kan føre til forbedringer i den subjektive kvalitet ved visse indholdstyper."
72
+EnforceHRD="Gennemtving HRD"
73
+EnforceHRD.Description="Gennemtving brug af en Hypotetisk Reference-dekoder, som benyttes til at kontrollere, at output-bitstrømmen er korrekt."
74
+VBVBuffer="VBV-buffer"
75
+VBVBuffer.Description="Hvilken metode, der bør benyttes til bestemmelse af VBV-bufferstørrelse:\n - '\@Utility.Automatic\@' beregner størrelsen ud fra en striks begrænsning, \n - '\@Utility.Manual\@' tillader brugeren at styre størrelsen.\nVBV (Video Buffering Verifier) buffer benyttes af bestemte hastighedsbegrænsningsmetoder, for at holde den samlede bithastighed inden for de givne begrænsninger."
76
+VBVBuffer.Strictness="VBV Buffer-nøjagtighed"
77
+VBVBuffer.Strictness.Description="Bestemmer VBV buffernøjagtigheden, hvor 100% repræsenterer højeste nøjagtighed, og 0% er ubegrænset."
78
+VBVBuffer.Size="VBV Bufferstørrelse"
79
+VBVBuffer.Size.Description="Den VBV Bufferstørrelse, der benyttes til Bithastighedskontrol i en sekvens."
80
+VBVBuffer.InitialFullness="VBV Buffer indledende fylde"
81
+VBVBuffer.InitialFullness.Description="Hvor fuld VBV Buffer indledningsvis er (i %). Påvirke kun den indledende kodningssekvens."
82
+Interval.Keyframe="Keyframe-Interval"
83
+Interval.Keyframe.Description="Intervallet (i sekunder) mellem Keyframes."
84
+Period.IDR.H264="IDR-periode (i Frames)"
85
+Period.IDR.H264.Description="Definerer afstanden mellem øjeblikkelige afkodningsopdateringer (IDR) i Frames."
86
+Period.IDR.H265="IDR-periode (i GOPs)"
87
+Period.IDR.H265.Description="Definerer afstanden mellem øjeblikkelige afkodningsopdateringer (IDR) i GOPs."
88
+Interval.IFrame="I-Frame-Interval"
89
+Interval.IFrame.Description="Intervallet (i sekunder) mellem I-Frames. I-Frames tilsidesætter P- og B-Frames."
90
+Period.IFrame="IDR-periode (i Frames)"
91
+Period.IFrame.Description="Afstand (i Frames) mellem I-Frames. I-Frames tilsidesætter P- og B-Frames."
92
+Interval.PFrame="P-Frame-Interval"
93
+Interval.PFrame.Description="Intervallet (i sekunder) mellem P-Frames. P-Frames tilsidesætte B-Frames."
94
+Period.PFrame="P-Frame periode (i Frames)"
95
+Period.PFrame.Description="Afstand (i Frames) mellem P-Frames. P-Frames tilsidesætter B-Frames."
96
+Interval.BFrame="B-Frame-Interval"
97
+Interval.BFrame.Description="Intervallet (i sekunder) mellem B-Frames."
98
+Period.BFrame="B-Frame periode (i Frames)"
99
+Period.BFrame.Description="Afstand (i Frames) mellem B-Frames."
100
+GOP.Type="GOP-type"
101
+GOP.Type.Description="Hvilken GOP-type, der bør anvendes:\n- '\@GOP.Type.Fixed\@' vil altid benytte faste afstande mellem hver GOP.\n- '\@GOP. Type.Variable\@' giver efter behov mulighed for GOPs af varierende størrelser.\n'\@GOP. Type.Fixed\@' er hvorledes H264 gennemførelsen fungerer og er bedste til lokal netværks-streaming, mens '\@GOP. Type.Variable\@' er bedst for højkvalitetsoptagelser i lavere størrelser."
102
+GOP.Type.Fixed="Fast"
103
+GOP.Type.Variable="Variabel"
104
+GOP.Size="GOP-størrelse"
105
+GOP.Size.Description="Størrelsen af en GOP (gruppe af billeder) i Frames."
106
+GOP.Size.Minimum="GOP-størrelse minimum"
107
+GOP.Size.Minimum.Description="Minimumsstørrelsen af en GOP (gruppe af billeder) i Frames."
108
+GOP.Size.Maximum="GOP-størrelse maksimum"
109
+GOP.Size.Maximum.Description="Maksimumsstørrelsen af en GOP (gruppe af billeder) i Frames."
110
+GOP.Alignment="GOP-justering"
111
+GOP.Alignment.Description="Eksperimentel, virkningerne er ukendte. Benyt for egen risiko."
112
+BFrame.Pattern="B-Frame-mønster"
113
+BFrame.Pattern.Description="Antallet af B-Frames at benytte under kodning.\nUnderstøttes af 2. og 3. generation VCE-kort. Påvirker kodningsydeevnen i negativ grad."
114
+BFrame.DeltaQP="B-Frame Delta QP"
115
+BFrame.DeltaQP.Description="Delta QP-værdi til den sidste I - eller P-Frame for ikke-refererbare B-Frames."
116
+BFrame.Reference="B-Frame reference"
117
+BFrame.Reference.Description="Tillade en B-Frame også at benytte B-Frames som reference i stedet for blot P- og I-Frames."
118
+BFrame.ReferenceDeltaQP="B-Frame Reference Delta QP"
119
+BFrame.ReferenceDeltaQP.Description="Delta QP-værdi til den sidste I- eller P-Frame for refererbare B-Frames."
120
+OpenCL.Transfer.Description="Overfør framen til GPU via OpenCL i stedet for via afsat hukommelse. Overførsel via OpenCL er mindre sporadisk end overførsel via afsat hukommelse, når GPU'en benyttes."
121
+OpenCL.Conversion.Description="Konvertér frame i GPU via OpenCL i stedet for DirectCompute."
122
+MultiThreading.Description="Benytter mere end én tråd til at håndtere aflevering af frames og hentning af pakker. Dette kan hjælpe for langsommere CPU'er, men vil benytte generelle systemressourcer. Det vil påvirke ydeevnen i negativ grad for hurtigere CPU'er."
123
+QueueSize.Description="Sæt så mange frames i kø til encoderen inden det forsøges at hente pakker. En højere værdi medfører højere latenstid, mens en lavere værdi kan forårsage overbelastet kodning. Det anbefales ikke at ændre dette fra standarden."
124
+AMF.H264.MaximumLTRFrames="Maksimum LTR Frames"
125
+AMF.H264.MaximumLTRFrames.Description="Langsigtet Reference (LTR) frames er en funktion som tillader encoderen at markere bestemte frames i en sekvens som langtids refererbare.\nLTR Frames kan ikke benyttes med B-Frames og encoderen vil deaktivere B-Frames, såfremt disse benyttes."
126
+AMF.H264.HeaderInsertionSpacing.Description="Hvor mange frames der bør være mellem NAL-overskrifter."
127
+AMF.H264.SlicesPerFrame="Udsnit Per Frame"
128
+AMF.H264.SlicesPerFrame.Description="Hvor mange I-Frame-udsnit skal der gemmes med hver frame?\nEn værdi på nul lader encoder afgøre dette løbende.\nIntra-Refresh-kodning anvendes til hurtigere afspilning og søgning."
129
 
130
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/de-DE.ini Changed
65
 
1
@@ -71,8 +71,14 @@
2
 FillerData.Description="Das aktivieren von Füllungsdaten erlaubt es dem Kodierer mindestens die \@Bitrate.Target\@ zu erreichen in dem dieser den verbleibenden Platz mit leeren Informationen füllt."
3
 FrameSkipping="Bildüberspringung"
4
 FrameSkipping.Description="Bildüberspringung erlaubt es dem Kodierer, Bilder zu überspringen um die \@Bitrate.Target\@ einzuhalten.\nWenn der Kodierer ein Bild überspringt, fügt dieser stattdessen ein repeat-last-frame NAL in den Stream ein.\nKann bei sehr niedriger \@Bitrate.Target\@ helfen."
5
+FrameSkipping.Period="Bildüberspringungsperiode"
6
+FrameSkipping.Period.Description="Intervall (in Bildern) zwischen übersprungenen Bildern. Dies kann eine niedrigere Bildrate als OBS nutzt simulieren und dennoch einen korrekten Stream zu haben."
7
+FrameSkipping.Behaviour="Bildüberspringung Verhaltensweise"
8
+FrameSkipping.Behaviour.Description="Bestimme das verhalten der Bildüberspringung."
9
+FrameSkipping.SkipNth="Überspringe nur jedes Nte Bild"
10
+FrameSkipping.KeepNth="Behalte nur jedes Nte Bild"
11
 VBAQ="VBAQ"
12
-VBAQ.Description="Aktivieren der Verwendung der \"Auf Varianz basierte Adaptive Quantisierung\" (VBAQ) welche auf Pixel Veränderung basiert ist, um die Bitrate besser zu verteilen. \nEs basiert auf der Idee, dass das menschliche Auge weniger anfällig für Artefakte in stark strukturierte Flächen ist und erhöt so die Bitrate bei glatten Oberflächen. \nAktivierung kann zu Verbesserungen der subjektiven Qualität mit bestimmten Inhalten führen."
13
+VBAQ.Description="Aktivieren der Verwendung der \"Auf Varianz basierte Adaptive Quantisierung\" (VBAQ) welche auf Pixel Veränderung basiert ist, um die Bitrate besser zu verteilen.\nEs basiert auf der Idee, dass das menschliche Auge weniger anfällig für Artefakte in stark strukturierte Flächen ist und erhöt so die Bitrate bei glatten Oberflächen.\nAktivierung kann zu Verbesserungen der subjektiven Qualität mit bestimmten Inhalten führen."
14
 EnforceHRD="Erzwinge HRD"
15
 EnforceHRD.Description="Erzwinge die Nutzung eines Hypothetischen Referenz Dekodierers welcher genutzt wird um den ausgehenden Datenstrom zu verifizieren."
16
 VBVBuffer="VBV Buffer"
17
@@ -83,12 +89,24 @@
18
 VBVBuffer.Size.Description="Die Größe des VBV Buffers, welcher für die Bitratenkontrolle in einer Sequenz verwendet wird."
19
 VBVBuffer.InitialFullness="VBV Buffer Anfängliche Füllung"
20
 VBVBuffer.InitialFullness.Description="Wie voll der VBV Buffer am Anfang ist (in %), hat nur einen Effekt auf die erste Sequenz beim kodieren."
21
-KeyframeInterval="Schlüsselbildintervall"
22
-KeyframeInterval.Description="Intervall (in Sekunden) zwischen Schlüsselbildern."
23
-H264.IDRPeriod="IDR Intervall (in Bildern)"
24
-H264.IDRPeriod.Description="Definiert die Distanz zwischen Sofortigen-Dekodierer-Aktualisierungen (IDR) in Frames. Setzt auch die Größe einer GOP-Sequenz fest."
25
-H265.IDRPeriod="IDR Intervall (in GOPs)"
26
-H265.IDRPeriod.Description="Definiert die Distanz zwischen Sofortigen-Dekodierer-Aktualisierungen (IDR) in GOPs."
27
+Interval.Keyframe="Schlüsselbildintervall"
28
+Interval.Keyframe.Description="Intervall (in Sekunden) zwischen Schlüsselbildern."
29
+Period.IDR.H264="IDR Intervall (in Bildern)"
30
+Period.IDR.H264.Description="Definiert die Distanz zwischen Sofortigen-Dekodierer-Aktualisierungen (IDR) in Frames."
31
+Period.IDR.H265="IDR Periode (in GOPs)"
32
+Period.IDR.H265.Description="Definiert die Distanz zwischen Sofortigen-Dekodierer-Aktualisierungen (IDR) in GOPs."
33
+Interval.IFrame="I-Bild Intervall"
34
+Interval.IFrame.Description="Intervall (in Sekunden) zwischen I-Bildern. I-Bilder haben vorrang vor P- und B-Bildern."
35
+Period.IFrame="I-Bild Periode (in Bildern)"
36
+Period.IFrame.Description="Abstand (in Bildern) zwischen P-Bildern. I-Bilder haben vorrang vor P- und B-Bildern."
37
+Interval.PFrame="P-Bild Intervall"
38
+Interval.PFrame.Description="Intervall (in Sekunden) zwischen P-Bildern. P-Bilder haben vorrang vor B-Bildern."
39
+Period.PFrame="P-Bild Periode (in Bildern)"
40
+Period.PFrame.Description="Abstand (in Bildern) zwischen P-Bildern. P-Bilder haben vorrang vor B-Bildern."
41
+Interval.BFrame="B-Bild Intervall"
42
+Interval.BFrame.Description="Intervall (in Sekunden) zwischen B-Bildern."
43
+Period.BFrame="B-Bild Periode (in Bildern)"
44
+Period.BFrame.Description="Abstand (in Bildern) zwischen B-Bildern."
45
 GOP.Type="GOP Typ"
46
 GOP.Type.Description="Welcher Typ an GOP verwendet werden soll:\n- '\@GOP.Type.Fixed\@' wird immer eine feste Distanz zwischen GOPs haben.\n- '\@GOP.Type.Variable\@' erlaubt GOPs mit variabler Größe, je nachdem was gebraucht wird.\n'\@GOP.Type.Fixed\@' ist was die H264 Implementierung verwendet und funktioniert am besten für lokales streamen, während '\@GOP.Type.Variable\@ am besten ist für Aufnahmen mit hoher Qualität und kleiner Größe."
47
 GOP.Type.Fixed="Fest"
48
@@ -120,8 +138,14 @@
49
 Video.API.Description="Welche API soll das Backend verwenden?"
50
 Video.Adapter="Video Adapter"
51
 Video.Adapter.Description="Auf welchem Adapter soll versucht werden zu Kodieren?"
52
-OpenCL="OpenCL"
53
-OpenCL.Description="Soll OpenCL für das übertragen von Bildern verwendet werden? Technisch schneller, aber verursacht Probleme mit Intel Treiben (auf Grund von inkompatiblen OpenCL Bibliotheken)."
54
+OpenCL.Transfer="OpenCL Übertragung"
55
+OpenCL.Transfer.Description="Übertrage Bilder auf die GPU mit OpenCL anstatt von zugeordnetem Speicher. Übertragungen mit OpenCL sind weniger unregelmäßig als übertragungen über zugeordnetem Speicher während die GPU benutzt wird."
56
+OpenCL.Conversion="OpenCL Konvertierung"
57
+OpenCL.Conversion.Description="Konvertiere Bilder auf der GPU mit OpenCL anstatt von DirectCompute."
58
+MultiThreading="Multi-Threading"
59
+MultiThreading.Description="Verwende mehr als einen Thread für das senden von Bildern und holen von Paketen. Dies kann auf langsameren CPUs helfen aber nutzt dafür insgesamt mehr Systemressourcen. Dies hat einen negativen Leistungseinfluss auf schnelleren CPUs."
60
+QueueSize="Warteschlangengröße"
61
+QueueSize.Description="Reihe diese Anzahl an Bilder ein und versuche erst dann Pakete zu holen. Ein höherer Wert führt zu höherer Latenz während ein niedrigerer Wert möglicherweise den Kodierer überlastet. Es wird nicht empfohlen dies von der Standardeinstellung zu ändern."
62
 View="Ansichtsmodus"
63
 View.Description="Welche Eigenschaften sollen sichtbar sein?\nDas benutzen von '\@View.Master\@' disqualifiziert dich von jeglichen Support."
64
 View.Basic="Grundlegend"
65
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/en-US.ini Changed
21
 
1
@@ -145,13 +145,13 @@
2
 Video.Adapter="Video Adapter"
3
 Video.Adapter.Description="On what Adapter should we attempt to encode on?"
4
 OpenCL.Transfer="OpenCL Transfer"
5
-OpenCL.Transfer.Description="Should OpenCL be used for Frame transfer to the GPU?"
6
+OpenCL.Transfer.Description="Transfer the frame to the GPU using OpenCL instead of mapped memory. Transfer via OpenCL is less sporadic than transfer via mapped memory when the GPU is being used."
7
 OpenCL.Conversion="OpenCL Conversion"
8
-OpenCL.Conversion.Description="Should OpenCL be used for Frame conversion on the GPU?"
9
-AsynchronousQueue="Asynchronous Queue"
10
-AsynchronousQueue.Description="Asynchronously handle submitting frames and retrieving data from the Encoder."
11
-AsynchronousQueue.Size="Asynchronous Queue Size"
12
-AsynchronousQueue.Size.Description="Maximum size of the frame and packet queue before dropping either."
13
+OpenCL.Conversion.Description="Convert the frame on the GPU using OpenCL instead of DirectCompute."
14
+MultiThreading="Multi-Threading"
15
+MultiThreading.Description="Use more than one thread to handle submitting frames and retrieving packets. This can help on slower CPUs but will use more system resources overall. It will negatively impact performance on faster CPUs."
16
+QueueSize="Queue Size"
17
+QueueSize.Description="Queue this many frames for the encoder before attempting to retrieve packets. A higher value introduces more latency while a lower value may cause overloaded encoding. It is not recommended to change this from the default."
18
 View="View Mode"
19
 View.Description="What properties should be shown?\nUsing '\@View.Master\@' will disqualify you from receiving support."
20
 View.Basic="Basic"
21
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/es-ES.ini Changed
24
 
1
@@ -83,12 +83,6 @@
2
 VBVBuffer.Size.Description="Tamaño del Buffer VBV que se utiliza para el control de Bitrate en una secuencia."
3
 VBVBuffer.InitialFullness="Amplitud Inicial del Buffer VBV"
4
 VBVBuffer.InitialFullness.Description="Como de lleno es el buffer VMV inicialmente (en %), solo afectará a la secuencia inicial de la codificación."
5
-KeyframeInterval="Intervalo de fotogramas clave"
6
-KeyframeInterval.Description="Intervalo (en segundos) entre fotogramas clave."
7
-H264.IDRPeriod="Período de IDR (en fotogramas)"
8
-H264.IDRPeriod.Description="Define la distancia entre Instantaneous Decoding Refreshes (IDR) en Fotogramas. También controla el tamaño de la secuencia del GOP."
9
-H265.IDRPeriod="Período de IDR (en GOP's)"
10
-H265.IDRPeriod.Description="Define la distancia entre Instantaneous Decoding Refreshes (IDR) en GOPs."
11
 GOP.Type="Tipo de GOP"
12
 GOP.Type.Description="Qué tipo de GOP se debe utilizar: \n - ' \@GOP. Type.Fixed\@' utilizará siempre distancias fijas entre cada GOP. \n - ' \@GOP. Type.Variable\@' permite GOPs de diferentes tamaños, dependiendo de lo que se necesite.\n'\@GOP. Type.Fixed\@' es cómo los trabajos de implementación H264 y lo mejor para los streaming en red local, mientras que ' \@GOP. Type.Variable\@' es el mejor para grabaciones de alta calidad de bajo tamaño."
13
 GOP.Type.Fixed="Fijo"
14
@@ -120,8 +114,7 @@
15
 Video.API.Description="¿Qué API debe usar el backend?"
16
 Video.Adapter="Adaptador de video"
17
 Video.Adapter.Description="¿Qué adaptador deberíamos tratamos de codificar?"
18
-OpenCL="OpenCL"
19
-OpenCL.Description="¿Se debe usar OpenCL para la presentación de fotogramas? Técnicamente es más rápido, pero provoca problemas con controladores de Intel (debido a bibliotecas incompatibles de OpenCL)."
20
+OpenCL.Transfer="Transferencia de OpenCL"
21
 View="Modo de visualización"
22
 View.Description="¿Qué propiedades deben mostrarse? \nUsando '\@View.Master\@' te descalificará de recibir soporte."
23
 View.Basic="Básico"
24
obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/et-EE.ini Added
44
 
1
@@ -0,0 +1,42 @@
2
+Utility.Default="Vaikeseade"
3
+Utility.Automatic="Automaatne"
4
+Utility.Manual="Manuaalne"
5
+Utility.Switch.Disabled="Välja lülitatud"
6
+Utility.Switch.Enabled="Sisse lülitatud"
7
+Preset="Eelseadistus"
8
+Preset.ResetToDefaults="Taasta vaikeväärtused"
9
+Preset.Recording="Salvestamine"
10
+Preset.HighQuality="Kõrge kvaliteet"
11
+Preset.Indistinguishable="Eristamatu"
12
+Preset.Lossless="Kadudeta"
13
+Preset.Twitch="Twitch"
14
+Preset.YouTube="YouTube"
15
+Usage="Kasutus"
16
+Usage.Transcoding="Transkodeerida"
17
+Usage.UltraLowLatency="Väga Madal-viivitus"
18
+Usage.LowLatency="Madal-viivitus"
19
+Usage.Webcam="Veebikaamera"
20
+QualityPreset="Kvaliteedi eelseadistus"
21
+QualityPreset.Description="Mis kvaliteedi eelseadistust peaks AMF proovima saavutada:\n- '\@QualityPreset.Speed\@' on kiireim aga halvima kvaliteediga,\n- '\@QualityPreset.Balanced\@' on tasakaalustatud segu mõlemast,\n- '\@QualityPreset.Quality\@' annab parima kvaliteedi antud bitikiirusele."
22
+QualityPreset.Speed="Kiirus"
23
+QualityPreset.Balanced="Tasakaalustatud"
24
+QualityPreset.Quality="Kvaliteet"
25
+Profile="Profiil"
26
+ProfileLevel="Profiili tase"
27
+AspectRatio="Kuvasuhe"
28
+RateControlMethod.CBR="Pidev bitikiirus (CBR)"
29
+PrePassMode="Pre-Pass Režiim"
30
+VBAQ="VBAQ"
31
+VBVBuffer="VBV puhver"
32
+VBVBuffer.Strictness="VBV puhvri rangus"
33
+VBVBuffer.Size="VBV puhvri suurus"
34
+GOP.Type.Fixed="Fikseeritud"
35
+GOP.Alignment.Description="Eksperimentaalne, mõjud on teadmata. Kasutage omal vastutusel."
36
+Video.API="Video API"
37
+Video.API.Description="Mis API-d peaks backend kasutama?"
38
+Video.Adapter="Video Adapter"
39
+View="Vaaterežiim"
40
+View.Basic="Põhiline"
41
+View.Expert="Ekspert"
42
+View.Master="Meister"
43
+
44
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/eu-ES.ini Changed
15
 
1
@@ -24,6 +24,13 @@
2
 Profile.Description="Zein profila erabili nahi duzu kodetzeko, laguntza zabalduenetik kalitate handienera ordenatuta."
3
 ProfileLevel="Profil maila"
4
 ProfileLevel.Description="Zein profil maila erabili nahi duzu kodetzeko, gomendatzen da uztea \@Utility.Automatic\@"
5
+Tier="Maila"
6
+AspectRatio="Aspektu-erlazioa"
7
+CodingType="Kodetze mota"
8
+RateControlMethod="Emaria kontrolatzeko metodoa"
9
+RateControlMethod.CQP="QP konstantea (CQP)"
10
+RateControlMethod.CBR="Bit-emari konstantea (CBR)"
11
+Bitrate.Target="Bit-emari helburua"
12
 AMF.H264.MaximumLTRFrames="Gehienezko LTR fotogramak"
13
 AMF.H264.MaximumAccessUnitSize="Sarbide unitatearen gehienezko tamaina"
14
 AMF.H264.HeaderInsertionSpacing="Goiburuak txertatzeko tartea"
15
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/fi-FI.ini Changed
62
 
1
@@ -71,6 +71,12 @@
2
 FillerData.Description="Täytedatan käyttöönotolla enkooderi pitää vähintään \@Bitrate.Target\@ täyttämällä jäljelle jääneen tilan ketjussa tyhjällä informaatiolla."
3
 FrameSkipping="Frame-ohitus"
4
 FrameSkipping.Description="Ruutujen ohituksella enkooderi voi pudottaa frameja täyttääkseen \@Bitrate.Target\@ vaatimukset.\nPudottaessaan framen enkooderi syöttää sen sijaan toistetun viimeisen NAL -framen striimiin.\nVoi auttaa jos käytössä on erittäin matala \@Bitrate.Target\@ vaatimus."
5
+FrameSkipping.Period="Skip-Frame aika"
6
+FrameSkipping.Period.Description="Kesto (frameissa) ohitettujen framejen välissä. Tällä voidaan simuloida alempaa kuvataajuutta mihin OBS on asetettu, silti ylläpitäen kelvollisen lähetyksen."
7
+FrameSkipping.Behaviour="Skip-Frame käyttäytyminen"
8
+FrameSkipping.Behaviour.Description="Määritä kuinka framejen ohitus käyttäytyy."
9
+FrameSkipping.SkipNth="Ohita vain joka #. frame"
10
+FrameSkipping.KeepNth="Säilytä vain joka #. frame"
11
 VBAQ="VBAQ"
12
 VBAQ.Description="Ota käyttöön \"Variance Based Adaptive Quantization\" (VBAQ) joka pohjautuu pikselien vaihteluun bitraten jakamisen helpottamiseksi.\nSe toimii idealla jossa ihmissilmä on herkempi kuvan virheille tasaisissa kohdissa, jolloin bitrate kohdistetaan näille alueille.\nKäyttämällä tätä laatu saattaa parantua tietynlaista sisältöä näytettäessä."
13
 EnforceHRD="Pakota HRD"
14
@@ -83,12 +89,24 @@
15
 VBVBuffer.Size.Description="VBV-puskurin koko jota käytetään ketjussa bitraten säädössä."
16
 VBVBuffer.InitialFullness="VBV-puskurin alustava täysinäisyys"
17
 VBVBuffer.InitialFullness.Description="VBV-puskurin alustavan täysinäisyyden suuruus (%), vaikuttaa vain alustavaan enkoodausketjuun."
18
-KeyframeInterval="Keyframe -väli"
19
-KeyframeInterval.Description="Aikaväli (sekunteina) keyframejen välissä."
20
-H264.IDRPeriod="IDR-ajanjakso (frameina)"
21
-H264.IDRPeriod.Description="Määrittää etäisyyden Instantaneous Decoding Refreshes (IDR) välillä frameissa. Säätää myös GOP-ketjun kokoa."
22
-H265.IDRPeriod="IDR-ajanjakso (GOP)"
23
-H265.IDRPeriod.Description="Määrittää etäisyyden Instantaneous Decoding Refreshes (IDR) välillä GOP:seissa."
24
+Interval.Keyframe="Keyframe -väli"
25
+Interval.Keyframe.Description="Aikaväli (sekunneissa) keyframejen välillä."
26
+Period.IDR.H264="IDR-aika (frameissa)"
27
+Period.IDR.H264.Description="Määrittää välimatkan Instantaneous Decoding Refreshes (IDR):lle frameissa."
28
+Period.IDR.H265="IDR-aika (GOPeissa)"
29
+Period.IDR.H265.Description="Määrittää välimatkan Instantaneous Decoding Refreshes (IDR):lle GOPeissa."
30
+Interval.IFrame="I-Frame -väli"
31
+Interval.IFrame.Description="Aikaväli (sekunneissa) I-framejen välillä. I-framet syrjäyttävät P-framet ja B-framet."
32
+Period.IFrame="I-Frame -aika (frameissa)"
33
+Period.IFrame.Description="Välimatka (frameissa) I-framejen välillä. I-framet syrjäyttävät P-framet ja B-framet."
34
+Interval.PFrame="P-Frame -väli"
35
+Interval.PFrame.Description="Aikaväli (sekunneissa) P-framejen välillä. P-framet syrjäyttävät B-framet."
36
+Period.PFrame="P-Frame -aika (frameissa)"
37
+Period.PFrame.Description="Välimatka (frameissa) P-framejen välillä. P-framet syrjäyttävät B-framet."
38
+Interval.BFrame="B-Frame -väli"
39
+Interval.BFrame.Description="Aikaväli (sekunneissa) B-framejen välillä."
40
+Period.BFrame="B-Frame -aika (frameissa)"
41
+Period.BFrame.Description="Välimatka (frameissa) B-framejen välillä."
42
 GOP.Type="GOP-tyyppi"
43
 GOP.Type.Description="Millaista GOP-tyyppiä käytetään:\n- \"\@GOP.Type.Fixed\@\" käyttää aina kiinteää väliä jokaisen GOP:n välillä.\n- \"\@GOP.Type.Variable\@\" sallii eri kokoisia GOP-arvoja, tarpeesta riippuen.\n\"\@GOP.Type.Fixed\@\" on kuinka H264 toteutus toimii ja on paras paikallisen verkon suoralähetyksessä, kunnes taas \"\@GOP.Type.Variable\@\" on paras pienikokoiseen korkealaatuiseen tallentamiseen."
44
 GOP.Type.Fixed="Kiinteä"
45
@@ -120,8 +138,14 @@
46
 Video.API.Description="Mitä APIa käytetään backendillä?"
47
 Video.Adapter="Näytönohjain"
48
 Video.Adapter.Description="Millä näytönohjaimella yritetään enkoodata?"
49
-OpenCL="OpenCL"
50
-OpenCL.Description="Käytetäänkö OpenCL:ää framejen toimittamiseen? Teknisesti nopeampi, mutta aiheuttaa ongelmia Intelin ajurien kanssa (Epäyhteensopivien OpenCL kirjastojen kanssa)."
51
+OpenCL.Transfer="OpenCL-siirto"
52
+OpenCL.Transfer.Description="Siirrä frame näytönohjaimelle käyttäen OpenCL:ää kartoitetun muistin sijasta. Siirto OpenCL:n kautta on vähemmän hajanaista kuin siirto kartoitetun muistin kautta näytönohjainta käytettäessä."
53
+OpenCL.Conversion="OpenCL-muuntaminen"
54
+OpenCL.Conversion.Description="Muunna frame näytönohjaimella käyttäen OpenCL:ää DirectComputen sijasta."
55
+MultiThreading="Monisäikeistys"
56
+MultiThreading.Description="Käytä useampaa kuin yhtä säiettä käsittelemään framejen toimitusta ja pakettien noutoa. Tämä voi auttaa hitaammilla prosessoreilla, mutta käyttää enemmän järjestelmän resursseja. Tällä on negatiivinen vaikutus suorituskykyyn nopeammilla prosessoreilla."
57
+QueueSize="Jonon koko"
58
+QueueSize.Description="Aseta näin monta framea jonoon enkooderille ennen pakettien noutamisen yrittämistä. Korkeampi arvo nostaa viivettä, kunnes taas matalampi arvo voi aiheuttaa enkooderin ylikuormitusta. Tätä ei suositella muutettavaksi vakio arvostaan."
59
 View="Katselutila"
60
 View.Description="Mitä ominaisuuksia näytetään?\nKäyttämällä \"\@View.Master\@\" menetät oikeutesi saada tukea."
61
 View.Basic="Yksinkertainen"
62
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/fr-FR.ini Changed
133
 
1
@@ -12,21 +12,113 @@
2
 Preset.Twitch="Twitch"
3
 Preset.YouTube="YouTube"
4
 Usage="Usage"
5
+Usage.Description="Le mode d'optimisation utilisé par AMF :\n- '\@Usage.Transcoding\@' : utilisation pour du transcodage (réglage recommandé),\n- '\@Usage.UltraLowLatency\@' : encodage à très faible latence,\n- '\Usage.LowLatency\@' : quasiment identique au réglage ci-dessus, avec une latence légèrement plus élevée.\nLe streaming n'est possible qu'en mode '\Usage.Transcoding\@', l'enregistrement est possible avec tous les autres modes."
6
 Usage.Transcoding="Transcodage"
7
 Usage.UltraLowLatency="Très faible latence"
8
 Usage.LowLatency="Faible latence"
9
 Usage.Webcam="Webcam"
10
 QualityPreset="Préréglages de qualité"
11
+QualityPreset.Description="Le préréglage de qualité qu'AMF doit cibler :\n- '\@QualityPreset.Speed\@' est le plus rapide, au détriment d'une qualité déplorable,\n- '\@QualityPreset.Balanced\@' est un compromis entre,\n- '\@QualityPreset.Speed\@' et '\@QualityPreset.Quality\@' délivre la meilleure qualité pour un débit donné."
12
 QualityPreset.Speed="Vitesse"
13
 QualityPreset.Balanced="Equilibré"
14
 QualityPreset.Quality="Qualité"
15
 Profile="Profil"
16
+Profile.Description="Quel profil d'encodage. Tri de la meilleure performance (en haut) à la meilleure qualité (en bas)."
17
 ProfileLevel="Niveau de profil"
18
+ProfileLevel.Description="Quel niveau de profil à utiliser. Il est préférable de laisser cela à \@Utility.Automatic\@."
19
 Tier="Palier"
20
+Tier.Description="Quel niveau d’encodage à. « High » utilise un débit/bande passante élevée tandis que « Main » s’adresse aux médias traditionnels et consomme moins de ressources."
21
 AspectRatio="Ratio de l'image"
22
+AspectRatio.Description="Quel ratio de format d'image doit être écrit dans le fichier de sortie."
23
+CodingType="Type de codage"
24
+CodingType.Description="Le type de codage à utiliser:\n* \"\@Utility.Automatic\@\" : laisser AMF décider (recommandé).\n* CALVC (Context-Adaptive Variable-Length Coding) est rapide mais lourd.\n* CABAC (Context-Adaptive Binary Arithmetic Coding) est lent mais léger."
25
+MaximumReferenceFrames="Référence maximum d'images"
26
+MaximumReferenceFrames.Description="Combien d’images l’encodeur peut-il utiliser au maximum lorsqu'il encode. Cela a un impact direct sur la qualité d’encodage."
27
+RateControlMethod="Méthode de contrôle du débit"
28
+RateControlMethod.Description="Quel méthode de contrôle de taux doit-être utilisée : \n - '\@RateControlMethod.CQP\@' Assigné de manière fixe I-/P-/B-Frame QP values,\n- '\@RateControlMethod.CBR\@' Rester au débit cible donné (à l'aide de données de remplissage) (recommandé pour le streaming),\n- '\@RateControlMethod.VBR\@' Rester en dessous du débit maximum donné,\n- '\@RateControlMethod.VBRLAT\@' rester proche du débit cible donné si la latence et la charge GPU le permettent, sinon celui-ci utilisera le plus au débit possible (recommandé pour l'enregistrement)."
29
+RateControlMethod.CQP="QP constant (CQP)"
30
+RateControlMethod.CBR="Débit constant (CBR)"
31
+RateControlMethod.VBR="Débit Variable (maximum) (VBR)"
32
+RateControlMethod.VBRLAT="Débit Variable (latence limitée) (VBRLAT)"
33
+PrePassMode="Mode de Prétraitement"
34
+PrePassMode.Description="Pre-Pass est un col de distribution de bitrate secondaire qui permet pour une meilleure répartition de la vitesse de transmission au sein d’une séquence, mais les effets de ceci peuvent varier de carte à carte."
35
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (taille du quart)"
36
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (moitié de la taille)"
37
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (taille réelle)"
38
+Bitrate.Target="Débit cible"
39
+Bitrate.Target.Description="Le débit de données sortantes que l'encodeur va essayer de respecter pendant l'encodage."
40
+Bitrate.Peak="Débit maximal"
41
+Bitrate.Peak.Description="Le débit de données sortantes que l'encodeur va essayer de respecter pendant l'encodage."
42
+QP.IFrame="QP I-Frame"
43
+QP.IFrame.Description="Valeur QP fixé pour utiliser les I-Frames."
44
+QP.PFrame="QP P-Frame"
45
+QP.PFrame.Description="Valeur QP fixé pour utiliser les P-Frames."
46
+QP.BFrame="QP B-Frame"
47
+QP.BFrame.Description="Valeur QP fixé pour utiliser les B-Frames."
48
+QP.Minimum="QP minimal"
49
+QP.Minimum.Description="Plus basse valeur de QP fixé pour utiliser une Frame."
50
+QP.IFrame.Minimum="QP I-Frame minimum"
51
+QP.IFrame.Minimum.Description="Plus basse valeur de QP fixé pour utiliser une I-Frame."
52
+QP.PFrame.Minimum="QP P-Frame minimum"
53
+QP.PFrame.Minimum.Description="Plus basse valeur de QP fixé pour utiliser une P-Frame."
54
+QP.Maximum="QP maximal"
55
+QP.Maximum.Description="Plus haute valeur de QP fixé pour utiliser une Frame."
56
+QP.IFrame.Maximum="QP I-Frame maximum"
57
+QP.IFrame.Maximum.Description="Plus haute valeur de QP fixé pour utiliser une I-Frame."
58
+QP.PFrame.Maximum="QP P-Frame maximum"
59
+QP.PFrame.Maximum.Description="Plus haute valeur de QP fixé pour utiliser une P-Frame."
60
+FillerData="Données de remplissage"
61
+FillerData.Description="Activer le remplissage de données permet à l'encodeur de garder au moins le \@Bitrate.Target\@ en remplissant l'espace restant grâce à des séquences d'information vide."
62
+FrameSkipping="Saut d'images"
63
+FrameSkipping.SkipNth="Ignorer seulement tout les N image"
64
+FrameSkipping.KeepNth="Garder seulement tout les N images"
65
+VBAQ="VBAQ"
66
+EnforceHRD="Applique le DRH"
67
+EnforceHRD.Description="Imposer l'utilisation du décodeur de référence hypothétique qui est utilisé pour vérifier que le flux de sortie de bitstream est correct."
68
+VBVBuffer="Tampon VBV"
69
+VBVBuffer.Description="Quelle méthode utiliser pour déterminer la taille du tampon VBV :\n- \"\@Utility.Automatic\@\" calcule la taille en fonction de la valeur de respect du tampon,\n- \"\@Utility.Manual\@\" laisse le choix de la taille à l'utilisateur.\nLe tampon VBV (Video Buffering Verifier) est utilisé par certaines méthodes de contrôle du débit pour assurer au mieux le respect des contraintes données."
70
+VBVBuffer.Strictness="Respect du tampon VBV"
71
+VBVBuffer.Size="Taille du tampon VBV"
72
+VBVBuffer.Size.Description="La taille du tampon VBV est utilisé pour le contrôle du débit binaire dans une séquence."
73
+VBVBuffer.InitialFullness="Remplissage initial du tampon VBV"
74
+Interval.Keyframe="Intervalle d'images-clé"
75
+Interval.Keyframe.Description="Intervalle (en secondes) entre les images clés."
76
+Period.IDR.H264="Période IDR (en images)"
77
+Period.IDR.H264.Description="Définit la distance entre les Rafraîchissements Instantanés de Décodage (IDR) dans les images."
78
+Period.IDR.H265="Période IDR (en GOPs)"
79
+Period.IDR.H265.Description="Définit la distance entre les Rafraîchissements Instantanés de Décodage (IDR) dans les GOPs."
80
+Interval.IFrame="Intervalle I-image"
81
+Interval.PFrame="Intervalle P-image"
82
+Interval.BFrame="Intervalle B-image"
83
+GOP.Type="Type de GOP"
84
+GOP.Type.Fixed="Résolu"
85
+GOP.Type.Variable="Variable"
86
+GOP.Size="Taille du GOP"
87
+GOP.Size.Description="Taille du GOP (Group Of Pictures) dans les images."
88
+GOP.Size.Minimum="Taille minimum du GOP"
89
+GOP.Size.Minimum.Description="Taille minimal du GOP (Group Of Pictures) dans les images."
90
+GOP.Size.Maximum="Taille maximale du GOP"
91
+GOP.Size.Maximum.Description="Taille maximal du GOP (Group Of Pictures) dans les images."
92
+GOP.Alignment="Alignement du GOP"
93
+GOP.Alignment.Description="Expérimental, les effets sont inconnus. À utiliser à vos risques et périls."
94
+BFrame.Pattern="Modèle B-Frame"
95
+BFrame.DeltaQP="B-Frame Delta QP"
96
+BFrame.Reference="Référence B-Frame"
97
+BFrame.ReferenceDeltaQP="B-Frame référence Delta QP"
98
+DeblockingFilter="Filtre de dégroupage"
99
+DeblockingFilter.Description="Autoriser le décodeur à appliquer un filtre de dégroupage."
100
+MotionEstimation="Estimation de mouvement"
101
+MotionEstimation.Description="L'estimation du mouvement permet à l'encodeur de réduire le débit en calculant le déplacement des pixels."
102
+MotionEstimation.Quarter="Quart de pixel"
103
 MotionEstimation.Half="Demi-pixel"
104
+MotionEstimation.Full="Quart- & demi-pixel"
105
 Video.API="API vidéo"
106
+Video.API.Description="Quelle API l'arrière-plan doit-il utiliser ?"
107
 Video.Adapter="Périphérique vidéo"
108
+OpenCL.Transfer="Transfert OpenCL"
109
+OpenCL.Conversion="Conversion OpenCL"
110
+View="Mode de visualisation"
111
+View.Description="Quels paramètres afficher ?\nChoisir '\@View.Master\@' est réservé aux utilisateurs avancés, et vous exclus d'office de toute possibilité d'assistance de la part du développeur."
112
 View.Basic="Basique"
113
 View.Advanced="Avancé"
114
 View.Expert="Expert"
115
@@ -36,9 +128,17 @@
116
 AMF.H264.MaximumAccessUnitSize="Taille max. d'une Access Unit"
117
 AMF.H264.MaximumAccessUnitSize.Description="Taille maximale d’une unité d’accès pour un NAL. Une valeur de 0 permet à l’encodeur de choisir le meilleur."
118
 AMF.H264.HeaderInsertionSpacing="Intervalle d'insertion de l'en-tête de stream"
119
+AMF.H264.HeaderInsertionSpacing.Description="Combien d’images doit être entre les en-têtes NAL."
120
+AMF.H264.WaitForTask="Attendre la tâche"
121
+AMF.H264.WaitForTask.Description="Inconnu, expérimental"
122
 AMF.H264.SlicesPerFrame="Tranches par image"
123
+AMF.H264.SliceMode="Mode Slice"
124
 AMF.H264.SliceMode.Description="Inconnu, expérimental"
125
+AMF.H264.MaximumSliceSize="Taille maximale de la page"
126
 AMF.H264.MaximumSliceSize.Description="Inconnu, expérimental"
127
+AMF.H264.SliceControlMode="Contrôle du mode du Slice"
128
 AMF.H264.SliceControlMode.Description="Inconnu, expérimental"
129
+AMF.H264.SliceControlSize="Contrôle de la taille du Slice"
130
+AMF.H264.SliceControlSize.Description="Inconnu, expérimental"
131
 AMF.H264.IntraRefresh.NumberOfStripes.Description="Inconnu, expérimental"
132
 
133
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/hu-HU.ini Changed
124
 
1
@@ -17,20 +17,31 @@
2
 Usage.LowLatency="Alacsony késleltetés"
3
 Usage.Webcam="Webkamera"
4
 QualityPreset="Minőségi profil"
5
+QualityPreset.Description="Milyen minőségkészletet célozzon meg az AMF:\n- '\@QualityPreset.Speed\@' a leggyorsabb, viszont a legrosszabb minőséget produkálja,\n- '\@QualityPreset.Balanced\@'egy kiegyensúlyozott középút,\n- '\@QualityPreset.Quality\@' adja a legjobb minőséget a megadott bitsebességre."
6
 QualityPreset.Speed="Sebesség"
7
 QualityPreset.Balanced="Kiegyensúlyozott"
8
 QualityPreset.Quality="Minőségi"
9
 Profile="Profil"
10
+Profile.Description="Milyen Profillal történjen a kódolás. A rendezési sorrend a legjobban támogatottól (legfelső) a legjobb minőségűig terjed (legalul)."
11
 ProfileLevel="Profil szint"
12
+ProfileLevel.Description="Milyen Profil szint kerüljön használatba. A legjobb, ha \@Utility.Automatic\@ értéken marad."
13
 Tier="Szint"
14
+Tier.Description="Milyen besorolásban történjen a kódolás. 'High' a nagyobb bitsebesség/sávszélességet célozza, amíg a 'Main' a fősodratú médiát."
15
 AspectRatio="Képarány"
16
+AspectRatio.Description="Milyen képarány kerüljön a kimeneti fájlba."
17
 CodingType="Kódolás típusa"
18
 MaximumReferenceFrames="Maximális referencia képkockák"
19
+MaximumReferenceFrames.Description="Mennyi legyen a legtöbb képkocka, amit referenciaként használjon a kódoló. Közvetlen hatással van a kódoló minőségére."
20
 RateControlMethod="Sebességvezérlési metódus"
21
 RateControlMethod.CQP="Állandó QP (CQP)"
22
 RateControlMethod.CBR="Konstans bitsebesség (CBR)"
23
 RateControlMethod.VBR="Változó bitsebesség (Csúcsértéket betartva) (VBR)"
24
 RateControlMethod.VBRLAT="Változó bitsebesség (Késleltetés kényszerítése) (VBRLAT)"
25
+PrePassMode="Előrelépéses mód"
26
+PrePassMode.Description="Az Előrelépéses mód az egy másodlagos bitsebesség disztribúciós kör, amely a bitek jobb eloszlását célozza meg a szekvenciában, ellenben a hatása kártyáról kártyára változhat."
27
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (Negyed méret)"
28
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (Fél méret)"
29
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (Teljes méret)"
30
 Bitrate.Target="Célbitsebesség"
31
 Bitrate.Target.Description="Bitsebesség, amelyet megkísérel elérni a szekvencia során."
32
 Bitrate.Peak="Csúcs bitsebesség"
33
@@ -54,24 +65,47 @@
34
 QP.PFrame.Maximum="Maximális P-Képkocka QP"
35
 QP.PFrame.Maximum.Description="P-Képkockában legnagyobb használható QP érték."
36
 FillerData="Kitöltőadat"
37
+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."
38
 FrameSkipping="Képkocka kihagyás"
39
+FrameSkipping.Period="Képkocka ugrási periódus"
40
+FrameSkipping.Period.Description="Kihagyott képkockák közötti időköz (képkockákban). Ez akkor lehet hasznos, ha a egy alacsonyabb képkockasebesség van beállítva, mint az OBS-ben miközben egy érvényes stream folyik."
41
+FrameSkipping.Behaviour="Képugrás eljárás"
42
+FrameSkipping.Behaviour.Description="Meghatározza a Képugrás eljárás működését."
43
+FrameSkipping.SkipNth="Csak minden Ndik képkockát ugorja át"
44
+FrameSkipping.KeepNth="Csak minden Ndik képkockát tartsa meg"
45
 VBAQ="VBAQ"
46
 EnforceHRD="HRD kényszerítése"
47
+EnforceHRD.Description="A Hipotetikus referenciadekóder kényszerítése, amely segítségével ellenőrizhető, hogy a kimeneti bitfolyam helyes e."
48
 VBVBuffer="VBV puffer"
49
 VBVBuffer.Strictness="VBV Puffer kötöttség"
50
 VBVBuffer.Strictness.Description="Meghatározza a VBV puffer szigorúságát, 100% esetén teljesen pontos és 0% esetén kötetlen."
51
 VBVBuffer.Size="VBV pufferméret"
52
 VBVBuffer.Size.Description="A VBV puffer mérete, amely a bitsebesség vezérléshez használatos a szekvenciában."
53
 VBVBuffer.InitialFullness="VBV puffer kezdeti telítettség"
54
-KeyframeInterval="Kulcsképkocka időköze"
55
-KeyframeInterval.Description="A kulcsképkockák közötti időköz (másodpercben)."
56
-H264.IDRPeriod="IDR idő (Képkockákban)"
57
-H264.IDRPeriod.Description="Meghatározza a távolságot két pillanatnyi dekódoló frissítő (IDR) között a képkockákban. A GOP szekvencia méretét is szabályozza."
58
-H265.IDRPeriod="IDR idő (GOP-okban)"
59
+VBVBuffer.InitialFullness.Description="Mennyire legyen telített a VBV puffer kezdetben (%-ban), csak a kódolás kezdő szekvenciáját befolyásolja."
60
+Interval.Keyframe="Kulcsképkocka időköze"
61
+Interval.Keyframe.Description="Időköz (Másodpercben) a kulcsképkockák között."
62
+Period.IDR.H264="IDR periódus (Képkockákban)"
63
+Period.IDR.H264.Description="Meghatározza a távolságot két pillanatnyi dekódfrissítő között (IDR) képkockákban."
64
+Period.IDR.H265="IDR periódus (GOP-okban)"
65
+Period.IDR.H265.Description="Meghatározza a távolságot két pillanatnyi dekódfrissítő között (IDR) GOP-ban."
66
+Interval.IFrame="I-Képkocka időköze"
67
+Interval.IFrame.Description="I képkockák közti távolság (másodpercben). Az I képkockák felülbírálják a B-képkockákat és P képkockákat."
68
+Period.IFrame="I-Képkocka periódus (Képkockákban)"
69
+Period.IFrame.Description="I képkockák közti távolság (képkockákban). Az I képkockák felülbírálják a B-képkockákat és P képkockákat."
70
+Interval.PFrame="P-Képkocka időköze"
71
+Interval.PFrame.Description="P képkockák közti távolság (másodpercben). A P képkockák felülbírálják a B-képkockákat."
72
+Period.PFrame="P-Képkocka periódus (Képkockákban)"
73
+Period.PFrame.Description="P képkockák közti távolság (képkockákban). A P képkockák felülbírálják a B-képkockákat."
74
+Interval.BFrame="B-Képkocka időköze"
75
+Interval.BFrame.Description="Időköz (Másodpercben) B-képkockák között."
76
+Period.BFrame="B-Képkocka periódus (Képkockákban)"
77
+Period.BFrame.Description="Távolság (Képkockákban) B-képkockák között."
78
 GOP.Type="GOP típusa"
79
 GOP.Type.Fixed="Rögzített"
80
 GOP.Type.Variable="Változó"
81
 GOP.Size="GOP méret"
82
+GOP.Size.Description="GOP méret (Képek csoportja) a képkockákban."
83
 GOP.Size.Minimum="GOP méretminimum"
84
 GOP.Size.Minimum.Description="Minimális GOP (képek csoportja) méret keretekben."
85
 GOP.Size.Maximum="GOP méretmaximum"
86
@@ -94,16 +128,27 @@
87
 MotionEstimation.Half="Félpixel"
88
 MotionEstimation.Full="Negyed és félpixel"
89
 Video.API="Videó API"
90
+Video.API.Description="Mely API hátteret használja?"
91
 Video.Adapter="Videó adapter"
92
 Video.Adapter.Description="Milyen Adapteren történjen a kódolás?"
93
-OpenCL="OpenCL"
94
+OpenCL.Transfer="OpenCL átvitel"
95
+OpenCL.Transfer.Description="A képkocka átvitele a GPU-ba OpenCL használatával a leképzett memória helyett. Az OpenCL-el való átvitel kevésbé szórványos mint a leképezett memória, GPU használata esetén."
96
+OpenCL.Conversion="OpenCL Konverzió"
97
+OpenCL.Conversion.Description="Képkockák konvertálása a GPU által OpenCL használatával DirectCompute helyett."
98
+MultiThreading="Több programszál párhuzamos kezelése"
99
+MultiThreading.Description="Több mint egy szál használatával lehet kezelni a képkockák benyújtását és a csomagok lekérését. Ez segíthet lassabb CPU-k esetén, viszont a rendszer válaszsebessége megnőhet. Ez negatívan hat gyorsabb processzorok esetén."
100
+QueueSize="Várólista mérete"
101
+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."
102
 View="Nézet mód"
103
+View.Description="Milyen tulajdonságok jelenjenek meg?\nA '\@View.Master\@' használata kizárja a támogatásban való részesülésből."
104
 View.Basic="Alap"
105
 View.Advanced="Haladó"
106
 View.Expert="Szakértő"
107
 View.Master="Mester"
108
 Debug="Hibakeresés"
109
+Debug.Description="További hibakereső üzenetek engedélyezése. A bekapcsoláshoz szükség van az Open Broadcaster Software Studio újraindítására a következő parancssorral: '--verbose --log_unfiltered' (távolítsa el a ')."
110
 AMF.H264.MaximumLTRFrames="Maximális LTR képkocka"
111
+AMF.H264.MaximumLTRFrames.Description="Hosszútávú referencia (LTR) képkocka egy olyan funkció, amely lehetővé teszi a kódoló számára egyes képek megjelölését referenciaként a következőknek.\nLTR képkockák nem használhatóak B Képkockákként és a kódoló letiltja a a B Képkockák készítését ha ezt használja."
112
 AMF.H264.MaximumAccessUnitSize="Hozzáférési egység maximális mérete"
113
 AMF.H264.MaximumAccessUnitSize.Description="NAL számára a legnagyobb elérési egység."
114
 AMF.H264.HeaderInsertionSpacing="Fejléc beszúrási térköz"
115
@@ -120,6 +165,8 @@
116
 AMF.H264.SliceControlMode.Description="Ismeretlen, kísérleti"
117
 AMF.H264.SliceControlSize="Szeletméret ellenőrzés"
118
 AMF.H264.SliceControlSize.Description="Ismeretlen, kísérleti"
119
+AMF.H264.IntraRefresh.NumberOfStripes="Köztesfrissített száma a csíkozásnak"
120
 AMF.H264.IntraRefresh.NumberOfStripes.Description="Ismeretlen, kísérleti"
121
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Köztes frissítésű makroblokk cellánként"
122
 AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Hány makroblokkot tároljon céllánként?\nA 0 érték kikapcsolja a funkciót.\nIntra-Refresh kódolás a gyorsabb lejátszáshoz és kereséshez használható."
123
 
124
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/it-IT.ini Changed
54
 
1
@@ -1,3 +1,52 @@
2
+Utility.Default="Predefinito"
3
+Utility.Automatic="Automatico"
4
+Utility.Manual="Manuale"
5
+Utility.Switch.Disabled="Disabilitato"
6
+Utility.Switch.Enabled="Attivo"
7
+Preset="Preset"
8
+Preset.ResetToDefaults="Ripristina a Predefiniti"
9
+Preset.Recording="Registrazione"
10
+Preset.HighQuality="Alta Qualità"
11
+Preset.Indistinguishable="Indistinguibile"
12
+Preset.Lossless="Lossless"
13
+Preset.Twitch="Twitch"
14
+Preset.YouTube="YouTube"
15
+Usage="Utilizzo"
16
+Usage.Transcoding="Transcodifica"
17
+Usage.UltraLowLatency="Latenza ultra bassa"
18
+Usage.LowLatency="Bassa latenza"
19
+Usage.Webcam="Webcam"
20
+QualityPreset="Qualità Preset"
21
+QualityPreset.Speed="Veloce"
22
+QualityPreset.Balanced="Bilanciato"
23
+QualityPreset.Quality="Qualità"
24
+Profile="Profilo"
25
+ProfileLevel="Livello profilo"
26
+Tier="Livello"
27
+AspectRatio="Proporzioni"
28
+CodingType="Tipo di codifica"
29
+MaximumReferenceFrames="Numero massimo di frames di riferimento"
30
+RateControlMethod="Metodo di controllo della frequenza"
31
+RateControlMethod.CQP="QP Costante (QPC)"
32
+RateControlMethod.CBR="Bitrate costante (CBR)"
33
+RateControlMethod.VBR="Bitrate variabile (picco vincolato) (VBR)"
34
+RateControlMethod.VBRLAT="Bitrate variabile (latenza vincolata) (VBRLAT)"
35
+Bitrate.Target="Bitrate di destinazione"
36
+Bitrate.Peak="Bitrate di picco"
37
+QP.IFrame="I-Frame QP"
38
+QP.PFrame="P-Frame QP"
39
+QP.BFrame="B-Frame QP"
40
+QP.Minimum="QP minimo"
41
+QP.IFrame.Minimum="Minimo I-Frame QP"
42
+QP.PFrame.Minimum="Minimo P-Frame QP"
43
+QP.Maximum="QP massimo"
44
+QP.IFrame.Maximum="Massimo I-Frame QP"
45
+QP.PFrame.Maximum="Massimo P-Frame QP"
46
+FillerData="Dati di riempimento"
47
+VBAQ="VBAQ"
48
+EnforceHRD="Applica HRD"
49
+VBVBuffer="Buffer VBV"
50
+VBVBuffer.Size="Dimensione buffer VBV"
51
 AMF.H264.MaximumLTRFrames="Fotogrammi LTR Massimi"
52
 AMF.H264.MaximumAccessUnitSize="Massima dimensione di unità d'accesso"
53
 AMF.H264.HeaderInsertionSpacing="Spaziatura di inserimento di intestazione"
54
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/ja-JP.ini Changed
62
 
1
@@ -71,6 +71,12 @@
2
 FillerData.Description="フィラーデータを有効にするとエンコーダは空の情報で残りのスペースを埋めることによって少なくとも \@Bitrate.Target\@ を維持することができます。"
3
 FrameSkipping="フレームスキップ"
4
 FrameSkipping.Description="フレームスキッピングはエンコーダが \@Bitrate.Target\@ 要件を満たすためにフレームをドロップすることを可能にします。\nエンコーダがフレームを落とすときに代わりにリピートラストフレームNALをストリームに挿入します。\n \@Bitrate.Target\@ 要件が非常に低い場合に役立ちます。"
5
+FrameSkipping.Period="スキップフレーム周期"
6
+FrameSkipping.Period.Description="スキップされたフレーム間の間隔。(フレーム内) OBSが有効なストリームを持っている間に設定されているフレームレートよりも低いフレームレートをシミュレートするために使用できます。"
7
+FrameSkipping.Behaviour="スキップフレームの動作"
8
+FrameSkipping.Behaviour.Description="フレームスキップの動作方法を定義します。"
9
+FrameSkipping.SkipNth="N番目のフレームごとにスキップする"
10
+FrameSkipping.KeepNth="すべてのN番目のフレームのみを保持する"
11
 VBAQ="VBAQ"
12
 VBAQ.Description="ピクセルの分散に基づいてビットレートをより良く分配する '分散に基づく適応型量子化' (VBAQ) の使用を有効にします。\n人間の視覚系が高度なテクスチャ領域のアーチファクトに対して敏感でないという考え方に基づきビットレート配分をより滑らかな表面に向けることができます。\nこれを有効にすると特定のコンテンツの主観的品質が向上する可能性があります。"
13
 EnforceHRD="HRD を強制"
14
@@ -83,12 +89,24 @@
15
 VBVBuffer.Size.Description="シーケンスにおけるビットレート制御のために使用されている VBV バッファーのサイズ。"
16
 VBVBuffer.InitialFullness="VBV バッファ初期充満"
17
 VBVBuffer.InitialFullness.Description="VBV バッファの初期充足率 (%) がどの程度か、エンコードの初期シーケンスにのみ影響します。"
18
-KeyframeInterval="キーフレーム間隔"
19
-KeyframeInterval.Description="キーフレーム同士の間隔(秒単位)。"
20
-H264.IDRPeriod="IDR 周期 (フレーム数)"
21
-H264.IDRPeriod.Description="フレーム内の瞬時デコードリフレッシュ (IDR) 間の距離を定義します。 GOP-シーケンスのサイズも制御します。"
22
-H265.IDRPeriod="IDR 周期 (GOP数)"
23
-H265.IDRPeriod.Description="GOP内の瞬時デコードリフレッシュ (IDR) 間の距離を定義します。"
24
+Interval.Keyframe="キーフレーム間隔"
25
+Interval.Keyframe.Description="キーフレーム同士の間隔。(秒単位)"
26
+Period.IDR.H264="IDR 周期 (フレーム数)"
27
+Period.IDR.H264.Description="フレーム内の瞬時デコードリフレッシュ (IDR) 間の距離を定義します。"
28
+Period.IDR.H265="IDR 周期 (GOP数)"
29
+Period.IDR.H265.Description="GOP内の瞬時デコードリフレッシュ (IDR) 間の距離を定義します。"
30
+Interval.IFrame="I-フレーム間隔"
31
+Interval.IFrame.Description="I-フレーム同士の間隔。(秒単位) I-フレームはP-フレームと B-フレームをオーバーライドします。"
32
+Period.IFrame="I-フレーム周期 (フレーム数)"
33
+Period.IFrame.Description="I-フレーム間の距離。(フレーム内) I-フレームはP-フレームとB-フレームをオーバーライドします。"
34
+Interval.PFrame="P-フレーム間隔"
35
+Interval.PFrame.Description="P-フレーム同士の間隔。(秒単位) P-フレームはB-フレームをオーバーライドします。"
36
+Period.PFrame="P-フレーム周期 (フレーム数)"
37
+Period.PFrame.Description="P-フレーム間の距離。(フレーム内) P-フレームはB-フレームをオーバーライドします。"
38
+Interval.BFrame="B-フレーム間隔"
39
+Interval.BFrame.Description="B-フレーム同士の間隔。(秒単位)"
40
+Period.BFrame="B-フレーム周期 (フレーム数)"
41
+Period.BFrame.Description="B-フレーム間の距離。(フレーム内)"
42
 GOP.Type="GOP 型"
43
 GOP.Type.Description="使用する GOP 型:\n - '\@GOP.Type.Fixed\@' 常にそれぞれの GOP 間の固定距離を使用。\n '\@GOP.Type.Variable\@' 必要に応じて、さまざまなサイズの Gop が使用されます。\n'\@GOP.Type.Fixed\@' はH264の実装方法次第でローカルネットワーク配信に最適で、一方 ' \@GOP.Type.Variable\@' はサイズ小さいの高品質の録画に最適です。"
44
 GOP.Type.Fixed="固定"
45
@@ -120,8 +138,14 @@
46
 Video.API.Description="バックエンドはどの API を使用すべきか?"
47
 Video.Adapter="ビデオアダプター"
48
 Video.Adapter.Description="どのアダプターでエンコードを試みるか?"
49
-OpenCL="OpenCL"
50
-OpenCL.Description="OpenCL をフレームの送信に使用する必要がありますか? 技術的に高速ですが、インテルのドライバに問題が発生します。 (互換性のない OpenCL ライブラリのため)"
51
+OpenCL.Transfer="OpenCL 転送"
52
+OpenCL.Transfer.Description="マッピングされたメモリの代わりにOpenCLを使用してGPUにフレームを転送します。OpenCLを介した転送はGPUが使用されているときのマップされたメモリを経由した転送よりもあまり散発的ではありません。"
53
+OpenCL.Conversion="OpenCL 変換"
54
+OpenCL.Conversion.Description="DirectComputeの代わりにOpenCLを使用してGPUでフレームを変換する"
55
+MultiThreading="マルチスレッド"
56
+MultiThreading.Description="フレームの送信とパケットの取得を処理するために複数のスレッドを使用します。これは低速のCPUでは役立ちますがシステムリソース全体を使用します。高速なCPUではパフォーマンスに悪影響を与えます。"
57
+QueueSize="キューサイズ"
58
+QueueSize.Description="パケットを取得しようとする前にこの多くのフレームをエンコーダにキューイングします。値を大きくすると遅延が増え、値を小さくするとエンコードが高負荷になる可能性があります。これをデフォルトから変更することはお勧めしません。"
59
 View="表示モード"
60
 View.Description="どのプロパティを表示する必要がありますか?\n '\@View.Master\@' の使用はサポートを受けることができなくなります。"
61
 View.Basic="基本"
62
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/ko-KR.ini Changed
62
 
1
@@ -71,6 +71,12 @@
2
 FillerData.Description="데이터 채우기는 인코더가 한 장면에 남은 공간을 빈 정보로 채워 목표 비트레이트를 유지할 수 있도록 합니다."
3
 FrameSkipping="프레임 생략"
4
 FrameSkipping.Description="프레임 생략은 인코더가 목표로 하는 비트레이트 요건을 맞추기 위해 프레임을 떨어뜨릴 수 있습니다.\n인코더가 프레임 하나를 떨어뜨리면 마지막 프레임 NAL을 대신 전송합니다.\n목표 비트레이트가 아주 낮을 때 도움이 될 수 있습니다."
5
+FrameSkipping.Period="프레임 생략 구간"
6
+FrameSkipping.Period.Description="생략된 프레임 사이의 간격(프레임 내) 을 의미합니다. 방송은 양호하지만 OBS에서 지정한 프레임율보다 낮은 여건일 때 사용할 수 있습니다."
7
+FrameSkipping.Behaviour="프레임 생략 동작 설정"
8
+FrameSkipping.Behaviour.Description="프레임 생략 방식을 설정합니다."
9
+FrameSkipping.SkipNth="매 N 번째 프레임에서만 생략"
10
+FrameSkipping.KeepNth="매 N번째 프레임만 유지"
11
 VBAQ="VBAQ"
12
 VBAQ.Description="'분산 기반 적응 양자화' (VBAQ) 를 사용하여 비트레이트를 효율적으로 배분합니다.\n이 방식은 인간의 시각 체계가 고밀도의 질감을 표현하는 영역에서 보이는 인공결함에 대해 덜 예민한 점을 이용했습니다. 따라서 동일한 비트레이트로 더 매끄러운 표면을 연출할 수 있습니다.\n처리하는 영상의 내용에 따라 품질에 대한 주관적인 평가가 개선될 수 있습니다."
13
 EnforceHRD="HRD 강제 적용"
14
@@ -83,12 +89,24 @@
15
 VBVBuffer.Size.Description="VBV의 크기는 한 장면의 비트레이트 제어에 사용하는 단위입니다."
16
 VBVBuffer.InitialFullness="VBV 버퍼 초기 충만도"
17
 VBVBuffer.InitialFullness.Description="초기 VBV버퍼가 얼마나 충만한지는 오로지 인코딩의 초반에만 영향을 미칩니다."
18
-KeyframeInterval="키프레임 간격"
19
-KeyframeInterval.Description="키프레임 사이의 간격 (초)."
20
-H264.IDRPeriod="IDR 기간 (프레임)"
21
-H264.IDRPeriod.Description="프레임 내에서 순간 복호 갱신(nstantaneous Decoding Refreshes) 사이의 거리를 설정합니다. 또한, GOP-장면 크기를 제어합니다."
22
-H265.IDRPeriod="IDR 기간 (프레임)"
23
-H265.IDRPeriod.Description="GOP 내에서 Instantaneous Decoding Refreshes (IDR) 의 간격을 설정합니다."
24
+Interval.Keyframe="키프레임 간격"
25
+Interval.Keyframe.Description="키프레임 사이의 간격 (초)."
26
+Period.IDR.H264="IDR 기간 (프레임 내)"
27
+Period.IDR.H264.Description="프레임 내 Instantaneous Decoding Refreshes (IDR) 의 간격을 설정합니다."
28
+Period.IDR.H265="IDR 기간 (GOP 내)"
29
+Period.IDR.H265.Description="GOP 내에서 Instantaneous Decoding Refresh (IDR) 간 거리를 설정합니다."
30
+Interval.IFrame="I-프레임 간격"
31
+Interval.IFrame.Description="I-프레임 사이의 간격을 설정합니다. I-프레임은 P-프레임과 B-프레임보다 우선시 됩니다 (초)."
32
+Period.IFrame="I-프레임 기간 (프레임 내)"
33
+Period.IFrame.Description="I-프레임 사이의 거리를 설정합니다. I-프레임은 P-프레임과 B-프레임보다 우선시 됩니다 (초)."
34
+Interval.PFrame="P-프레임 간격"
35
+Interval.PFrame.Description="P-프레임 사이의 간격을 설정합니다. P-프레임은 B-프레임보다 우선시 됩니다 (초)."
36
+Period.PFrame="P-프레임 기간 (프레임 내)"
37
+Period.PFrame.Description="P-프레임 사이의 거리를 설정합니다. P-프레임은 B-프레임보다 우선시됩니다 (프레임 내)."
38
+Interval.BFrame="B-프레임 간격"
39
+Interval.BFrame.Description="B-프레임 사이의 간격 (초)."
40
+Period.BFrame="B-프레임 기간 (프레임 내)"
41
+Period.BFrame.Description="B-프레임 사이의 거리를 설정합니다 (프레임 내)."
42
 GOP.Type="GOP 형식"
43
 GOP.Type.Description="GOP 형식을 결정합니다:\n- '\@GOP.Type.Fixed\@'는 GOP 간격을 항상 고정합니다.\n- '\@GOP.Type.Variable\@' 는 GOP 의 크기를 필요에 따라 조정합니다.\n'\@GOP.Type.Fixed\@'는 H264적용 방식이며 로컬 네트워크 스트리밍에 가장 알맞습니다. '\@GOP.Type.Variable\@'는 작은 크기, 고품질 녹화에 가장 알맞습니다."
44
 GOP.Type.Fixed="고정"
45
@@ -120,8 +138,14 @@
46
 Video.API.Description="백엔드에서 어떤 API를 사용할까요?"
47
 Video.Adapter="비디오 어댑터:"
48
 Video.Adapter.Description="인코딩에서 어떤 어댑터를 사용합니까?"
49
-OpenCL="OpenCL"
50
-OpenCL.Description="OpenCL을 프레임 전송에 사용합니까? 기술적으로는 더 빠르지만 일부 인텔 드라이버와 문제가 발생할 수 있습니다. (OpenCL 라이브러리와 호환이 되지 않습니다.)"
51
+OpenCL.Transfer="OpenCL 전송"
52
+OpenCL.Transfer.Description="GPU에서 프레임을 전송할 때 다른 장치에서 처리한 메모리 대신 OpenCL을 사용합니다. OpenCL 방식을 사용하면 GPU를 사용하는 방식에 비해 전송 횟수가 줄어듭니다."
53
+OpenCL.Conversion="OpenCL 변환 작업"
54
+OpenCL.Conversion.Description="GPU 에서 프레임을 전환할 때 DirectCompute 대신 OpenCL을 사용합니다."
55
+MultiThreading="멀티-쓰레딩"
56
+MultiThreading.Description="프레임을 제출하고 패킷을 수렴하는 작업을 여러 개의 스레드에 나누어 처리합니다. 느린 CPU에서는 작업 효율을 높일 수 있지만, 전반적으로 시스템 자원을 더 많이 요구합니다. 빠른 CPU에서는 오히려 부정적인 영향을 미칠 수 있습니다."
57
+QueueSize="대기열 크기"
58
+QueueSize.Description="인코더에서 패킷을 수렴하기 전에 얼마나 많은 프레임을 대기열에 둘지 설정합니다. 값이 크면 더 많은 대기 시간이 걸릴 수 있습니다. 반대로 값이 낮으면 인코딩에 과부하가 발생할 수 있습니다. 기본값을 변경하는 것은 추천하지 않습니다."
59
 View="보기 모드"
60
 View.Description="얼마나 많은 설정을 표시할까요?\n참고하실 것은 '\@View.Master\@'을 사용하면 개발자로부터 지원을 받을 수 없습니다."
61
 View.Basic="기본"
62
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini Changed
138
 
1
@@ -25,27 +25,110 @@
2
 Profile="Profiel"
3
 Profile.Description="Met welk profiel geëncodet moet worden. Gesorteerd van best ondersteunt (boven) tot beste kwaliteit (onder)."
4
 ProfileLevel="Profielniveau"
5
+ProfileLevel.Description="Welk profielniveau te gebruiken. Het is het beste om dit op \@Utility.Automatic\@ te laten staan."
6
 Tier="Niveau"
7
+Tier.Description="Welke niveau om te encoden. 'High' gebruikt een hoge bitrate en bandbreedte terwijl 'Main' is gericht op veelgebruikte platformen."
8
 AspectRatio="Beeldverhouding"
9
+AspectRatio.Description="Welke beeldverhouding moeten worden vermeld in het uitvoerbestand."
10
 CodingType="Codeertype"
11
+CodingType.Description="Welk coderingstype moet gebruikt worden:\n* \@AMF.Util.Default\@ laat AMF bepalen (aanbevolen).\n* CALVC (Context-Adaptive Variable-Length Coding) is sneller, maar groter.\n* CABAC (Context-Adaptive Binary Arithmetic Coding) is langzamer, maar kleiner."
12
 MaximumReferenceFrames="Maximale referentieframes"
13
+MaximumReferenceFrames.Description="Naar hoeveel frames de encoder maximaal mag refereren tijdens het encoden. Heeft een directe invloed op kwaliteit van de video."
14
 RateControlMethod="Rate control methode"
15
+RateControlMethod.Description="Welke rate-control methode moet gebruikt worden:\n- '\@AMF.H264.RateControlMethod.CQP\@' kent vaste I-/P-/B-Frame QP waardes toe,\n- '\@AMF.H264.RateControlMethod.CBR\@' blijft op de ingestelde doel-bitrate (met opvuldata) (aanbevolen voor streamen),\n- '\@AMF.H264.RateControlMethod.VBR\@' blijft onder de ingestelde piek bitrate,\n- '\@AMF.H264.RateControlMethod.VBR_LAT\@' blijft in de buurt van de doelbitrate als de GPU latency en belasting het toestaan, anders zal er een hogere bitrate worden gebruikt (aanbevolen voor opnames)."
16
 RateControlMethod.CQP="Constant QP (CQP)"
17
 RateControlMethod.CBR="Constant Bitrate (CBR)"
18
 RateControlMethod.VBR="Variable Bitrate (Peak Constrained) (VBR)"
19
 RateControlMethod.VBRLAT="Variable Bitrate (Latency Constrained) (VBRLAT)"
20
+PrePassMode="Pre-Pass modus"
21
+PrePassMode.Description="Pre-Pass is een secundaire bitrate-distributie pass, wekle voorziet in betere verdeling van de bitrate binnen een reeks, maar de effecten hiervan kunnen variëren per videokaart."
22
+PrePassMode.Quarter="\@Utility.switch.Enabled\@ (kwart grootte)"
23
+PrePassMode.Half="\@Utility.switch.Enabled\@ (halve grootte)"
24
+PrePassMode.Full="\@Utility.switch.Enabled\@ (volledige grootte)"
25
 Bitrate.Target="Doelbitrate"
26
+Bitrate.Target.Description="Bitrate om te proberen aan te houden in de gehele reeks."
27
+Bitrate.Peak="Piekbitrate"
28
+Bitrate.Peak.Description="Bitrate om te proberen om maximaal op te pieken in de algehele reeks."
29
+QP.IFrame="I-Frame QP"
30
+QP.IFrame.Description="Vaste QP waarde om te gebruiken voor I-Frames."
31
+QP.PFrame="P-Frame QP"
32
+QP.PFrame.Description="Vaste QP waarde om te gebruiken voor P-Frames."
33
+QP.BFrame="B-Frame QP"
34
+QP.BFrame.Description="Vaste QP waarde om te gebruiken voor B-Frames."
35
+QP.Minimum="Minimale QP"
36
+QP.Minimum.Description="Laagste QP waarde om te gebruiken in een Frame."
37
+QP.IFrame.Minimum="Minimale I-Frame QP"
38
+QP.IFrame.Minimum.Description="Laagste QP waarde om te gebruiken in een I-Frame."
39
+QP.PFrame.Minimum="Minimale P-Frame QP"
40
+QP.PFrame.Minimum.Description="Laagste QP waarde om te gebruiken in een P-Frame."
41
+QP.Maximum="Maximale QP"
42
+QP.Maximum.Description="Hoogste QP waarde om te gebruiken in een Frame."
43
+QP.IFrame.Maximum="Maximale I-Frame QP"
44
+QP.IFrame.Maximum.Description="Hoogste QP waarde om te gebruiken in een I-Frame."
45
+QP.PFrame.Maximum="Maximale P-Frame QP"
46
+QP.PFrame.Maximum.Description="Hoogste QP waarde om te gebruiken in een P-Frame."
47
+FillerData="Opvuldata"
48
+FillerData.Description="Het inschakelen van opvuldata laat de encoder tenminste de doel-bitrate aanhouden door de overtollige ruimte in een reeks te vullen met lege informatie."
49
+FrameSkipping="Frame overslaan"
50
+FrameSkipping.Description="Frame overslaan laat een encoder frames overslaan om de \@Bitrate.Target\@ te halen.\nAls de encoder een frame overslaat voegt het een herhaal-laatste-frame NAL in de stream in.\nKan helpen bij erg lage \@Bitrate.Target\@."
51
+FrameSkipping.Period="Frame overslaan Periode"
52
+FrameSkipping.Period.Description="Interval (in Frames) tussen overgeslagen frames. Dit kan worden gebruikt om een lagere framesnelheid te simuleren dan OBS heeft geconfigureerd, terwijl het nog een geldige stream blijft."
53
+FrameSkipping.Behaviour="Frame overslaan Gedrag"
54
+FrameSkipping.Behaviour.Description="Definieer hoe het overslaan van een Frame zich gedraagt."
55
+FrameSkipping.SkipNth="Alleen elke Nde frame overslaan"
56
+FrameSkipping.KeepNth="Behoud alleen elke Nde frame"
57
+VBAQ="VBAQ"
58
+VBAQ.Description="Het gebruik van 'Variance Based Adaptive Quantization' (VBAQ), wat is gebaseerd op pixelvariantie, toestaan om de bitrate beter te verdelen. \nHet werkt op de gedachte dat het menselijke visuele systeem minder gevoelig is voor artefacten in zeer gestructureerde gebieden en dus zal de bitrate naar gladdere oppervlakken duwen. \nActiveren van deze instelling kan leiden tot verbeteringen in subjectieve kwaliteit bij bepaalde inhoud."
59
+EnforceHRD="HRD Forceren"
60
+EnforceHRD.Description="Forceer het gebruik van een hypothetische referentiedecoder die wordt gebruikt om te controleren of de uitvoer bitstream klopt."
61
+VBVBuffer="VBV Buffer"
62
+VBVBuffer.Description="Welke methode moet worden gebruikt om de VBV buffergrootte te bepalen:\n- '\@AMF.Util.Automatic\@' berekent de grootte met een strengheid-instelling.\n- '\@AMF.Util.Manual\@' laat de gebruiker de grootte bepalen.\nVBV (Video Buffering Verifier) buffer wordt gebruikt door bepaalde Rate Control methodes om de algehele bitrate binnen de aangegeven perken te houden."
63
+VBVBuffer.Strictness="VBV Buffer Strengheid"
64
+VBVBuffer.Strictness.Description="Bepaalt de strengheid van de VBV buffer, waar 100% zo streng mogelijk is, en 0% geen restricties oplegt."
65
+VBVBuffer.Size="VBV Buffergrootte"
66
+VBVBuffer.Size.Description="De grootte van de VBV Buffer welke wordt gebruikt voor bitrate controle in een reeks."
67
 VBVBuffer.InitialFullness="Initiële VBV Buffervulling"
68
-KeyframeInterval="Keyframe-Interval"
69
+VBVBuffer.InitialFullness.Description="Hoe vol de VBV Buffer initieel is (in %), geldt alleen voor de eerste reeks van encoding."
70
+Interval.Keyframe="Keyframe Interval"
71
+Interval.Keyframe.Description="Interval (in seconden) tussen keyframes."
72
+Period.IDR.H264="IDR Periode (in Frames)"
73
+Period.IDR.H264.Description="Definieert de afstand tussen Instantaneous Decoding Refreshes (IDR) in frames."
74
+Period.IDR.H265="IDR Periode (in GOPs)"
75
+Period.IDR.H265.Description="Definieert de afstand tussen Instantaneous Decoding Refreshes (IDR) in GOPs."
76
+Interval.IFrame="I-Frame Interval"
77
+Interval.IFrame.Description="Interval (in seconden) tussen I-Frames. I-Frames overschrijven P-Frames en B-Frames."
78
+Period.IFrame="I-Frame Periode (in Frames)"
79
+Period.IFrame.Description="Afstand (in Frames) tussen I-Frames. I-Frames overschrijven P-Frames en B-Frames."
80
+Interval.PFrame="P-Frame Interval"
81
+Interval.PFrame.Description="Interval (in seconden) tussen P-Frames. P-Frames overschrijven B-Frames."
82
+Period.PFrame="P-Frame Periode (in Frames)"
83
+Period.PFrame.Description="Afstand (in Frames) tussen P-Frames. P-Frames overschrijven B-Frames."
84
+Interval.BFrame="B-Frame Interval"
85
+Interval.BFrame.Description="Interval (in seconden) tussen B-Frames."
86
+Period.BFrame="B-Frame Periode (in Frames)"
87
+Period.BFrame.Description="Afstand (in Frames) tussen B-Frames."
88
+GOP.Type="GOP Type"
89
+GOP.Type.Description="Welk type GOP moet worden gebruikt: \n - ' \@GOP. Type.Fixed\@' zal altijd gebruik maken van vaste afstanden tussen elke GOP. \n - ' \@GOP. Type.Variable\@' gebruikt verschillende groottes, afhankelijk van wat nodig is.\n'\@GOP is. Type.Fixed\@' is hoe de H264 implementatie werkt en het beste voor lokale netwerk-streaming, terwijl ' \@GOP. Type.Variable\@' het beste is voor kleine opnames in hoge kwaliteit."
90
 GOP.Type.Fixed="Vast"
91
 GOP.Type.Variable="Variabel"
92
 GOP.Size="GOP-grootte"
93
+GOP.Size.Description="Grootte van een GOP (Group Of Pictures) in Frames."
94
+GOP.Size.Minimum="Minimale GOP-grootte"
95
+GOP.Size.Minimum.Description="Minimale grootte van een GOP (Group Of Pictures) in Frames."
96
+GOP.Size.Maximum="Maximale GOP-grootte"
97
+GOP.Size.Maximum.Description="Maximale grootte van een GOP (Group Of Pictures) in Frames."
98
 GOP.Alignment="GOP-uitlijning"
99
+GOP.Alignment.Description="Experimenteel, de effecten hiervan zijn onbekend. Gebruik op eigen risico."
100
+BFrame.Pattern="B-Frame Patroon"
101
 BFrame.Pattern.Description="Het aantal B-frames om te gebruiken tijdens het encoden.\nOndersteund door 2e en 3e generatie VCE-kaarten. Negatieve invloed op encodingprestaties."
102
+BFrame.DeltaQP="B-Frame Delta QP"
103
 BFrame.DeltaQP.Description="Delta QP waarde tot de laatste I- of P-frame voor niet-refereerbare B-frames."
104
+BFrame.Reference="B-Frame Referentie"
105
 BFrame.Reference.Description="Laat een B-frame ook B-frames gebruiken als referentie, in plaats van enkel P- en I-frames."
106
+BFrame.ReferenceDeltaQP="B-Frame Referentie Delta QP"
107
 BFrame.ReferenceDeltaQP.Description="Delta QP waarde tot de laatste I- of P-frame voor refereerbare B-frames."
108
 DeblockingFilter="Deblocking Filter"
109
+DeblockingFilter.Description="Toestaan dat de decoder een Deblocking Filter toepast."
110
 MotionEstimation="Bewegingsschatting"
111
 MotionEstimation.Description="Bewigingsschatting laat de encoder de benodigde bitrate verlagen door te schatten waar een pixel heen ging."
112
 MotionEstimation.Quarter="Kwartpixel"
113
@@ -55,13 +138,23 @@
114
 Video.API.Description="Welke API moet de backend gebruiken?"
115
 Video.Adapter="Videoadapter"
116
 Video.Adapter.Description="Op welke adapter moeten we proberen te encoden?"
117
-OpenCL="OpenCL"
118
+OpenCL.Transfer="OpenCL Overdracht"
119
+OpenCL.Transfer.Description="Verplaats de frame naar de GPU met OpenCL in plaats van adresseerbaar geheugen. Overdracht via OpenCL is minder sporadisch dan overdracht via adresseerbaar geheugen wanneer de GPU wordt gebruikt."
120
+OpenCL.Conversion="OpenCL Conversie"
121
+OpenCL.Conversion.Description="Converteert de frame op de GPU met OpenCL in plaats van DirectCompute."
122
+MultiThreading="Multi-Threading"
123
+MultiThreading.Description="Gebruik meer dan één thread om frames aan te bieden en pakketten te ontvangen. Dit kan helpen op langzamere CPU's, maar zal meer systeembronnen gebruiken. Heeft een negatieve invloed op prestaties op snellere CPU's."
124
+QueueSize="Wachtrij Grootte"
125
+QueueSize.Description="Zet zoveel frames in de wachtrij voor de encoder voordat getracht word om pakketten te ontvangen. Een hogere waarde introduceert meer vertraging terwijl een lagere waarde de encoder kan overbelasten. Het word niet geadviseerd om dit van de standaard waarde te wijzigen."
126
 View="Weergavemodus"
127
+View.Description="Welke eigenschappen moeten worden getoond?\nAls u
128
+'\@AMF.H264.View.Master\@' gebruikt dan ontvangt u verder geen ondersteuning."
129
 View.Basic="Simpel"
130
 View.Advanced="Geavanceerd"
131
 View.Expert="Expert"
132
 View.Master="Meester"
133
 Debug="Debug"
134
+Debug.Description="Extra fout-opsporingsberichten activeren. Vereist dat u OBS Studio opstart met de opdrachtregel '--verbose--log_unfiltered' (zonder de ')."
135
 AMF.H264.MaximumLTRFrames="Maximale LTR Frames"
136
 AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) frames zijn een functie waarmee de encoder bepaalde frames in een reeks kan aanmerken als refereerbaar gedurende een lange tijd.\nLTR frames kunnen niet met B-frames gebruikt worden, en de encoder zal B-frames ook uitzetten als deze gebruikt worden."
137
 AMF.H264.MaximumAccessUnitSize="Maximale Access Unit grootte"
138
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/pl-PL.ini Changed
150
 
1
@@ -12,19 +12,148 @@
2
 Preset.Twitch="Twitch"
3
 Preset.YouTube="YouTube"
4
 Usage="Sposób użycia"
5
+Usage.Description="Na jaki sposób wykorzystania powinien być skonfigurowany AMF:\n- '\@Usage.Transcoding\@' - podstawowe transkodowanie (zalecane),\n- '\@Usage.UltraLowLatency\@' - dla enkodowania z niskimi opóźnieniami,\n- '\@Usage.LowLatency\@' - jak wyżej ale z nieco większymi opóźnieniami.\nDo streamowania wykorzystywany jest jedynie '\@Usage.Transcoding\@'. Pozostałe opcje mogą być używane do nagrywania materiału."
6
 Usage.Transcoding="Konwersja"
7
 Usage.UltraLowLatency="Bardzo niskie opóźnienie"
8
 Usage.LowLatency="Niskie opóźnienie"
9
 Usage.Webcam="Kamerka internetowa"
10
 QualityPreset="Ustawienie jakości"
11
+QualityPreset.Description="W jakie ustawienie jakości celować powinien AMF:\n- '\@QualityPreset.Speed\@' to najszybsza ale jakościowo najgorsza opcja,\n- '\@QualityPreset.Balanced\@' to względna równowaga między jakością i szybkością,\n- '\@QualityPreset.Quality\@' daje natomiast najlepszą jakość przy zmniejszonej szybkości."
12
 QualityPreset.Speed="Szybkość"
13
 QualityPreset.Balanced="Zrównoważone"
14
 QualityPreset.Quality="Jakość"
15
 Profile="Profil"
16
+Profile.Description="Profil enkodowania. Uporządkowane od najlepiej wspieranego do najlepszej jakości."
17
 ProfileLevel="Profil - poziom"
18
+ProfileLevel.Description="Jaki Profil Poziomu należy użyć. Najlepszym rozwiązaniem jest pozostawienie opcji \@Utility.Automatic\@."
19
 Tier="Poziom"
20
+Tier.Description="Profil enkodowania. 'High' daje wysoką wartość przepływności podczas gdy 'Main' jest bardziej uniwersalny."
21
 AspectRatio="Współczynnik proporcji"
22
+AspectRatio.Description="Jakie proporcje ekranu powinny być zapisane do wynikowego pliku."
23
 CodingType="Typ kodowania"
24
+CodingType.Description="Rodzaj używanego typu enkodowania:\n* '\@Utility.Automatic\@' - decyduje AMF (zalecane).\n* 'CALVC' (Context-Adaptive Variable-Length Coding) szybkie ale generujące dużo danych.\n* 'CABAC' (Context-Adaptive Binary Arithmetic Coding) wolne ale zmniejszające wielkość pliku."
25
+MaximumReferenceFrames="Maksimum ramek referencyjnych"
26
+MaximumReferenceFrames.Description="Ile maksymalnie ramek referencyjnych enkoder może wykorzystać. Ma bezpośredni wpływ na jakość enkodowania."
27
+RateControlMethod="Metoda kontroli przepływności"
28
+RateControlMethod.Description="Która metoda kontroli przepływności powinna być użyta:\n- '\@RateControlMethod.CQP\@' przypisuje stałe wartości QP dla klatek I-/P-/B-Frame,\n- '\@RateControlMethod.CBR\@' utrzymuje stały bitrate wykorzystując dane nadmiarowe (Filler Data) (zalecana do streamowania),\n- '\@RateControlMethod.VBR\@' utrzymuje maksymalny bitrate poniżej określonej wartości,\n- '\@RateControlMethod.VBRLAT\@' utrzymuje stały bitrate bliski docelowemu jeżeli opóźnienia na GPU i obciążenie na to pozwalają, w przeciwnym przypadku zwiększy bitrate (zalecana do nagrań)."
29
+RateControlMethod.CQP="Stałe QP (CQP)"
30
+RateControlMethod.CBR="Stała przepływność (CBR)"
31
+RateControlMethod.VBR="Zmienna przepływność (z ograniczeniem górnym) (VBR)"
32
+RateControlMethod.VBRLAT="Zmienna przepływność (z ograniczeniem opóźnienia) (VBR_LAT)"
33
+PrePassMode="Tryb Pre-Pass"
34
+PrePassMode.Description="Pre-Pass - dodatkowy przebieg enkodowania wyrównujący bitrate w sekwencji. Efekt jednak może się jednak różnić w zależności od karty graficznej."
35
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (Quarter Size)"
36
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (Half Size)"
37
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (Full Size)"
38
+Bitrate.Target="Przepływność docelowa"
39
+Bitrate.Target.Description="Bitrate do uzyskania w sekwencji."
40
+Bitrate.Peak="Przepływność szczytowa"
41
+Bitrate.Peak.Description="Maksymalny bitrate do uzyskania w sekwencji."
42
+QP.IFrame="I-Frame QP"
43
+QP.IFrame.Description="Stała wartość QP dla ramek I-Frame."
44
+QP.PFrame="P-Frame QP"
45
+QP.PFrame.Description="Stała wartość QP dla ramek P-Frame."
46
+QP.BFrame="B-Frame QP"
47
+QP.BFrame.Description="Stała wartość QP dla ramek B-Frame."
48
+QP.Minimum="Minimalna QP"
49
+QP.Minimum.Description="Najniższa wartość QP (parametr kwantyzacji) do użycia w ramce."
50
+QP.IFrame.Minimum="Minimalna I-Frame QP"
51
+QP.IFrame.Minimum.Description="Najniższa wartość QP (parametr kwantyzacji) do użycia w ramce I-Frame."
52
+QP.PFrame.Minimum="Minimalna P-Frame QP"
53
+QP.PFrame.Minimum.Description="Najniższa wartość QP (parametr kwantyzacji) do użycia w ramce P-Frame."
54
+QP.Maximum="Maksymalna QP"
55
+QP.Maximum.Description="Najwyższa wartość QP (parametr kwantyzacji) do użycia w ramce."
56
+QP.IFrame.Maximum="Maksymalna I-Frame QP"
57
+QP.IFrame.Maximum.Description="Najwyższa wartość QP (parametr kwantyzacji) do użycia w ramce I-Frame."
58
+QP.PFrame.Maximum="Maksymalna P-Frame QP"
59
+QP.PFrame.Maximum.Description="Najwyższa wartość QP (parametr kwantyzacji) do użycia w ramce P-Frame."
60
+FillerData="Filler Data"
61
+FillerData.Description="Włączenie Filler Data pozwala enkoderowi utrzymanie docelowej przepływności na poziomie \@Bitrate.Target\@ uzupełniając sekwencje o nadmiarowe dane."
62
+FrameSkipping="Pomijanie klatek"
63
+FrameSkipping.Description="Pomijanie klatek pozwala enkoderowi pomijac klatki w celu utrzymania przepływności na poziomie docelowej przepływności.\nOdrzuconą klatę zastępuje się sygnałem \"powtórz poprzednią klatkę\" NAL.\nMoże pomóc w przypadku niskich wartości docelowej przepływności."
64
+FrameSkipping.Period="Omijanie klatek - interwał"
65
+FrameSkipping.Period.Description="Liczba klatek między opuszczanymi klatkami. Może być to użyte do symulowania niższych wartości klatek na sekundę przy zachowaniu poprawnego strumienia danych."
66
+FrameSkipping.Behaviour="Omijanie klatek - typ działania"
67
+FrameSkipping.Behaviour.Description="Zdefiniuj sposób omijania klatek."
68
+FrameSkipping.SkipNth="Omijaj co n-tą klatkę"
69
+FrameSkipping.KeepNth="Zachowuj co n-tą klatkę"
70
+VBAQ="VBAQ"
71
+VBAQ.Description="Włącza kwantyzację 'Variance Based Adaptive Quantization' (VBAQ) lepiej regulującą przepływność na bazie zmian pikseli.\nBazuje na regule, iż ludzkie oko jest mniej czułe na artefakty na mocno różnorodnych powierzchniach.\nWłączenie opcji może wizualnie poprawić odczucie jakości w niektórych typach materiałów video."
72
+EnforceHRD="Wymuś HRD"
73
+EnforceHRD.Description="Wymuszenie użycia HRD (Hypothetical Reference Decoder), który weryfikuje, czy docelowa przepływność jest poprawna."
74
+VBVBuffer="Bufor VBV"
75
+VBVBuffer.Description="Która metoda powinna być użyta do określenia wartości bufora VBV:\n- '\@Utility.Automatic\@' ustala wartość na bazie danych ograniczających,\n- '\@Utility.Manual\@' pozwala określić wartość użytkownikowi.\nBufor VBV (Video Buffering Verifier) używany jest przez niektóre metody określania przepływności w zależności od warunków ograniczających."
76
+VBVBuffer.Strictness="Odchylenie bufora VBV"
77
+VBVBuffer.Strictness.Description="Określa rygor wykorzystania bufora VBV, gdzie 100% oznacza pełne podporządkowanie wartości a 0% - dowolne."
78
+VBVBuffer.Size="Rozmiar bufora VBV"
79
+VBVBuffer.Size.Description="Rozmiar bufora VBV używanego w kontroli przepływności sekwencji kodowania."
80
+VBVBuffer.InitialFullness="Pierwotne zapełnienie bufora VBV"
81
+VBVBuffer.InitialFullness.Description="Jak bardzo zapełniony (w procentach) na starcie powinien być bufor VBV. Wpływa jedynie na początkową sekwencję kodowania."
82
+Interval.Keyframe="Interwał klatki kluczowej"
83
+Interval.Keyframe.Description="Interwał (w sekundach) między klatkami kluczowymi."
84
+Period.IDR.H264="Okres IDR (w ramkach)"
85
+Period.IDR.H264.Description="Określa (w klatkach) odległość między natychmiastowymi odświeżeniami dekodera (IDR)."
86
+Period.IDR.H265="Okres IDR (w GOP)"
87
+Period.IDR.H265.Description="Określa odległość między natychmiastowymi odświeżeniami dekodera (IDR) w GOP-ach."
88
+Interval.IFrame="Interwał klatki kluczowej I-Frame"
89
+Interval.IFrame.Description="Interwał (w sekundach) między klatkami kluczowymi I-Frame. Klatki typu I mają priorytet przed typem P i B."
90
+Period.IFrame="Okres klatek I-Frame (w ramkach)"
91
+Period.IFrame.Description="Odległość między klatkami I-Frame (w klatkach)."
92
+Interval.PFrame="Interwał klatki kluczowej P-Frame"
93
+Interval.PFrame.Description="Interwał (w sekundach) między klatkami kluczowymi P-Frame. Klatki typu P mają priorytet przed typem B."
94
+Period.PFrame="Okres klatek P-Frame (w ramkach)"
95
+Period.PFrame.Description="Odległość między klatkami P-Frame (w klatkach)."
96
+Interval.BFrame="Interwał klatki kluczowej B-Frame"
97
+Interval.BFrame.Description="Interwał (w sekundach) między klatkami kluczowymi B-Frame."
98
+Period.BFrame="Okres klatek B-Frame (w ramkach)"
99
+Period.BFrame.Description="Odległość między klatkami B-Frame (w klatkach)."
100
+GOP.Type="Typ GOP"
101
+GOP.Type.Description="Jaki typ GOP powinien być użyty:\n- '\@GOP.Type.Fixed\@' stała odległość między GOP.\n- '\@GOP.Type.Variable\@' zmienna odległość między GOP, w zależności od potrzeb.\n'\@GOP.Type.Fixed\@' to domyśle zachowanie w H264 dla lokalnego streamowania, podczas gdy '\@GOP.Type.Variable\@' jest idealna do wysokiej jakości nagrań."
102
+GOP.Type.Fixed="Stały"
103
+GOP.Type.Variable="Zmienny"
104
+GOP.Size="Rozmiar GOP"
105
+GOP.Size.Description="Rozmiar GOP (grupy obrazów) w ramkach."
106
+GOP.Size.Minimum="Minimalny rozmiar GOP"
107
+GOP.Size.Minimum.Description="Minimalny rozmiar GOP (grupy obrazów) w ramkach."
108
+GOP.Size.Maximum="Maksymalny rozmiar GOP"
109
+GOP.Size.Maximum.Description="Maksymalny rozmiar GOP (grupy obrazów) w ramkach."
110
+GOP.Alignment="Dopasowanie GOP"
111
+GOP.Alignment.Description="Eksperymentalne, efekty są nieznane. Używaj na własne ryzyko."
112
+BFrame.Pattern="Wzór B-ramki"
113
+BFrame.Pattern.Description="Liczba B-ramek używana w enkodowaniu.\nWspierane przez drugą i trzecią generację kart VCE. Ma negatywny wpływ na wydajność enkodowania."
114
+BFrame.DeltaQP="Delta QP dla ramek B-Frame"
115
+BFrame.DeltaQP.Description="Wartość delta QP w stosunku do I- lub P-ramki dla niereferencyjnej B-ramki."
116
+BFrame.Reference="Ramka B-Frame referencyjna"
117
+BFrame.Reference.Description="Pozwala na B-ramkom na używanie B-ramek jako referencyjnych a nie tylko I- i P-ramek."
118
+BFrame.ReferenceDeltaQP="Delta QP dla referencyjnej ramki B-Frame"
119
+BFrame.ReferenceDeltaQP.Description="Delta QP w relacji do ostatniej I- lub P-ramki dla referencyjnych B-ramek."
120
+DeblockingFilter="Filtr niwelujacy bloki obrazu"
121
+DeblockingFilter.Description="Pozwala na użycie filtru niwelującego bloki."
122
+MotionEstimation="Przewidywanie ruchu"
123
+MotionEstimation.Description="Przewidywanie ruchu pozwala enkoderowi zmniejszych potrzebny bitrate przez przewidywanie, gdzie dany piksel się przesunął."
124
+MotionEstimation.Quarter="Quarter-Pixel"
125
+MotionEstimation.Half="Half-Pixel"
126
+MotionEstimation.Full="Quarter- & Half-Pixel"
127
+Video.API="Video API"
128
+Video.API.Description="Jakie API ma wykorzystywać backend?"
129
+Video.Adapter="Karta graficzna"
130
+Video.Adapter.Description="Jakiej karty użyć do enkodowania?"
131
+OpenCL.Transfer="Transfer OpenCL"
132
+OpenCL.Transfer.Description="Przekazuj ramkę do GPU przy pomocy OpenCL zamiast metodą mapowania pamięci. Transfer za pomocą OpenCL jest mniej nieregularny niż przy pomocy mapowania pamięci w przypadku użycia GPU."
133
+OpenCL.Conversion="Konwersja OpenCL"
134
+OpenCL.Conversion.Description="Konwertuj ramki na GPU przy pomocy OpenCL zamiast DirectCompute."
135
+MultiThreading="Wielkowątkowość"
136
+MultiThreading.Description="Użyj więcej niż jednego wątku do wysyłki ramek i odbioru pakietów. Może to pomóc w przypadku wolniejszych procesorów ale zwiększy ogólne użycie zasobów systemowych. Na szybkich procesorach będzie miało negatywny wpływ na wydajność."
137
+QueueSize="Rozmiar kolejki"
138
+QueueSize.Description="Wartość wstawionych do kolejki ramek do enkodera zanim zostaną odebrane pakiety. Większa wartość zwiększy opóźnienie a mniejsza obciążenie enkodera. Nie zaleca się zmieniać domyślnej wartości tego parametru."
139
+View="Tryb ustawień"
140
+View.Description="Którego typu ustawień używać.\nWłączenie '\@View.Master\@' oznacza rezygnację z ewentualnego wsparcia technicznego."
141
+View.Basic="Podstawowy"
142
+View.Advanced="Zaawansowany"
143
+View.Expert="Ekspercki"
144
+View.Master="Pełny"
145
+Debug="Debugowanie"
146
+Debug.Description="Włącz dodatkowe logi debugujące. Wymaga uruchomienia Open Broadcaster Software Studio z parametrami '--verbose --log_unfiltered' z linii poleceń (należy usunąć ')."
147
 AMF.H264.MaximumLTRFrames="Maksimum ramek LTR"
148
 AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) Frames (ramki LTR) to opcja pozwalająca na oznaczenie przez enkoder ramek, które mają być referencyjnymi przez dłuższy czas.\nRamki LTR nie mogą być używane wraz z B-ramkami. Enkoder wyłączy B-ramki w przypadku użycia opcji ramek LTR."
149
 AMF.H264.MaximumAccessUnitSize="Maksymalny rozmiar Access Unit"
150
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/pt-BR.ini Changed
181
 
1
@@ -1,3 +1,179 @@
2
+Utility.Default="Padrão"
3
+Utility.Automatic="Automático"
4
+Utility.Manual="Manual"
5
+Utility.Switch.Disabled="Desativado"
6
+Utility.Switch.Enabled="Ativado"
7
+Preset="Pré-ajuste"
8
+Preset.ResetToDefaults="Redefinir para os Padrões"
9
+Preset.Recording="Gravação"
10
+Preset.HighQuality="Alta Qualidade"
11
+Preset.Indistinguishable="Indistinguível"
12
+Preset.Lossless="Sem perdas"
13
+Preset.Twitch="Twitch"
14
+Preset.YouTube="YouTube"
15
+Usage="Uso"
16
+Usage.Description="Qual o modo de uso do AMF:\n-'\@Usage.Transcoding\@' é a transcodificação de propósito geral (recomendada),\n-'\@Usage.UltraLowLatency\@' é para codificação de latência muito baixa,\n-'\@Usage.LowLatency\@' é semelhante ao acima com uma latência ligeiramente maior.\nTransmissão só suporta '\@Usage.Transcoding\@', todos os outros valores podem ser usados para a gravação."
17
+Usage.Transcoding="Transcodificação"
18
+Usage.UltraLowLatency="Ultra Baixa Latência"
19
+Usage.LowLatency="Baixa Latência"
20
+Usage.Webcam="Webcam"
21
+QualityPreset="Pré-ajuste de Qualidade"
22
+QualityPreset.Description="Qual Pré-ajuste de Qualidade o AMF deve tentar atingir:\n- '\@QualityPreset.Speed\@' é o mais rápido mas tem a pior qualidade,\n- '\@QualityPreset.Balanced\@' é uma mistura de ambos,\n- '\@QualityPreset.Quality\@' dá a melhor qualidade para uma determinada taxa de bits."
23
+QualityPreset.Speed="Velocidade"
24
+QualityPreset.Balanced="Equilibrado"
25
+QualityPreset.Quality="Qualidade"
26
+Profile="Perfil"
27
+Profile.Description="Qual Perfil para codificar. Ordenado de melhor suportado (Cima) para melhor qualidade (Baixo)."
28
+ProfileLevel="Nível do Perfil"
29
+ProfileLevel.Description="Qual o Nível do Perfil para usar. É melhor deixar isso em \@Utility.Automatic\@."
30
+Tier="Nível"
31
+Tier.Description="Qual Nível para codificar. 'Alto' é voltado para altas taxas de bits/largura de banda enquanto 'Principal' destina-se a grande mídia."
32
+AspectRatio="Proporção da imagem"
33
+AspectRatio.Description="Em qual proporção de imagem deve ser escrito no arquivo de saída."
34
+CodingType="Tipo de codificação"
35
+CodingType.Description="Que tipo de codificação usar:\n* '\@Utility.Automatic\@' deixar que o AMF decida (recomendado).\n* 'CALVC' (Context-Adaptive Variable-Length Coding) é mais rápido, mas maior.\n* 'CABAC' (Context-Adaptive Binary Arithmetic Coding) é mais lento, mas menor."
36
+MaximumReferenceFrames="Máximo de Quadros de Referência"
37
+MaximumReferenceFrames.Description="Quantos quadros o codificador pode referênciar no máximo quando codificar. Tem um impacto direto na qualidade de codificação."
38
+RateControlMethod="Método de Controle de Taxa"
39
+RateControlMethod.Description="Qual método de controle de taxa deve ser usado:\n- '\@RateControlMethod.CQP\@' Atribui valores QP fixos de I-/P-/B-Frame,\n- '\@RateControlMethod.CBR\@' permanece na taxa de bits alvo (usando dados de preenchimento) (recomendado para transmissão),\n- '\@RateControlMethod.VBR\@' permanece abaixo da taxa de bits de pico,\n- '\@RateControlMethod.VBRLAT\@' permanece perto da taxa de bits alvo se a latência e a carga da GPU o permitirem, caso contrário usará taxa de bits mais alta (recomendado para gravação)."
40
+RateControlMethod.CQP="QP Constante (CQP)"
41
+RateControlMethod.CBR="Taxa de Bits Constante (CBR)"
42
+RateControlMethod.VBR="Taxa de Bits Variável (Pico Restringido) (VBR)"
43
+RateControlMethod.VBRLAT="Taxa de Bits Variável (Latência Restringida) (VBRLAT)"
44
+PrePassMode="Modo de Pre-Pass"
45
+PrePassMode.Description="Pre-Pass é um passe de distribuição de taxa de bits secundário que permite uma melhor distribuição da taxa de bits dentro de uma sequência, no entanto os efeitos podem variar de aparelho para aparelho."
46
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (1/4 do tamanho)"
47
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (metade do tamanho)"
48
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (tamanho total)"
49
+Bitrate.Target="Taxa de bits Alvo"
50
+Bitrate.Target.Description="Taxa de bits para tentar alcançar durante a sequência."
51
+Bitrate.Peak="Taxa de bits Máxima"
52
+Bitrate.Peak.Description="Pico máximo da taxa de bits para tentar alcançar durante a sequência."
53
+QP.IFrame="I-Frame QP"
54
+QP.IFrame.Description="Valor fixo de QP para usar em I-Frames."
55
+QP.PFrame="P-Frame QP"
56
+QP.PFrame.Description="Valor fixo de QP para usar em P-Frames."
57
+QP.BFrame="B-Frame QP"
58
+QP.BFrame.Description="Valor fixo de QP para usar em B-Frames."
59
+QP.Minimum="QP Mínimo"
60
+QP.Minimum.Description="Menor valor de QP para usar em um Quadro."
61
+QP.IFrame.Minimum="I-Frame QP Mínimo"
62
+QP.IFrame.Minimum.Description="Menor valor de QP para usar em um I-Frame."
63
+QP.PFrame.Minimum="P-Frame QP Mínimo"
64
+QP.PFrame.Minimum.Description="Menor valor de QP para usar em um P-Frame."
65
+QP.Maximum="QP Máximo"
66
+QP.Maximum.Description="Maior valor de QP para usar em um Quadro."
67
+QP.IFrame.Maximum="I-Frame QP Máximo"
68
+QP.IFrame.Maximum.Description="Maior valor de QP para usar em um I-Frame."
69
+QP.PFrame.Maximum="P-Frame QP Máximo"
70
+QP.PFrame.Maximum.Description="Maior valor de QP para usar em um P-Frame."
71
+FillerData="Dados de Preenchimento"
72
+FillerData.Description="Habilitar o Preenchimento de Dados permite ao codificador manter pelo menos o \@Bitrate.Target\@ preenchendo o espaço restante em uma seqüência com informações vazias."
73
+FrameSkipping="Pular Quadros"
74
+FrameSkipping.Description="Pular Quadros permite que o codificador ignore quadros para satisfazer os requisitos do \@Bitrate.Target\@.\nQuando o codificador ignora um quadro, ele envia um repeat-last-frame NAL para o fluxo.\nPode ajudar com requisitos muito baixos do \@Bitrate.Target\@."
75
+FrameSkipping.Period="Tempo de Pulo de Quadros"
76
+FrameSkipping.Period.Description="Intervalo (em Quadros) entre quadros ignorados. Isso pode ser usado para simular uma taxa de quadros menor do que a do OBS e ainda ter um fluxo válido."
77
+FrameSkipping.Behaviour="Comportamento do Pulo de Quadros"
78
+FrameSkipping.Behaviour.Description="Definir como se comporta o Descarte de Quadros."
79
+FrameSkipping.SkipNth="Pular apenas cada N-ésimo quadro"
80
+FrameSkipping.KeepNth="Manter apenas cada N-ésimo quadro"
81
+VBAQ="VBAQ"
82
+VBAQ.Description="Habilita o uso da 'Quantificação Adaptativa Baseada em Variância' (VBAQ) que se baseia na variância de pixel para distribuir melhor taxa de bits.\nIsto se baseia na ideia de que o sistema visual humano é menos sensível a artefatos em áreas altamente texturizadas e, assim, empurrará a taxa de bits para superfícies mais suaves.\nHabilitar isso pode levar a melhorias na qualidade subjetiva de certo conteúdo."
83
+EnforceHRD="Forçar HRD"
84
+EnforceHRD.Description="Impor o uso de um Descodificador de Referência Hipotético (HRD) que é usado para verificar se o fluxo de bits de saída está correto."
85
+VBVBuffer="Buffer VBV"
86
+VBVBuffer.Description="Qual método deve ser usado para determinar o tamanho do Buffer VBV:\n- '\@Utility.Automatic\@' calcula o tamanho usando uma restrição de rigor,\n- '\@Utility.Manual\@' permite ao usuário controlar o tamanho.\nBuffer VBV (Video Buffering Verifier) é usado por certos métodos de controle de taxa para manter a taxa de bits global dentro das restrições dadas."
87
+VBVBuffer.Strictness="Rigor do Buffer VBV"
88
+VBVBuffer.Strictness.Description="Determina o rigor do Buffer VBV, sendo 100% o mais rigoroso possível e 0% sem restrições."
89
+VBVBuffer.Size="Tamanho do Buffer VBV"
90
+VBVBuffer.Size.Description="O tamanho do Buffer VBV que é usado para o controle da taxa de bits em uma sequência."
91
+VBVBuffer.InitialFullness="Plenitude Inicial do Buffer VBV"
92
+VBVBuffer.InitialFullness.Description="O quão cheio o buffer VBV inicialmente está (em %), só afetará a sequência inicial de codificação."
93
+Interval.Keyframe="Intervalo de Keyframes"
94
+Interval.Keyframe.Description="Intervalo (em segundos) entre Keyframes."
95
+Period.IDR.H264="Período IDR (em Quadros)"
96
+Period.IDR.H264.Description="Define a distância entre Instantaneous Decoding Refreshes (IDR) em quadros."
97
+Period.IDR.H265="Período IDR (em GOPs)"
98
+Period.IDR.H265.Description="Define a distância entre Instantaneous Decoding Refreshes (IDR) em GOPs."
99
+Interval.IFrame="Intervalo de I-Frames"
100
+Interval.IFrame.Description="Intervalo (em segundos) entre I-Frames. I-Frames substituem P-Frames e B-Frames."
101
+Period.IFrame="Período I-Frame (em Quadros)"
102
+Period.IFrame.Description="Intervalo (em Quadros) entre I-Frames. I-Frames substituem P-Frames e B-Frames."
103
+Interval.PFrame="Intervalo de P-Frames"
104
+Interval.PFrame.Description="Intervalo (em Segundos) entre P-Frames. P-Frames substituem B-Frames."
105
+Period.PFrame="Período P-Frame (em Quadros)"
106
+Period.PFrame.Description="Intervalo (em Quadros) entre P-Frames. P-Frames substituem B-Frames."
107
+Interval.BFrame="Intervalo de B-Frames"
108
+Interval.BFrame.Description="Intervalo (em segundos) entre B-Frames."
109
+Period.BFrame="Período B-Frame (em Quadros)"
110
+Period.BFrame.Description="Distância (em Quadros) entre B-Frames."
111
+GOP.Type="Tipo de GOP"
112
+GOP.Type.Description="Que tipo de GOP deve ser usado:\n- '\@GOP.Type.Fixed\@' sempre usará distâncias fixas entre cada GOP.\n- '\@GOP.Type.Variable\@' permite GOPs de vários tamanhos, dependendo do que é necessário.\n'\@GOP.Type.Fixed\@' é como funciona a implementação H264 e melhor para a transmissão em rede local, enquanto '\@GOP.Type.Variable\@' é o melhor para gravações de alta qualidade de pequeno tamanho."
113
+GOP.Type.Fixed="Fixo"
114
+GOP.Type.Variable="Variável"
115
+GOP.Size="Tamanho do GOP"
116
+GOP.Size.Description="Tamanho do GOP (Grupo de Fotos) em Quadros."
117
+GOP.Size.Minimum="Tamanho Mínimo do GOP"
118
+GOP.Size.Minimum.Description="Tamanho Mínimo de um GOP (Grupo de Fotos) em Quadros."
119
+GOP.Size.Maximum="Tamanho Máximo do GOP"
120
+GOP.Size.Maximum.Description="Tamanho Máximo de um GOP (Grupo de Fotos) nos Quadros."
121
+GOP.Alignment="Alinhamento de GOP"
122
+GOP.Alignment.Description="Experimental, os efeitos são desconhecidos. Use por sua conta em risco."
123
+BFrame.Pattern="Padrão de B-Frame"
124
+BFrame.Pattern.Description="A quantidade de B-Frames para usar durante a codificação.\nSuportado por placas VCE de 2ª e 3ª geração. Impacta negativamente o desempenho da codificação."
125
+BFrame.DeltaQP="Delta QP do B-Frame"
126
+BFrame.DeltaQP.Description="Valor do Delta QP até o último P-Frame ou I-Frame dos B-Frames não referenciáveis."
127
+BFrame.Reference="Referência do B-Frame"
128
+BFrame.Reference.Description="Permite que um B-Frame também use B-Frames como referência, em vez de P- e I-Frames."
129
+BFrame.ReferenceDeltaQP="Delta QP da Referência do B-Frame"
130
+BFrame.ReferenceDeltaQP.Description="Valor do Delta QP até o último P-Frame ou I-Frame dos B-Frames referenciáveis."
131
+DeblockingFilter="Filtro de Eliminação de Blocos"
132
+DeblockingFilter.Description="Permitir que o decodificador aplique Filtro de Redução de Blocos."
133
+MotionEstimation="Estimativa de Movimento"
134
+MotionEstimation.Description="A Estimação de Movimento permite ao codificador reduzir a taxa de bits necessária estimando onde um pixel foi."
135
+MotionEstimation.Quarter="Quarto de Pixel"
136
+MotionEstimation.Half="Meio Pixel"
137
+MotionEstimation.Full="Quarto e Meio de Pixel"
138
+Video.API="API de Vídeo"
139
+Video.API.Description="Qual API deve ser usada?"
140
+Video.Adapter="Adaptador de Vídeo"
141
+Video.Adapter.Description="Em qual adaptador devemos tentar codificar?"
142
+OpenCL.Transfer="Transferência do OpenCL"
143
+OpenCL.Transfer.Description="Transfira o quadro para a GPU usando OpenCL em vez de memória mapeada. A transferência via OpenCL é menos esporádica do que a transferência via memória mapeada quando a GPU está sendo usada."
144
+OpenCL.Conversion="Conversão por OpenCL"
145
+OpenCL.Conversion.Description="Converte o quadro na GPU usando OpenCL em vez de DirectCompute."
146
+MultiThreading="Multi-Threading"
147
+MultiThreading.Description="Usar mais de uma Thread para enviar quadros e recuperar pacotes. Isso pode ajudar em CPUs mais lentas, mas usará mais recursos do sistema. Isso afetará negativamente o desempenho em CPUs mais rápidas."
148
+QueueSize="Tamanho da Fila"
149
+QueueSize.Description="Enfilere este tanto de quadros para o codificador antes de tentar recuperar os pacotes. Um valor maior introduz mais latência enquanto um valor menor pode causar sobrecargar na codificação. Não é recomendável mudar o padrão."
150
+View="Modo de visualização"
151
+View.Description="Quais propriedades devem ser mostradas?\nUsar '\ @ View.Master \ @' irá desqualificá-lo de receber suporte."
152
+View.Basic="Básico"
153
+View.Advanced="Avançado"
154
+View.Expert="Especialista"
155
+View.Master="Mestre"
156
+Debug="Depurar"
157
+Debug.Description="Ativar mensagens de Depuração adicionais. Requer que você execute o Open Broadcaster Software Studio com a linha de comando '--verbose --log_unfiltered' (remover o ')."
158
+AMF.H264.MaximumLTRFrames="Máximo de Quadros LTR"
159
+AMF.H264.MaximumLTRFrames.Description="Os Quadros Long Term Reference (LTR) é um recurso que permite que o codificador sinalize determinados quadros em uma sequência como referenciáveis por um longo tempo.\nQuadros LTR não podem ser usados com B-Frames e o codificador irá desativar B-Frames se estes estiverem em uso."
160
+AMF.H264.MaximumAccessUnitSize="Tamanho Máximo da Unidade de Acesso"
161
+AMF.H264.MaximumAccessUnitSize.Description="Tamanho Máximo de uma Unidade de Acesso para um NAL."
162
+AMF.H264.HeaderInsertionSpacing="Espaçamento de Inserção de Cabeçalho"
163
+AMF.H264.HeaderInsertionSpacing.Description="Quantas imagens devem ter entre cabeçalhos NAL."
164
+AMF.H264.WaitForTask="Esperar por Tarefa"
165
+AMF.H264.WaitForTask.Description="Desconhecido, Experimental"
166
+AMF.H264.SlicesPerFrame="Divisões por Quadro"
167
+AMF.H264.SlicesPerFrame.Description="Quantas divisões de I-Frame devem ser armazenadas em cada Quadro?\nZero permite que o codificador decida automaticamente.\nA codificação Intra-Refresh é usada para reprodução e busca mais rápidas."
168
+AMF.H264.SliceMode="Modo de Divisão"
169
+AMF.H264.SliceMode.Description="Desconhecida, Experimental"
170
+AMF.H264.MaximumSliceSize="Tamanho Máximo da Divisão"
171
+AMF.H264.MaximumSliceSize.Description="Desconhecido, Experimental"
172
+AMF.H264.SliceControlMode="Modo de Controle da Divisão"
173
 AMF.H264.SliceControlMode.Description="Desconhecido, Experimental"
174
+AMF.H264.SliceControlSize="Tamanho de Controle da Divisão"
175
 AMF.H264.SliceControlSize.Description="Desconhecido, Experimental"
176
+AMF.H264.IntraRefresh.NumberOfStripes="Número de Listras Intra-Refresh"
177
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Desconhecida, Experimental"
178
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Macroblocos Intra-Refresh por Slot"
179
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Quantos Macroblocos devem ser armazenados em cada Slot?\n0 desabilita esta funcionalidade.\nA codificação Intra-Refresh é usada para reprodução e busca mais rápidas."
180
 
181
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/ru-RU.ini Changed
68
 
1
@@ -35,7 +35,7 @@
2
 MaximumReferenceFrames="Максимум кадров-ссылок"
3
 MaximumReferenceFrames.Description="Количество кадров, используемых кодировщиком в качестве опорных. Имеет непосредственное влияние на качество кодирования."
4
 RateControlMethod="Метод кодирования"
5
-RateControlMethod.Description="Какой способ контроля битрейта должен быть использован:\n- '\@RateControlMethod.CQP\@' задает фиксированные значения QP I-/P-/B-кадра,\n- '\@RateControlMethod.CBR\@' придерживается целевого битрейта (используя данные заполнителя) (рекомендуется для стрима),\n-'\@RateControlMethod.VBR\@' держится ниже пикового битрейта,\n-'\@RateControlMethod.VBRLAT\@' держится близко к целевому битрейту, если задержка GPU и нагрузка позволяют, в противном случае будет использован более высокий битрейт (рекомендуется для стрима)."
6
+RateControlMethod.Description="Какой способ контроля битрейта должен быть использован:\n- '\@RateControlMethod.CQP\@' задает фиксированные значения QP I-/P-/B-кадра,\n- '\@RateControlMethod.CBR\@' придерживается целевого битрейта (используя данные заполнителя) (рекомендуется для стрима),\n-'\@RateControlMethod.VBR\@' держится ниже пикового битрейта,\n-'\@RateControlMethod.VBRLAT\@' держится близко к целевому битрейту, если задержка GPU и нагрузка позволяют, в противном случае будет использован более высокий битрейт (рекомендуется для записи)."
7
 RateControlMethod.CQP="Постоянное качество (CQP)"
8
 RateControlMethod.CBR="Постоянный битрейт (CBR)"
9
 RateControlMethod.VBR="Переменный битрейт (Ограничение пиков) (VBR)"
10
@@ -71,6 +71,12 @@
11
 FillerData.Description="Включение данных наполнителей позволяет кодировщику сохранять, по крайней мере, целевой Битрейт, заполняя оставшееся пространство в последовательности с пустой информации."
12
 FrameSkipping="Пропуск кадров"
13
 FrameSkipping.Description="Пропуск кадров позволяет кодировщику падение кадров в целях соответствия требованиям целевого битрейта.\nКогда в энкодере пропадает рамка вместо этого вставьте повторять-последний кадр NAL в стрим.\nМожет помочь с очень низким битрейтом."
14
+FrameSkipping.Period="Период пропуска кадра"
15
+FrameSkipping.Period.Description="Интервал (в кадрах) между пропущенными кадрами. Может использоваться для имитации более низкой частоты кадров, чем установлено в OBS, при этом имея действующий поток."
16
+FrameSkipping.Behaviour="Поведение пропуска кадров"
17
+FrameSkipping.Behaviour.Description="Определяет поведение пропуска кадров."
18
+FrameSkipping.SkipNth="Пропускать только каждый N-ый кадр"
19
+FrameSkipping.KeepNth="Хранить только каждый N-ый кадр"
20
 VBAQ="VBAQ"
21
 VBAQ.Description="Включить функцию \"Дисперсия на основе адаптивного квантования\" (VBAQ) которая основана на дисперсии пикселей для лучшего распространения битрейта.\nФункция работает на идее что зрительная система человека менее чувствительна к артефактам в высоко текстурированных областях и таким образом будет смещать битрейт к гладкой поверхности.\nВключение может привести к улучшению субъективного качества с определенным содержанием."
22
 EnforceHRD="Принудительно использовать HRD"
23
@@ -83,12 +89,24 @@
24
 VBVBuffer.Size.Description="Размер буфера VBV, которая используется для управления скорости передачи данных в последовательности."
25
 VBVBuffer.InitialFullness="Изначальное заполнение буфера VBV"
26
 VBVBuffer.InitialFullness.Description="Изначальная степень заполнения VBV буфера (в %), будет влиять только на первоначальную последовательность кодирования."
27
-KeyframeInterval="Интервал ключевых кадров"
28
-KeyframeInterval.Description="Интервал (в секундах) между ключевыми кадрами."
29
-H264.IDRPeriod="IDR период (в кадрах)"
30
-H264.IDRPeriod.Description="Определяет расстояние между Мгновенными обновлениями декодирования (IDR) в кадрах. Так же контролирует размер последовательности GOP."
31
-H265.IDRPeriod="IDR период (в группах изображений)"
32
-H265.IDRPeriod.Description="Определяет расстояние между \"Мгновенными обновлениями декодирования\" (IDR) в GOP."
33
+Interval.Keyframe="Интервал ключевых кадров"
34
+Interval.Keyframe.Description="Интервал (в секундах) между ключевыми кадрами."
35
+Period.IDR.H264="Период IDR (в кадрах)"
36
+Period.IDR.H264.Description="Определяет расстояние между Мгновенными обновлениями декодирования (IDR) в кадрах."
37
+Period.IDR.H265="Период IDR (в GOP)"
38
+Period.IDR.H265.Description="Определяет расстояние между \"Мгновенными обновлениями декодирования\" (IDR) в GOP."
39
+Interval.IFrame="Интервал I-кадров"
40
+Interval.IFrame.Description="Интервал (в секундах) между I-кадрами. I-кадры замещают P-кадры и B-кадры."
41
+Period.IFrame="Период I-кадров (в кадрах)"
42
+Period.IFrame.Description="Расстояние (в кадрах) между I-кадрами. I-кадры замещают P-кадры и B-кадры."
43
+Interval.PFrame="Интервал P-кадров"
44
+Interval.PFrame.Description="Интервал (в секундах) между P-кадрами. P-кадры замещают B-кадры."
45
+Period.PFrame="Период P-кадров (в кадрах)"
46
+Period.PFrame.Description="Расстояние (в кадрах) между P-кадрами. P-кадры замещают B-кадры."
47
+Interval.BFrame="Интервал B-кадров"
48
+Interval.BFrame.Description="Интервал (в секундах) между B-кадрами."
49
+Period.BFrame="Период B-кадров (в кадрах)"
50
+Period.BFrame.Description="Расстояние (в кадрах) между B-кадрами."
51
 GOP.Type="Тип GOP"
52
 GOP.Type.Description="Какой тип GOP должен быть использован:\n- '\@GOP.Type.Fixed\@' всегда будет использовать фиксированные расстояния между каждой GOP.\n- '\@GOP.Type.Variable\@' использует GOP различных размеров, в зависимости от того, какой нужен.\n'\@GOP.Type.Fixed\@' работает так же как устроен H264 и это лучшее решение для трансляции по локальной сети, в то время как '\@GOP.Type.Variable\@' лучше всего подходит для высококачественных записей низкого размера."
53
 GOP.Type.Fixed="Постоянный"
54
@@ -120,8 +138,11 @@
55
 Video.API.Description="Какой API должен использовать бэкенд?"
56
 Video.Adapter="Видеоадаптер"
57
 Video.Adapter.Description="На каком Адаптере мы должны пытаться кодировать?"
58
-OpenCL="OpenCL"
59
-OpenCL.Description="Должен ли использоваться OpenCL для подтверждения Кадров? Технически быстрее, но вызывает проблемы с драйверами Intel (в связи с несовместимыми библиотеками OpenCL)."
60
+OpenCL.Transfer="Передача OpenCL"
61
+OpenCL.Conversion="Преобразование OpenCL"
62
+OpenCL.Conversion.Description="Преобразует кадр на GPU, используя OpenCL вместо DirectCompute."
63
+MultiThreading="Многопоточность"
64
+QueueSize="Размер очереди"
65
 View="Режим просмотра"
66
 View.Description="Какие параметры должны быть показаны?\nВыбор '\@View.Master\@' лишит вас возможности получения помощи."
67
 View.Basic="Обычный"
68
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/sv-SE.ini Changed
122
 
1
@@ -38,6 +38,8 @@
2
 RateControlMethod.CBR="Konstant bithastighet (CBR)"
3
 RateControlMethod.VBR="Varierande bithastighet (begränsat maxvärde) (VBR_LAT)"
4
 RateControlMethod.VBRLAT="Varierande bithastighet (begränsad latens) (VBR_LAT)"
5
+PrePassMode="Förpassläge"
6
+PrePassMode.Description="Förpass är en sekundär fördelning av bithastighet som gör det möjligt att fördela bithastigheten inom en sekvens, men resultatet kan variera för varje grafikkort."
7
 PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (kvarts storlek)"
8
 PrePassMode.Half="\@Utility.Switch.Enabled\@ (halv storlek)"
9
 PrePassMode.Full="\@Utility.Switch.Enabled\@ (full storlek)"
10
@@ -53,30 +55,54 @@
11
 QP.BFrame.Description="Konstant QP-värde att använda för B-bildrutor."
12
 QP.Minimum="Minimal QP"
13
 QP.Minimum.Description="Lägsta QP-värde att använda i en bildruta."
14
+QP.IFrame.Minimum="Minimalt QP för I-bildrutor"
15
 QP.IFrame.Minimum.Description="Lägsta QP-värde att använda i en I-bildruta."
16
+QP.PFrame.Minimum="Minimalt QP för P-bildrutor"
17
 QP.PFrame.Minimum.Description="Lägsta QP-värde att använda i en P-bildruta."
18
 QP.Maximum="Maximal QP"
19
 QP.Maximum.Description="Högsta QP-värde att använda i en bildruta."
20
+QP.IFrame.Maximum="Maximalt QP för I-bildrutor"
21
 QP.IFrame.Maximum.Description="Högsta QP-värde att använda i en I-bildruta."
22
+QP.PFrame.Maximum="Maximalt QP för P-bildrutor"
23
 QP.PFrame.Maximum.Description="Högsta QP-värde att använda i en P-bildruta."
24
 FillerData="Fyllningsdata"
25
 FillerData.Description="Fyllningsdata låter kodaren behålla minst \@Bitrate.Target\@ genom att fylla upp det återstående utrymmet i en sekvens med tom information."
26
 FrameSkipping="Hoppa över bildrutor"
27
+FrameSkipping.Description="Hoppa över bildrutor låter kodaren släppa bildrutor för att möta kraven för \@Bitrate.Target\@.\nNär kodaren släpper en bildruta infogar den istället en NAL som upprepar senaste bildrutan i strömmen.\nKan hjälpa när kraven för \@Bitrate.Target\@ är riktigt låga."
28
+FrameSkipping.Period.Description="Intervall (i bildrutor) mellan överhoppade bildrutor. Detta kan användas för att simulera en lägre bildfrekvens än vad OBS är inställd på medan en giltig ström upprätthålls."
29
+FrameSkipping.Behaviour="Beteende för att hoppa över bildrutor"
30
+FrameSkipping.Behaviour.Description="Definiera hur överhoppade bildrutor beter sig."
31
+FrameSkipping.SkipNth="Hoppar över varje N:de bildruta"
32
+FrameSkipping.KeepNth="Behåller endast varje N:de bildruta"
33
 VBAQ="VBAQ"
34
+VBAQ.Description="Aktiverar användning av \"Variance Based Adaptive Quantization\" (VBAQ) som baseras på bildpunktsvariation för att fördela bithastigheten bättre.\nDet bygger på idén att människans syn är mindre känslig för artefakter i områden med hög textur och kommer därför driva bithastigheten mot mjukare ytor.\nNär detta aktiveras kan det leda till förbättringar i subjektiv kvalitet för en del innehåll."
35
 EnforceHRD="Tvinga HRD"
36
+EnforceHRD.Description="Tvingar användning av en hypotetisk referensavkodare som används för att verifiera att utmatningens bitström är korrekt."
37
 VBVBuffer="VBV-buffert"
38
 VBVBuffer.Description="Vilken metod som ska användas för att bestämma VBV-buffertens storlek:\n- '\@Utlity.Automatic\@' beräknar storleken med hjälp av en strikt begränsning,\n- '\@Utlity.Manual\@' låter användaren kontrollera storleken.\nVBV-buffertern (Video Buffering Verifier) används av vissa Rate Control Methods för att hålla den övergripande bithastigheten inom de angivna begränsningarna."
39
 VBVBuffer.Strictness="Noggrannhet för VBV-buffert"
40
 VBVBuffer.Strictness.Description="Bestämmer noggrannheten för VBV-bufferten, där 100% är så noggrann som möjligt och 0% är gränslös."
41
 VBVBuffer.Size="VBV-buffertstorlek"
42
 VBVBuffer.Size.Description="Storleken för VBV-bufferten som används för bithastighetskontroll i en sekvens."
43
+VBVBuffer.InitialFullness="VBV-buffertens ursprungliga fyllnad"
44
 VBVBuffer.InitialFullness.Description="Hur full VBV-bufferten är från början (i %), kommer endast påverka den inledande kodningssekvensen."
45
-KeyframeInterval="Intervall för keyframes"
46
-KeyframeInterval.Description="Intervall (i sekunder) mellan keyframes."
47
-H264.IDRPeriod="IDR-period (i bildrutor)"
48
-H264.IDRPeriod.Description="Definierar avståndet mellan Instantaneous Decoding Refreshes (IDR) i bildrutor. Kontrollerar även GOP-sekvensens storlek."
49
-H265.IDRPeriod="IDR-period (i GOP)"
50
-H265.IDRPeriod.Description="Definierar avståndet mellan Instantaneous Decoding Refreshes (IDR) i GOP."
51
+Interval.Keyframe="Intervall för keyframes"
52
+Interval.Keyframe.Description="Intervall (i sekunder) mellan keyframes."
53
+Period.IDR.H264="IDR-period (i bildrutor)"
54
+Period.IDR.H265="IDR-period (i GOP)"
55
+Period.IDR.H265.Description="Definierar avståndet mellan Instantaneous Decoding Refreshes (IDR) i GOP."
56
+Interval.IFrame="Intervall för I-bildrutor"
57
+Interval.IFrame.Description="Intervall (i sekunder) mellan I-bildrutor. I-bildrutor överstrider P-bildrutor och B-bildrutor."
58
+Period.IFrame="Period för I-bildrutor (i bildrutor)"
59
+Period.IFrame.Description="Avstånd (i bildrutor) mellan I-bildrutor. I-bildrutor överstrider P-bildrutor och B-bildrutor."
60
+Interval.PFrame="Intervall för P-bildrutor"
61
+Interval.PFrame.Description="Intervall (i sekunder) mellan P-bildrutor. P-bildrutor överstrider B-bildrutor."
62
+Period.PFrame="Period för P-bildrutor (i bildrutor)"
63
+Period.PFrame.Description="Avstånd (i bildrutor) mellan P-Frames. P-Frame överstrider B-Frames."
64
+Interval.BFrame="Intervall för B-bildrutor"
65
+Interval.BFrame.Description="Intervall (i sekunder) mellan B-bildrutor."
66
+Period.BFrame="Period för B-bildrutor (i bildrutor)"
67
+Period.BFrame.Description="Avstånd (i bildrutor) mellan B-bildrutor."
68
 GOP.Type="GOP-typ"
69
 GOP.Type.Description="Vilken typ av GOP bör användas:\n- '\@GOP.Type.Fixed\@' kommer alltid använda fasta avstånd mellan varje GOP.\n- '\@GOP.Type.Variable\@' tillåter GOP i olika storlekar, beroende på vad som behövs.\n'\@GOP.Type.Fixed\@' är hur H264-implementeringen fungerar och är bäst för lokal nätverksströmning, medan '\@GOP.Type.Variable\@' är bäst för korta inspelningar i hög kvalitet."
70
 GOP.Type.Fixed="Konstant"
71
@@ -89,8 +115,11 @@
72
 GOP.Size.Maximum.Description="Maximal storlek för en GOP (Group Of Pictures) i bildrutor."
73
 GOP.Alignment="GOP-justering"
74
 GOP.Alignment.Description="Experimentell. Bieffekterna är okända. Använd på egen risk."
75
+BFrame.Pattern="Mönster för B-bildrutor"
76
 BFrame.Pattern.Description="Antalet B-bildrutor att använda under kodning.\nStöds av andra och tredje generationens VCE-kort. Påverkar kodningsprestandan negativt."
77
+BFrame.DeltaQP="Delta QP för B-bildrutor"
78
 BFrame.DeltaQP.Description="Delta QP-värde till den sista I- eller P-bildrutan för icke-referensbara B-bildrutor."
79
+BFrame.Reference="Referens för B-bildrutor"
80
 BFrame.Reference.Description="Låt en B-bildruta också använda B-bildrutor som referens, i stället för bara P- och I-bildrutor."
81
 BFrame.ReferenceDeltaQP.Description="Delta QP-värde till den sista I- eller P-bildrutan för referensbara B-bildrutor."
82
 DeblockingFilter="Avblockningsfilter"
83
@@ -104,7 +133,11 @@
84
 Video.API.Description="Vilket API bör användas av backend?"
85
 Video.Adapter="Grafikkort"
86
 Video.Adapter.Description="På vilken adapter bör vi försöka koda på?"
87
-OpenCL="OpenCL"
88
+OpenCL.Transfer="OpenCL-överföring"
89
+OpenCL.Conversion="OpenCL-konvertering"
90
+OpenCL.Conversion.Description="Konvertera bildrutan i grafikprocessorn med OpenCL istället för DirectCompute."
91
+MultiThreading="Flertrådning"
92
+QueueSize="Köstorlek"
93
 View="Visningsläge"
94
 View.Description="Vilka egenskaper bör visas?\nOm '\@View.Master\@' används kommer du inte få någon hjälp."
95
 View.Basic="Grundläggande"
96
@@ -114,15 +147,24 @@
97
 Debug="Felsök"
98
 Debug.Description="Aktivera ytterligare felsökningsmeddelanden. Kräver att du kör Open Broadcaster Software Studio med kommandoraden \"--verbose --log_unfiltered\" (utan citationstecken)."
99
 AMF.H264.MaximumLTRFrames="Maximalt antal LTR-bildrutor"
100
+AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) är en funktion som låter kodaren flagga vissa bildrutor i en sekvens som referensbar för en lång tid.\nLTR-bildrutor kan inte användas med B-bildrutor och kodaren kommer att inaktivera B-bildrutor om de används."
101
 AMF.H264.MaximumAccessUnitSize="Maximal storlek på åtkomstenhet"
102
 AMF.H264.MaximumAccessUnitSize.Description="Största storleken på en åtkomstenhet för en NAL."
103
 AMF.H264.HeaderInsertionSpacing.Description="Hur många bildrutor som borde vara mellan NAL-headers."
104
 AMF.H264.WaitForTask="Väntar på arbetsuppgifter"
105
 AMF.H264.WaitForTask.Description="Okänd, experimentell"
106
+AMF.H264.SlicesPerFrame="Segment per bildruta"
107
+AMF.H264.SlicesPerFrame.Description="Hur många I-bildrutesegment bör lagras i varje bildruta?\nEtt värde på noll låter kodaren bestämma dynamiskt.\nIntra-uppdaterande kodning används för snabbare uppspelning och sökning."
108
+AMF.H264.SliceMode="Slice-läge"
109
 AMF.H264.SliceMode.Description="Okänd, experimentell"
110
+AMF.H264.MaximumSliceSize="Maximal segmentstorlek"
111
 AMF.H264.MaximumSliceSize.Description="Okänd, experimentell"
112
+AMF.H264.SliceControlMode="Segmentkontrolläge"
113
 AMF.H264.SliceControlMode.Description="Okänd, experimentell"
114
+AMF.H264.SliceControlSize="Segmentkontrollstorlek"
115
 AMF.H264.SliceControlSize.Description="Okänd, experimentell"
116
+AMF.H264.IntraRefresh.NumberOfStripes="Intra-uppdatera antal linjer"
117
 AMF.H264.IntraRefresh.NumberOfStripes.Description="Okänd, experimentell"
118
-AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Hur många Macroblock bör lagras i varje plats?\nEtt värdet på 0 inaktiverar denna funktion.\nIntra-uppdaterade kodning används för snabbare uppspelning och sökning."
119
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Intra-uppdatera makroblock per plats"
120
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Hur många Macroblock bör lagras i varje plats?\nEtt värde på 0 inaktiverar denna funktion.\nIntra-uppdaterande kodning används för snabbare uppspelning och sökning."
121
 
122
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/tr-TR.ini Changed
181
 
1
@@ -1,7 +1,179 @@
2
+Utility.Default="Varsayılan"
3
+Utility.Automatic="Otomatik"
4
+Utility.Manual="Elle"
5
+Utility.Switch.Disabled="Devre Dışı"
6
+Utility.Switch.Enabled="Etkin"
7
+Preset="Ön Tanım"
8
+Preset.ResetToDefaults="Varsayılan Ayarlara Geri Dön"
9
+Preset.Recording="Kayıt"
10
+Preset.HighQuality="Yüksek Kalite"
11
+Preset.Indistinguishable="Ayırt edilemez"
12
+Preset.Lossless="Kayıpsız"
13
+Preset.Twitch="Twitch"
14
+Preset.YouTube="YouTube"
15
+Usage="Kullanım"
16
+Usage.Description="AMF'nin hangi kullanım için ayarlanması gerektiği:\n- '\@Usage.Transcoding\@' genel amaçlı transkodlama (tavsiye edilen),\n- '\@Usage.UltraLowLatency\@' çok düşük gecikmeli kodlama,\n- '\@Usage.LowLatency\@' üstteki gibi fakat biraz daha gecikmeli.\nYayın sadece '\@Usage.Transcoding\@' destekler, diğer tüm değerler kayıt için kullanılabilir."
17
+Usage.Transcoding="Transkodlama"
18
+Usage.UltraLowLatency="Ultra Düşük Gecikme"
19
+Usage.LowLatency="Düşük Gecikme"
20
+Usage.Webcam="Web Kamerası"
21
+QualityPreset="Kalite Ön Tanımı"
22
+QualityPreset.Description="AMF'in hedef alması gereken Kalite Ön Tanımı:\n- '\@QualityPreset.Speed\@' en hızlı fakat en kötü kaliteye sahip,\n- '\@QualityPreset.Balanced\@' ikisinin dengeli bir karışımı\n- '\@QualityPreset.Quality\@' belirtilen bit hızı için en iyi kaliteyi verir."
23
+QualityPreset.Speed="Hız"
24
+QualityPreset.Balanced="Dengeli"
25
+QualityPreset.Quality="Kalite"
26
+Profile="Profil"
27
+Profile.Description="Birlikte kodlanılacak Profil. En iyi desteklenenden (üst) en iyi kaliteye (alt) doğru sıralı."
28
+ProfileLevel="Profil Seviyesi"
29
+ProfileLevel.Description="Kullanılacak Profil Seviyesi. En iyisi bunu \@Utility.Automatic\@'de bırakmak."
30
+Tier="Kademe"
31
+Tier.Description="Kodlanılacak Kademe. 'Yüksek' yüksek bit hızı ve bant genişliği kullanımını hedefler, 'Ana' ise genel ortam içindir."
32
+AspectRatio="En-Boy Oranı"
33
+AspectRatio.Description="Çıkış dosyasına yazılması gereken En-Boy Oranı."
34
+CodingType="Kodlama Türü"
35
+CodingType.Description="Kullanılacak kodlama türü:\n* '\@Utility.Automatic\@' AMF'in belirlemesine izin verir (tavsiye edilen).\n* 'CALVC' (Bağlama Uyarlanabilen Değişken Uzunluklu Kodlama) hızlı ama büyüktür.\n* 'CABAC' (Bağlama Uyarlanabilen İkili Aritmetik Kodlama) yavaş ama küçüktür."
36
+MaximumReferenceFrames="Maksimum Referans Karesi"
37
+MaximumReferenceFrames.Description="Kodlama yaparken kodlayıcının referanslayabileceği en fazla Kare sayısı. Kodlama kalitesi üstünde doğrudan etkiye sahiptir."
38
+RateControlMethod="Oranı Kontrol Yöntemi"
39
+RateControlMethod.Description="Kullanılacak hız yöntemi:\n- '\@RateControlMethod.CQP\@' sabit I-/P-/B-Kare QP değerleri atar,\n- '\@RateControlMethod.CBR\@' Hedef Bit Hızında kalır (Doldurma Veri kullanarak) (yayın için önerilir),\n- '\@RateControlMethod.VBR\@' verilen Tepe Bi Hızının altında kalır,\n- '\@RateControlMethod.VBRLAT\@' GPU gecikmesi az olduğunda ve yük izin verdiğinde Hedef Bit Hızına yakın kalır, yoksa daha yüksek bit hızı kullanır (kayıt için önerilir)."
40
+RateControlMethod.CQP="Sabit QP (CQP)"
41
+RateControlMethod.CBR="Sabit Bit Hızı (CBR)"
42
+RateControlMethod.VBR="Değişken Bit Hızı (Tepe Kısıtlı) (VBR)"
43
+RateControlMethod.VBRLAT="Değişken Bit Hızı (Gecikme Kısıtlı) (VBRLAT)"
44
+PrePassMode="Ön Geçiş Modu"
45
+PrePassMode.Description="Ön-Geçiş bit-hızının bir dizi içinde daha iyi dağılmasına izin veren ikincil bit hızı dağıtma geçişidir, ancak sonuçlar karttan karta değişebilir."
46
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (Çeyrek Boyut)"
47
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (Yarım Boyut)"
48
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (Tam Boyut)"
49
+Bitrate.Target="Hedef Bit Hızı"
50
+Bitrate.Target.Description="Tüm dizide ulaşılmaya çalışılan Bit-Hızı."
51
+Bitrate.Peak="En Yüksek Bit Hızı"
52
+Bitrate.Peak.Description="Tüm dizide en yüksek tepe olmasına çalışılan Bit-Hızı."
53
+QP.IFrame="I-Kare QP"
54
+QP.IFrame.Description="I-Karelerle kullanmak için sabit QP değeri."
55
+QP.PFrame="P-Kare QP"
56
+QP.PFrame.Description="P-Karelerle kullanmak için sabit QP değeri."
57
+QP.BFrame="B-Kare QP"
58
+QP.BFrame.Description="B-Karelerle kullanmak için sabit QP değeri."
59
+QP.Minimum="Minimum QP"
60
+QP.Minimum.Description="Bir karede kullanılacak en düşük QP değeri."
61
+QP.IFrame.Minimum="Minimum I-Kare QP"
62
+QP.IFrame.Minimum.Description="Bir I-Karede kullanılacak en düşük QP değeri."
63
+QP.PFrame.Minimum="Minimum P-Kare QP"
64
+QP.PFrame.Minimum.Description="Bir P-Karede kullanılacak en düşük QP değeri."
65
+QP.Maximum="Maksimum QP"
66
+QP.Maximum.Description="Bir karede kullanılacak en yüksek QP değeri."
67
+QP.IFrame.Maximum="Maksimum I-Kare QP"
68
+QP.IFrame.Maximum.Description="Bir I-Karede kullanılacak en yüksek QP değeri."
69
+QP.PFrame.Maximum="Maksimum P-Kare QP"
70
+QP.PFrame.Maximum.Description="Bir P-Karede kullanılacak en yüksek QP değeri."
71
+FillerData="Dolgu Veri"
72
+FillerData.Description="Doldurma Verisini etkinleştirmek kodlayıcının bir dizideki kalan alanı boş bilgiyle doldurarak en az \@Bitrate.Target\@ değerinde tutmasına izin verir."
73
+FrameSkipping="Kare Atlama"
74
+FrameSkipping.Description="Kare Atlama kodlayıcının \@Bitrate.Target\@ gereksinimini karşılamak için kare atlamasına izin verir.\nKodlayıcı bir kare atladığında onun yerine yayının içine son-kare-tekrar NAL ekler.\nÇok düşük \@Bitrate.Target\@ gereksinimine yardım edebilir."
75
+FrameSkipping.Period="Atlanan-Kare Periyodu"
76
+FrameSkipping.Period.Description="Atlanan kareler arasındaki aralık (kareler cinsinden). Hala geçerli bir yayın sunarken, OBS'nin ayarlandığından daha düşük bir kare hızını taklit etmek için kullanılabilir."
77
+FrameSkipping.Behaviour="Atlanan-Kare Davranışı"
78
+FrameSkipping.Behaviour.Description="Kare Atlamanın nasıl davranacağını belirler."
79
+FrameSkipping.SkipNth="Sadece her N'inci kareyi atla"
80
+FrameSkipping.KeepNth="Sadece her N'inci kareyi sakla"
81
+VBAQ="VBAQ"
82
+VBAQ.Description="Bit hızını daha iyi dağıtmak için piksel değişimini temel alan 'Değişim Tabanlı Uyarlanabilir Niceleme' (VBAQ)'nin kullanımını etkinleştir.\nİnsan görsel sisteminin yoğun desenli alanlardaki hatalara karşı daha az hassas olduğu fikrine göre çalışır ve bu sebepten bit hızını daha pürüzsüz yüzeylere doğru kaydırır.\nBunu etkinleştirmek belirli içeriklerde öznel kalitede iyileşmeler sağlayabillir."
83
+EnforceHRD="HRD Zorunlu Kıl"
84
+EnforceHRD.Description="Çıkış bit akımının doğruluğunu onaylamak için kullanılan Kuramsal Referans Çözücünün kullanımını zorunlu kıl."
85
+VBVBuffer="VBV Ara Belleği"
86
+VBVBuffer.Description="VBV Ara Bellek Boyutunu belirlemede kullanılması gereken yöntem:\n- '\@Utility.Automatic\@' katılık kısıtlaması kullanarak boyutu hesaplar,\n- '\@Utility.Manual\@' kullanıcının boyutu kotrolüne izin verir.\nVBV (Video Ara Bellek Doğrulayıcı) Ara Belleği belirli Hız Kontrol Yöntemleri tarafından genel bit hızını verilen kısıtlamalar içinde tutmak için kullanılır."
87
+VBVBuffer.Strictness="VBV Ara Bellek Katılığı"
88
+VBVBuffer.Strictness.Description="VBV Ara Belleğinin katılığını belirler, %100 olabildiğince katı ve %0 kısıtlamasız."
89
+VBVBuffer.Size="VBV Arabellek Boyutu"
90
+VBVBuffer.Size.Description="Bir dizide Bit Hızı kontrolü için kullanılan VBV Ara Belleğinin boyutu."
91
+VBVBuffer.InitialFullness="VBV Ara Bellek İlk Doluluk"
92
+VBVBuffer.InitialFullness.Description="VBV Ara Belleğinin başlangıçtaki doluluğu (% olarak), sadece başlangıç kodlama dizisini etkileyecektir."
93
+Interval.Keyframe="Anahtar Kare Aralığı"
94
+Interval.Keyframe.Description="Anahtar Kareler arasındaki Aralık (saniye cinsinden)."
95
+Period.IDR.H264="IDR Periyodu (Kareler cinsinden)"
96
+Period.IDR.H264.Description="Anlık Çözme Yenilemeleri (IDR) arasındaki uzaklığı kareler cinsinden belirler."
97
+Period.IDR.H265="IDR Periyodu (GOP'lar cinsinden)"
98
+Period.IDR.H265.Description="Anlık Çözme Yenilemeleri (IDR) arasındaki uzaklığı GOP'lar cinsinden tanımlar."
99
+Interval.IFrame="I-Kare Aralığı"
100
+Interval.IFrame.Description="I-Kareler arasındaki Aralık (saniye cinsinden). I-Kareler, P-Kareleri ve B-Kareleri geçersiz kılar."
101
+Period.IFrame="I-Kare Periyodu (Kareler cinsinden)"
102
+Period.IFrame.Description="I-Kareler arasındaki Uzaklık (kareler cinsinden). I-Kareler, P-Kareleri ve B-Kareleri geçersiz kılar."
103
+Interval.PFrame="P-Kare Aralığı"
104
+Interval.PFrame.Description="P-Kareler arasındaki Aralık (saniye cinsinden). P-Kareler, B-Kareleri geçersiz kılar."
105
+Period.PFrame="P-Kare Periyodu (Kareler cinsinden)"
106
+Period.PFrame.Description="P-Kareler arasındaki Uzaklık (kareler cinsinden). P-Kareler, B-Kareleri geçersiz kılar."
107
+Interval.BFrame="B-Kare Aralığı"
108
+Interval.BFrame.Description="B-Kareler arasındaki Aralık (saniye cinsinden)."
109
+Period.BFrame="B-Kare Periyodu (Kareler cinsinden)"
110
+Period.BFrame.Description="B-Kareler arasındaki uzaklık (Kareler cinsinden)."
111
+GOP.Type="GOP Türü"
112
+GOP.Type.Description="Kullanılması gereken GOP türü:\n- '\@GOP.Type.Fixed\@' her GOP arasında sabit uzaklık kullanacaktır.\n- '\@GOP.Type.Variable\@' ne gerektiğine bağlı olarak değişken GOP boyutlarına izin verir.\n'\@GOP.Type.Fixed\@' H264 uyarlanmasının çalışma şeklidir ve yerel ağ yayını için en iyisi iken, '\@GOP.Type.Variable\@' düşük boyutlu yüksek kaliteli kayıtlar için en iyisidir."
113
+GOP.Type.Fixed="Sabit"
114
+GOP.Type.Variable="Değişken"
115
+GOP.Size="GOP Boyutu"
116
+GOP.Size.Description="Kare içinde GOP (Resim Grubu) Boyutu."
117
+GOP.Size.Minimum="GOP Boyutu Minimum"
118
+GOP.Size.Minimum.Description="Kare içinde Minimum GOP (Resim Grubu) Boyutu."
119
+GOP.Size.Maximum="GOP Boyutu Maksimum"
120
+GOP.Size.Maximum.Description="Kare içinde Maksimum GOP (Resim Grubu) Boyutu."
121
+GOP.Alignment="GOP Hizalama"
122
+GOP.Alignment.Description="Deneysel, Etkileri Bilimemektedir. Tehlikeyi Bilerek Kullanın."
123
+BFrame.Pattern="B-Kare Deseni"
124
+BFrame.Pattern.Description="Kodlama sırasında kullanılacak B-Kare miktarı.\n2. ve 3. nesil VCE kartları tarafından desteklenir. Kodlama performası üzerinde negatif etki yaratır."
125
+BFrame.DeltaQP="B-Kare Delta QP"
126
+BFrame.DeltaQP.Description="Referanslanamaz B-Kareler için son I- veya P-Kareye Delta QP değeri."
127
+BFrame.Reference="B-Kare Referansı"
128
+BFrame.Reference.Description="Bir B-Karenin, sadece P- ve I-Kareler yerine, yine B-Kareleri referans olarak kullanmasına izin verir."
129
+BFrame.ReferenceDeltaQP="B-Kare Referans Delta QP"
130
+BFrame.ReferenceDeltaQP.Description="Referanslanabilir B-Kareler için son I- veya P-Kareye Delta QP değeri."
131
+DeblockingFilter="Deblocking Filtresi"
132
+DeblockingFilter.Description="Çözücünün Deblocking Filtresi uygulamasına izin ver."
133
+MotionEstimation="Hareket Tahmini"
134
+MotionEstimation.Description="Hareket Tahmini bir pikselin nereye gittiğini tahmin ederek kodlayıcının gerekli bit hızını düşürmesine izin verir."
135
+MotionEstimation.Quarter="Çeyrek Piksel"
136
+MotionEstimation.Half="Yarım Piksel"
137
+MotionEstimation.Full="Çeyrek ve Yarım Piksel"
138
+Video.API="Video API"
139
+Video.API.Description="Hangi API arka ucunu kullanmalıyız?"
140
+Video.Adapter="Ekran Kartı"
141
+Video.Adapter.Description="Hangi bağdaştırıcı üstünde kodlamayı denemeliyiz?"
142
+OpenCL.Transfer="OpenCL Aktarma"
143
+OpenCL.Transfer.Description="Kareyi GPU'ya haritalanmış bellek yerine OpenCL ile aktar. OpenCL ile aktarım GPU kullanılırken haritalanmış bellekle aktarıma göre daha az düzensizdir."
144
+OpenCL.Conversion="OpenCL Dönüştürme"
145
+OpenCL.Conversion.Description="Kareyi GPU'da DirectCompute yerine OpenCL ile dönüştür."
146
+MultiThreading="Çoklu Kullanımlı"
147
+MultiThreading.Description="Kareleri göndermeyi ve paketleri almayı idare için birden fazla iş parçacığı kullan. Bu yavaş CPU'larda yardcı olabilir ancak genel olarak daha fazla sistem kaynağı kullanacaktır. Daha hızlı CPU'larda performansı olumsuz yönde etkileyecektir."
148
+QueueSize="Sıra boyutu"
149
+QueueSize.Description="Paketleri almaya çalışmadan önce kodlayıcı için bu kadar kareyi kuyruğa al. Daha yüksek bir değer daha fazla gecikmeye neden olurken daha düşük bir değer de kodlayıcının aşırı yüklenmesine neden olabilir. Bunun varsayılandan değiştirilmesi önerilmez."
150
+View="Görüntüleme Modu"
151
+View.Description="Hangi özellikler gösterilsin?\n'\@View.Master\@' kullanmak sizi destek almaktan diskalifiye eder."
152
+View.Basic="Temel"
153
+View.Advanced="Gelişmiş"
154
+View.Expert="Uzman"
155
+View.Master="Usta"
156
+Debug="Hata Ayıklama"
157
+Debug.Description="Ek hata ayıklama iletilerini etkinleştir. OBS Stüdyoyu '--verbose --log_unfiltered' (kesme işaretsiz) komut satırıyla çalıştırmanızı gerektirir."
158
+AMF.H264.MaximumLTRFrames="Maksimum LTR Karesi"
159
+AMF.H264.MaximumLTRFrames.Description="Uzun Dönem Referans (LTR) Kareler kodlayıcının uzun bir zaman içinde belirli kareleri bir dizi halinde referanslanabilir olarak işaretlemesine izin veren bir özelliktir.\nLTR Kareler B-Kareler ile kullanılamaz ve kodlayıcı B-Kareleri kullanılıyorlarsa devre dışı bırakır."
160
+AMF.H264.MaximumAccessUnitSize="Maksimum Erişim Birimi Boyutu"
161
+AMF.H264.MaximumAccessUnitSize.Description="NAL için bir erişim biriminin en büyük boyutu."
162
+AMF.H264.HeaderInsertionSpacing="Başlık Ekleme Aralığı"
163
+AMF.H264.HeaderInsertionSpacing.Description="NAL başlıkları arasında kaç kare olmalıdır."
164
+AMF.H264.WaitForTask="Görevi Bekle"
165
 AMF.H264.WaitForTask.Description="Bilinmeyen, Deneysel"
166
+AMF.H264.SlicesPerFrame="Kare Başına Dilim"
167
+AMF.H264.SlicesPerFrame.Description="Her karede kaç I-Kare dilimi depolansın?\n0 değeri kodlayıcının çalışırken belirlemesine izin verir.\nDaha hızlı yeniden oynatma ve arama için İç-Yenileme kodlaması kullanılır."
168
+AMF.H264.SliceMode="Dilim Modu"
169
 AMF.H264.SliceMode.Description="Bilinmeyen, Deneysel"
170
+AMF.H264.MaximumSliceSize="Maksimum Dilim Boyutu"
171
 AMF.H264.MaximumSliceSize.Description="Bilinmeyen, Deneysel"
172
+AMF.H264.SliceControlMode="Dilim Kontrol Modu"
173
 AMF.H264.SliceControlMode.Description="Bilinmeyen, Deneysel"
174
+AMF.H264.SliceControlSize="Dilim Kontrol Boyutu"
175
 AMF.H264.SliceControlSize.Description="Bilinmeyen, Deneysel"
176
+AMF.H264.IntraRefresh.NumberOfStripes="Çizgilerin İç-Yenileme Sayısı"
177
 AMF.H264.IntraRefresh.NumberOfStripes.Description="Bilinmeyen, Deneysel"
178
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Slot Başına İç-Yenileme Makrobloğu"
179
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Her slotta kaç Makroblok depolansın?\n0 değeri bu özelliği kapatır.\nDaha hızlı yeniden oynatma ve arama için İç-Yenileme kodlaması kullanılır."
180
 
181
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/uk-UA.ini Changed
62
 
1
@@ -71,6 +71,12 @@
2
 FillerData.Description="Заповнювати пустоти у бітрейту - це наповнювання інформацією, яку декодер просто ігнорує. Якщо увімкнено, то зайве місце у бітрейті буде заповнено нічого не значущою інформацією за для дотримання точного значення Бажаний бітрейт. Аналог Filler Data."
3
 FrameSkipping="Пропускати кадри"
4
 FrameSkipping.Description="Пропускати кадри - дозволяє енкодеру відкидати кадри, якщо керування потоком не може досягти встановленого значення Бажаний бітрейт.\nКоли енкодер пропускає кадр, він додає дублювати-останній-кадр NAL до потоку.\nМоже допомогти при встановленні дуже низьких значень Бажаний бітрейт."
5
+FrameSkipping.Period="Пропускання кадрів (період)"
6
+FrameSkipping.Period.Description="Проміжок часу (в кадрах) між навмисним пропусканням кадрів. Це може бути використано для імітації нижчої частоти кадрів ніж встановлено OBS, в той же час маючи ще дійсний потік."
7
+FrameSkipping.Behaviour="Пропускання кадрів (поведінка)"
8
+FrameSkipping.Behaviour.Description="Визначає, як пропускати кадри."
9
+FrameSkipping.SkipNth="Пропускати кожен N-ий кадр"
10
+FrameSkipping.KeepNth="Зберегти тільки кожен N-ий кадр"
11
 VBAQ="VBAQ"
12
 VBAQ.Description="Увімкнути використання функції Variance Based Adaptive Quantization (VBAQ), яка базується на дисперсії пікселів задля кращого використання наявного бітрейту.\nЗаощаджує на комплексних текстурах, до яких око людини менш чутливе, на користь плавних переходів в інших місцях.\nЗа рахунок цього, може дещо поліпшити якість зображення."
13
 EnforceHRD="Застосувати примусову сумісність з HRD"
14
@@ -83,12 +89,24 @@
15
 VBVBuffer.Size.Description="Розмір VBV буфера (Video Buffering Verifier) використовується під час контролю бітрейта відео."
16
 VBVBuffer.InitialFullness="Початкова повнота буферу VBV"
17
 VBVBuffer.InitialFullness.Description="Визначає початкову заповнюваність Буферу VBV (у відсотках), діє лише на початку кодування."
18
-KeyframeInterval="Інтервал ключових кадрів"
19
-KeyframeInterval.Description="Визначає кількість секунд між двома повними кадрами (ключовими кадрами)."
20
-H264.IDRPeriod="IDR, період (кадрів)"
21
-H264.IDRPeriod.Description="Визначає відстань між Instantaneous Decoding Refreshes (IDR) (ключовими кадрами), в кадрах.\nТакож контролює довжину послідовності кадрів у групі зображень (GOP)."
22
-H265.IDRPeriod="IDR, період (групи зображень)"
23
-H265.IDRPeriod.Description="Визначає відстань між Instantaneous Decoding Refreshes (IDR) (ключовими кадрами), тут вимірюється у кількості груп зображень (GOP) між двома IDR."
24
+Interval.Keyframe="Інтервал ключових кадрів"
25
+Interval.Keyframe.Description="Визначає кількість секунд між двома повними кадрами (ключовими кадрами)."
26
+Period.IDR.H264="IDR, період (кадрів)"
27
+Period.IDR.H264.Description="Визначає відстань між Instantaneous Decoding Refreshes (IDR) (ключовими кадрами), в кадрах."
28
+Period.IDR.H265="IDR, період (групи зображень)"
29
+Period.IDR.H265.Description="Визначає відстань між Instantaneous Decoding Refreshes (IDR) (ключовими кадрами), тут вимірюється у кількості груп зображень (GOP) між двома IDR."
30
+Interval.IFrame="I-кадри, інтервал"
31
+Interval.IFrame.Description="Визначає кількість секунд між I-кадрами. I-кадри впливають на значення встановлене у P-кадрах та B-кадрах."
32
+Period.IFrame="I-кадри, період (кадрів)"
33
+Period.IFrame.Description="Визначає відстань (у кадрах) між I-кадрами. I-кадри впливають на значення встановлене у P-кадрах та B-кадрах."
34
+Interval.PFrame="P-кадри, інтервал"
35
+Interval.PFrame.Description="Визначає кількість секунд між P-кадрами. P-кадри впливають на значення встановлене у B-кадрах."
36
+Period.PFrame="P-кадри, період (кадрів)"
37
+Period.PFrame.Description="Визначає відстань (у кадрах) між P-кадрами. P-кадри впливають на значення встановлене у B-кадрах."
38
+Interval.BFrame="B-кадри, інтервал"
39
+Interval.BFrame.Description="Визначає кількість секунд між B-кадрами."
40
+Period.BFrame="B-кадри, період (кадрів)"
41
+Period.BFrame.Description="Визначає відстань (у кадрах) між B-кадрами."
42
 GOP.Type="Тип розміру GOP"
43
 GOP.Type.Description="Визначає який тип розміру групи зображень (GOP) буде використано у кодуванні:\n  'Фіксований' - постійна відстань між двома групами зображень.\n  'Змінний' - розмір кожної групи зображень може змінюватись у часі.\nФіксований розмір групи зображень є часткою стандарту H.264 та найбільш відповідає трансляціям, у той час як Змінний розмір групи зображень краще застосовувати у високоякісних записах малого розміру."
44
 GOP.Type.Fixed="Фіксований"
45
@@ -120,8 +138,14 @@
46
 Video.API.Description="Визначає який API використовувати для кодування."
47
 Video.Adapter="Відеоадаптер"
48
 Video.Adapter.Description="Визначає який відеоадаптер використовувати для кодування."
49
-OpenCL="OpenCL"
50
-OpenCL.Description="Чи буде енкодер використовувати OpenCL щоб надсилати кожен окремий кадр? Технічно швидкий, але може конфліктувати з драйвером Intel (не сумісні бібліотеки OpenCL)."
51
+OpenCL.Transfer="OpenCL передача"
52
+OpenCL.Transfer.Description="Передача кадру до графічного процесору, використовуючи технології OpenCL замість прямого використання розширеної пам'яті. Коли використовується графічний процесор, тоді передача через OpenCL, менш спорадична, ніж переказ через розширену пам'ять."
53
+OpenCL.Conversion="OpenCL конвертація"
54
+OpenCL.Conversion.Description="Конвертація кадру графічним процесором, використовуючи OpenCL замість DirectCompute."
55
+MultiThreading="Багатопоточність"
56
+MultiThreading.Description="Дозволяє використовувати більше одного потоку для трансферу кадрів та отримання пакетів. Це може допомогти у випадку більш повільного центрального процесору, але за рахунок інших системних ресурсів. Буде негативно впливати на продуктивність при використанні швидкого центрального процесору."
57
+QueueSize="Розмір черги"
58
+QueueSize.Description="Становить у чергу енкодера саме таку кількість кадрів перед першою спробою отримати пакети. Вищі значення збільшують затримку, хоча замалі значення можуть спричинити перевантаження кодування. Не рекомендується змінювати це від значення за замовчанням."
59
 View="Вид для налаштувань"
60
 View.Description="Визначає кількість наявних опцій для налаштування.\nНавряд чи розробник вам допомагатиме, якщо ви оберете рівень 'Бог енкодерів'."
61
 View.Basic="Базовий"
62
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/vi-VN.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/vi-VN.ini Changed
108
 
1
@@ -12,29 +12,44 @@
2
 Preset.Twitch="Twitch"
3
 Preset.YouTube="YouTube"
4
 Usage="Sử dụng"
5
+Usage.Description="Nên để AMF được điều chỉnh cho:\n- '\@Usage.Transcoding\@' dùng để chuyển mã (khuyến nghị),\n- '\@Usage.UltraLowLatency\@' để mã hóa ở độ trễ cực thấp,\n- '\@Usage.LowLatency\@' giống như trên với độ trễ cao hơn chút.\nStream chỉ hỗ trợ '\@Usage.Transcoding\@', tất cả những thiết lập còn lại có thể dùng để quay video."
6
 Usage.Transcoding="Chuyển mã"
7
 Usage.UltraLowLatency="Độ trễ cực thấp"
8
 Usage.LowLatency="Độ trễ thấp"
9
 Usage.Webcam="Webcam"
10
 QualityPreset="Quality Preset"
11
+QualityPreset.Description="Nên để Quality Preset mà AMF nên nhắm đến:\n- '\@QualityPreset.Speed\@' thì nhanh nhất nhưng chất lượng tệ nhất,\n- '\@QualityPreset.Balanced\@' cân bằng cả 2,\n- '\@QualityPreset.Quality\@'cho chất lượng tốt nhất nhưng chậm nhất."
12
 QualityPreset.Speed="Tốc độ"
13
 QualityPreset.Balanced="Cân bằng"
14
 QualityPreset.Quality="Chất lượng"
15
 Profile="Hồ sơ"
16
-ProfileLevel="Profile Level"
17
+Profile.Description="Chọn hồ sơ nào để mã hóa. Sắp xếp từ hỗ trợ tốt nhất (trên cùng) đến chất lượng tốt nhất (dưới cùng)."
18
+ProfileLevel="Cấp độ hồ sơ"
19
+ProfileLevel.Description="Cấp độ hồ sơ mà bạn muốn chọn là gì. Tốt nhất nên để ở \@Utility.Automatic\@."
20
 AspectRatio="Tỉ lệ"
21
 CodingType="Coding Type"
22
+MaximumReferenceFrames="Số khung tham khảo tối đa"
23
+MaximumReferenceFrames.Description="Nên chọn bao nhiêu khung để bộ mã hóa tham khảo khi mã hóa. Liên quan trực tiếp đến chất lượng mã hóa video."
24
 RateControlMethod="Cách kiểm soát Bitrate"
25
 RateControlMethod.CQP="QP Không thay đổi (CQP)"
26
 RateControlMethod.CBR="Bitrate Không thay đổi (CBR)"
27
 RateControlMethod.VBR="Bitrate Thay đổi được (Phụ thuộc vào Bitrate Cao nhất) (VBR)"
28
 RateControlMethod.VBRLAT="Bitrate Thay đổi được (Phụ thuộc vào độ trễ) (VBR_LAT)"
29
 PrePassMode="Pre-Pass Mode"
30
+PrePassMode.Description="Pre-Pass cho phép phân phối tốt hơn bitrate trong một chuỗi, tuy nhiên các tác dụng này có thể thay đổi qua các thẻ."
31
+PrePassMode.Quarter="\@Utility.Switch.Enabled\@ (1/4 Size)"
32
+PrePassMode.Half="\@Utility.Switch.Enabled\@ (1/2 Size)"
33
+PrePassMode.Full="\@Utility.Switch.Enabled\@ (Full Size)"
34
 Bitrate.Target="Bitrate Mục tiêu"
35
+Bitrate.Target.Description="Bitrate trung bình trong video."
36
 Bitrate.Peak="Bitrate Cao nhất"
37
+Bitrate.Peak.Description="Bitrate tối đa trong video."
38
 QP.IFrame="I-Frame QP"
39
+QP.IFrame.Description="Giá trị QP cố định cho I-Frames."
40
 QP.PFrame="P-Frame QP"
41
+QP.PFrame.Description="Giá trị QP cố định cho P-Frames."
42
 QP.BFrame="B-Frame QP"
43
+QP.BFrame.Description="Giá trị QP cố định cho B-Frames."
44
 QP.Minimum="QP Thấp nhất"
45
 QP.Minimum.Description="Giá trị QP nhỏ nhất sử dụng trong 1 khung ảnh."
46
 QP.IFrame.Minimum="I-Frame QP Thấp nhất"
47
@@ -49,10 +64,15 @@
48
 QP.PFrame.Maximum.Description="Giá trị QP lớn nhất sử dụng trong P-Frame."
49
 FillerData="Filler Data (Thêm data cho đủ bitrate)"
50
 FillerData.Description="Bật Filler Data cho phép bộ mã hóa giữ ít nhất \@Bitrate.Target\@ bằng cách điền vào không gian còn lại trong một chuỗi thông tin trống."
51
+FrameSkipping="Bỏ qua một số khung"
52
+FrameSkipping.Description="Bỏ qua một số khung cho phép bộ mã hóa bỏ một số khung để đạt \@Bitrate.Target\@ yêu cầu.\nKhi bộ mã hóa bỏ một frame. nó sẽ thay thế một khung cuối trong NAL vào trong stream.\nCó thể giúp với \@Bitrate.Target\@ yêu cầu."
53
+FrameSkipping.Period="Thời gian bỏ qua khung hình"
54
+FrameSkipping.Behaviour="Hành vi bỏ qua khung hình"
55
 VBAQ="VBAQ"
56
 EnforceHRD="Ép sử dụng HRD"
57
-KeyframeInterval="Thời gian đặt keyframe"
58
-KeyframeInterval.Description="Khoảng thời gian (bằng giây) giữa các khung hình."
59
+EnforceHRD.Description="Ép sử dụng Hypothetical Reference Decoder để kiểm tra đầu ra bitstream có đúng hay không."
60
+Interval.BFrame.Description="Khoảng thời gian (bằng giây) giữa các B-Frame."
61
+Period.BFrame.Description="Khoảng cách (Trong khung) giữa các B-Frames."
62
 GOP.Type="Loại GOP"
63
 GOP.Type.Fixed="Cố định"
64
 GOP.Type.Variable="Biến"
65
@@ -63,6 +83,7 @@
66
 GOP.Size.Maximum="Kích thước GOP tối đa"
67
 GOP.Size.Maximum.Description="Kích thước tối đa của một GOP (Nhóm ảnh) trong khung hình."
68
 GOP.Alignment.Description="Thử nghiệm, kết quả chưa biết. Dùng nó có thể tạo một số rủi ro."
69
+BFrame.Reference="B-Frame Tham khảo"
70
 DeblockingFilter="De-blocking Filter (Lọc chống nhiễu ảnh)"
71
 DeblockingFilter.Description="Cho phép bộ giải mã áp dụng lọc chống nhiễu ảnh."
72
 MotionEstimation="Dự đoán bù trừ chuyển động"
73
@@ -72,8 +93,12 @@
74
 MotionEstimation.Full="1/4 & 1/2 Pixel"
75
 Video.API="Video API"
76
 Video.Adapter="Card đồ họa"
77
-OpenCL="OpenCL"
78
-OpenCL.Description="Nên sử dụng OpenCL để gửi các khung? Về mặt kỹ thuật thì nhanh hơn nhưng có thể gây ra vấn đề với driver của Intel (do thư viện OpenCL không tương thích)."
79
+Video.Adapter.Description="Nên chọn card đồ họa nào để mã hóa?"
80
+OpenCL.Transfer="Di chuyển khung bằng OpenCL"
81
+OpenCL.Conversion="Chuyển đổi khung bằng OpenCL"
82
+MultiThreading="Đa luồng"
83
+MultiThreading.Description="Sử dụng nhiều hơn một luông để xử lý các khung hình gửi và truy xuất gói. Điều này có thể giúp đỡ trên CPU chậm hơn nhưng sẽ sử dụng tài nguyên hệ thống tổng thể. Nó sẽ tác động tiêu cực đến hiệu suất trên CPU mạnh hơn."
84
+QueueSize="Kích thước hàng đợi"
85
 View="Chế độ xem"
86
 View.Description="Những thuộc tính gì sẽ được hiển thị?\nNếu sử dụng '\@View.Master\@' thì bạn sẽ không nhận được hỗ trợ."
87
 View.Basic="Cơ bản"
88
@@ -83,11 +108,19 @@
89
 Debug="Gỡ lỗi"
90
 Debug.Description="Cho phép hiện thông báo gỡ lỗi bổ sung. Đòi hỏi bạn phải chạy Open Broadcaster Software Studio với dòng lệnh --verbose --log_unfiltered."
91
 AMF.H264.MaximumLTRFrames="LTR Frames tối đa"
92
+AMF.H264.MaximumLTRFrames.Description="Ong Term Reference (LTR) Frames là 1 tính năng giúp trình mã hóa đánh dấu 1 số khung hình trong chuỗi để tham khảo trong thời gian dài.\nLTR Frames không thể dùng chung với B-Frames và trình mã hóa sẽ tắt B-Frames nếu có sử dụng."
93
+AMF.H264.MaximumAccessUnitSize="Kích thước truy cập đơn vị tối đa"
94
+AMF.H264.WaitForTask="Đợi nhiệm vụ tiếp theo"
95
 AMF.H264.WaitForTask.Description="Không rõ, thử nghiệm"
96
 AMF.H264.SlicesPerFrame="Lát cho mỗi khung hình"
97
+AMF.H264.SliceMode="Chế độ cắt"
98
 AMF.H264.SliceMode.Description="Không rõ, thử nghiệm"
99
+AMF.H264.MaximumSliceSize="Slice Size tối đa"
100
 AMF.H264.MaximumSliceSize.Description="Không rõ, thử nghiệm"
101
+AMF.H264.SliceControlMode="Chế độ kiểm soát cắt"
102
 AMF.H264.SliceControlMode.Description="Không rõ, thử nghiệm"
103
+AMF.H264.SliceControlSize="Kích thước kiểm soát cắt"
104
 AMF.H264.SliceControlSize.Description="Không rõ, thử nghiệm"
105
 AMF.H264.IntraRefresh.NumberOfStripes.Description="Không rõ, thử nghiệm"
106
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Có bao nhiêu Macroblocks nên lưu trữ ở mỗi ô?\nđặt giá trị bằng 0 sẽ tắt tính năng này.\nIntra-Refresh encoding dùng để phát lại và tua video nhanh hơn."
107
 
108
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/zh-CN.ini Changed
62
 
1
@@ -71,6 +71,12 @@
2
 FillerData.Description="启用填充数据允许编码器至少保持 \@Bitrate.Target\@, 通过填满空信息序列中的剩余空间."
3
 FrameSkipping="跳过的帧"
4
 FrameSkipping.Description="跳过的帧允许编码器下丢帧, 以满足\@Bitrate.Target\@ 要求.\n当编码器丢帧时, 它反而插入一个重复最后一帧的 NAL 到流中.\n可以帮助非常低的\@Bitrate.Target\@."
5
+FrameSkipping.Period="跳过帧周期"
6
+FrameSkipping.Period.Description="跳过帧之间的间隔(以帧). 这个用来仿真比 OBS 设置的低的帧率同时仍然有一个合法的流."
7
+FrameSkipping.Behaviour="跳帧行为"
8
+FrameSkipping.Behaviour.Description="定义跳帧的处理方式."
9
+FrameSkipping.SkipNth="跳过每第 N 帧"
10
+FrameSkipping.KeepNth="保持每第 N 帧"
11
 VBAQ="VBAQ"
12
 VBAQ.Description="启用'基于方差的自适应量化'(VBAQ), 基于像素的方差来更好地区分比特率.\n他基于原理人类的视觉系统是对高纹理的物体不敏感, 因而将推动比特率来实现更平滑的界面.\n启用这个可能会导致某些内容的主观质量的改善."
13
 EnforceHRD="强制 HRD"
14
@@ -83,12 +89,24 @@
15
 VBVBuffer.Size.Description="用于在一个序列中的控制比特率的 VBV 缓存的大小."
16
 VBVBuffer.InitialFullness="VBV 缓冲区初始满"
17
 VBVBuffer.InitialFullness.Description="VBV 缓存最初应该多满(百分比), 将只会影响最初的序列的编码."
18
-KeyframeInterval="关键帧间隔"
19
-KeyframeInterval.Description="关键帧之间间隔(以秒为单位)."
20
-H264.IDRPeriod="IDR 周期 (帧)"
21
-H264.IDRPeriod.Description="定义帧内瞬时解码刷新 (IDR) 的距离. 也控制 GOP 序列长度."
22
-H265.IDRPeriod="IDR 周期 (GOPs)"
23
-H265.IDRPeriod.Description="定义 GOP 之间瞬时解码刷新 (IDR) 的距离。"
24
+Interval.Keyframe="关键帧间隔"
25
+Interval.Keyframe.Description="关键帧之间间隔(以秒为单位)."
26
+Period.IDR.H264="IDR 周期 (以帧)"
27
+Period.IDR.H264.Description="定义瞬时解码刷新 (IDR) 的距离以帧为单位."
28
+Period.IDR.H265="IDR 周期 (以 GOP 为单位)"
29
+Period.IDR.H265.Description="定义瞬时解码刷新 (IDR) 的距离以 GOP 为单位."
30
+Interval.IFrame="关键帧间隔"
31
+Interval.IFrame.Description="I 帧间隔 (以秒为单位). I 帧覆盖 P 帧和 B 帧."
32
+Period.IFrame="关键帧周期 (以帧)"
33
+Period.IFrame.Description="I 帧间隔 (以帧为单位). I 帧覆盖 P 帧和 B 帧."
34
+Interval.PFrame="P 帧间隔"
35
+Interval.PFrame.Description="P 帧间隔 (以秒为单位). P 帧覆盖 B 帧."
36
+Period.PFrame="P 帧周期 (以帧为单位)"
37
+Period.PFrame.Description="P 帧之间距离 (以帧为单位). P 帧覆盖 B 帧."
38
+Interval.BFrame="B 帧间隔"
39
+Interval.BFrame.Description="B 帧之间间隔(以秒为单位)."
40
+Period.BFrame="B 帧间隔(以帧)"
41
+Period.BFrame.Description="B 帧直接的距离(以帧)."
42
 GOP.Type="GOP 类型"
43
 GOP.Type.Description="应使用哪种类型的 GOP:\n-'\@GOP.Type.Fixed\@' 将始终使用固定的每个 GOP 之间的距离之.\n-'\@GOP.Type.Variable\@' 允许 GOPs 为不同值, 取决于什么是需要的.\n'\@GOP.Type.Fixed\@' 是 H264 实现如何工作和最好的本地网络推流, 而 '\@GOP.Type.Variable\@' 是最适合低大小高品质的录像."
44
 GOP.Type.Fixed="固定的"
45
@@ -120,8 +138,14 @@
46
 Video.API.Description="后端应使用什么 API?"
47
 Video.Adapter="视频适配器"
48
 Video.Adapter.Description="我们应该尝试在什么适配器上编码?"
49
-OpenCL="OpenCL"
50
-OpenCL.Description="OpenCL 应该用于提交帧吗? 从技术上讲更快, 但英特尔驱动程序会导致出问题(由于不兼容的 OpenCL 库)."
51
+OpenCL.Transfer="OpenCL 转移"
52
+OpenCL.Transfer.Description="使用 OpenCL 来传输帧而不是映射内存. 当 GPU 被使用时, 通过 OpenCL 转移相比通过映射内存传输更少分散."
53
+OpenCL.Conversion="OpenCL 转换"
54
+OpenCL.Conversion.Description="使用 OpenCL 转换在 GPU 上的帧而不是 DirectCompute."
55
+MultiThreading="多线程"
56
+MultiThreading.Description="使用多个线程来处理提交帧和检索数据包. 这有助于在较慢的 CPU 上, 但将为整体的系统资源使用. 它将对更快的 CPU 的性能产生负面影响."
57
+QueueSize="队列大小"
58
+QueueSize.Description="在尝试检索数据包之前, 为编码器查询这些多个帧. 较高的值引入更多的延迟, 同时较低的值可能会导致超载编码. 不推荐更改此默认值."
59
 View="查看模式"
60
 View.Description="应显示哪些属性?\n使用 '\@View.Master\@' 会使你丧失获得技术支持的资格."
61
 View.Basic="基本"
62
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Resources/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Resources/locale/zh-TW.ini Changed
81
 
1
@@ -71,11 +71,62 @@
2
 FillerData.Description="啟用填塞空白資料允許編碼器保持位元速率至少有\@Bitrate.Target\@,編碼器將會將不足的位元用空白訊息填滿"
3
 FrameSkipping="省略訊框"
4
 FrameSkipping.Description="省略訊框允許編碼器在為了達成\@Bitrate.Target\@時省略部份訊框。\n當編碼器省略訊框時,他將插入重複上一個訊框的指令。\n對極低的\@Bitrate.Target\@有幫助。"
5
+FrameSkipping.Period="省略訊框週期"
6
+FrameSkipping.Period.Description="省略訊框之間的距離(以訊框為單位)。這可以用來模擬比 OBS 設定還低的訊框速率,同時輸出正確的串流。"
7
+FrameSkipping.Behaviour="省略訊框行為"
8
+FrameSkipping.Behaviour.Description="定義如何省略訊框。"
9
+FrameSkipping.SkipNth="只省略每 N 個訊框"
10
+FrameSkipping.KeepNth="只保留每 N 個訊框"
11
 VBAQ="VBAQ"
12
+VBAQ.Description="啟用'基於平方差的自適量化器' (VBAQ),它是基於像素的平方差以更好的分配位元率。\n其工作原理為人類的視覺系統對複雜的表面較不敏感,因此它會在平滑的表面上分配更多的位元率。\n啟用這個可能會對某些內容有主觀上的品質提昇。"
13
 EnforceHRD="強制使用 HRD"
14
 EnforceHRD.Description="強制使用 Hypothetical Reference Decoder,HRD 用於驗證輸出位元流是否正確。"
15
 VBVBuffer="VBV(Video Buffering Verifier) 緩衝區"
16
 VBVBuffer.Description="決定 VBV 緩衝區大小的方法:\n- '\@Utility.Automatic\@' 根據嚴格性計算大小,\n- '\@Utility.Manual\@' 允許使用者調整大小。\n 某些速率控制方法會使用 VBV (Video Buffering Verifier) 緩衝區讓整體的位元速率保持在給定的條件之內。"
17
+VBVBuffer.Strictness="VBV 緩衝區嚴格性"
18
+VBVBuffer.Strictness.Description="決定 VBV 緩衝區的嚴密性,100% 表示盡可能的嚴格,0% 表示完全不限制。"
19
+VBVBuffer.Size="VBV 緩衝區大小"
20
+VBVBuffer.Size.Description="VBV緩衝區的大小,這將用於過程中的位元速率控制"
21
+VBVBuffer.InitialFullness="初始 VBV 緩衝區填充度"
22
+VBVBuffer.InitialFullness.Description="VBV 緩衝區起始該多滿(以百分比計),將只影響編碼的起始。"
23
+Interval.Keyframe="關鍵訊框間隔"
24
+Interval.Keyframe.Description="關鍵訊框之間的間隔(以秒為單位)。"
25
+Period.IDR.H264="IDR週期(以訊框為單位)"
26
+Period.IDR.H264.Description="以訊框為單位,定義瞬間解碼重新更新(Instantaneous Decoding Refreshes)間的距離。"
27
+Period.IDR.H265="IDR週期(以圖像群組為單位)"
28
+Period.IDR.H265.Description="以圖像群組為單位,定義瞬間解碼重新更新(Instantaneous Decoding Refreshes)間的距離。"
29
+Interval.IFrame="I-訊框間隔"
30
+Interval.IFrame.Description="I-訊框之間的間隔(以秒為單位)。I-訊框將會覆蓋P-訊框與B-訊框。"
31
+Period.IFrame="I-訊框週期(以訊框為單位)"
32
+Period.IFrame.Description="I-訊框之間的間隔(以訊框為單位)。I-訊框將會覆蓋P-訊框與B-訊框。"
33
+Interval.PFrame="P-訊框間隔"
34
+Interval.PFrame.Description="P-訊框之間的間隔(以秒為單位)。P-訊框將會覆蓋B-訊框。"
35
+Period.PFrame="P-訊框週期(以訊框為單位)"
36
+Period.PFrame.Description="P-訊框之間的間隔(以訊框為單位)。P-訊框將會覆蓋B-訊框。"
37
+Interval.BFrame="B-訊框間隔"
38
+Interval.BFrame.Description="B-訊框之間的間隔(以秒為單位)。"
39
+Period.BFrame="B-訊框週期(以訊框為單位)"
40
+Period.BFrame.Description="B-訊框之間的間隔(以訊框為單位)。"
41
+GOP.Type="圖像群組類型"
42
+GOP.Type.Description="該使用哪種圖像群組:\n-'\@GOP.Type.Fixed\@' 將在圖像群組間保持固定距離。\n- '\@GOP.Type.Variable\@' 允許根據需要,使用不同大小的圖像群組。\n'\@GOP.Type.Fixed\@' 是 H264 實作的方式且適於區域網路串流。,而'\@GOP.Type.Variable\@' 適於高品質小檔案錄影。"
43
+GOP.Type.Fixed="固定"
44
+GOP.Type.Variable="可變"
45
+GOP.Size="圖像群組大小"
46
+GOP.Size.Description="圖像群組的大小(以訊框為單位)。"
47
+GOP.Size.Minimum="最小圖像群組大小"
48
+GOP.Size.Minimum.Description="圖像群組的最小大小(以訊框為單位)。"
49
+GOP.Size.Maximum="最大圖像群組大小"
50
+GOP.Size.Maximum.Description="圖像群組的最大大小(以訊框為單位)。"
51
+GOP.Alignment="圖像群組對齊"
52
+GOP.Alignment.Description="實驗功能,未知效果。請自行承擔風險。"
53
+BFrame.Pattern="B 訊框樣式"
54
+BFrame.Pattern.Description="編碼時使用的 B 訊框數量。\n搭載第二代和第三代影像編碼引擎的顯示卡支援此參數。對編碼效能會有不良影響。"
55
+BFrame.DeltaQP="B 訊框 QP 變化"
56
+BFrame.DeltaQP.Description="不可參照 B 訊框與上一個I或P訊框間的QP值變化。"
57
+BFrame.Reference="B 訊框參照"
58
+BFrame.Reference.Description="允許 B 訊框也使用 B 訊框作為參照,而不限於 P 和 I 訊框。"
59
+BFrame.ReferenceDeltaQP="B 訊框參照 QP 變化"
60
+BFrame.ReferenceDeltaQP.Description="可參照 B 訊框與上一個I或P訊框間的QP值變化。"
61
 DeblockingFilter="去塊狀色斑濾鏡"
62
 DeblockingFilter.Description="允許解碼器使用去塊狀色斑濾鏡。"
63
 MotionEstimation="動態估算"
64
@@ -87,8 +138,14 @@
65
 Video.API.Description="後端應使用什麼 API?"
66
 Video.Adapter="顯示卡"
67
 Video.Adapter.Description="該嘗試用那個顯示卡編碼?"
68
-OpenCL="OpenCL"
69
-OpenCL.Description="使用 OpenCL 提交訊框?技術上更快,但 (由於不相容的 OpenCL 函式庫) 會跟 Intel 驅動程式相衝。"
70
+OpenCL.Transfer="OpenCL 轉移"
71
+OpenCL.Transfer.Description="使用 OpenCL 將訊框傳輸至 GPU,而非使用記憶體映射。當 GPU 正在被使用時,透過 OpenCL 傳輸將比記憶體映射更為集中。"
72
+OpenCL.Conversion="OpenCL 轉換"
73
+OpenCL.Conversion.Description="利用 OpenCL 來透過 GPU 轉換訊框,而非 DirectCompute。"
74
+MultiThreading="多執行緒"
75
+MultiThreading.Description="使用多個執行緒來處理發送訊框和接收資料封包。在較慢的 CPU 上這將有所幫助,但將做為整體的系統資源使用。在較快的 CPU 上將會對效能有不良影響。"
76
+QueueSize="佇列大小"
77
+QueueSize.Description="嘗試接收資料封包之前為編碼器保留如此多的訊框。較高的值會導致較多的延遲,而較低的值可能會導致編碼器負荷過重。不建議使用預設以外的數值。"
78
 View="檢視模式"
79
 View.Description="該顯示哪些屬性?\n使用'\@View.Master\@'時將不提供任何的支援。"
80
 View.Basic="基本"
81
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp Changed
18
 
1
@@ -64,16 +64,12 @@
2
                try {
3
                    std::unique_ptr<AMD::Encoder> enc;
4
 
5
-                   #ifdef WITH_AVC
6
                    if (codec == Codec::AVC || codec == Codec::SVC) {
7
                        enc = std::make_unique<AMD::EncoderH264>(api, adapter);
8
                    }
9
-                   #endif
10
-                   #ifdef WITH_HEVC
11
                    if (codec == Codec::HEVC) {
12
                        enc = std::make_unique<AMD::EncoderH265>(api, adapter);
13
                    }
14
-                   #endif
15
                    if (enc != nullptr)
16
                        isSupported = true;
17
                } catch (const std::exception& e) {
18
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp Changed
51
 
1
@@ -50,20 +50,9 @@
2
        colorFormat, colorSpace, fullRangeColor,
3
        useAsyncQueue, asyncQueueSize) {
4
    AMFTRACECALL;
5
+   this->SetUsage(Usage::Transcoding);
6
 
7
-   AMF_RESULT res = AMF_UNEXPECTED;
8
-
9
-   /// Full Range Color Stuff
10
-   static const wchar_t* fullColorParams[] = {
11
-       L"FullRangeColor",
12
-       L"NominalRange",
13
-   };
14
-   for (const wchar_t* par : fullColorParams) {
15
-       res = m_AMFConverter->SetProperty(par, m_FullColorRange);
16
-       res = m_AMFEncoder->SetProperty(par, m_FullColorRange);
17
-       if (res == AMF_OK)
18
-           break;
19
-   }
20
+   AMF_RESULT res = res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_FULL_RANGE_COLOR, m_FullColorRange);
21
    if (res != AMF_OK) {
22
        QUICK_FORMAT_MESSAGE(errMsg,
23
            PREFIX "Failed to set encoder color range, error %ls (code %d)",
24
@@ -1554,7 +1543,8 @@
25
            m_FrameSkipType = AMF_VIDEO_ENCODER_PICTURE_TYPE_NONE;
26
        }
27
    }
28
-   d->SetProperty(AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, type);
29
+   if (type != AMF_VIDEO_ENCODER_PICTURE_TYPE_NONE)
30
+       d->SetProperty(AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, type);
31
 
32
    switch (type) {
33
        case AMF_VIDEO_ENCODER_PICTURE_TYPE_NONE:
34
@@ -1602,12 +1592,12 @@
35
    PLOG_INFO(PREFIX "      Conversion: %s",
36
        m_UniqueId,
37
        m_OpenCLConversion ? "Enabled" : "Disabled");
38
-   PLOG_INFO(PREFIX "    Async Queue: %s",
39
+   PLOG_INFO(PREFIX "    Multi-Threading: %s",
40
        m_UniqueId,
41
-       m_AsyncQueue ? "Enabled" : "Disabled");
42
-   PLOG_INFO(PREFIX "      Size: %" PRIu32,
43
+       m_MultiThreading ? "Enabled" : "Disabled");
44
+   PLOG_INFO(PREFIX "    Queue Size: %" PRIu32,
45
        m_UniqueId,
46
-       (uint32_t)m_AsyncQueueSize);
47
+       (uint32_t)GetQueueSize());
48
    #pragma endregion Backend
49
    #pragma region Frame
50
    PLOG_INFO(PREFIX "  Frame:",
51
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp Changed
49
 
1
@@ -49,6 +49,7 @@
2
        colorFormat, colorSpace, fullRangeColor,
3
        useAsyncQueue, asyncQueueSize) {
4
    AMFTRACECALL;
5
+   this->SetUsage(Usage::Transcoding);
6
 }
7
 
8
 
9
@@ -1569,10 +1570,10 @@
10
    switch ((AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM)pktType) {
11
        case AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I:
12
            packet->keyframe = true;
13
-           packet->priority = 3;
14
+           packet->priority = 1;
15
            break;
16
        case AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_P:
17
-           packet->priority = 1;
18
+           packet->priority = 0;
19
            break;
20
    }
21
 }
22
@@ -1610,7 +1611,8 @@
23
            m_FrameSkipType = AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE;
24
        }
25
    }
26
-   d->SetProperty(AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, type);
27
+   if (type != AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE)
28
+       d->SetProperty(AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE, type);
29
 
30
    switch (type) {
31
        case AMF_VIDEO_ENCODER_HEVC_PICTURE_TYPE_NONE:
32
@@ -1658,12 +1660,12 @@
33
    PLOG_INFO(PREFIX "      Conversion: %s",
34
        m_UniqueId,
35
        m_OpenCLConversion ? "Enabled" : "Disabled");
36
-   PLOG_INFO(PREFIX "    Async Queue: %s",
37
+   PLOG_INFO(PREFIX "    Multi-Threading: %s",
38
        m_UniqueId,
39
-       m_AsyncQueue ? "Enabled" : "Disabled");
40
-   PLOG_INFO(PREFIX "      Size: %" PRIu32,
41
+       m_MultiThreading ? "Enabled" : "Disabled");
42
+   PLOG_INFO(PREFIX "    Queue Size: %" PRIu32,
43
        m_UniqueId,
44
-       (uint32_t)m_AsyncQueueSize);
45
+       (uint32_t)GetQueueSize());
46
    #pragma endregion Backend
47
    #pragma region Frame
48
    PLOG_INFO(PREFIX "  Frame:",
49
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/amf-encoder.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/amf-encoder.cpp Changed
699
 
1
@@ -25,12 +25,8 @@
2
 #include "amf-encoder.h"
3
 #include "utility.h"
4
 #include "components/VideoConverter.h"
5
-#ifdef WITH_AVC
6
 #include "components/VideoEncoderVCE.h"
7
-#endif
8
-#ifdef WITH_HEVC
9
 #include "components/VideoEncoderHEVC.h"
10
-#endif
11
 #include <thread>
12
 #include "libobs/util/threading.h"
13
 
14
@@ -41,9 +37,10 @@
15
    std::shared_ptr<API::IAPI> videoAPI, API::Adapter videoAdapter,
16
    bool useOpenCLSubmission, bool useOpenCLConversion,
17
    ColorFormat colorFormat, ColorSpace colorSpace, bool fullRangeColor,
18
-   bool useAsyncQueue, size_t asyncQueueSize) {
19
-   #pragma region Null Values
20
+   bool multiThreading, size_t queueSize) {
21
    m_UniqueId = Utility::GetUniqueIdentifier();
22
+
23
+   #pragma region Null Values
24
    /// AMF Internals
25
    m_AMF = nullptr;
26
    m_AMFFactory = nullptr;
27
@@ -52,30 +49,60 @@
28
    m_AMFConverter = nullptr;
29
    m_AMFMemoryType = amf::AMF_MEMORY_UNKNOWN;
30
    m_AMFSurfaceFormat = Utility::ColorFormatToAMF(colorFormat);
31
+
32
    /// API Related
33
    m_API = nullptr;
34
    m_APIDevice = nullptr;
35
    m_OpenCLSubmission = false;
36
+
37
    /// Properties
38
-   m_Codec = codec;
39
-   m_ColorFormat = colorFormat;
40
-   m_ColorSpace = colorSpace;
41
-   m_FullColorRange = fullRangeColor;
42
+   m_QueueSize = queueSize;
43
+
44
+   /// Resolution + Rate
45
    m_Resolution = std::make_pair<uint32_t, uint32_t>(0, 0);
46
    m_FrameRate = std::make_pair<uint32_t, uint32_t>(0, 0);
47
-   m_TimestampStep = 0;
48
-   m_TimestampStepRounded = 0;
49
-   m_TimestampOffset = 0;
50
+   m_FrameRateFraction = 0;
51
+
52
    /// Flags
53
    m_Initialized = true;
54
    m_Started = false;
55
    m_OpenCL = false;
56
+   m_Debug = false;
57
+
58
+   /// Timings
59
+   m_TimestampStep = 0;
60
+   m_TimestampStepRounded = 0;
61
+   m_TimestampOffset = 0;
62
+   m_SubmitQueryWaitTimer = std::chrono::milliseconds(1);
63
+   m_SubmitQueryAttempts = 16;
64
+   m_InitialFrameLatency = 0;
65
+
66
+   /// Status
67
+   m_SubmittedFrameCount = 0;
68
+   m_InitialFramesSent = false;
69
+   m_InitialPacketRetrieved = false;
70
+
71
+   /// Periods
72
+   m_PeriodIDR = 0;
73
+   m_PeriodIFrame = 0;
74
+   m_PeriodPFrame = 0;
75
+   m_PeriodBFrame = 0;
76
+   m_FrameSkipPeriod = 0;
77
+   m_FrameSkipKeepOnlyNth = false;
78
+
79
+   /// Multi-Threading
80
+   m_MultiThreading = multiThreading;
81
+   m_AsyncRetrieve = nullptr;
82
+   m_AsyncSend = nullptr;
83
+   #pragma endregion Null Values
84
+
85
+   // Setup
86
+   m_Codec = codec;
87
+   m_ColorFormat = colorFormat;
88
+   m_ColorSpace = colorSpace;
89
+   m_FullColorRange = fullRangeColor;
90
    m_OpenCLSubmission = useOpenCLSubmission;
91
    m_OpenCLConversion = useOpenCLConversion;
92
-   m_HaveFirstFrame = false;
93
-   m_AsyncQueue = useAsyncQueue;
94
-   m_AsyncQueueSize = asyncQueueSize;
95
-   #pragma endregion Null Values
96
 
97
    // Initialize selected API on Video Adapter
98
    m_API = videoAPI;
99
@@ -84,7 +111,7 @@
100
 
101
    // Initialize Advanced Media Framework
102
    m_AMF = AMF::Instance();
103
-   /// Retrieve Factory
104
+   m_AMF->EnableDebugTrace(m_Debug);
105
    m_AMFFactory = m_AMF->GetFactory();
106
 
107
    // Create Context for Conversion and Encoding
108
@@ -281,12 +308,21 @@
109
    return m_FullColorRange;
110
 }
111
 
112
-bool Plugin::AMD::Encoder::IsAsynchronousQueueEnabled() {
113
-   return m_AsyncQueue;
114
+bool Plugin::AMD::Encoder::IsMultiThreaded() {
115
+   return m_MultiThreading;
116
 }
117
 
118
-size_t Plugin::AMD::Encoder::GetAsynchronousQueueSize() {
119
-   return m_AsyncQueueSize;
120
+size_t Plugin::AMD::Encoder::GetQueueSize() {
121
+   return m_QueueSize;
122
+}
123
+
124
+void Plugin::AMD::Encoder::SetDebug(bool v) {
125
+   m_Debug = v;
126
+   m_AMF->EnableDebugTrace(m_Debug);
127
+}
128
+
129
+bool Plugin::AMD::Encoder::IsDebug() {
130
+   return m_Debug;
131
 }
132
 
133
 void Plugin::AMD::Encoder::UpdateFrameRateValues() {
134
@@ -298,7 +334,7 @@
135
    m_FrameRateFraction = ((double_t)m_FrameRate.second / (double_t)m_FrameRate.first);
136
    m_TimestampStep = AMF_SECOND * m_FrameRateFraction;
137
    m_TimestampStepRounded = (uint64_t)round(m_TimestampStep);
138
-   m_SubmitQueryWaitTimer = std::chrono::nanoseconds((uint64_t)round(m_TimestampStep / m_SubmitQueryAttempts / 2));
139
+   m_SubmitQueryWaitTimer = std::chrono::milliseconds(1);// std::chrono::nanoseconds((uint64_t)round(m_TimestampStep / m_SubmitQueryAttempts));
140
 }
141
 
142
 void Plugin::AMD::Encoder::SetVBVBufferStrictness(double_t v) {
143
@@ -408,14 +444,16 @@
144
    }
145
 
146
    // Threading
147
-   if (m_AsyncQueue) {
148
+   if (m_MultiThreading) {
149
        m_AsyncSend = new EncoderThreadingData;
150
        m_AsyncSend->shutdown = false;
151
        m_AsyncSend->wakeupcount = 0;// 2 ^ 32;
152
+       m_AsyncSend->data = nullptr;
153
        m_AsyncSend->worker = std::thread(AsyncSendMain, this);
154
        m_AsyncRetrieve = new EncoderThreadingData;
155
        m_AsyncRetrieve->shutdown = false;
156
        m_AsyncRetrieve->wakeupcount = 0;
157
+       m_AsyncRetrieve->data = nullptr;
158
        m_AsyncRetrieve->worker = std::thread(AsyncRetrieveMain, this);
159
    }
160
 
161
@@ -447,12 +485,13 @@
162
    m_AMFEncoder->Flush();
163
 
164
    // Threading
165
-   if (m_AsyncQueue) {
166
+   if (m_MultiThreading) {
167
        {
168
            std::unique_lock<std::mutex> lock(m_AsyncRetrieve->mutex);
169
            m_AsyncRetrieve->shutdown = true;
170
            m_AsyncRetrieve->wakeupcount = 2 ^ 32;
171
            m_AsyncRetrieve->condvar.notify_all();
172
+           m_AsyncRetrieve->data = nullptr;
173
        }
174
        m_AsyncRetrieve->worker.join();
175
        delete m_AsyncRetrieve;
176
@@ -461,6 +500,7 @@
177
            m_AsyncSend->shutdown = true;
178
            m_AsyncSend->wakeupcount = 2 ^ 32;
179
            m_AsyncSend->condvar.notify_all();
180
+           m_AsyncSend->data = nullptr;
181
        }
182
        m_AsyncSend->worker.join();
183
        delete m_AsyncSend;
184
@@ -674,7 +714,7 @@
185
    surface->SetDuration(tsNow - tsLast);
186
    /// Type override
187
    std::string printableType = HandleTypeOverride(surface, frame->pts);
188
-   
189
+
190
    // Performance Tracking
191
    auto clk_end = std::chrono::high_resolution_clock::now();
192
    uint64_t pf_timestamp = std::chrono::nanoseconds(clk_end.time_since_epoch()).count();
193
@@ -682,13 +722,15 @@
194
    surface->SetProperty(AMF_TIMESTAMP_STORE, pf_timestamp);
195
    surface->SetProperty(AMF_TIME_STORE, pf_time);
196
 
197
-   PLOG_DEBUG("<Id: %lld> EncodeStore: PTS(%8lld) DTS(%8lld) TS(%16lld) Duration(%16lld) Type(%s)",
198
-       m_UniqueId,
199
-       frame->pts,
200
-       frame->pts,
201
-       surface->GetPts(),
202
-       surface->GetDuration(),
203
-       printableType.c_str());
204
+   if (m_Debug) {
205
+       PLOG_DEBUG("<Id: %lld> EncodeStore: PTS(%8lld) DTS(%8lld) TS(%16lld) Duration(%16lld) Type(%s)",
206
+           m_UniqueId,
207
+           frame->pts,
208
+           frame->pts,
209
+           surface->GetPts(),
210
+           surface->GetDuration(),
211
+           printableType.c_str());
212
+   }
213
 
214
    return true;
215
 }
216
@@ -752,22 +794,35 @@
217
    bool frameSubmitted = false,
218
        packetRetrieved = false;
219
 
220
-   for (uint64_t attempt = 1;
221
-       ((attempt <= m_SubmitQueryAttempts) && (!frameSubmitted || !m_HaveFirstFrame))
222
-       || (m_HaveFirstFrame && !packetRetrieved);
223
-       attempt++) {
224
+   bool keepLooping = true;
225
+   for (uint64_t attempt = 1; keepLooping; attempt++) {
226
+       // Lets just change the stupid huge bitwise and/or into proper ifs.
227
+       // Since this is rather small and can be kept in L1 we should not see
228
+       // any differences in performance.
229
+       if (m_InitialFramesSent) {
230
+           if (m_InitialPacketRetrieved) {
231
+               if (attempt <= m_SubmitQueryAttempts) {
232
+                   keepLooping = (!frameSubmitted || !packetRetrieved);
233
+               } else {
234
+                   keepLooping = false;
235
+               }
236
+           } else {
237
+               keepLooping = !frameSubmitted || !packetRetrieved;
238
+           }
239
+       } else {
240
+           keepLooping = !frameSubmitted;
241
+       }
242
+
243
        // Submit
244
        if (!frameSubmitted) {
245
-           if (m_AsyncQueue) { // Asynchronous
246
+           if (m_MultiThreading) { // Asynchronous
247
                std::unique_lock<std::mutex> slock(m_AsyncSend->mutex);
248
-               if (m_AsyncSend->queue.size() < m_AsyncQueueSize) {
249
-                   m_AsyncSend->queue.push(data);
250
-                   m_AsyncSend->wakeupcount++;
251
-                   m_AsyncSend->condvar.notify_one();
252
+               if (m_AsyncSend->data == nullptr) {
253
+                   m_AsyncSend->data = data;
254
+                   m_AsyncSend->condvar.notify_all();
255
                    frameSubmitted = true;
256
                } else {
257
-                   m_AsyncSend->wakeupcount++;
258
-                   m_AsyncSend->condvar.notify_one();
259
+                   m_AsyncSend->condvar.notify_all();
260
                }
261
            } else {
262
                // Performance Tracking
263
@@ -776,77 +831,84 @@
264
                data->SetProperty(AMF_TIMESTAMP_SUBMIT, pf_ts);
265
 
266
                AMF_RESULT res = m_AMFEncoder->SubmitInput(data);
267
-               switch (res) {
268
-                   case AMF_INPUT_FULL: // TODO: We don't really have a way to call QueryOutput here...
269
-                       break;
270
-                   case AMF_OK:
271
-                       frameSubmitted = true;
272
-                       break;
273
-                   default:
274
-                       {
275
-                           QUICK_FORMAT_MESSAGE(errMsg,
276
-                               "<Id: %lld> [Main] Submitting Surface failed, error %ls (code %d)",
277
-                               m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
278
-                           PLOG_ERROR("%s", errMsg.data());
279
-                       }
280
-                       return false;
281
+               if (m_Debug) {
282
+                   QUICK_FORMAT_MESSAGE(errMsg,
283
+                       "<Id: %lld> [Main/Submit] SubmitInput returned %ls (code %d).",
284
+                       m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
285
+                   PLOG_WARNING("%s", errMsg.c_str());
286
+               }
287
+
288
+               if (res == AMF_OK) {
289
+                   frameSubmitted = true;
290
+                   m_SubmittedFrameCount++;
291
+               } else if (res == AMF_INPUT_FULL) {
292
+                   if (m_InitialFramesSent == false) {
293
+                       QUICK_FORMAT_MESSAGE(errMsg,
294
+                           "<Id: %lld> Queue Size is too large, starting to query for packets...",
295
+                           m_UniqueId);
296
+                       PLOG_ERROR("%s", errMsg.data());
297
+                       m_InitialFramesSent = true;
298
+                   }
299
+               } else {
300
+                   QUICK_FORMAT_MESSAGE(errMsg,
301
+                       "<Id: %lld> [Main] Submitting Surface failed, error %ls (code %d)",
302
+                       m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
303
+                   PLOG_ERROR("%s", errMsg.data());
304
+                   return false;
305
                }
306
            }
307
        }
308
 
309
-       if (!frameSubmitted)
310
-           std::this_thread::sleep_for(m_SubmitQueryWaitTimer);
311
-
312
        // Retrieve
313
-       if (!packetRetrieved) {
314
-           if (m_AsyncQueue) {
315
+       if (m_InitialFramesSent && !packetRetrieved) {
316
+           if (m_MultiThreading) {
317
                std::unique_lock<std::mutex> rlock(m_AsyncRetrieve->mutex);
318
-               if (m_AsyncRetrieve->queue.size() > 0) {
319
-                   packet = m_AsyncRetrieve->queue.front();
320
-                   m_AsyncRetrieve->queue.pop();
321
+               if (m_AsyncRetrieve->data != nullptr) {
322
+                   packet = m_AsyncRetrieve->data;
323
+                   m_AsyncRetrieve->data = nullptr;
324
                    packetRetrieved = true;
325
-                   m_HaveFirstFrame = true;
326
+                   m_InitialPacketRetrieved = true;
327
                } else {
328
-                   m_AsyncRetrieve->condvar.notify_one();
329
+                   m_AsyncRetrieve->condvar.notify_all();
330
+                   if (m_AsyncRetrieve->wakeupcount == 0)
331
+                       m_AsyncRetrieve->wakeupcount = 1;
332
                }
333
            } else {
334
                AMF_RESULT res = m_AMFEncoder->QueryOutput(&packet);
335
-               switch (res) {
336
-                   case AMF_REPEAT: // Returned with B-Frames, means that we need more frames.
337
-                   case AMF_NEED_MORE_INPUT: // Same
338
-                       if (!m_HaveFirstFrame)
339
-                           packetRetrieved = true;
340
-                       // TODO: Somehow call SubmitInput here.
341
-                       break;
342
-                   case AMF_OK:
343
-                       m_HaveFirstFrame = true;
344
-                       packetRetrieved = true;
345
+               if (m_Debug) {
346
+                   QUICK_FORMAT_MESSAGE(errMsg,
347
+                       "<Id: %lld> [Main/Query] QueryOutput returned %ls (code %d).",
348
+                       m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
349
+                   PLOG_WARNING("%s", errMsg.c_str());
350
+               }
351
+
352
+               if (res == AMF_OK) {
353
+                   m_InitialPacketRetrieved = true;
354
+                   packetRetrieved = true;
355
 
356
-                       // Performance Tracking
357
-                       {
358
-                           auto clk = std::chrono::high_resolution_clock::now();
359
-                           uint64_t pf_query = std::chrono::nanoseconds(clk.time_since_epoch()).count(),
360
-                               pf_submit, pf_main;
361
-                           packet->GetProperty(AMF_TIMESTAMP_SUBMIT, &pf_submit);
362
-                           packet->SetProperty(AMF_TIMESTAMP_QUERY, pf_query);
363
-                           pf_main = (pf_query - pf_submit);
364
-                           packet->SetProperty(AMF_TIME_MAIN, pf_main);
365
-                       }
366
-
367
-                       break;
368
-                   default:
369
-                       {
370
-                           QUICK_FORMAT_MESSAGE(errMsg,
371
-                               "<Id: %lld> [Main] Retrieving Packet failed, error %ls (code %d)",
372
-                               m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
373
-                           PLOG_ERROR("%s", errMsg.data());
374
-                       }
375
-                       return false;
376
+                   // Performance Tracking
377
+                   auto clk = std::chrono::high_resolution_clock::now();
378
+                   uint64_t pf_query = std::chrono::nanoseconds(clk.time_since_epoch()).count(),
379
+                       pf_submit, pf_main;
380
+                   packet->GetProperty(AMF_TIMESTAMP_SUBMIT, &pf_submit);
381
+                   packet->SetProperty(AMF_TIMESTAMP_QUERY, pf_query);
382
+                   pf_main = (pf_query - pf_submit);
383
+                   packet->SetProperty(AMF_TIME_MAIN, pf_main);
384
+               } else if (res == AMF_NEED_MORE_INPUT) {
385
+                   // Returned with B-Frames, means that we need more frames.
386
+                   if (!m_InitialPacketRetrieved)
387
+                       packetRetrieved = true;
388
+               } else if (res != AMF_REPEAT) {
389
+                   QUICK_FORMAT_MESSAGE(errMsg,
390
+                       "<Id: %lld> [Main] Retrieving Packet failed, error %ls (code %d)",
391
+                       m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
392
+                   PLOG_ERROR("%s", errMsg.data());
393
+                   return false;
394
                }
395
            }
396
        }
397
 
398
-       if (!packetRetrieved)
399
+       if (!packetRetrieved || !frameSubmitted)
400
            std::this_thread::sleep_for(m_SubmitQueryWaitTimer);
401
    }
402
    if (!frameSubmitted) {
403
@@ -855,12 +917,20 @@
404
            m_UniqueId);
405
        PLOG_WARNING("%s", errMsg.data());
406
    }
407
-   if (m_HaveFirstFrame && !packetRetrieved) {
408
+   if (!m_InitialPacketRetrieved) {
409
+       QUICK_FORMAT_MESSAGE(errMsg,
410
+           "<Id: %lld> Waiting for initial frame...",
411
+           m_UniqueId);
412
+       PLOG_DEBUG("%s", errMsg.data());
413
+   }
414
+   if (m_InitialPacketRetrieved && !packetRetrieved) {
415
        QUICK_FORMAT_MESSAGE(errMsg,
416
            "<Id: %lld> No output Packet, encoder is overloaded!",
417
            m_UniqueId);
418
        PLOG_WARNING("%s", errMsg.data());
419
    }
420
+   if (m_SubmittedFrameCount >= (m_TimestampOffset + m_QueueSize))
421
+       m_InitialFramesSent = true;
422
    return true;
423
 }
424
 
425
@@ -910,58 +980,62 @@
426
    pf_load_ts = std::chrono::nanoseconds(clk_end.time_since_epoch()).count();
427
    pf_load_t = std::chrono::nanoseconds(clk_end - clk_start).count();
428
 
429
-   std::string printableType = "Unknown";
430
-   #ifdef WITH_AVC
431
-   if (m_Codec != Codec::HEVC) {
432
-       uint64_t type = AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_IDR;
433
-       data->GetProperty(AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE, &type);
434
-       switch ((AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_ENUM)type) {
435
-           case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_IDR:
436
-               printableType = "IDR";
437
-               break;
438
-           case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_I:
439
-               printableType = "I";
440
-               break;
441
-           case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_P:
442
-               printableType = "P";
443
-               break;
444
-           case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_B:
445
-               printableType = "B";
446
-               break;
447
+   if (m_Debug) {
448
+       std::string printableType = "Unknown";
449
+       if (m_Codec != Codec::HEVC) {
450
+           uint64_t type = AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_IDR;
451
+           data->GetProperty(AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE, &type);
452
+           switch ((AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_ENUM)type) {
453
+               case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_IDR:
454
+                   printableType = "IDR";
455
+                   break;
456
+               case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_I:
457
+                   printableType = "I";
458
+                   break;
459
+               case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_P:
460
+                   printableType = "P";
461
+                   break;
462
+               case AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE_B:
463
+                   printableType = "B";
464
+                   break;
465
+           }
466
        }
467
-   }
468
-   #endif
469
-   #ifdef WITH_HEVC
470
-   if (m_Codec == Codec::HEVC) {
471
-       uint64_t type = AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I;
472
-       data->GetProperty(AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE, &type);
473
-       switch ((AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM)type) {
474
-           case AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I:
475
-               printableType = "I";
476
-               break;
477
-           case AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_P:
478
-               printableType = "P";
479
-               break;
480
+       if (m_Codec == Codec::HEVC) {
481
+           uint64_t type = AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I;
482
+           data->GetProperty(AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE, &type);
483
+           switch ((AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_ENUM)type) {
484
+               case AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_I:
485
+                   printableType = "I";
486
+                   break;
487
+               case AMF_VIDEO_ENCODER_HEVC_OUTPUT_DATA_TYPE_P:
488
+                   printableType = "P";
489
+                   break;
490
+           }
491
        }
492
+
493
+       PLOG_DEBUG(
494
+           "<Id: %" PRIu64 "> EncodeLoad: PTS(%8" PRIu64 ") DTS(%8" PRIu64 ") TS(%16" PRIu64 ") Duration(%16" PRIu64 ") Size(%16" PRIu64 ") Type(%s)",
495
+           m_UniqueId,
496
+           packet->pts,
497
+           packet->dts,
498
+           data->GetPts(),
499
+           data->GetDuration(),
500
+           packet->size,
501
+           printableType.c_str());
502
+       PLOG_DEBUG("<Id: %" PRIu64 ">    Timings: Allocate(%8" PRIu64 " ns) Store(%8" PRIu64 " ns) Convert(%8" PRIu64 " ns) Main(%8" PRIu64 " ns) Load(%8" PRIu64 " ns)",
503
+           m_UniqueId,
504
+           pf_allocate_t,
505
+           pf_store_t,
506
+           pf_convert_t,
507
+           pf_main_t,
508
+           pf_load_t);
509
+   }
510
+   if (m_InitialFrameLatency == 0) {
511
+       m_InitialFrameLatency = pf_main_t;
512
+       PLOG_INFO("<Id: %" PRIu64 "> Initial Frame Latency is %" PRIu64 " nanoseconds.",
513
+           m_UniqueId,
514
+           m_InitialFrameLatency);
515
    }
516
-   #endif  
517
-
518
-   PLOG_DEBUG(
519
-       "<Id: %lld> EncodeLoad: PTS(%8lld) DTS(%8lld) TS(%16lld) Duration(%16lld) Size(%16lld) Type(%s)",
520
-       m_UniqueId,
521
-       packet->pts,
522
-       packet->dts,
523
-       data->GetPts(),
524
-       data->GetDuration(),
525
-       packet->size,
526
-       printableType.c_str());
527
-   PLOG_DEBUG("<Id: %lld>    Timings: Allocate(%8lld ns) Store(%8lld ns) Convert(%8lld ns) Main(%8lld ns) Load(%8lld ns)",
528
-       m_UniqueId,
529
-       pf_allocate_t,
530
-       pf_store_t,
531
-       pf_convert_t,
532
-       pf_main_t,
533
-       pf_load_t);
534
 
535
    *received_packet = true;
536
 
537
@@ -979,33 +1053,44 @@
538
    std::unique_lock<std::mutex> lock(own->mutex);
539
    while (!own->shutdown) {
540
        own->condvar.wait(lock, [&own] {
541
-           return own->shutdown || !own->queue.empty();
542
+           return own->shutdown || (own->data != nullptr);
543
        });
544
 
545
-       if (own->queue.empty())
546
+       if (own->data == nullptr)
547
            continue;
548
 
549
-       AMF_RESULT res = m_AMFEncoder->SubmitInput(own->queue.front());
550
-       switch (res) {
551
-           case AMF_OK:
552
-               own->queue.pop();
553
-               own->wakeupcount--;
554
-               {
555
-                   std::unique_lock<std::mutex> rlock(m_AsyncRetrieve->mutex);
556
-                   m_AsyncRetrieve->wakeupcount++;
557
-               }
558
-               m_AsyncRetrieve->condvar.notify_one();
559
-               break;
560
-           case AMF_INPUT_FULL:
561
-               break;
562
-           default:
563
-               {
564
-                   QUICK_FORMAT_MESSAGE(errMsg,
565
-                       "<Id: %lld> Submitting Surface failed, error %ls (code %d)",
566
-                       m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
567
-                   PLOG_ERROR("%s", errMsg.data());
568
-               }
569
-               return -1;
570
+       {
571
+           // Performance Tracking
572
+           auto clk = std::chrono::high_resolution_clock::now();
573
+           uint64_t pf_ts = std::chrono::nanoseconds(clk.time_since_epoch()).count();
574
+           own->data->SetProperty(AMF_TIMESTAMP_SUBMIT, pf_ts);
575
+       }
576
+
577
+       AMF_RESULT res = m_AMFEncoder->SubmitInput(own->data);
578
+       if (m_Debug) {
579
+           QUICK_FORMAT_MESSAGE(errMsg,
580
+               "<Id: %lld> [Main/Submit] SubmitInput returned %ls (code %d).",
581
+               m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
582
+           PLOG_WARNING("%s", errMsg.c_str());
583
+       }
584
+
585
+       if (res == AMF_OK) {
586
+           own->data = nullptr;
587
+           m_SubmittedFrameCount++;
588
+       } else if (res == AMF_INPUT_FULL) {
589
+           if (m_InitialFramesSent == false) {
590
+               QUICK_FORMAT_MESSAGE(errMsg,
591
+                   "<Id: %lld> Queue Size is too large, starting to query for packets...",
592
+                   m_UniqueId);
593
+               PLOG_ERROR("%s", errMsg.data());
594
+               m_InitialFramesSent = true;
595
+           }
596
+       } else {
597
+           QUICK_FORMAT_MESSAGE(errMsg,
598
+               "<Id: %lld> Submitting Surface failed, error %ls (code %d)",
599
+               m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
600
+           PLOG_ERROR("%s", errMsg.data());
601
+           return -1;
602
        }
603
 
604
        std::this_thread::sleep_for(m_SubmitQueryWaitTimer);
605
@@ -1023,51 +1108,53 @@
606
 
607
    std::unique_lock<std::mutex> lock(own->mutex);
608
    while (!own->shutdown) {
609
-       if (own->wakeupcount == 0) {
610
-           own->condvar.wait(lock, [&own] {
611
-               return own->shutdown || (own->wakeupcount > 0);
612
-           });
613
+       own->condvar.wait(lock, [&own] {
614
+           return own->shutdown || (own->wakeupcount > 0);
615
+       });
616
+
617
+       if (own->wakeupcount == 0)
618
+           continue;
619
 
620
-           if (own->wakeupcount == 0)
621
-               continue;
622
+       if (own->data != nullptr)
623
+           continue;
624
+
625
+       amf::AMFDataPtr packet;
626
+       AMF_RESULT res = m_AMFEncoder->QueryOutput(&packet);
627
+       if (m_Debug) {
628
+           QUICK_FORMAT_MESSAGE(errMsg,
629
+               "<Id: %lld> [Main/Query] QueryOutput returned %ls (code %d).",
630
+               m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
631
+           PLOG_WARNING("%s", errMsg.c_str());
632
        }
633
 
634
-       if (own->queue.size() < m_AsyncQueueSize) {
635
-           amf::AMFDataPtr packet;
636
-           AMF_RESULT res = m_AMFEncoder->QueryOutput(&packet);
637
-           switch (res) {
638
-               case AMF_NEED_MORE_INPUT:
639
-               case AMF_REPEAT:
640
-                   {
641
-                       std::unique_lock<std::mutex> slock(m_AsyncSend->mutex);
642
-                       if (!m_AsyncSend->queue.empty())
643
-                           m_AsyncSend->condvar.notify_one();
644
-                   }
645
-                   break;
646
-               case AMF_OK:
647
-                   own->queue.push(packet);
648
-                   own->wakeupcount--;
649
+       if (res == AMF_OK) {
650
+           own->data = packet;
651
+           own->wakeupcount--;
652
 
653
-                   // Performance Tracking
654
-                   {
655
-                       auto clk = std::chrono::high_resolution_clock::now();
656
-                       uint64_t pf_query = std::chrono::nanoseconds(clk.time_since_epoch()).count(),
657
-                           pf_submit, pf_main;
658
-                       packet->GetProperty(AMF_TIMESTAMP_SUBMIT, &pf_submit);
659
-                       packet->SetProperty(AMF_TIMESTAMP_QUERY, pf_query);
660
-                       pf_main = (pf_query - pf_submit);
661
-                       packet->SetProperty(AMF_TIME_MAIN, pf_main);
662
-                   }
663
-                   break;
664
-               default:
665
-                   {
666
-                       QUICK_FORMAT_MESSAGE(errMsg,
667
-                           "<Id: %lld> Retrieving Packet failed, error %ls (code %d)",
668
-                           m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
669
-                       PLOG_ERROR("%s", errMsg.data());
670
-                   }
671
-                   return -1;
672
+           // Performance Tracking
673
+           {
674
+               auto clk = std::chrono::high_resolution_clock::now();
675
+               uint64_t pf_query = std::chrono::nanoseconds(clk.time_since_epoch()).count(),
676
+                   pf_submit, pf_main;
677
+               packet->GetProperty(AMF_TIMESTAMP_SUBMIT, &pf_submit);
678
+               packet->SetProperty(AMF_TIMESTAMP_QUERY, pf_query);
679
+               pf_main = (pf_query - pf_submit);
680
+               packet->SetProperty(AMF_TIME_MAIN, pf_main);
681
+           }
682
+       } else if (res == AMF_REPEAT) {
683
+           m_AsyncRetrieve->condvar.notify_all();
684
+       } else if (res == AMF_NEED_MORE_INPUT) {
685
+           {
686
+               std::unique_lock<std::mutex> slock(m_AsyncSend->mutex);
687
+               if (m_AsyncSend->data != nullptr)
688
+                   m_AsyncSend->condvar.notify_all();
689
            }
690
+       } else {
691
+           QUICK_FORMAT_MESSAGE(errMsg,
692
+               "<Id: %lld> Retrieving Packet failed, error %ls (code %d)",
693
+               m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
694
+           PLOG_ERROR("%s", errMsg.data());
695
+           return -1;
696
        }
697
 
698
        std::this_thread::sleep_for(m_SubmitQueryWaitTimer);
699
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/amf.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/amf.cpp Changed
55
 
1
@@ -194,8 +194,10 @@
2
    }
3
 
4
    /// Register Trace Writer and disable Debug Tracing.
5
+   #ifdef _WIN64
6
    m_TraceWriter = new CustomWriter();
7
    m_AMFTrace->RegisterWriter(L"OBSWriter", m_TraceWriter, true);
8
+   #endif
9
    this->EnableDebugTrace(false);
10
 
11
    // Log success
12
@@ -261,18 +263,37 @@
13
    if (!m_AMFDebug)
14
        throw std::exception("<" __FUNCTION_NAME__ "> called without a AMFDebug object!");
15
 
16
+   #ifndef _WIN64
17
+   m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_CONSOLE, false);
18
+   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_CONSOLE, AMF_TRACE_NOLOG);
19
+   m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_FILE, false);
20
+   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_FILE, AMF_TRACE_NOLOG);
21
+   m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_DEBUG_OUTPUT, false);
22
+   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_NOLOG);
23
+   m_AMFDebug->AssertsEnable(false);
24
+   m_AMFDebug->EnablePerformanceMonitor(false);
25
+   m_AMFTrace->TraceEnableAsync(false);
26
+   m_AMFTrace->SetGlobalLevel(AMF_TRACE_NOLOG);
27
+   return;
28
+   #endif
29
+
30
+   // Console
31
    m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_CONSOLE, false);
32
-   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_CONSOLE, AMF_TRACE_ERROR);
33
+   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_CONSOLE, AMF_TRACE_NOLOG);
34
+
35
+   // File
36
+   m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_FILE, false);
37
+   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_FILE, AMF_TRACE_NOLOG);
38
+   m_AMFTrace->SetPath(L"C:\\AMFTrace.log");
39
+
40
+   // Debug Output
41
    #ifdef _DEBUG
42
    m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_DEBUG_OUTPUT, true);
43
    m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_TEST);
44
-   m_AMFTrace->SetPath(L"C:/AMFTrace.log");
45
    #else
46
    m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_DEBUG_OUTPUT, false);
47
-   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_ERROR);
48
+   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_NOLOG);
49
    #endif
50
-   m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_FILE, false);
51
-   m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_FILE, AMF_TRACE_ERROR);
52
 
53
    if (enable) {
54
        m_AMFDebug->AssertsEnable(true);
55
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/enc-h264.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/enc-h264.cpp Changed
82
 
1
@@ -211,8 +211,8 @@
2
    obs_data_set_default_int(data, P_VIDEO_ADAPTER, 0);
3
    obs_data_set_default_int(data, P_OPENCL_TRANSFER, 0);
4
    obs_data_set_default_int(data, P_OPENCL_CONVERSION, 0);
5
-   obs_data_set_default_int(data, P_ASYNCHRONOUSQUEUE, 0);
6
-   obs_data_set_default_int(data, P_ASYNCHRONOUSQUEUE_SIZE, 4);
7
+   obs_data_set_default_int(data, P_MULTITHREADING, 0);
8
+   obs_data_set_default_int(data, P_QUEUESIZE, 4);
9
    obs_data_set_default_int(data, ("last" P_VIEW), -1);
10
    obs_data_set_default_int(data, P_VIEW, static_cast<int64_t>(ViewMode::Basic));
11
    obs_data_set_default_bool(data, P_DEBUG, false);
12
@@ -503,13 +503,13 @@
13
    #pragma endregion OpenCL
14
 
15
    #pragma region Asynchronous Queue
16
-   p = obs_properties_add_list(props, P_ASYNCHRONOUSQUEUE, P_TRANSLATE(P_ASYNCHRONOUSQUEUE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
17
-   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ASYNCHRONOUSQUEUE)));
18
+   p = obs_properties_add_list(props, P_MULTITHREADING, P_TRANSLATE(P_MULTITHREADING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
19
+   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MULTITHREADING)));
20
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
21
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
22
 
23
-   p = obs_properties_add_int_slider(props, P_ASYNCHRONOUSQUEUE_SIZE, P_TRANSLATE(P_ASYNCHRONOUSQUEUE_SIZE), 1, 32, 1);
24
-   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ASYNCHRONOUSQUEUE_SIZE)));
25
+   p = obs_properties_add_int_slider(props, P_QUEUESIZE, P_TRANSLATE(P_QUEUESIZE), 1, 32, 1);
26
+   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUEUESIZE)));
27
    #pragma endregion Asynchronous Queue
28
 
29
    #pragma region View Mode
30
@@ -1059,8 +1059,8 @@
31
        std::make_pair(P_VIDEO_ADAPTER, ViewMode::Advanced),
32
        std::make_pair(P_OPENCL_TRANSFER, ViewMode::Advanced),
33
        std::make_pair(P_OPENCL_CONVERSION, ViewMode::Advanced),
34
-       std::make_pair(P_ASYNCHRONOUSQUEUE, ViewMode::Expert),
35
-       std::make_pair(P_ASYNCHRONOUSQUEUE_SIZE, ViewMode::Expert),
36
+       std::make_pair(P_MULTITHREADING, ViewMode::Expert),
37
+       std::make_pair(P_QUEUESIZE, ViewMode::Expert),
38
        std::make_pair(P_VIEW, ViewMode::Basic),
39
        std::make_pair(P_DEBUG, ViewMode::Basic),
40
    };
41
@@ -1254,8 +1254,8 @@
42
            P_VIDEO_ADAPTER,
43
            P_OPENCL_TRANSFER,
44
            P_OPENCL_CONVERSION,
45
-           P_ASYNCHRONOUSQUEUE,
46
-           P_ASYNCHRONOUSQUEUE_SIZE,
47
+           P_MULTITHREADING,
48
+           P_QUEUESIZE,
49
            P_DEBUG,
50
        };
51
        for (const char* pr : hiddenProperties) {
52
@@ -1346,10 +1346,9 @@
53
    m_VideoEncoder = std::make_unique<EncoderH264>(api, adapter,
54
        !!obs_data_get_int(data, P_OPENCL_TRANSFER), !!obs_data_get_int(data, P_OPENCL_CONVERSION),
55
        colorFormat, colorSpace, voi->range == VIDEO_RANGE_FULL,
56
-       !!obs_data_get_int(data, P_ASYNCHRONOUSQUEUE), (size_t)obs_data_get_int(data, P_ASYNCHRONOUSQUEUE_SIZE));
57
+       !!obs_data_get_int(data, P_MULTITHREADING), (size_t)obs_data_get_int(data, P_QUEUESIZE));
58
 
59
    /// Static Properties
60
-   m_VideoEncoder->SetUsage(Usage::Transcoding);
61
    m_VideoEncoder->SetQualityPreset(static_cast<QualityPreset>(obs_data_get_int(data, P_QUALITYPRESET)));
62
 
63
    /// Frame
64
@@ -1444,7 +1443,7 @@
65
    }
66
 
67
    // Dynamic Properties (Can be changed during Encoding)
68
-   //this->update(data);
69
+   this->update(data);
70
 
71
    PLOG_DEBUG("<" __FUNCTION_NAME__ "> Complete.");
72
 }
73
@@ -1633,6 +1632,8 @@
74
    }
75
    #pragma endregion OBS Enforce Streaming Service Settings
76
 
77
+   m_VideoEncoder->SetDebug(obs_data_get_bool(data, P_DEBUG));
78
+
79
    if (m_VideoEncoder->IsStarted()) {
80
        m_VideoEncoder->LogProperties();
81
        if (static_cast<ViewMode>(obs_data_get_int(data, P_VIEW)) >= ViewMode::Master)
82
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/enc-h265.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/enc-h265.cpp Changed
83
 
1
@@ -191,8 +191,8 @@
2
    obs_data_set_default_int(data, P_VIDEO_ADAPTER, 0);
3
    obs_data_set_default_int(data, P_OPENCL_TRANSFER, 0);
4
    obs_data_set_default_int(data, P_OPENCL_CONVERSION, 0);
5
-   obs_data_set_default_int(data, P_ASYNCHRONOUSQUEUE, 0);
6
-   obs_data_set_default_int(data, P_ASYNCHRONOUSQUEUE_SIZE, 4);
7
+   obs_data_set_default_int(data, P_MULTITHREADING, 0);
8
+   obs_data_set_default_int(data, P_QUEUESIZE, 4);
9
    obs_data_set_int(data, ("last" P_VIEW), -1);
10
    obs_data_set_default_int(data, ("last" P_VIEW), -1);
11
    obs_data_set_default_int(data, P_VIEW, static_cast<int64_t>(ViewMode::Basic));
12
@@ -464,13 +464,13 @@
13
    #pragma endregion OpenCL
14
 
15
    #pragma region Asynchronous Queue
16
-   p = obs_properties_add_list(props, P_ASYNCHRONOUSQUEUE, P_TRANSLATE(P_ASYNCHRONOUSQUEUE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
17
-   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ASYNCHRONOUSQUEUE)));
18
+   p = obs_properties_add_list(props, P_MULTITHREADING, P_TRANSLATE(P_MULTITHREADING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
19
+   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MULTITHREADING)));
20
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
21
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
22
 
23
-   p = obs_properties_add_int_slider(props, P_ASYNCHRONOUSQUEUE_SIZE, P_TRANSLATE(P_ASYNCHRONOUSQUEUE_SIZE), 1, 32, 1);
24
-   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ASYNCHRONOUSQUEUE_SIZE)));
25
+   p = obs_properties_add_int_slider(props, P_QUEUESIZE, P_TRANSLATE(P_QUEUESIZE), 1, 32, 1);
26
+   obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUEUESIZE)));
27
    #pragma endregion Asynchronous Queue
28
 
29
    #pragma region View Mode
30
@@ -693,8 +693,8 @@
31
        std::make_pair(P_VIDEO_ADAPTER, ViewMode::Advanced),
32
        std::make_pair(P_OPENCL_TRANSFER, ViewMode::Advanced),
33
        std::make_pair(P_OPENCL_CONVERSION, ViewMode::Advanced),
34
-       std::make_pair(P_ASYNCHRONOUSQUEUE, ViewMode::Expert),
35
-       std::make_pair(P_ASYNCHRONOUSQUEUE_SIZE, ViewMode::Expert),
36
+       std::make_pair(P_MULTITHREADING, ViewMode::Expert),
37
+       std::make_pair(P_QUEUESIZE, ViewMode::Expert),
38
        std::make_pair(P_VIEW, ViewMode::Basic),
39
        std::make_pair(P_DEBUG, ViewMode::Basic),
40
    };
41
@@ -845,8 +845,8 @@
42
            P_VIDEO_ADAPTER,
43
            P_OPENCL_TRANSFER,
44
            P_OPENCL_CONVERSION,
45
-           P_ASYNCHRONOUSQUEUE,
46
-           P_ASYNCHRONOUSQUEUE_SIZE,
47
+           P_MULTITHREADING,
48
+           P_QUEUESIZE,
49
            P_DEBUG,
50
        };
51
        for (const char* pr : hiddenProperties) {
52
@@ -926,10 +926,10 @@
53
    m_VideoEncoder = std::make_unique<EncoderH265>(api, adapter,
54
                                                   !!obs_data_get_int(data, P_OPENCL_TRANSFER), !!obs_data_get_int(data, P_OPENCL_CONVERSION),
55
                                                   colorFormat, colorSpace, voi->range == VIDEO_RANGE_FULL,
56
-                                                  !!obs_data_get_int(data, P_ASYNCHRONOUSQUEUE), (size_t)obs_data_get_int(data, P_ASYNCHRONOUSQUEUE_SIZE));
57
+                                                  !!obs_data_get_int(data, P_MULTITHREADING), (size_t)obs_data_get_int(data, P_QUEUESIZE));
58
 
59
    /// Static Properties
60
-   m_VideoEncoder->SetUsage(Usage::Transcoding);
61
+   //m_VideoEncoder->SetUsage(Usage::Transcoding);
62
    m_VideoEncoder->SetQualityPreset(static_cast<QualityPreset>(obs_data_get_int(data, P_QUALITYPRESET)));
63
 
64
    /// Frame
65
@@ -1092,7 +1092,7 @@
66
    }
67
 
68
    // Dynamic Properties (Can be changed during Encoding)
69
-   //this->update(data);
70
+   this->update(data);
71
 
72
    PLOG_DEBUG("<" __FUNCTION_NAME__ "> Complete.");
73
 }
74
@@ -1170,6 +1170,8 @@
75
        m_VideoEncoder->SetFrameSkippingPeriod(period);
76
        m_VideoEncoder->SetFrameSkippingBehaviour(!!obs_data_get_int(data, P_FRAMESKIPPING_BEHAVIOUR));
77
    }
78
+
79
+   m_VideoEncoder->SetDebug(obs_data_get_bool(data, P_DEBUG));
80
    
81
    if (m_VideoEncoder->IsStarted()) {
82
        m_VideoEncoder->LogProperties();
83
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/plugin.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/plugin.cpp Changed
93
 
1
@@ -29,12 +29,8 @@
2
 #include "amf-capabilities.h"
3
 #include <sstream>
4
 
5
-#ifdef WITH_AVC
6
 #include "enc-h264.h"
7
-#endif
8
-#ifdef WITH_HEVC
9
 #include "enc-h265.h"
10
-#endif
11
 #ifdef _WIN32
12
 #include <windows.h>
13
 #endif
14
@@ -56,6 +52,7 @@
15
 #ifdef _DEBUG
16
 #include "components/VideoEncoderVCE.h"
17
 #include "components/VideoEncoderHEVC.h"
18
+#include "components/VideoConverter.h"
19
 
20
 static std::string fastPrintVariant(const char* text, amf::AMFVariantStruct variant) {
21
    std::vector<char> buf(1024);
22
@@ -115,7 +112,7 @@
23
 static void printDebugInfo(amf::AMFComponentPtr m_AMFEncoder) {
24
    amf::AMFPropertyInfo* pInfo;
25
    size_t propCount = m_AMFEncoder->GetPropertyCount();
26
-   PLOG_INFO("-- Internal AMF Encoder Properties --");
27
+   //PLOG_INFO("-- Internal AMF Encoder Properties --");
28
    for (size_t propIndex = 0; propIndex < propCount; propIndex++) {
29
        static const char* typeToString[] = {
30
            "Empty",
31
@@ -207,12 +204,8 @@
32
    }
33
 
34
    // Register Encoders
35
-   #ifdef WITH_AVC
36
    Plugin::Interface::H264Interface::encoder_register();
37
-   #endif
38
-   #ifdef WITH_HEVC
39
    Plugin::Interface::H265Interface::encoder_register();
40
-   #endif
41
 
42
    #ifdef _DEBUG
43
    {
44
@@ -229,16 +222,18 @@
45
        m_AMFFactory->GetDebug(&m_AMFDebug);
46
        m_AMFDebug->AssertsEnable(true);
47
        m_AMFDebug->EnablePerformanceMonitor(true);
48
+       m_AMFTrace->SetGlobalLevel(AMF_TRACE_TEST);
49
+       m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_CONSOLE, AMF_TRACE_TEST);
50
+       m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_FILE, AMF_TRACE_TEST);
51
+       m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_TEST);
52
+       m_AMFTrace->SetPath(L"AMFTrace.log");
53
        m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_FILE, true);
54
        m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_DEBUG_OUTPUT, true);
55
-       m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_FILE, 99);
56
-       m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, 99);
57
-       m_AMFTrace->SetPath(L"C:\\AMFTrace.log");
58
+       m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_CONSOLE, true);
59
        m_AMFTrace->TraceEnableAsync(true);
60
-       m_AMFTrace->SetGlobalLevel(99);
61
-       for (auto enc : encoders) {
62
-           amf::AMFContextPtr m_AMFContext;
63
-           if (m_AMFFactory->CreateContext(&m_AMFContext) == AMF_OK) {
64
+       amf::AMFContextPtr m_AMFContext;
65
+       if (m_AMFFactory->CreateContext(&m_AMFContext) == AMF_OK) {
66
+           for (auto enc : encoders) {
67
                m_AMFContext->InitDX11(nullptr);
68
                amf::AMFComponentPtr m_AMFComponent;
69
                if (m_AMFFactory->CreateComponent(m_AMFContext, enc, &m_AMFComponent) == AMF_OK) {
70
@@ -246,9 +241,21 @@
71
                    printDebugInfo(m_AMFComponent);
72
                    m_AMFComponent->Terminate();
73
                }
74
-               m_AMFContext->Terminate();
75
            }
76
+           amf::AMFComponentPtr m_AMFComponent, m_AMFComponent2;
77
+           if (m_AMFFactory->CreateComponent(m_AMFContext, AMFVideoConverter, &m_AMFComponent) == AMF_OK) {
78
+               m_AMFComponent->Init(amf::AMF_SURFACE_NV12, 1280, 720);
79
+               if (m_AMFFactory->CreateComponent(m_AMFContext, AMFVideoEncoderVCE_AVC, &m_AMFComponent2) == AMF_OK) {
80
+                   PLOG_INFO("-- %s --", "Converter");
81
+                   m_AMFComponent->SetProperty(AMF_VIDEO_CONVERTER_COLOR_PROFILE, AMF_VIDEO_CONVERTER_COLOR_PROFILE_JPEG);
82
+                   printDebugInfo(m_AMFComponent);
83
+                   m_AMFComponent2->Terminate();
84
+               }
85
+               m_AMFComponent->Terminate();
86
+           }
87
+           m_AMFContext->Terminate();
88
        }
89
+
90
    }
91
    #endif
92
 
93
obs-studio-18.0.2.tar.xz/plugins/enc-amf/Source/utility.cpp -> obs-studio-19.0.2.tar.xz/plugins/enc-amf/Source/utility.cpp Changed
246
 
1
@@ -29,14 +29,10 @@
2
 #include "amf.h"
3
 #include "amf-encoder.h"
4
 #include "components/VideoConverter.h"
5
-#ifdef WITH_AVC
6
 #include "amf-encoder-h264.h"
7
 #include "components/VideoEncoderVCE.h"
8
-#endif
9
-#ifdef WITH_HEVC
10
 #include "amf-encoder-h265.h"
11
 #include "components/VideoEncoderHEVC.h"
12
-#endif
13
 
14
 #include <map>
15
 #include <sstream>
16
@@ -104,31 +100,23 @@
17
 // Codec
18
 const char* Utility::CodecToString(Plugin::AMD::Codec v) {
19
    switch (v) {
20
-       #ifdef WITH_AVC
21
        case Codec::AVC:
22
            return "H264/AVC";
23
        case Codec::SVC:
24
            return "H264/SVC";
25
-           #endif
26
-           #ifdef WITH_HEVC
27
        case Codec::HEVC:
28
            return "H265/HEVC";
29
-           #endif
30
    }
31
    throw std::runtime_error("Invalid Parameter");
32
 }
33
 const wchar_t* Utility::CodecToAMF(Plugin::AMD::Codec v) {
34
    switch (v) {
35
-       #ifdef WITH_AVC
36
        case Codec::AVC:
37
            return AMFVideoEncoderVCE_AVC;
38
        case Codec::SVC:
39
            return AMFVideoEncoderVCE_SVC;
40
-           #endif
41
-           #ifdef WITH_HEVC
42
        case Codec::HEVC:
43
            return AMFVideoEncoder_HEVC;
44
-           #endif
45
    }
46
    throw std::runtime_error("Invalid Parameter");
47
 }
48
@@ -207,7 +195,6 @@
49
    }
50
    throw std::runtime_error("Invalid Parameter");
51
 }
52
-#ifdef WITH_AVC
53
 AMF_VIDEO_ENCODER_USAGE_ENUM Utility::UsageToAMFH264(Plugin::AMD::Usage v) {
54
    switch (v) {
55
        case Usage::Transcoding:
56
@@ -234,8 +221,6 @@
57
    }
58
    throw std::runtime_error("Invalid Parameter");
59
 }
60
-#endif
61
-#ifdef WITH_HEVC
62
 AMF_VIDEO_ENCODER_HEVC_USAGE_ENUM Utility::UsageToAMFH265(Plugin::AMD::Usage v) {
63
    switch (v) {
64
        case Usage::Transcoding:
65
@@ -262,7 +247,6 @@
66
    }
67
    throw std::runtime_error("Invalid Parameter");
68
 }
69
-#endif
70
 
71
 // Quality Preset
72
 const char* Utility::QualityPresetToString(Plugin::AMD::QualityPreset v) {
73
@@ -276,7 +260,6 @@
74
    }
75
    throw std::runtime_error("Invalid Parameter");
76
 }
77
-#ifdef WITH_AVC
78
 AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM Utility::QualityPresetToAMFH264(Plugin::AMD::QualityPreset v) {
79
    switch (v) {
80
        case QualityPreset::Speed:
81
@@ -299,8 +282,6 @@
82
    }
83
    throw std::runtime_error("Invalid Parameter");
84
 }
85
-#endif
86
-#ifdef WITH_HEVC
87
 AMF_VIDEO_ENCODER_HEVC_QUALITY_PRESET_ENUM Utility::QualityPresetToAMFH265(Plugin::AMD::QualityPreset v) {
88
    switch (v) {
89
        case QualityPreset::Speed:
90
@@ -323,7 +304,6 @@
91
    }
92
    throw std::runtime_error("Invalid Parameter");
93
 }
94
-#endif
95
 
96
 // Profile
97
 const char* Utility::ProfileToString(Plugin::AMD::Profile v) {
98
@@ -341,7 +321,6 @@
99
    }
100
    throw std::runtime_error("Invalid Parameter");
101
 }
102
-#ifdef WITH_AVC
103
 AMF_VIDEO_ENCODER_PROFILE_ENUM Utility::ProfileToAMFH264(Plugin::AMD::Profile v) {
104
    switch (v) {
105
        case Profile::ConstrainedBaseline:
106
@@ -373,8 +352,6 @@
107
    }
108
    throw std::runtime_error("Invalid Parameter");
109
 }
110
-#endif
111
-#ifdef WITH_HEVC
112
 AMF_VIDEO_ENCODER_HEVC_PROFILE_ENUM Utility::ProfileToAMFH265(Plugin::AMD::Profile v) {
113
    switch (v) {
114
        case Profile::Main:
115
@@ -389,9 +366,7 @@
116
    }
117
    throw std::runtime_error("Invalid Parameter");
118
 }
119
-#endif
120
 
121
-#ifdef WITH_HEVC
122
 // Tier
123
 const char* Utility::TierToString(Plugin::AMD::H265::Tier v) {
124
    switch (v) {
125
@@ -420,7 +395,6 @@
126
    }
127
    throw std::runtime_error("Invalid Parameter");
128
 }
129
-#endif
130
 
131
 // Coding Type
132
 const char* Utility::CodingTypeToString(Plugin::AMD::CodingType v) {
133
@@ -434,7 +408,6 @@
134
    }
135
    throw std::runtime_error("Invalid Parameter");
136
 }
137
-#ifdef WITH_AVC
138
 AMF_VIDEO_ENCODER_CODING_ENUM Utility::CodingTypeToAMFH264(Plugin::AMD::CodingType v) {
139
    switch (v) {
140
        case CodingType::Automatic:
141
@@ -457,8 +430,6 @@
142
    }
143
    throw std::runtime_error("Invalid Parameter");
144
 }
145
-#endif
146
-#ifdef WITH_HEVC
147
 int64_t Utility::CodingTypeToAMFH265(Plugin::AMD::CodingType v) {
148
    switch (v) {
149
        case CodingType::Automatic:
150
@@ -477,7 +448,6 @@
151
    }
152
    throw std::runtime_error("Invalid Parameter");
153
 }
154
-#endif
155
 
156
 // Rate Control Method
157
 const char* Utility::RateControlMethodToString(Plugin::AMD::RateControlMethod v) {
158
@@ -493,7 +463,6 @@
159
    }
160
    throw std::runtime_error("Invalid Parameter");
161
 }
162
-#ifdef WITH_AVC
163
 AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM Utility::RateControlMethodToAMFH264(Plugin::AMD::RateControlMethod v) {
164
    switch (v) {
165
        case RateControlMethod::ConstantQP:
166
@@ -520,8 +489,6 @@
167
    }
168
    throw std::runtime_error("Invalid Parameter");
169
 }
170
-#endif
171
-#ifdef WITH_HEVC
172
 AMF_VIDEO_ENCODER_HEVC_RATE_CONTROL_METHOD_ENUM Utility::RateControlMethodToAMFH265(Plugin::AMD::RateControlMethod v) {
173
    switch (v) {
174
        case RateControlMethod::ConstantQP:
175
@@ -548,7 +515,6 @@
176
    }
177
    throw std::runtime_error("Invalid Parameter");
178
 }
179
-#endif
180
 
181
 // Pre-Pass Method
182
 const char* Utility::PrePassModeToString(Plugin::AMD::PrePassMode v) {
183
@@ -564,7 +530,6 @@
184
    }
185
    throw std::runtime_error("Invalid Parameter");
186
 }
187
-#ifdef WITH_AVC
188
 AMF_VIDEO_ENCODER_PREENCODE_MODE_ENUM Utility::PrePassModeToAMFH264(Plugin::AMD::PrePassMode v) {
189
    switch (v) {
190
        case PrePassMode::Disabled:
191
@@ -591,10 +556,8 @@
192
    }
193
    throw std::runtime_error("Invalid Parameter");
194
 }
195
-#endif
196
 
197
 // GOP Type
198
-#ifdef WITH_HEVC
199
 const char* Utility::GOPTypeToString(Plugin::AMD::H265::GOPType v) {
200
    switch (v) {
201
        case H265::GOPType::Fixed:
202
@@ -622,10 +585,8 @@
203
    }
204
    throw std::runtime_error("Invalid Parameter");
205
 }
206
-#endif
207
 
208
 // Slicing
209
-#ifdef WITH_AVC
210
 const char* Utility::SliceModeToString(Plugin::AMD::H264::SliceMode v) {
211
    switch (v) {
212
        case H264::SliceMode::Row:
213
@@ -635,7 +596,6 @@
214
    }
215
    throw std::runtime_error("Invalid Parameter");
216
 }
217
-#endif
218
 const char* Utility::SliceControlModeToString(Plugin::AMD::SliceControlMode v) {
219
    switch (v) {
220
        case SliceControlMode::Unknown0:
221
@@ -650,7 +610,6 @@
222
    throw std::runtime_error("Invalid Parameter");
223
 }
224
 
225
-#ifdef WITH_AVC
226
 Plugin::AMD::ProfileLevel Utility::H264ProfileLevel(
227
    std::pair<uint32_t, uint32_t> resolution,
228
    std::pair<uint32_t, uint32_t> frameRate) {
229
@@ -694,8 +653,6 @@
230
    }
231
    return ProfileLevel::L52;
232
 }
233
-#endif
234
-#ifdef WITH_HEVC
235
 Plugin::AMD::ProfileLevel Utility::H265ProfileLevel(
236
    std::pair<uint32_t, uint32_t> resolution,
237
    std::pair<uint32_t, uint32_t> frameRate) {
238
@@ -736,7 +693,6 @@
239
    }
240
    return ProfileLevel::L62;
241
 }
242
-#endif
243
 
244
 //////////////////////////////////////////////////////////////////////////
245
 // Threading Specific
246
obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/bn-BD.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+ImageInput="ছবি"
3
+File="ফাইল ছবি"
4
+
5
+SlideShow="ছবি স্লাইড শো"
6
+SlideShow.TransitionSpeed="কোনও পরিবর্তন ঘটলে স্থানীয় গতি (মিলিসেকেন্ড)"
7
+SlideShow.Transition="স্থানান্তর"
8
+SlideShow.Transition.Cut="ছেদন"
9
+
10
+ColorSource="রঙের উৎস"
11
+ColorSource.Color="রং"
12
+ColorSource.Width="প্রস্থ"
13
+ColorSource.Height="উচ্চতা"
14
+
15
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/cs-CZ.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Rychlost přechodu (milisekundy)"
3
 SlideShow.SlideTime="Čas mezi snímky (milisekundy)"
4
 SlideShow.Files="Soubory obrázků"
5
+SlideShow.CustomSize="Poměr stran"
6
+SlideShow.CustomSize.Auto="Automatický"
7
 SlideShow.Randomize="Náhodné přehrávání"
8
 SlideShow.Transition="Přechod"
9
 SlideShow.Transition.Cut="Střih"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/da-DK.ini Changed
19
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Overgangshastighed (millisekunder)"
3
 SlideShow.SlideTime="Tid mellem dias (millisekunder)"
4
 SlideShow.Files="Billedfiler"
5
+SlideShow.CustomSize="Afgrænsningsstørrelse/Formatforhold"
6
+SlideShow.CustomSize.Auto="Automatisk"
7
 SlideShow.Randomize="Tilfældig afspilning"
8
 SlideShow.Transition="Overgang"
9
 SlideShow.Transition.Cut="Klip"
10
@@ -13,4 +15,8 @@
11
 SlideShow.Transition.Swipe="Stryg"
12
 SlideShow.Transition.Slide="Glide"
13
 
14
+ColorSource="Farvekilde"
15
+ColorSource.Color="Farve"
16
+ColorSource.Width="Bredde"
17
+ColorSource.Height="Højde"
18
 
19
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/de-DE.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Geschwindigkeit des Übergangs (Millisekunden)"
3
 SlideShow.SlideTime="Zeit zwischen Bildern (Millisekunden)"
4
 SlideShow.Files="Bilddateien"
5
+SlideShow.CustomSize="Rahmen Größe/Seitenverhältnis"
6
+SlideShow.CustomSize.Auto="Automatisch"
7
 SlideShow.Randomize="Zufällige Wiedergabe"
8
 SlideShow.Transition="Übergang"
9
 SlideShow.Transition.Cut="Schnitt"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/en-US.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Transition Speed (milliseconds)"
3
 SlideShow.SlideTime="Time Between Slides (milliseconds)"
4
 SlideShow.Files="Image Files"
5
+SlideShow.CustomSize="Bounding Size/Aspect Ratio"
6
+SlideShow.CustomSize.Auto="Automatic"
7
 SlideShow.Randomize="Randomize Playback"
8
 SlideShow.Transition="Transition"
9
 SlideShow.Transition.Cut="Cut"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/es-ES.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Velocidad de la transición (milisegundos)"
3
 SlideShow.SlideTime="Tiempo entre diapositivas (milisegundos)"
4
 SlideShow.Files="Archivo de imagen"
5
+SlideShow.CustomSize="Relación de aspecto"
6
+SlideShow.CustomSize.Auto="Automático"
7
 SlideShow.Randomize="Reproducción aleatoria"
8
 SlideShow.Transition="Transición"
9
 SlideShow.Transition.Cut="Corte"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/eu-ES.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Trantsizioaren abiadura (milisegundotan)"
3
 SlideShow.SlideTime="Diapositiben arteko denbora (milisegundotan)"
4
 SlideShow.Files="Irudi fitxategiak"
5
+SlideShow.CustomSize="Markoaren tamaina/Aspektu-erlazioa"
6
+SlideShow.CustomSize.Auto="Automatikoa"
7
 SlideShow.Randomize="Ausazko erreprodukzioa"
8
 SlideShow.Transition="Trantsizioa"
9
 SlideShow.Transition.Cut="Ebaki"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/fi-FI.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Siirtymän nopeus (millisekuntia)"
3
 SlideShow.SlideTime="Kesto kuvien välissä (millisekunteina)"
4
 SlideShow.Files="Kuvatiedostot"
5
+SlideShow.CustomSize="Rajauskoko/Kuvasuhde"
6
+SlideShow.CustomSize.Auto="Automaattinen"
7
 SlideShow.Randomize="Toista satunnaisesti"
8
 SlideShow.Transition="Siirtymä"
9
 SlideShow.Transition.Cut="Leikkaa"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/fr-FR.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Vitesse de transition (millisecondes)"
3
 SlideShow.SlideTime="Temps entre chaque diapositive (millisecondes)"
4
 SlideShow.Files="Fichiers image"
5
+SlideShow.CustomSize="Taille Limite/Ratio d'aspect"
6
+SlideShow.CustomSize.Auto="Automatique"
7
 SlideShow.Randomize="Lecture aléatoire"
8
 SlideShow.Transition="Transition"
9
 SlideShow.Transition.Cut="Coupure"
10
obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/hi-IN.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+ImageInput="छवि"
3
+
4
+
5
+
6
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/hu-HU.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Áttűnési sebesség (ezredmásodperc)"
3
 SlideShow.SlideTime="Diák közti idő (ezredmásodperc)"
4
 SlideShow.Files="Képfájlok"
5
+SlideShow.CustomSize="Befoglaló méret/Képarány"
6
+SlideShow.CustomSize.Auto="Automatikus"
7
 SlideShow.Randomize="Véletlenszerű lejátszás"
8
 SlideShow.Transition="Átmenet"
9
 SlideShow.Transition.Cut="Kivágás"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/ja-JP.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="画面切替速度 (ミリ秒)"
3
 SlideShow.SlideTime="スライド時間間隔 (ミリ秒)"
4
 SlideShow.Files="画像ファイル"
5
+SlideShow.CustomSize="バウンディングサイズ/アスペクト比"
6
+SlideShow.CustomSize.Auto="自動"
7
 SlideShow.Randomize="ランダム再生"
8
 SlideShow.Transition="トランジション"
9
 SlideShow.Transition.Cut="カット"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/ko-KR.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="전환 속도 (밀리초)"
3
 SlideShow.SlideTime="슬라이드 간격 (밀리초)"
4
 SlideShow.Files="이미지 파일 형식"
5
+SlideShow.CustomSize="경계 크기/화면 비율"
6
+SlideShow.CustomSize.Auto="자동"
7
 SlideShow.Randomize="무작위 재생"
8
 SlideShow.Transition="전환 방식"
9
 SlideShow.Transition.Cut="자르기"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/nl-NL.ini Changed
19
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Overgangssnelheid (milliseconden)"
3
 SlideShow.SlideTime="Tijd Tussen Dia's (milliseconden)"
4
 SlideShow.Files="Afbeeldingsbestanden"
5
+SlideShow.CustomSize="Randgrootte/Beeldverhouding"
6
+SlideShow.CustomSize.Auto="Automatisch"
7
 SlideShow.Randomize="Willekeurige Volgorde"
8
 SlideShow.Transition="Overgang"
9
 SlideShow.Transition.Cut="Knippen"
10
@@ -13,4 +15,8 @@
11
 SlideShow.Transition.Swipe="Vegen"
12
 SlideShow.Transition.Slide="Slide"
13
 
14
+ColorSource="Kleurbron"
15
+ColorSource.Color="Kleur"
16
+ColorSource.Width="Breedte"
17
+ColorSource.Height="Hoogte"
18
 
19
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/pl-PL.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Prędkość efektu przejścia (ms)"
3
 SlideShow.SlideTime="Czas wyświetlania slajdu (ms)"
4
 SlideShow.Files="Pliki graficzne"
5
+SlideShow.CustomSize="Ograniczenie rozmiaru/Proporcje"
6
+SlideShow.CustomSize.Auto="Automatycznie"
7
 SlideShow.Randomize="Odtwarzanie losowe"
8
 SlideShow.Transition="Efekt przejścia"
9
 SlideShow.Transition.Cut="Cięcie"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/pt-BR.ini Changed
19
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Velocidade de Transição (em milissegundos)"
3
 SlideShow.SlideTime="Tempo Entre cada Slide (em milissegundos)"
4
 SlideShow.Files="Arquivos de Imagem"
5
+SlideShow.CustomSize="Tamanho Delimitador/Proporção"
6
+SlideShow.CustomSize.Auto="Automático"
7
 SlideShow.Randomize="Reprodução aleatória"
8
 SlideShow.Transition="Transição"
9
 SlideShow.Transition.Cut="Corte"
10
@@ -13,4 +15,8 @@
11
 SlideShow.Transition.Swipe="Arrastar"
12
 SlideShow.Transition.Slide="Deslizar"
13
 
14
+ColorSource="Fonte de Cor"
15
+ColorSource.Color="Cor"
16
+ColorSource.Width="Largura"
17
+ColorSource.Height="Altura"
18
 
19
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/ru-RU.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Скорость перехода (миллисекунды)"
3
 SlideShow.SlideTime="Время между слайдами (миллисекунды)"
4
 SlideShow.Files="Файлы изображений"
5
+SlideShow.CustomSize="Ограничение размера/Соотношение сторон"
6
+SlideShow.CustomSize.Auto="Автоматически"
7
 SlideShow.Randomize="Случайное воспроизведение"
8
 SlideShow.Transition="Переход"
9
 SlideShow.Transition.Cut="Обрезать"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/sv-SE.ini Changed
9
 
1
@@ -6,6 +6,7 @@
2
 SlideShow.TransitionSpeed="Övergångshastighet (millisekunder)"
3
 SlideShow.SlideTime="Tid mellan bilder (millisekunder)"
4
 SlideShow.Files="Bildfiler"
5
+SlideShow.CustomSize.Auto="Automatisk"
6
 SlideShow.Randomize="Slumpa uppspelning"
7
 SlideShow.Transition="Övergång"
8
 SlideShow.Transition.Cut="Klipp"
9
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/tr-TR.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Geçiş Hızı (milisaniye)"
3
 SlideShow.SlideTime="Slaytlar Arası Süre (milisaniye)"
4
 SlideShow.Files="Görüntü Dosyaları"
5
+SlideShow.CustomSize="Sınırlayıcı Boyut/En-Boy Oranı"
6
+SlideShow.CustomSize.Auto="Otomatik"
7
 SlideShow.Randomize="Rastgele Gösterim"
8
 SlideShow.Transition="Geçiş"
9
 SlideShow.Transition.Cut="Cut"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/uk-UA.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="Тривалість відео-переходу (мілісекунд)"
3
 SlideShow.SlideTime="Час між слайдами (мілісекунд)"
4
 SlideShow.Files="Файли зображень"
5
+SlideShow.CustomSize="Розмір рамки/пропорції"
6
+SlideShow.CustomSize.Auto="Автоматично"
7
 SlideShow.Randomize="Випадкове відтворення"
8
 SlideShow.Transition="Відео-перехід"
9
 SlideShow.Transition.Cut="Cut"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/zh-CN.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="过渡速度(毫秒)"
3
 SlideShow.SlideTime="幻灯片之间时间(毫秒)"
4
 SlideShow.Files="图像文件"
5
+SlideShow.CustomSize="边框大小/高宽比"
6
+SlideShow.CustomSize.Auto="自动"
7
 SlideShow.Randomize="随机播放"
8
 SlideShow.Transition="转换"
9
 SlideShow.Transition.Cut="剪切"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/image-source/data/locale/zh-TW.ini Changed
10
 
1
@@ -6,6 +6,8 @@
2
 SlideShow.TransitionSpeed="變更速度 (毫秒)"
3
 SlideShow.SlideTime="圖片間隔 (毫秒)"
4
 SlideShow.Files="圖片檔案"
5
+SlideShow.CustomSize="邊框大小長寬比"
6
+SlideShow.CustomSize.Auto="自動"
7
 SlideShow.Randomize="隨機播放"
8
 SlideShow.Transition="變更特效"
9
 SlideShow.Transition.Cut="直接變更"
10
obs-studio-18.0.2.tar.xz/plugins/image-source/obs-slideshow.c -> obs-studio-19.0.2.tar.xz/plugins/image-source/obs-slideshow.c Changed
125
 
1
@@ -11,6 +11,7 @@
2
 #define warn(format, ...)  do_log(LOG_WARNING, format, ##__VA_ARGS__)
3
 
4
 #define S_TR_SPEED                     "transition_speed"
5
+#define S_CUSTOM_SIZE                  "use_custom_size"
6
 #define S_SLIDE_TIME                   "slide_time"
7
 #define S_TRANSITION                   "transition"
8
 #define S_RANDOMIZE                    "randomize"
9
@@ -23,6 +24,8 @@
10
 
11
 #define T_(text) obs_module_text("SlideShow." text)
12
 #define T_TR_SPEED                     T_("TransitionSpeed")
13
+#define T_CUSTOM_SIZE                  T_("CustomSize")
14
+#define T_CUSTOM_SIZE_AUTO             T_("CustomSize.Auto")
15
 #define T_SLIDE_TIME                   T_("SlideTime")
16
 #define T_TRANSITION                   T_("Transition")
17
 #define T_RANDOMIZE                    T_("Randomize")
18
@@ -288,6 +291,48 @@
19
        obs_source_release(old_tr);
20
    free_files(&old_files.da);
21
 
22
+   /* ------------------------- */
23
+
24
+   const char *res_str = obs_data_get_string(settings, S_CUSTOM_SIZE);
25
+   bool aspect_only = false, use_auto = true;
26
+   int cx_in = 0, cy_in = 0;
27
+
28
+   if (strcmp(res_str, T_CUSTOM_SIZE_AUTO) != 0) {
29
+       int ret = sscanf(res_str, "%dx%d", &cx_in, &cy_in);
30
+       if (ret == 2) {
31
+           aspect_only = false;
32
+           use_auto = false;
33
+       } else {
34
+           ret = sscanf(res_str, "%d:%d", &cx_in, &cy_in);
35
+           if (ret == 2) {
36
+               aspect_only = true;
37
+               use_auto = false;
38
+           }
39
+       }
40
+   }
41
+
42
+   if (!use_auto) {
43
+       double cx_f = (double)cx;
44
+       double cy_f = (double)cy;
45
+
46
+       double old_aspect = cx_f / cy_f;
47
+       double new_aspect = (double)cx_in / (double)cy_in;
48
+
49
+       if (aspect_only) {
50
+           if (fabs(old_aspect - new_aspect) > EPSILON) {
51
+               if (new_aspect > old_aspect)
52
+                   cx = (uint32_t)(cy_f * new_aspect);
53
+               else
54
+                   cy = (uint32_t)(cx_f / new_aspect);
55
+           }
56
+       } else {
57
+           cx = (uint32_t)cx_in;
58
+           cy = (uint32_t)cy_in;
59
+       }
60
+   }
61
+
62
+   /* ------------------------- */
63
+
64
    ss->cx = cx;
65
    ss->cy = cy;
66
    ss->cur_item = 0;
67
@@ -460,17 +505,38 @@
68
    obs_data_set_default_string(settings, S_TRANSITION, "fade");
69
    obs_data_set_default_int(settings, S_SLIDE_TIME, 8000);
70
    obs_data_set_default_int(settings, S_TR_SPEED, 700);
71
+   obs_data_set_default_string(settings, S_CUSTOM_SIZE, T_CUSTOM_SIZE_AUTO);
72
 }
73
 
74
 static const char *file_filter =
75
    "Image files (*.bmp *.tga *.png *.jpeg *.jpg *.gif)";
76
 
77
+static const char *aspects[] = {
78
+   "16:9",
79
+   "16:10",
80
+   "4:3",
81
+   "1:1"
82
+};
83
+
84
+#define NUM_ASPECTS (sizeof(aspects) / sizeof(const char *))
85
+
86
 static obs_properties_t *ss_properties(void *data)
87
 {
88
    obs_properties_t *ppts = obs_properties_create();
89
    struct slideshow *ss = data;
90
+   struct obs_video_info ovi;
91
    struct dstr path = {0};
92
    obs_property_t *p;
93
+   int cx;
94
+   int cy;
95
+
96
+   /* ----------------- */
97
+
98
+   obs_get_video_info(&ovi);
99
+   cx = (int)ovi.base_width;
100
+   cy = (int)ovi.base_height;
101
+
102
+   /* ----------------- */
103
 
104
    p = obs_properties_add_list(ppts, S_TRANSITION, T_TRANSITION,
105
            OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
106
@@ -485,6 +551,18 @@
107
            0, 3600000, 50);
108
    obs_properties_add_bool(ppts, S_RANDOMIZE, T_RANDOMIZE);
109
 
110
+   p = obs_properties_add_list(ppts, S_CUSTOM_SIZE, T_CUSTOM_SIZE,
111
+           OBS_COMBO_TYPE_EDITABLE, OBS_COMBO_FORMAT_STRING);
112
+
113
+   obs_property_list_add_string(p, T_CUSTOM_SIZE_AUTO, T_CUSTOM_SIZE_AUTO);
114
+
115
+   for (size_t i = 0; i < NUM_ASPECTS; i++)
116
+       obs_property_list_add_string(p, aspects[i], aspects[i]);
117
+
118
+   char str[32];
119
+   snprintf(str, 32, "%dx%d", cx, cy);
120
+   obs_property_list_add_string(p, str, str);
121
+
122
    if (ss) {
123
        pthread_mutex_lock(&ss->mutex);
124
        if (ss->files.num) {
125
obs-studio-19.0.2.tar.xz/plugins/linux-alsa/data/locale/bn-BD.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+AlsaInput="অডিও ক্যাপচার ডিভাইস (ALSA)"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/linux-capture/data/locale/bn-BD.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+X11SharedMemoryScreenInput="স্ক্রিন ক্যাপচার (XSHM)"
3
+Screen="পর্দা"
4
+XServer="X সার্ভার"
5
+XCCapture="উইন্ডো ক্যাপচার (Xcomposite)"
6
+CropLeft="ফসল বাম (পিক্সেল)"
7
+CropRight="ফসল অধিকার (পিক্সেল)"
8
+CropBottom="ফসল তলায় (পিক্সেল)"
9
+ExcludeAlpha="আলফা-কম গঠন বিন্যাস (মেসা পরামর্শ) ব্যবহার করুন"
10
+
11
obs-studio-18.0.2.tar.xz/plugins/linux-capture/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/linux-capture/data/locale/et-EE.ini Changed
7
 
1
@@ -12,4 +12,5 @@
2
 SwapRedBlue="Vaheta punane ja sinine"
3
 LockX="Lukusta X server salvestamise ajal"
4
 IncludeXBorder="Kaasa X piirjoon"
5
+ExcludeAlpha="Kasuta alpha-kanalita tekstuuri formaati (Mesa lahendus)"
6
 
7
obs-studio-19.0.2.tar.xz/plugins/linux-capture/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+X11SharedMemoryScreenInput="स्क्रीन कैप्चर (XSHM)"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/linux-jack/data/locale/bn-BD.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+StartJACKServer="জ্যাক সার্ভার চালুকরন্"
3
+Channels="চ্যানেল সংখ্যা"
4
+
5
obs-studio-19.0.2.tar.xz/plugins/linux-pulseaudio/data/locale/bn-BD.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="অডিও ইনপুট ক্যাপচার (PulseAudio)"
3
+PulseOutput="অডিও ইনপুট ক্যাপচার (PulseAudio)"
4
+Device="ডিভাইস"
5
+
6
obs-studio-19.0.2.tar.xz/plugins/linux-pulseaudio/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+PulseInput="ऑडियो इनपुट पर कब्जा (पल्सऑडियो)"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/linux-v4l2/data/locale/bn-BD.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+V4L2Input="ভিডিও ক্যাপচার ডিভাইস (V4L2)"
3
+Device="ডিভাইস"
4
+Input="ইনপুট"
5
+VideoFormat="ভিডিও ফরম্যাট"
6
+VideoStandard="ভিডিও মান"
7
+DVTiming="DV টাইমিং"
8
+Resolution="রেজল্যুশন"
9
+FrameRate="ফ্রেমের হার"
10
+LeaveUnchanged="ফরাসী"
11
+UseBuffering="বাফারিং ব্যবহার করুন"
12
+
13
obs-studio-19.0.2.tar.xz/plugins/linux-v4l2/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+V4L2Input="वीडियो कैप्चर डिवाइस (V4L2)"
3
+
4
obs-studio-18.0.2.tar.xz/plugins/linux-v4l2/v4l2-input.c -> obs-studio-19.0.2.tar.xz/plugins/linux-v4l2/v4l2-input.c Changed
15
 
1
@@ -912,11 +912,8 @@
2
 static void v4l2_update_source_flags(struct v4l2_data *data,
3
        obs_data_t *settings)
4
 {
5
-   uint32_t flags = obs_source_get_flags(data->source);
6
-   flags = (obs_data_get_bool(settings, "buffering"))
7
-           ? flags & ~OBS_SOURCE_FLAG_UNBUFFERED
8
-           : flags | OBS_SOURCE_FLAG_UNBUFFERED;
9
-   obs_source_set_flags(data->source, flags);
10
+   obs_source_set_async_unbuffered(data->source,
11
+           !obs_data_get_bool(settings, "buffering"));
12
 }
13
 
14
 /**
15
obs-studio-18.0.2.tar.xz/plugins/mac-avcapture/av-capture.mm -> obs-studio-19.0.2.tar.xz/plugins/mac-avcapture/av-capture.mm Changed
16
 
1
@@ -645,13 +645,7 @@
2
 
3
 static void av_capture_enable_buffering(av_capture *capture, bool enabled)
4
 {
5
-   obs_source_t *source = capture->source;
6
-   uint32_t flags = obs_source_get_flags(source);
7
-   if (enabled)
8
-       flags &= ~OBS_SOURCE_FLAG_UNBUFFERED;
9
-   else
10
-       flags |= OBS_SOURCE_FLAG_UNBUFFERED;
11
-   obs_source_set_flags(source, flags);
12
+   obs_source_set_async_unbuffered(capture->source, !enabled);
13
 }
14
 
15
 static const char *av_capture_getname(void*)
16
obs-studio-19.0.2.tar.xz/plugins/mac-avcapture/data/locale/bn-BD.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+AVCapture="ভিডিও ক্যাপচার ডিভাইস"
3
+Device="ডিভাইস"
4
+Buffering="বাফারিং ব্যবহার করুন"
5
+VideoRange="ভিডিওর বিন্যাস"
6
+VideoRange.Partial="আংশিক"
7
+
8
obs-studio-18.0.2.tar.xz/plugins/mac-avcapture/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/mac-avcapture/data/locale/ca-ES.ini Changed
10
 
1
@@ -3,7 +3,7 @@
2
 UsePreset="Usa els valors predefinits"
3
 Preset="Valors predefinits"
4
 Buffering="Usa memòria intermèdia"
5
-FrameRate="Quadres per segon"
6
+FrameRate="Fotogrames per segon"
7
 InputFormat="Format d'entrada"
8
 ColorSpace="Espai de color"
9
 VideoRange="Gamma de vídeo"
10
obs-studio-19.0.2.tar.xz/plugins/mac-capture/data/locale/bn-BD.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+CoreAudio.InputCapture="সব্দ গ্রেপ্তার"
3
+CoreAudio.OutputCapture="অডিও আউটপুট অধিগ্রহণ"
4
+DisplayCapture="অধিগ্রহণ প্রদর্শন করুন"
5
+DisplayCapture.Display="প্রদর্শন"
6
+WindowCapture.ShowShadow="উইণ্ডো ছায়া প্রদর্শন করুন"
7
+WindowUtils.Window="জানালা"
8
+WindowUtils.ShowEmptyNames="খালি নামের সাথে Windows প্রদর্শন করা হবে"
9
+CropMode.ToWindow="উইণ্ডো"
10
+CropMode.ToWindowAndManual="জানালা ও সহায়িকা"
11
+Crop.origin.x="বাকি ফসল"
12
+Crop.origin.y="ফসল শীর্ষে"
13
+
14
obs-studio-18.0.2.tar.xz/plugins/mac-capture/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/mac-capture/data/locale/et-EE.ini Changed
13
 
1
@@ -10,8 +10,10 @@
2
 WindowUtils.Window="Aken"
3
 WindowUtils.ShowEmptyNames="Kuva nimetuid aknaid"
4
 CropMode="Kärbi"
5
-CropMode.None="Pole"
6
+CropMode.None="Määramata"
7
 CropMode.Manual="Manuaalne"
8
+CropMode.ToWindow="Aknasse"
9
+CropMode.ToWindowAndManual="Aknasse ja manuaalselt"
10
 Crop.origin.x="Kärbi vasakult"
11
 Crop.origin.y="Kärbi ülevalt"
12
 Crop.size.width="Kärbi paremalt"
13
obs-studio-19.0.2.tar.xz/plugins/mac-capture/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+CoreAudio.InputCapture="ऑडियो इनपुट पर कब्जा"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/mac-syphon/data/locale/bn-BD.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+Syphon="খেলার অধিগ্রহণ (Syphon)"
3
+Source="উৎস"
4
+Application="অ্যাপ্লিকেশন"
5
+SyphonLicense="Syphon লাইসেন্স"
6
+Crop.origin.y="ফসল শীর্ষে"
7
+Crop.size.width="তাই ফসল"
8
+Crop.size.height="ফসল তলায়"
9
+
10
obs-studio-19.0.2.tar.xz/plugins/mac-syphon/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Syphon="खेल पर कब्जा खेल (Syphon)"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/mac-vth264/data/locale/bn-BD.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+VTH264EncHW="আপেল ভিটি H264 হার্ডওয়্যার এনকোডার"
3
+VTH264EncSW="আপেল ভিটি H264 সফটওয়্যার এনকোডার"
4
+Bitrate="বিটরেট"
5
+UseMaxBitrate="সীমা সর্বাধিক বিটের হার।"
6
+Profile="প্রোফাইল"
7
+None="(একটিও না)"
8
+
9
+
10
obs-studio-18.0.2.tar.xz/plugins/mac-vth264/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/mac-vth264/data/locale/et-EE.ini Changed
10
 
1
@@ -4,6 +4,8 @@
2
 Bitrate="Bitikiirus"
3
 UseMaxBitrate="Piira bitikiirust"
4
 MaxBitrate="Maksimaalne bitikiirus"
5
+MaxBitrateWindow="Maksimaalne Bitikiiruse aken (sekundit)"
6
+KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
7
 Profile="Profiil"
8
 None="(Määramata)"
9
 DefaultEncoder="(Vaikekodeering)"
10
obs-studio-18.0.2.tar.xz/plugins/mac-vth264/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/mac-vth264/data/locale/tr-TR.ini Changed
9
 
1
@@ -4,6 +4,7 @@
2
 Bitrate="Bit hızı"
3
 UseMaxBitrate="Bit hızını sınırla"
4
 MaxBitrate="Maksimum bit hızı"
5
+MaxBitrateWindow="Maksimum bit hızı penceresi (saniye)"
6
 KeyframeIntervalSec="Anahtar Kare Aralığı (saniye, 0=otomatik)"
7
 Profile="Profil"
8
 None="(Yok)"
9
obs-studio-18.0.2.tar.xz/plugins/mac-vth264/data/locale/vi-VN.ini -> obs-studio-19.0.2.tar.xz/plugins/mac-vth264/data/locale/vi-VN.ini Changed
16
 
1
@@ -1,3 +1,13 @@
2
-None="(Ingen)"
3
+VTH264EncHW="Bộ mã hóa Apple VT H264 bằng phần cứng"
4
+VTH264EncSW="Bộ mã hóa Apple VT H264 bằng phần mềm"
5
+VTEncoder="Bộ mã hóa VideoToolbox"
6
+Bitrate="Bitrate"
7
+UseMaxBitrate="Giới hạn bitrate"
8
+MaxBitrate="Bitrate tối đa"
9
+KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
10
+Profile="Hồ sơ"
11
+None="(Không)"
12
+DefaultEncoder="(Bộ mã hóa mặc định)"
13
+UseBFrames="Sử dụng B-Frame"
14
 
15
 
16
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ar-SA.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ar-SA.ini Changed
15
 
1
@@ -14,13 +14,11 @@
2
 LocalFile="ملف محلي"
3
 Looping="تكرار حلقي"
4
 Advanced="متقدم"
5
-DiscardNone="لا شيء"
6
 ColorRange="نطاق ألوان YUV"
7
 ColorRange.Auto="تلقائي"
8
 ColorRange.Partial="جزئي"
9
 ColorRange.Full="كامل"
10
 
11
-
12
 MediaFileFilter.AllMediaFiles="كافة ملفات الوسائط"
13
 MediaFileFilter.VideoFiles="ملفات الفيديو"
14
 MediaFileFilter.AudioFiles="ملفات الصوت"
15
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/bg-BG.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/bg-BG.ini Changed
6
 
1
@@ -6,4 +6,3 @@
2
 
3
 
4
 
5
-
6
obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/bn-BD.ini Added
20
 
1
@@ -0,0 +1,18 @@
2
+FFmpegOutput="FFmpeg উত্পাদন"
3
+FFmpegAAC="পূর্ব-নির্ধারিত FFmpeg AAC এনকোডার"
4
+Preset="পূর্ব-নির্ধারিত"
5
+RateControl="হার নিয়ন্ত্রণ"
6
+
7
+BFrames="বি-ফ্রেম"
8
+
9
+NVENC.Use2Pass="দুই পাসে এনকোডিং ব্যবহার করো"
10
+NVENC.Preset.default="পূর্ব-নির্ধারিত"
11
+NVENC.Preset.ll="লো-সুপ্ত"
12
+NVENC.Preset.llhq="উচ্চ মান নিম্ন-সুপ্ত"
13
+NVENC.Preset.llhp="লো-সুপ্ত উচ্চ কার্যক্ষমতা"
14
+NVENC.Level="শ্রেনী"
15
+
16
+FFmpegSource="মিডিয়া উৎস"
17
+
18
+
19
+
20
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini Changed
29
 
1
@@ -23,27 +23,15 @@
2
 Looping="Bucle"
3
 Input="Entrada"
4
 InputFormat="Format d'entrada"
5
-ForceFormat="Força la conversió de format"
6
 HardwareDecode="Usa la descodificació per maquinari si és disponible"
7
 ClearOnMediaEnd="Amaga l'origen en acabar la reproducció"
8
 Advanced="Avançat"
9
-AudioBufferSize="Mida de la memòria intermèdia d'àudio (em fotogrames)"
10
-VideoBufferSize="Mida de la memòria intermèdia de vídeo (en fotogrames)"
11
-FrameDropping="Nivell de pèrdua de quadres"
12
-DiscardNone="Cap"
13
-DiscardDefault="Per defecte (paquets invàlids)"
14
-DiscardNonRef="Quadres de no-referència"
15
-DiscardBiDir="Quadres bidireccionals"
16
-DiscardNonIntra="Quadres no-interiors"
17
-DiscardNonKey="Quadres no-clau"
18
-DiscardAll="Tots els marcs (aneu amb compte!)"
19
 RestartWhenActivated="Reinicia la reproducció quan la font estigui activa"
20
 ColorRange="Gamma de color YUV"
21
 ColorRange.Auto="Automàtic"
22
 ColorRange.Partial="Parcial"
23
 ColorRange.Full="Màxim"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Tots els arxius multimèdia"
27
 MediaFileFilter.VideoFiles="Arxius de vídeo"
28
 MediaFileFilter.AudioFiles="Arxius d'àudio"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/cs-CZ.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Opakovat"
3
 Input="Vstup"
4
 InputFormat="Formát vstupu"
5
-ForceFormat="Nařídit převod formátu"
6
 HardwareDecode="Použít hardwarové dekódování, pokud je k dispozici"
7
 ClearOnMediaEnd="Skrýt zdroj po skončení přehrávání"
8
 Advanced="Pokročilé"
9
-AudioBufferSize="Velikost bufferu zvuku (snímky)"
10
-VideoBufferSize="Velikost bufferu videa (snímky)"
11
-FrameDropping="Úroveň ztrácení snímků"
12
-DiscardNone="Žádné"
13
-DiscardDefault="Výchozí (chybné packety)"
14
-DiscardNonRef="Snímky bez reference"
15
-DiscardBiDir="Oboustranné snímky"
16
-DiscardNonIntra="Snímky mimo rámec"
17
-DiscardNonKey="Ne-klíčové snímky"
18
-DiscardAll="Všechny snímky (Pozor!)"
19
 RestartWhenActivated="Restartovat přehrávání poté, co je zdroj aktivován"
20
+CloseFileWhenInactive="Zavřít soubor při neaktivitě"
21
+CloseFileWhenInactive.ToolTip="Uzavře soubor poté, co již není zdroj zobrazen ve vysílání či\nnahrávání. Toto umožňuje, aby byl tento soubor změněn, když není zdroj aktivní,\nale může dojít ke prodlení při znovu aktivaci zdroje."
22
 ColorRange="Rozsah barev YUV"
23
 ColorRange.Auto="Automatický"
24
 ColorRange.Partial="Částečný"
25
 ColorRange.Full="Celkový"
26
-
27
+RestartMedia="Restartovat mediální zdroj"
28
 
29
 MediaFileFilter.AllMediaFiles="Všechny mediální soubory"
30
 MediaFileFilter.VideoFiles="Video soubory"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/da-DK.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Gentagelse"
3
 Input="Input"
4
 InputFormat="Input format"
5
-ForceFormat="Gennemtving-formatkonvertering"
6
 HardwareDecode="Brug hardwareafkodning når tilgængelige"
7
 ClearOnMediaEnd="Skjul kilde når afspilning slutter"
8
 Advanced="Avanceret"
9
-AudioBufferSize="Audio bufferstørrelse (frames)"
10
-VideoBufferSize="Video bufferstørrelse (frames)"
11
-FrameDropping="Billedtabsniveau"
12
-DiscardNone="Ingen"
13
-DiscardDefault="Standard (ugyldige pakker)"
14
-DiscardNonRef="Ikke-reference billeder"
15
-DiscardBiDir="Tovejs frames"
16
-DiscardNonIntra="Non-Intra frames"
17
-DiscardNonKey="Non-Key Frames"
18
-DiscardAll="Alle frames (pas på!)"
19
 RestartWhenActivated="Genstart afspilning når kilde bliver aktiv"
20
+CloseFileWhenInactive="Luk fil når inaktiv"
21
+CloseFileWhenInactive.ToolTip="Lukker filen, når kilden ikke vises i streamen ellerr\noptagelsen.  Dette muliggør at filen kan ændres, når kilden er ikke aktiv, \nmen der kan være noget opstartsforsinkelse, når kilden genaktiveres."
22
 ColorRange="YUV-farveområde"
23
 ColorRange.Auto="Auto"
24
 ColorRange.Partial="Delvis"
25
 ColorRange.Full="Fuld"
26
-
27
+RestartMedia="Genstart Media"
28
 
29
 MediaFileFilter.AllMediaFiles="Alle mediefiler"
30
 MediaFileFilter.VideoFiles="Videofiler"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini Changed
40
 
1
@@ -8,7 +8,7 @@
2
 
3
 BFrames="B-frames"
4
 
5
-NVENC.Use2Pass="Benutze Two-Pass Encoding"
6
+NVENC.Use2Pass="Benutze Two-Pass Codierung"
7
 NVENC.Preset.default="Standard"
8
 NVENC.Preset.hq="Hohe Qualität"
9
 NVENC.Preset.hp="Hohe Leistung"
10
@@ -23,26 +23,17 @@
11
 Looping="Endlosschleife"
12
 Input="Eingabe"
13
 InputFormat="Eingabeformat"
14
-ForceFormat="Erzwinge Formatkonvertierung"
15
 HardwareDecode="Verwende Hardwaredecodierung, falls verfügbar"
16
 ClearOnMediaEnd="Quelle verbergen, wenn Wiedergabe endet"
17
 Advanced="Erweitert"
18
-AudioBufferSize="Audiopuffergröße (Frames)"
19
-VideoBufferSize="Videopuffergröße (Frames)"
20
-FrameDropping="Frame Dropping Level"
21
-DiscardNone="Keine"
22
-DiscardDefault="Standard (ungültige Pakete)"
23
-DiscardNonRef="Non-Reference Frames"
24
-DiscardBiDir="Bi-Directional Frames"
25
-DiscardNonIntra="Non-Intra Frames"
26
-DiscardNonKey="Non-Key Frames"
27
-DiscardAll="Alle Frames (Vorsicht!)"
28
 RestartWhenActivated="Wiedergabe erneut starten, wenn Quelle aktiviert wird"
29
+CloseFileWhenInactive="Datei schließen, wenn inaktiv"
30
+CloseFileWhenInactive.ToolTip="Schließt die Datei, wenn die Quelle im Stream oder der Aufnahme nicht angezeigt wird.\n Dies ermöglicht, dass die Datei geändert wird, wenn die Quelle nicht aktiv ist,\n aber es gibt wahrscheinlich etwas Starverzögerung, wenn die Quelle reaktiviert wird."
31
 ColorRange="YUV-Farbmatrix"
32
 ColorRange.Auto="Automatisch"
33
 ColorRange.Partial="Teilweise"
34
 ColorRange.Full="Voll"
35
-
36
+RestartMedia="Medium neu starten"
37
 
38
 MediaFileFilter.AllMediaFiles="Alle Mediendateien"
39
 MediaFileFilter.VideoFiles="Video-Dateien"
40
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini Changed
17
 
1
@@ -9,15 +9,9 @@
2
 Looping="Επανάληψη"
3
 Input="Είσοδος"
4
 InputFormat="Μορφή Εισόδου"
5
-ForceFormat="Εξαναγκασμός μετατροπής μορφής"
6
 HardwareDecode="Χρήση αποκωδικοποίησης υλικού όταν είναι διαθέσιμη"
7
 ClearOnMediaEnd="Απόκρυψη πηγής όταν τελειώνει η αναπαραγωγή"
8
 Advanced="Σύνθετες επιλογές"
9
-FrameDropping="Επίπεδο Ρίψης Καρέ"
10
-DiscardNone="Κανένα"
11
-DiscardDefault="Προεπιλογή (άκυρα πακέτα)"
12
-DiscardAll="Όλα τα καρέ (Προσοχή!)"
13
-
14
 
15
 
16
 
17
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini Changed
10
 
1
@@ -33,7 +33,7 @@
2
 ColorRange.Auto="Auto"
3
 ColorRange.Partial="Partial"
4
 ColorRange.Full="Full"
5
-
6
+RestartMedia="Restart Media"
7
 
8
 MediaFileFilter.AllMediaFiles="All Media Files"
9
 MediaFileFilter.VideoFiles="Video Files"
10
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/es-ES.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Bucle"
3
 Input="Entrada"
4
 InputFormat="Formato de entrada"
5
-ForceFormat="Forzar la conversión de formato"
6
 HardwareDecode="Utilizar la decodificación por hardware cuando esté disponible"
7
 ClearOnMediaEnd="Ocultar la fuente cuando finaliza la reproducción"
8
 Advanced="Avanzado"
9
-AudioBufferSize="Tamaño del buffer de audio (cuadros)"
10
-VideoBufferSize="Tamaño del buffer de vídeo (cuadros)"
11
-FrameDropping="Nivel de omisión de cuadros"
12
-DiscardNone="Ninguno"
13
-DiscardDefault="Por defecto (paquetes no válidos)"
14
-DiscardNonRef="Fotogramas referenciar"
15
-DiscardBiDir="Fotogramas bidireccionales"
16
-DiscardNonIntra="Fotogramas no intra-frame"
17
-DiscardNonKey="Fotogramas no claves"
18
-DiscardAll="Todos los fotogramas (¡Cuidado!)"
19
 RestartWhenActivated="Reiniciar la reproducción cuando la fuente esté activa"
20
+CloseFileWhenInactive="Cerrar archivo cuando esté inactivo"
21
+CloseFileWhenInactive.ToolTip="Cierra el archivo cuando la fuente no esta siendo mostrada en el directo o en la grabación.\nEsto permite que el archivo pueda ser cambiado cuando la fuente no esta activa,\npero puede haber una espera en el inicio cuando se reactive la fuente."
22
 ColorRange="Gama de Color YUV"
23
 ColorRange.Auto="Automatico"
24
 ColorRange.Partial="Parcial"
25
 ColorRange.Full="Completo"
26
-
27
+RestartMedia="Reiniciar Medio"
28
 
29
 MediaFileFilter.AllMediaFiles="Todos los archivos multimedia"
30
 MediaFileFilter.VideoFiles="Archivos de vídeo"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/et-EE.ini Changed
29
 
1
@@ -1,7 +1,12 @@
2
 FFmpegOutput="FFmpeg väljund"
3
+FFmpegAAC="FFmpeg vaike AAC kodeerija"
4
 Bitrate="Bitikiirus"
5
+Preset="Eelseadistus"
6
+KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
7
+Lossless="Kadudeta"
8
 
9
 
10
+NVENC.Use2Pass="Kasuta Two-Pass kodeeringut"
11
 NVENC.Preset.default="Vaikimisi"
12
 NVENC.Preset.hq="Kõrge kvaliteet"
13
 NVENC.Preset.hp="Suur jõudlus"
14
@@ -17,13 +22,12 @@
15
 Input="Sisend"
16
 InputFormat="Sisestus formaat"
17
 ClearOnMediaEnd="Peida allikas kui taasesitus lõppeb"
18
-AudioBufferSize="Audio puhvri suurus (kaadrit)"
19
+RestartWhenActivated="Taaskäivita taasesitus, kui allikas muutub aktiivseks"
20
 ColorRange="YUV värviruumi vahemik"
21
 ColorRange.Auto="Automaatne"
22
 ColorRange.Partial="Osaline"
23
 ColorRange.Full="Täielik"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Kõik meediumifailid"
27
 MediaFileFilter.VideoFiles="Videofailid"
28
 MediaFileFilter.AudioFiles="Helifailid"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/eu-ES.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Begizta"
3
 Input="Sarrera"
4
 InputFormat="Sarrera formatua"
5
-ForceFormat="Behartu formatu-bihurketa"
6
 HardwareDecode="Erabili hardware deskodeketa eskuragarri dagoenean"
7
 ClearOnMediaEnd="Ezkutatu iturburua erreprodukzioa amaitzean"
8
 Advanced="Aurreratua"
9
-AudioBufferSize="Audio-bufferraren tamaina (fotogramak)"
10
-VideoBufferSize="Bideo-bufferraren tamaina (fotogramak)"
11
-FrameDropping="Fotogramen erorketa maila"
12
-DiscardNone="Ezer ez"
13
-DiscardDefault="Lehenetsia (pakete baliogabeak)"
14
-DiscardNonRef="Erreferentziarik gabeko fotogramak"
15
-DiscardBiDir="Norabide biko fotogramak"
16
-DiscardNonIntra="Non-Intra fotogramak"
17
-DiscardNonKey="Gakoa ez diren fotogramak"
18
-DiscardAll="Fotograma guztiak (kontuz!)"
19
 RestartWhenActivated="Berrabiarazi erreprodukzioa iturburua aktiboa dagoenean"
20
+CloseFileWhenInactive="Itxi fitxategia inaktibo dagoenean"
21
+CloseFileWhenInactive.ToolTip="Itxi fitxategia iturburua ez bada bistaratzen transmisioan edo\ngrabazioan. Honi esker fitxategia alda daiteke iturburua aktiboa ez badago,\nbaina atzerapen bat sor daiteke iturburua biraktibatzean."
22
 ColorRange="YUV kolore-barrutia"
23
 ColorRange.Auto="Auto"
24
 ColorRange.Partial="Partziala"
25
 ColorRange.Full="Osoa"
26
-
27
+RestartMedia="Berrabiarazi euskarria"
28
 
29
 MediaFileFilter.AllMediaFiles="Multimedia-fitxategi guztiak"
30
 MediaFileFilter.VideoFiles="Bideo-fitxategiak"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Toista jatkuvasti"
3
 Input="Sisääntulo"
4
 InputFormat="Sisääntulon muoto"
5
-ForceFormat="Pakota muodon muuntaminen"
6
 HardwareDecode="Käytä laitteistotason purkua, kun mahdollista"
7
 ClearOnMediaEnd="Piilota lähde kun toisto päättyy"
8
 Advanced="Lisäasetukset"
9
-AudioBufferSize="Äänipuskurin koko (ruutua)"
10
-VideoBufferSize="Videopuskurin koko (ruutua)"
11
-FrameDropping="Frame Dropping -taso"
12
-DiscardNone="Ei mikään"
13
-DiscardDefault="Oletus (virheelliset paketit)"
14
-DiscardNonRef="Non-Reference Frames"
15
-DiscardBiDir="Bi-Directional Frames"
16
-DiscardNonIntra="Non-Intra Frames"
17
-DiscardNonKey="Non-Key Frames"
18
-DiscardAll="All Frames (Varoitus!)"
19
 RestartWhenActivated="Aloita toisto uudelleen kun lähde aktivoituu"
20
+CloseFileWhenInactive="Sulje tiedosto, kun toimeton"
21
+CloseFileWhenInactive.ToolTip="Sulkee tiedoston kun lähdettä ei näytetä lähetyksessä tai nauhoituksessa.\nTämä mahdollistaa tiedoston muuttamisen kun lähde ei ole aktiivinen,\nmutta se saattaa aiheuttaa pientä viivettä käynnistyksessä kun tiedosto aktivoituu uudelleen."
22
 ColorRange="YUV värialue"
23
 ColorRange.Auto="Automaattinen"
24
 ColorRange.Partial="Osittainen"
25
 ColorRange.Full="Täysi"
26
-
27
+RestartMedia="Uudelleenkäynnistä media"
28
 
29
 MediaFileFilter.AllMediaFiles="Kaikki mediatiedostot"
30
 MediaFileFilter.VideoFiles="Videotiedostot"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="En boucle"
3
 Input="Entrée"
4
 InputFormat="Format d'entrée"
5
-ForceFormat="Forcer la conversion du format"
6
 HardwareDecode="Utiliser le décodage matériel si possible"
7
 ClearOnMediaEnd="Cacher la source lorsque la lecture est finie"
8
 Advanced="Options avancées"
9
-AudioBufferSize="Taille du tampon audio (en images)"
10
-VideoBufferSize="Taille du tampon vidéo (en images)"
11
-FrameDropping="Niveau de perte d'images"
12
-DiscardNone="Aucune"
13
-DiscardDefault="Par défaut (paquets invalides)"
14
-DiscardNonRef="Images non-références"
15
-DiscardBiDir="Images bidirectionnelles"
16
-DiscardNonIntra="Images non-intra"
17
-DiscardNonKey="Images non-clés"
18
-DiscardAll="Toutes les images (Attention !)"
19
 RestartWhenActivated="Reprendre la lecture quand la source est active"
20
+CloseFileWhenInactive="Fermer fichier lorsqu’il est inactif"
21
+CloseFileWhenInactive.ToolTip="Ferme le fichier lorsque la source ne s'affiche pas sur le flux ou \nl'enregistrement. Cela permet de modifier le fichier lorsque la source n'est pas active, \nmais il peut y avoir un délai de démarrage lorsque la source se réactive."
22
 ColorRange="Gamme de couleurs YUV"
23
 ColorRange.Auto="Auto"
24
 ColorRange.Partial="Partielle"
25
 ColorRange.Full="Complète"
26
-
27
+RestartMedia="Redémarrez Media"
28
 
29
 MediaFileFilter.AllMediaFiles="Tous les fichiers multimédias"
30
 MediaFileFilter.VideoFiles="Fichiers vidéo"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/gl-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/gl-ES.ini Changed
21
 
1
@@ -10,19 +10,9 @@
2
 Looping="Bucle"
3
 Input="Entrada"
4
 InputFormat="Formato de entrada"
5
-ForceFormat="Forzar a conversión do formato"
6
 HardwareDecode="Utilizar a descodificación por hárdware cando estiver dispoñible"
7
 ClearOnMediaEnd="Agochar a fonte cando a reprodución remata"
8
 Advanced="Avanzado"
9
-AudioBufferSize="Tamaño do búfer de audio (marcos)"
10
-VideoBufferSize="Tamaño do búfer de vídeo (marcos)"
11
-FrameDropping="Nivel de omisión de marcos"
12
-DiscardNone="Ningún"
13
-DiscardDefault="Predefinido (paquetes non válidos)"
14
-DiscardNonRef="Marcos sen referencias"
15
-DiscardBiDir="Marcos bidireccionais"
16
-DiscardAll="Todos os marcos (con tino!)"
17
-
18
 
19
 
20
 
21
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/he-IL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/he-IL.ini Changed
29
 
1
@@ -22,27 +22,15 @@
2
 Looping="לולאה"
3
 Input="קלט"
4
 InputFormat="תבנית קלט"
5
-ForceFormat="כפה המרת תבנית"
6
 HardwareDecode="השתמש בפענוח חומרה כאשר היא זמין"
7
 ClearOnMediaEnd="הסתר את מקור כאשר ההשמעה מסתיימת"
8
 Advanced="מתקדם"
9
-AudioBufferSize="גודל מאגר שמע (פריימים)"
10
-VideoBufferSize="גודל מאגר הווידאו (פריימים)"
11
-FrameDropping="רמת נשירת פריימים"
12
-DiscardNone="ללא"
13
-DiscardDefault="ברירת מחדל (מנות לא חוקיות)"
14
-DiscardNonRef="פריימים לא יחס"
15
-DiscardBiDir="פריימים דו-כיוונים"
16
-DiscardNonIntra="פריימים לא ביינים"
17
-DiscardNonKey="מסגרות שאינן מפתח"
18
-DiscardAll="כל הפריימים (זהירות!)"
19
 RestartWhenActivated="הפעל מחדש השמעה כאשר מקור הופך לפעיל"
20
 ColorRange="טווח צבעים YUV"
21
 ColorRange.Auto="אוטומטי"
22
 ColorRange.Partial="חלקי"
23
 ColorRange.Full="מלא"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="כל קבצי המדיה"
27
 MediaFileFilter.VideoFiles="קבצי וידאו"
28
 MediaFileFilter.AudioFiles="קבצי אודיו"
29
obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/hi-IN.ini Added
9
 
1
@@ -0,0 +1,7 @@
2
+FFmpegOutput="FFmpeg आउटपुट"
3
+
4
+
5
+
6
+
7
+
8
+
9
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/hr-HR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/hr-HR.ini Changed
29
 
1
@@ -22,27 +22,15 @@
2
 Looping="Ponavljanje"
3
 Input="Ulaz"
4
 InputFormat="Format ulaza"
5
-ForceFormat="Prisilno pretvaranje formata"
6
 HardwareDecode="Koristi hardversko enkodiranje kada je dostupno"
7
 ClearOnMediaEnd="Sakrij izvor kada se reprodukcija završi"
8
 Advanced="Napredno"
9
-AudioBufferSize="Veličina zvučnog bafera (u frejmovima)"
10
-VideoBufferSize="Veličina video bafera (u frejmovima)"
11
-FrameDropping="Nivo ispuštanja frejmova"
12
-DiscardNone="Nijedan"
13
-DiscardDefault="Podrazumevano (neispravni paketi)"
14
-DiscardNonRef="Frejmovi bez reference"
15
-DiscardBiDir="Dvosmerni frejmovi"
16
-DiscardNonIntra="Ne-intra frejmovi"
17
-DiscardNonKey="Frejmovi koji nisu ključni"
18
-DiscardAll="Svi frejmovi (oprezno!)"
19
 RestartWhenActivated="Ponovi reprodukciju kada izvor postane aktivan"
20
 ColorRange="YUV opseg boja"
21
 ColorRange.Auto="Automatski"
22
 ColorRange.Partial="Delimični"
23
 ColorRange.Full="Potpuni"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Sve medija datoteke"
27
 MediaFileFilter.VideoFiles="Video datoteke"
28
 MediaFileFilter.AudioFiles="Zvučne datoteke"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Ismétlés"
3
 Input="Bemenet"
4
 InputFormat="Bemeneti formátum"
5
-ForceFormat="Formátum átváltás kényszerítése"
6
 HardwareDecode="Hardveres dekódolás használata, ha rendelkezésre áll"
7
 ClearOnMediaEnd="Forrás elrejtése a lejátszás végeztével"
8
 Advanced="Haladó"
9
-AudioBufferSize="Audio pufferméret (képkockák)"
10
-VideoBufferSize="Video pufferméret (képkockák)"
11
-FrameDropping="Képkocka ejtésszint"
12
-DiscardNone="Semmi"
13
-DiscardDefault="Alapértelmezett (érvénytelen csomagok)"
14
-DiscardNonRef="Nem referencia kockák"
15
-DiscardBiDir="Kétirányú kockák"
16
-DiscardNonIntra="Nem belső kockák"
17
-DiscardNonKey="Nem kulcskockák"
18
-DiscardAll="Összes kocka (óvatosan!)"
19
 RestartWhenActivated="Lejátszás újraindítása, ha a forrás aktivizálódik"
20
+CloseFileWhenInactive="Fájl bezárása ha tétlen"
21
+CloseFileWhenInactive.ToolTip="Bezárja a fájlt, ha a forrás nem aktív streamen vagy\nfelvételen.  Ez lehetővé teszi, hogy a fájlt meg kell változtatni, ha a forrás nem aktív, a \nviszont felléphet némi indítási késés, ha a forrás reaktiválódik."
22
 ColorRange="YUV színtartomány"
23
 ColorRange.Auto="Auto"
24
 ColorRange.Partial="Részleges"
25
 ColorRange.Full="Teljes"
26
-
27
+RestartMedia="Media újraindítása"
28
 
29
 MediaFileFilter.AllMediaFiles="Minden médiafájl"
30
 MediaFileFilter.VideoFiles="Videofájlok"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/it-IT.ini Changed
29
 
1
@@ -23,27 +23,15 @@
2
 Looping="Ripeti"
3
 Input="Input"
4
 InputFormat="Formato di input"
5
-ForceFormat="Forza conversione di formato"
6
 HardwareDecode="Utilizza la decodifica hardware quando disponibile"
7
 ClearOnMediaEnd="Nascondi la fonte quando termina la riproduzione"
8
 Advanced="Avanzate"
9
-AudioBufferSize="Dimensione del Buffer audio (fotogrammi)"
10
-VideoBufferSize="Dimensioni del Buffer video (fotogrammi)"
11
-FrameDropping="Frame Dropping Level"
12
-DiscardNone="Nessuno"
13
-DiscardDefault="Predefinito (pacchetti non validi)"
14
-DiscardNonRef="Frame non di riferimento"
15
-DiscardBiDir="Frame bi-direzionali"
16
-DiscardNonIntra="Frame non interposti"
17
-DiscardNonKey="Frame non di chiave"
18
-DiscardAll="Tutti i Frame (opzione per utenti più esperti)"
19
 RestartWhenActivated="Riattiva playback quando la fonte torna attiva"
20
 ColorRange="Gamma di colore YUV"
21
 ColorRange.Auto="Autom."
22
 ColorRange.Partial="Parziale"
23
 ColorRange.Full="Intero"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Tutti i file media"
27
 MediaFileFilter.VideoFiles="File video"
28
 MediaFileFilter.AudioFiles="File audio"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="繰り返し"
3
 Input="入力"
4
 InputFormat="入力フォーマット"
5
-ForceFormat="強制的にフォーマットを変換"
6
 HardwareDecode="可能な場合ハードウェアデコードを使用"
7
 ClearOnMediaEnd="再生終了時にソースを非表示にする"
8
 Advanced="高度な設定"
9
-AudioBufferSize="音声バッファーサイズ (フレーム)"
10
-VideoBufferSize="映像バッファーサイズ (フレーム)"
11
-FrameDropping="フレームドロップレベル"
12
-DiscardNone="なし"
13
-DiscardDefault="既定 (無効なパケット)"
14
-DiscardNonRef="非参照フレーム"
15
-DiscardBiDir="双方向フレーム"
16
-DiscardNonIntra="非イントラフレーム"
17
-DiscardNonKey="非キーフレーム"
18
-DiscardAll="すべてのフレーム (注意!)"
19
 RestartWhenActivated="ソースがアクティブになったときに再生を再開する"
20
+CloseFileWhenInactive="アクティブでないときにファイルを閉じる"
21
+CloseFileWhenInactive.ToolTip="ソースが配信/録画に表示されていない時にファイルを閉じます。\nこれによりソースがアクティブでない時にファイルを変更することができますが、\nソースが再度アクティブになる際に開始の遅延が発生することがあります。"
22
 ColorRange="YUV 色範囲"
23
 ColorRange.Auto="自動"
24
 ColorRange.Partial="一部"
25
 ColorRange.Full="全部"
26
-
27
+RestartMedia="メディアを再開する"
28
 
29
 MediaFileFilter.AllMediaFiles="すべてのメディアファイル"
30
 MediaFileFilter.VideoFiles="ビデオファイル"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="반복"
3
 Input="입력"
4
 InputFormat="입력 형식"
5
-ForceFormat="강제 형식 전환"
6
 HardwareDecode="가능한 경우 하드웨어 디코딩 사용"
7
 ClearOnMediaEnd="재생이 끝나면 소스를 숨기기"
8
 Advanced="고급"
9
-AudioBufferSize="오디오 버퍼 크기 (프레임)"
10
-VideoBufferSize="비디오 버퍼 크기 (프레임)"
11
-FrameDropping="프레임 손실 수준"
12
-DiscardNone="없음"
13
-DiscardDefault="기본 (유효하지 않은 패킷)"
14
-DiscardNonRef="비 참조 프레임"
15
-DiscardBiDir="양방향 프레임"
16
-DiscardNonIntra="비 내부 프레임"
17
-DiscardNonKey="비 키 프레임"
18
-DiscardAll="모든 프레임 (주의!)"
19
 RestartWhenActivated="소스가 활성화될 때 재생을 다시 시작"
20
+CloseFileWhenInactive="비활성화 상태일 때 파일 닫기"
21
+CloseFileWhenInactive.ToolTip="소스가 방송이나 \n녹화에 표시가 되지 않으면 파일을 닫습니다. 이 설정을 사용하면 소스가 활성화되어 있지 않을 때, 파일을 수정할 수 있습니다.\n하지만 다시 활성화를 시작할 때 약간의 지연이 일어날 수 있습니다."
22
 ColorRange="YUV 색상 범위"
23
 ColorRange.Auto="자동"
24
 ColorRange.Partial="부분"
25
 ColorRange.Full="전체"
26
-
27
+RestartMedia="미디어 다시재생"
28
 
29
 MediaFileFilter.AllMediaFiles="모든 미디어 파일"
30
 MediaFileFilter.VideoFiles="비디오 파일"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/nb-NO.ini Changed
29
 
1
@@ -22,27 +22,15 @@
2
 Looping="Repeter"
3
 Input="Inngang"
4
 InputFormat="Inngangsformat"
5
-ForceFormat="Tving formatkonvertering"
6
 HardwareDecode="Bruk maskinvaredekoding når tilgjengelig"
7
 ClearOnMediaEnd="Skjul kilde når avspilling ender"
8
 Advanced="Avansert"
9
-AudioBufferSize="Lydbufferstørrelsen (i bilder)"
10
-VideoBufferSize="Videobufferstørrelsen (i bilder)"
11
-FrameDropping="Bildeforkastingsnivå"
12
-DiscardNone="Ingen"
13
-DiscardDefault="Standard (ugyldige pakker)"
14
-DiscardNonRef="Ikkereferansebilder"
15
-DiscardBiDir="Toveisbilder"
16
-DiscardNonIntra="Non-intra bilder"
17
-DiscardNonKey="Ikkenøkkelbilder"
18
-DiscardAll="Alle bilder (forsiktig!)"
19
 RestartWhenActivated="Start avspilling omigjen når kilde blir aktiv"
20
 ColorRange="YUV fargerom"
21
 ColorRange.Auto="Automatisk"
22
 ColorRange.Partial="Delvis"
23
 ColorRange.Full="Hel"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Alle mediefiler"
27
 MediaFileFilter.VideoFiles="Videofiler"
28
 MediaFileFilter.AudioFiles="Lydfiler"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Herhalen"
3
 Input="Invoer"
4
 InputFormat="Invoerformaat"
5
-ForceFormat="Forceer formaatconversie"
6
 HardwareDecode="Gebruik hardware-decoding wanneer mogelijk"
7
 ClearOnMediaEnd="Verberg de bron na het afspelen"
8
 Advanced="Geavanceerd"
9
-AudioBufferSize="Audio Buffergrootte (frames)"
10
-VideoBufferSize="Video Buffergrootte (frames)"
11
-FrameDropping="Frame-Dropping Niveau"
12
-DiscardNone="Geen"
13
-DiscardDefault="Standaard (Ongeldige Pakketten)"
14
-DiscardNonRef="Niet-Reference Frames"
15
-DiscardBiDir="Bi-Directionele Frames"
16
-DiscardNonIntra="Niet-Intra Frames"
17
-DiscardNonKey="Niet-Key Frames"
18
-DiscardAll="Alle Frames (Voorzichtig!)"
19
 RestartWhenActivated="Opnieuw starten met afspelen zodra de bron actief wordt"
20
+CloseFileWhenInactive="Sluit bestand wanneer niet actief"
21
+CloseFileWhenInactive.ToolTip="Het bestand wordt afgesloten wanneer de bron niet wordt weergegeven op de stream of\nopname. Hierdoor kan het bestand worden gewijzigd wanneer de bron niet actief is, \ner kan echter enige opstartvertraging zijn wanneer de bron opnieuw geactiveerd wordt."
22
 ColorRange="YUV Kleurbereik"
23
 ColorRange.Auto="Automatisch"
24
 ColorRange.Partial="Gedeeltelijk"
25
 ColorRange.Full="Volledig"
26
-
27
+RestartMedia="Media herstarten"
28
 
29
 MediaFileFilter.AllMediaFiles="Alle mediabestanden"
30
 MediaFileFilter.VideoFiles="Videobestanden"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Pętla"
3
 Input="Wejście"
4
 InputFormat="Format wejściowy"
5
-ForceFormat="Wymuś konwersję formatu"
6
 HardwareDecode="Użyj sprzętowego dekodowania gdy to możliwe"
7
 ClearOnMediaEnd="Ukryj źródło po zakończeniu odtwarzania"
8
 Advanced="Zaawansowane"
9
-AudioBufferSize="Bufor audio (w klatkach)"
10
-VideoBufferSize="Bufor video (w klatkach)"
11
-FrameDropping="Poziom gubienia klatek"
12
-DiscardNone="Bez gubienia"
13
-DiscardDefault="Domyślny (Nieprawidłowe pakiety)"
14
-DiscardNonRef="Klatki niereferencyjne"
15
-DiscardBiDir="Klatki dwukierunkowe (bi-directional)"
16
-DiscardNonIntra="Klatki niewewnętrzne (non-intra)"
17
-DiscardNonKey="Klatki niekluczowe (non-key)"
18
-DiscardAll="Wszystkie klatki (Ostrożnie!)"
19
 RestartWhenActivated="Zrestartuj odtwarzanie, gdy źródła będą aktywne"
20
+CloseFileWhenInactive="Zamknij plik, gdy niekatywne"
21
+CloseFileWhenInactive.ToolTip="Plik jest zamykany, gdy źródło nie jest wyświetlane.\nPozwala to na zmianę pliku, gdy źródło nie jest aktywne\nmoże jednak opóźniać włączenie źródła w momencie jego aktywacji."
22
 ColorRange="Zakres kolorów YUV"
23
 ColorRange.Auto="Automatycznie"
24
 ColorRange.Partial="Częściowy"
25
 ColorRange.Full="Pełny"
26
-
27
+RestartMedia="Zrestartuj plik audio-wideo"
28
 
29
 MediaFileFilter.AllMediaFiles="Wszystkie pliki multimedialne"
30
 MediaFileFilter.VideoFiles="Pliki video"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Loop"
3
 Input="Entrada"
4
 InputFormat="Formato de entrada"
5
-ForceFormat="Forçar conversão de formato"
6
 HardwareDecode="Utilizar descodificação de hardware quando disponível"
7
 ClearOnMediaEnd="Ocultar fonte quando a reprodução terminar"
8
 Advanced="Avançado"
9
-AudioBufferSize="Tamanho do buffer de áudio (frames)"
10
-VideoBufferSize="Tamanho de Buffer do vídeo (frames)"
11
-FrameDropping="Nível de frame drop"
12
-DiscardNone="Nenhum"
13
-DiscardDefault="Padrão (pacotes inválidos)"
14
-DiscardNonRef="Sem frames de referencia"
15
-DiscardBiDir="Frames Bi-direcionais"
16
-DiscardNonIntra="Sem intra-frames"
17
-DiscardNonKey="Sem keyframes"
18
-DiscardAll="Todos os frames(cuidado!)"
19
 RestartWhenActivated="Reiniciar reprodução quando a fonte se tornar ativa"
20
+CloseFileWhenInactive="Fechar arquivo quando inativo"
21
+CloseFileWhenInactive.ToolTip="Fechar o arquivo quando a fonte não estiver sendo exibida na transmissão\n ou gravação.  Isto permite alterar o arquivo quando a fonte não está ativa,\nmas pode ter algum atraso de inicialização quando a fonte for reativada."
22
 ColorRange="Intervalo de Cores YUV"
23
 ColorRange.Auto="Auto"
24
 ColorRange.Partial="Parcial"
25
 ColorRange.Full="Completo"
26
-
27
+RestartMedia="Reiniciar Mídia"
28
 
29
 MediaFileFilter.AllMediaFiles="Todos Arquivos de Mídia"
30
 MediaFileFilter.VideoFiles="Arquivos de Vídeo"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-PT.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-PT.ini Changed
29
 
1
@@ -21,27 +21,15 @@
2
 Looping="Repetir"
3
 Input="Entrada"
4
 InputFormat="Formato de entrada"
5
-ForceFormat="Forçar conversão de formato"
6
 HardwareDecode="Utilizar descodificação de hardware quando disponível"
7
 ClearOnMediaEnd="Ocultar fonte quando a reprodução terminar"
8
 Advanced="Avançado"
9
-AudioBufferSize="Tamanho do buffer de áudio (fotogramas)"
10
-VideoBufferSize="Tamanho do buffer de vídeo (fotogramas)"
11
-FrameDropping="Nível de perda de fotogramas"
12
-DiscardNone="Nenhum"
13
-DiscardDefault="Padrão (pacotes inválidos)"
14
-DiscardNonRef="Fotogramas sem referência"
15
-DiscardBiDir="Fotogramas bidirecionais"
16
-DiscardNonIntra="Fotogramas não internos"
17
-DiscardNonKey="Fotogramas não registados"
18
-DiscardAll="Todos os fotogramas (cuidado!)"
19
 RestartWhenActivated="Reiniciar reprodução quando a fonte se torna ativo"
20
 ColorRange="Gama de cor YUV"
21
 ColorRange.Auto="Auto"
22
 ColorRange.Partial="Parcial"
23
 ColorRange.Full="Completo"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Todos os Arquivos de Media"
27
 MediaFileFilter.VideoFiles="Arquivos de Vídeo"
28
 MediaFileFilter.AudioFiles="Arquivos de Áudio"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ro-RO.ini Changed
29
 
1
@@ -13,27 +13,15 @@
2
 Looping="Buclă"
3
 Input="Intrare"
4
 InputFormat="Format de intrare"
5
-ForceFormat="Forțează conversia formatului"
6
 HardwareDecode="Folosește decodarea hardware când este disponibilă"
7
 ClearOnMediaEnd="Ascunde sursa atunci când se termină redarea"
8
 Advanced="Avansat"
9
-AudioBufferSize="Dimensiune pentru bufferul audio (cadre)"
10
-VideoBufferSize="Dimensiune pentru bufferul video (cadre)"
11
-FrameDropping="Nivel de pierdere al cadrelor"
12
-DiscardNone="Niciunul"
13
-DiscardDefault="Implicit (Pachete invalide)"
14
-DiscardNonRef="Cadre fără referință"
15
-DiscardBiDir="Cadre bidirecționale"
16
-DiscardNonIntra="Cadre non-intra"
17
-DiscardNonKey="Cadre non-cheie"
18
-DiscardAll="Toate cadrele (Atenție!)"
19
 RestartWhenActivated="Repornește redarea când sursa devine activă"
20
 ColorRange="Gamă de culori YUV"
21
 ColorRange.Auto="Auto"
22
 ColorRange.Partial="Parțială"
23
 ColorRange.Full="Completă"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Toate fișierele media"
27
 MediaFileFilter.VideoFiles="Fișiere video"
28
 MediaFileFilter.AudioFiles="Fișiere audio"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Повтор"
3
 Input="Ввод"
4
 InputFormat="Формат ввода"
5
-ForceFormat="Принудительно конвертировать формат"
6
 HardwareDecode="Использовать аппаратное декодирование при наличии"
7
 ClearOnMediaEnd="Скрывать источник, когда воспроизведение заканчивается"
8
 Advanced="Дополнительно"
9
-AudioBufferSize="Размер аудиобуфера (в кадрах)"
10
-VideoBufferSize="Размер видеобуфера (в кадрах)"
11
-FrameDropping="Уровень пропуска кадров"
12
-DiscardNone="Нет"
13
-DiscardDefault="По умолчанию (неисправные пакеты)"
14
-DiscardNonRef="Неопорные кадры"
15
-DiscardBiDir="Двунаправленные кадры"
16
-DiscardNonIntra="Невнутренние кадры"
17
-DiscardNonKey="Неключевые кадры"
18
-DiscardAll="Все кадры (осторожно!)"
19
 RestartWhenActivated="Перезапустить воспроизведение, когда источник становится активным"
20
+CloseFileWhenInactive="Закрыть файл при отсутствии активности"
21
+CloseFileWhenInactive.ToolTip="Закрывает файл, когда источник не отображается во время трансляции или записи.\nЭто позволяет изменять файл, когда источник не активен, но могут возникнуть\nзадержки запуска при повторной активации источника."
22
 ColorRange="Цветовой диапазон YUV"
23
 ColorRange.Auto="Автоматически"
24
 ColorRange.Partial="Частичный"
25
 ColorRange.Full="Полный"
26
-
27
+RestartMedia="Перезапустить медиа"
28
 
29
 MediaFileFilter.AllMediaFiles="Все медиа-файлы"
30
 MediaFileFilter.VideoFiles="Видеофайлы"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sk-SK.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sk-SK.ini Changed
10
 
1
@@ -6,8 +6,6 @@
2
 
3
 Looping="Slučka"
4
 Advanced="Rozšírené"
5
-DiscardNone="Žiadny"
6
-
7
 
8
 
9
 
10
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sl-SI.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sl-SI.ini Changed
23
 
1
@@ -9,21 +9,9 @@
2
 Looping="Ponavljaj"
3
 Input="Vhod"
4
 InputFormat="Format vnosa"
5
-ForceFormat="Prisili spremembo formata"
6
 HardwareDecode="Uporabi strojno pospeševanje, ko je na voljo"
7
 ClearOnMediaEnd="Skri vir, ko se predvajanje konča"
8
 Advanced="Napredno"
9
-AudioBufferSize="Velikost Zvočnega medpomnilnika (frames)"
10
-VideoBufferSize="Velikost video medpomnolnika (frames)"
11
-FrameDropping="Raven izpuščanja framov"
12
-DiscardNone="Nobeno"
13
-DiscardDefault="Prevzeto (Neveljavni Paketi)"
14
-DiscardNonRef="Nereferenčne Frame"
15
-DiscardBiDir="Dvosmerne Frame"
16
-DiscardNonIntra="Non-Intra Frames"
17
-DiscardNonKey="Non-Key Frames"
18
-DiscardAll="Vse Frame (Pazite!)"
19
-
20
 
21
 
22
 
23
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sr-CS.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sr-CS.ini Changed
29
 
1
@@ -22,27 +22,15 @@
2
 Looping="Ponavljanje"
3
 Input="Ulaz"
4
 InputFormat="Format ulaza"
5
-ForceFormat="Prisilno pretvaranje formata"
6
 HardwareDecode="Koristi hardversko enkodiranje kada je dostupno"
7
 ClearOnMediaEnd="Sakrij izvor kada se reprodukcija završi"
8
 Advanced="Napredno"
9
-AudioBufferSize="Veličina zvučnog bafera (u frejmovima)"
10
-VideoBufferSize="Veličina video bafera (u frejmovima)"
11
-FrameDropping="Nivo ispuštanja frejmova"
12
-DiscardNone="Nijedan"
13
-DiscardDefault="Podrazumevano (neispravni paketi)"
14
-DiscardNonRef="Frejmovi bez reference"
15
-DiscardBiDir="Dvosmerni frejmovi"
16
-DiscardNonIntra="Ne-intra frejmovi"
17
-DiscardNonKey="Frejmovi koji nisu ključni"
18
-DiscardAll="Svi frejmovi (oprezno!)"
19
 RestartWhenActivated="Ponovi reprodukciju kada izvor postane aktivan"
20
 ColorRange="YUV opseg boja"
21
 ColorRange.Auto="Automatski"
22
 ColorRange.Partial="Delimični"
23
 ColorRange.Full="Potpuni"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Sve medija datoteke"
27
 MediaFileFilter.VideoFiles="Video datoteke"
28
 MediaFileFilter.AudioFiles="Zvučne datoteke"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sr-SP.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sr-SP.ini Changed
29
 
1
@@ -22,27 +22,15 @@
2
 Looping="Понављање"
3
 Input="Улаз"
4
 InputFormat="Формат улаза"
5
-ForceFormat="Присилно претварање формата"
6
 HardwareDecode="Користи хардверско енкодирање када је доступно"
7
 ClearOnMediaEnd="Сакриј извор када се репродукција заврши"
8
 Advanced="Напредно"
9
-AudioBufferSize="Величина звучног бафера (у фрејмовима)"
10
-VideoBufferSize="Величина видео бафера (у фрејмовима)"
11
-FrameDropping="Ниво испуштања фрејмова"
12
-DiscardNone="Ниједан"
13
-DiscardDefault="Подразумевано (неисправни фрејмови)"
14
-DiscardNonRef="Фрејмови без референце"
15
-DiscardBiDir="Двосмерни фрејмови"
16
-DiscardNonIntra="Не-интра фрејмови"
17
-DiscardNonKey="Фрејмови који нису кључни"
18
-DiscardAll="Сви фрејмови (опрезно!)"
19
 RestartWhenActivated="Понови репродукцију када извор постане активан"
20
 ColorRange="YUV опсег боја"
21
 ColorRange.Auto="Аутоматски"
22
 ColorRange.Partial="Делимични"
23
 ColorRange.Full="Потпуни"
24
 
25
-
26
 MediaFileFilter.AllMediaFiles="Све медија датотеке"
27
 MediaFileFilter.VideoFiles="Видео датотеке"
28
 MediaFileFilter.AudioFiles="Звучне датотеке"
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Upprepa"
3
 Input="Infoga"
4
 InputFormat="Inmatningsformat"
5
-ForceFormat="Tvinga formatkonvertering"
6
 HardwareDecode="Använda hårdvareavkodning när tillgängligt"
7
 ClearOnMediaEnd="Dölja källa när uppspelningen slutar"
8
 Advanced="Avancerat"
9
-AudioBufferSize="Ljudbuffertstorlek (bilder)"
10
-VideoBufferSize="Videobuffertstorlek (bilder)"
11
-FrameDropping="Bild droppnivå"
12
-DiscardNone="Ingen"
13
-DiscardDefault="Standard (ogiltig paket)"
14
-DiscardNonRef="Icke-referensbildrutor"
15
-DiscardBiDir="Dubbelriktade bilder"
16
-DiscardNonIntra="Icke-Intra bilder"
17
-DiscardNonKey="Icke-nyckel bild"
18
-DiscardAll="Alla bilder (Varsam!)"
19
 RestartWhenActivated="Starta om uppspelning när källa blir aktiv"
20
+CloseFileWhenInactive="Stäng filen vid inaktivitet"
21
+CloseFileWhenInactive.ToolTip="Stänger filen när källan inte visas i strömmen vid\ninspelning. Detta låter filen att ändras när källan inte är aktiv,\nmen en liten fördröjning kan uppstå när källan aktiveras igen."
22
 ColorRange="YUV-färgområde"
23
 ColorRange.Auto="Automatisk"
24
 ColorRange.Partial="Delvis"
25
 ColorRange.Full="Full"
26
-
27
+RestartMedia="Starta om media"
28
 
29
 MediaFileFilter.AllMediaFiles="Alla mediafiler"
30
 MediaFileFilter.VideoFiles="Videofiler"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/th-TH.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/th-TH.ini Changed
6
 
1
@@ -5,4 +5,3 @@
2
 
3
 
4
 
5
-
6
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Döngü"
3
 Input="Giriş"
4
 InputFormat="Giriş Biçimi"
5
-ForceFormat="Dosya biçim dönüşümünü zorla"
6
 HardwareDecode="Kullanılabilir ise, donanım kod çözmeyi kullan"
7
 ClearOnMediaEnd="Kayıttan yürütme bittiğinde kaynağı gizle"
8
 Advanced="Gelişmiş"
9
-AudioBufferSize="Ses Arabellek Boyutu (kare)"
10
-VideoBufferSize="Video Arabellek Boyutu (kare)"
11
-FrameDropping="Kare Düşüş Seviyesi"
12
-DiscardNone="Hiçbiri"
13
-DiscardDefault="Varsayılan (Geçersiz Paketler)"
14
-DiscardNonRef="Referanssız Kareler"
15
-DiscardBiDir="Çift-Yönlü Kareler"
16
-DiscardNonIntra="Intra Olmayan Kareler"
17
-DiscardNonKey="Anahtar Olmayan Kareler"
18
-DiscardAll="Tüm Kareler (Dikkatli Olun!)"
19
 RestartWhenActivated="Yeniden oynatmayı kaynak etkin olduğunda yeniden başlat"
20
+CloseFileWhenInactive="Etkin değilken dosyayı kapat"
21
+CloseFileWhenInactive.ToolTip="Kaynak yayında veya kayıtta gösterilmiyorken dosyayı kapatır.\nBu dosya etkin değilken onun değiştirilmesine izin verir,\nancak kaynak yeniden etkinleşirken başlatmada gecikme olabilir."
22
 ColorRange="YUV Renk Aralığı"
23
 ColorRange.Auto="Otomatik"
24
 ColorRange.Partial="Kısmi"
25
 ColorRange.Full="Tam"
26
-
27
+RestartMedia="Ortamı Yeniden Başlat"
28
 
29
 MediaFileFilter.AllMediaFiles="Tüm Medya Dosyaları"
30
 MediaFileFilter.VideoFiles="Video Dosyaları"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="Повторювати"
3
 Input="Вхід"
4
 InputFormat="Вхідний формат"
5
-ForceFormat="Примусове перетворення формату"
6
 HardwareDecode="Використовувати апаратне декодування, за наявності"
7
 ClearOnMediaEnd="Не відображати джерело, коли відтворення завершено"
8
 Advanced="Розширені параметри"
9
-AudioBufferSize="Розмір аудіо буфера, (кадрів)"
10
-VideoBufferSize="Розмір відео буфера, (кадрів)"
11
-FrameDropping="Вид пропущених кадрів"
12
-DiscardNone="Немає"
13
-DiscardDefault="За замовчанням (лише збійні пакети)"
14
-DiscardNonRef="Всі крім опорних кадрів"
15
-DiscardBiDir="Лише В-кадри"
16
-DiscardNonIntra="Всі крім I-кадрів"
17
-DiscardNonKey="Всі крім ключових кадрів"
18
-DiscardAll="Всі кадри (Обережно!)"
19
 RestartWhenActivated="Грати з початку, коли джерело стає активним"
20
+CloseFileWhenInactive="Закрити файл, коли неактивен"
21
+CloseFileWhenInactive.ToolTip="Завжди закриває файл, коли джерело не відображається у трансляції чи запису.\nЦе дозволяє редагувати файл, якщо джерело не є активним, але може виникнути\nдеяка затримка запуску, коли джерело повторно активується."
22
 ColorRange="YUV, колірний діапазон"
23
 ColorRange.Auto="Автовизначення"
24
 ColorRange.Partial="Частковий"
25
 ColorRange.Full="Повний"
26
-
27
+RestartMedia="Перезапустити медіа"
28
 
29
 MediaFileFilter.AllMediaFiles="Файли мультимедіа"
30
 MediaFileFilter.VideoFiles="Відео"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini Changed
6
 
1
@@ -24,4 +24,3 @@
2
 
3
 
4
 
5
-
6
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="循环"
3
 Input="输入"
4
 InputFormat="输入格式"
5
-ForceFormat="强制格式转换"
6
 HardwareDecode="在可用时使用硬件解码"
7
 ClearOnMediaEnd="当播放结束时隐藏源"
8
 Advanced="高级"
9
-AudioBufferSize="音频缓冲区大小(帧)"
10
-VideoBufferSize="视频缓冲区大小(帧)"
11
-FrameDropping="帧丢失等级"
12
-DiscardNone="无"
13
-DiscardDefault="默认(无效数据包)"
14
-DiscardNonRef="非参考帧"
15
-DiscardBiDir="双向帧"
16
-DiscardNonIntra="非intra帧"
17
-DiscardNonKey="非关键帧"
18
-DiscardAll="所有的帧(小心!)"
19
 RestartWhenActivated="当源变为活动状态时重新启动播放"
20
+CloseFileWhenInactive="非活跃状态时关闭文件"
21
+CloseFileWhenInactive.ToolTip="当源没有显示在推流或者\n录像时关闭文件. 这使得在源不活跃状态时可以更改文件,\n但是当当源重新激活时, 可能有一些启动延迟."
22
 ColorRange="YUV 颜色范围"
23
 ColorRange.Auto="自动"
24
 ColorRange.Partial="局部"
25
 ColorRange.Full="全部"
26
-
27
+RestartMedia="重新启动媒体"
28
 
29
 MediaFileFilter.AllMediaFiles="所有媒体文件"
30
 MediaFileFilter.VideoFiles="视频文件"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini Changed
31
 
1
@@ -23,26 +23,17 @@
2
 Looping="循環"
3
 Input="輸入"
4
 InputFormat="輸入格式"
5
-ForceFormat="強制格式轉換"
6
 HardwareDecode="盡可能使用硬體解碼"
7
 ClearOnMediaEnd="當播放結束時隱藏來源"
8
 Advanced="進階"
9
-AudioBufferSize="音訊緩衝區大小 (訊框)"
10
-VideoBufferSize="影像緩衝區大小 (訊框)"
11
-FrameDropping="丟棄訊框级别"
12
-DiscardNone="無"
13
-DiscardDefault="預設 (無效封包)"
14
-DiscardNonRef="非參考訊框"
15
-DiscardBiDir="雙向訊框"
16
-DiscardNonIntra="非內部訊框"
17
-DiscardNonKey="非關鍵訊框"
18
-DiscardAll="所有訊框(小心!)"
19
 RestartWhenActivated="當來源可使用時重新播放"
20
+CloseFileWhenInactive="非使用狀態時關閉檔案"
21
+CloseFileWhenInactive.ToolTip="當來源沒有被用以串流或錄影時關閉檔案。\n這允許來源在非使用狀態時更改檔案,但在\n來源重新啟用時可能會有許些的啟動延遲。"
22
 ColorRange="YUV 色彩空間"
23
 ColorRange.Auto="自動"
24
 ColorRange.Partial="部分"
25
 ColorRange.Full="全部"
26
-
27
+RestartMedia="重新播放媒體"
28
 
29
 MediaFileFilter.AllMediaFiles="所有媒體檔案"
30
 MediaFileFilter.VideoFiles="影像檔"
31
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-mux.c Changed
61
 
1
@@ -39,6 +39,7 @@
2
    obs_output_t      *output;
3
    os_process_pipe_t *pipe;
4
    int64_t           stop_ts;
5
+   uint64_t          total_bytes;
6
    struct dstr       path;
7
    bool              sent_headers;
8
    volatile bool     active;
9
@@ -292,6 +293,7 @@
10
    /* write headers and start capture */
11
    os_atomic_set_bool(&stream->active, true);
12
    os_atomic_set_bool(&stream->capturing, true);
13
+   stream->total_bytes = 0;
14
    obs_output_begin_data_capture(stream->output, 0);
15
 
16
    info("Writing file '%s'...", stream->path.array);
17
@@ -374,6 +376,7 @@
18
        return false;
19
    }
20
 
21
+   stream->total_bytes += packet->size;
22
    return true;
23
 }
24
 
25
@@ -460,6 +463,12 @@
26
    return props;
27
 }
28
 
29
+static uint64_t ffmpeg_mux_total_bytes(void *data)
30
+{
31
+   struct ffmpeg_muxer *stream = data;
32
+   return stream->total_bytes;
33
+}
34
+
35
 struct obs_output_info ffmpeg_muxer = {
36
    .id             = "ffmpeg_muxer",
37
    .flags          = OBS_OUTPUT_AV |
38
@@ -471,6 +480,7 @@
39
    .start          = ffmpeg_mux_start,
40
    .stop           = ffmpeg_mux_stop,
41
    .encoded_packet = ffmpeg_mux_data,
42
+   .get_total_bytes= ffmpeg_mux_total_bytes,
43
    .get_properties = ffmpeg_mux_properties
44
 };
45
 
46
@@ -542,6 +552,7 @@
47
 
48
    os_atomic_set_bool(&stream->active, true);
49
    os_atomic_set_bool(&stream->capturing, true);
50
+   stream->total_bytes = 0;
51
    obs_output_begin_data_capture(stream->output, 0);
52
 
53
    return true;
54
@@ -811,5 +822,6 @@
55
    .start          = replay_buffer_start,
56
    .stop           = ffmpeg_mux_stop,
57
    .encoded_packet = replay_buffer_data,
58
+   .get_total_bytes= ffmpeg_mux_total_bytes,
59
    .get_defaults   = replay_buffer_defaults
60
 };
61
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c Changed
29
 
1
@@ -158,10 +158,6 @@
2
        rc = "CBR";
3
    }
4
 
5
-   /* The "default" preset has been deprecated */
6
-   if (preset && astrcmpi(preset, "default") == 0)
7
-       preset = "hq";
8
-
9
    info.format = voi->format;
10
    info.colorspace = voi->colorspace;
11
    info.range = voi->range;
12
@@ -388,7 +384,7 @@
13
    obs_data_set_default_int(settings, "keyint_sec", 0);
14
    obs_data_set_default_int(settings, "cqp", 23);
15
    obs_data_set_default_string(settings, "rate_control", "CBR");
16
-   obs_data_set_default_string(settings, "preset", "hq");
17
+   obs_data_set_default_string(settings, "preset", "default");
18
    obs_data_set_default_string(settings, "profile", "main");
19
    obs_data_set_default_string(settings, "level", "auto");
20
    obs_data_set_default_bool(settings, "2pass", true);
21
@@ -452,6 +448,7 @@
22
 #define add_preset(val) \
23
    obs_property_list_add_string(p, obs_module_text("NVENC.Preset." val), \
24
            val)
25
+   add_preset("default");
26
    add_preset("hq");
27
    add_preset("hp");
28
    add_preset("bd");
29
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c Changed
46
 
1
@@ -91,6 +91,8 @@
2
    bool               connecting;
3
    pthread_t          start_thread;
4
 
5
+   uint64_t           total_bytes;
6
+
7
    uint64_t           audio_start_ts;
8
    uint64_t           video_start_ts;
9
    uint64_t           stop_ts;
10
@@ -893,6 +895,8 @@
11
        }
12
    }
13
 
14
+   output->total_bytes += packet.size;
15
+
16
    ret = av_interleaved_write_frame(output->ff_data.output, &packet);
17
    if (ret < 0) {
18
        av_free_packet(&packet);
19
@@ -1051,6 +1055,7 @@
20
    os_atomic_set_bool(&output->stopping, false);
21
    output->audio_start_ts = 0;
22
    output->video_start_ts = 0;
23
+   output->total_bytes = 0;
24
 
25
    ret = pthread_create(&output->start_thread, NULL, start_thread, output);
26
    return (output->connecting = (ret == 0));
27
@@ -1100,6 +1105,12 @@
28
    ffmpeg_data_free(&output->ff_data);
29
 }
30
 
31
+static uint64_t ffmpeg_output_total_bytes(void *data)
32
+{
33
+   struct ffmpeg_output *output = data;
34
+   return output->total_bytes;
35
+}
36
+
37
 struct obs_output_info ffmpeg_output = {
38
    .id        = "ffmpeg_output",
39
    .flags     = OBS_OUTPUT_AUDIO | OBS_OUTPUT_VIDEO,
40
@@ -1110,4 +1121,5 @@
41
    .stop      = ffmpeg_output_stop,
42
    .raw_video = receive_video,
43
    .raw_audio = receive_audio,
44
+   .get_total_bytes = ffmpeg_output_total_bytes,
45
 };
46
obs-studio-18.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c -> obs-studio-19.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c Changed
133
 
1
@@ -47,10 +47,12 @@
2
    int sws_linesize;
3
    enum video_range_type range;
4
    obs_source_t *source;
5
+   obs_hotkey_id hotkey;
6
 
7
    char *input;
8
    char *input_format;
9
    bool is_looping;
10
+   bool is_local_file;
11
    bool is_hw_decoding;
12
    bool is_clear_on_media_end;
13
    bool restart_on_activate;
14
@@ -68,8 +70,10 @@
15
            "input_format");
16
    obs_property_t *local_file = obs_properties_get(props, "local_file");
17
    obs_property_t *looping = obs_properties_get(props, "looping");
18
+   obs_property_t *close = obs_properties_get(props, "close_when_inactive");
19
    obs_property_set_visible(input, !enabled);
20
    obs_property_set_visible(input_format, !enabled);
21
+   obs_property_set_visible(close, enabled);
22
    obs_property_set_visible(local_file, enabled);
23
    obs_property_set_visible(looping, enabled);
24
 
25
@@ -149,8 +153,10 @@
26
    obs_properties_add_text(props, "input_format",
27
            obs_module_text("InputFormat"), OBS_TEXT_DEFAULT);
28
 
29
+#ifndef __APPLE__
30
    obs_properties_add_bool(props, "hw_decode",
31
            obs_module_text("HardwareDecode"));
32
+#endif
33
 
34
    obs_properties_add_bool(props, "clear_on_media_end",
35
            obs_module_text("ClearOnMediaEnd"));
36
@@ -251,7 +257,8 @@
37
 
38
    if (s->media_valid) {
39
        mp_media_play(&s->media, s->is_looping);
40
-       obs_source_show_preloaded_video(s->source);
41
+       if (s->is_local_file)
42
+           obs_source_show_preloaded_video(s->source);
43
    }
44
 }
45
 
46
@@ -271,28 +278,32 @@
47
        input = (char *)obs_data_get_string(settings, "local_file");
48
        input_format = NULL;
49
        s->is_looping = obs_data_get_bool(settings, "looping");
50
+       s->close_when_inactive = obs_data_get_bool(settings,
51
+               "close_when_inactive");
52
 
53
-       obs_source_set_flags(s->source, OBS_SOURCE_FLAG_UNBUFFERED);
54
+       obs_source_set_async_unbuffered(s->source, true);
55
    } else {
56
        input = (char *)obs_data_get_string(settings, "input");
57
        input_format = (char *)obs_data_get_string(settings,
58
                "input_format");
59
        s->is_looping = false;
60
+       s->close_when_inactive = true;
61
 
62
-       obs_source_set_flags(s->source, 0);
63
+       obs_source_set_async_unbuffered(s->source, false);
64
    }
65
 
66
    s->input = input ? bstrdup(input) : NULL;
67
    s->input_format = input_format ? bstrdup(input_format) : NULL;
68
+#ifndef __APPLE__
69
    s->is_hw_decoding = obs_data_get_bool(settings, "hw_decode");
70
+#endif
71
    s->is_clear_on_media_end = obs_data_get_bool(settings,
72
            "clear_on_media_end");
73
    s->restart_on_activate = obs_data_get_bool(settings,
74
            "restart_on_activate");
75
-   s->close_when_inactive = obs_data_get_bool(settings,
76
-           "close_when_inactive");
77
    s->range = (enum video_range_type)obs_data_get_int(settings,
78
            "color_range");
79
+   s->is_local_file = is_local_file;
80
 
81
    if (s->media_valid) {
82
        mp_media_free(&s->media);
83
@@ -314,6 +325,25 @@
84
    return obs_module_text("FFMpegSource");
85
 }
86
 
87
+static bool restart_hotkey(void *data, obs_hotkey_id id,
88
+       obs_hotkey_t *hotkey, bool pressed)
89
+{
90
+   UNUSED_PARAMETER(id);
91
+   UNUSED_PARAMETER(hotkey);
92
+   UNUSED_PARAMETER(pressed);
93
+
94
+   struct ffmpeg_source *s = data;
95
+   if (obs_source_active(s->source))
96
+       ffmpeg_source_start(s);
97
+   return true;
98
+}
99
+
100
+static void restart_proc(void *data, calldata_t *cd)
101
+{
102
+   restart_hotkey(data, 0, NULL, true);
103
+   UNUSED_PARAMETER(cd);
104
+}
105
+
106
 static void *ffmpeg_source_create(obs_data_t *settings, obs_source_t *source)
107
 {
108
    UNUSED_PARAMETER(settings);
109
@@ -321,6 +351,14 @@
110
    struct ffmpeg_source *s = bzalloc(sizeof(struct ffmpeg_source));
111
    s->source = source;
112
 
113
+   s->hotkey = obs_hotkey_register_source(source,
114
+           "MediaSource.Restart",
115
+           obs_module_text("RestartMedia"),
116
+           restart_hotkey, s);
117
+
118
+   proc_handler_t *ph = obs_source_get_proc_handler(source);
119
+   proc_handler_add(ph, "void restart()", restart_proc, s);
120
+
121
    ffmpeg_source_update(s, settings);
122
    return s;
123
 }
124
@@ -329,6 +367,8 @@
125
 {
126
    struct ffmpeg_source *s = data;
127
 
128
+   if (s->hotkey)
129
+       obs_hotkey_unregister(s->hotkey);
130
    if (s->media_valid)
131
        mp_media_free(&s->media);
132
 
133
obs-studio-18.0.2.tar.xz/plugins/obs-filters/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/CMakeLists.txt Changed
9
 
1
@@ -22,6 +22,7 @@
2
    obs-filters.c
3
    color-correction-filter.c
4
    async-delay-filter.c
5
+   gpu-delay.c
6
    crop-filter.c
7
    scale-filter.c
8
    scroll-filter.c
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/LUTs/black_and_white.png -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/LUTs/black_and_white.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/LUTs/original.png -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/LUTs/original.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/LUTs/posterize.png -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/LUTs/posterize.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/LUTs/red_isolated.png -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/LUTs/red_isolated.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/LUTs/teal_lows_orange_highs.png -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/LUTs/teal_lows_orange_highs.png Changed
obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/bn-BD.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+ColorFilter="রং এর সংশোধনী"
3
+CropFilter="ফসল/প্যাড"
4
+ScrollFilter="নিচে স্ক্রোল করুন"
5
+SharpnessFilter="ধার"
6
+ScaleFilter="স্কেল/দৃশ্যরূপ অনুপাত"
7
+Gain="মোহ"
8
+DelayMs="বিলম্ব (মিলিসেকেন্ড)"
9
+Type="নমুনা"
10
+MaskBlendType.MaskColor="আলফা মুখোশ (রং চ্যানেল)"
11
+
12
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/cs-CZ.ini Changed
20
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Klíč barvy"
3
 SharpnessFilter="Ostření"
4
 ScaleFilter="Škálování/poměr stran"
5
+GPUDelayFilter="Zpoždění vykreslování"
6
 UndistortCenter="Zlepší střed obrázku při škálování z ultra-širokého obrazu"
7
 NoiseGate="Šumová brána"
8
 NoiseSuppress="Potlačení šumu"
9
@@ -66,4 +67,10 @@
10
 Saturation="Saturace"
11
 HueShift="Posun odstínu"
12
 Amount="Množství"
13
+Compressor="Kompresor"
14
+Compressor.Ratio="Poměr (X:1)"
15
+Compressor.Threshold="Práh (v dB)"
16
+Compressor.AttackTime="Stažení (v ms)"
17
+Compressor.ReleaseTime="Uvolnění (v ms)"
18
+Compressor.OutputGain="Síla výstupu (v dB)"
19
 
20
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/da-DK.ini Changed
20
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Farvenøgle"
3
 SharpnessFilter="Skarphed"
4
 ScaleFilter="Skalering/Formatforhold"
5
+GPUDelayFilter="Renderingsforsinkelse"
6
 UndistortCenter="Fjern forvrængning af billedets midte ved skalering fra ultrabred"
7
 NoiseGate="Noise Gate"
8
 NoiseSuppress="Støjundertrykkelse"
9
@@ -66,4 +67,10 @@
10
 Saturation="Mætning"
11
 HueShift="Nuanceskift"
12
 Amount="Værdi"
13
+Compressor="Kompressor"
14
+Compressor.Ratio="Forhold (X:1)"
15
+Compressor.Threshold="Grænse (dB)"
16
+Compressor.AttackTime="Attack (ms)"
17
+Compressor.ReleaseTime="Release (ms)"
18
+Compressor.OutputGain="Output øgning (dB)"
19
 
20
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/de-DE.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Color Key"
3
 SharpnessFilter="Schärfen"
4
 ScaleFilter="Skalierung/Seitenverhältnis"
5
+GPUDelayFilter="Renderverzögerung"
6
 UndistortCenter="Entzerre Mitte des Bildes bei der Skalierung von Ultraweitwinkel"
7
 NoiseGate="Noise Gate"
8
 NoiseSuppress="Rauschunterdrückung"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/en-US.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Color Key"
3
 SharpnessFilter="Sharpen"
4
 ScaleFilter="Scaling/Aspect Ratio"
5
+GPUDelayFilter="Render Delay"
6
 UndistortCenter="Undistort center of image when scaling from ultrawide"
7
 NoiseGate="Noise Gate"
8
 NoiseSuppress="Noise Suppression"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/es-ES.ini Changed
17
 
1
@@ -1,13 +1,14 @@
2
 ColorFilter="Corrección de color"
3
 ColorGradeFilter="Aplicar LUT"
4
 MaskFilter="Imagen máscara/mezcla"
5
-AsyncDelayFilter="Demora de Video (asincróno)"
6
+AsyncDelayFilter="Retardo de Video (asincróno)"
7
 CropFilter="Recortar/Acolchar"
8
 ScrollFilter="desplazamiento"
9
 ChromaKeyFilter="Fondro croma"
10
 ColorKeyFilter="Filtro de color"
11
 SharpnessFilter="Filtro de enfoque"
12
 ScaleFilter="Escala/Relación de Aspecto"
13
+GPUDelayFilter="Retardo de procesamiento"
14
 UndistortCenter="No distorsionar el centro de la imagen en escalar des de una ultrapanorámica"
15
 NoiseGate="Puerta anti-ruidos"
16
 NoiseSuppress="Eliminación de ruido"
17
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/et-EE.ini Changed
40
 
1
@@ -1,10 +1,20 @@
2
 ColorFilter="Värvi korrektsioon"
3
 ColorGradeFilter="Lisa LUT"
4
+CropFilter="Kärbi/Padding"
5
+ScrollFilter="Kerimine"
6
+ChromaKeyFilter="Chroma Efekt"
7
+SharpnessFilter="Teravda"
8
 Gain="Võimendus"
9
+DelayMs="Viivitus (millisekundites)"
10
+Type="Tüüp"
11
+Path="Tee"
12
+Color="Värv"
13
+Opacity="Läbipaistvus"
14
 Contrast="Kontrast"
15
 Brightness="Heledus"
16
 Gamma="Gamma"
17
 BrowsePath.Images="Kõik pildifailid"
18
+BrowsePath.AllFiles="Kõik failid"
19
 Crop.Left="Vasakult"
20
 Crop.Right="Paremalt"
21
 Crop.Top="Ülevalt"
22
@@ -12,5 +22,17 @@
23
 Crop.Width="Laius"
24
 Crop.Height="Kõrgus"
25
 Crop.Relative="Suhteline"
26
+ScrollFilter.SpeedY="Vertikaalne kiirus"
27
+ScrollFilter.LimitWidth="Piira laiust"
28
+ScrollFilter.LimitHeight="Piira kõrgust"
29
+Red="Punane"
30
+Green="Roheline"
31
+Blue="Sinine"
32
+Gain.GainDB="Võimendus (dB)"
33
+None="Määramata"
34
+ScaleFiltering.Point="Punkt"
35
+Saturation="Küllastatus"
36
 Amount="Kogus"
37
+Compressor.Ratio="Suhe (X:1)"
38
+Compressor.OutputGain="Väljundi võimendus (dB)"
39
 
40
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/eu-ES.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Kolore gakoa"
3
 SharpnessFilter="Enfokea"
4
 ScaleFilter="Eskala/Aspektu-erlazioa"
5
+GPUDelayFilter="Errendatzearen atzerapena"
6
 UndistortCenter="Ez distortsionatu irudiaren erdigunea ultra zabala eskalatzean"
7
 NoiseGate="Zarata atalasea"
8
 NoiseSuppress="Zarata kendu"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/fi-FI.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Väriavain"
3
 SharpnessFilter="Terävöitä"
4
 ScaleFilter="Skaalaus/Kuvasuhde"
5
+GPUDelayFilter="Renderoinnin viive"
6
 UndistortCenter="Poista vääristymä keskeltä kuvaa skaalattaessa ultra-leveästä"
7
 NoiseGate="Noise Gate"
8
 NoiseSuppress="Melunvaimennus"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/hu-HU.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Színkulcs"
3
 SharpnessFilter="Élesítés"
4
 ScaleFilter="Méretezés/Képarány"
5
+GPUDelayFilter="Render késleltetés"
6
 UndistortCenter="Kép közepének zavarosságának a csökkentése ultraszélesről való skálázás esetén"
7
 NoiseGate="Zajgát"
8
 NoiseSuppress="Zajcsökkentés"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/it-IT.ini Changed
13
 
1
@@ -64,4 +64,11 @@
2
 NoiseSuppress.SuppressLevel="Livello di soppressione (dB)"
3
 Saturation="Saturazione"
4
 HueShift="Cambio di tonalità"
5
+Amount="Quantità"
6
+Compressor="Compressore"
7
+Compressor.Ratio="Rapporto (X:1)"
8
+Compressor.Threshold="Soglia (dB)"
9
+Compressor.AttackTime="Attacco (ms)"
10
+Compressor.ReleaseTime="Rilascio (ms)"
11
+Compressor.OutputGain="Guadagno di uscita (dB)"
12
 
13
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/ja-JP.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="カラーキー"
3
 SharpnessFilter="シャープ"
4
 ScaleFilter="スケーリング/アスペクト比"
5
+GPUDelayFilter="レンダリング遅延"
6
 UndistortCenter="超広角からスケーリングするときに画像の中心を歪めない"
7
 NoiseGate="ノイズゲート"
8
 NoiseSuppress="ノイズ抑制"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/ko-KR.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="색상 키"
3
 SharpnessFilter="선명하게"
4
 ScaleFilter="비례축소/가로세로 비율"
5
+GPUDelayFilter="렌더링 지연"
6
 UndistortCenter="울트라와이드에서 크기조정 시 이미지 중앙의 왜곡을 수정"
7
 NoiseGate="노이즈 게이트"
8
 NoiseSuppress="소음 억제"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/nl-NL.ini Changed
20
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Color Key"
3
 SharpnessFilter="Verscherpen"
4
 ScaleFilter="Schalen/Aspect Ratio"
5
+GPUDelayFilter="Rendervertraging"
6
 UndistortCenter="Verbeter beeldverhouding in het midden van bij schalen vanaf ultrawide"
7
 NoiseGate="Noise Gate"
8
 NoiseSuppress="Ruisonderdrukking"
9
@@ -66,4 +67,10 @@
10
 Saturation="Verzadiging"
11
 HueShift="Tintverschuiving"
12
 Amount="Hoeveelheid"
13
+Compressor="Compressor"
14
+Compressor.Ratio="Verhouding (X:1)"
15
+Compressor.Threshold="Drempel (dB)"
16
+Compressor.AttackTime="Attack (ms)"
17
+Compressor.ReleaseTime="Release (ms)"
18
+Compressor.OutputGain="Uitvoergain (dB)"
19
 
20
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/pl-PL.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Kluczowanie koloru (kolor)"
3
 SharpnessFilter="Wyostrzanie"
4
 ScaleFilter="Skalowanie/proporcje"
5
+GPUDelayFilter="Opóźnienie renderowania"
6
 UndistortCenter="Usuń przekłamania przy skalowaniu źródeł o dużej szerokości"
7
 NoiseGate="Bramka szumów"
8
 NoiseSuppress="Tłumienie hałasu"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/pt-BR.ini Changed
43
 
1
@@ -1,11 +1,15 @@
2
 ColorFilter="Correção de cor"
3
+ColorGradeFilter="Aplicar LUT"
4
 MaskFilter="Máscara/mistura de imagem"
5
 AsyncDelayFilter="Atraso de vídeo (Async)"
6
+CropFilter="Recortar/Preencher"
7
 ScrollFilter="Rolagem"
8
 ChromaKeyFilter="Chroma Key"
9
 ColorKeyFilter="Color Key"
10
 SharpnessFilter="Nitidez"
11
 ScaleFilter="Dimensionamento/proporção"
12
+GPUDelayFilter="Atraso de Renderização"
13
+UndistortCenter="Remover distorção do centro da imagem ao redimensionar de ultralargo"
14
 NoiseGate="Filtro de Rúido"
15
 NoiseSuppress="Redução de ruídos"
16
 Gain="Ganho"
17
@@ -47,9 +51,9 @@
18
 Magenta="Magenta"
19
 NoiseGate.OpenThreshold="Limite de Abertura (dB)"
20
 NoiseGate.CloseThreshold="Limite de Fecho (dB)"
21
-NoiseGate.AttackTime="Tempo de ataque (milissegundos)"
22
+NoiseGate.AttackTime="Tempo de Ataque (milissegundos)"
23
 NoiseGate.HoldTime="Tempo de Bloqueio (milissegundos)"
24
-NoiseGate.ReleaseTime="Tempo de libertação (milissegundos)"
25
+NoiseGate.ReleaseTime="Tempo de liberação (milissegundos)"
26
 Gain.GainDB="Ganho (dB)"
27
 StretchImage="Esticar a Imagem (descartar aspecto da imagem)"
28
 Resolution="Resolução"
29
@@ -60,4 +64,13 @@
30
 ScaleFiltering.Bicubic="Bicúbico"
31
 ScaleFiltering.Lanczos="Lanczos"
32
 NoiseSuppress.SuppressLevel="Nível de redução (dB)"
33
+Saturation="Saturação"
34
+HueShift="Alteração de matiz"
35
+Amount="Valor"
36
+Compressor="Compressor"
37
+Compressor.Ratio="Razão (X:1)"
38
+Compressor.Threshold="Limiar (dB)"
39
+Compressor.AttackTime="Ataque (ms)"
40
+Compressor.ReleaseTime="Liberação (ms)"
41
+Compressor.OutputGain="Ganho na saída (dB)"
42
 
43
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Цветовой ключ"
3
 SharpnessFilter="Увеличить резкость"
4
 ScaleFilter="Коэффициент Масштабирования/Аспект"
5
+GPUDelayFilter="Задержка отображения"
6
 UndistortCenter="Не искривлять центр изображения при масштабировании Ultrawide разрешения"
7
 NoiseGate="Подавление шума"
8
 NoiseSuppress="Шумоподавление"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/sv-SE.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Färgfilter"
3
 SharpnessFilter="Skärpa"
4
 ScaleFilter="Skalning/Bildförhållande"
5
+GPUDelayFilter="Renderingsfördröjning"
6
 NoiseGate="Brusblockering"
7
 NoiseSuppress="Brusreducering"
8
 Gain="Förstärkning"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/tr-TR.ini Changed
27
 
1
@@ -1,13 +1,14 @@
2
 ColorFilter="Renk Düzeltme"
3
 ColorGradeFilter="LUT Uygula"
4
 MaskFilter="Görüntü Maskesi/Blend"
5
-AsyncDelayFilter="Görüntü Gecikmesi (Async)"
6
+AsyncDelayFilter="Görüntü Gecikmesi (Eşzamansız)"
7
 CropFilter="Kes/Kaydır"
8
 ScrollFilter="Kaydır"
9
 ChromaKeyFilter="Chroma Anahtarı"
10
 ColorKeyFilter="Renk Anahtarı"
11
 SharpnessFilter="Keskinleştirme"
12
-ScaleFilter="Ölçeklendirme/Boy Oranı"
13
+ScaleFilter="Boyutlandırma/En-Boy Oranı"
14
+GPUDelayFilter="İşleyici Gecikmesi"
15
 UndistortCenter="Ultra genişten boyutlandırırken görüntü merkezindeki bozulmayı düzelt"
16
 NoiseGate="Gürültü Filtresi"
17
 NoiseSuppress="Gürültü Bastırma"
18
@@ -54,7 +55,7 @@
19
 NoiseGate.HoldTime="Kavrama Süresi (milisaniye)"
20
 NoiseGate.ReleaseTime="Bırakma Süresi (milisaniye)"
21
 Gain.GainDB="Kazanç (dB)"
22
-StretchImage="Görüntüyü Uzat (görüntü boy oranını görmezden gelir)"
23
+StretchImage="Görüntüyü Uzat (görüntü en-boy oranını görmezden gel)"
24
 Resolution="Çözünürlük"
25
 None="Hiçbiri"
26
 ScaleFiltering="Ölçek Filtreleme"
27
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/uk-UA.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="Фільтрування за кольором"
3
 SharpnessFilter="Різкість"
4
 ScaleFilter="Масштабування/пропорції"
5
+GPUDelayFilter="Затримка візуалізації"
6
 UndistortCenter="Зменшити викривлення у центрі, якщо масштабувати з надширокоформатного"
7
 NoiseGate="Пороговий шумопонижувач"
8
 NoiseSuppress="Подавлення шуму"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/zh-CN.ini Changed
9
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="色值"
3
 SharpnessFilter="锐化"
4
 ScaleFilter="缩放比例"
5
+GPUDelayFilter="渲染延迟"
6
 UndistortCenter="当从超宽扩展时, 让图片中心不失真"
7
 NoiseGate="噪音阈值"
8
 NoiseSuppress="噪声抑制"
9
obs-studio-18.0.2.tar.xz/plugins/obs-filters/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/data/locale/zh-TW.ini Changed
20
 
1
@@ -8,6 +8,7 @@
2
 ColorKeyFilter="色彩鍵"
3
 SharpnessFilter="銳化"
4
 ScaleFilter="縮放/長寬比"
5
+GPUDelayFilter="繪製延遲"
6
 UndistortCenter="從超寬影像縮放時彌補影像中心的畸變"
7
 NoiseGate="噪音閾"
8
 NoiseSuppress="雜訊抑制"
9
@@ -66,4 +67,10 @@
10
 Saturation="飽合度"
11
 HueShift="色調偏移"
12
 Amount="影響總量"
13
+Compressor="動態壓縮處理器"
14
+Compressor.Ratio="比率 (X:1)"
15
+Compressor.Threshold="閾值 (dB)"
16
+Compressor.AttackTime="起始時間 (ms)"
17
+Compressor.ReleaseTime="釋放時間 (ms)"
18
+Compressor.OutputGain="輸出增益 (dB)"
19
 
20
obs-studio-19.0.2.tar.xz/plugins/obs-filters/gpu-delay.c Added
267
 
1
@@ -0,0 +1,265 @@
2
+#include <obs-module.h>
3
+#include <util/circlebuf.h>
4
+
5
+#define S_DELAY_MS                     "delay_ms"
6
+#define T_DELAY_MS                     obs_module_text("DelayMs")
7
+
8
+struct frame {
9
+   gs_texrender_t *render;
10
+   uint64_t ts;
11
+};
12
+
13
+struct gpu_delay_filter_data {
14
+   obs_source_t                   *context;
15
+   struct circlebuf               frames;
16
+   uint64_t                       delay_ns;
17
+   uint64_t                       interval_ns;
18
+   uint32_t                       cx;
19
+   uint32_t                       cy;
20
+   bool                           target_valid;
21
+   bool                           processed_frame;
22
+};
23
+
24
+static const char *gpu_delay_filter_get_name(void *unused)
25
+{
26
+   UNUSED_PARAMETER(unused);
27
+   return obs_module_text("GPUDelayFilter");
28
+}
29
+
30
+static void free_textures(struct gpu_delay_filter_data *f)
31
+{
32
+   obs_enter_graphics();
33
+   while (f->frames.size) {
34
+       struct frame frame;
35
+       circlebuf_pop_front(&f->frames, &frame, sizeof(frame));
36
+       gs_texrender_destroy(frame.render);
37
+   }
38
+   circlebuf_free(&f->frames);
39
+   obs_leave_graphics();
40
+}
41
+
42
+static size_t num_frames(struct circlebuf *buf)
43
+{
44
+   return buf->size / sizeof(struct frame);
45
+}
46
+
47
+static void update_interval(struct gpu_delay_filter_data *f,
48
+       uint64_t new_interval_ns)
49
+{
50
+   if (!f->target_valid) {
51
+       free_textures(f);
52
+       return;
53
+   }
54
+
55
+   f->interval_ns = new_interval_ns;
56
+   size_t num = (size_t)(f->delay_ns / new_interval_ns);
57
+
58
+   if (num > num_frames(&f->frames)) {
59
+       size_t prev_num = num_frames(&f->frames);
60
+
61
+       obs_enter_graphics();
62
+
63
+       circlebuf_upsize(&f->frames, num * sizeof(struct frame));
64
+
65
+       for (size_t i = prev_num; i < num; i++) {
66
+           struct frame *frame = circlebuf_data(&f->frames,
67
+                   i * sizeof(*frame));
68
+           frame->render = gs_texrender_create(GS_RGBA, GS_ZS_NONE);
69
+       }
70
+
71
+       obs_leave_graphics();
72
+
73
+   } else if (num < num_frames(&f->frames)) {
74
+       obs_enter_graphics();
75
+
76
+       while (num_frames(&f->frames) > num) {
77
+           struct frame frame;
78
+           circlebuf_pop_front(&f->frames, &frame, sizeof(frame));
79
+           gs_texrender_destroy(frame.render);
80
+       }
81
+
82
+       obs_leave_graphics();
83
+   }
84
+}
85
+
86
+static inline void check_interval(struct gpu_delay_filter_data *f)
87
+{
88
+   struct obs_video_info ovi = {0};
89
+   uint64_t interval_ns;
90
+
91
+   obs_get_video_info(&ovi);
92
+
93
+   interval_ns = (uint64_t)ovi.fps_den * 1000000000ULL /
94
+       (uint64_t)ovi.fps_num;
95
+
96
+   if (interval_ns != f->interval_ns)
97
+       update_interval(f, interval_ns);
98
+}
99
+
100
+static inline void reset_textures(struct gpu_delay_filter_data *f)
101
+{
102
+   f->interval_ns = 0;
103
+   free_textures(f);
104
+   check_interval(f);
105
+}
106
+
107
+static inline bool check_size(struct gpu_delay_filter_data *f)
108
+{
109
+   obs_source_t *target = obs_filter_get_target(f->context);
110
+   uint32_t cx;
111
+   uint32_t cy;
112
+
113
+   f->target_valid = !!target;
114
+   if (!f->target_valid)
115
+       return true;
116
+
117
+   cx = obs_source_get_base_width(target);
118
+   cy = obs_source_get_base_height(target);
119
+
120
+   f->target_valid = !!cx && !!cy;
121
+   if (!f->target_valid)
122
+       return true;
123
+
124
+   if (cx != f->cx || cy != f->cy) {
125
+       f->cx = cx;
126
+       f->cy = cy;
127
+       reset_textures(f);
128
+       return true;
129
+   }
130
+
131
+   return false;
132
+}
133
+
134
+static void gpu_delay_filter_update(void *data, obs_data_t *s)
135
+{
136
+   struct gpu_delay_filter_data *f = data;
137
+
138
+   f->delay_ns = (uint64_t)obs_data_get_int(s, S_DELAY_MS) * 1000000ULL;
139
+
140
+   /* full reset */
141
+   f->cx = 0;
142
+   f->cy = 0;
143
+   f->interval_ns = 0;
144
+   free_textures(f);
145
+}
146
+
147
+static obs_properties_t *gpu_delay_filter_properties(void *data)
148
+{
149
+   obs_properties_t *props = obs_properties_create();
150
+
151
+   obs_properties_add_int(props, S_DELAY_MS, T_DELAY_MS, 0, 500, 1);
152
+
153
+   UNUSED_PARAMETER(data);
154
+   return props;
155
+}
156
+
157
+static void *gpu_delay_filter_create(obs_data_t *settings, obs_source_t *context)
158
+{
159
+   struct gpu_delay_filter_data *f = bzalloc(sizeof(*f));
160
+   f->context = context;
161
+
162
+   obs_source_update(context, settings);
163
+   return f;
164
+}
165
+
166
+static void gpu_delay_filter_destroy(void *data)
167
+{
168
+   struct gpu_delay_filter_data *f = data;
169
+
170
+   free_textures(f);
171
+   bfree(f);
172
+}
173
+
174
+static void gpu_delay_filter_tick(void *data, float t)
175
+{
176
+   struct gpu_delay_filter_data *f = data;
177
+   uint64_t cur_time = obs_get_video_frame_time();
178
+
179
+   f->processed_frame = false;
180
+
181
+   if (check_size(f))
182
+       return;
183
+   check_interval(f);
184
+}
185
+
186
+static void draw_frame(struct gpu_delay_filter_data *f)
187
+{
188
+   struct frame frame;
189
+   circlebuf_peek_front(&f->frames, &frame, sizeof(frame));
190
+
191
+   gs_effect_t *effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
192
+   gs_texture_t *tex = gs_texrender_get_texture(frame.render);
193
+   if (tex) {
194
+       gs_eparam_t *image =
195
+           gs_effect_get_param_by_name(effect, "image");
196
+       gs_effect_set_texture(image, tex);
197
+
198
+       while (gs_effect_loop(effect, "Draw"))
199
+           gs_draw_sprite(tex, 0, f->cx, f->cy);
200
+   }
201
+}
202
+
203
+static void gpu_delay_filter_render(void *data, gs_effect_t *effect)
204
+{
205
+   struct gpu_delay_filter_data *f = data;
206
+   obs_source_t *target = obs_filter_get_target(f->context);
207
+   obs_source_t *parent = obs_filter_get_parent(f->context);
208
+
209
+   if (!f->target_valid || !target || !parent || !f->frames.size) {
210
+       obs_source_skip_video_filter(f->context);
211
+       return;
212
+   }
213
+
214
+   if (f->processed_frame) {
215
+       draw_frame(f);
216
+       return;
217
+   }
218
+
219
+   struct frame frame;
220
+   circlebuf_pop_front(&f->frames, &frame, sizeof(frame));
221
+
222
+   gs_texrender_reset(frame.render);
223
+
224
+   gs_blend_state_push();
225
+   gs_blend_function(GS_BLEND_ONE, GS_BLEND_ZERO);
226
+
227
+   if (gs_texrender_begin(frame.render, f->cx, f->cy)) {
228
+       uint32_t parent_flags = obs_source_get_output_flags(target);
229
+       bool custom_draw = (parent_flags & OBS_SOURCE_CUSTOM_DRAW) != 0;
230
+       bool async = (parent_flags & OBS_SOURCE_ASYNC) != 0;
231
+       struct vec4 clear_color;
232
+
233
+       vec4_zero(&clear_color);
234
+       gs_clear(GS_CLEAR_COLOR, &clear_color, 0.0f, 0);
235
+       gs_ortho(0.0f, (float)f->cx, 0.0f, (float)f->cy,
236
+               -100.0f, 100.0f);
237
+
238
+       if (target == parent && !custom_draw && !async)
239
+           obs_source_default_render(target);
240
+       else
241
+           obs_source_video_render(target);
242
+
243
+       gs_texrender_end(frame.render);
244
+   }
245
+
246
+   gs_blend_state_pop();
247
+
248
+   circlebuf_push_back(&f->frames, &frame, sizeof(frame));
249
+   draw_frame(f);
250
+   f->processed_frame = true;
251
+
252
+   UNUSED_PARAMETER(effect);
253
+}
254
+
255
+struct obs_source_info gpu_delay_filter = {
256
+   .id                            = "gpu_delay",
257
+   .type                          = OBS_SOURCE_TYPE_FILTER,
258
+   .output_flags                  = OBS_SOURCE_VIDEO,
259
+   .get_name                      = gpu_delay_filter_get_name,
260
+   .create                        = gpu_delay_filter_create,
261
+   .destroy                       = gpu_delay_filter_destroy,
262
+   .update                        = gpu_delay_filter_update,
263
+   .get_properties                = gpu_delay_filter_properties,
264
+   .video_tick                    = gpu_delay_filter_tick,
265
+   .video_render                  = gpu_delay_filter_render
266
+};
267
obs-studio-18.0.2.tar.xz/plugins/obs-filters/obs-filters.c -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/obs-filters.c Changed
17
 
1
@@ -11,6 +11,7 @@
2
 extern struct obs_source_info color_filter;
3
 extern struct obs_source_info scale_filter;
4
 extern struct obs_source_info scroll_filter;
5
+extern struct obs_source_info gpu_delay_filter;
6
 extern struct obs_source_info color_key_filter;
7
 extern struct obs_source_info color_grade_filter;
8
 extern struct obs_source_info sharpness_filter;
9
@@ -30,6 +31,7 @@
10
    obs_register_source(&color_filter);
11
    obs_register_source(&scale_filter);
12
    obs_register_source(&scroll_filter);
13
+   obs_register_source(&gpu_delay_filter);
14
    obs_register_source(&color_key_filter);
15
    obs_register_source(&color_grade_filter);
16
    obs_register_source(&sharpness_filter);
17
obs-studio-18.0.2.tar.xz/plugins/obs-filters/scale-filter.c -> obs-studio-19.0.2.tar.xz/plugins/obs-filters/scale-filter.c Changed
16
 
1
@@ -38,10 +38,10 @@
2
    int                             cy_out;
3
    enum obs_scale_type             sampling;
4
    gs_samplerstate_t               *point_sampler;
5
-   bool                            aspect_ratio_only : 1;
6
-   bool                            target_valid : 1;
7
-   bool                            valid : 1;
8
-   bool                            undistort : 1;
9
+   bool                            aspect_ratio_only;
10
+   bool                            target_valid;
11
+   bool                            valid;
12
+   bool                            undistort;
13
 };
14
 
15
 static const char *scale_filter_name(void *unused)
16
obs-studio-19.0.2.tar.xz/plugins/obs-libfdk/data/locale/bn-BD.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+LibFDK="libfdk AAC এনকোডার"
3
+Bitrate="বিটরেট"
4
+
5
obs-studio-18.0.2.tar.xz/plugins/obs-libfdk/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-libfdk/data/locale/et-EE.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 LibFDK="libfdk AAC kodeerija"
3
 Bitrate="Bitikiirus"
4
+Afterburner="Luba AAC Afterburner"
5
 
6
obs-studio-19.0.2.tar.xz/plugins/obs-libfdk/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+LibFDK="libfdk AAC एनकोडर"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/obs-libfdk/data/locale/ur-PK.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+LibFDK="لابفدک AAC انکوڈر"
3
+
4
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/CMakeLists.txt Changed
9
 
1
@@ -69,6 +69,7 @@
2
    librtmp)
3
 set(obs-outputs_SOURCES
4
    obs-outputs.c
5
+   null-output.c
6
    rtmp-stream.c
7
    rtmp-windows.c
8
    flv-output.c
9
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/ar-SA.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ar-SA.ini Changed
6
 
1
@@ -3,3 +3,4 @@
2
 FLVOutput="اخراج الملف بصيغة FLV"
3
 FLVOutput.FilePath="مسار الملف"
4
 
5
+
6
obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/bn-BD.ini Added
7
 
1
@@ -0,0 +1,5 @@
2
+RTMPStream="RTMP স্ট্রিম"
3
+RTMPStream.DropThreshold="ড্রপ সীমার (মিলিসেকেন্ড)"
4
+Default="পূর্ব-নির্ধারিত"
5
+
6
+
7
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ca-ES.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Camí del fitxer"
3
 Default="Per defecte"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/cs-CZ.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Cesta k souboru"
3
 Default="Výchozí"
4
 
5
+ConnectionTimedOut="Vypršel časový limit připojení. Přesvědčte se, zda jste správně nastavili vysílací službu a že žádná brána firewall neblokuje připojení."
6
+PermissionDenied="Připojení bylo zablokováno. Zkontrolujte, zda má OBS povolen přístup k internetu v nastavení své brány firewall / antiviru."
7
+ConnectionAborted="Připojení bylo přerušeno. Toto obvykle znamená, že nastaly problémy s připojením mezi vámi a vysílací službou."
8
+ConnectionReset="Připojení bylo resetováno druhou stranou. Toto obvykle znamená, že nastaly problémy s připojením mezi vámi a vysílací službou."
9
+HostNotFound="Hostitel nebyl nalezen. Zkontrolujte, zda jste zadali správný vysílací server a že vaše připojení k internetu / DNS funguje jak má."
10
+NoData="Hostitel byl nalezen, ale žádná data požadovaného typu. Toto se může stát, pokud používáte IPv6 adresu, ale vaše vysílací služba podporuje pouze připojení přes svou IPv4 adresu (viz. Nastavení / Rozšířené)."
11
+AddressNotAvailable="Adresa není k dispozici. Možná jste se snažili použít chybnou IP adresu (viz. Nastavení / Rozšířené)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/da-DK.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Filsti"
3
 Default="Standard"
4
 
5
+ConnectionTimedOut="Forbindelsen fik timeout. Tjek venligst at du har opsat en gyldig streaming-tjeneste og at ingen firewall blokerer forbindelsen."
6
+PermissionDenied="Forbindelsen blev blokeret. Tjek venligst indstillingerne for firewall/antivirus for at sikre, at OBS har fuld adgang til Internet."
7
+ConnectionAborted="Forbindelsen blev afbrudt. Dette indikerer typisk et problem med Internetforbindelsen mellem dig og streaming-tjenesten."
8
+ConnectionReset="Forbindelsen blev afbrudt. Dette indikerer typisk et problem med Internetforbindelsen mellem dig og streaming-tjenesten."
9
+HostNotFound="Værtsnavn ikke fundet. Tjek at du har angivet en gyldig streaming-server, og at din Internetforbindelse/DNS fungerer korrekt."
10
+NoData="Værtsnavn fundet, men ingen data af den ønskede type. Dette kan forekomme, hvis du har tildelt en IPv6-adresse, og din streaming-tjeneste kun benytter IPv4-adresser (se Indstillinger/Avanceret)."
11
+AddressNotAvailable="Adresse utilgængelig. Du kan have forsøgt at tildele en ugyldig IP-adresse (se Indstillinger/Avanceret)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/de-DE.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Dateipfad"
3
 Default="Standard"
4
 
5
+ConnectionTimedOut="Zeitüberschreitung bei der Verbindung. Stellen Sie sicher, dass Sie einen gültigen Streaming-Service konfiguriert haben und keine Firewall die Verbindung blockiert."
6
+PermissionDenied="Die Verbindung wurde blockiert. Überprüfen Sie Ihre Firewall / Anti-Virus-Einstellungen, um sicherzustellen, dass OBS vollen Internetzugang hat."
7
+ConnectionAborted="Die Verbindung wurde abgebrochen. Dies bedeutet in der Regel Probleme mit der Internetverbindung zwischen Ihnen und dem Streaming-Dienst."
8
+ConnectionReset="Die Verbindung wurde durch Kommunikationspartner zurückgesetzt. Dies bedeutet in der Regel Probleme mit der Internetverbindung zwischen Ihnen und dem Streaming-Dienst."
9
+HostNotFound="Hostname nicht gefunden. Stellen Sie sicher, dass Sie einen gültigen Streaming-Server eingegeben haben und Ihre Internetverbindung / DNS korrekt arbeiten."
10
+NoData="Hostname gefunden, aber keine Daten des angeforderten Typs. Dies kann auftreten, wenn Sie eine IPv6-Adresse verwenden und Ihr Streaming-Dienst nur über IPv4-Adressen verfügt (siehe Einstellungen / Erweitert)."
11
+AddressNotAvailable="Adresse nicht Verfügbar. Sie haben möglicherweise versucht, eine ungültige IP-Adresse zu verwenden (siehe Einstellungen / Erweitert)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/el-GR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/el-GR.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Διαδρομή Αρχείου"
3
 Default="Προεπιλογή"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/en-US.ini Changed
13
 
1
@@ -3,3 +3,11 @@
2
 FLVOutput="FLV File Output"
3
 FLVOutput.FilePath="File Path"
4
 Default="Default"
5
+
6
+ConnectionTimedOut="The connection timed out. Make sure you've configured a valid streaming service and no firewall is blocking the connection."
7
+PermissionDenied="The connection was blocked. Check your firewall / anti-virus settings to make sure OBS is allowed full internet access."
8
+ConnectionAborted="The connection was aborted. This usually indicates internet connection problems between you and the streaming service."
9
+ConnectionReset="The connection was reset by the peer. This usually indicates internet connection problems between you and the streaming service."
10
+HostNotFound="Hostname not found. Make sure you entered a valid streaming server and your internet connection / DNS are working correctly."
11
+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)."
12
+AddressNotAvailable="Address not available. You may have tried to bind to an invalid IP address (see  Settings / Advanced)."
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/es-ES.ini Changed
9
 
1
@@ -4,3 +4,7 @@
2
 FLVOutput.FilePath="Ruta de archivo"
3
 Default="Por defecto"
4
 
5
+PermissionDenied="La conexión ha sido bloqueada. Compruebe su configuración del cortafuegos o anti-virus para asegurarse de que OBS tiene acceso completo a Internet."
6
+ConnectionAborted="La conexión ha sido abortada. Normalmente esto indica que hay problemas de conexión entre tu equipo y el servicio de transmisión."
7
+AddressNotAvailable="Dirección no disponible. Puede que hayas intentado enlazar con una dirección IP no valida (vea Configuración / Avanzado)."
8
+
9
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/et-EE.ini Changed
8
 
1
@@ -1,2 +1,6 @@
2
 RTMPStream="RTMP voogedastus"
3
+FLVOutput="FLV faili väljund"
4
+FLVOutput.FilePath="Faili tee"
5
+Default="Vaikeseade"
6
+
7
 
8
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/eu-ES.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Fitxategiaren bidea"
3
 Default="Lehenetsia"
4
 
5
+ConnectionTimedOut="Konexiorik ez dago. Begiratu baliozko transmisio zerbitzua ezarrita duzun eta inongo suebakirik ez duen konexioa galarazten ari."
6
+PermissionDenied="Konexioa blokeatuta dago. Begiratu zure suebakiaren / antibirusaren ezarpenak egiaztatzeko OBSek Internetera konektatzeko baimena duela."
7
+ConnectionAborted="Konexioa galarazita dago. Transmisioaren zerbitzurekin konektatzeko arazoak izaten dira ohiko arrazoiak."
8
+ConnectionReset="Pareak berrezarri du konexioa. Transmisioaren zerbitzurekin konektatzeko arazoak izaten dira ohiko arrazoiak."
9
+HostNotFound="Ez da ostalari-izena topatu. Egiaztatu baliozko transmisio zerbitzaria jarri duzula eta zure Internet-konexioa eta DNSa zuzen ari direla lanean."
10
+NoData="Ostalari-izena topatu da baina eskatutako datu motatik batere ez. Gerta daiteke IPv6 helbide bat eskatu izana eta zure transmisio zerbitzuak bakarrik onartzea IPv4 helbideak (Ikus ezarpen aurreratuak)."
11
+AddressNotAvailable="Helbidea ez dago eskuragarri. Agian saiatu zara baliozkoa ez den IP helbide batera konektatzen (ikus ezarpen aurreratuak)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/fi-FI.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Tiedostopolku"
3
 Default="Oletusarvo"
4
 
5
+ConnectionTimedOut="Yhteys keskeytyi. Varmista että olet asettanut lähetyspalvelun oikein ja palomuuri ei estä yhteyttä."
6
+PermissionDenied="Yhteys estettiin. Tarkista palomuurin / virusturvan asetukset ja varmista, että OBS:lle on sallittu täydet yhteydet."
7
+ConnectionAborted="Yhteys katkaistiin. Tämä tarkoittaa yleensä yhteysongelmia sinun ja lähetyspalvelun välillä."
8
+ConnectionReset="Yhteys katkaistiin. Tämä tarkoittaa yleensä yhteysongelmia sinun ja lähetyspalvelun välillä."
9
+HostNotFound="Isäntänimeä ei löytynyt. Varmista että syötit voimassaolevan lähetyspalvelimen ja että internet-yhteytesi tai DNS-palvelimesi toimivat oikein."
10
+NoData="Isäntänimi löytyi, mutta ei oikeanlaista pyydettyä dataa. Näin voi tapahtua jos olet rajannut yhteytesi IPv6 -osoitteeseen ja lähetyspalvelusi tukee vain IPv4-osoitteita (Katso Asetukset / Lisäasetukset)."
11
+AddressNotAvailable="Osoite ei ole saatavilla. Voi olla että yritit kiinnittää väärän IP-osoitteen (Katso Asetukset / Lisäasetukset)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/fr-FR.ini Changed
9
 
1
@@ -4,3 +4,7 @@
2
 FLVOutput.FilePath="Chemin du fichier"
3
 Default="Interface par défaut"
4
 
5
+ConnectionTimedOut="La connexion à expiré. Assurez-vous que vous avez configuré un service de streaming valide et qu'aucun pare-feu ne bloque la connexion."
6
+PermissionDenied="La connexion a été bloquée. Vérifiez vos paramètres de pare-feu / antivirus pour vous assurer OBS est autorisé à avoir l'accès complet d'internet."
7
+ConnectionAborted="La connexion à été interrompue. Cela indique généralement des problèmes de connexion internet entre vous et le service de streaming."
8
+
9
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/gl-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/gl-ES.ini Changed
6
 
1
@@ -3,3 +3,4 @@
2
 FLVOutput="Ficheiro de saída FLV"
3
 FLVOutput.FilePath="Camiño do ficheiro"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/he-IL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/he-IL.ini Changed
8
 
1
@@ -2,4 +2,6 @@
2
 RTMPStream.DropThreshold="הורד סף (אלפיות שניה)"
3
 FLVOutput="קובץ פלט FLV"
4
 FLVOutput.FilePath="נתיב קובץ"
5
+Default="ברירת מחדל"
6
+
7
 
8
obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/hi-IN.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+RTMPStream="RTMP स्ट्रीम"
3
+
4
+
5
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/hr-HR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/hr-HR.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Putanja datoteke"
3
 Default="Podrazumevani"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/hu-HU.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Fájl elérési útja"
3
 Default="Alapértelmezett"
4
 
5
+ConnectionTimedOut="A kapcsolat időtúllépés miatt megszakadt. Győződjön meg róla, hogy a beállított stream szolgáltatás érvényes és hogy, tűzfal nem blokkolja a kapcsolatot."
6
+PermissionDenied="A kapcsolat blokkolásra került. Ellenőrizze a tűzfal / antivírus beállításait, hogy az OBS számára engedélyezve van e a hozzáférés."
7
+ConnectionAborted="A kapcsolat megszakadt. Ez általában azt jelzi, hogy az internetkapcsolat a stream kiszolgáló és ön között problémákkal néz szembe."
8
+ConnectionReset="A kapcsolat a peer által megszakítva. Ez általában azt jelzi, hogy az internetkapcsolat a stream kiszolgáló és ön között problémákkal néz szembe."
9
+HostNotFound="A hostnév nem található. Győződjön meg róla, hogy érvényes stream szervert adott meg és az internetkapcsolata / DNS szerver megfelelően működik."
10
+NoData="Hostnév megtalálva, viszont a kért típusú állomány nem elérhető. Ez akkor fordul elő, ha IPv6 címhez van rendelve és a stream kiszolgálójának csak IPv4 címei állnak rendelkezésre (lásd: Beállítások / Haladó)."
11
+AddressNotAvailable="A cím nem elérhető. Valószínűleg egy érvénytelen IP címet adott meg (Lásd: Beállítások / Haladó)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/it-IT.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Destinazione file"
3
 Default="Predefinito"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ja-JP.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="ファイルのパス"
3
 Default="既定"
4
 
5
+ConnectionTimedOut="接続がタイムアウトしました。 有効なストリーミングサービスを設定し、ファイアウォールが接続をブロックしていないことを確認してください。"
6
+PermissionDenied="接続がブロックされました。 ファイアウォール/アンチウィルスの設定をチェックして、OBSにインターネットへのアクセスがすべて許可されていることを確認してください。"
7
+ConnectionAborted="接続は中止されました。 ストリーミングサービスとの間のインターネット接続に問題があることを示しています。"
8
+ConnectionReset="接続はピアによってリセットされました。 ストリーミングサービスとの間のインターネット接続に問題があることを示しています。"
9
+HostNotFound="ホスト名が見つかりません。 有効なストリーミングサーバーを入力していることとインターネット接続/DNSが正しく機能していることを確認してください。"
10
+NoData="ホスト名が見つかりましたが、要求されたタイプのデータがありません。 これはIPv6アドレスにバインドしている状態でストリーミングサービスにIPv4アドレスしかない場合に発生します。  (設定 / 詳細設定 を参照)"
11
+AddressNotAvailable="アドレスを利用できません。 無効なIPアドレスにバインドしようとした可能性があります。 (設定 / 詳細設定 を参照)"
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ko-KR.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="파일 경로"
3
 Default="기본값"
4
 
5
+ConnectionTimedOut="연결 시간이 초과하였습니다. 방송 정보가 정확히 입력되었는지 확인하고, 방화벽 때문에 연결에 문제가 있는지 점검하십시오."
6
+PermissionDenied="연결이 차단되었습니다. 방화벽이나 백신 설정에서 OBS의 인터넷 연결을 가로막고 있는지 확인하십시오."
7
+ConnectionAborted="연결이 취소되었습니다. 보통 사용자와 방송 서비스 간의 연결 상태에 문제가 있음을 의미합니다."
8
+ConnectionReset="상호 연결 문제로 초기화되었습니다. 보통 사용자와 방송 서비스 간의 연결 상태에 문제가 있음을 의미합니다."
9
+HostNotFound="호스트 이름을 찾을 수 없습니다. 방송 서버 정보가 제대로 입력되었는지 확인하고, 인터넷 접속 혹은 DNS가 제대로 작동하고 있는지 점검하십시오."
10
+NoData="호스트 이름은 찾았지만 요청한 형식의 데이터가 없습니다. 이 문제는 보통 사용자가 IPv6 형식의 주소를 고정하여 사용하면서 IPv4 형식의 주소만 지원하는 방송 서비스에 접속을 시도한 경우 나타납니다 (설정 / 고급 창을 확인하십시오)."
11
+AddressNotAvailable="주소를 사용할 수 없습니다. 잘못된 IP주소를 고정하고 있습니다 (설정 / 고급 창을 확인하십시오)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/nb-NO.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/nb-NO.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Filbane"
3
 Default="Standard"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/nl-NL.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Bestandspad"
3
 Default="Standaard"
4
 
5
+ConnectionTimedOut="Er is een time-out opgetreden in de verbinding. Controleer dat je een geldige streaming service hebt ingesteld en dat er geen firewall de verbinding blokkeert."
6
+PermissionDenied="De verbinding was geblokkeerd. Controleer je firewall/anti-virus instellingen om te controleren dat OBS volledige internettoegang heeft."
7
+ConnectionAborted="De verbinding was afgebroken. Dit duidt meestal op verbindingsproblemen tussen jou en de streaming service."
8
+ConnectionReset="De verbinding was gereset door de andere partij. Dit duidt meestal op verbindingsproblemen tussen jou en de streaming service."
9
+HostNotFound="Hostname niet gevonden. Controleer dat je een geldige streaming service hebt ingevuld en dat je internetverbinding / DNS correct werken."
10
+NoData="Hostname gevonden, maar geen data van het verwachte type. Dit kan gebeuren als je aan een IPv6 adres hebt gebonden, en je streaming service alleen IPv4 adressen heeft (zie Instellingen / Geavanceerd)."
11
+AddressNotAvailable="Adres niet beschikbaar. Je hebt misschien geprobeerd om aan een ongeldig IP adres te binden (zie Instellingen / Geavanceerd)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/pl-PL.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Scieżka do pliku"
3
 Default="Domyślne"
4
 
5
+ConnectionTimedOut="Upłynął limit czasu połączenia. Upewnij się, że usługa strumieniowania jest poprawnie skonfigurowana a zapora internetowa nie blokuje połączenia."
6
+PermissionDenied="Połączenie zostało zablokowane. Sprawdź stan zapory internetowej / ustawienia antywirusowe, aby upewnić się, że OBS ma pełny dostęp do internetu."
7
+ConnectionAborted="Połączenie zostało przerwane. Wskazuje to najczęściej na problemy w połączeniu między Tobą a usługą strumieniowania."
8
+ConnectionReset="Połączenie zostało przerwane po stronie serwera. Wskazuje to najczęściej na problemy w połączeniu między Tobą a usługą strumieniowania."
9
+HostNotFound="Nie znaleziono nazwy hosta. Upewnij się, że wprowadzono prawidłowe dane serwera przesyłania strumieniowego i połączenie z internetem / DNS są poprawne."
10
+NoData="Nazwa serwera została znaleziona ale nie stwierdzono poprawności odbieranych danych. Dzieje się tak najczęściej po przypisaniu aplikacji do adresu IPv6, gdy usługa strumieniowania obsługuje jedynie adresy IPv4 (zobacz Ustawienia -> Zaawansowane)."
11
+AddressNotAvailable="Adres IP niedostępny. Być może powiązano aplikację z nieprawidłowym adresem IP (zobacz Ustawienia -> Zaawansowane)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/pt-BR.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Caminho do Arquivo"
3
 Default="Padrão"
4
 
5
+ConnectionTimedOut="A conexão expirou. Verifique se você configurou um serviço de transmissão válido e nenhum firewall está bloqueando a conexão."
6
+PermissionDenied="A conexão foi bloqueada. Verifique seu firewall / configurações de antivírus para certificar-se do acesso completo do OBS à internet."
7
+ConnectionAborted="A conexão foi abortada. Isso geralmente indica problemas de conexão entre você e o serviço de transmissão."
8
+ConnectionReset="A conexão foi redefinida pelo usuário. Isso geralmente indica problemas de conexão entre você e o serviço de transmissão."
9
+HostNotFound="Host não encontrado. Verifique se você inseriu um servidor válido de transmissão e se sua conexão de internet / DNS estão funcionando corretamente."
10
+NoData="Host encontrado, mas não há dados do tipo solicitado. Isso pode ocorrer se você tiver vinculado a um endereço IPv6 e seu serviço de transmissão tem apenas endereços IPv4 (consulte Configurações / Avançado)."
11
+AddressNotAvailable="Endereço não disponível. Você pode ter tentado se vincular a um endereço IP inválido (consulte Configurações / Avançado)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/pt-PT.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/pt-PT.ini Changed
6
 
1
@@ -3,3 +3,4 @@
2
 FLVOutput="Ficheiro de saída FLV"
3
 FLVOutput.FilePath="Caminho do ficheiro"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/ro-RO.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ro-RO.ini Changed
6
 
1
@@ -3,3 +3,4 @@
2
 FLVOutput="Ieșire fișier FLV"
3
 FLVOutput.FilePath="Calea fișierului"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ru-RU.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Путь к файлу"
3
 Default="По умолчанию"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/sk-SK.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/sk-SK.ini Changed
6
 
1
@@ -3,3 +3,4 @@
2
 FLVOutput.FilePath="Cesta k súboru"
3
 Default="Základné"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/sl-SI.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/sl-SI.ini Changed
6
 
1
@@ -3,3 +3,4 @@
2
 FLVOutput="Izhod datoteke FLV"
3
 FLVOutput.FilePath="Pot datoteke"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/sr-CS.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/sr-CS.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Putanja datoteke"
3
 Default="Podrazumevani"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/sr-SP.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/sr-SP.ini Changed
6
 
1
@@ -4,3 +4,4 @@
2
 FLVOutput.FilePath="Путања датотеке"
3
 Default="Подразумевана"
4
 
5
+
6
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/sv-SE.ini Changed
12
 
1
@@ -4,3 +4,10 @@
2
 FLVOutput.FilePath="Sökväg"
3
 Default="Standard"
4
 
5
+ConnectionTimedOut="Anslutningen förlorades. Se till att du har konfigurerat en giltig strömningstjänst och att inga brandväggar blockerar anslutningen."
6
+PermissionDenied="Anslutningen blockerades. Kontrollera inställningarna för din brandvägg/antivirusprogram för att se till att OBS har fullständig åtkomst till Internet."
7
+ConnectionAborted="Anslutningen avbröts. Detta kan indikera problem med Internetanslutningen mellan dig och strömningstjänsten."
8
+HostNotFound="Värdnamnet hittades inte. Se till att du har angivit en giltigt strömningstjänst och att din Internetanslutning / DNS fungerar på rätt sätt."
9
+NoData="Värdnamnet hittades, men ingen data av den begärda typen. Detta kan hända om du ansluter till en IPv6-adress och din strömningstjänst endast har IPv4-adresser (gå till Inställningar / Avancerat)."
10
+AddressNotAvailable="Adressen är inte tillgänglig. Du kanske försökte ansluta till en ogiltig  IP-adress (gå till  Inställningar / Avancerat)."
11
+
12
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/th-TH.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/th-TH.ini Changed
5
 
1
@@ -1,2 +1,3 @@
2
 FLVOutput.FilePath="ตำแหน่งไฟล์"
3
 
4
+
5
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/tr-TR.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Dosya Yolu"
3
 Default="Varsayılan"
4
 
5
+ConnectionTimedOut="Bağlantı zaman aşımına uğradı. Geçerli bir yayın servisi yapılandırdığınızdan ve bağlantıyı engelleyen bir güvenlik duvarı olmadığından emin olun."
6
+PermissionDenied="Bağlantı engellendi. Güvenlik duvarı / virüs koruma ayarlarınızı OBS'ye tam internet erişimi verildiğinden emin olmak için kontrol edin."
7
+ConnectionAborted="Bağlantı iptal edildi. Bu genellikle sizin ve yayın servisinin arasındaki internet bağlantısı sorununa işaret eder."
8
+ConnectionReset="Bağlantı karşı taraftan sıfırlandı. Bu genellikle sizin ve yayın servisinin arasındaki internet bağlantısı sorununa işaret eder."
9
+HostNotFound="Ana bilgisayar adı bulunamadı. Geçerli bir yayın sunucusu girdiğinizden ve internet bağlantınızın / DNS'nizin düzgün çalıştığını emin olun."
10
+NoData="Ana bilgisayar adı bulundu, ancak istenen türde veri bulunamadı. Bu bir IPv6 adresine bağlamış ve yayın servisinizin sadece IPv4 adresleri varsa oluşabilir (bkz: Ayarlar / Gelişmiş)."
11
+AddressNotAvailable="Adres kullanılamaz. Geçersiz bir IP adresi bağlamayı denemiş olabilirsiniz (bakın: Ayarlar / Gelişmiş)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/uk-UA.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="Шлях до файлу"
3
 Default="За замовчанням"
4
 
5
+ConnectionTimedOut="Вичерпано час підключення. Переконайтеся, що ви вказали правильний сервіс трансляцій і брандмауер не блокує з'єднання."
6
+PermissionDenied="З'єднання було заблоковано. Перевірте налаштування вашого брандмауеру / антивірусу, щоб переконатися, що OBS має повний доступ до Інтернету."
7
+ConnectionAborted="З'єднання було перервано. Зазвичай свідчить про проблеми з Інтернет підключенням між вами і постачальником з сервісу трансляцій."
8
+ConnectionReset="З'єднання було скинуте рівноправним вузлом (reset by peer). Зазвичай свідчить про проблеми з Інтернет підключенням між вами і постачальником з сервісу трансляцій."
9
+HostNotFound="Ім'я хоста, не знайдено. Переконайтеся, що ви ввели дійсний сервер трансляцій і підключення до Інтернету / DNS працює правильно."
10
+NoData="Ім'я хоста знайдено, але нема жодних даних вказаного типу. Це може статися, якщо ви вказали прив'язку до IPv6-адресу, але ваш сервіс трансляцій підтримує лише адреси IPv4 (див. Налаштування / Розширені)."
11
+AddressNotAvailable="Адреса недоступна. Напевно ви спробували прив'язатись до адаптера з неіснуючую IP-адресою (див. Налаштування / Розширені)."
12
+
13
obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/ur-PK.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+RTMPStream="رٹمپ اسٹریم"
3
+
4
+
5
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/vi-VN.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/vi-VN.ini Changed
14
 
1
@@ -1,3 +1,12 @@
2
+RTMPStream="RTMP Stream"
3
+RTMPStream.DropThreshold="Drop Threshold (mili giây)"
4
+FLVOutput="FLV tập tin đầu ra"
5
 FLVOutput.FilePath="Đường dẫn tệp"
6
 Default="Mặc định"
7
 
8
+PermissionDenied="Kết nối đã bị chặn. Hãy kiểm tra tường lửa / cài đặt chống virus để đảm bảo rằng OBS được cho phép truy cập internet đầy đủ."
9
+ConnectionAborted="Kết nối đã bị hủy bỏ. Điều này thường chỉ ra kết nối internet giữa bạn và dịch vụ trực tuyến có vấn đề."
10
+HostNotFound="Tên máy chủ không tìm thấy. Đảm bảo rằng bạn đã nhập vào một máy chủ stream hợp lệ và kết nối internet của bạn / DNS đang hoạt động tốt."
11
+NoData="Tên máy chủ được tìm thấy nhưng không có dữ liệu được yêu cầu. Điều này có thể xảy ra nếu bạn sử dụng địa chỉ IPv6 và dịch vụ stream của bạn chỉ có địa chỉ IPv4 (xem Cài đặt / Nâng cao)."
12
+AddressNotAvailable="Địa chỉ không có sẵn. Bạn có thể đã cố gắng liên kết với một địa chỉ IP không hợp lệ (xem Cài đặt / Nâng cao)."
13
+
14
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/zh-CN.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="文件路径"
3
 Default="默认"
4
 
5
+ConnectionTimedOut="连接超时. 请确保您已经配置了一个有效的流媒体服务并且没有防火墙阻止连接."
6
+PermissionDenied="连接被阻止. 检查您的防火墙 / 防病毒设置以确保允许 OBS 自由访问互联网."
7
+ConnectionAborted="连接被中止. 这通常表明你和流媒体服务之间的互联网连接问题."
8
+ConnectionReset="对方重置连接. 这通常表明你和流媒体服务之间的互联网连接问题."
9
+HostNotFound="找不到 Hostname. 请确保您输入一个有效的流媒体服务器并且您的互联网连接 / DNS 工作正常."
10
+NoData="Hostname 发现, 但没有请求的类型的数据的主机名. 这有可能因为你绑定到 IPv6 地址并且你的流媒体服务仅有 IPv4 地址 (请参阅设置 / 高级)."
11
+AddressNotAvailable="没有可用的地址. 你可能在试图绑定到一个无效的 IP 地址 (请参阅设置 / 高级)."
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/data/locale/zh-TW.ini Changed
13
 
1
@@ -4,3 +4,11 @@
2
 FLVOutput.FilePath="檔案路徑"
3
 Default="預設"
4
 
5
+ConnectionTimedOut="連線逾時。請確定已經設定了一個有效的串流服務並且沒有防火牆在阻擋連接。"
6
+PermissionDenied="連線被阻擋。請檢查防火牆 / 防毒設定以確保 OBS 有完整的網際網路存取權限。"
7
+ConnectionAborted="連線被中止。通常這代表您與串流服務之間有網際網路連線問題。"
8
+ConnectionReset="連線被對方重置。通常這代表您與串流服務之間有網際網路連線問題。"
9
+HostNotFound="找不到主機名稱。請確定輸入了一個有效的串流服務器且網路連線跟 DNS 工作正常。"
10
+NoData="找到主機名稱,但沒有要求類型的資料。這可能發生在您綁定於 IPv6 位址但串流服務只有 IPv4 位址 (請看 設定/進階)。"
11
+AddressNotAvailable="位址不可用。可能因為嘗試綁定到一個不正確 IP 位址(請確認 設定/進階 的設定)。"
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/librtmp/rtmp.c -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/librtmp/rtmp.c Changed
159
 
1
@@ -32,6 +32,8 @@
2
 #include "rtmp_sys.h"
3
 #include "log.h"
4
 
5
+#include <util/platform.h>
6
+
7
 #ifdef CRYPTO
8
 
9
 #ifdef __APPLE__
10
@@ -650,7 +652,7 @@
11
 }
12
 
13
 static int
14
-add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host, int port, socklen_t addrlen_hint)
15
+add_addr_info(struct sockaddr_storage *service, socklen_t *addrlen, AVal *host, int port, socklen_t addrlen_hint, int *socket_error)
16
 {
17
     char *hostname;
18
     int ret = TRUE;
19
@@ -691,6 +693,7 @@
20
 #define gai_strerrorA gai_strerror
21
 #endif
22
         RTMP_Log(RTMP_LOGERROR, "Could not resolve %s: %s (%d)", hostname, gai_strerrorA(GetSockError()), GetSockError());
23
+        *socket_error = GetSockError();
24
         ret = FALSE;
25
         goto finish;
26
     }
27
@@ -706,23 +709,30 @@
28
         }
29
     }
30
 
31
-   if (!*addrlen)
32
-   {
33
-       for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
34
-       {
35
+    if (!*addrlen)
36
+    {
37
+        for (ptr = result; ptr != NULL; ptr = ptr->ai_next)
38
+        {
39
             if (ptr->ai_family == AF_INET6 && (!addrlen_hint || ptr->ai_addrlen == addrlen_hint))
40
-           {
41
-               memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
42
-               *addrlen = (socklen_t)ptr->ai_addrlen;
43
-               break;
44
-           }
45
-       }
46
-   }
47
+            {
48
+                memcpy(service, ptr->ai_addr, ptr->ai_addrlen);
49
+                *addrlen = (socklen_t)ptr->ai_addrlen;
50
+                break;
51
+            }
52
+        }
53
+    }
54
 
55
     freeaddrinfo(result);
56
 
57
     if (service->ss_family == AF_UNSPEC || *addrlen == 0)
58
     {
59
+        // since we're handling multiple addresses internally, fake the correct error response
60
+#ifdef _WIN32
61
+        *socket_error = WSANO_DATA;
62
+#else
63
+        *socket_error = ENODATA;
64
+#endif
65
+
66
         RTMP_Log(RTMP_LOGERROR, "Could not resolve server '%s': no valid address found", hostname);
67
         ret = FALSE;
68
         goto finish;
69
@@ -768,11 +778,14 @@
70
                 int err = GetSockError();
71
                 RTMP_Log(RTMP_LOGERROR, "%s, failed to bind socket: %s (%d)",
72
                          __FUNCTION__, socketerror(err), err);
73
+                r->last_error_code = err;
74
                 RTMP_Close(r);
75
                 return FALSE;
76
             }
77
         }
78
 
79
+        uint64_t connect_start = os_gettime_ns();
80
+
81
         if (connect(r->m_sb.sb_socket, service, addrlen) < 0)
82
         {
83
             int err = GetSockError();
84
@@ -785,10 +798,13 @@
85
             else
86
                 RTMP_Log(RTMP_LOGERROR, "%s, failed to connect socket: %s (%d)",
87
                      __FUNCTION__, socketerror(err), err);
88
+            r->last_error_code = err;
89
             RTMP_Close(r);
90
             return FALSE;
91
         }
92
 
93
+        r->connect_time_ms = (int)((os_gettime_ns() - connect_start) / 1000000);
94
+
95
         if (r->Link.socksport)
96
         {
97
             RTMP_Log(RTMP_LOGDEBUG, "%s ... SOCKS negotiation", __FUNCTION__);
98
@@ -906,6 +922,8 @@
99
     struct sockaddr_storage service;
100
     socklen_t addrlen = 0;
101
     socklen_t addrlen_hint = 0;
102
+    int socket_error = 0;
103
+
104
     if (!r->Link.hostname.av_len)
105
         return FALSE;
106
 
107
@@ -914,6 +932,7 @@
108
     h = gethostbyname("localhost");
109
     if (!h && GetLastError() == WSAHOST_NOT_FOUND)
110
     {
111
+        r->last_error_code = WSAHOST_NOT_FOUND;
112
         RTMP_Log(RTMP_LOGERROR, "RTMP_Connect: Connection test failed. This error is likely caused by Comodo Internet Security running OBS in sandbox mode. Please add OBS to the Comodo automatic sandbox exclusion list, restart OBS and try again (11001).");
113
         return FALSE;
114
     }
115
@@ -927,14 +946,20 @@
116
     if (r->Link.socksport)
117
     {
118
         /* Connect via SOCKS */
119
-        if (!add_addr_info(&service, &addrlen, &r->Link.sockshost, r->Link.socksport, addrlen_hint))
120
+        if (!add_addr_info(&service, &addrlen, &r->Link.sockshost, r->Link.socksport, addrlen_hint, &socket_error))
121
+        {
122
+            r->last_error_code = socket_error;
123
             return FALSE;
124
+        }
125
     }
126
     else
127
     {
128
         /* Connect directly */
129
-        if (!add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port, addrlen_hint))
130
+        if (!add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port, addrlen_hint, &socket_error))
131
+        {
132
+            r->last_error_code = socket_error;
133
             return FALSE;
134
+        }
135
     }
136
 
137
     if (!RTMP_Connect0(r, (struct sockaddr *)&service, addrlen))
138
@@ -951,9 +976,10 @@
139
     unsigned long addr;
140
     struct sockaddr_storage service;
141
     socklen_t addrlen = 0;
142
+    int socket_error = 0;
143
     memset(&service, 0, sizeof(service));
144
 
145
-    add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port, 0);
146
+    add_addr_info(&service, &addrlen, &r->Link.hostname, r->Link.port, 0, &socket_error);
147
 
148
     // not doing IPv6 socks
149
     if (service.ss_family == AF_INET6)
150
@@ -1436,6 +1462,8 @@
151
             if (sockerr == EINTR && !RTMP_ctrlC)
152
                 continue;
153
 
154
+            r->last_error_code = sockerr;
155
+
156
             RTMP_Close(r);
157
             n = 1;
158
             break;
159
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/librtmp/rtmp.h -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/librtmp/rtmp.h Changed
10
 
1
@@ -324,6 +324,8 @@
2
         RTMPPacket m_write;
3
         RTMPSockBuf m_sb;
4
         RTMP_LNK Link;
5
+        int connect_time_ms;
6
+        int last_error_code;
7
     } RTMP;
8
 
9
     int RTMP_ParseURL(const char *url, int *protocol, AVal *host,
10
obs-studio-19.0.2.tar.xz/plugins/obs-outputs/null-output.c Added
101
 
1
@@ -0,0 +1,99 @@
2
+/******************************************************************************
3
+    Copyright (C) 2017 by Hugh Bailey <obs.jim@gmail.com>
4
+
5
+    This program is free software: you can redistribute it and/or modify
6
+    it under the terms of the GNU General Public License as published by
7
+    the Free Software Foundation, either version 2 of the License, or
8
+    (at your option) any later version.
9
+
10
+    This program is distributed in the hope that it will be useful,
11
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
+    GNU General Public License for more details.
14
+
15
+    You should have received a copy of the GNU General Public License
16
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
+******************************************************************************/
18
+
19
+#include <util/threading.h>
20
+#include <obs-module.h>
21
+
22
+struct null_output {
23
+   obs_output_t *output;
24
+
25
+   pthread_t stop_thread;
26
+   bool stop_thread_active;
27
+};
28
+
29
+static const char *null_output_getname(void *unused)
30
+{
31
+   UNUSED_PARAMETER(unused);
32
+   return "Null Encoding Output";
33
+}
34
+
35
+static void *null_output_create(obs_data_t *settings, obs_output_t *output)
36
+{
37
+   struct null_output *context = bzalloc(sizeof(*context));
38
+   context->output = output;
39
+   UNUSED_PARAMETER(settings);
40
+   return context;
41
+}
42
+
43
+static void null_output_destroy(void *data)
44
+{
45
+   struct null_output *context = data;
46
+   if (context->stop_thread_active)
47
+       pthread_join(context->stop_thread, NULL);
48
+   bfree(context);
49
+}
50
+
51
+static bool null_output_start(void *data)
52
+{
53
+   struct null_output *context = data;
54
+
55
+   if (!obs_output_can_begin_data_capture(context->output, 0))
56
+       return false;
57
+   if (!obs_output_initialize_encoders(context->output, 0))
58
+       return false;
59
+
60
+   if (context->stop_thread_active)
61
+       pthread_join(context->stop_thread, NULL);
62
+
63
+   obs_output_begin_data_capture(context->output, 0);
64
+   return true;
65
+}
66
+
67
+static void *stop_thread(void *data)
68
+{
69
+   struct null_output *context = data;
70
+   obs_output_end_data_capture(context->output);
71
+   context->stop_thread_active = false;
72
+   return NULL;
73
+}
74
+
75
+static void null_output_stop(void *data, uint64_t ts)
76
+{
77
+   struct null_output *context = data;
78
+   UNUSED_PARAMETER(ts);
79
+
80
+   context->stop_thread_active = pthread_create(&context->stop_thread,
81
+           NULL, stop_thread, data) == 0;
82
+}
83
+
84
+static void null_output_data(void *data, struct encoder_packet *packet)
85
+{
86
+   struct null_output *context = data;
87
+   UNUSED_PARAMETER(packet);
88
+}
89
+
90
+struct obs_output_info null_output_info = {
91
+   .id                 = "null_output",
92
+   .flags              = OBS_OUTPUT_AV |
93
+                         OBS_OUTPUT_ENCODED,
94
+   .get_name           = null_output_getname,
95
+   .create             = null_output_create,
96
+   .destroy            = null_output_destroy,
97
+   .start              = null_output_start,
98
+   .stop               = null_output_stop,
99
+   .encoded_packet     = null_output_data
100
+};
101
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/obs-outputs.c -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/obs-outputs.c Changed
17
 
1
@@ -9,6 +9,7 @@
2
 OBS_MODULE_USE_DEFAULT_LOCALE("obs-outputs", "en-US")
3
 
4
 extern struct obs_output_info rtmp_output_info;
5
+extern struct obs_output_info null_output_info;
6
 extern struct obs_output_info flv_output_info;
7
 
8
 bool obs_module_load(void)
9
@@ -19,6 +20,7 @@
10
 #endif
11
 
12
    obs_register_output(&rtmp_output_info);
13
+   obs_register_output(&null_output_info);
14
    obs_register_output(&flv_output_info);
15
    return true;
16
 }
17
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/rtmp-stream.c -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/rtmp-stream.c Changed
225
 
1
@@ -378,6 +378,64 @@
2
    return timeout || packet->sys_dts_usec >= (int64_t)stream->stop_ts;
3
 }
4
 
5
+static void set_output_error(struct rtmp_stream *stream)
6
+{
7
+   const char *msg = NULL;
8
+#ifdef _WIN32
9
+   switch (stream->rtmp.last_error_code)
10
+   {
11
+   case WSAETIMEDOUT:
12
+       msg = obs_module_text("ConnectionTimedOut");
13
+       break;
14
+   case WSAEACCES:
15
+       msg = obs_module_text("PermissionDenied");
16
+       break;
17
+   case WSAECONNABORTED:
18
+       msg = obs_module_text("ConnectionAborted");
19
+       break;
20
+   case WSAECONNRESET:
21
+       msg = obs_module_text("ConnectionReset");
22
+       break;
23
+   case WSAHOST_NOT_FOUND:
24
+       msg = obs_module_text("HostNotFound");
25
+       break;
26
+   case WSANO_DATA:
27
+       msg = obs_module_text("NoData");
28
+       break;
29
+   case WSAEADDRNOTAVAIL:
30
+       msg = obs_module_text("AddressNotAvailable");
31
+       break;
32
+   }
33
+#else
34
+   switch (stream->rtmp.last_error_code)
35
+   {
36
+   case ETIMEDOUT:
37
+       msg = obs_module_text("ConnectionTimedOut");
38
+       break;
39
+   case EACCES:
40
+       msg = obs_module_text("PermissionDenied");
41
+       break;
42
+   case ECONNABORTED:
43
+       msg = obs_module_text("ConnectionAborted");
44
+       break;
45
+   case ECONNRESET:
46
+       msg = obs_module_text("ConnectionReset");
47
+       break;
48
+   case HOST_NOT_FOUND:
49
+       msg = obs_module_text("HostNotFound");
50
+       break;
51
+   case NO_DATA:
52
+       msg = obs_module_text("NoData");
53
+       break;
54
+   case EADDRNOTAVAIL:
55
+       msg = obs_module_text("AddressNotAvailable");
56
+       break;
57
+   }
58
+#endif
59
+
60
+   obs_output_set_last_error(stream->output, msg);
61
+}
62
+
63
 static void *send_thread(void *data)
64
 {
65
    struct rtmp_stream *stream = data;
66
@@ -428,6 +486,7 @@
67
        stream->rtmp.m_bCustomSend = false;
68
    }
69
 
70
+   set_output_error(stream);
71
    RTMP_Close(&stream->rtmp);
72
 
73
    if (!stopping(stream)) {
74
@@ -571,8 +630,10 @@
75
        int one = 1;
76
 #ifdef _WIN32
77
        if (ioctlsocket(stream->rtmp.m_sb.sb_socket, FIONBIO, &one)) {
78
+           stream->rtmp.last_error_code = WSAGetLastError();
79
 #else
80
        if (ioctl(stream->rtmp.m_sb.sb_socket, FIONBIO, &one)) {
81
+           stream->rtmp.last_error_code = errno;
82
 #endif
83
            warn("Failed to set non-blocking socket");
84
            return OBS_OUTPUT_ERROR;
85
@@ -644,6 +705,7 @@
86
        if (!send_meta_data(stream, idx++, &next)) {
87
            warn("Disconnected while attempting to connect to "
88
                 "server.");
89
+           set_output_error(stream);
90
            return OBS_OUTPUT_DISCONNECTED;
91
        }
92
    }
93
@@ -767,8 +829,11 @@
94
    win32_log_interface_type(stream);
95
 #endif
96
 
97
-   if (!RTMP_Connect(&stream->rtmp, NULL))
98
+   if (!RTMP_Connect(&stream->rtmp, NULL)) {
99
+       set_output_error(stream);
100
        return OBS_OUTPUT_CONNECT_FAILED;
101
+   }
102
+
103
    if (!RTMP_ConnectStream(&stream->rtmp, 0))
104
        return OBS_OUTPUT_INVALID_STREAM;
105
 
106
@@ -798,7 +863,6 @@
107
    os_atomic_set_bool(&stream->disconnected, false);
108
    stream->total_bytes_sent = 0;
109
    stream->dropped_frames   = 0;
110
-   stream->min_drop_dts_usec= 0;
111
    stream->min_priority     = 0;
112
 
113
    settings = obs_output_get_settings(stream->output);
114
@@ -876,7 +940,6 @@
115
 {
116
    circlebuf_push_back(&stream->packets, packet,
117
            sizeof(struct encoder_packet));
118
-   stream->last_dts_usec = packet->dts_usec;
119
    return true;
120
 }
121
 
122
@@ -886,7 +949,7 @@
123
 }
124
 
125
 static void drop_frames(struct rtmp_stream *stream, const char *name,
126
-       int highest_priority, int64_t *p_min_dts_usec)
127
+       int highest_priority, bool pframes)
128
 {
129
    struct circlebuf new_buf            = {0};
130
    uint64_t         last_drop_dts_usec = 0;
131
@@ -922,8 +985,8 @@
132
 
133
    if (stream->min_priority < highest_priority)
134
        stream->min_priority = highest_priority;
135
-
136
-   *p_min_dts_usec = last_drop_dts_usec;
137
+   if (!num_frames_dropped)
138
+       return;
139
 
140
    stream->dropped_frames += num_frames_dropped;
141
 #ifdef _DEBUG
142
@@ -934,6 +997,23 @@
143
 #endif
144
 }
145
 
146
+static bool find_first_video_packet(struct rtmp_stream *stream,
147
+       struct encoder_packet *first)
148
+{
149
+   size_t count = stream->packets.size / sizeof(*first);
150
+
151
+   for (size_t i = 0; i < count; i++) {
152
+       struct encoder_packet *cur = circlebuf_data(&stream->packets,
153
+               i * sizeof(*first));
154
+       if (cur->type == OBS_ENCODER_VIDEO && !cur->keyframe) {
155
+           *first = *cur;
156
+           return true;
157
+       }
158
+   }
159
+
160
+   return false;
161
+}
162
+
163
 static void check_to_drop_frames(struct rtmp_stream *stream, bool pframes)
164
 {
165
    struct encoder_packet first;
166
@@ -942,9 +1022,6 @@
167
    const char *name = pframes ? "p-frames" : "b-frames";
168
    int priority = pframes ?
169
        OBS_NAL_PRIORITY_HIGHEST : OBS_NAL_PRIORITY_HIGH;
170
-   int64_t *p_min_dts_usec = pframes ?
171
-       &stream->pframe_min_drop_dts_usec :
172
-       &stream->min_drop_dts_usec;
173
    int64_t drop_threshold = pframes ?
174
        stream->pframe_drop_threshold_usec :
175
        stream->drop_threshold_usec;
176
@@ -955,10 +1032,7 @@
177
        return;
178
    }
179
 
180
-   circlebuf_peek_front(&stream->packets, &first, sizeof(first));
181
-
182
-   /* do not drop frames if frames were just dropped within this time */
183
-   if (first.dts_usec < *p_min_dts_usec)
184
+   if (!find_first_video_packet(stream, &first))
185
        return;
186
 
187
    /* if the amount of time stored in the buffered packets waiting to be
188
@@ -972,7 +1046,7 @@
189
 
190
    if (buffer_duration_usec > drop_threshold) {
191
        debug("buffer_duration_usec: %" PRId64, buffer_duration_usec);
192
-       drop_frames(stream, name, priority, p_min_dts_usec);
193
+       drop_frames(stream, name, priority, pframes);
194
    }
195
 }
196
 
197
@@ -991,6 +1065,7 @@
198
        stream->min_priority = 0;
199
    }
200
 
201
+   stream->last_dts_usec = packet->dts_usec;
202
    return add_packet(stream, packet);
203
 }
204
 
205
@@ -1090,6 +1165,12 @@
206
        return stream->min_priority > 0 ? 1.0f : stream->congestion;
207
 }
208
 
209
+static int rtmp_stream_connect_time(void *data)
210
+{
211
+   struct rtmp_stream *stream = data;
212
+   return stream->rtmp.connect_time_ms;
213
+}
214
+
215
 struct obs_output_info rtmp_output_info = {
216
    .id                 = "rtmp_output",
217
    .flags              = OBS_OUTPUT_AV |
218
@@ -1106,5 +1187,6 @@
219
    .get_properties     = rtmp_stream_properties,
220
    .get_total_bytes    = rtmp_stream_total_bytes_sent,
221
    .get_congestion     = rtmp_stream_congestion,
222
+   .get_connect_time_ms= rtmp_stream_connect_time,
223
    .get_dropped_frames = rtmp_stream_dropped_frames
224
 };
225
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/rtmp-stream.h -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/rtmp-stream.h Changed
11
 
1
@@ -72,9 +72,7 @@
2
 
3
    /* frame drop variables */
4
    int64_t          drop_threshold_usec;
5
-   int64_t          min_drop_dts_usec;
6
    int64_t          pframe_drop_threshold_usec;
7
-   int64_t          pframe_min_drop_dts_usec;
8
    int              min_priority;
9
    float            congestion;
10
 
11
obs-studio-18.0.2.tar.xz/plugins/obs-outputs/rtmp-windows.c -> obs-studio-19.0.2.tar.xz/plugins/obs-outputs/rtmp-windows.c Changed
17
 
1
@@ -81,6 +81,7 @@
2
                        "Socket error, recv() returned "
3
                        "%d, GetLastError() %d",
4
                        ret, err_code);
5
+               stream->rtmp.last_error_code = err_code;
6
                fatal_sock_shutdown(stream);
7
                return false;
8
            }
9
@@ -215,6 +216,7 @@
10
                    ret, err_code);
11
 
12
            pthread_mutex_unlock(&stream->write_buf_mutex);
13
+           stream->rtmp.last_error_code = err_code;
14
            fatal_sock_shutdown(stream);
15
            return RET_FATAL;
16
        }
17
obs-studio-18.0.2.tar.xz/plugins/obs-qsv11/QSV_Encoder.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-qsv11/QSV_Encoder.cpp Changed
9
 
1
@@ -62,6 +62,7 @@
2
 #include <obs-module.h>
3
 #include <string>
4
 #include <mutex>
5
+#include <intrin.h>
6
 
7
 #define do_log(level, format, ...) \
8
    blog(level, "[qsv encoder: '%s'] " format, \
9
obs-studio-19.0.2.tar.xz/plugins/obs-qsv11/data/locale/bn-BD.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+TargetUsage="লক্ষ্য ব্যবহার"
3
+RateControl="হার নিয়ন্ত্রণ"
4
+KeyframeIntervalSec="Keyframe বিরতি (সেকেন্ড, 0 অটো =)"
5
+Convergence="অভিসৃতি"
6
+ICQQuality="ICQ মান"
7
+
8
obs-studio-18.0.2.tar.xz/plugins/obs-qsv11/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-qsv11/data/locale/et-EE.ini Changed
9
 
1
@@ -1,3 +1,7 @@
2
 Bitrate="Bitikiirus"
3
 MaxBitrate="Maksimaalne bitikiirus"
4
+KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
5
+Profile="Profiil"
6
+Accuracy="Täpsus"
7
+ICQQuality="ICQ Kvaliteet"
8
 
9
obs-studio-18.0.2.tar.xz/plugins/obs-qsv11/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-qsv11/data/locale/pt-BR.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
-TargetUsage="Uso do alvo"
3
+TargetUsage="Uso Alvo"
4
 Bitrate="Taxa de Bits"
5
 MaxBitrate="Taxa de Bits Máxima"
6
 RateControl="Controle da Taxa de Bits"
7
obs-studio-18.0.2.tar.xz/plugins/obs-qsv11/obs-qsv11.c -> obs-studio-19.0.2.tar.xz/plugins/obs-qsv11/obs-qsv11.c Changed
10
 
1
@@ -408,7 +408,7 @@
2
 static void load_headers(struct obs_qsv *obsqsv)
3
 {
4
    DARRAY(uint8_t) header;
5
-   uint8_t sei = 0;
6
+   static uint8_t sei = 0;
7
 
8
    // Not sure if SEI is needed.
9
    // Just filling in empty meaningless SEI message.
10
obs-studio-19.0.2.tar.xz/plugins/obs-text/data/locale/bn-BD.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+TextGDIPlus="টেক্সট (জিডিআই +)"
3
+ReadFromFile="ফাইল থেকে পড়া"
4
+TextFile="টেক্সট ফাইল (UTF-8)"
5
+Opacity="অস্বচ্ছতা"
6
+Gradient="গ্রেডিয়েন্ট"
7
+BkColor="পেছনের রঙ"
8
+BkOpacity="ব্যাকগ্রাউন্ডের স্বচ্ছতা"
9
+Alignment="সারিবদ্ধতা"
10
+Alignment.Left="বামদিকে"
11
+
12
obs-studio-18.0.2.tar.xz/plugins/obs-text/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-text/data/locale/et-EE.ini Changed
26
 
1
@@ -2,12 +2,24 @@
2
 Font="Font"
3
 Text="Tekst"
4
 ReadFromFile="Loe failist"
5
+TextFile="Tekstifail (UTF-8)"
6
+Filter.TextFiles="Tekstifailid"
7
+Filter.AllFiles="Kõik failid"
8
 Color="Värv"
9
 Opacity="Läbipaistvus"
10
+BkOpacity="Tausta läbipaistvus"
11
+Alignment="Joondus"
12
+Alignment.Left="Vasakule"
13
 Alignment.Center="Keskele"
14
+Alignment.Right="Paremale"
15
+Vertical="Vertikaalne"
16
+VerticalAlignment="Vertikaaljoondus"
17
+VerticalAlignment.Top="Ülevalt"
18
+VerticalAlignment.Bottom="Alt"
19
 Outline="Kontuur"
20
 Outline.Size="Kontuuri suurus"
21
 Outline.Color="Kontuuri värv"
22
+Outline.Opacity="Kontuuri läbipaistvus"
23
 Width="Laius"
24
 Height="Kõrgus"
25
 
26
obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/locale/bn-BD.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+FadeTransition="ফেইড"
3
+CutTransition="ছেদন"
4
+SlideTransition="স্লাইড করুন"
5
+FadeToColorTransition="রঙ বিলিন হয়ে যায়"
6
+Direction.Up="উপরে"
7
+Direction.Down="নিচের"
8
+LumaWipeTransition="লুমা আল নামি মুছে ফেলুন"
9
+LumaWipe.Image="ছবি"
10
+LumaWipe.Invert="বিপরীতমুখী"
11
+LumaWipe.Softness="তারল্য"
12
+
13
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/locale/et-EE.ini Changed
16
 
1
@@ -16,8 +16,14 @@
2
 LumaWipe.Type.BoxTopLeft="Kast üleval vasakul"
3
 LumaWipe.Type.BoxTopRight="Kast üleval paremal"
4
 LumaWipe.Type.Burst="Plahvatuse"
5
+LumaWipe.Type.Circles="Ringid"
6
 LumaWipe.Type.Clock="Kell"
7
 LumaWipe.Type.Cloud="Pilv"
8
 LumaWipe.Type.Curtain="Kardin"
9
 LumaWipe.Type.Fan="Ventilaator"
10
+LumaWipe.Type.Square="Ruut"
11
+LumaWipe.Type.Squares="Ruudud"
12
+LumaWipe.Type.Stripes="Triibud"
13
+LumaWipe.Type.StripsHorizontal="Horisontaalsed triibud"
14
+LumaWipe.Type.StripsVertical="Vertikaalsed triibud"
15
 
16
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/locale/pt-BR.ini Changed
24
 
1
@@ -20,6 +20,12 @@
2
 LumaWipe.Type.BarndoorTopLeft="Barndoor inferior esquerdo"
3
 LumaWipe.Type.BarndoorVertical="Barndoor Vertical"
4
 LumaWipe.Type.BlindsHorizontal="Persianas horizontais"
5
+LumaWipe.Type.BoxBottomLeft="Caixa Inferior Esquerda"
6
+LumaWipe.Type.BoxBottomRight="Caixa Inferior Direita"
7
+LumaWipe.Type.BoxTopLeft="Caixa Superior Esquerda"
8
+LumaWipe.Type.BoxTopRight="Caixa Superior Direita"
9
+LumaWipe.Type.Burst="Explosão"
10
+LumaWipe.Type.CheckerboardSmall="Quadriculado pequeno"
11
 LumaWipe.Type.Circles="Círculos"
12
 LumaWipe.Type.Clock="Relógio"
13
 LumaWipe.Type.Cloud="Nuvem"
14
@@ -31,6 +37,9 @@
15
 LumaWipe.Type.LinearTopLeft="Linear superior esquerdo"
16
 LumaWipe.Type.LinearTopRight="Linear superior direito"
17
 LumaWipe.Type.LinearVertical="Linear Vertical"
18
+LumaWipe.Type.ParallelZigzagHorizontal="Zigue-Zague Paralelo Horizontal"
19
+LumaWipe.Type.ParallelZigzagVertical="Zigue-Zague Paralelo Vertical"
20
+LumaWipe.Type.Sinus9="Sinus 9"
21
 LumaWipe.Type.Spiral="Espiral"
22
 LumaWipe.Type.Square="Quadrado"
23
 LumaWipe.Type.Squares="Quadrados"
24
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-botleft.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-botleft.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-h.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-h.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-topleft.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-topleft.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-v.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/barndoor-v.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/blinds-h.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/blinds-h.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-botleft.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-botleft.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-botright.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-botright.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-topleft.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-topleft.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-topright.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/box-topright.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/burst.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/burst.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/checkerboard-small.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/checkerboard-small.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/circles.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/circles.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/clock.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/clock.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/cloud.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/cloud.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/curtain.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/curtain.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/fan.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/fan.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/fractal.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/fractal.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/iris.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/iris.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-h.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-h.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-topleft.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-topleft.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-topright.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-topright.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-v.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/linear-v.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/parallel-zigzag-h.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/parallel-zigzag-h.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/parallel-zigzag-v.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/parallel-zigzag-v.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/sinus9.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/sinus9.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/spiral.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/spiral.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/square.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/square.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/squares.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/squares.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/stripes.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/stripes.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/strips-h.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/strips-h.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/strips-v.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/strips-v.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/watercolor.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/watercolor.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/zigzag-h.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/zigzag-h.png Changed
obs-studio-18.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/zigzag-v.png -> obs-studio-19.0.2.tar.xz/plugins/obs-transitions/data/luma_wipes/zigzag-v.png Changed
obs-studio-19.0.2.tar.xz/plugins/obs-vst/.clang-format Added
56
 
1
@@ -0,0 +1,54 @@
2
+Language: Cpp
3
+Standard: Cpp11
4
+AccessModifierOffset: -8
5
+AlignAfterOpenBracket: Align
6
+AlignConsecutiveAssignments: true
7
+AlignConsecutiveDeclarations: true
8
+AlignEscapedNewlinesLeft: false
9
+AlignOperands: true
10
+AlignTrailingComments: true
11
+AllowAllParametersOfDeclarationOnNextLine: false
12
+AllowShortBlocksOnASingleLine: false
13
+AllowShortCaseLabelsOnASingleLine: false
14
+AllowShortFunctionsOnASingleLine: Inline
15
+AllowShortIfStatementsOnASingleLine: false
16
+AllowShortLoopsOnASingleLine: false
17
+BinPackArguments: false
18
+BinPackParameters: false
19
+BraceWrapping:
20
+   AfterFunction: true
21
+BreakBeforeBinaryOperators: None
22
+BreakBeforeBraces: Custom
23
+BreakBeforeTernaryOperators: true
24
+BreakConstructorInitializersBeforeComma: false
25
+BreakStringLiterals: true
26
+ColumnLimit: 120
27
+ContinuationIndentWidth: 8
28
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
29
+ConstructorInitializerIndentWidth: 8
30
+Cpp11BracedListStyle: true
31
+DerivePointerAlignment: true
32
+IndentCaseLabels: false
33
+IndentWidth: 8
34
+IndentWrappedFunctionNames: false
35
+KeepEmptyLinesAtTheStartOfBlocks: true
36
+MaxEmptyLinesToKeep: 1
37
+NamespaceIndentation: None
38
+ObjCSpaceAfterProperty: false
39
+ObjCSpaceBeforeProtocolList: true
40
+PointerAlignment: Right
41
+ReflowComments: true
42
+SortIncludes: false
43
+SpaceAfterCStyleCast: false
44
+SpaceAfterTemplateKeyword: false
45
+SpaceBeforeAssignmentOperators: true
46
+SpaceBeforeParens: ControlStatements
47
+SpaceInEmptyParentheses: false
48
+SpacesBeforeTrailingComments: 1
49
+SpacesInAngles: false
50
+SpacesInCStyleCastParentheses: false
51
+SpacesInContainerLiterals: false
52
+SpacesInParentheses: false
53
+SpacesInSquareBrackets: false
54
+TabWidth: 8
55
+UseTab: ForIndentation
56
obs-studio-18.0.2.tar.xz/plugins/obs-vst/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/CMakeLists.txt Changed
17
 
1
@@ -1,3 +1,8 @@
2
+if(DISABLE_UI)
3
+   message(STATUS "UI disabled,so vst plugin disabled")
4
+   return()
5
+endif()
6
+
7
 project(obs-vst)
8
 
9
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}")
10
@@ -69,4 +74,4 @@
11
        ${FOUNDATION_FRAMEWORK})
12
 endif(APPLE)
13
 
14
-install_obs_plugin_with_data(obs-vst data)
15
\ No newline at end of file
16
+install_obs_plugin_with_data(obs-vst data)
17
obs-studio-18.0.2.tar.xz/plugins/obs-vst/EditorWidget.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/EditorWidget.cpp Changed
21
 
1
@@ -18,13 +18,13 @@
2
 
3
 #include "headers/EditorWidget.h"
4
 
5
-EditorWidget::EditorWidget(QWidget *parent, VSTPlugin *plugin) :
6
-       QWidget(parent), plugin(plugin) {
7
-   setWindowFlags(this->windowFlags() |=
8
-           Qt::MSWindowsFixedSizeDialogHint);
9
+EditorWidget::EditorWidget(QWidget *parent, VSTPlugin *plugin) : QWidget(parent), plugin(plugin)
10
+{
11
+   setWindowFlags(this->windowFlags() |= Qt::MSWindowsFixedSizeDialogHint);
12
 }
13
 
14
-void EditorWidget::closeEvent(QCloseEvent *event) {
15
+void EditorWidget::closeEvent(QCloseEvent *event)
16
+{
17
    plugin->closeEditor();
18
    UNUSED_PARAMETER(event);
19
 }
20
\ No newline at end of file
21
obs-studio-18.0.2.tar.xz/plugins/obs-vst/VSTPlugin.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/VSTPlugin.cpp Changed
334
 
1
@@ -18,62 +18,57 @@
2
 
3
 #include "headers/VSTPlugin.h"
4
 
5
-VSTPlugin::VSTPlugin(obs_source_t *sourceContext) :
6
-       sourceContext{sourceContext} {
7
+VSTPlugin::VSTPlugin(obs_source_t *sourceContext) : sourceContext{sourceContext}
8
+{
9
 
10
    int numChannels = VST_MAX_CHANNELS;
11
-   int blocksize = BLOCK_SIZE;
12
-
13
-   inputs = (float **) malloc(sizeof(float **) * numChannels);
14
-   outputs = (float **) malloc(sizeof(float **) * numChannels);
15
-   for (int channel = 0; channel < numChannels; channel++)
16
-   {
17
-       inputs[channel] = (float *) malloc(sizeof(float *)
18
-               * blocksize);
19
-       outputs[channel] = (float *) malloc(sizeof(float *)
20
-               * blocksize);
21
+   int blocksize   = BLOCK_SIZE;
22
+
23
+   inputs  = (float **)malloc(sizeof(float **) * numChannels);
24
+   outputs = (float **)malloc(sizeof(float **) * numChannels);
25
+   for (int channel = 0; channel < numChannels; channel++) {
26
+       inputs[channel]  = (float *)malloc(sizeof(float *) * blocksize);
27
+       outputs[channel] = (float *)malloc(sizeof(float *) * blocksize);
28
    }
29
 }
30
 
31
-void VSTPlugin::loadEffectFromPath(std::string path) {
32
-   if (this->pluginPath.compare(path) != 0)
33
-   {
34
+void VSTPlugin::loadEffectFromPath(std::string path)
35
+{
36
+   if (this->pluginPath.compare(path) != 0) {
37
        closeEditor();
38
        unloadEffect();
39
    }
40
 
41
-   if (!effect)
42
-   {
43
+   if (!effect) {
44
        pluginPath = path;
45
-       effect = loadEffect();
46
+       effect     = loadEffect();
47
 
48
-       if (!effect)
49
-       {
50
-           //TODO: alert user of error
51
-           blog(LOG_WARNING, "VST Plug-in: Can't load "
52
-                   "effect!");
53
+       if (!effect) {
54
+           // TODO: alert user of error
55
+           blog(LOG_WARNING,
56
+                "VST Plug-in: Can't load "
57
+                "effect!");
58
            return;
59
        }
60
 
61
        // Check plug-in's magic number
62
        // If incorrect, then the file either was not loaded properly,
63
        // is not a real VST plug-in, or is otherwise corrupt.
64
-       if (effect->magic != kEffectMagic)
65
-       {
66
+       if (effect->magic != kEffectMagic) {
67
            blog(LOG_WARNING, "VST Plug-in's magic number is bad");
68
            return;
69
        }
70
 
71
+       effect->dispatcher(effect, effGetEffectName, 0, 0, effectName, 0);
72
+       effect->dispatcher(effect, effGetVendorString, 0, 0, vendorString, 0);
73
+
74
        effect->dispatcher(effect, effOpen, 0, 0, nullptr, 0.0f);
75
 
76
        // Set some default properties
77
-       size_t sampleRate = audio_output_get_sample_rate(
78
-               obs_get_audio());
79
-       effect->dispatcher(effect, effSetSampleRate, 0, 0, nullptr,
80
-               sampleRate);
81
+       size_t sampleRate = audio_output_get_sample_rate(obs_get_audio());
82
+       effect->dispatcher(effect, effSetSampleRate, 0, 0, nullptr, sampleRate);
83
        int blocksize = BLOCK_SIZE;
84
-       effect->dispatcher(effect, effSetBlockSize, 0, blocksize,
85
-               nullptr, 0.0f);
86
+       effect->dispatcher(effect, effSetBlockSize, 0, blocksize, nullptr, 0.0f);
87
 
88
        effect->dispatcher(effect, effMainsChanged, 0, 1, nullptr, 0);
89
 
90
@@ -85,7 +80,8 @@
91
    }
92
 }
93
 
94
-void silenceChannel(float **channelData, int numChannels, long numFrames) {
95
+void silenceChannel(float **channelData, int numChannels, long numFrames)
96
+{
97
    for (int channel = 0; channel < numChannels; ++channel) {
98
        for (long frame = 0; frame < numFrames; ++frame) {
99
            channelData[channel][frame] = 0.0f;
100
@@ -93,20 +89,19 @@
101
    }
102
 }
103
 
104
-obs_audio_data *VSTPlugin::process(struct obs_audio_data *audio) {
105
+obs_audio_data *VSTPlugin::process(struct obs_audio_data *audio)
106
+{
107
 
108
-   if (effect && effectReady)
109
-   {
110
+   if (effect && effectReady) {
111
        silenceChannel(outputs, VST_MAX_CHANNELS, audio->frames);
112
 
113
        float *adata[VST_MAX_CHANNELS];
114
        for (size_t d = 0; d < VST_MAX_CHANNELS; d++) {
115
-            if (audio->data[d] != NULL) {
116
-                adata[d] = (float *) audio->data[d];
117
-            }
118
-            else {
119
-                adata[d] = inputs[d];
120
-            }
121
+           if (audio->data[d] != NULL) {
122
+               adata[d] = (float *)audio->data[d];
123
+           } else {
124
+               adata[d] = inputs[d];
125
+           }
126
        };
127
 
128
        effect->processReplacing(effect, adata, outputs, audio->frames);
129
@@ -123,11 +118,11 @@
130
    return audio;
131
 }
132
 
133
-void VSTPlugin::unloadEffect() {
134
+void VSTPlugin::unloadEffect()
135
+{
136
    effectReady = false;
137
 
138
-   if (effect)
139
-   {
140
+   if (effect) {
141
        effect->dispatcher(effect, effMainsChanged, 0, 0, nullptr, 0);
142
        effect->dispatcher(effect, effClose, 0, 0, nullptr, 0.0f);
143
    }
144
@@ -137,31 +132,31 @@
145
    unloadLibrary();
146
 }
147
 
148
-void VSTPlugin::openEditor() {
149
-   if (effect && !editorWidget)
150
-   {
151
+void VSTPlugin::openEditor()
152
+{
153
+   if (effect && !editorWidget) {
154
        editorWidget = new EditorWidget(nullptr, this);
155
        editorWidget->buildEffectContainer(effect);
156
+       editorWidget->setWindowTitle(QString("%1 - %2").arg(vendorString, effectName));
157
        editorWidget->show();
158
    }
159
 }
160
 
161
-void VSTPlugin::closeEditor() {
162
-   if (effect)
163
-   {
164
+void VSTPlugin::closeEditor()
165
+{
166
+   if (effect) {
167
        effect->dispatcher(effect, effEditClose, 0, 0, nullptr, 0);
168
    }
169
 
170
-   if (editorWidget)
171
-   {
172
+   if (editorWidget) {
173
        editorWidget->close();
174
        delete editorWidget;
175
        editorWidget = nullptr;
176
    }
177
 }
178
 
179
-intptr_t VSTPlugin::hostCallback(AEffect *effect, int32_t opcode,
180
-       int32_t index, intptr_t value, void *ptr, float opt) {
181
+intptr_t VSTPlugin::hostCallback(AEffect *effect, int32_t opcode, int32_t index, intptr_t value, void *ptr, float opt)
182
+{
183
    UNUSED_PARAMETER(effect);
184
    UNUSED_PARAMETER(ptr);
185
    UNUSED_PARAMETER(opt);
186
@@ -170,47 +165,42 @@
187
 
188
    // Filter idle calls...
189
    bool filtered = false;
190
-   if (opcode == audioMasterIdle)
191
-   {
192
+   if (opcode == audioMasterIdle) {
193
        static bool wasIdle = false;
194
        if (wasIdle)
195
            filtered = true;
196
-       else
197
-       {
198
-           blog(LOG_WARNING, "VST Plug-in: Future idle calls "
199
-           "will not be displayed!");
200
+       else {
201
+           blog(LOG_WARNING,
202
+                "VST Plug-in: Future idle calls "
203
+                "will not be displayed!");
204
            wasIdle = true;
205
        }
206
    }
207
 
208
    switch (opcode) {
209
-       case audioMasterSizeWindow:
210
-           // index: width, value: height
211
-           if (editorWidget)
212
-           {
213
-               editorWidget->handleResizeRequest(index,
214
-                        value);
215
-           }
216
-           return 0;
217
+   case audioMasterSizeWindow:
218
+       // index: width, value: height
219
+       if (editorWidget) {
220
+           editorWidget->handleResizeRequest(index, value);
221
+       }
222
+       return 0;
223
    }
224
 
225
    return result;
226
 }
227
 
228
-std::string VSTPlugin::getChunk() {
229
-   if (!effect)
230
-   {
231
+std::string VSTPlugin::getChunk()
232
+{
233
+   if (!effect) {
234
        return "";
235
    }
236
 
237
-   if (effect->flags & effFlagsProgramChunks)
238
-   {
239
+   if (effect->flags & effFlagsProgramChunks) {
240
        void *buf = nullptr;
241
 
242
-       intptr_t chunkSize = effect->dispatcher(effect, effGetChunk, 1,
243
-               0, &buf, 0.0);
244
+       intptr_t chunkSize = effect->dispatcher(effect, effGetChunk, 1, 0, &buf, 0.0);
245
 
246
-       QByteArray data = QByteArray((char *) buf, chunkSize);
247
+       QByteArray data = QByteArray((char *)buf, chunkSize);
248
        return QString(data.toBase64()).toStdString();
249
    } else {
250
        std::vector<float> params;
251
@@ -219,44 +209,37 @@
252
            params.push_back(parameter);
253
        }
254
 
255
-       const char *bytes = reinterpret_cast<const char *>(&params[0]);
256
-       QByteArray data = QByteArray(bytes, sizeof(float) *
257
-               params.size());
258
+       const char *bytes   = reinterpret_cast<const char *>(&params[0]);
259
+       QByteArray  data    = QByteArray(bytes, sizeof(float) * params.size());
260
        std::string encoded = QString(data.toBase64()).toStdString();
261
        return encoded;
262
    }
263
 }
264
 
265
-void VSTPlugin::setChunk(std::string data) {
266
-   if (!effect)
267
-   {
268
+void VSTPlugin::setChunk(std::string data)
269
+{
270
+   if (!effect) {
271
        return;
272
    }
273
 
274
-   if (effect->flags & effFlagsProgramChunks)
275
-   {
276
-       QByteArray base64Data = QByteArray(data.c_str(),
277
-               data.length());
278
-       QByteArray chunkData = QByteArray::fromBase64(base64Data);
279
-       void *buf = nullptr;
280
-       buf = chunkData.data();
281
-       effect->dispatcher(effect, effSetChunk, 1, chunkData.length(),
282
-               buf, 0);
283
+   if (effect->flags & effFlagsProgramChunks) {
284
+       QByteArray base64Data = QByteArray(data.c_str(), data.length());
285
+       QByteArray chunkData  = QByteArray::fromBase64(base64Data);
286
+       void *     buf        = nullptr;
287
+       buf                   = chunkData.data();
288
+       effect->dispatcher(effect, effSetChunk, 1, chunkData.length(), buf, 0);
289
    } else {
290
-       QByteArray base64Data = QByteArray(data.c_str(),
291
-               data.length());
292
-       QByteArray paramData = QByteArray::fromBase64(base64Data);
293
+       QByteArray base64Data = QByteArray(data.c_str(), data.length());
294
+       QByteArray paramData  = QByteArray::fromBase64(base64Data);
295
 
296
-       const char *p_chars = paramData.data();
297
-       const float *p_floats = reinterpret_cast<const float *>
298
-               (p_chars);
299
+       const char * p_chars  = paramData.data();
300
+       const float *p_floats = reinterpret_cast<const float *>(p_chars);
301
 
302
        int size = paramData.length() / sizeof(float);
303
 
304
        std::vector<float> params(p_floats, p_floats + size);
305
 
306
-       if (params.size() != effect->numParams)
307
-       {
308
+       if (params.size() != effect->numParams) {
309
            return;
310
        }
311
 
312
@@ -266,15 +249,16 @@
313
    }
314
 }
315
 
316
-void VSTPlugin::setProgram(const int programNumber) {
317
+void VSTPlugin::setProgram(const int programNumber)
318
+{
319
    if (programNumber < effect->numPrograms) {
320
        effect->dispatcher(effect, effSetProgram, 0, programNumber, NULL, 0.0f);
321
-   }
322
-   else {
323
+   } else {
324
        blog(LOG_ERROR, "Failed to load program, number was outside possible program range.");
325
    }
326
 }
327
 
328
-int VSTPlugin::getProgram() {
329
+int VSTPlugin::getProgram()
330
+{
331
    return effect->dispatcher(effect, effGetProgram, 0, 0, NULL, 0.0f);
332
 }
333
\ No newline at end of file
334
obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/bn-BD.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+OpenPluginInterface="প্লাগ-ইন ইন্টারফেসের খুলুন"
3
+OpenInterfaceWhenActive="যখন সক্রিয় তখন খোলা ইন্টারফেস"
4
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/ca-ES.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Obre l'interfície de l'extensió"
3
 ClosePluginInterface="Tanca la interfície de l'extensió"
4
 VstPlugin="Extensió VST 2.x"
5
+OpenInterfaceWhenActive="Obre l'interfície quan està actiu"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/cs-CZ.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Otevřít rozhraní Plug-inu"
3
 ClosePluginInterface="Zavřít rozhraní Plug-inu"
4
 VstPlugin="VST 2.x Plug-in"
5
+OpenInterfaceWhenActive="Otevřít rozhraní, pokud je aktivní"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/da-DK.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Åbn plug-in grænseflade"
3
 ClosePluginInterface="Luk plug-in grænseflade"
4
 VstPlugin="VST 2.x plug-in"
5
+OpenInterfaceWhenActive="Åben grænseflade når aktiv"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/es-ES.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Abrir la interfaz de la extensión"
3
 ClosePluginInterface="Cerrar la interfaz de la extensión"
4
 VstPlugin="Extensión VST 2.x"
5
+OpenInterfaceWhenActive="Abrir interfaz cuando está activo"
6
obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/et-EE.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Avatud Plug-in liides"
3
+ClosePluginInterface="Sulgege Plug-in liides"
4
+VstPlugin="VST 2.x Plug-in"
5
+OpenInterfaceWhenActive="Ava liides kui aktiivne"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/eu-ES.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Ireki pluginaren interfazea"
3
 ClosePluginInterface="Itxi pluginaren interfazea"
4
 VstPlugin="VST 2.x Plugina"
5
+OpenInterfaceWhenActive="Ireki interfazea aktibatzen denean"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/fr-FR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Afficher l'interface graphique du plug-in"
3
 ClosePluginInterface="Fermer l'interface graphique du plug-in"
4
 VstPlugin="Plug-in VST 2.x"
5
+OpenInterfaceWhenActive="Ouvrir l'interface lorsqu'elle est active"
6
obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/it-IT.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Apri interfaccia Plug-In"
3
+ClosePluginInterface="Chiudi interfaccia Plug-In"
4
+VstPlugin="VST 2. x plug-in"
5
+OpenInterfaceWhenActive="Apri interfaccia quando attivo"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/ko-KR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="플러그인 설정 열기"
3
 ClosePluginInterface="플러그인 설정 닫기"
4
 VstPlugin="VST 2.x 플러그인"
5
+OpenInterfaceWhenActive="활성화 시 인터페이스 열기"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/nl-NL.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Open Plugin Interface"
3
 ClosePluginInterface="Sluit Plugin Interface"
4
 VstPlugin="VST 2.x Plugin"
5
+OpenInterfaceWhenActive="Open interface indien actief"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/pt-BR.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Abrir Interface do Plugin"
3
 ClosePluginInterface="Fechar Interface do Plugin"
4
 VstPlugin="Plugin VST 2.x"
5
+OpenInterfaceWhenActive="Abrir interface quando ativo"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/ru-RU.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Открыть интерфейс плагина"
3
 ClosePluginInterface="Закрыть интерфейс плагина"
4
 VstPlugin="Плагин VST 2.x"
5
+OpenInterfaceWhenActive="Открыть интерфейс при активации"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/sv-SE.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Öppna tilläggets gränssnitt"
3
 ClosePluginInterface="Stäng tilläggets gränssnitt"
4
 VstPlugin="VST 2.x-tillägg"
5
+OpenInterfaceWhenActive="Öppna gränssnitt vid aktiv"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/tr-TR.ini Changed
6
 
1
@@ -1,1 +1,4 @@
2
+OpenPluginInterface="Eklenti Arabirimi Aç"
3
+ClosePluginInterface="Eklenti Arabirimi Kapa"
4
 VstPlugin="VST 2.x Eklentisi"
5
+OpenInterfaceWhenActive="Etkinken Arabirimi Aç"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/uk-UA.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="Відкрити інтерфейс плагіна"
3
 ClosePluginInterface="Закрити інтерфейс плагіна"
4
 VstPlugin="VST 2.x Плагін"
5
+OpenInterfaceWhenActive="Щоразу відкривати інтерфейс плагина"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/data/locale/zh-TW.ini Changed
6
 
1
@@ -1,3 +1,4 @@
2
 OpenPluginInterface="開啟外掛程式界面"
3
 ClosePluginInterface="關閉外掛程式介面"
4
 VstPlugin="VST 2.x 外掛程式"
5
+OpenInterfaceWhenActive="啟動時開啟界面"
6
obs-studio-18.0.2.tar.xz/plugins/obs-vst/headers/EditorWidget.h -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/headers/EditorWidget.h Changed
67
 
1
@@ -21,13 +21,13 @@
2
 
3
 #include <QWidget>
4
 #ifdef __APPLE__
5
-   #include <QMacCocoaViewContainer>
6
+#include <QMacCocoaViewContainer>
7
 #elif WIN32
8
-   #include <QWindow>
9
-   #include <Windows.h>
10
+#include <QWindow>
11
+#include <Windows.h>
12
 #elif __linux__
13
-   #include <QWindow>
14
-   #include <xcb/xcb.h>
15
+#include <QWindow>
16
+#include <xcb/xcb.h>
17
 #endif
18
 
19
 #include "aeffectx.h"
20
@@ -37,30 +37,30 @@
21
 
22
 class VstRect {
23
 
24
-   public:
25
-       short top;
26
-       short left;
27
-       short bottom;
28
-       short right;
29
+public:
30
+   short top;
31
+   short left;
32
+   short bottom;
33
+   short right;
34
 };
35
 
36
 class EditorWidget : public QWidget {
37
 
38
    VSTPlugin *plugin;
39
 
40
-   #ifdef __APPLE__
41
-       QMacCocoaViewContainer *cocoaViewContainer = NULL;
42
-   #elif WIN32
43
+#ifdef __APPLE__
44
+   QMacCocoaViewContainer *cocoaViewContainer = NULL;
45
+#elif WIN32
46
 
47
-   #elif __linux__
48
+#elif __linux__
49
 
50
-   #endif
51
+#endif
52
 
53
-   public:
54
-       EditorWidget(QWidget *parent, VSTPlugin *plugin);
55
-       void buildEffectContainer(AEffect *effect);
56
-       void closeEvent(QCloseEvent *event) override;
57
-       void handleResizeRequest(int width, int height);
58
+public:
59
+   EditorWidget(QWidget *parent, VSTPlugin *plugin);
60
+   void buildEffectContainer(AEffect *effect);
61
+   void closeEvent(QCloseEvent *event) override;
62
+   void handleResizeRequest(int width, int height);
63
 };
64
 
65
-#endif //OBS_STUDIO_EDITORDIALOG_H
66
+#endif // OBS_STUDIO_EDITORDIALOG_H
67
obs-studio-18.0.2.tar.xz/plugins/obs-vst/headers/VSTPlugin.h -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/headers/VSTPlugin.h Changed
123
 
1
@@ -19,8 +19,8 @@
2
 #ifndef OBS_STUDIO_VSTPLUGIN_H
3
 #define OBS_STUDIO_VSTPLUGIN_H
4
 
5
-#define VST_MAX_CHANNELS    8
6
-#define BLOCK_SIZE          512
7
+#define VST_MAX_CHANNELS 8
8
+#define BLOCK_SIZE 512
9
 
10
 #include <string>
11
 #include <QDirIterator>
12
@@ -29,72 +29,70 @@
13
 #include "vst-plugin-callbacks.hpp"
14
 #include "EditorWidget.h"
15
 
16
-
17
 #ifdef __APPLE__
18
-   #include <CoreFoundation/CoreFoundation.h>
19
+#include <CoreFoundation/CoreFoundation.h>
20
 #endif
21
 
22
 class EditorWidget;
23
 
24
 class VSTPlugin {
25
-   AEffect *effect = nullptr;
26
+   AEffect *     effect = nullptr;
27
    obs_source_t *sourceContext;
28
-   std::string pluginPath;
29
+   std::string   pluginPath;
30
 
31
    float **inputs;
32
    float **outputs;
33
 
34
    EditorWidget *editorWidget = nullptr;
35
 
36
-   AEffect* loadEffect();
37
+   AEffect *loadEffect();
38
 
39
    bool effectReady = false;
40
 
41
+   char effectName[64];
42
+   char vendorString[64];
43
+
44
 #ifdef __APPLE__
45
-       CFBundleRef bundle = NULL;
46
-   #elif WIN32
47
-       HINSTANCE dllHandle = nullptr;
48
-   #elif __linux__
49
-       void *soHandle = nullptr;
50
-   #endif
51
+   CFBundleRef bundle = NULL;
52
+#elif WIN32
53
+   HINSTANCE dllHandle = nullptr;
54
+#elif __linux__
55
+   void *soHandle = nullptr;
56
+#endif
57
 
58
    void unloadLibrary();
59
 
60
-   static intptr_t hostCallback_static( AEffect *effect, int32_t opcode,
61
-           int32_t index, intptr_t value, void *ptr, float opt)
62
+   static intptr_t
63
+   hostCallback_static(AEffect *effect, int32_t opcode, int32_t index, intptr_t value, void *ptr, float opt)
64
    {
65
-       if (effect && effect->user)
66
-       {
67
-       auto* plugin = static_cast<VSTPlugin*>(effect->user);
68
-       return plugin->hostCallback(effect, opcode, index, value,
69
-               ptr, opt);
70
+       if (effect && effect->user) {
71
+           auto *plugin = static_cast<VSTPlugin *>(effect->user);
72
+           return plugin->hostCallback(effect, opcode, index, value, ptr, opt);
73
        }
74
 
75
-       switch (opcode)
76
-       {
77
-           case audioMasterVersion:
78
-           return (intptr_t) 2400;
79
+       switch (opcode) {
80
+       case audioMasterVersion:
81
+           return (intptr_t)2400;
82
 
83
-           default:
84
-               return 0;
85
+       default:
86
+           return 0;
87
        }
88
    }
89
 
90
-   intptr_t hostCallback( AEffect *effect, int32_t opcode, int32_t index,
91
-           intptr_t value, void *ptr, float opt);
92
-
93
-   public:
94
-       VSTPlugin(obs_source_t *sourceContext);
95
-       void loadEffectFromPath(std::string path);
96
-       void unloadEffect();
97
-       void openEditor();
98
-       void closeEditor();
99
-       std::string getChunk();
100
-       void setChunk(std::string data);
101
-       void setProgram(const int programNumber);
102
-       int getProgram();
103
-       obs_audio_data* process(struct obs_audio_data *audio);
104
-       bool openInterfaceWhenActive = false;
105
+   intptr_t hostCallback(AEffect *effect, int32_t opcode, int32_t index, intptr_t value, void *ptr, float opt);
106
+
107
+public:
108
+   VSTPlugin(obs_source_t *sourceContext);
109
+   void loadEffectFromPath(std::string path);
110
+   void        unloadEffect();
111
+   void        openEditor();
112
+   void        closeEditor();
113
+   std::string getChunk();
114
+   void setChunk(std::string data);
115
+   void setProgram(const int programNumber);
116
+   int             getProgram();
117
+   obs_audio_data *process(struct obs_audio_data *audio);
118
+   bool openInterfaceWhenActive = false;
119
 };
120
 
121
-#endif //OBS_STUDIO_VSTPLUGIN_H
122
+#endif // OBS_STUDIO_VSTPLUGIN_H
123
obs-studio-18.0.2.tar.xz/plugins/obs-vst/linux/EditorWidget-linux.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/linux/EditorWidget-linux.cpp Changed
98
 
1
@@ -18,66 +18,65 @@
2
 
3
 #include "../headers/EditorWidget.h"
4
 
5
-void EditorWidget::buildEffectContainer(AEffect *effect) {
6
+void EditorWidget::buildEffectContainer(AEffect *effect)
7
+{
8
 
9
    /* First we open a connection to the X Server. */
10
    xcb_connection_t *connection = xcb_connect(NULL, NULL);
11
-   if (xcb_connection_has_error(connection) >= 1)
12
-   {
13
+   if (xcb_connection_has_error(connection) >= 1) {
14
        blog(LOG_ERROR, "VST: Couldn't connect to XCB.");
15
        return;
16
    }
17
 
18
    /* Now get the default/first screen. */
19
-   const xcb_setup_t      *setup  = xcb_get_setup (connection);
20
-   xcb_screen_iterator_t   iter   = xcb_setup_roots_iterator (setup);
21
-   xcb_screen_t           *screen = iter.data;
22
-   if (!screen)
23
-   {
24
+   const xcb_setup_t *   setup  = xcb_get_setup(connection);
25
+   xcb_screen_iterator_t iter   = xcb_setup_roots_iterator(setup);
26
+   xcb_screen_t *        screen = iter.data;
27
+   if (!screen) {
28
        blog(LOG_WARNING, "VST: Couldn't setup screen.");
29
        return;
30
    }
31
 
32
    /* Create the window */
33
-   xcb_window_t window = xcb_generate_id (connection);
34
-   xcb_create_window (
35
-       connection,                    /* Connection          */
36
-       XCB_COPY_FROM_PARENT,          /* depth (same as root)*/
37
-       window,                        /* window Id           */
38
-       screen->root,                  /* parent window       */
39
-       0, 0,                          /* x, y                */
40
-       150, 150,                      /* width, height       */
41
-       10,                            /* border_width        */
42
-       XCB_WINDOW_CLASS_INPUT_OUTPUT, /* class               */
43
-       screen->root_visual,           /* visual              */
44
-       0, NULL                        /* masks, not used yet */
45
-   );
46
+   xcb_window_t window = xcb_generate_id(connection);
47
+   xcb_create_window(connection,           /* Connection          */
48
+                     XCB_COPY_FROM_PARENT, /* depth (same as root)*/
49
+                     window,               /* window Id           */
50
+                     screen->root,         /* parent window       */
51
+                     0,
52
+                     0, /* x, y                */
53
+                     150,
54
+                     150,                           /* width, height       */
55
+                     10,                            /* border_width        */
56
+                     XCB_WINDOW_CLASS_INPUT_OUTPUT, /* class               */
57
+                     screen->root_visual,           /* visual              */
58
+                     0,
59
+                     NULL /* masks, not used yet */
60
+                     );
61
 
62
    /* Map the window on the screen */
63
-   xcb_map_window (connection, window);
64
+   xcb_map_window(connection, window);
65
 
66
    /* Make sure to flush so the Window shows. */
67
-   xcb_flush (connection);
68
+   xcb_flush(connection);
69
 
70
    /* Now we re-parent the Window to QT so we can better control it. */
71
-   QWidget *widget = QWidget::createWindowContainer(
72
-           QWindow::fromWinId(window), this);
73
+   QWidget *widget = QWidget::createWindowContainer(QWindow::fromWinId(window), this);
74
    widget->move(0, 0);
75
    widget->resize(300, 300);
76
 
77
    effect->dispatcher(effect, effEditOpen, 0, 0, (void *)window, 0);
78
 
79
-   VstRect* vstRect = nullptr;
80
+   VstRect *vstRect = nullptr;
81
    effect->dispatcher(effect, effEditGetRect, 0, 0, &vstRect, 0);
82
 
83
-   if (vstRect)
84
-   {
85
-       widget->resize(vstRect->right - vstRect->left,
86
-               vstRect->bottom - vstRect->top);
87
+   if (vstRect) {
88
+       widget->resize(vstRect->right - vstRect->left, vstRect->bottom - vstRect->top);
89
    }
90
 }
91
 
92
-void EditorWidget::handleResizeRequest(int width, int height) {
93
+void EditorWidget::handleResizeRequest(int width, int height)
94
+{
95
    // We don't have to do anything here as far as I can tell.
96
    // The widget will resize the HWIND itself and then
97
    // this widget will automatically size depending on that.
98
obs-studio-18.0.2.tar.xz/plugins/obs-vst/linux/VSTPlugin-linux.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/linux/VSTPlugin-linux.cpp Changed
52
 
1
@@ -19,14 +19,17 @@
2
 
3
 #include <util/platform.h>
4
 
5
-AEffect* VSTPlugin::loadEffect() {
6
-   AEffect *plugin = nullptr;
7
+AEffect* VSTPlugin::loadEffect()
8
+{
9
+   AEffect* plugin = nullptr;
10
 
11
    soHandle = os_dlopen(pluginPath.c_str());
12
-   if(soHandle == nullptr)
13
-   {
14
-       blog(LOG_WARNING, "Failed trying to load VST from '%s',"
15
-               "error %d\n", pluginPath.c_str(), errno);
16
+   if (soHandle == nullptr) {
17
+       blog(LOG_WARNING,
18
+            "Failed trying to load VST from '%s',"
19
+            "error %d\n",
20
+            pluginPath.c_str(),
21
+            errno);
22
        return nullptr;
23
    }
24
 
25
@@ -35,9 +38,7 @@
26
    mainEntryPoint = (vstPluginMain)os_dlsym(soHandle, "VSTPluginMain");
27
 
28
    if (mainEntryPoint == nullptr) {
29
-       mainEntryPoint =
30
-               (vstPluginMain)os_dlsym(soHandle,
31
-               "VstPluginMain()");
32
+       mainEntryPoint = (vstPluginMain)os_dlsym(soHandle, "VstPluginMain()");
33
    }
34
 
35
    if (mainEntryPoint == nullptr) {
36
@@ -50,12 +51,13 @@
37
    }
38
 
39
    // Instantiate the plug-in
40
-   plugin = mainEntryPoint(hostCallback_static);
41
+   plugin       = mainEntryPoint(hostCallback_static);
42
    plugin->user = this;
43
    return plugin;
44
 }
45
 
46
-void VSTPlugin::unloadLibrary() {
47
+void VSTPlugin::unloadLibrary()
48
+{
49
    if (soHandle) {
50
        os_dlclose(soHandle);
51
        soHandle = nullptr;
52
obs-studio-18.0.2.tar.xz/plugins/obs-vst/obs-vst.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/obs-vst.cpp Changed
292
 
1
@@ -18,29 +18,26 @@
2
 
3
 #include "headers/VSTPlugin.h"
4
 
5
-#define OPEN_VST_SETTINGS             "open_vst_settings"
6
-#define CLOSE_VST_SETTINGS            "close_vst_settings"
7
+#define OPEN_VST_SETTINGS "open_vst_settings"
8
+#define CLOSE_VST_SETTINGS "close_vst_settings"
9
 #define OPEN_WHEN_ACTIVE_VST_SETTINGS "open_when_active_vst_settings"
10
 
11
-#define PLUG_IN_NAME              obs_module_text("VstPlugin")
12
-#define OPEN_VST_TEXT             obs_module_text("OpenPluginInterface")
13
-#define CLOSE_VST_TEXT            obs_module_text("ClosePluginInterface")
14
+#define PLUG_IN_NAME obs_module_text("VstPlugin")
15
+#define OPEN_VST_TEXT obs_module_text("OpenPluginInterface")
16
+#define CLOSE_VST_TEXT obs_module_text("ClosePluginInterface")
17
 #define OPEN_WHEN_ACTIVE_VST_TEXT obs_module_text("OpenInterfaceWhenActive")
18
 
19
 OBS_DECLARE_MODULE()
20
 OBS_MODULE_USE_DEFAULT_LOCALE("obs-vst", "en-US")
21
 
22
-static bool open_editor_button_clicked(obs_properties_t *props,
23
-        obs_property_t *property, void *data)
24
+static bool open_editor_button_clicked(obs_properties_t *props, obs_property_t *property, void *data)
25
 {
26
    VSTPlugin *vstPlugin = (VSTPlugin *)data;
27
 
28
    vstPlugin->openEditor();
29
 
30
-   obs_property_set_visible(obs_properties_get(props,
31
-           OPEN_VST_SETTINGS), false);
32
-   obs_property_set_visible(obs_properties_get(props,
33
-           CLOSE_VST_SETTINGS), true);
34
+   obs_property_set_visible(obs_properties_get(props, OPEN_VST_SETTINGS), false);
35
+   obs_property_set_visible(obs_properties_get(props, CLOSE_VST_SETTINGS), true);
36
 
37
    UNUSED_PARAMETER(props);
38
    UNUSED_PARAMETER(property);
39
@@ -49,17 +46,14 @@
40
    return true;
41
 }
42
 
43
-static bool close_editor_button_clicked(obs_properties_t *props,
44
-        obs_property_t *property, void *data)
45
+static bool close_editor_button_clicked(obs_properties_t *props, obs_property_t *property, void *data)
46
 {
47
    VSTPlugin *vstPlugin = (VSTPlugin *)data;
48
 
49
    vstPlugin->closeEditor();
50
 
51
-   obs_property_set_visible(obs_properties_get(props,
52
-           OPEN_VST_SETTINGS), true);
53
-   obs_property_set_visible(obs_properties_get(props,
54
-           CLOSE_VST_SETTINGS), false);
55
+   obs_property_set_visible(obs_properties_get(props, OPEN_VST_SETTINGS), true);
56
+   obs_property_set_visible(obs_properties_get(props, CLOSE_VST_SETTINGS), false);
57
 
58
    UNUSED_PARAMETER(property);
59
 
60
@@ -87,8 +81,7 @@
61
 
62
    const char *path = obs_data_get_string(settings, "plugin_path");
63
 
64
-   if (strcmp(path, "") == 0)
65
-   {
66
+   if (strcmp(path, "") == 0) {
67
        return;
68
    }
69
    vstPlugin->loadEffectFromPath(std::string(path));
70
@@ -111,12 +104,10 @@
71
 {
72
    VSTPlugin *vstPlugin = (VSTPlugin *)data;
73
 
74
-   obs_data_set_string(settings, "chunk_data",
75
-           vstPlugin->getChunk().c_str());
76
+   obs_data_set_string(settings, "chunk_data", vstPlugin->getChunk().c_str());
77
 }
78
 
79
-static struct obs_audio_data *vst_filter_audio(void *data,
80
-       struct obs_audio_data *audio)
81
+static struct obs_audio_data *vst_filter_audio(void *data, struct obs_audio_data *audio)
82
 {
83
    VSTPlugin *vstPlugin = (VSTPlugin *)data;
84
    vstPlugin->process(audio);
85
@@ -128,58 +119,74 @@
86
 {
87
    QStringList dir_list;
88
 
89
-   #ifdef __APPLE__
90
-       dir_list << "/Library/Audio/Plug-Ins/VST/"
91
-       << "~/Library/Audio/Plug-ins/VST/";
92
-   #elif WIN32
93
+#ifdef __APPLE__
94
+   dir_list << "/Library/Audio/Plug-Ins/VST/"
95
+            << "~/Library/Audio/Plug-ins/VST/";
96
+#elif WIN32
97
+#ifndef _WIN64
98
+   HANDLE hProcess = GetCurrentProcess();
99
+
100
+   BOOL isWow64;
101
+   IsWow64Process(hProcess, &isWow64);
102
+
103
+   if (!isWow64) {
104
+#endif
105
        dir_list << "C:/Program Files/Steinberg/VstPlugins/"
106
-       << "C:/Program Files/Common Files/Steinberg/Shared Components/"
107
-       << "C:/Program Files/Common Files/VST2"
108
-       << "C:/Program Files/Common Files/VSTPlugins/"
109
-       << "C:/Program Files/VSTPlugins/";
110
-   #elif __linux__
111
+                << "C:/Program Files/Common Files/Steinberg/Shared Components/"
112
+                << "C:/Program Files/Common Files/VST2"
113
+                << "C:/Program Files/Common Files/VSTPlugins/"
114
+                << "C:/Program Files/VSTPlugins/";
115
+#ifndef _WIN64
116
+   } else {
117
+       dir_list << "C:/Program Files (x86)/Steinberg/VstPlugins/"
118
+                << "C:/Program Files (x86)/Common Files/Steinberg/Shared Components/"
119
+                << "C:/Program Files (x86)/Common Files/VST2"
120
+                << "C:/Program Files (x86)/Common Files/VSTPlugins/"
121
+                << "C:/Program Files (x86)/VSTPlugins/";
122
+   }
123
+#endif
124
+#elif __linux__
125
    // If the user has set the VST_PATH environmental
126
    // variable, then use it. Else default to a list
127
    // of common locations.
128
    char *vstPathEnv;
129
    vstPathEnv = getenv("VST_PATH");
130
-   if (vstPathEnv != nullptr)
131
-   {
132
+   if (vstPathEnv != nullptr) {
133
        dir_list << vstPathEnv;
134
    } else {
135
        // Choose the most common locations
136
        dir_list << "/usr/lib/vst/"
137
-            << "/usr/lib/lxvst/"
138
-            << "/usr/lib/linux_vst/"
139
-            << "/usr/lib64/vst/"
140
-            << "/usr/lib64/lxvst/"
141
-            << "/usr/lib64/linux_vst/"
142
-            << "/usr/local/lib/vst/"
143
-            << "/usr/local/lib/lxvst/"
144
-            << "/usr/local/lib/linux_vst/"
145
-            << "/usr/local/lib64/vst/"
146
-            << "/usr/local/lib64/lxvst/"
147
-            << "/usr/local/lib64/linux_vst/"
148
-            << "~/.vst/"
149
-            << "~/.lxvst/";
150
+                << "/usr/lib/lxvst/"
151
+                << "/usr/lib/linux_vst/"
152
+                << "/usr/lib64/vst/"
153
+                << "/usr/lib64/lxvst/"
154
+                << "/usr/lib64/linux_vst/"
155
+                << "/usr/local/lib/vst/"
156
+                << "/usr/local/lib/lxvst/"
157
+                << "/usr/local/lib/linux_vst/"
158
+                << "/usr/local/lib64/vst/"
159
+                << "/usr/local/lib64/lxvst/"
160
+                << "/usr/local/lib64/linux_vst/"
161
+                << "~/.vst/"
162
+                << "~/.lxvst/";
163
    }
164
-   #endif
165
+#endif
166
 
167
    QStringList filters;
168
 
169
-   #ifdef __APPLE__
170
-       filters << "*.vst";
171
-   #elif WIN32
172
-       filters << "*.dll";
173
-   #elif __linux__
174
-       filters << "*.so" << "*.o";
175
-   #endif
176
+#ifdef __APPLE__
177
+   filters << "*.vst";
178
+#elif WIN32
179
+   filters << "*.dll";
180
+#elif __linux__
181
+   filters << "*.so"
182
+           << "*.o";
183
+#endif
184
 
185
    QStringList vst_list;
186
 
187
    // Read all plugins into a list...
188
-   for (int a = 0; a < dir_list.size(); ++a)
189
-   {
190
+   for (int a = 0; a < dir_list.size(); ++a) {
191
        QDir search_dir(dir_list[a]);
192
        search_dir.setNameFilters(filters);
193
        QDirIterator it(search_dir, QDirIterator::Subdirectories);
194
@@ -187,13 +194,13 @@
195
            QString path = it.next();
196
            QString name = it.fileName();
197
 
198
-           #ifdef __APPLE__
199
-               name.remove(QRegExp("(\\.vst)"));
200
-           #elif WIN32
201
-               name.remove(QRegExp("(\\.dll)"));
202
-           #elif __linux__
203
-               name.remove(QRegExp("(\\.so|\\.o)"));
204
-           #endif
205
+#ifdef __APPLE__
206
+           name.remove(QRegExp("(\\.vst)"));
207
+#elif WIN32
208
+           name.remove(QRegExp("(\\.dll)"));
209
+#elif __linux__
210
+           name.remove(QRegExp("(\\.so|\\.o)"));
211
+#endif
212
 
213
            name.append("=").append(path);
214
            vst_list << name;
215
@@ -201,39 +208,30 @@
216
    }
217
 
218
    // Now sort list alphabetically (still case-sensitive though).
219
-   std::stable_sort(vst_list.begin(), vst_list.end(),
220
-           std::less<QString>());
221
+   std::stable_sort(vst_list.begin(), vst_list.end(), std::less<QString>());
222
 
223
    // Now add said list to the plug-in list of OBS
224
-   obs_property_list_add_string(list, "{Please select a plug-in}",
225
-           nullptr);
226
-   for (int b = 0; b < vst_list.size(); ++b)
227
-   {
228
+   obs_property_list_add_string(list, "{Please select a plug-in}", nullptr);
229
+   for (int b = 0; b < vst_list.size(); ++b) {
230
        QString vst_sorted = vst_list[b];
231
        obs_property_list_add_string(list,
232
-               vst_sorted.left(vst_sorted.indexOf
233
-               ('=')).toStdString().c_str(),
234
-               vst_sorted.mid(vst_sorted.indexOf('=') +
235
-                1).toStdString().c_str());
236
+                                    vst_sorted.left(vst_sorted.indexOf('=')).toStdString().c_str(),
237
+                                    vst_sorted.mid(vst_sorted.indexOf('=') + 1).toStdString().c_str());
238
    }
239
 }
240
 
241
 static obs_properties_t *vst_properties(void *data)
242
 {
243
    obs_properties_t *props = obs_properties_create();
244
-   obs_property_t *list = obs_properties_add_list(props, "plugin_path",
245
-           PLUG_IN_NAME, OBS_COMBO_TYPE_LIST,
246
-           OBS_COMBO_FORMAT_STRING);
247
+   obs_property_t *  list  = obs_properties_add_list(
248
+           props, "plugin_path", PLUG_IN_NAME, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
249
 
250
    fill_out_plugins(list);
251
 
252
-   obs_properties_add_button(props, OPEN_VST_SETTINGS, OPEN_VST_TEXT,
253
-           open_editor_button_clicked);
254
+   obs_properties_add_button(props, OPEN_VST_SETTINGS, OPEN_VST_TEXT, open_editor_button_clicked);
255
 
256
-   obs_properties_add_button(props, CLOSE_VST_SETTINGS, CLOSE_VST_TEXT,
257
-           close_editor_button_clicked);
258
-   obs_property_set_visible(obs_properties_get(props,
259
-           CLOSE_VST_SETTINGS), false);
260
+   obs_properties_add_button(props, CLOSE_VST_SETTINGS, CLOSE_VST_TEXT, close_editor_button_clicked);
261
+   obs_property_set_visible(obs_properties_get(props, CLOSE_VST_SETTINGS), false);
262
 
263
    obs_properties_add_bool(props, OPEN_WHEN_ACTIVE_VST_SETTINGS, OPEN_WHEN_ACTIVE_VST_TEXT);
264
 
265
@@ -245,16 +243,16 @@
266
 bool obs_module_load(void)
267
 {
268
    struct obs_source_info vst_filter = {};
269
-   vst_filter.id = "vst_filter";
270
-   vst_filter.type = OBS_SOURCE_TYPE_FILTER;
271
-   vst_filter.output_flags = OBS_SOURCE_AUDIO;
272
-   vst_filter.get_name = vst_name;
273
-   vst_filter.create = vst_create;
274
-   vst_filter.destroy = vst_destroy;
275
-   vst_filter.update = vst_update;
276
-   vst_filter.filter_audio = vst_filter_audio;
277
-   vst_filter.get_properties = vst_properties;
278
-   vst_filter.save = vst_save;
279
+   vst_filter.id                     = "vst_filter";
280
+   vst_filter.type                   = OBS_SOURCE_TYPE_FILTER;
281
+   vst_filter.output_flags           = OBS_SOURCE_AUDIO;
282
+   vst_filter.get_name               = vst_name;
283
+   vst_filter.create                 = vst_create;
284
+   vst_filter.destroy                = vst_destroy;
285
+   vst_filter.update                 = vst_update;
286
+   vst_filter.filter_audio           = vst_filter_audio;
287
+   vst_filter.get_properties         = vst_properties;
288
+   vst_filter.save                   = vst_save;
289
 
290
    obs_register_source(&vst_filter);
291
    return true;
292
obs-studio-18.0.2.tar.xz/plugins/obs-vst/win/EditorWidget-win.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/win/EditorWidget-win.cpp Changed
51
 
1
@@ -17,37 +17,33 @@
2
 
3
 #include "../headers/EditorWidget.h"
4
 
5
-void EditorWidget::buildEffectContainer(AEffect *effect) {
6
-   WNDCLASSEX wcex{ sizeof(wcex)};
7
+void EditorWidget::buildEffectContainer(AEffect *effect)
8
+{
9
+   WNDCLASSEX wcex{sizeof(wcex)};
10
 
11
-   wcex.lpfnWndProc = DefWindowProc;
12
-   wcex.hInstance = GetModuleHandle(0);
13
+   wcex.lpfnWndProc   = DefWindowProc;
14
+   wcex.hInstance     = GetModuleHandle(0);
15
    wcex.lpszClassName = L"Minimal VST host - Guest VST Window Frame";
16
    RegisterClassEx(&wcex);
17
 
18
    const auto style = WS_CAPTION | WS_THICKFRAME | WS_OVERLAPPEDWINDOW;
19
-   HWND hwnd = CreateWindow(
20
-       wcex.lpszClassName, TEXT(""), style
21
-       , 0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr
22
-   );
23
+   HWND hwnd = CreateWindow(wcex.lpszClassName, TEXT(""), style, 0, 0, 0, 0, nullptr, nullptr, nullptr, nullptr);
24
 
25
-   QWidget *widget = QWidget::createWindowContainer(
26
-           QWindow::fromWinId((WId)hwnd), this);
27
+   QWidget *widget = QWidget::createWindowContainer(QWindow::fromWinId((WId)hwnd), this);
28
    widget->move(0, 0);
29
    widget->resize(300, 300);
30
 
31
    effect->dispatcher(effect, effEditOpen, 0, 0, hwnd, 0);
32
 
33
-   VstRect* vstRect = nullptr;
34
+   VstRect *vstRect = nullptr;
35
    effect->dispatcher(effect, effEditGetRect, 0, 0, &vstRect, 0);
36
-   if (vstRect)
37
-   {
38
-       widget->resize(vstRect->right - vstRect->left,
39
-               vstRect->bottom - vstRect->top);
40
+   if (vstRect) {
41
+       widget->resize(vstRect->right - vstRect->left, vstRect->bottom - vstRect->top);
42
    }
43
 }
44
 
45
-void EditorWidget::handleResizeRequest(int width, int height) {
46
+void EditorWidget::handleResizeRequest(int width, int height)
47
+{
48
    // We don't have to do anything here as far as I can tell.
49
    // The widget will resize the HWIND itself and then this
50
    // widget will automatically size depending on that.
51
obs-studio-18.0.2.tar.xz/plugins/obs-vst/win/VSTPlugin-win.cpp -> obs-studio-19.0.2.tar.xz/plugins/obs-vst/win/VSTPlugin-win.cpp Changed
73
 
1
@@ -21,41 +21,41 @@
2
 #include <util/platform.h>
3
 #include <windows.h>
4
 
5
-AEffect* VSTPlugin::loadEffect() {
6
+AEffect *VSTPlugin::loadEffect()
7
+{
8
    AEffect *plugin = nullptr;
9
 
10
    wchar_t *wpath;
11
    os_utf8_to_wcs_ptr(pluginPath.c_str(), 0, &wpath);
12
    dllHandle = LoadLibraryW(wpath);
13
    bfree(wpath);
14
-   if(dllHandle == nullptr) {
15
+   if (dllHandle == nullptr) {
16
 
17
        DWORD errorCode = GetLastError();
18
 
19
        // Display the error message and exit the process
20
        if (errorCode == ERROR_BAD_EXE_FORMAT) {
21
-           blog(LOG_WARNING, "Could not open library, "
22
-                   "wrong architecture.");
23
+           blog(LOG_WARNING,
24
+                "Could not open library, "
25
+                "wrong architecture.");
26
        } else {
27
-           blog(LOG_WARNING, "Failed trying to load VST from '%s'"
28
-                   ", error %d\n", pluginPath,
29
-                   GetLastError());
30
+           blog(LOG_WARNING,
31
+                "Failed trying to load VST from '%s'"
32
+                ", error %d\n",
33
+                pluginPath,
34
+                GetLastError());
35
        }
36
        return nullptr;
37
    }
38
 
39
-   vstPluginMain mainEntryPoint =
40
-       (vstPluginMain)GetProcAddress(dllHandle, "VSTPluginMain");
41
+   vstPluginMain mainEntryPoint = (vstPluginMain)GetProcAddress(dllHandle, "VSTPluginMain");
42
 
43
    if (mainEntryPoint == nullptr) {
44
-       mainEntryPoint =
45
-               (vstPluginMain)GetProcAddress(dllHandle,
46
-                       "VstPluginMain()");
47
+       mainEntryPoint = (vstPluginMain)GetProcAddress(dllHandle, "VstPluginMain()");
48
    }
49
 
50
    if (mainEntryPoint == nullptr) {
51
-       mainEntryPoint = (vstPluginMain)GetProcAddress(dllHandle,
52
-               "main");
53
+       mainEntryPoint = (vstPluginMain)GetProcAddress(dllHandle, "main");
54
    }
55
 
56
    if (mainEntryPoint == nullptr) {
57
@@ -64,12 +64,13 @@
58
    }
59
 
60
    // Instantiate the plug-in
61
-   plugin = mainEntryPoint(hostCallback_static);
62
+   plugin       = mainEntryPoint(hostCallback_static);
63
    plugin->user = this;
64
    return plugin;
65
 }
66
 
67
-void VSTPlugin::unloadLibrary() {
68
+void VSTPlugin::unloadLibrary()
69
+{
70
    if (dllHandle) {
71
        FreeLibrary(dllHandle);
72
        dllHandle = nullptr;
73
obs-studio-19.0.2.tar.xz/plugins/obs-x264/data/locale/bn-BD.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+Bitrate="বিটরেট"
3
+CustomBufsize="ব্যবহার স্বনির্বাচিত বাফারের আকার"
4
+RateControl="হার নিয়ন্ত্রণ"
5
+CRF="CRF"
6
+KeyframeIntervalSec="Keyframe বিরতি (সেকেন্ড, 0 অটো =)"
7
+Tune="টিউন"
8
+None="(একটিও না)"
9
+EncoderOptions="x264 বিকল্প (স্পেইস দিয়ে)"
10
+
11
obs-studio-18.0.2.tar.xz/plugins/obs-x264/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/obs-x264/data/locale/et-EE.ini Changed
14
 
1
@@ -1,7 +1,12 @@
2
 Bitrate="Bitikiirus"
3
 CustomBufsize="Kasuta kohandatud puhvri suurust"
4
 BufferSize="Puhvri suurus"
5
+CRF="CRF"
6
+KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
7
+CPUPreset="CPU kasutus eelseadistus(kõrgem = vähem CPU)"
8
 Profile="Profiil"
9
+Tune="Häälestus"
10
 None="(Määramata)"
11
 EncoderOptions="x264 suvandid (eraldatud tühikutega)"
12
+VFR="Muutuv kaadrisagedus (VFR)"
13
 
14
obs-studio-19.0.2.tar.xz/plugins/obs-x264/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Bitrate="बिटदर"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/obs-x264/data/locale/ur-PK.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+Bitrate="بٹ شرح"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/rtmp-services/data/locale/bn-BD.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+StreamingServices="স্ট্রিমিং সেবা"
3
+CustomStreamingServer="কাস্টম স্ট্রিমিং সার্ভার"
4
+StreamKey="স্ত্রিম্ চাবি"
5
+UseAuth="প্রমাণীকরণ ব্যবহার করুন"
6
+ShowAll="সকল সেবা প্রদর্শন করা হবে"
7
+
8
obs-studio-19.0.2.tar.xz/plugins/rtmp-services/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+StreamingServices="स्ट्रीमिंग सेवाए"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/rtmp-services/data/locale/ur-PK.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+StreamingServices="محرومی کی خدمات"
3
+
4
obs-studio-18.0.2.tar.xz/plugins/rtmp-services/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/rtmp-services/data/locale/zh-CN.ini Changed
10
 
1
@@ -2,7 +2,7 @@
2
 CustomStreamingServer="自定义流媒体服务器"
3
 Service="服务"
4
 Server="服务器"
5
-StreamKey="流密钥"
6
+StreamKey="流名称"
7
 UseAuth="使用身份验证"
8
 Username="用户名"
9
 Password="密码"
10
obs-studio-18.0.2.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-19.0.2.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": 56,
5
+   "version": 58,
6
    "files": [
7
        {
8
            "name": "services.json",
9
-           "version": 56
10
+           "version": 58
11
        }
12
    ]
13
 }
14
obs-studio-18.0.2.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-19.0.2.tar.xz/plugins/rtmp-services/data/services.json Changed
99
 
1
@@ -161,7 +161,7 @@
2
             }
3
         },
4
         {
5
-            "name": "hitbox.tv",
6
+            "name": "Smashcast",
7
             "common": true,
8
             "servers": [
9
                 {
10
@@ -347,27 +347,6 @@
11
             ]
12
         },
13
         {
14
-            "name": "Livecoding.tv",
15
-            "common": true,
16
-            "servers": [
17
-                {
18
-                    "name": "United States",
19
-                    "url": "rtmp://usmedia3.livecoding.tv/livecodingtv"
20
-                },
21
-                {
22
-                    "name": "EU",
23
-                    "url": "rtmp://eumedia1.livecoding.tv/livecodingtv"
24
-                },
25
-                {
26
-                    "name": "Asia Pacific",
27
-                    "url": "rtmp://apmedia1.livecoding.tv/livecodingtv"
28
-                }
29
-            ],
30
-            "recommended": {
31
-                "max video bitrate": 2300
32
-            }
33
-        },
34
-        {
35
             "name": "WatchPeopleCode.com",
36
             "servers": [
37
                 {
38
@@ -515,15 +494,6 @@
39
             }
40
         },
41
         {
42
-            "name": "connectcast.tv",
43
-            "servers": [
44
-                {
45
-                    "name": "Default",
46
-                    "url": "rtmp://stream.connectcast.tv/live"
47
-                }
48
-            ]
49
-        },
50
-        {
51
             "name": "CyberGame.TV",
52
             "servers": [
53
                 {
54
@@ -537,19 +507,6 @@
55
             ]
56
         },
57
         {
58
-            "name": "CashPlay.tv",
59
-            "servers": [
60
-                {
61
-                    "name": "Primary, UK",
62
-                    "url": "rtmp://live.cashplay.tv/live"
63
-                },
64
-                {
65
-                    "name": "Low Priority, DE",
66
-                    "url": "rtmp://de.live.cashplay.tv/live"
67
-                }
68
-            ]
69
-        },
70
-        {
71
             "name": "DJlive.pl",
72
             "servers": [
73
                 {
74
@@ -613,10 +570,6 @@
75
                     "url": "rtmp://us-west.restream.io/live"
76
                 },
77
                 {
78
-                    "name": "US-West (Los Angeles, CA)",
79
-                    "url": "rtmp://us-la.restream.io/live"
80
-                },
81
-                {
82
                     "name": "US-Central (Dallas, TX)",
83
                     "url": "rtmp://us-central.restream.io/live"
84
                 },
85
@@ -698,11 +651,11 @@
86
             ]
87
         },
88
         {
89
-            "name": "Stre.am",
90
+            "name": "Stream.live",
91
             "servers": [
92
                 {
93
                     "name": "Default",
94
-                    "url": "rtmp://media.stre.am:1935/live"
95
+                    "url": "rtmp://media.stream.live:1935/live"
96
                 }
97
             ],
98
             "recommended": {
99
obs-studio-18.0.2.tar.xz/plugins/rtmp-services/rtmp-common.c -> obs-studio-19.0.2.tar.xz/plugins/rtmp-services/rtmp-common.c Changed
48
 
1
@@ -111,6 +111,8 @@
2
    obs_property_list_add_string(list, name, name);
3
 }
4
 
5
+static inline json_t *find_service(json_t *root, const char *name);
6
+
7
 static void add_services(obs_property_t *list, json_t *root, bool show_all,
8
        const char *cur_service)
9
 {
10
@@ -126,6 +128,13 @@
11
    json_array_foreach (root, index, service) {
12
        add_service(list, service, show_all, cur_service);
13
    }
14
+
15
+   service = find_service(root, cur_service);
16
+   if (!service && cur_service && *cur_service) {
17
+       obs_property_list_insert_string(list, 0, cur_service,
18
+               cur_service);
19
+       obs_property_list_item_disable(list, 0, true);
20
+   }
21
 }
22
 
23
 static json_t *open_json_file(const char *file)
24
@@ -263,12 +272,20 @@
25
        return false;
26
 
27
    service = find_service(root, name);
28
-   if (!service)
29
-       return false;
30
+   if (!service) {
31
+       const char *server = obs_data_get_string(settings, "server");
32
+
33
+       obs_property_list_insert_string(p, 0, name, name);
34
+       obs_property_list_item_disable(p, 0, true);
35
+
36
+       p = obs_properties_get(props, "server");
37
+       obs_property_list_insert_string(p, 0, server, server);
38
+       obs_property_list_item_disable(p, 0, true);
39
+       return true;
40
+   }
41
 
42
    fill_servers(obs_properties_get(props, "server"), service, name);
43
 
44
-   UNUSED_PARAMETER(p);
45
    return true;
46
 }
47
 
48
obs-studio-19.0.2.tar.xz/plugins/text-freetype2/data/locale/bn-BD.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+TextFreetype2="টেক্সট (FreeType 2)"
3
+Font="ফন্ট"
4
+TextFileFilter="টেক্সট ফাইল (*.txt);;"
5
+ChatLogMode="আড্ডার লগ মোড (6 শেষ লাইন)"
6
+Outline="রূপরেখা"
7
+DropShadow="ছায়া ফেলে"
8
+ReadFromFile="ফাইল থেকে পড়া"
9
+
10
obs-studio-18.0.2.tar.xz/plugins/text-freetype2/find-font-cocoa.m -> obs-studio-19.0.2.tar.xz/plugins/text-freetype2/find-font-cocoa.m Changed
19
 
1
@@ -32,7 +32,16 @@
2
    for (NSString *file in files) {
3
        NSString *full_path = [path stringByAppendingPathComponent:file];
4
 
5
-       add_path_font(full_path.fileSystemRepresentation);
6
+       BOOL is_dir = FALSE;
7
+       bool folder_exists = [file_manager
8
+               fileExistsAtPath:full_path
9
+               isDirectory:&is_dir];
10
+
11
+       if (folder_exists && is_dir) {
12
+           add_path_fonts(file_manager, full_path);
13
+       } else {
14
+           add_path_font(full_path.fileSystemRepresentation);
15
+       }
16
    }
17
 }
18
 
19
obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/bn-BD.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+VLCSource="VLC ভিডিও উৎস"
3
+PlaybackBehavior="দৃশ্যমানতা আচরণ"
4
+PlaybackBehavior.StopRestart="পুনরায় শুরু করা না দেখা যায়, যখন দেখা যায় যখন বন্ধ"
5
+
6
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/ca-ES.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Origen de vídeo VLC"
3
 Playlist="Llista de reproducció"
4
 LoopPlaylist="Repetir la llista de reproducció"
5
+Shuffle="Barreja la llista de reproducció"
6
 PlaybackBehavior="Comportament de la visibilitat"
7
 PlaybackBehavior.StopRestart="Aturar quan no sigui visible, reiniciar quan sigui visible"
8
 PlaybackBehavior.PauseUnpause="Pausa quan no sigui visible, reprendre quan sigui visible"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/cs-CZ.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Video zdroj VLC"
3
 Playlist="Seznam skladeb"
4
 LoopPlaylist="Opakovat seznam skladeb"
5
+Shuffle="Náhodné řazení playlistu"
6
 PlaybackBehavior="Závislost na viditelnosti"
7
 PlaybackBehavior.StopRestart="Zastavit při skrytém, restartovat při obnovení"
8
 PlaybackBehavior.PauseUnpause="Pozastavit při skrytém, pokračovat při obnovení"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/da-DK.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC videokilde"
3
 Playlist="Afspilningsliste"
4
 LoopPlaylist="Loop afspilningsliste"
5
+Shuffle="Bland playliste"
6
 PlaybackBehavior="Synligheds opførsel"
7
 PlaybackBehavior.StopRestart="Stop når ikke synlig, genstart når synlig"
8
 PlaybackBehavior.PauseUnpause="Paus når ikke synlig, genoptag når synlig"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/de-DE.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC Videoquelle"
3
 Playlist="Wiedergabeliste"
4
 LoopPlaylist="Wiedergabeliste wiederholen"
5
+Shuffle="Wiedergabeliste zufällig wiedergeben"
6
 PlaybackBehavior="Sichtbarkeitsverhalten"
7
 PlaybackBehavior.StopRestart="Anhalten wenn nicht sichtbar, neustarten wenn sichtbar"
8
 PlaybackBehavior.PauseUnpause="Pausieren wenn nicht sichtbar, fortsetzen wenn sichtbar"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/en-US.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/en-US.ini Changed
9
 
1
@@ -1,6 +1,7 @@
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
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/es-ES.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Fuente de vídeo VLC"
3
 Playlist="Lista de reproducción"
4
 LoopPlaylist="Repetir lista de reproducción"
5
+Shuffle="Mezclar lista de reproducción"
6
 PlaybackBehavior="Comportamiento de la visibilidad"
7
 PlaybackBehavior.StopRestart="Detener cuando no sea visible, reiniciar cuando sea visible"
8
 PlaybackBehavior.PauseUnpause="Pausar cuando no sea visible, reanudar cuando sea visible"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/eu-ES.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC bideo-iturburua"
3
 Playlist="Erreprodukzio-zerrenda"
4
 LoopPlaylist="Errepikatu erreprodukzio-zerrenda"
5
+Shuffle="Nahasi erreprodukzio-zerrenda"
6
 PlaybackBehavior="Ikuste-jokabidea"
7
 PlaybackBehavior.StopRestart="Ikusten ez bada gelditu, ikusten denean berrabiarazi"
8
 PlaybackBehavior.PauseUnpause="Ikusten ez bada pausatu, ikusten denean jarraitu"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/fi-FI.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC Video-lähde"
3
 Playlist="Soittolista"
4
 LoopPlaylist="Toista soittolistaa jatkuvasti"
5
+Shuffle="Sekoita soittolista"
6
 PlaybackBehavior="Näkyvyyden käyttäytyminen"
7
 PlaybackBehavior.StopRestart="Pysäytä toisto kun lähde ei näy. Käynnistä toisto uudelleen, kun se on taas näkyvissä"
8
 PlaybackBehavior.PauseUnpause="Keskeytä toisto kun lähde ei näy. Jatka toistoa, kun se on taas näkyvissä"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/fr-FR.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Source vidéo VLC"
3
 Playlist="Liste de lecture"
4
 LoopPlaylist="Répéter la liste de lecture"
5
+Shuffle="Playlist Hazard"
6
 PlaybackBehavior="Comportement de visibilité"
7
 PlaybackBehavior.StopRestart="Arrêter quand elle n'est pas visible, redémarrer lorsqu'elle est visible"
8
 PlaybackBehavior.PauseUnpause="Suspendre lorsqu'elle n'est pas visible, reprendre lorsqu'elle est visible"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/hu-HU.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC Videoforrás"
3
 Playlist="Lejátszási lista"
4
 LoopPlaylist="Ismétlődő lejátszási lista"
5
+Shuffle="Véletlenszerű lejátszási lista"
6
 PlaybackBehavior="Láthatósági opció"
7
 PlaybackBehavior.StopRestart="Leállítás, ha nem látható, újraindul, ha látható"
8
 PlaybackBehavior.PauseUnpause="Szüneteltet, ha nem látható, folytatás, ha látható"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/ja-JP.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC ビデオソース"
3
 Playlist="プレイリスト"
4
 LoopPlaylist="プレイリストをループ再生"
5
+Shuffle="プレイリストをシャッフルする"
6
 PlaybackBehavior="表示の動作"
7
 PlaybackBehavior.StopRestart="表示されていないときに停止、表示時に再開"
8
 PlaybackBehavior.PauseUnpause="表示されていないときに一時停止、表示時に一時停止を解除"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/ko-KR.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC 비디오 소스"
3
 Playlist="재생목록"
4
 LoopPlaylist="반복 재생"
5
+Shuffle="재생목록 섞기"
6
 PlaybackBehavior="표시 동작 설정"
7
 PlaybackBehavior.StopRestart="보이지 않을 때 중단, 보이면 재시작"
8
 PlaybackBehavior.PauseUnpause="보이지 않을 때 일시 중지, 보이면 일시 중지 해제"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/nl-NL.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC Videobron"
3
 Playlist="Playlist"
4
 LoopPlaylist="Playlist herhalen"
5
+Shuffle="Hussel afspeellijst"
6
 PlaybackBehavior="Zichtbaarheidsgedrag"
7
 PlaybackBehavior.StopRestart="Stop wanneer niet zichtbaar, herstart wanneer zichtbaar"
8
 PlaybackBehavior.PauseUnpause="Pauzeer wanneer niet zichtbaar, hervat wanneer zichtbaar"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/pl-PL.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Odtwarzacz VLC"
3
 Playlist="Lista odtwarzania"
4
 LoopPlaylist="Powtarzaj listę odtwarzania"
5
+Shuffle="Przetasuj listę odtwarzania"
6
 PlaybackBehavior="Zachowanie"
7
 PlaybackBehavior.StopRestart="Zatrzymaj, gdy niewidoczne. Odtwarzaj od początku, gdy widoczne."
8
 PlaybackBehavior.PauseUnpause="Wstrzymaj, gdy niewidoczne. Wznów, gdy widoczne."
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/pt-BR.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Fonte de vídeo do VLC"
3
 Playlist="Lista de reprodução"
4
 LoopPlaylist="Repetir a Lista de reprodução"
5
+Shuffle="Misturar a Lista"
6
 PlaybackBehavior="Comportamento de visibilidade"
7
 PlaybackBehavior.StopRestart="Parar quando não visível, reiniciar quando visível"
8
 PlaybackBehavior.PauseUnpause="Pausa quando não visível, resumir quando visível"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/ru-RU.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="Источник VLC видео"
3
 Playlist="Плейлист"
4
 LoopPlaylist="Циклическое воспроизведение"
5
+Shuffle="Перемешать плейлист"
6
 PlaybackBehavior="Поведение видимости"
7
 PlaybackBehavior.StopRestart="Остановить, когда не видно, перезагрузить, когда видно"
8
 PlaybackBehavior.PauseUnpause="Пауза, когда не видно, возобновить, когда видно"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/sv-SE.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC-videokälla"
3
 Playlist="Spellista"
4
 LoopPlaylist="Slinga spellista"
5
+Shuffle="Slumpa spellista"
6
 PlaybackBehavior="Synlighetsbeteende"
7
 PlaybackBehavior.StopRestart="Stoppa när den inte syns, starta om när den syns"
8
 PlaybackBehavior.PauseUnpause="Pausa när den inte syns, återuppta när den syns"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/tr-TR.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC Video Kaynağı"
3
 Playlist="Oynatma Listesi"
4
 LoopPlaylist="Oynatma Listesini Yinele"
5
+Shuffle="Oynatma Listesini Karıştır"
6
 PlaybackBehavior="Görünürlük davranışı"
7
 PlaybackBehavior.StopRestart="Görünür değilken durdur, görünür olunca yeniden başlat"
8
 PlaybackBehavior.PauseUnpause="Görünür değilken duraklat, görünür olunca oynat"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/uk-UA.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC-відео"
3
 Playlist="Список відтворення"
4
 LoopPlaylist="Повторювати список відтворювання"
5
+Shuffle="Перемішати список відтворення"
6
 PlaybackBehavior="Видимість та відтворення"
7
 PlaybackBehavior.StopRestart="Зупинити, коли не видимий. Грати з початку, коли видимий"
8
 PlaybackBehavior.PauseUnpause="Пизупинити, коли не видимий. Грати далі, коли видимий"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/zh-CN.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC 视频源"
3
 Playlist="播放列表"
4
 LoopPlaylist="循环播放列表"
5
+Shuffle="随机播放列表"
6
 PlaybackBehavior="可见性的行为"
7
 PlaybackBehavior.StopRestart="不可见时停止, 可见时重启"
8
 PlaybackBehavior.PauseUnpause="不可见时暂停, 可见时取消暂停"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/data/locale/zh-TW.ini Changed
9
 
1
@@ -1,6 +1,7 @@
2
 VLCSource="VLC視訊來源"
3
 Playlist="播放清單"
4
 LoopPlaylist="循環播放清單"
5
+Shuffle="隨機播放"
6
 PlaybackBehavior="播放行為"
7
 PlaybackBehavior.StopRestart="不可見時停止,可見時重新開始"
8
 PlaybackBehavior.PauseUnpause="不可見時暫停,可見時取消暫停"
9
obs-studio-18.0.2.tar.xz/plugins/vlc-video/vlc-video-source.c -> obs-studio-19.0.2.tar.xz/plugins/vlc-video/vlc-video-source.c Changed
64
 
1
@@ -12,6 +12,7 @@
2
 
3
 #define S_PLAYLIST                     "playlist"
4
 #define S_LOOP                         "loop"
5
+#define S_SHUFFLE                      "shuffle"
6
 #define S_BEHAVIOR                     "playback_behavior"
7
 #define S_BEHAVIOR_STOP_RESTART        "stop_restart"
8
 #define S_BEHAVIOR_PAUSE_UNPAUSE       "pause_unpause"
9
@@ -20,6 +21,7 @@
10
 #define T_(text) obs_module_text(text)
11
 #define T_PLAYLIST                     T_("Playlist")
12
 #define T_LOOP                         T_("LoopPlaylist")
13
+#define T_SHUFFLE                      T_("shuffle")
14
 #define T_BEHAVIOR                     T_("PlaybackBehavior")
15
 #define T_BEHAVIOR_STOP_RESTART        T_("PlaybackBehavior.StopRestart")
16
 #define T_BEHAVIOR_PAUSE_UNPAUSE       T_("PlaybackBehavior.PauseUnpause")
17
@@ -52,6 +54,7 @@
18
    DARRAY(struct media_file_data) files;
19
    enum behavior behavior;
20
    bool loop;
21
+   bool shuffle;
22
 };
23
 
24
 static libvlc_media_t *get_media(struct darray *array, const char *path)
25
@@ -543,6 +546,22 @@
26
    pthread_mutex_unlock(&c->mutex);
27
 
28
    /* ------------------------------------- */
29
+   /* shuffle playlist */
30
+
31
+   c->shuffle = obs_data_get_bool(settings, S_SHUFFLE);
32
+
33
+   if (c->files.num > 1 && c->shuffle) {
34
+       for (size_t i = 0; i < c->files.num - 1; i++) {
35
+           size_t j = i + rand() / (RAND_MAX
36
+                   / (c->files.num - i) + 1);
37
+
38
+           struct media_file_data t = c->files.array[j];
39
+           c->files.array[j] = c->files.array[i];
40
+           c->files.array[i] = t;
41
+       }
42
+   }
43
+
44
+   /* ------------------------------------- */
45
    /* clean up and restart playback */
46
 
47
    free_files(&old_files.da);
48
@@ -658,6 +677,7 @@
49
 static void vlcs_defaults(obs_data_t *settings)
50
 {
51
    obs_data_set_default_bool(settings, S_LOOP, true);
52
+   obs_data_set_default_bool(settings, S_SHUFFLE, false);
53
    obs_data_set_default_string(settings, S_BEHAVIOR,
54
            S_BEHAVIOR_STOP_RESTART);
55
 }
56
@@ -672,6 +692,7 @@
57
    obs_property_t *p;
58
 
59
    obs_properties_add_bool(ppts, S_LOOP, T_LOOP);
60
+   obs_properties_add_bool(ppts, S_SHUFFLE, T_SHUFFLE);
61
 
62
    if (c) {
63
        pthread_mutex_lock(&c->mutex);
64
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/ar-SA.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/ar-SA.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="التقاط النافذة"
3
 WindowCapture.Window="نافذة"
4
 WindowCapture.Priority="أولوية النوافذ المختارة"
5
-WindowCapture.Priority.Title="عنوان النافذة"
6
-WindowCapture.Priority.Class="فئة النافذة"
7
-WindowCapture.Priority.Exe="اسم قابل للتنفيذ"
8
 CaptureCursor="مؤشر الالتقاط"
9
 Compatibility="توافق محول متعدد"
10
 AllowTransparency="السماح بالشفافية"
11
obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/bn-BD.ini Added
11
 
1
@@ -0,0 +1,9 @@
2
+MonitorCapture="অধিগ্রহণ প্রদর্শন করুন"
3
+WindowCapture="উইন্ডো অধিগ্রহন"
4
+Compatibility="মাল্টি-অ্যাডাপ্টার উপযুক্ততা"
5
+AllowTransparency="স্বচ্ছতা মঞ্জুরি দিন"
6
+GameCapture.CaptureWindow="নির্দিষ্ট উইন্ডো অধিগ্রহন"
7
+GameCapture.UseHotkey="পুরোভূমি hotkey উইন্ডো অধিগ্রহন"
8
+GameCapture.ForceScaling="স্কেলিং জোর"
9
+GameCapture.ScaleRes="স্কেল নিয়মন"
10
+
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/ca-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/ca-ES.ini Changed
23
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Captura de finestra"
3
 WindowCapture.Window="Finestra"
4
 WindowCapture.Priority="Prioritat de coincidència de pantalla"
5
-WindowCapture.Priority.Title="Títol de la finestra"
6
-WindowCapture.Priority.Class="Classe de la finestra"
7
-WindowCapture.Priority.Exe="Nom de l'executable"
8
+WindowCapture.Priority.Title="El títol de la finestra ha de coincidir"
9
+WindowCapture.Priority.Class="Títol del partit, altrament troba la finestra del mateix tipus"
10
+WindowCapture.Priority.Exe="Títol del partit, altrament troba la finestra del mateix executable"
11
 CaptureCursor="Captura el cursor"
12
 Compatibility="Compatibilitat multiadaptador"
13
 AllowTransparency="Permet transparència"
14
@@ -16,7 +16,7 @@
15
 GameCapture.UseHotkey="Captura finestra en primer pla amb tecles d'accés ràpid"
16
 GameCapture.ForceScaling="Força l'escalat"
17
 GameCapture.ScaleRes="Resolució de l'escala"
18
-GameCapture.LimitFramerate="Limitar ràtio de captura"
19
+GameCapture.LimitFramerate="Limita la velocitat de fotogrames de captura"
20
 GameCapture.CaptureOverlays="Capturar capes d'aplicacions externes (tals com Steam)"
21
 GameCapture.AntiCheatHook="Utilitzi la compatibilitat anti-trampa"
22
 GameCapture.HotkeyStart="Captura finestra en primer pla"
23
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/cs-CZ.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/cs-CZ.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Záznam okna"
3
 WindowCapture.Window="Okno"
4
 WindowCapture.Priority="Priorita shody okna"
5
-WindowCapture.Priority.Title="Titulek okna"
6
-WindowCapture.Priority.Class="Třída okna"
7
-WindowCapture.Priority.Exe="Název spustitelného souboru"
8
+WindowCapture.Priority.Title="Titulek okna se musí shodovat"
9
+WindowCapture.Priority.Class="Shoda názvu, jinak nejít okno stejného typu"
10
+WindowCapture.Priority.Exe="Shoda názvu, jinak najít okno stejného procesu"
11
 CaptureCursor="Zaznamenávat kurzor"
12
 Compatibility="Více-adaptérová kompaktibilita"
13
 AllowTransparency="Povolit průhlednost"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/da-DK.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Vindue optager"
3
 WindowCapture.Window="Vindue"
4
 WindowCapture.Priority="Vindue match prioritet"
5
-WindowCapture.Priority.Title="Vinduestitel"
6
-WindowCapture.Priority.Class="Vinduesklasse"
7
-WindowCapture.Priority.Exe="Eksekverbar navn"
8
+WindowCapture.Priority.Title="Vinduestitel skal stemme overens"
9
+WindowCapture.Priority.Class="Samme titel, ellers find vindue af samme type"
10
+WindowCapture.Priority.Exe="Samme titel eller find vindue fra samme program"
11
 CaptureCursor="Optag markøren"
12
 Compatibility="Multi-adapter kompatibilitet"
13
 AllowTransparency="Tillad gennemsigtighed"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/de-DE.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/de-DE.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Fensteraufnahme"
3
 WindowCapture.Window="Fenster"
4
 WindowCapture.Priority="Fensterübereinstimmungspriorität"
5
-WindowCapture.Priority.Title="Fenstertitel"
6
-WindowCapture.Priority.Class="Fensterklasse"
7
-WindowCapture.Priority.Exe="Name der ausführbaren Datei"
8
+WindowCapture.Priority.Title="Fenstertitel muss übereinstimmen"
9
+WindowCapture.Priority.Class="Fenstertitel soll übereinstimmen, ansonsten Fenster des gleichen Typs finden"
10
+WindowCapture.Priority.Exe="Fenstertitel soll übereinstimmen, ansonsten Fenster des gleichen Programms finden"
11
 CaptureCursor="Mauszeiger aufnehmen"
12
 Compatibility="Multi-Adapter-Kompatibilität"
13
 AllowTransparency="Erlaube Transparenz"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/el-GR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/el-GR.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Σύλληψη Παραθύρου"
3
 WindowCapture.Window="Παράθυρο"
4
 WindowCapture.Priority="Προτεραιότητα Αντιστοίχισης Παραθύρων"
5
-WindowCapture.Priority.Title="Τίτλος Παραθύρου"
6
-WindowCapture.Priority.Class="Κλάση Παραθύρου"
7
-WindowCapture.Priority.Exe="Όνομα Εκτελέσιμου Αρχείου"
8
 CaptureCursor="Σύλληψη Δρομέα"
9
 Compatibility="Συμβατότητα με Πολυ-Προσαρμογείς"
10
 AllowTransparency="Επιτροπή Διαφάνειας"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/es-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/es-ES.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Capturar Ventana"
3
 WindowCapture.Window="Ventana"
4
 WindowCapture.Priority="Prioridad de captura de ventana"
5
-WindowCapture.Priority.Title="Título de la ventana"
6
-WindowCapture.Priority.Class="Clase de ventana"
7
-WindowCapture.Priority.Exe="Nombre del archivo ejecutable"
8
+WindowCapture.Priority.Title="El titulo de la ventana debe coincidir"
9
+WindowCapture.Priority.Class="Coincidir con el titulo, sino buscar ventana del mismo tipo"
10
+WindowCapture.Priority.Exe="Coincidir con el titulo, sino buscar ventana del mismo ejecutable"
11
 CaptureCursor="Captura de Cursor"
12
 Compatibility="Compatibilidad multi adaptador"
13
 AllowTransparency="Permitir transparencia"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/et-EE.ini Changed
13
 
1
@@ -1,10 +1,8 @@
2
 MonitorCapture="Kuvari hõive"
3
 WindowCapture="Akna hõive"
4
 WindowCapture.Window="Aken"
5
-WindowCapture.Priority.Title="Akna pealkiri"
6
-WindowCapture.Priority.Class="Akna klass"
7
-WindowCapture.Priority.Exe="Käivitatava faili nimi"
8
 CaptureCursor="Jäädvusta kursor"
9
+Compatibility="Mitme adapteri ühilduvus"
10
 AllowTransparency="Luba läbipaistvus"
11
 Monitor="Kuvar"
12
 PrimaryMonitor="Esmane kuvar"
13
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/eu-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/eu-ES.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Leiho-kaptura"
3
 WindowCapture.Window="Leihoa"
4
 WindowCapture.Priority="Leihoa antzemateko lehentasuna"
5
-WindowCapture.Priority.Title="Leihoaren izenburua"
6
-WindowCapture.Priority.Class="Leihoaren klasea"
7
-WindowCapture.Priority.Exe="Exekutagarriaren izena"
8
+WindowCapture.Priority.Title="Leihoaren tituluak bat egin behar du"
9
+WindowCapture.Priority.Class="Bat egiten duen titulua, bestela bilatu mota bereko leihoa"
10
+WindowCapture.Priority.Exe="Bat egiten duen titulua, bestela exekutagarri bereko leihoa bilatu"
11
 CaptureCursor="Kapturatu kurtsorea"
12
 Compatibility="Egokitzaile-anitz bateragarritasuna"
13
 AllowTransparency="Onartu gardentasuna"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/fi-FI.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/fi-FI.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Ikkuna"
3
 WindowCapture.Window="Ikkuna"
4
 WindowCapture.Priority="Ikkunan valintaperuste"
5
-WindowCapture.Priority.Title="Ikkunan otsikko"
6
-WindowCapture.Priority.Class="Ikkunan luokka"
7
-WindowCapture.Priority.Exe="Suoritetun tiedoston nimi"
8
+WindowCapture.Priority.Title="Ikkunan otsikon on täsmättävä"
9
+WindowCapture.Priority.Class="Täsmäävä otsikko, muutoin etsitään saman tyypin ikkuna"
10
+WindowCapture.Priority.Exe="Täsmäävä otsikko, muutoin etsitään saman sovelluksen ikkuna"
11
 CaptureCursor="Kaappaa kursori"
12
 Compatibility="Usean sovittimen tuki"
13
 AllowTransparency="Salli läpinäkyvyys"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/fr-FR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/fr-FR.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Capture de fenêtre"
3
 WindowCapture.Window="Fenêtre"
4
 WindowCapture.Priority="Priorité d'association de la fenêtre"
5
-WindowCapture.Priority.Title="Titre de la fenêtre"
6
-WindowCapture.Priority.Class="Classe de la fenêtre"
7
-WindowCapture.Priority.Exe="Nom de l'exécutable"
8
+WindowCapture.Priority.Title="Le nom de fenêtre doit correspondre"
9
+WindowCapture.Priority.Class="Titre correspondant, sinon trouve une fenêtre de même type"
10
+WindowCapture.Priority.Exe="Titre correspondant, sinon trouve une fenêtre du même exécutable"
11
 CaptureCursor="Capturer le curseur"
12
 Compatibility="Compatibilité Multi-adaptateur"
13
 AllowTransparency="Autoriser la transparence"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/gl-ES.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/gl-ES.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Capturar xanela"
3
 WindowCapture.Window="Xanela"
4
 WindowCapture.Priority="Prioridade de captura da xanela"
5
-WindowCapture.Priority.Title="Título da xanela"
6
-WindowCapture.Priority.Class="Clase de xanela"
7
-WindowCapture.Priority.Exe="Nome do ficheiro executable"
8
 CaptureCursor="Captura de cursor"
9
 Compatibility="Compatibilidade do multiadaptador"
10
 AllowTransparency="Permitir transparencia"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/hr-HR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/hr-HR.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Ulaz sa prozora"
3
 WindowCapture.Window="Prozor"
4
 WindowCapture.Priority="Prioritet prozora"
5
-WindowCapture.Priority.Title="Naslov prozora"
6
-WindowCapture.Priority.Class="Klasa prozora"
7
-WindowCapture.Priority.Exe="Ime izvršne datoteke"
8
 CaptureCursor="Snimaj kursor"
9
 Compatibility="Višeadapterska kompatibilnost"
10
 AllowTransparency="Omogući providnost"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/hu-HU.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/hu-HU.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Ablak felvétel"
3
 WindowCapture.Window="Ablak"
4
 WindowCapture.Priority="Ablak találati prioritás"
5
-WindowCapture.Priority.Title="Ablak címe"
6
-WindowCapture.Priority.Class="Ablak osztálya"
7
-WindowCapture.Priority.Exe="Végrehajtható fájl veve"
8
+WindowCapture.Priority.Title="Az ablak címének meg kell egyeznie"
9
+WindowCapture.Priority.Class="Egyező cím, egyébként találjon ugyanolyan típusút"
10
+WindowCapture.Priority.Exe="Egyező cím, egyébként találjon ugyanolyan kiterjesztést"
11
 CaptureCursor="Kurzor felvétele"
12
 Compatibility="Több adapteres kompatibilitás"
13
 AllowTransparency="Áttetszőség engedélyezése"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/it-IT.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/it-IT.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Cattura la finestra"
3
 WindowCapture.Window="Finestra"
4
 WindowCapture.Priority="In priorità la corrispondenza della finestra"
5
-WindowCapture.Priority.Title="Titolo finestra"
6
-WindowCapture.Priority.Class="Classe finestra"
7
-WindowCapture.Priority.Exe="Nome eseguibile"
8
 CaptureCursor="Cattura il cursore"
9
 Compatibility="Compatibilità più adattatori"
10
 AllowTransparency="Permetti trasparenza"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/ja-JP.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/ja-JP.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="ウィンドウキャプチャ"
3
 WindowCapture.Window="ウィンドウ"
4
 WindowCapture.Priority="ウィンドウの一致優先順位"
5
-WindowCapture.Priority.Title="ウィンドウタイトル"
6
-WindowCapture.Priority.Class="ウィンドウクラス"
7
-WindowCapture.Priority.Exe="実行ファイル名"
8
+WindowCapture.Priority.Title="ウィンドウのタイトルに一致する必要があります"
9
+WindowCapture.Priority.Class="タイトルに一致、そうでなければ同じ種類のウィンドウを見つけます"
10
+WindowCapture.Priority.Exe="タイトルに一致、そうでなければ同じ実行可能ファイルのウィンドウを見つます"
11
 CaptureCursor="カーソルをキャプチャ"
12
 Compatibility="マルチアダプターの互換性"
13
 AllowTransparency="透過を許可"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/ko-KR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/ko-KR.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="윈도우 캡쳐"
3
 WindowCapture.Window="윈도우"
4
 WindowCapture.Priority="윈도우 일치 우선순위"
5
-WindowCapture.Priority.Title="윈도우 제목"
6
-WindowCapture.Priority.Class="윈도우 클래스"
7
-WindowCapture.Priority.Exe="실행 파일 이름"
8
+WindowCapture.Priority.Title="창 제목이 일치해야 합니다"
9
+WindowCapture.Priority.Class="창 제목이 일치하거나 그렇지 않으면 같은 형식의 창을 찾습니다"
10
+WindowCapture.Priority.Exe="창 제목이 일치하거나 그렇지 않으면 같은 실행가능 프로그램 창을 찾습니다"
11
 CaptureCursor="커서 캡쳐"
12
 Compatibility="다중 어댑터 호환성"
13
 AllowTransparency="투명도 허용"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/nb-NO.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/nb-NO.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Vinduopptak"
3
 WindowCapture.Window="Vindu"
4
 WindowCapture.Priority="Match vindusprioritet"
5
-WindowCapture.Priority.Title="Vindutittel"
6
-WindowCapture.Priority.Class="Vinduklasse"
7
-WindowCapture.Priority.Exe="Navn på kjørbar fil"
8
 CaptureCursor="Ta opp musepeker"
9
 Compatibility="Multiadapterkompatibilitet"
10
 AllowTransparency="Tillat gjennomsiktighet"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/nl-NL.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/nl-NL.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Venstercapture"
3
 WindowCapture.Window="Venster"
4
 WindowCapture.Priority="Venster Match Prioriteit"
5
-WindowCapture.Priority.Title="Venstertitel"
6
-WindowCapture.Priority.Class="Vensterklasse"
7
-WindowCapture.Priority.Exe="Executable-naam"
8
+WindowCapture.Priority.Title="Venstertitel moet overeenkomen"
9
+WindowCapture.Priority.Class="Hetzelfde als de titelbar, vind anders een scherm van hetzelfde type"
10
+WindowCapture.Priority.Exe="Hetzelfde als de titelbar, vind anders een scherm bij dezelfde executable"
11
 CaptureCursor="Cursor Opnemen"
12
 Compatibility="Multi-adapter Compatibiliteit"
13
 AllowTransparency="Transparantie Toestaan"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/pl-PL.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/pl-PL.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Przechwytywanie okna"
3
 WindowCapture.Window="Okno"
4
 WindowCapture.Priority="Priorytet przechwytywanych okien"
5
-WindowCapture.Priority.Title="Tytuł okna"
6
-WindowCapture.Priority.Class="Klasa okna"
7
-WindowCapture.Priority.Exe="Nazwa pliku wykonywalnego"
8
+WindowCapture.Priority.Title="Tytuł okna musi się zgadzać"
9
+WindowCapture.Priority.Class="Tytuł okna musi się zgadzać, w przeciwnym razie znajdź okno tego samego typu"
10
+WindowCapture.Priority.Exe="Tytuł okna musi się zgadzać, w przeciwnym razie znajdź okno tego samego pliku wykonywalnego"
11
 CaptureCursor="Przechwytuj kursor"
12
 Compatibility="Tryb kompatybilności wielu urządzeń"
13
 AllowTransparency="Uwzględnij przezroczystość"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/pt-BR.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Captura de Janela"
3
 WindowCapture.Window="Janela"
4
 WindowCapture.Priority="Prioridade de Correspondência da Janela"
5
-WindowCapture.Priority.Title="Título da Janela"
6
-WindowCapture.Priority.Class="Classe da Janela"
7
-WindowCapture.Priority.Exe="Nome do Arquivo Executável"
8
+WindowCapture.Priority.Title="Título da janela deve combinar"
9
+WindowCapture.Priority.Class="Combinar título, caso contrário buscar janela do mesmo tipo"
10
+WindowCapture.Priority.Exe="Combinar título, caso contrário buscar janela do mesmo executável"
11
 CaptureCursor="Capturar o Cursor"
12
 Compatibility="Compatibilidade com Multi Adaptador"
13
 AllowTransparency="Permitir transparência"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/pt-PT.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/pt-PT.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Captura de Janela"
3
 WindowCapture.Window="Janela"
4
 WindowCapture.Priority="Prioridade de emparelhamento de janela"
5
-WindowCapture.Priority.Title="Título da Janela"
6
-WindowCapture.Priority.Class="Classe de Janela"
7
-WindowCapture.Priority.Exe="Nome do ficheiro executável"
8
 CaptureCursor="Capturar cursor"
9
 Compatibility="Compatibilidade multi-adaptador"
10
 AllowTransparency="Permitir transparência"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/ro-RO.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/ro-RO.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Captură de fereastră"
3
 WindowCapture.Window="Fereastră"
4
 WindowCapture.Priority="Prioritate de potrivire a ferestrelor"
5
-WindowCapture.Priority.Title="Titlul ferestrei"
6
-WindowCapture.Priority.Class="Clasa ferestrei"
7
-WindowCapture.Priority.Exe="Numele executabilului"
8
 CaptureCursor="Capturează cursorul"
9
 Compatibility="Compatibilitate pentru multiadaptoare"
10
 AllowTransparency="Permite transparență"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/ru-RU.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/ru-RU.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Захват окна"
3
 WindowCapture.Window="Окно"
4
 WindowCapture.Priority="Приоритет согласования окна"
5
-WindowCapture.Priority.Title="Заголовок окна"
6
-WindowCapture.Priority.Class="Класс окна"
7
-WindowCapture.Priority.Exe="Имя исполняемого файла"
8
+WindowCapture.Priority.Title="Заголовок окна должен совпадать"
9
+WindowCapture.Priority.Class="Сравнивать заголовок, в противном случае найти окно того же типа"
10
+WindowCapture.Priority.Exe="Сравнивать заголовок, в противном случае найти окно того же исполняемого файла"
11
 CaptureCursor="Захват курсора"
12
 Compatibility="Совместимость с мульти-адаптером"
13
 AllowTransparency="Разрешить прозрачность"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/sk-SK.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/sk-SK.ini Changed
11
 
1
@@ -1,9 +1,6 @@
2
 MonitorCapture="Zachytávanie obrazovky"
3
 WindowCapture="Zachytávanie okna"
4
 WindowCapture.Window="Okno"
5
-WindowCapture.Priority.Title="Názov okna"
6
-WindowCapture.Priority.Class="Trieda okna"
7
-WindowCapture.Priority.Exe="Názov spustiteľného súboru"
8
 CaptureCursor="Zachytávať kurzor"
9
 Compatibility="Kompatibilita s viac adaptérmi"
10
 Monitor="Monitor"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/sl-SI.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/sl-SI.ini Changed
11
 
1
@@ -1,9 +1,6 @@
2
 WindowCapture="Zajem Okna"
3
 WindowCapture.Window="Okno"
4
 WindowCapture.Priority="Prednost oken"
5
-WindowCapture.Priority.Title="Naslov okna"
6
-WindowCapture.Priority.Class="Razred okna"
7
-WindowCapture.Priority.Exe="Ime izvedljive datoteke"
8
 CaptureCursor="Zajemaj kazalec"
9
 Compatibility="Multi-kartična združljivost"
10
 
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/sr-CS.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/sr-CS.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Ulaz sa prozora"
3
 WindowCapture.Window="Prozor"
4
 WindowCapture.Priority="Prioritet prozora"
5
-WindowCapture.Priority.Title="Naslov prozora"
6
-WindowCapture.Priority.Class="Klasa prozora"
7
-WindowCapture.Priority.Exe="Ime izvršne datoteke"
8
 CaptureCursor="Snimaj kursor"
9
 Compatibility="Višeadapterska kompatibilnost"
10
 AllowTransparency="Omogući providnost"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/sr-SP.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/sr-SP.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Улаз са прозора"
3
 WindowCapture.Window="Прозор"
4
 WindowCapture.Priority="Приоритет прозора"
5
-WindowCapture.Priority.Title="Наслов прозора"
6
-WindowCapture.Priority.Class="Класа прозора"
7
-WindowCapture.Priority.Exe="Име извршнe datoteke"
8
 CaptureCursor="Снимај курсор"
9
 Compatibility="Вишеадаптерска компатибилност"
10
 AllowTransparency="Омогући провидност"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/sv-SE.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/sv-SE.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Fönsterkälla"
3
 WindowCapture.Window="Fönster"
4
 WindowCapture.Priority="Prioritet för fönstermatchning"
5
-WindowCapture.Priority.Title="Fönstrets namnlist"
6
-WindowCapture.Priority.Class="Fönsterklass (Window Class)"
7
-WindowCapture.Priority.Exe="Filnamn"
8
+WindowCapture.Priority.Title="Fönstertitel måste matcha"
9
+WindowCapture.Priority.Class="Matcha titel, hitta annars fönster av samma typ"
10
+WindowCapture.Priority.Exe="Matcha titel, hitta annars fönster av samma programfil"
11
 CaptureCursor="Visa muspekare"
12
 Compatibility="Kompatibilitetsläge för flera grafikkort"
13
 AllowTransparency="Tillåt opacitet"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/th-TH.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/th-TH.ini Changed
6
 
1
@@ -1,4 +1,2 @@
2
 WindowCapture.Window="หน้าต่าง"
3
-WindowCapture.Priority.Title="ชื่อหน้าต่าง"
4
-WindowCapture.Priority.Exe="ชื่อโปรแกรม"
5
 
6
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/tr-TR.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Pencere Yakalama"
3
 WindowCapture.Window="Pencere"
4
 WindowCapture.Priority="Pencere Eşleşme Önceliği"
5
-WindowCapture.Priority.Title="Pencere Başlığı"
6
-WindowCapture.Priority.Class="Pencere Sınıfı"
7
-WindowCapture.Priority.Exe="Yürütülebilir Dosya Adı"
8
+WindowCapture.Priority.Title="Pencere başlığı eşleşmeli"
9
+WindowCapture.Priority.Class="Başlığı eşleştir, olmazsa aynı türde pencere bul"
10
+WindowCapture.Priority.Exe="Başlığı eşleştir, olmazsa aynı yürütülebilirin penceresini bul"
11
 CaptureCursor="İmleci Yakala"
12
 Compatibility="Çoklu Bağdaştırıcı Uyumluluğu"
13
 AllowTransparency="Şeffaflığa İzin Ver"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/uk-UA.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/uk-UA.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="Захват вікна"
3
 WindowCapture.Window="Вікно"
4
 WindowCapture.Priority="Пріоритет схожості"
5
-WindowCapture.Priority.Title="Заголовок вікна"
6
-WindowCapture.Priority.Class="Клас вікна"
7
-WindowCapture.Priority.Exe="Ім'я файлу"
8
+WindowCapture.Priority.Title="Заголовок вікна має відповідати"
9
+WindowCapture.Priority.Class="Спочатку заголовок вікна, потім шукати схожий тип вікна"
10
+WindowCapture.Priority.Exe="Спочатку заголовок вікна, потім шукати вікно того ж виконавчого файлу"
11
 CaptureCursor="Захват курсору"
12
 Compatibility="Сумісність з Мульті-адаптерами"
13
 AllowTransparency="Дозволяти прозорість"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/vi-VN.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/vi-VN.ini Changed
11
 
1
@@ -2,9 +2,6 @@
2
 WindowCapture="Quay cửa sổ"
3
 WindowCapture.Window="Cửa sổ"
4
 WindowCapture.Priority="Cửa sổ ưu tiên"
5
-WindowCapture.Priority.Title="Tiêu đề cửa sổ"
6
-WindowCapture.Priority.Class="Lớp cửa sổ"
7
-WindowCapture.Priority.Exe="Tên thực thi"
8
 CaptureCursor="Quay cả con trỏ"
9
 Compatibility="Khả năng tương thích đa adapter"
10
 AllowTransparency="Cho phép trong suốt"
11
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/zh-CN.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/zh-CN.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="窗口捕获"
3
 WindowCapture.Window="窗口"
4
 WindowCapture.Priority="窗口匹配优先级"
5
-WindowCapture.Priority.Title="窗口标题"
6
-WindowCapture.Priority.Class="窗口种类"
7
-WindowCapture.Priority.Exe="可执行文件名称"
8
+WindowCapture.Priority.Title="窗口标题必须匹配"
9
+WindowCapture.Priority.Class="匹配标题, 否则查找同样类型的窗口"
10
+WindowCapture.Priority.Exe="匹配标题, 否则查找同样可执行程序的窗口"
11
 CaptureCursor="捕捉光标"
12
 Compatibility="多适配器的兼容性"
13
 AllowTransparency="允许透明度"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/data/locale/zh-TW.ini -> obs-studio-19.0.2.tar.xz/plugins/win-capture/data/locale/zh-TW.ini Changed
14
 
1
@@ -2,9 +2,9 @@
2
 WindowCapture="視窗擷取"
3
 WindowCapture.Window="視窗"
4
 WindowCapture.Priority="視窗匹配優先度"
5
-WindowCapture.Priority.Title="視窗標題"
6
-WindowCapture.Priority.Class="視窗類型"
7
-WindowCapture.Priority.Exe="可執行檔名稱"
8
+WindowCapture.Priority.Title="視窗標題必須相符"
9
+WindowCapture.Priority.Class="與標題相符,如沒有則找尋相同類型的視窗"
10
+WindowCapture.Priority.Exe="與標題相符,如沒有則找尋相同執行檔的視窗"
11
 CaptureCursor="擷取游標"
12
 Compatibility="多顯示卡相容性"
13
 AllowTransparency="允許透明"
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/dc-capture.c -> obs-studio-19.0.2.tar.xz/plugins/win-capture/dc-capture.c Changed
10
 
1
@@ -167,7 +167,7 @@
2
 
3
    ReleaseDC(NULL, hdc_target);
4
 
5
-   if (capture->cursor_captured)
6
+   if (capture->cursor_captured && !capture->cursor_hidden)
7
        draw_cursor(capture, hdc, window);
8
 
9
    dc_capture_release_dc(capture);
10
obs-studio-18.0.2.tar.xz/plugins/win-capture/dc-capture.h -> obs-studio-19.0.2.tar.xz/plugins/win-capture/dc-capture.h Changed
9
 
1
@@ -23,6 +23,7 @@
2
 
3
    bool         capture_cursor;
4
    bool         cursor_captured;
5
+   bool         cursor_hidden;
6
    CURSORINFO   ci;
7
 
8
    bool         valid;
9
obs-studio-18.0.2.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-19.0.2.tar.xz/plugins/win-capture/game-capture.c Changed
108
 
1
@@ -87,13 +87,13 @@
2
    enum capture_mode             mode;
3
    uint32_t                      scale_cx;
4
    uint32_t                      scale_cy;
5
-   bool                          cursor : 1;
6
-   bool                          force_shmem : 1;
7
-   bool                          force_scaling : 1;
8
-   bool                          allow_transparency : 1;
9
-   bool                          limit_framerate : 1;
10
-   bool                          capture_overlays : 1;
11
-   bool                          anticheat_hook : 1;
12
+   bool                          cursor;
13
+   bool                          force_shmem;
14
+   bool                          force_scaling;
15
+   bool                          allow_transparency;
16
+   bool                          limit_framerate;
17
+   bool                          capture_overlays;
18
+   bool                          anticheat_hook;
19
 };
20
 
21
 struct game_capture {
22
@@ -119,17 +119,18 @@
23
    volatile long                 hotkey_window;
24
    volatile bool                 deactivate_hook;
25
    volatile bool                 activate_hook_now;
26
-   bool                          wait_for_target_startup : 1;
27
-   bool                          showing : 1;
28
-   bool                          active : 1;
29
-   bool                          capturing : 1;
30
-   bool                          activate_hook : 1;
31
-   bool                          process_is_64bit : 1;
32
-   bool                          error_acquiring : 1;
33
-   bool                          dwm_capture : 1;
34
-   bool                          initial_config : 1;
35
-   bool                          convert_16bit : 1;
36
-   bool                          is_app : 1;
37
+   bool                          wait_for_target_startup;
38
+   bool                          showing;
39
+   bool                          active;
40
+   bool                          capturing;
41
+   bool                          activate_hook;
42
+   bool                          process_is_64bit;
43
+   bool                          error_acquiring;
44
+   bool                          dwm_capture;
45
+   bool                          initial_config;
46
+   bool                          convert_16bit;
47
+   bool                          is_app;
48
+   bool                          cursor_hidden;
49
 
50
    struct game_capture_config    config;
51
 
52
@@ -148,6 +149,7 @@
53
    HANDLE                        texture_mutexes[2];
54
    wchar_t                       *app_sid;
55
    int                           retrying;
56
+   float                         cursor_check_time;
57
 
58
    union {
59
        struct {
60
@@ -1547,6 +1549,22 @@
61
    return !object_signalled(gc->target_process);
62
 }
63
 
64
+static void check_foreground_window(struct game_capture *gc, float seconds)
65
+{
66
+   // Hides the cursor if the user isn't actively in the game
67
+   gc->cursor_check_time += seconds;
68
+   if (gc->cursor_check_time >= 0.1f) {
69
+       DWORD foreground_process_id;
70
+       GetWindowThreadProcessId(GetForegroundWindow(),
71
+           &foreground_process_id);
72
+       if (gc->process_id != foreground_process_id)
73
+           gc->cursor_hidden = true;
74
+       else
75
+           gc->cursor_hidden = false;
76
+       gc->cursor_check_time = 0.0f;
77
+   }
78
+}
79
+
80
 static void game_capture_tick(void *data, float seconds)
81
 {
82
    struct game_capture *gc = data;
83
@@ -1653,6 +1671,7 @@
84
            }
85
 
86
            if (gc->config.cursor) {
87
+               check_foreground_window(gc, seconds);
88
                obs_enter_graphics();
89
                cursor_capture(&gc->cursor_data);
90
                obs_leave_graphics();
91
@@ -1708,12 +1727,14 @@
92
        obs_source_draw(gc->texture, 0, 0, 0, 0,
93
                gc->global_hook_info->flip);
94
 
95
-       if (gc->config.allow_transparency && gc->config.cursor) {
96
+       if (gc->config.allow_transparency && gc->config.cursor &&
97
+           !gc->cursor_hidden) {
98
            game_capture_render_cursor(gc);
99
        }
100
    }
101
 
102
-   if (!gc->config.allow_transparency && gc->config.cursor) {
103
+   if (!gc->config.allow_transparency && gc->config.cursor &&
104
+       !gc->cursor_hidden) {
105
        effect = obs_get_base_effect(OBS_EFFECT_DEFAULT);
106
 
107
        while (gs_effect_loop(effect, "Draw")) {
108
obs-studio-18.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d10-capture.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d10-capture.cpp Changed
14
 
1
@@ -12,9 +12,9 @@
2
    uint32_t                       cx;
3
    uint32_t                       cy;
4
    DXGI_FORMAT                    format;
5
-   bool                           using_shtex : 1;
6
-   bool                           using_scale : 1;
7
-   bool                           multisampled : 1;
8
+   bool                           using_shtex;
9
+   bool                           using_scale;
10
+   bool                           multisampled;
11
 
12
    ID3D10Texture2D                *scale_tex;
13
    ID3D10ShaderResourceView       *scale_resource;
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d11-capture.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d11-capture.cpp Changed
14
 
1
@@ -13,9 +13,9 @@
2
    uint32_t                       cx;
3
    uint32_t                       cy;
4
    DXGI_FORMAT                    format;
5
-   bool                           using_shtex : 1;
6
-   bool                           using_scale : 1;
7
-   bool                           multisampled : 1;
8
+   bool                           using_shtex;
9
+   bool                           using_scale;
10
+   bool                           multisampled;
11
 
12
    ID3D11Texture2D                *scale_tex;
13
    ID3D11ShaderResourceView       *scale_resource;
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d12-capture.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d12-capture.cpp Changed
16
 
1
@@ -19,10 +19,10 @@
2
    uint32_t                       cx;
3
    uint32_t                       cy;
4
    DXGI_FORMAT                    format;
5
-   bool                           using_shtex : 1;
6
-   bool                           using_scale : 1;
7
-   bool                           multisampled : 1;
8
-   bool                           dxgi_1_4 : 1;
9
+   bool                           using_shtex;
10
+   bool                           using_scale;
11
+   bool                           multisampled;
12
+   bool                           dxgi_1_4;
13
 
14
    ID3D11Device                   *device11;
15
    ID3D11DeviceContext            *context11;
16
obs-studio-18.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d9-capture.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-capture/graphics-hook/d3d9-capture.cpp Changed
12
 
1
@@ -32,8 +32,8 @@
2
    uint32_t               cy;
3
    D3DFORMAT              d3d9_format;
4
    DXGI_FORMAT            dxgi_format;
5
-   bool                   using_shtex : 1;
6
-   bool                   using_scale : 1;
7
+   bool                   using_shtex;
8
+   bool                   using_scale;
9
 
10
    /* shared texture */
11
    IDirect3DSurface9      *d3d9_copytex;
12
obs-studio-18.0.2.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c -> obs-studio-19.0.2.tar.xz/plugins/win-capture/graphics-hook/gl-capture.c Changed
14
 
1
@@ -35,9 +35,9 @@
2
    uint32_t                       cy;
3
    DXGI_FORMAT                    format;
4
    GLuint                         fbo;
5
-   bool                           using_shtex : 1;
6
-   bool                           using_scale : 1;
7
-   bool                           shmem_fallback : 1;
8
+   bool                           using_shtex;
9
+   bool                           using_scale;
10
+   bool                           shmem_fallback;
11
 
12
    union {
13
        /* shared texture */
14
obs-studio-18.0.2.tar.xz/plugins/win-capture/window-capture.c -> obs-studio-19.0.2.tar.xz/plugins/win-capture/window-capture.c Changed
43
 
1
@@ -26,6 +26,7 @@
2
    struct dc_capture    capture;
3
 
4
    float                resize_timer;
5
+   float                cursor_check_time;
6
 
7
    HWND                 window;
8
    RECT                 last_rect;
9
@@ -134,6 +135,7 @@
10
 }
11
 
12
 #define RESIZE_CHECK_TIME 0.2f
13
+#define CURSOR_CHECK_TIME 0.2f
14
 
15
 static void wc_tick(void *data, float seconds)
16
 {
17
@@ -162,6 +164,25 @@
18
        return;
19
    }
20
 
21
+   wc->cursor_check_time += seconds;
22
+   if (wc->cursor_check_time > CURSOR_CHECK_TIME) {
23
+       DWORD foreground_pid, target_pid;
24
+
25
+       // Can't just compare the window handle in case of app with child windows
26
+       if (!GetWindowThreadProcessId(GetForegroundWindow(), &foreground_pid))
27
+           foreground_pid = 0;
28
+
29
+       if (!GetWindowThreadProcessId(wc->window, &target_pid))
30
+           target_pid = 0;
31
+
32
+       if (foreground_pid && target_pid && foreground_pid != target_pid)
33
+           wc->capture.cursor_hidden = true;
34
+       else
35
+           wc->capture.cursor_hidden = false;
36
+
37
+       wc->cursor_check_time = 0.0f;
38
+   }
39
+
40
    obs_enter_graphics();
41
 
42
    GetClientRect(wc->window, &rect);
43
obs-studio-19.0.2.tar.xz/plugins/win-dshow/data/locale/bn-BD.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+VideoCaptureDevice="ভিডিও ক্যাপচার ডিভাইস"
3
+ColorSpace.Default="পূর্ব-নির্ধারিত"
4
+ColorRange="YUV রং বিন্যাস"
5
+ConfigureAudio="অডিও বিন্যাস করুন"
6
+ConfigureVideo="ভিডিও বিন্যাস করুন"
7
+ConfigureCrossbar="Crossbar বিন্যাস করুন"
8
+FPS.Matching="ম্যাচের ফলাফল FPS"
9
+FPS.Highest="সর্বোচ্চ FPS"
10
+Resolution="রেজল্যুশন"
11
+VideoFormat="ভিডিও ফরম্যাট"
12
+
13
+
14
obs-studio-18.0.2.tar.xz/plugins/win-dshow/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/data/locale/et-EE.ini Changed
21
 
1
@@ -2,16 +2,19 @@
2
 Device="Seade"
3
 ColorSpace="YUV värviruumi"
4
 ColorSpace.Default="Vaikimisi"
5
+ColorRange="YUV värviruumi vahemik"
6
 ColorRange.Partial="Osaliselt"
7
 ColorRange.Full="Täielik"
8
 ConfigureAudio="Konfigureerige heli"
9
 ConfigureVideo="Konfigureerige Video"
10
+ResFPSType="Resolutsioon/FPS tüüp"
11
 ResFPSType.Custom="Kohandatud"
12
 ResFPSType.DevPreferred="Seadme vaikesätte"
13
 FPS.Highest="Kõrgeim FPS"
14
 Resolution="Resolutsioon"
15
 VideoFormat="Video formaat"
16
 VideoFormat.Any="Ükskõik milline"
17
+VideoFormat.Unknown="Tundmatu (%1)"
18
 AudioOutputMode="Heliväljundi režiim"
19
 AudioOutputMode.Capture="Salvesta ainult heli"
20
 UseCustomAudioDevice="Kasuta kohandatud heliseadet"
21
obs-studio-18.0.2.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/data/locale/pt-BR.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 UseCustomAudioDevice="Utilizar dispositivo de áudio personalizado"
3
 AudioDevice="Dispositivo de Áudio"
4
 Buffering="Buffering"
5
+Buffering.ToolTip="Quando habilitado, acumula os dados de vídeo/áudio necessarios para garantir a reprodução mais lisa e \nprecisa possível, mas à custa de uma maior latência. Quando utilizado\ncom uma placa de captura de vídeo, é recomendável configurar a placa e o\nprograma para a mesma taxa de quadros para melhores resultados.\n\nQuando desativado, garante a menor latência de reprodução, mas à custa de precisão na reprodução\ndos quadros. Isto é ideal para Webcams ou quando você deseja usar a janela de visualização do programa\n para jogos de console.\n\nDetecção Automática (padrão) habilita o acumulo de dados se o dispositivo tiver atraso e desativa\nse não tem nenhum atraso."
6
 Buffering.AutoDetect="Detecção Automática"
7
 Buffering.Enable="Ativado"
8
 Buffering.Disable="Desativado"
9
obs-studio-18.0.2.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini Changed
9
 
1
@@ -24,6 +24,7 @@
2
 UseCustomAudioDevice="Özel ses aygıtını kullan"
3
 AudioDevice="Ses Aygıtı"
4
 Buffering="Arabelleğe Alma"
5
+Buffering.ToolTip="Etkinleştirildiğinde, mümkün olan en pürüzsüz ve en kesin yeniden oynatmayı\nsağlamak için video/ses verisini arabelleğe kaydeder, ancak artan gecikmeye\nneden olur. Ara bellekleğe kayıtı bir video yakalama kartı ile kullanırken, en\niyi sonuç için kartın ve programın aynı kare hızına ayarlanması tavsiye edilir.\n\nDevre dışı bırakıldığında, en az gecikmeyi sağlar, ancak kare yeniten oynatma\nkesinliği azalır. Yüz kamerası veya program önizleme penceresini konsol oynamak\niçin kullanmak istediğinizde idealdir.\n\nOtomatik algılama (varsayılan) aygıtın gecikmesi varsa onu etkinleştirir,\ngecikmesi yoksa devre dışı bırakır."
6
 Buffering.AutoDetect="Otomatik Algıla"
7
 Buffering.Enable="Etkinleştir"
8
 Buffering.Disable="Devre Dışı Bırak"
9
obs-studio-18.0.2.tar.xz/plugins/win-dshow/libdshowcapture/CMakeLists.txt -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/libdshowcapture/CMakeLists.txt Changed
11
 
1
@@ -34,6 +34,9 @@
2
 
3
 if(WIN32)
4
    add_definitions(-DUNICODE -D_UNICODE)
5
+   if (BUILD_SHARED_LIBS)
6
+       add_definitions(-DDSHOWCAPTURE_EXPORTS)
7
+   endif()
8
 endif()
9
 
10
 if(MSVC)
11
obs-studio-18.0.2.tar.xz/plugins/win-dshow/libdshowcapture/dshowcapture.hpp -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/libdshowcapture/dshowcapture.hpp Changed
10
 
1
@@ -31,7 +31,7 @@
2
 
3
 #define DSHOWCAPTURE_VERSION_MAJOR 0
4
 #define DSHOWCAPTURE_VERSION_MINOR 5
5
-#define DSHOWCAPTURE_VERSION_PATCH 10
6
+#define DSHOWCAPTURE_VERSION_PATCH 12
7
 
8
 #define MAKE_DSHOWCAPTURE_VERSION(major, minor, patch) \
9
        ( (major << 24) | \
10
obs-studio-18.0.2.tar.xz/plugins/win-dshow/libdshowcapture/source/device.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/libdshowcapture/source/device.cpp Changed
9
 
1
@@ -246,6 +246,7 @@
2
    bool          success;
3
 
4
    if (config.name.find(L"C875") != std::string::npos ||
5
+       config.name.find(L"Prif Streambox") != std::string::npos ||
6
        config.name.find(L"C835") != std::string::npos)
7
        return SetupEncodedVideoCapture(filter, config, AV_LGP);
8
 
9
obs-studio-18.0.2.tar.xz/plugins/win-dshow/libdshowcapture/source/dshowcapture.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/libdshowcapture/source/dshowcapture.cpp Changed
9
 
1
@@ -227,6 +227,7 @@
2
    VideoDevice   info;
3
 
4
    if (wcsstr(deviceName, L"C875") != nullptr ||
5
+       wcsstr(deviceName, L"Prif Streambox") != nullptr ||
6
        wcsstr(deviceName, L"C835") != nullptr) {
7
        EnumEncodedVideo(devices, deviceName, devicePath, AV_LGP);
8
        return true;
9
obs-studio-18.0.2.tar.xz/plugins/win-dshow/win-dshow.cpp -> obs-studio-19.0.2.tar.xz/plugins/win-dshow/win-dshow.cpp Changed
15
 
1
@@ -753,12 +753,7 @@
2
    else
3
        useBuffering = bufType == BufferingType::On;
4
 
5
-   if (useBuffering)
6
-       flags &= ~OBS_SOURCE_FLAG_UNBUFFERED;
7
-   else
8
-       flags |= OBS_SOURCE_FLAG_UNBUFFERED;
9
-
10
-   obs_source_set_flags(source, flags);
11
+   obs_source_set_async_unbuffered(source, !useBuffering);
12
 }
13
 
14
 static DStr GetVideoFormatName(VideoFormat format);
15
obs-studio-19.0.2.tar.xz/plugins/win-mf/data/locale/bn-BD.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+MFAACEnc="মিডিয়া ফাউন্ডেশন AACএনকোডার"
3
+Bitrate="বিটরেট"
4
+
5
+MF.H264.Encoder="এনকোডার নাম"
6
+MF.H264.LowLatency="নিম্ন (Disable কাঠামো পুনরায় ক্রম) সুপ্ত"
7
+MF.H264.CustomMaxBitrate="কাস্টম ব্যবহার করে সর্বাধিক বিটের হার।"
8
+MF.H264.Bitrate="বিটরেট"
9
+MF.H264.CBR="CBR (ক্রমাগত বিটের)"
10
+MF.H264.VBR="VBR (পরিবর্তনশীল বিট-রেট)"
11
+MF.H264.CQP="CQP (অপরিবর্তিত মান)"
12
+MF.H264.MinQP="সর্বনিম্ন QP"
13
+
14
+
15
obs-studio-18.0.2.tar.xz/plugins/win-mf/data/locale/da-DK.ini -> obs-studio-19.0.2.tar.xz/plugins/win-mf/data/locale/da-DK.ini Changed
9
 
1
@@ -4,6 +4,7 @@
2
 MF.H264.EncoderName="Media Foundation H264 Encoder"
3
 MF.H264.Encoder="Encoder navn"
4
 MF.H264.LowLatency="Lav svartid (deaktiver frame re-ordering)"
5
+MF.H264.BFrames="Efterfølgende B-frame antal"
6
 MF.H264.CustomBufsize="Brug tilpasset bufferstørrelse"
7
 MF.H264.BufferSize="Bufferstørrelse"
8
 MF.H264.CustomMaxBitrate="Brug tilpasset max bitrate"
9
obs-studio-18.0.2.tar.xz/plugins/win-mf/data/locale/et-EE.ini -> obs-studio-19.0.2.tar.xz/plugins/win-mf/data/locale/et-EE.ini Changed
23
 
1
@@ -1,10 +1,21 @@
2
 MFAACEnc="Media Foundation AAC kodeerija"
3
 Bitrate="Bitikiirus"
4
 
5
+MF.H264.EncoderName="Media Foundation H264 kodeerija"
6
 MF.H264.Encoder="Kodeerija nimi"
7
+MF.H264.LowLatency="Madal viivitus (Lülitab välja kaadri reorganiseerimise)"
8
+MF.H264.CustomBufsize="Kasuta kohandatud puhvri suurust"
9
 MF.H264.BufferSize="Puhvri suurus"
10
+MF.H264.CustomMaxBitrate="Kasuta kohandatud maksimaalset bitikiirust"
11
 MF.H264.Bitrate="Bitikiirus"
12
 MF.H264.MaxBitrate="Maksimaalne bitikiirus"
13
+MF.H264.KeyframeIntervalSec="Võtmekaadri intervall (sekundit, 0=automaatne)"
14
+MF.H264.CBR="CBR (Pidev bitikiirus)"
15
+MF.H264.VBR="VBR (muutuv bitikiirus)"
16
 MF.H264.Profile="Profiil"
17
 
18
+MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 kodeerija"
19
+MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodeerija (Media Foundation)"
20
+MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Kodeerija (Media Foundation)"
21
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Kodeerija (Media Foundation)"
22
 
23
obs-studio-19.0.2.tar.xz/plugins/win-wasapi/data/locale/bn-BD.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+AudioInput="অডিও ইনপুট ক্যাপচার"
3
+AudioOutput="অডিও আউটপুট অধিগ্রহণ"
4
+UseDeviceTiming="ব্যবহৃত যন্ত্রের টাইমস্ট্যাম্প"
5
+
6
obs-studio-19.0.2.tar.xz/plugins/win-wasapi/data/locale/hi-IN.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+AudioInput="ऑडियो इनपुट पर कब्जा"
3
+
4
obs-studio-19.0.2.tar.xz/plugins/win-wasapi/data/locale/ur-PK.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+AudioInput="آڈیو ان پٹ گرفت"
3
+
4