Overview

Request 4244 (accepted)

- Update to version 21.1.2:
* libobs: Update version to 21.1.2
* win-capture: Update D3D9 signature for Win10 April 2018 Update
* CI: Check out OSX branch of obs-browser
* cmake: Include windows style DLL when copying Qt files
* obs-browser: Update submodule to latest version
* UI/updater: Delete visual studio runtimes after execution
* deps/obs-scripting: Prevent python unload more than once
* obs-browser: Update submodule to latest version
* deps/obs-scripting: Don't allow unloading more than once
* enc-amf: Version 2.3.3
* libobs: Update version to 21.1.0
* deps/obs-scripting: Add obs_source_enum_filters
* rtmp-services: Update ingest list for Aparat.com
* mac-capture: Fix bug where audio device couldn't be changed
* UI: Add Help -> Crash Reports submenu
* UI: Add subdir param to OBSBasic::UploadLog
* UI: Specify whether crash/profiler/logs have prefix
* UI: Specify subdir/variable to save to for get_last_log
* rtmp-services: Update ingest list for Nood.tv
* UI: Replace gist with hastebin for log uploads
* UI/updater: Return false on integrity check failure
* UI/updater: Don't update modules of opposite arch
* UI/updater: Add automatic check/install for VS2017 redist
* UI/updater: Fix a few type size mismatch warnings
* UI/updater: Fix resource compiling bug
* UI/updater: Fix bug with restrict keyword on VS2017
* UI/updater: Set license of windows update module to ISC
* UI/updater: Rewrite function
* Update translations from Crowdin

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

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,65 @@
2
 -------------------------------------------------------------------
3
+Sat May 12 23:59:07 UTC 2018 - jimmy@boombatower.com
4
+
5
+- Update to version 21.1.2:
6
+  * libobs: Update version to 21.1.2
7
+  * win-capture: Update D3D9 signature for Win10 April 2018 Update
8
+  * CI: Check out OSX branch of obs-browser
9
+  * cmake: Include windows style DLL when copying Qt files
10
+  * obs-browser: Update submodule to latest version
11
+  * UI/updater: Delete visual studio runtimes after execution
12
+  * deps/obs-scripting: Prevent python unload more than once
13
+  * obs-browser: Update submodule to latest version
14
+  * deps/obs-scripting: Don't allow unloading more than once
15
+  * enc-amf: Version 2.3.3
16
+  * libobs: Update version to 21.1.0
17
+  * deps/obs-scripting: Add obs_source_enum_filters
18
+  * rtmp-services: Update ingest list for Aparat.com
19
+  * mac-capture: Fix bug where audio device couldn't be changed
20
+  * UI: Add Help -> Crash Reports submenu
21
+  * UI: Add subdir param to OBSBasic::UploadLog
22
+  * UI: Specify whether crash/profiler/logs have prefix
23
+  * UI: Specify subdir/variable to save to for get_last_log
24
+  * rtmp-services: Update ingest list for Nood.tv
25
+  * UI: Replace gist with hastebin for log uploads
26
+  * UI/updater: Return false on integrity check failure
27
+  * UI/updater: Don't update modules of opposite arch
28
+  * UI/updater: Add automatic check/install for VS2017 redist
29
+  * UI/updater: Fix a few type size mismatch warnings
30
+  * UI/updater: Fix resource compiling bug
31
+  * UI/updater: Fix bug with restrict keyword on VS2017
32
+  * UI/updater: Set license of windows update module to ISC
33
+  * UI/updater: Rewrite function
34
+  * Update translations from Crowdin
35
+  * UI: Refresh multiview projector menu per click
36
+  * cmake: Remove extraneous checks
37
+  * UI: Refresh system tray projector menu per click
38
+  * UI: Remove unnecessary casts
39
+  * Update README.rst
40
+  * libobs-opengl: Request at least 8 bits for alpha
41
+  * linux-capture: Request at least 8 bits for alpha
42
+  * UI: Remove check for updates on Linux
43
+  * cmake, libobs, win-capture: Fix VS2017 warnings
44
+  * cmake: Add .vs directories to .gitignore
45
+  * deps/obs-scripting: Fix tick function arg number
46
+  * obs-ffmpeg: Fix locale typo
47
+  * rtmp-services: Update ingest list for Restream.io
48
+  * deps/obs-scripting: Expose obs video info to swig
49
+  * image-source: Fade to transparency if slideshow list is cleared
50
+  * rtmp-services: Add Vimeo to services list
51
+  * libobs: Fix property text typo
52
+  * libobs/util: Fix blank config file values being ignored
53
+  * obs-ffmpeg: Use FFmpeg's "fast" AAC encoder by default
54
+  * obs-ffmpeg: Remove cutoff hack for AAC encoder
55
+  * win-mf: Deprecate plugin
56
+  * win-capture/graphics-hook: Fix memory offset calculation
57
+  * UI: Remove duplicate line
58
+  * obs-output: Update ftl-sdk version and ftl logging values
59
+  * enc-amf: Version 2.3.2
60
+  * UI: Allow nested docks
61
+  * UI: Don't draw bounding boxes for sources without video flag
62
+
63
+-------------------------------------------------------------------
64
 Wed Feb 21 20:31:20 UTC 2018 - jimmy@boombatower.com
65
 
66
 - Update to version 21.0.3:
67
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        21.0.3
4
+Version:        21.1.2
5
 Release:        0
6
 Summary:        A recording/broadcasting program
7
 Group:          Productivity/Multimedia/Video/Editors and Convertors
8
_service Changed
10
 
1
@@ -1,7 +1,7 @@
2
 <services>
3
   <service name="tar_scm" mode="disabled">
4
     <param name="versionformat">@PARENT_TAG@</param>
5
-    <param name="revision">refs/tags/21.0.3</param>
6
+    <param name="revision">refs/tags/21.1.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">90692c9791ed33648b40916fa353aa3f2df35f2f</param>
6
+    <param name="changesrevision">8718b33875695dc66eec701816d62158d01ac71e</param>
7
   </service>
8
 </servicedata>
9
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/HIDDEN_PARAMETERS.md Deleted
1332
 
1
@@ -1,1330 +0,0 @@
2
-For an unknown reason, there are hidden parameters in the Runtime that can be set.
3
-
4
-## AVC Properties
5
-### Static
6
-* FrameSize
7
-* FrameRate
8
-* ExtraData (Read-Only)
9
-* Usage
10
-* Profile<br/>Two new profiles are in the runtime, Constrained Base and Constrained High.
11
-* Profile Level
12
-* MaxOfLTRFrames
13
-* ScanType
14
-* QualityPreset
15
-
16
-### Dynamic
17
-* RateControlMethod
18
-* TargetBitrate
19
-* PeakBitrate
20
-* RateControlSkipFrameEnable
21
-* MinQP
22
-* MaxQP
23
-* QPI
24
-* QPP
25
-* QPB
26
-* VBVBufferSize
27
-* VBVBufferFullness
28
-* EnforceHRD
29
-* MaxAUSize
30
-* FillerDataEnable
31
-* BPicturesDeltaQP
32
-* ReferenceBPicturesDeltaQP
33
-* HeaderInsertionSpacing
34
-* IDRPeriod
35
-* DeBlockingFilter
36
-* IntraRefreshMBsNumberPerSlot
37
-* SlicesPerFrame
38
-* BPicturesPattern
39
-* BReferenceEnable
40
-* HalfPixel
41
-* QuarterPixel
42
-
43
-### Unknown / New
44
-
45
-* **QualityEnhancementMode**<br/>So far always 0.
46
-* **MaxNumRefFrames**<br/>Shouldn't this be a Capability instead? Could perhaps be used to control B-Pictures more.
47
-* **MaxMBPerSec**<br/>Unknown value.
48
-* **InstanceID**
49
-* **EnableVBAQ**<br/>Unknown meaning.
50
-* **RateControlPreanalysisEnable**<br/>Is this Two-Pass encoding?
51
-* **GOPSize**<br/>Technically ignored, but still there in code.
52
-* **AspectRatio**
53
-* **NominalRange**
54
-* **IntraRefreshNumOfStripes**<br/>New, was not here before.
55
-* **SliceMode**<br/>New, was not here before.
56
-* **MaxSliceSize**<br/>New, was not here before.
57
-* **LowLatencyInternal**
58
-* **CommonLowLatencyInternal**
59
-* **SliceControlMode**
60
-* **SliceControlSize**
61
-* **CABACEnable**<br/>Not yet publicly available, but 16.10.3 always uses it anyway.
62
-* **UniqueInstance**
63
-* **EncoderMaxInstances**
64
-* **MultiInstanceMode**
65
-* **MultiInstanceCurrentQueue**
66
-* **WaitForTask**
67
-
68
-23:23:47.388: [AMF Encoder]  [CodecId] CodecId (Type: Int64, Index 0)
69
-23:23:47.389: [AMF Encoder]   Content Type: 0
70
-23:23:47.389: [AMF Encoder]   Access: RW
71
-23:23:47.389: [AMF Encoder]   Values:
72
-23:23:47.389: [AMF Encoder]     Current: 5
73
-23:23:47.389: [AMF Encoder]     Default: 5
74
-23:23:47.389: [AMF Encoder]     Minimum: Empty
75
-23:23:47.389: [AMF Encoder]     Maximum: Empty
76
-23:23:47.389: [AMF Encoder]   Enumeration: 
77
-23:23:47.391: [AMF Encoder]     H264 (5)
78
-23:23:47.391: [AMF Encoder]     UNKNOWN (0)
79
-23:23:47.391: [AMF Encoder]     H264SVC (8)
80
-23:23:47.391: [AMF Encoder]     UNKNOWN (0)
81
-23:23:47.392: [AMF Encoder]  [EngineType] EngineType (Type: Int64, Index 1)
82
-23:23:47.392: [AMF Encoder]   Content Type: 0
83
-23:23:47.392: [AMF Encoder]   Access: RW
84
-23:23:47.392: [AMF Encoder]   Values:
85
-23:23:47.393: [AMF Encoder]     Current: 0
86
-23:23:47.393: [AMF Encoder]     Default: 0
87
-23:23:47.393: [AMF Encoder]     Minimum: Empty
88
-23:23:47.393: [AMF Encoder]     Maximum: Empty
89
-23:23:47.393: [AMF Encoder]   Enumeration: 
90
-23:23:47.393: [AMF Encoder]     Auto (0)
91
-23:23:47.394: [AMF Encoder]     DX9 (1)
92
-23:23:47.394: [AMF Encoder]     DX11 (2)
93
-23:23:47.395: [AMF Encoder]     XVBA (3)
94
-23:23:47.395: [AMF Encoder]  [Usage] Usage (Type: Int64, Index 2)
95
-23:23:47.395: [AMF Encoder]   Content Type: 0
96
-23:23:47.395: [AMF Encoder]   Access: RW
97
-23:23:47.395: [AMF Encoder]   Values:
98
-23:23:47.395: [AMF Encoder]     Current: 0
99
-23:23:47.396: [AMF Encoder]     Default: 0
100
-23:23:47.396: [AMF Encoder]     Minimum: Empty
101
-23:23:47.396: [AMF Encoder]     Maximum: Empty
102
-23:23:47.397: [AMF Encoder]   Enumeration: 
103
-23:23:47.397: [AMF Encoder]     Transcoding (0)
104
-23:23:47.397: [AMF Encoder]     Ultra Low Latency (1)
105
-23:23:47.397: [AMF Encoder]     Low Latency (2)
106
-23:23:47.397: [AMF Encoder]     Webcam (3)
107
-23:23:47.398: [AMF Encoder]  [FrameSize] Width (Type: Size, Index 3)
108
-23:23:47.398: [AMF Encoder]   Content Type: 0
109
-23:23:47.398: [AMF Encoder]   Access: RWX
110
-23:23:47.398: [AMF Encoder]   Values:
111
-23:23:47.398: [AMF Encoder]     Current: 1920x1080
112
-23:23:47.398: [AMF Encoder]     Default: 1920x1080
113
-23:23:47.398: [AMF Encoder]     Minimum: 64x64
114
-23:23:47.398: [AMF Encoder]     Maximum: 4096x2160
115
-23:23:47.399: [AMF Encoder]  [Profile] Profile (Type: Int64, Index 4)
116
-23:23:47.399: [AMF Encoder]   Content Type: 0
117
-23:23:47.399: [AMF Encoder]   Access: RWX
118
-23:23:47.400: [AMF Encoder]   Values:
119
-23:23:47.400: [AMF Encoder]     Current: 77
120
-23:23:47.400: [AMF Encoder]     Default: 77
121
-23:23:47.401: [AMF Encoder]     Minimum: Empty
122
-23:23:47.401: [AMF Encoder]     Maximum: Empty
123
-23:23:47.401: [AMF Encoder]   Enumeration: 
124
-23:23:47.401: [AMF Encoder]     Contrained Base (256)
125
-23:23:47.401: [AMF Encoder]     Baseline (66)
126
-23:23:47.401: [AMF Encoder]     Main (77)
127
-23:23:47.401: [AMF Encoder]     Contrained High (257)
128
-23:23:47.402: [AMF Encoder]     High (100)
129
-23:23:47.402: [AMF Encoder]  [ProfileLevel] Profile-Level (Type: Int64, Index 5)
130
-23:23:47.402: [AMF Encoder]   Content Type: 0
131
-23:23:47.402: [AMF Encoder]   Access: RW
132
-23:23:47.402: [AMF Encoder]   Values:
133
-23:23:47.402: [AMF Encoder]     Current: 42
134
-23:23:47.402: [AMF Encoder]     Default: 42
135
-23:23:47.402: [AMF Encoder]     Minimum: Empty
136
-23:23:47.403: [AMF Encoder]     Maximum: Empty
137
-23:23:47.403: [AMF Encoder]   Enumeration: 
138
-23:23:47.403: [AMF Encoder]     1 (10)
139
-23:23:47.403: [AMF Encoder]     1.1 (11)
140
-23:23:47.403: [AMF Encoder]     1.2 (12)
141
-23:23:47.403: [AMF Encoder]     1.3 (13)
142
-23:23:47.404: [AMF Encoder]     2 (20)
143
-23:23:47.404: [AMF Encoder]     2.1 (21)
144
-23:23:47.404: [AMF Encoder]     2.2 (22)
145
-23:23:47.404: [AMF Encoder]     3 (30)
146
-23:23:47.404: [AMF Encoder]     3.1 (31)
147
-23:23:47.404: [AMF Encoder]     3.2 (32)
148
-23:23:47.404: [AMF Encoder]     4 (40)
149
-23:23:47.404: [AMF Encoder]     4.1 (41)
150
-23:23:47.405: [AMF Encoder]     4.2 (42)
151
-23:23:47.405: [AMF Encoder]     5.0 (50)
152
-23:23:47.405: [AMF Encoder]     5.1 (51)
153
-23:23:47.405: [AMF Encoder]     5.2 (52)
154
-23:23:47.405: [AMF Encoder]  [QualityEnhancementMode] Quality Enhancement Mode (Type: Int64, Index 6)
155
-23:23:47.405: [AMF Encoder]   Content Type: 0
156
-23:23:47.405: [AMF Encoder]   Access: 
157
-23:23:47.405: [AMF Encoder]   Values:
158
-23:23:47.406: [AMF Encoder]     Current: Empty
159
-23:23:47.406: [AMF Encoder]     Default: 0
160
-23:23:47.406: [AMF Encoder]     Minimum: Empty
161
-23:23:47.406: [AMF Encoder]     Maximum: Empty
162
-23:23:47.409: [AMF Encoder]   Enumeration: 
163
-23:23:47.410: [AMF Encoder]     Disable (0)
164
-23:23:47.410: [AMF Encoder]     CGS (1)
165
-23:23:47.410: [AMF Encoder]     CGS Rewrite (2)
166
-23:23:47.411: [AMF Encoder]     MGS (3)
167
-23:23:47.411: [AMF Encoder]  [MaxOfLTRFrames] Max Of LTR (Type: Int64, Index 7)
168
-23:23:47.411: [AMF Encoder]   Content Type: 0
169
-23:23:47.412: [AMF Encoder]   Access: RWX
170
-23:23:47.412: [AMF Encoder]   Values:
171
-23:23:47.412: [AMF Encoder]     Current: 0
172
-23:23:47.412: [AMF Encoder]     Default: 0
173
-23:23:47.413: [AMF Encoder]     Minimum: 0
174
-23:23:47.414: [AMF Encoder]     Maximum: 2
175
-23:23:47.415: [AMF Encoder]  [MaxNumRefFrames] MaxNumRefFrames (Type: Int64, Index 8)
176
-23:23:47.415: [AMF Encoder]   Content Type: 0
177
-23:23:47.416: [AMF Encoder]   Access: RWX
178
-23:23:47.416: [AMF Encoder]   Values:
179
-23:23:47.417: [AMF Encoder]     Current: 4
180
-23:23:47.418: [AMF Encoder]     Default: 4
181
-23:23:47.418: [AMF Encoder]     Minimum: 1
182
-23:23:47.419: [AMF Encoder]     Maximum: 16
183
-23:23:47.419: [AMF Encoder]  [ConstraintSetFlags] ConstraintSetFlags (Type: Int64, Index 9)
184
-23:23:47.419: [AMF Encoder]   Content Type: 0
185
-23:23:47.419: [AMF Encoder]   Access: RW
186
-23:23:47.420: [AMF Encoder]   Values:
187
-23:23:47.420: [AMF Encoder]     Current: 0
188
-23:23:47.420: [AMF Encoder]     Default: 0
189
-23:23:47.420: [AMF Encoder]     Minimum: 0
190
-23:23:47.420: [AMF Encoder]     Maximum: 255
191
-23:23:47.420: [AMF Encoder]  [MaxMBPerSec] MaxMBPerSec (Type: Int64, Index 10)
192
-23:23:47.421: [AMF Encoder]   Content Type: 0
193
-23:23:47.421: [AMF Encoder]   Access: R
194
-23:23:47.421: [AMF Encoder]   Values:
195
-23:23:47.421: [AMF Encoder]     Current: 638704
196
-23:23:47.421: [AMF Encoder]     Default: 638704
197
-23:23:47.421: [AMF Encoder]     Minimum: 0
198
-23:23:47.421: [AMF Encoder]     Maximum: 2147483647
199
-23:23:47.421: [AMF Encoder]  [InstanceID] InstanceID (Type: Int64, Index 11)
200
-23:23:47.421: [AMF Encoder]   Content Type: 0
201
-23:23:47.422: [AMF Encoder]   Access: RW
202
-23:23:47.422: [AMF Encoder]   Values:
203
-23:23:47.422: [AMF Encoder]     Current: -1
204
-23:23:47.422: [AMF Encoder]     Default: -1
205
-23:23:47.422: [AMF Encoder]     Minimum: -1
206
-23:23:47.422: [AMF Encoder]     Maximum: 15
207
-23:23:47.422: [AMF Encoder]  [TargetBitrate] Bitrate (Type: Int64, Index 12)
208
-23:23:47.422: [AMF Encoder]   Content Type: 0
209
-23:23:47.423: [AMF Encoder]   Access: RWX
210
-23:23:47.423: [AMF Encoder]   Values:
211
-23:23:47.423: [AMF Encoder]     Current: 20000000
212
-23:23:47.423: [AMF Encoder]     Default: 20000000
213
-23:23:47.423: [AMF Encoder]     Minimum: 10000
214
-23:23:47.423: [AMF Encoder]     Maximum: 100000000
215
-23:23:47.423: [AMF Encoder]  [PeakBitrate] Peak Bitrate (Type: Int64, Index 13)
216
-23:23:47.423: [AMF Encoder]   Content Type: 0
217
-23:23:47.424: [AMF Encoder]   Access: RWX
218
-23:23:47.424: [AMF Encoder]   Values:
219
-23:23:47.424: [AMF Encoder]     Current: 20000000
220
-23:23:47.424: [AMF Encoder]     Default: 20000000
221
-23:23:47.424: [AMF Encoder]     Minimum: 10000
222
-23:23:47.424: [AMF Encoder]     Maximum: 100000000
223
-23:23:47.424: [AMF Encoder]  [RateControlMethod] Rate Control Method (Type: Int64, Index 14)
224
-23:23:47.424: [AMF Encoder]   Content Type: 0
225
-23:23:47.424: [AMF Encoder]   Access: RWX
226
-23:23:47.425: [AMF Encoder]   Values:
227
-23:23:47.425: [AMF Encoder]     Current: 2
228
-23:23:47.425: [AMF Encoder]     Default: 2
229
-23:23:47.425: [AMF Encoder]     Minimum: Empty
230
-23:23:47.425: [AMF Encoder]     Maximum: Empty
231
-23:23:47.425: [AMF Encoder]   Enumeration: 
232
-23:23:47.425: [AMF Encoder]     Constant QP (0)
233
-23:23:47.425: [AMF Encoder]     CBR (1)
234
-23:23:47.425: [AMF Encoder]     Peak constrained VBR (2)
235
-23:23:47.425: [AMF Encoder]     Latency constrained VBR (3)
236
-23:23:47.425: [AMF Encoder]  [EanbleVBAQ] Eanble VBAQ (Type: Boolean, Index 15)
237
-23:23:47.426: [AMF Encoder]   Content Type: 0
238
-23:23:47.426: [AMF Encoder]   Access: RWX
239
-23:23:47.426: [AMF Encoder]   Values:
240
-23:23:47.426: [AMF Encoder]     Current: false
241
-23:23:47.426: [AMF Encoder]     Default: false
242
-23:23:47.426: [AMF Encoder]     Minimum: Empty
243
-23:23:47.426: [AMF Encoder]     Maximum: Empty
244
-23:23:47.426: [AMF Encoder]  [RateControlPreanalysisEnable] Rate Control Preanalysis Enable (Type: Boolean, Index 16)
245
-23:23:47.427: [AMF Encoder]   Content Type: 0
246
-23:23:47.427: [AMF Encoder]   Access: RWX
247
-23:23:47.427: [AMF Encoder]   Values:
248
-23:23:47.427: [AMF Encoder]     Current: false
249
-23:23:47.427: [AMF Encoder]     Default: false
250
-23:23:47.427: [AMF Encoder]     Minimum: Empty
251
-23:23:47.427: [AMF Encoder]     Maximum: Empty
252
-23:23:47.428: [AMF Encoder]  [RateControlSkipFrameEnable] Rate Control Based Frame Skip (Type: Boolean, Index 17)
253
-23:23:47.428: [AMF Encoder]   Content Type: 0
254
-23:23:47.428: [AMF Encoder]   Access: RWX
255
-23:23:47.428: [AMF Encoder]   Values:
256
-23:23:47.428: [AMF Encoder]     Current: false
257
-23:23:47.429: [AMF Encoder]     Default: false
258
-23:23:47.429: [AMF Encoder]     Minimum: Empty
259
-23:23:47.429: [AMF Encoder]     Maximum: Empty
260
-23:23:47.429: [AMF Encoder]  [MinQP] Min QP (Type: Int64, Index 18)
261
-23:23:47.429: [AMF Encoder]   Content Type: 0
262
-23:23:47.429: [AMF Encoder]   Access: RWX
263
-23:23:47.430: [AMF Encoder]   Values:
264
-23:23:47.430: [AMF Encoder]     Current: 18
265
-23:23:47.430: [AMF Encoder]     Default: 18
266
-23:23:47.430: [AMF Encoder]     Minimum: 0
267
-23:23:47.430: [AMF Encoder]     Maximum: 51
268
-23:23:47.430: [AMF Encoder]  [MaxQP] Max QP (Type: Int64, Index 19)
269
-23:23:47.430: [AMF Encoder]   Content Type: 0
270
-23:23:47.430: [AMF Encoder]   Access: RWX
271
-23:23:47.430: [AMF Encoder]   Values:
272
-23:23:47.431: [AMF Encoder]     Current: 51
273
-23:23:47.431: [AMF Encoder]     Default: 51
274
-23:23:47.431: [AMF Encoder]     Minimum: 0
275
-23:23:47.431: [AMF Encoder]     Maximum: 51
276
-23:23:47.431: [AMF Encoder]  [QPI] QP I (Type: Int64, Index 20)
277
-23:23:47.431: [AMF Encoder]   Content Type: 0
278
-23:23:47.431: [AMF Encoder]   Access: RWX
279
-23:23:47.431: [AMF Encoder]   Values:
280
-23:23:47.431: [AMF Encoder]     Current: 22
281
-23:23:47.431: [AMF Encoder]     Default: 22
282
-23:23:47.432: [AMF Encoder]     Minimum: 0
283
-23:23:47.432: [AMF Encoder]     Maximum: 51
284
-23:23:47.432: [AMF Encoder]  [QPP] QP P (Type: Int64, Index 21)
285
-23:23:47.432: [AMF Encoder]   Content Type: 0
286
-23:23:47.432: [AMF Encoder]   Access: RWX
287
-23:23:47.432: [AMF Encoder]   Values:
288
-23:23:47.432: [AMF Encoder]     Current: 22
289
-23:23:47.432: [AMF Encoder]     Default: 22
290
-23:23:47.432: [AMF Encoder]     Minimum: 0
291
-23:23:47.433: [AMF Encoder]     Maximum: 51
292
-23:23:47.433: [AMF Encoder]  [QPB] QP B (Type: Int64, Index 22)
293
-23:23:47.433: [AMF Encoder]   Content Type: 0
294
-23:23:47.433: [AMF Encoder]   Access: RWX
295
-23:23:47.433: [AMF Encoder]   Values:
296
-23:23:47.433: [AMF Encoder]     Current: 22
297
-23:23:47.433: [AMF Encoder]     Default: 22
298
-23:23:47.433: [AMF Encoder]     Minimum: 0
299
-23:23:47.433: [AMF Encoder]     Maximum: 51
300
-23:23:47.434: [AMF Encoder]  [GOPSize] GOP Size (Type: Int64, Index 23)
301
-23:23:47.434: [AMF Encoder]   Content Type: 0
302
-23:23:47.434: [AMF Encoder]   Access: RWX
303
-23:23:47.434: [AMF Encoder]   Values:
304
-23:23:47.434: [AMF Encoder]     Current: 0
305
-23:23:47.434: [AMF Encoder]     Default: 0
306
-23:23:47.434: [AMF Encoder]     Minimum: 0
307
-23:23:47.434: [AMF Encoder]     Maximum: 2147483647
308
-23:23:47.434: [AMF Encoder]  [FrameRate] Frame Rate (Type: Rate, Index 24)
309
-23:23:47.435: [AMF Encoder]   Content Type: 0
310
-23:23:47.435: [AMF Encoder]   Access: RWX
311
-23:23:47.435: [AMF Encoder]   Values:
312
-23:23:47.435: [AMF Encoder]     Current: 30/1
313
-23:23:47.435: [AMF Encoder]     Default: 30/1
314
-23:23:47.435: [AMF Encoder]     Minimum: Empty
315
-23:23:47.435: [AMF Encoder]     Maximum: Empty
316
-23:23:47.435: [AMF Encoder]  [AspectRatio] AspectRatio (Type: Rate, Index 25)
317
-23:23:47.435: [AMF Encoder]   Content Type: 0
318
-23:23:47.436: [AMF Encoder]   Access: RWX
319
-23:23:47.436: [AMF Encoder]   Values:
320
-23:23:47.436: [AMF Encoder]     Current: 1/1
321
-23:23:47.436: [AMF Encoder]     Default: 1/1
322
-23:23:47.436: [AMF Encoder]     Minimum: Empty
323
-23:23:47.436: [AMF Encoder]     Maximum: Empty
324
-23:23:47.436: [AMF Encoder]  [NominalRange] NominalRange (Type: Boolean, Index 26)
325
-23:23:47.436: [AMF Encoder]   Content Type: 0
326
-23:23:47.436: [AMF Encoder]   Access: RWX
327
-23:23:47.436: [AMF Encoder]   Values:
328
-23:23:47.437: [AMF Encoder]     Current: false
329
-23:23:47.437: [AMF Encoder]     Default: false
330
-23:23:47.437: [AMF Encoder]     Minimum: Empty
331
-23:23:47.438: [AMF Encoder]     Maximum: Empty
332
-23:23:47.438: [AMF Encoder]  [VBVBufferSize] VBV Buffer Size (Type: Int64, Index 27)
333
-23:23:47.438: [AMF Encoder]   Content Type: 0
334
-23:23:47.438: [AMF Encoder]   Access: RWX
335
-23:23:47.438: [AMF Encoder]   Values:
336
-23:23:47.438: [AMF Encoder]     Current: 20000000
337
-23:23:47.438: [AMF Encoder]     Default: 20000000
338
-23:23:47.439: [AMF Encoder]     Minimum: 1000
339
-23:23:47.439: [AMF Encoder]     Maximum: 100000000
340
-23:23:47.439: [AMF Encoder]  [InitialVBVBufferFullness] Initial VBV Buffer Fullness (Type: Int64, Index 28)
341
-23:23:47.439: [AMF Encoder]   Content Type: 0
342
-23:23:47.439: [AMF Encoder]   Access: RWX
343
-23:23:47.439: [AMF Encoder]   Values:
344
-23:23:47.440: [AMF Encoder]     Current: 64
345
-23:23:47.440: [AMF Encoder]     Default: 64
346
-23:23:47.440: [AMF Encoder]     Minimum: 0
347
-23:23:47.440: [AMF Encoder]     Maximum: 64
348
-23:23:47.440: [AMF Encoder]  [EnforceHRD] Enforce HRD (Type: Boolean, Index 29)
349
-23:23:47.440: [AMF Encoder]   Content Type: 0
350
-23:23:47.440: [AMF Encoder]   Access: RWX
351
-23:23:47.440: [AMF Encoder]   Values:
352
-23:23:47.441: [AMF Encoder]     Current: false
353
-23:23:47.441: [AMF Encoder]     Default: false
354
-23:23:47.441: [AMF Encoder]     Minimum: Empty
355
-23:23:47.441: [AMF Encoder]     Maximum: Empty
356
-23:23:47.441: [AMF Encoder]  [MaxAUSize] Max AU Size (Type: Int64, Index 30)
357
-23:23:47.441: [AMF Encoder]   Content Type: 0
358
-23:23:47.441: [AMF Encoder]   Access: RWX
359
-23:23:47.441: [AMF Encoder]   Values:
360
-23:23:47.441: [AMF Encoder]     Current: 0
361
-23:23:47.441: [AMF Encoder]     Default: 0
362
-23:23:47.442: [AMF Encoder]     Minimum: 0
363
-23:23:47.442: [AMF Encoder]     Maximum: 100000000
364
-23:23:47.442: [AMF Encoder]  [FillerDataEnable] Filler Data Enable (Type: Boolean, Index 31)
365
-23:23:47.442: [AMF Encoder]   Content Type: 0
366
-23:23:47.442: [AMF Encoder]   Access: RWX
367
-23:23:47.442: [AMF Encoder]   Values:
368
-23:23:47.442: [AMF Encoder]     Current: false
369
-23:23:47.442: [AMF Encoder]     Default: false
370
-23:23:47.442: [AMF Encoder]     Minimum: Empty
371
-23:23:47.442: [AMF Encoder]     Maximum: Empty
372
-23:23:47.443: [AMF Encoder]  [BPicturesDeltaQP] B-picture Delta (Type: Int64, Index 32)
373
-23:23:47.443: [AMF Encoder]   Content Type: 0
374
-23:23:47.443: [AMF Encoder]   Access: RWX
375
-23:23:47.443: [AMF Encoder]   Values:
376
-23:23:47.443: [AMF Encoder]     Current: 4
377
-23:23:47.443: [AMF Encoder]     Default: 4
378
-23:23:47.443: [AMF Encoder]     Minimum: -10
379
-23:23:47.443: [AMF Encoder]     Maximum: 10
380
-23:23:47.443: [AMF Encoder]  [ReferenceBPicturesDeltaQP] Reference B-picture Delta (Type: Int64, Index 33)
381
-23:23:47.443: [AMF Encoder]   Content Type: 0
382
-23:23:47.444: [AMF Encoder]   Access: RWX
383
-23:23:47.444: [AMF Encoder]   Values:
384
-23:23:47.444: [AMF Encoder]     Current: 2
385
-23:23:47.444: [AMF Encoder]     Default: 2
386
-23:23:47.444: [AMF Encoder]     Minimum: -10
387
-23:23:47.444: [AMF Encoder]     Maximum: 10
388
-23:23:47.444: [AMF Encoder]  [HeaderInsertionSpacing] Header Insertion Spacing (Type: Int64, Index 34)
389
-23:23:47.444: [AMF Encoder]   Content Type: 0
390
-23:23:47.445: [AMF Encoder]   Access: RWX
391
-23:23:47.445: [AMF Encoder]   Values:
392
-23:23:47.445: [AMF Encoder]     Current: 0
393
-23:23:47.445: [AMF Encoder]     Default: 0
394
-23:23:47.445: [AMF Encoder]     Minimum: 0
395
-23:23:47.445: [AMF Encoder]     Maximum: 2147483647
396
-23:23:47.445: [AMF Encoder]  [IDRPeriod] IDR Period (Type: Int64, Index 35)
397
-23:23:47.445: [AMF Encoder]   Content Type: 0
398
-23:23:47.446: [AMF Encoder]   Access: RWX
399
-23:23:47.446: [AMF Encoder]   Values:
400
-23:23:47.446: [AMF Encoder]     Current: 30
401
-23:23:47.446: [AMF Encoder]     Default: 30
402
-23:23:47.446: [AMF Encoder]     Minimum: 0
403
-23:23:47.446: [AMF Encoder]     Maximum: 2147483647
404
-23:23:47.446: [AMF Encoder]  [DeBlockingFilter] De-blocking Filter (Type: Boolean, Index 36)
405
-23:23:47.446: [AMF Encoder]   Content Type: 0
406
-23:23:47.446: [AMF Encoder]   Access: RWX
407
-23:23:47.447: [AMF Encoder]   Values:
408
-23:23:47.447: [AMF Encoder]     Current: true
409
-23:23:47.447: [AMF Encoder]     Default: true
410
-23:23:47.447: [AMF Encoder]     Minimum: Empty
411
-23:23:47.447: [AMF Encoder]     Maximum: Empty
412
-23:23:47.447: [AMF Encoder]  [IntraRefreshMBsNumberPerSlot] Intra Refresh MBs Number Per Slot (Type: Int64, Index 37)
413
-23:23:47.447: [AMF Encoder]   Content Type: 0
414
-23:23:47.447: [AMF Encoder]   Access: RWX
415
-23:23:47.447: [AMF Encoder]   Values:
416
-23:23:47.448: [AMF Encoder]     Current: 0
417
-23:23:47.448: [AMF Encoder]     Default: 0
418
-23:23:47.448: [AMF Encoder]     Minimum: 0
419
-23:23:47.448: [AMF Encoder]     Maximum: 8160
420
-23:23:47.448: [AMF Encoder]  [IntraRefreshNumOfStripes] IntraRefreshNumOfStripes (Type: Int64, Index 38)
421
-23:23:47.448: [AMF Encoder]   Content Type: 0
422
-23:23:47.448: [AMF Encoder]   Access: RWX
423
-23:23:47.448: [AMF Encoder]   Values:
424
-23:23:47.448: [AMF Encoder]     Current: 0
425
-23:23:47.448: [AMF Encoder]     Default: 0
426
-23:23:47.448: [AMF Encoder]     Minimum: 0
427
-23:23:47.449: [AMF Encoder]     Maximum: 2147483647
428
-23:23:47.449: [AMF Encoder]  [SliceMode] Slice Mode (Type: Int64, Index 39)
429
-23:23:47.449: [AMF Encoder]   Content Type: 0
430
-23:23:47.449: [AMF Encoder]   Access: RWX
431
-23:23:47.449: [AMF Encoder]   Values:
432
-23:23:47.449: [AMF Encoder]     Current: 1
433
-23:23:47.449: [AMF Encoder]     Default: 1
434
-23:23:47.450: [AMF Encoder]     Minimum: 1
435
-23:23:47.450: [AMF Encoder]     Maximum: 2
436
-23:23:47.450: [AMF Encoder]  [SlicesPerFrame] Slices Per Frame (Type: Int64, Index 40)
437
-23:23:47.450: [AMF Encoder]   Content Type: 0
438
-23:23:47.450: [AMF Encoder]   Access: RWX
439
-23:23:47.450: [AMF Encoder]   Values:
440
-23:23:47.450: [AMF Encoder]     Current: 1
441
-23:23:47.450: [AMF Encoder]     Default: 1
442
-23:23:47.451: [AMF Encoder]     Minimum: 1
443
-23:23:47.451: [AMF Encoder]     Maximum: 8160
444
-23:23:47.451: [AMF Encoder]  [MaxSliceSize] Max Slice Size (Type: Int64, Index 41)
445
-23:23:47.451: [AMF Encoder]   Content Type: 0
446
-23:23:47.451: [AMF Encoder]   Access: RWX
447
-23:23:47.451: [AMF Encoder]   Values:
448
-23:23:47.451: [AMF Encoder]     Current: 2147483647
449
-23:23:47.451: [AMF Encoder]     Default: 2147483647
450
-23:23:47.452: [AMF Encoder]     Minimum: 1
451
-23:23:47.452: [AMF Encoder]     Maximum: 2147483647
452
-23:23:47.452: [AMF Encoder]  [BPicturesPattern] B-picture Pattern (Type: Int64, Index 42)
453
-23:23:47.452: [AMF Encoder]   Content Type: 0
454
-23:23:47.452: [AMF Encoder]   Access: RWX
455
-23:23:47.452: [AMF Encoder]   Values:
456
-23:23:47.452: [AMF Encoder]     Current: 3
457
-23:23:47.452: [AMF Encoder]     Default: 3
458
-23:23:47.453: [AMF Encoder]     Minimum: 0
459
-23:23:47.453: [AMF Encoder]     Maximum: 3
460
-23:23:47.454: [AMF Encoder]  [BReferenceEnable] Enable B Refrence (Type: Boolean, Index 43)
461
-23:23:47.454: [AMF Encoder]   Content Type: 0
462
-23:23:47.454: [AMF Encoder]   Access: RWX
463
-23:23:47.454: [AMF Encoder]   Values:
464
-23:23:47.454: [AMF Encoder]     Current: true
465
-23:23:47.454: [AMF Encoder]     Default: true
466
-23:23:47.454: [AMF Encoder]     Minimum: Empty
467
-23:23:47.454: [AMF Encoder]     Maximum: Empty
468
-23:23:47.454: [AMF Encoder]  [LowLatencyInternal] LowLatencyInternal (Type: Boolean, Index 44)
469
-23:23:47.454: [AMF Encoder]   Content Type: 0
470
-23:23:47.454: [AMF Encoder]   Access: RWX
471
-23:23:47.455: [AMF Encoder]   Values:
472
-23:23:47.455: [AMF Encoder]     Current: false
473
-23:23:47.455: [AMF Encoder]     Default: false
474
-23:23:47.455: [AMF Encoder]     Minimum: Empty
475
-23:23:47.455: [AMF Encoder]     Maximum: Empty
476
-23:23:47.455: [AMF Encoder]  [CommonLowLatencyInternal] CommonLowLatencyInternal (Type: Boolean, Index 45)
477
-23:23:47.455: [AMF Encoder]   Content Type: 0
478
-23:23:47.455: [AMF Encoder]   Access: RWX
479
-23:23:47.455: [AMF Encoder]   Values:
480
-23:23:47.455: [AMF Encoder]     Current: false
481
-23:23:47.456: [AMF Encoder]     Default: false
482
-23:23:47.456: [AMF Encoder]     Minimum: Empty
483
-23:23:47.456: [AMF Encoder]     Maximum: Empty
484
-23:23:47.456: [AMF Encoder]  [EnableGOPAlignment] EnableGOPAlignment (Type: Boolean, Index 46)
485
-23:23:47.456: [AMF Encoder]   Content Type: 0
486
-23:23:47.456: [AMF Encoder]   Access: RWX
487
-23:23:47.456: [AMF Encoder]   Values:
488
-23:23:47.456: [AMF Encoder]     Current: true
489
-23:23:47.457: [AMF Encoder]     Default: true
490
-23:23:47.457: [AMF Encoder]     Minimum: Empty
491
-23:23:47.457: [AMF Encoder]     Maximum: Empty
492
-23:23:47.457: [AMF Encoder]  [SliceControlMode] SliceControlMode (Type: Int64, Index 47)
493
-23:23:47.457: [AMF Encoder]   Content Type: 0
494
-23:23:47.457: [AMF Encoder]   Access: RWX
495
-23:23:47.457: [AMF Encoder]   Values:
496
-23:23:47.457: [AMF Encoder]     Current: 0
497
-23:23:47.457: [AMF Encoder]     Default: 0
498
-23:23:47.457: [AMF Encoder]     Minimum: 0
499
-23:23:47.457: [AMF Encoder]     Maximum: 3
500
-23:23:47.458: [AMF Encoder]  [SliceControlSize] SliceControlSize (Type: Int64, Index 48)
501
-23:23:47.458: [AMF Encoder]   Content Type: 0
502
-23:23:47.458: [AMF Encoder]   Access: RWX
503
-23:23:47.458: [AMF Encoder]   Values:
504
-23:23:47.458: [AMF Encoder]     Current: 0
505
-23:23:47.458: [AMF Encoder]     Default: 0
506
-23:23:47.458: [AMF Encoder]     Minimum: 0
507
-23:23:47.458: [AMF Encoder]     Maximum: 2147483647
508
-23:23:47.458: [AMF Encoder]  [CABACEnable] CABACEnable (Type: Int64, Index 49)
509
-23:23:47.458: [AMF Encoder]   Content Type: 0
510
-23:23:47.459: [AMF Encoder]   Access: RWX
511
-23:23:47.459: [AMF Encoder]   Values:
512
-23:23:47.459: [AMF Encoder]     Current: 0
513
-23:23:47.459: [AMF Encoder]     Default: 0
514
-23:23:47.459: [AMF Encoder]     Minimum: Empty
515
-23:23:47.459: [AMF Encoder]     Maximum: Empty
516
-23:23:47.459: [AMF Encoder]   Enumeration: 
517
-23:23:47.459: [AMF Encoder]     Undefined (0)
518
-23:23:47.460: [AMF Encoder]     Cabac (1)
519
-23:23:47.460: [AMF Encoder]     Calv (2)
520
-23:23:47.460: [AMF Encoder]  [ScanType] Scan Type (Type: Int64, Index 50)
521
-23:23:47.460: [AMF Encoder]   Content Type: 0
522
-23:23:47.460: [AMF Encoder]   Access: RWX
523
-23:23:47.460: [AMF Encoder]   Values:
524
-23:23:47.460: [AMF Encoder]     Current: 0
525
-23:23:47.460: [AMF Encoder]     Default: 0
526
-23:23:47.460: [AMF Encoder]     Minimum: Empty
527
-23:23:47.461: [AMF Encoder]     Maximum: Empty
528
-23:23:47.461: [AMF Encoder]   Enumeration: 
529
-23:23:47.461: [AMF Encoder]     Progressive (0)
530
-23:23:47.461: [AMF Encoder]     Interlaced (1)
531
-23:23:47.461: [AMF Encoder]  [QualityPreset] Quality Preset (Type: Int64, Index 51)
532
-23:23:47.461: [AMF Encoder]   Content Type: 0
533
-23:23:47.461: [AMF Encoder]   Access: RWX
534
-23:23:47.461: [AMF Encoder]   Values:
535
-23:23:47.461: [AMF Encoder]     Current: 0
536
-23:23:47.461: [AMF Encoder]     Default: 0
537
-23:23:47.461: [AMF Encoder]     Minimum: Empty
538
-23:23:47.462: [AMF Encoder]     Maximum: Empty
539
-23:23:47.462: [AMF Encoder]   Enumeration: 
540
-23:23:47.462: [AMF Encoder]     Balanced (0)
541
-23:23:47.462: [AMF Encoder]     Speed (1)
542
-23:23:47.462: [AMF Encoder]     Quality (2)
543
-23:23:47.462: [AMF Encoder]  [HalfPixel] Half Pixel (Type: Boolean, Index 52)
544
-23:23:47.462: [AMF Encoder]   Content Type: 0
545
-23:23:47.462: [AMF Encoder]   Access: RWX
546
-23:23:47.462: [AMF Encoder]   Values:
547
-23:23:47.462: [AMF Encoder]     Current: true
548
-23:23:47.463: [AMF Encoder]     Default: true
549
-23:23:47.463: [AMF Encoder]     Minimum: Empty
550
-23:23:47.463: [AMF Encoder]     Maximum: Empty
551
-23:23:47.463: [AMF Encoder]  [QuarterPixel] Quarter Pixel (Type: Boolean, Index 53)
552
-23:23:47.463: [AMF Encoder]   Content Type: 0
553
-23:23:47.463: [AMF Encoder]   Access: RWX
554
-23:23:47.463: [AMF Encoder]   Values:
555
-23:23:47.463: [AMF Encoder]     Current: true
556
-23:23:47.463: [AMF Encoder]     Default: true
557
-23:23:47.464: [AMF Encoder]     Minimum: Empty
558
-23:23:47.464: [AMF Encoder]     Maximum: Empty
559
-23:23:47.464: [AMF Encoder]  [ExtraData] ExtraData (Type: Interface, Index 54)
560
-23:23:47.464: [AMF Encoder]   Content Type: 0
561
-23:23:47.464: [AMF Encoder]   Access: RWX
562
-23:23:47.464: [AMF Encoder]   Values:
563
-23:23:47.465: [AMF Encoder] 
564
-23:23:47.465: [AMF Encoder]     Default: Empty
565
-23:23:47.465: [AMF Encoder]     Minimum: Empty
566
-23:23:47.465: [AMF Encoder]     Maximum: ''
567
-23:23:47.465: [AMF Encoder]  [UniqueInstance] Unique Instance (Type: Int64, Index 55)
568
-23:23:47.466: [AMF Encoder]   Content Type: 0
569
-23:23:47.466: [AMF Encoder]   Access: RWX
570
-23:23:47.466: [AMF Encoder]   Values:
571
-23:23:47.466: [AMF Encoder]     Current: 0
572
-23:23:47.466: [AMF Encoder]     Default: 0
573
-23:23:47.466: [AMF Encoder]     Minimum: 0
574
-23:23:47.466: [AMF Encoder]     Maximum: 2147483647
575
-23:23:47.466: [AMF Encoder]  [EncoderMaxInstances] EncoderMaxInstances (Type: Int64, Index 56)
576
-23:23:47.466: [AMF Encoder]   Content Type: 0
577
-23:23:47.466: [AMF Encoder]   Access: RWX
578
-23:23:47.467: [AMF Encoder]   Values:
579
-23:23:47.467: [AMF Encoder]     Current: 1
580
-23:23:47.467: [AMF Encoder]     Default: 1
581
-23:23:47.467: [AMF Encoder]     Minimum: 1
582
-23:23:47.467: [AMF Encoder]     Maximum: 2
583
-23:23:47.467: [AMF Encoder]  [MultiInstanceMode] MultiInstanceMode (Type: Boolean, Index 57)
584
-23:23:47.467: [AMF Encoder]   Content Type: 0
585
-23:23:47.467: [AMF Encoder]   Access: RWX
586
-23:23:47.467: [AMF Encoder]   Values:
587
-23:23:47.467: [AMF Encoder]     Current: false
588
-23:23:47.467: [AMF Encoder]     Default: false
589
-23:23:47.468: [AMF Encoder]     Minimum: Empty
590
-23:23:47.468: [AMF Encoder]     Maximum: Empty
591
-23:23:47.468: [AMF Encoder]  [MultiInstanceCurrentQueue] MultiInstanceCurrentQueue (Type: Int64, Index 58)
592
-23:23:47.468: [AMF Encoder]   Content Type: 0
593
-23:23:47.468: [AMF Encoder]   Access: RWX
594
-23:23:47.468: [AMF Encoder]   Values:
595
-23:23:47.468: [AMF Encoder]     Current: 0
596
-23:23:47.468: [AMF Encoder]     Default: 0
597
-23:23:47.468: [AMF Encoder]     Minimum: 0
598
-23:23:47.468: [AMF Encoder]     Maximum: 1
599
-23:23:47.468: [AMF Encoder]  [WaitForTask] WaitForTask (Type: Boolean, Index 59)
600
-23:23:47.469: [AMF Encoder]   Content Type: 0
601
-23:23:47.469: [AMF Encoder]   Access: RWX
602
-23:23:47.469: [AMF Encoder]   Values:
603
-23:23:47.469: [AMF Encoder]     Current: false
604
-23:23:47.469: [AMF Encoder]     Default: false
605
-23:23:47.469: [AMF Encoder]     Minimum: Empty
606
-23:23:47.470: [AMF Encoder]     Maximum: Empty
607
-23:23:47.470: [AMF Encoder]  [TL0.QL0.BPicturesDeltaQP] TL0.QL0 B-picture Delta (Type: Int64, Index 60)
608
-23:23:47.470: [AMF Encoder]   Content Type: 0
609
-23:23:47.470: [AMF Encoder]   Access: 
610
-23:23:47.470: [AMF Encoder]   Values:
611
-23:23:47.470: [AMF Encoder]     Current: Empty
612
-23:23:47.470: [AMF Encoder]     Default: 4
613
-23:23:47.470: [AMF Encoder]     Minimum: -10
614
-23:23:47.471: [AMF Encoder]     Maximum: 10
615
-23:23:47.471: [AMF Encoder]  [TL1.QL0.BPicturesDeltaQP] TL1.QL0 B-picture Delta (Type: Int64, Index 61)
616
-23:23:47.471: [AMF Encoder]   Content Type: 0
617
-23:23:47.471: [AMF Encoder]   Access: 
618
-23:23:47.471: [AMF Encoder]   Values:
619
-23:23:47.471: [AMF Encoder]     Current: Empty
620
-23:23:47.471: [AMF Encoder]     Default: 4
621
-23:23:47.471: [AMF Encoder]     Minimum: -10
622
-23:23:47.471: [AMF Encoder]     Maximum: 10
623
-23:23:47.472: [AMF Encoder]  [TL2.QL0.BPicturesDeltaQP] TL2.QL0 B-picture Delta (Type: Int64, Index 62)
624
-23:23:47.472: [AMF Encoder]   Content Type: 0
625
-23:23:47.472: [AMF Encoder]   Access: 
626
-23:23:47.472: [AMF Encoder]   Values:
627
-23:23:47.472: [AMF Encoder]     Current: Empty
628
-23:23:47.472: [AMF Encoder]     Default: 4
629
-23:23:47.473: [AMF Encoder]     Minimum: -10
630
-23:23:47.473: [AMF Encoder]     Maximum: 10
631
-23:23:47.473: [AMF Encoder]  [TL3.QL0.BPicturesDeltaQP] TL3.QL0 B-picture Delta (Type: Int64, Index 63)
632
-23:23:47.474: [AMF Encoder]   Content Type: 0
633
-23:23:47.474: [AMF Encoder]   Access: 
634
-23:23:47.474: [AMF Encoder]   Values:
635
-23:23:47.474: [AMF Encoder]     Current: Empty
636
-23:23:47.474: [AMF Encoder]     Default: 4
637
-23:23:47.475: [AMF Encoder]     Minimum: -10
638
-23:23:47.475: [AMF Encoder]     Maximum: 10
639
-23:23:47.475: [AMF Encoder]  [TL0.QL0.EanbleVBAQ] TL0.QL0 Eanble VBAQ (Type: Boolean, Index 64)
640
-23:23:47.475: [AMF Encoder]   Content Type: 0
641
-23:23:47.475: [AMF Encoder]   Access: 
642
-23:23:47.475: [AMF Encoder]   Values:
643
-23:23:47.475: [AMF Encoder]     Current: Empty
644
-23:23:47.475: [AMF Encoder]     Default: false
645
-23:23:47.475: [AMF Encoder]     Minimum: Empty
646
-23:23:47.476: [AMF Encoder]     Maximum: Empty
647
-23:23:47.476: [AMF Encoder]  [TL1.QL0.EanbleVBAQ] TL1.QL0 Eanble VBAQ (Type: Boolean, Index 65)
648
-23:23:47.476: [AMF Encoder]   Content Type: 0
649
-23:23:47.476: [AMF Encoder]   Access: 
650
-23:23:47.476: [AMF Encoder]   Values:
651
-23:23:47.476: [AMF Encoder]     Current: Empty
652
-23:23:47.476: [AMF Encoder]     Default: false
653
-23:23:47.476: [AMF Encoder]     Minimum: Empty
654
-23:23:47.476: [AMF Encoder]     Maximum: Empty
655
-23:23:47.477: [AMF Encoder]  [TL2.QL0.EanbleVBAQ] TL2.QL0 Eanble VBAQ (Type: Boolean, Index 66)
656
-23:23:47.477: [AMF Encoder]   Content Type: 0
657
-23:23:47.477: [AMF Encoder]   Access: 
658
-23:23:47.477: [AMF Encoder]   Values:
659
-23:23:47.477: [AMF Encoder]     Current: Empty
660
-23:23:47.477: [AMF Encoder]     Default: false
661
-23:23:47.477: [AMF Encoder]     Minimum: Empty
662
-23:23:47.477: [AMF Encoder]     Maximum: Empty
663
-23:23:47.477: [AMF Encoder]  [TL3.QL0.EanbleVBAQ] TL3.QL0 Eanble VBAQ (Type: Boolean, Index 67)
664
-23:23:47.477: [AMF Encoder]   Content Type: 0
665
-23:23:47.477: [AMF Encoder]   Access: 
666
-23:23:47.477: [AMF Encoder]   Values:
667
-23:23:47.477: [AMF Encoder]     Current: Empty
668
-23:23:47.478: [AMF Encoder]     Default: false
669
-23:23:47.478: [AMF Encoder]     Minimum: Empty
670
-23:23:47.478: [AMF Encoder]     Maximum: Empty
671
-23:23:47.478: [AMF Encoder]  [TL0.QL0.EnforceHRD] TL0.QL0 Enforce HRD (Type: Boolean, Index 68)
672
-23:23:47.478: [AMF Encoder]   Content Type: 0
673
-23:23:47.478: [AMF Encoder]   Access: 
674
-23:23:47.478: [AMF Encoder]   Values:
675
-23:23:47.478: [AMF Encoder]     Current: Empty
676
-23:23:47.478: [AMF Encoder]     Default: true
677
-23:23:47.478: [AMF Encoder]     Minimum: Empty
678
-23:23:47.478: [AMF Encoder]     Maximum: Empty
679
-23:23:47.478: [AMF Encoder]  [TL1.QL0.EnforceHRD] TL1.QL0 Enforce HRD (Type: Boolean, Index 69)
680
-23:23:47.479: [AMF Encoder]   Content Type: 0
681
-23:23:47.479: [AMF Encoder]   Access: 
682
-23:23:47.479: [AMF Encoder]   Values:
683
-23:23:47.479: [AMF Encoder]     Current: Empty
684
-23:23:47.479: [AMF Encoder]     Default: true
685
-23:23:47.479: [AMF Encoder]     Minimum: Empty
686
-23:23:47.479: [AMF Encoder]     Maximum: Empty
687
-23:23:47.479: [AMF Encoder]  [TL2.QL0.EnforceHRD] TL2.QL0 Enforce HRD (Type: Boolean, Index 70)
688
-23:23:47.479: [AMF Encoder]   Content Type: 0
689
-23:23:47.479: [AMF Encoder]   Access: 
690
-23:23:47.479: [AMF Encoder]   Values:
691
-23:23:47.479: [AMF Encoder]     Current: Empty
692
-23:23:47.480: [AMF Encoder]     Default: true
693
-23:23:47.480: [AMF Encoder]     Minimum: Empty
694
-23:23:47.480: [AMF Encoder]     Maximum: Empty
695
-23:23:47.480: [AMF Encoder]  [TL3.QL0.EnforceHRD] TL3.QL0 Enforce HRD (Type: Boolean, Index 71)
696
-23:23:47.480: [AMF Encoder]   Content Type: 0
697
-23:23:47.480: [AMF Encoder]   Access: 
698
-23:23:47.480: [AMF Encoder]   Values:
699
-23:23:47.480: [AMF Encoder]     Current: Empty
700
-23:23:47.480: [AMF Encoder]     Default: true
701
-23:23:47.480: [AMF Encoder]     Minimum: Empty
702
-23:23:47.480: [AMF Encoder]     Maximum: Empty
703
-23:23:47.481: [AMF Encoder]  [TL0.QL0.FillerDataEnable] TL0.QL0 Filler Data Enable (Type: Boolean, Index 72)
704
-23:23:47.481: [AMF Encoder]   Content Type: 0
705
-23:23:47.481: [AMF Encoder]   Access: 
706
-23:23:47.481: [AMF Encoder]   Values:
707
-23:23:47.481: [AMF Encoder]     Current: Empty
708
-23:23:47.481: [AMF Encoder]     Default: false
709
-23:23:47.481: [AMF Encoder]     Minimum: Empty
710
-23:23:47.481: [AMF Encoder]     Maximum: Empty
711
-23:23:47.481: [AMF Encoder]  [TL1.QL0.FillerDataEnable] TL1.QL0 Filler Data Enable (Type: Boolean, Index 73)
712
-23:23:47.481: [AMF Encoder]   Content Type: 0
713
-23:23:47.481: [AMF Encoder]   Access: 
714
-23:23:47.481: [AMF Encoder]   Values:
715
-23:23:47.482: [AMF Encoder]     Current: Empty
716
-23:23:47.482: [AMF Encoder]     Default: false
717
-23:23:47.482: [AMF Encoder]     Minimum: Empty
718
-23:23:47.482: [AMF Encoder]     Maximum: Empty
719
-23:23:47.482: [AMF Encoder]  [TL2.QL0.FillerDataEnable] TL2.QL0 Filler Data Enable (Type: Boolean, Index 74)
720
-23:23:47.482: [AMF Encoder]   Content Type: 0
721
-23:23:47.482: [AMF Encoder]   Access: 
722
-23:23:47.482: [AMF Encoder]   Values:
723
-23:23:47.482: [AMF Encoder]     Current: Empty
724
-23:23:47.482: [AMF Encoder]     Default: false
725
-23:23:47.482: [AMF Encoder]     Minimum: Empty
726
-23:23:47.483: [AMF Encoder]     Maximum: Empty
727
-23:23:47.483: [AMF Encoder]  [TL3.QL0.FillerDataEnable] TL3.QL0 Filler Data Enable (Type: Boolean, Index 75)
728
-23:23:47.483: [AMF Encoder]   Content Type: 0
729
-23:23:47.483: [AMF Encoder]   Access: 
730
-23:23:47.483: [AMF Encoder]   Values:
731
-23:23:47.483: [AMF Encoder]     Current: Empty
732
-23:23:47.483: [AMF Encoder]     Default: false
733
-23:23:47.483: [AMF Encoder]     Minimum: Empty
734
-23:23:47.483: [AMF Encoder]     Maximum: Empty
735
-23:23:47.483: [AMF Encoder]  [TL0.QL0.FrameRate] TL0.QL0 Frame Rate (Type: Rate, Index 76)
736
-23:23:47.483: [AMF Encoder]   Content Type: 0
737
-23:23:47.484: [AMF Encoder]   Access: 
738
-23:23:47.484: [AMF Encoder]   Values:
739
-23:23:47.484: [AMF Encoder]     Current: Empty
740
-23:23:47.484: [AMF Encoder]     Default: 30/1
741
-23:23:47.484: [AMF Encoder]     Minimum: Empty
742
-23:23:47.484: [AMF Encoder]     Maximum: Empty
743
-23:23:47.484: [AMF Encoder]  [TL1.QL0.FrameRate] TL1.QL0 Frame Rate (Type: Rate, Index 77)
744
-23:23:47.485: [AMF Encoder]   Content Type: 0
745
-23:23:47.485: [AMF Encoder]   Access: 
746
-23:23:47.485: [AMF Encoder]   Values:
747
-23:23:47.485: [AMF Encoder]     Current: Empty
748
-23:23:47.485: [AMF Encoder]     Default: 30/1
749
-23:23:47.485: [AMF Encoder]     Minimum: Empty
750
-23:23:47.485: [AMF Encoder]     Maximum: Empty
751
-23:23:47.485: [AMF Encoder]  [TL2.QL0.FrameRate] TL2.QL0 Frame Rate (Type: Rate, Index 78)
752
-23:23:47.485: [AMF Encoder]   Content Type: 0
753
-23:23:47.485: [AMF Encoder]   Access: 
754
-23:23:47.485: [AMF Encoder]   Values:
755
-23:23:47.485: [AMF Encoder]     Current: Empty
756
-23:23:47.486: [AMF Encoder]     Default: 30/1
757
-23:23:47.486: [AMF Encoder]     Minimum: Empty
758
-23:23:47.486: [AMF Encoder]     Maximum: Empty
759
-23:23:47.486: [AMF Encoder]  [TL3.QL0.FrameRate] TL3.QL0 Frame Rate (Type: Rate, Index 79)
760
-23:23:47.486: [AMF Encoder]   Content Type: 0
761
-23:23:47.486: [AMF Encoder]   Access: 
762
-23:23:47.486: [AMF Encoder]   Values:
763
-23:23:47.486: [AMF Encoder]     Current: Empty
764
-23:23:47.486: [AMF Encoder]     Default: 30/1
765
-23:23:47.486: [AMF Encoder]     Minimum: Empty
766
-23:23:47.486: [AMF Encoder]     Maximum: Empty
767
-23:23:47.486: [AMF Encoder]  [TL0.QL0.GOPSize] TL0.QL0 GOP Size (Type: Int64, Index 80)
768
-23:23:47.487: [AMF Encoder]   Content Type: 0
769
-23:23:47.487: [AMF Encoder]   Access: 
770
-23:23:47.487: [AMF Encoder]   Values:
771
-23:23:47.487: [AMF Encoder]     Current: Empty
772
-23:23:47.487: [AMF Encoder]     Default: 0
773
-23:23:47.487: [AMF Encoder]     Minimum: 0
774
-23:23:47.487: [AMF Encoder]     Maximum: 2147483647
775
-23:23:47.487: [AMF Encoder]  [TL1.QL0.GOPSize] TL1.QL0 GOP Size (Type: Int64, Index 81)
776
-23:23:47.487: [AMF Encoder]   Content Type: 0
777
-23:23:47.487: [AMF Encoder]   Access: 
778
-23:23:47.487: [AMF Encoder]   Values:
779
-23:23:47.487: [AMF Encoder]     Current: Empty
780
-23:23:47.488: [AMF Encoder]     Default: 0
781
-23:23:47.488: [AMF Encoder]     Minimum: 0
782
-23:23:47.488: [AMF Encoder]     Maximum: 2147483647
783
-23:23:47.488: [AMF Encoder]  [TL2.QL0.GOPSize] TL2.QL0 GOP Size (Type: Int64, Index 82)
784
-23:23:47.488: [AMF Encoder]   Content Type: 0
785
-23:23:47.488: [AMF Encoder]   Access: 
786
-23:23:47.488: [AMF Encoder]   Values:
787
-23:23:47.488: [AMF Encoder]     Current: Empty
788
-23:23:47.488: [AMF Encoder]     Default: 0
789
-23:23:47.488: [AMF Encoder]     Minimum: 0
790
-23:23:47.488: [AMF Encoder]     Maximum: 2147483647
791
-23:23:47.488: [AMF Encoder]  [TL3.QL0.GOPSize] TL3.QL0 GOP Size (Type: Int64, Index 83)
792
-23:23:47.489: [AMF Encoder]   Content Type: 0
793
-23:23:47.489: [AMF Encoder]   Access: 
794
-23:23:47.489: [AMF Encoder]   Values:
795
-23:23:47.489: [AMF Encoder]     Current: Empty
796
-23:23:47.489: [AMF Encoder]     Default: 0
797
-23:23:47.489: [AMF Encoder]     Minimum: 0
798
-23:23:47.489: [AMF Encoder]     Maximum: 2147483647
799
-23:23:47.489: [AMF Encoder]  [TL0.QL0.InitialVBVBufferFullness] TL0.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 84)
800
-23:23:47.489: [AMF Encoder]   Content Type: 0
801
-23:23:47.489: [AMF Encoder]   Access: 
802
-23:23:47.489: [AMF Encoder]   Values:
803
-23:23:47.489: [AMF Encoder]     Current: Empty
804
-23:23:47.489: [AMF Encoder]     Default: 64
805
-23:23:47.490: [AMF Encoder]     Minimum: 0
806
-23:23:47.490: [AMF Encoder]     Maximum: 64
807
-23:23:47.490: [AMF Encoder]  [TL1.QL0.InitialVBVBufferFullness] TL1.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 85)
808
-23:23:47.490: [AMF Encoder]   Content Type: 0
809
-23:23:47.490: [AMF Encoder]   Access: 
810
-23:23:47.490: [AMF Encoder]   Values:
811
-23:23:47.490: [AMF Encoder]     Current: Empty
812
-23:23:47.490: [AMF Encoder]     Default: 64
813
-23:23:47.490: [AMF Encoder]     Minimum: 0
814
-23:23:47.490: [AMF Encoder]     Maximum: 64
815
-23:23:47.490: [AMF Encoder]  [TL2.QL0.InitialVBVBufferFullness] TL2.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 86)
816
-23:23:47.490: [AMF Encoder]   Content Type: 0
817
-23:23:47.491: [AMF Encoder]   Access: 
818
-23:23:47.491: [AMF Encoder]   Values:
819
-23:23:47.491: [AMF Encoder]     Current: Empty
820
-23:23:47.491: [AMF Encoder]     Default: 64
821
-23:23:47.491: [AMF Encoder]     Minimum: 0
822
-23:23:47.491: [AMF Encoder]     Maximum: 64
823
-23:23:47.491: [AMF Encoder]  [TL3.QL0.InitialVBVBufferFullness] TL3.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 87)
824
-23:23:47.491: [AMF Encoder]   Content Type: 0
825
-23:23:47.491: [AMF Encoder]   Access: 
826
-23:23:47.491: [AMF Encoder]   Values:
827
-23:23:47.491: [AMF Encoder]     Current: Empty
828
-23:23:47.491: [AMF Encoder]     Default: 64
829
-23:23:47.492: [AMF Encoder]     Minimum: 0
830
-23:23:47.492: [AMF Encoder]     Maximum: 64
831
-23:23:47.492: [AMF Encoder]  [TL0.QL0.MaxAUSize] TL0.QL0 Max AU Size (Type: Int64, Index 88)
832
-23:23:47.492: [AMF Encoder]   Content Type: 0
833
-23:23:47.492: [AMF Encoder]   Access: 
834
-23:23:47.492: [AMF Encoder]   Values:
835
-23:23:47.492: [AMF Encoder]     Current: Empty
836
-23:23:47.492: [AMF Encoder]     Default: 0
837
-23:23:47.492: [AMF Encoder]     Minimum: 0
838
-23:23:47.492: [AMF Encoder]     Maximum: 100000000
839
-23:23:47.492: [AMF Encoder]  [TL1.QL0.MaxAUSize] TL1.QL0 Max AU Size (Type: Int64, Index 89)
840
-23:23:47.492: [AMF Encoder]   Content Type: 0
841
-23:23:47.493: [AMF Encoder]   Access: 
842
-23:23:47.493: [AMF Encoder]   Values:
843
-23:23:47.493: [AMF Encoder]     Current: Empty
844
-23:23:47.493: [AMF Encoder]     Default: 0
845
-23:23:47.493: [AMF Encoder]     Minimum: 0
846
-23:23:47.493: [AMF Encoder]     Maximum: 100000000
847
-23:23:47.493: [AMF Encoder]  [TL2.QL0.MaxAUSize] TL2.QL0 Max AU Size (Type: Int64, Index 90)
848
-23:23:47.493: [AMF Encoder]   Content Type: 0
849
-23:23:47.494: [AMF Encoder]   Access: 
850
-23:23:47.494: [AMF Encoder]   Values:
851
-23:23:47.494: [AMF Encoder]     Current: Empty
852
-23:23:47.494: [AMF Encoder]     Default: 0
853
-23:23:47.494: [AMF Encoder]     Minimum: 0
854
-23:23:47.494: [AMF Encoder]     Maximum: 100000000
855
-23:23:47.494: [AMF Encoder]  [TL3.QL0.MaxAUSize] TL3.QL0 Max AU Size (Type: Int64, Index 91)
856
-23:23:47.494: [AMF Encoder]   Content Type: 0
857
-23:23:47.494: [AMF Encoder]   Access: 
858
-23:23:47.494: [AMF Encoder]   Values:
859
-23:23:47.494: [AMF Encoder]     Current: Empty
860
-23:23:47.495: [AMF Encoder]     Default: 0
861
-23:23:47.495: [AMF Encoder]     Minimum: 0
862
-23:23:47.495: [AMF Encoder]     Maximum: 100000000
863
-23:23:47.495: [AMF Encoder]  [TL0.QL0.MaxQP] TL0.QL0 Max QP (Type: Int64, Index 92)
864
-23:23:47.495: [AMF Encoder]   Content Type: 0
865
-23:23:47.495: [AMF Encoder]   Access: 
866
-23:23:47.495: [AMF Encoder]   Values:
867
-23:23:47.495: [AMF Encoder]     Current: Empty
868
-23:23:47.495: [AMF Encoder]     Default: 51
869
-23:23:47.495: [AMF Encoder]     Minimum: 0
870
-23:23:47.495: [AMF Encoder]     Maximum: 51
871
-23:23:47.496: [AMF Encoder]  [TL1.QL0.MaxQP] TL1.QL0 Max QP (Type: Int64, Index 93)
872
-23:23:47.496: [AMF Encoder]   Content Type: 0
873
-23:23:47.496: [AMF Encoder]   Access: 
874
-23:23:47.496: [AMF Encoder]   Values:
875
-23:23:47.496: [AMF Encoder]     Current: Empty
876
-23:23:47.496: [AMF Encoder]     Default: 51
877
-23:23:47.496: [AMF Encoder]     Minimum: 0
878
-23:23:47.496: [AMF Encoder]     Maximum: 51
879
-23:23:47.496: [AMF Encoder]  [TL2.QL0.MaxQP] TL2.QL0 Max QP (Type: Int64, Index 94)
880
-23:23:47.496: [AMF Encoder]   Content Type: 0
881
-23:23:47.496: [AMF Encoder]   Access: 
882
-23:23:47.496: [AMF Encoder]   Values:
883
-23:23:47.496: [AMF Encoder]     Current: Empty
884
-23:23:47.497: [AMF Encoder]     Default: 51
885
-23:23:47.497: [AMF Encoder]     Minimum: 0
886
-23:23:47.497: [AMF Encoder]     Maximum: 51
887
-23:23:47.497: [AMF Encoder]  [TL3.QL0.MaxQP] TL3.QL0 Max QP (Type: Int64, Index 95)
888
-23:23:47.497: [AMF Encoder]   Content Type: 0
889
-23:23:47.497: [AMF Encoder]   Access: 
890
-23:23:47.497: [AMF Encoder]   Values:
891
-23:23:47.497: [AMF Encoder]     Current: Empty
892
-23:23:47.497: [AMF Encoder]     Default: 51
893
-23:23:47.497: [AMF Encoder]     Minimum: 0
894
-23:23:47.497: [AMF Encoder]     Maximum: 51
895
-23:23:47.497: [AMF Encoder]  [TL0.QL0.MinQP] TL0.QL0 Min QP (Type: Int64, Index 96)
896
-23:23:47.497: [AMF Encoder]   Content Type: 0
897
-23:23:47.498: [AMF Encoder]   Access: 
898
-23:23:47.498: [AMF Encoder]   Values:
899
-23:23:47.498: [AMF Encoder]     Current: Empty
900
-23:23:47.498: [AMF Encoder]     Default: 22
901
-23:23:47.498: [AMF Encoder]     Minimum: 0
902
-23:23:47.498: [AMF Encoder]     Maximum: 51
903
-23:23:47.498: [AMF Encoder]  [TL1.QL0.MinQP] TL1.QL0 Min QP (Type: Int64, Index 97)
904
-23:23:47.498: [AMF Encoder]   Content Type: 0
905
-23:23:47.498: [AMF Encoder]   Access: 
906
-23:23:47.498: [AMF Encoder]   Values:
907
-23:23:47.498: [AMF Encoder]     Current: Empty
908
-23:23:47.498: [AMF Encoder]     Default: 22
909
-23:23:47.499: [AMF Encoder]     Minimum: 0
910
-23:23:47.499: [AMF Encoder]     Maximum: 51
911
-23:23:47.499: [AMF Encoder]  [TL2.QL0.MinQP] TL2.QL0 Min QP (Type: Int64, Index 98)
912
-23:23:47.499: [AMF Encoder]   Content Type: 0
913
-23:23:47.499: [AMF Encoder]   Access: 
914
-23:23:47.499: [AMF Encoder]   Values:
915
-23:23:47.499: [AMF Encoder]     Current: Empty
916
-23:23:47.499: [AMF Encoder]     Default: 22
917
-23:23:47.499: [AMF Encoder]     Minimum: 0
918
-23:23:47.499: [AMF Encoder]     Maximum: 51
919
-23:23:47.499: [AMF Encoder]  [TL3.QL0.MinQP] TL3.QL0 Min QP (Type: Int64, Index 99)
920
-23:23:47.500: [AMF Encoder]   Content Type: 0
921
-23:23:47.500: [AMF Encoder]   Access: 
922
-23:23:47.500: [AMF Encoder]   Values:
923
-23:23:47.500: [AMF Encoder]     Current: Empty
924
-23:23:47.500: [AMF Encoder]     Default: 22
925
-23:23:47.500: [AMF Encoder]     Minimum: 0
926
-23:23:47.500: [AMF Encoder]     Maximum: 51
927
-23:23:47.500: [AMF Encoder]  [TL0.QL0.PeakBitrate] TL0.QL0 Peak Bitrate (Type: Int64, Index 100)
928
-23:23:47.500: [AMF Encoder]   Content Type: 0
929
-23:23:47.500: [AMF Encoder]   Access: 
930
-23:23:47.501: [AMF Encoder]   Values:
931
-23:23:47.501: [AMF Encoder]     Current: Empty
932
-23:23:47.501: [AMF Encoder]     Default: 10000000
933
-23:23:47.501: [AMF Encoder]     Minimum: 10000
934
-23:23:47.501: [AMF Encoder]     Maximum: 100000000
935
-23:23:47.501: [AMF Encoder]  [TL1.QL0.PeakBitrate] TL1.QL0 Peak Bitrate (Type: Int64, Index 101)
936
-23:23:47.501: [AMF Encoder]   Content Type: 0
937
-23:23:47.501: [AMF Encoder]   Access: 
938
-23:23:47.501: [AMF Encoder]   Values:
939
-23:23:47.501: [AMF Encoder]     Current: Empty
940
-23:23:47.502: [AMF Encoder]     Default: 10000000
941
-23:23:47.502: [AMF Encoder]     Minimum: 10000
942
-23:23:47.502: [AMF Encoder]     Maximum: 100000000
943
-23:23:47.502: [AMF Encoder]  [TL2.QL0.PeakBitrate] TL2.QL0 Peak Bitrate (Type: Int64, Index 102)
944
-23:23:47.502: [AMF Encoder]   Content Type: 0
945
-23:23:47.502: [AMF Encoder]   Access: 
946
-23:23:47.502: [AMF Encoder]   Values:
947
-23:23:47.502: [AMF Encoder]     Current: Empty
948
-23:23:47.502: [AMF Encoder]     Default: 10000000
949
-23:23:47.502: [AMF Encoder]     Minimum: 10000
950
-23:23:47.502: [AMF Encoder]     Maximum: 100000000
951
-23:23:47.502: [AMF Encoder]  [TL3.QL0.PeakBitrate] TL3.QL0 Peak Bitrate (Type: Int64, Index 103)
952
-23:23:47.502: [AMF Encoder]   Content Type: 0
953
-23:23:47.503: [AMF Encoder]   Access: 
954
-23:23:47.503: [AMF Encoder]   Values:
955
-23:23:47.503: [AMF Encoder]     Current: Empty
956
-23:23:47.503: [AMF Encoder]     Default: 10000000
957
-23:23:47.503: [AMF Encoder]     Minimum: 10000
958
-23:23:47.503: [AMF Encoder]     Maximum: 100000000
959
-23:23:47.503: [AMF Encoder]  [TL0.QL0.QPB] TL0.QL0 QP B (Type: Int64, Index 104)
960
-23:23:47.503: [AMF Encoder]   Content Type: 0
961
-23:23:47.503: [AMF Encoder]   Access: 
962
-23:23:47.503: [AMF Encoder]   Values:
963
-23:23:47.503: [AMF Encoder]     Current: Empty
964
-23:23:47.503: [AMF Encoder]     Default: 22
965
-23:23:47.504: [AMF Encoder]     Minimum: 0
966
-23:23:47.504: [AMF Encoder]     Maximum: 51
967
-23:23:47.504: [AMF Encoder]  [TL1.QL0.QPB] TL1.QL0 QP B (Type: Int64, Index 105)
968
-23:23:47.504: [AMF Encoder]   Content Type: 0
969
-23:23:47.504: [AMF Encoder]   Access: 
970
-23:23:47.504: [AMF Encoder]   Values:
971
-23:23:47.504: [AMF Encoder]     Current: Empty
972
-23:23:47.504: [AMF Encoder]     Default: 22
973
-23:23:47.504: [AMF Encoder]     Minimum: 0
974
-23:23:47.504: [AMF Encoder]     Maximum: 51
975
-23:23:47.504: [AMF Encoder]  [TL2.QL0.QPB] TL2.QL0 QP B (Type: Int64, Index 106)
976
-23:23:47.504: [AMF Encoder]   Content Type: 0
977
-23:23:47.504: [AMF Encoder]   Access: 
978
-23:23:47.504: [AMF Encoder]   Values:
979
-23:23:47.505: [AMF Encoder]     Current: Empty
980
-23:23:47.505: [AMF Encoder]     Default: 22
981
-23:23:47.505: [AMF Encoder]     Minimum: 0
982
-23:23:47.505: [AMF Encoder]     Maximum: 51
983
-23:23:47.505: [AMF Encoder]  [TL3.QL0.QPB] TL3.QL0 QP B (Type: Int64, Index 107)
984
-23:23:47.505: [AMF Encoder]   Content Type: 0
985
-23:23:47.505: [AMF Encoder]   Access: 
986
-23:23:47.505: [AMF Encoder]   Values:
987
-23:23:47.505: [AMF Encoder]     Current: Empty
988
-23:23:47.505: [AMF Encoder]     Default: 22
989
-23:23:47.505: [AMF Encoder]     Minimum: 0
990
-23:23:47.505: [AMF Encoder]     Maximum: 51
991
-23:23:47.505: [AMF Encoder]  [TL0.QL0.QPI] TL0.QL0 QP I (Type: Int64, Index 108)
992
-23:23:47.506: [AMF Encoder]   Content Type: 0
993
-23:23:47.506: [AMF Encoder]   Access: 
994
-23:23:47.506: [AMF Encoder]   Values:
995
-23:23:47.506: [AMF Encoder]     Current: Empty
996
-23:23:47.506: [AMF Encoder]     Default: 22
997
-23:23:47.506: [AMF Encoder]     Minimum: 0
998
-23:23:47.506: [AMF Encoder]     Maximum: 51
999
-23:23:47.506: [AMF Encoder]  [TL1.QL0.QPI] TL1.QL0 QP I (Type: Int64, Index 109)
1000
-23:23:47.506: [AMF Encoder]   Content Type: 0
1001
-23:23:47.506: [AMF Encoder]   Access: 
1002
-23:23:47.506: [AMF Encoder]   Values:
1003
-23:23:47.506: [AMF Encoder]     Current: Empty
1004
-23:23:47.506: [AMF Encoder]     Default: 22
1005
-23:23:47.507: [AMF Encoder]     Minimum: 0
1006
-23:23:47.507: [AMF Encoder]     Maximum: 51
1007
-23:23:47.507: [AMF Encoder]  [TL2.QL0.QPI] TL2.QL0 QP I (Type: Int64, Index 110)
1008
-23:23:47.507: [AMF Encoder]   Content Type: 0
1009
-23:23:47.507: [AMF Encoder]   Access: 
1010
-23:23:47.507: [AMF Encoder]   Values:
1011
-23:23:47.507: [AMF Encoder]     Current: Empty
1012
-23:23:47.507: [AMF Encoder]     Default: 22
1013
-23:23:47.507: [AMF Encoder]     Minimum: 0
1014
-23:23:47.507: [AMF Encoder]     Maximum: 51
1015
-23:23:47.507: [AMF Encoder]  [TL3.QL0.QPI] TL3.QL0 QP I (Type: Int64, Index 111)
1016
-23:23:47.507: [AMF Encoder]   Content Type: 0
1017
-23:23:47.507: [AMF Encoder]   Access: 
1018
-23:23:47.507: [AMF Encoder]   Values:
1019
-23:23:47.508: [AMF Encoder]     Current: Empty
1020
-23:23:47.508: [AMF Encoder]     Default: 22
1021
-23:23:47.508: [AMF Encoder]     Minimum: 0
1022
-23:23:47.508: [AMF Encoder]     Maximum: 51
1023
-23:23:47.508: [AMF Encoder]  [TL0.QL0.QPP] TL0.QL0 QP P (Type: Int64, Index 112)
1024
-23:23:47.508: [AMF Encoder]   Content Type: 0
1025
-23:23:47.508: [AMF Encoder]   Access: 
1026
-23:23:47.508: [AMF Encoder]   Values:
1027
-23:23:47.508: [AMF Encoder]     Current: Empty
1028
-23:23:47.508: [AMF Encoder]     Default: 22
1029
-23:23:47.508: [AMF Encoder]     Minimum: 0
1030
-23:23:47.508: [AMF Encoder]     Maximum: 51
1031
-23:23:47.508: [AMF Encoder]  [TL1.QL0.QPP] TL1.QL0 QP P (Type: Int64, Index 113)
1032
-23:23:47.509: [AMF Encoder]   Content Type: 0
1033
-23:23:47.509: [AMF Encoder]   Access: 
1034
-23:23:47.509: [AMF Encoder]   Values:
1035
-23:23:47.509: [AMF Encoder]     Current: Empty
1036
-23:23:47.509: [AMF Encoder]     Default: 22
1037
-23:23:47.509: [AMF Encoder]     Minimum: 0
1038
-23:23:47.509: [AMF Encoder]     Maximum: 51
1039
-23:23:47.509: [AMF Encoder]  [TL2.QL0.QPP] TL2.QL0 QP P (Type: Int64, Index 114)
1040
-23:23:47.509: [AMF Encoder]   Content Type: 0
1041
-23:23:47.509: [AMF Encoder]   Access: 
1042
-23:23:47.509: [AMF Encoder]   Values:
1043
-23:23:47.509: [AMF Encoder]     Current: Empty
1044
-23:23:47.509: [AMF Encoder]     Default: 22
1045
-23:23:47.509: [AMF Encoder]     Minimum: 0
1046
-23:23:47.509: [AMF Encoder]     Maximum: 51
1047
-23:23:47.510: [AMF Encoder]  [TL3.QL0.QPP] TL3.QL0 QP P (Type: Int64, Index 115)
1048
-23:23:47.510: [AMF Encoder]   Content Type: 0
1049
-23:23:47.510: [AMF Encoder]   Access: 
1050
-23:23:47.510: [AMF Encoder]   Values:
1051
-23:23:47.510: [AMF Encoder]     Current: Empty
1052
-23:23:47.510: [AMF Encoder]     Default: 22
1053
-23:23:47.510: [AMF Encoder]     Minimum: 0
1054
-23:23:47.510: [AMF Encoder]     Maximum: 51
1055
-23:23:47.510: [AMF Encoder]  [TL0.QL0.RateControlMethod] TL0.QL0 Rate Control Method (Type: Int64, Index 116)
1056
-23:23:47.510: [AMF Encoder]   Content Type: 0
1057
-23:23:47.510: [AMF Encoder]   Access: 
1058
-23:23:47.510: [AMF Encoder]   Values:
1059
-23:23:47.510: [AMF Encoder]     Current: Empty
1060
-23:23:47.510: [AMF Encoder]     Default: 2
1061
-23:23:47.511: [AMF Encoder]     Minimum: Empty
1062
-23:23:47.511: [AMF Encoder]     Maximum: Empty
1063
-23:23:47.511: [AMF Encoder]   Enumeration: 
1064
-23:23:47.511: [AMF Encoder]     Constant QP (0)
1065
-23:23:47.511: [AMF Encoder]     CBR (1)
1066
-23:23:47.511: [AMF Encoder]     Peak constrained VBR (2)
1067
-23:23:47.511: [AMF Encoder]     Latency constrained VBR (3)
1068
-23:23:47.511: [AMF Encoder]  [TL1.QL0.RateControlMethod] TL1.QL0 Rate Control Method (Type: Int64, Index 117)
1069
-23:23:47.511: [AMF Encoder]   Content Type: 0
1070
-23:23:47.511: [AMF Encoder]   Access: 
1071
-23:23:47.511: [AMF Encoder]   Values:
1072
-23:23:47.511: [AMF Encoder]     Current: Empty
1073
-23:23:47.511: [AMF Encoder]     Default: 2
1074
-23:23:47.511: [AMF Encoder]     Minimum: Empty
1075
-23:23:47.512: [AMF Encoder]     Maximum: Empty
1076
-23:23:47.512: [AMF Encoder]   Enumeration: 
1077
-23:23:47.512: [AMF Encoder]     Constant QP (0)
1078
-23:23:47.512: [AMF Encoder]     CBR (1)
1079
-23:23:47.512: [AMF Encoder]     Peak constrained VBR (2)
1080
-23:23:47.512: [AMF Encoder]     Latency constrained VBR (3)
1081
-23:23:47.512: [AMF Encoder]  [TL2.QL0.RateControlMethod] TL2.QL0 Rate Control Method (Type: Int64, Index 118)
1082
-23:23:47.512: [AMF Encoder]   Content Type: 0
1083
-23:23:47.512: [AMF Encoder]   Access: 
1084
-23:23:47.512: [AMF Encoder]   Values:
1085
-23:23:47.512: [AMF Encoder]     Current: Empty
1086
-23:23:47.512: [AMF Encoder]     Default: 2
1087
-23:23:47.512: [AMF Encoder]     Minimum: Empty
1088
-23:23:47.513: [AMF Encoder]     Maximum: Empty
1089
-23:23:47.513: [AMF Encoder]   Enumeration: 
1090
-23:23:47.513: [AMF Encoder]     Constant QP (0)
1091
-23:23:47.513: [AMF Encoder]     CBR (1)
1092
-23:23:47.513: [AMF Encoder]     Peak constrained VBR (2)
1093
-23:23:47.513: [AMF Encoder]     Latency constrained VBR (3)
1094
-23:23:47.513: [AMF Encoder]  [TL3.QL0.RateControlMethod] TL3.QL0 Rate Control Method (Type: Int64, Index 119)
1095
-23:23:47.513: [AMF Encoder]   Content Type: 0
1096
-23:23:47.513: [AMF Encoder]   Access: 
1097
-23:23:47.513: [AMF Encoder]   Values:
1098
-23:23:47.513: [AMF Encoder]     Current: Empty
1099
-23:23:47.513: [AMF Encoder]     Default: 2
1100
-23:23:47.513: [AMF Encoder]     Minimum: Empty
1101
-23:23:47.513: [AMF Encoder]     Maximum: Empty
1102
-23:23:47.514: [AMF Encoder]   Enumeration: 
1103
-23:23:47.514: [AMF Encoder]     Constant QP (0)
1104
-23:23:47.514: [AMF Encoder]     CBR (1)
1105
-23:23:47.514: [AMF Encoder]     Peak constrained VBR (2)
1106
-23:23:47.514: [AMF Encoder]     Latency constrained VBR (3)
1107
-23:23:47.514: [AMF Encoder]  [TL0.QL0.RateControlPreanalysisEnable] TL0.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 120)
1108
-23:23:47.514: [AMF Encoder]   Content Type: 0
1109
-23:23:47.514: [AMF Encoder]   Access: 
1110
-23:23:47.514: [AMF Encoder]   Values:
1111
-23:23:47.514: [AMF Encoder]     Current: Empty
1112
-23:23:47.514: [AMF Encoder]     Default: false
1113
-23:23:47.514: [AMF Encoder]     Minimum: Empty
1114
-23:23:47.514: [AMF Encoder]     Maximum: Empty
1115
-23:23:47.514: [AMF Encoder]  [TL1.QL0.RateControlPreanalysisEnable] TL1.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 121)
1116
-23:23:47.515: [AMF Encoder]   Content Type: 0
1117
-23:23:47.515: [AMF Encoder]   Access: 
1118
-23:23:47.515: [AMF Encoder]   Values:
1119
-23:23:47.515: [AMF Encoder]     Current: Empty
1120
-23:23:47.515: [AMF Encoder]     Default: false
1121
-23:23:47.515: [AMF Encoder]     Minimum: Empty
1122
-23:23:47.515: [AMF Encoder]     Maximum: Empty
1123
-23:23:47.515: [AMF Encoder]  [TL2.QL0.RateControlPreanalysisEnable] TL2.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 122)
1124
-23:23:47.515: [AMF Encoder]   Content Type: 0
1125
-23:23:47.515: [AMF Encoder]   Access: 
1126
-23:23:47.516: [AMF Encoder]   Values:
1127
-23:23:47.516: [AMF Encoder]     Current: Empty
1128
-23:23:47.516: [AMF Encoder]     Default: false
1129
-23:23:47.516: [AMF Encoder]     Minimum: Empty
1130
-23:23:47.516: [AMF Encoder]     Maximum: Empty
1131
-23:23:47.516: [AMF Encoder]  [TL3.QL0.RateControlPreanalysisEnable] TL3.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 123)
1132
-23:23:47.516: [AMF Encoder]   Content Type: 0
1133
-23:23:47.516: [AMF Encoder]   Access: 
1134
-23:23:47.516: [AMF Encoder]   Values:
1135
-23:23:47.517: [AMF Encoder]     Current: Empty
1136
-23:23:47.517: [AMF Encoder]     Default: false
1137
-23:23:47.517: [AMF Encoder]     Minimum: Empty
1138
-23:23:47.517: [AMF Encoder]     Maximum: Empty
1139
-23:23:47.517: [AMF Encoder]  [TL0.QL0.RateControlSkipFrameEnable] TL0.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 124)
1140
-23:23:47.517: [AMF Encoder]   Content Type: 0
1141
-23:23:47.517: [AMF Encoder]   Access: 
1142
-23:23:47.517: [AMF Encoder]   Values:
1143
-23:23:47.517: [AMF Encoder]     Current: Empty
1144
-23:23:47.517: [AMF Encoder]     Default: true
1145
-23:23:47.517: [AMF Encoder]     Minimum: Empty
1146
-23:23:47.517: [AMF Encoder]     Maximum: Empty
1147
-23:23:47.517: [AMF Encoder]  [TL1.QL0.RateControlSkipFrameEnable] TL1.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 125)
1148
-23:23:47.518: [AMF Encoder]   Content Type: 0
1149
-23:23:47.518: [AMF Encoder]   Access: 
1150
-23:23:47.518: [AMF Encoder]   Values:
1151
-23:23:47.518: [AMF Encoder]     Current: Empty
1152
-23:23:47.518: [AMF Encoder]     Default: true
1153
-23:23:47.518: [AMF Encoder]     Minimum: Empty
1154
-23:23:47.518: [AMF Encoder]     Maximum: Empty
1155
-23:23:47.518: [AMF Encoder]  [TL2.QL0.RateControlSkipFrameEnable] TL2.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 126)
1156
-23:23:47.518: [AMF Encoder]   Content Type: 0
1157
-23:23:47.518: [AMF Encoder]   Access: 
1158
-23:23:47.518: [AMF Encoder]   Values:
1159
-23:23:47.518: [AMF Encoder]     Current: Empty
1160
-23:23:47.518: [AMF Encoder]     Default: true
1161
-23:23:47.518: [AMF Encoder]     Minimum: Empty
1162
-23:23:47.519: [AMF Encoder]     Maximum: Empty
1163
-23:23:47.519: [AMF Encoder]  [TL3.QL0.RateControlSkipFrameEnable] TL3.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 127)
1164
-23:23:47.519: [AMF Encoder]   Content Type: 0
1165
-23:23:47.519: [AMF Encoder]   Access: 
1166
-23:23:47.519: [AMF Encoder]   Values:
1167
-23:23:47.519: [AMF Encoder]     Current: Empty
1168
-23:23:47.519: [AMF Encoder]     Default: true
1169
-23:23:47.519: [AMF Encoder]     Minimum: Empty
1170
-23:23:47.519: [AMF Encoder]     Maximum: Empty
1171
-23:23:47.519: [AMF Encoder]  [TL0.QL0.ReferenceBPicturesDeltaQP] TL0.QL0 Reference B-picture Delta (Type: Int64, Index 128)
1172
-23:23:47.519: [AMF Encoder]   Content Type: 0
1173
-23:23:47.519: [AMF Encoder]   Access: 
1174
-23:23:47.520: [AMF Encoder]   Values:
1175
-23:23:47.520: [AMF Encoder]     Current: Empty
1176
-23:23:47.520: [AMF Encoder]     Default: 2
1177
-23:23:47.520: [AMF Encoder]     Minimum: -10
1178
-23:23:47.520: [AMF Encoder]     Maximum: 10
1179
-23:23:47.520: [AMF Encoder]  [TL1.QL0.ReferenceBPicturesDeltaQP] TL1.QL0 Reference B-picture Delta (Type: Int64, Index 129)
1180
-23:23:47.520: [AMF Encoder]   Content Type: 0
1181
-23:23:47.520: [AMF Encoder]   Access: 
1182
-23:23:47.520: [AMF Encoder]   Values:
1183
-23:23:47.520: [AMF Encoder]     Current: Empty
1184
-23:23:47.520: [AMF Encoder]     Default: 2
1185
-23:23:47.520: [AMF Encoder]     Minimum: -10
1186
-23:23:47.521: [AMF Encoder]     Maximum: 10
1187
-23:23:47.521: [AMF Encoder]  [TL2.QL0.ReferenceBPicturesDeltaQP] TL2.QL0 Reference B-picture Delta (Type: Int64, Index 130)
1188
-23:23:47.521: [AMF Encoder]   Content Type: 0
1189
-23:23:47.521: [AMF Encoder]   Access: 
1190
-23:23:47.521: [AMF Encoder]   Values:
1191
-23:23:47.521: [AMF Encoder]     Current: Empty
1192
-23:23:47.521: [AMF Encoder]     Default: 2
1193
-23:23:47.521: [AMF Encoder]     Minimum: -10
1194
-23:23:47.521: [AMF Encoder]     Maximum: 10
1195
-23:23:47.521: [AMF Encoder]  [TL3.QL0.ReferenceBPicturesDeltaQP] TL3.QL0 Reference B-picture Delta (Type: Int64, Index 131)
1196
-23:23:47.521: [AMF Encoder]   Content Type: 0
1197
-23:23:47.521: [AMF Encoder]   Access: 
1198
-23:23:47.522: [AMF Encoder]   Values:
1199
-23:23:47.522: [AMF Encoder]     Current: Empty
1200
-23:23:47.522: [AMF Encoder]     Default: 2
1201
-23:23:47.522: [AMF Encoder]     Minimum: -10
1202
-23:23:47.522: [AMF Encoder]     Maximum: 10
1203
-23:23:47.522: [AMF Encoder]  [TL0.QL0.TargetBitrate] TL0.QL0 Bitrate (Type: Int64, Index 132)
1204
-23:23:47.522: [AMF Encoder]   Content Type: 0
1205
-23:23:47.522: [AMF Encoder]   Access: 
1206
-23:23:47.522: [AMF Encoder]   Values:
1207
-23:23:47.522: [AMF Encoder]     Current: Empty
1208
-23:23:47.522: [AMF Encoder]     Default: 10000000
1209
-23:23:47.522: [AMF Encoder]     Minimum: 10000
1210
-23:23:47.523: [AMF Encoder]     Maximum: 100000000
1211
-23:23:47.523: [AMF Encoder]  [TL1.QL0.TargetBitrate] TL1.QL0 Bitrate (Type: Int64, Index 133)
1212
-23:23:47.523: [AMF Encoder]   Content Type: 0
1213
-23:23:47.523: [AMF Encoder]   Access: 
1214
-23:23:47.523: [AMF Encoder]   Values:
1215
-23:23:47.523: [AMF Encoder]     Current: Empty
1216
-23:23:47.523: [AMF Encoder]     Default: 10000000
1217
-23:23:47.523: [AMF Encoder]     Minimum: 10000
1218
-23:23:47.523: [AMF Encoder]     Maximum: 100000000
1219
-23:23:47.523: [AMF Encoder]  [TL2.QL0.TargetBitrate] TL2.QL0 Bitrate (Type: Int64, Index 134)
1220
-23:23:47.523: [AMF Encoder]   Content Type: 0
1221
-23:23:47.523: [AMF Encoder]   Access: 
1222
-23:23:47.523: [AMF Encoder]   Values:
1223
-23:23:47.524: [AMF Encoder]     Current: Empty
1224
-23:23:47.524: [AMF Encoder]     Default: 10000000
1225
-23:23:47.524: [AMF Encoder]     Minimum: 10000
1226
-23:23:47.524: [AMF Encoder]     Maximum: 100000000
1227
-23:23:47.524: [AMF Encoder]  [TL3.QL0.TargetBitrate] TL3.QL0 Bitrate (Type: Int64, Index 135)
1228
-23:23:47.524: [AMF Encoder]   Content Type: 0
1229
-23:23:47.524: [AMF Encoder]   Access: 
1230
-23:23:47.524: [AMF Encoder]   Values:
1231
-23:23:47.524: [AMF Encoder]     Current: Empty
1232
-23:23:47.524: [AMF Encoder]     Default: 10000000
1233
-23:23:47.524: [AMF Encoder]     Minimum: 10000
1234
-23:23:47.525: [AMF Encoder]     Maximum: 100000000
1235
-23:23:47.525: [AMF Encoder]  [TL0.QL0.VBVBufferSize] TL0.QL0 VBV Buffer Size (Type: Int64, Index 136)
1236
-23:23:47.525: [AMF Encoder]   Content Type: 0
1237
-23:23:47.525: [AMF Encoder]   Access: 
1238
-23:23:47.525: [AMF Encoder]   Values:
1239
-23:23:47.525: [AMF Encoder]     Current: Empty
1240
-23:23:47.525: [AMF Encoder]     Default: 1000000
1241
-23:23:47.525: [AMF Encoder]     Minimum: 1000
1242
-23:23:47.525: [AMF Encoder]     Maximum: 100000000
1243
-23:23:47.525: [AMF Encoder]  [TL1.QL0.VBVBufferSize] TL1.QL0 VBV Buffer Size (Type: Int64, Index 137)
1244
-23:23:47.525: [AMF Encoder]   Content Type: 0
1245
-23:23:47.525: [AMF Encoder]   Access: 
1246
-23:23:47.526: [AMF Encoder]   Values:
1247
-23:23:47.526: [AMF Encoder]     Current: Empty
1248
-23:23:47.526: [AMF Encoder]     Default: 1000000
1249
-23:23:47.526: [AMF Encoder]     Minimum: 1000
1250
-23:23:47.526: [AMF Encoder]     Maximum: 100000000
1251
-23:23:47.526: [AMF Encoder]  [TL2.QL0.VBVBufferSize] TL2.QL0 VBV Buffer Size (Type: Int64, Index 138)
1252
-23:23:47.526: [AMF Encoder]   Content Type: 0
1253
-23:23:47.528: [AMF Encoder]   Access: 
1254
-23:23:47.529: [AMF Encoder]   Values:
1255
-23:23:47.529: [AMF Encoder]     Current: Empty
1256
-23:23:47.529: [AMF Encoder]     Default: 1000000
1257
-23:23:47.530: [AMF Encoder]     Minimum: 1000
1258
-23:23:47.530: [AMF Encoder]     Maximum: 100000000
1259
-23:23:47.530: [AMF Encoder]  [TL3.QL0.VBVBufferSize] TL3.QL0 VBV Buffer Size (Type: Int64, Index 139)
1260
-23:23:47.530: [AMF Encoder]   Content Type: 0
1261
-23:23:47.530: [AMF Encoder]   Access: 
1262
-23:23:47.530: [AMF Encoder]   Values:
1263
-23:23:47.530: [AMF Encoder]     Current: Empty
1264
-23:23:47.530: [AMF Encoder]     Default: 1000000
1265
-23:23:47.530: [AMF Encoder]     Minimum: 1000
1266
-23:23:47.531: [AMF Encoder]     Maximum: 100000000
1267
-23:23:47.531: [AMF Encoder]  [NumOfTemporalEnhancmentLayers] Num Of Temporal Enhancment Layers (Type: Int64, Index 140)
1268
-23:23:47.531: [AMF Encoder]   Content Type: 0
1269
-23:23:47.531: [AMF Encoder]   Access: 
1270
-23:23:47.531: [AMF Encoder]   Values:
1271
-23:23:47.531: [AMF Encoder]     Current: Empty
1272
-23:23:47.531: [AMF Encoder]     Default: 0
1273
-23:23:47.531: [AMF Encoder]     Minimum: 0
1274
-23:23:47.531: [AMF Encoder]     Maximum: 3
1275
-23:23:47.531: [AMF Encoder]  [NumOfQualityLayers] Num Of Quality Layers (Type: Int64, Index 141)
1276
-23:23:47.531: [AMF Encoder]   Content Type: 0
1277
-23:23:47.532: [AMF Encoder]   Access: 
1278
-23:23:47.533: [AMF Encoder]   Values:
1279
-23:23:47.533: [AMF Encoder]     Current: Empty
1280
-23:23:47.533: [AMF Encoder]     Default: 0
1281
-23:23:47.534: [AMF Encoder]     Minimum: 0
1282
-23:23:47.534: [AMF Encoder]     Maximum: 0
1283
-23:23:47.534: [AMF Encoder]  [MGSVectorMode] MGS Vector Mode (Type: Boolean, Index 142)
1284
-23:23:47.534: [AMF Encoder]   Content Type: 0
1285
-23:23:47.534: [AMF Encoder]   Access: 
1286
-23:23:47.534: [AMF Encoder]   Values:
1287
-23:23:47.534: [AMF Encoder]     Current: Empty
1288
-23:23:47.534: [AMF Encoder]     Default: false
1289
-23:23:47.534: [AMF Encoder]     Minimum: Empty
1290
-23:23:47.534: [AMF Encoder]     Maximum: Empty
1291
-23:23:47.535: [AMF Encoder]  [MGSVector0] MGS Vector 0 (Type: Int64, Index 143)
1292
-23:23:47.535: [AMF Encoder]   Content Type: 0
1293
-23:23:47.535: [AMF Encoder]   Access: 
1294
-23:23:47.535: [AMF Encoder]   Values:
1295
-23:23:47.535: [AMF Encoder]     Current: Empty
1296
-23:23:47.535: [AMF Encoder]     Default: 0
1297
-23:23:47.535: [AMF Encoder]     Minimum: 0
1298
-23:23:47.535: [AMF Encoder]     Maximum: 16
1299
-23:23:47.535: [AMF Encoder]  [MGSVector1] MGS Vector 1 (Type: Int64, Index 144)
1300
-23:23:47.535: [AMF Encoder]   Content Type: 0
1301
-23:23:47.535: [AMF Encoder]   Access: 
1302
-23:23:47.536: [AMF Encoder]   Values:
1303
-23:23:47.536: [AMF Encoder]     Current: Empty
1304
-23:23:47.536: [AMF Encoder]     Default: 0
1305
-23:23:47.536: [AMF Encoder]     Minimum: 0
1306
-23:23:47.536: [AMF Encoder]     Maximum: 16
1307
-23:23:47.536: [AMF Encoder]  [MGSVector2] MGS Vector 2 (Type: Int64, Index 145)
1308
-23:23:47.536: [AMF Encoder]   Content Type: 0
1309
-23:23:47.536: [AMF Encoder]   Access: 
1310
-23:23:47.536: [AMF Encoder]   Values:
1311
-23:23:47.536: [AMF Encoder]     Current: Empty
1312
-23:23:47.537: [AMF Encoder]     Default: 0
1313
-23:23:47.537: [AMF Encoder]     Minimum: 0
1314
-23:23:47.537: [AMF Encoder]     Maximum: 16
1315
-23:23:47.537: [AMF Encoder]  [MGSVector3] MGS Vector 3 (Type: Int64, Index 146)
1316
-23:23:47.537: [AMF Encoder]   Content Type: 0
1317
-23:23:47.537: [AMF Encoder]   Access: 
1318
-23:23:47.537: [AMF Encoder]   Values:
1319
-23:23:47.537: [AMF Encoder]     Current: Empty
1320
-23:23:47.537: [AMF Encoder]     Default: 0
1321
-23:23:47.537: [AMF Encoder]     Minimum: 0
1322
-23:23:47.537: [AMF Encoder]     Maximum: 16
1323
-23:23:47.538: [AMF Encoder]  [MGSKeyPicturePeriod] MGS Key Picture Period (Type: Int64, Index 147)
1324
-23:23:47.538: [AMF Encoder]   Content Type: 0
1325
-23:23:47.538: [AMF Encoder]   Access: 
1326
-23:23:47.538: [AMF Encoder]   Values:
1327
-23:23:47.538: [AMF Encoder]     Current: Empty
1328
-23:23:47.538: [AMF Encoder]     Default: 0
1329
-23:23:47.538: [AMF Encoder]     Minimum: 0
1330
-23:23:47.538: [AMF Encoder]     Maximum: 1000
1331
-
1332
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/detect-amf Deleted
2
 
1
-(directory)
2
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/detect-amf/CMakeLists.txt Deleted
44
 
1
@@ -1,42 +0,0 @@
2
-project(detect-amf)
3
-
4
-set(detect-amf_HEADERS
5
-   )
6
-
7
-set(detect-amf_SOURCES
8
-   ../amf.cpp
9
-   ../amf-capabilities.cpp
10
-   ../amf-encoder.cpp
11
-   ../amf-encoder-h264.cpp
12
-   ../amf-encoder-h265.cpp
13
-   ../api-base.cpp
14
-   ../api-d3d9.cpp
15
-   ../api-d3d11.cpp
16
-   ../utility.cpp
17
-   detect-amf-support.cpp
18
-   )
19
-
20
-if(MSVC)
21
-   add_compile_options("$<$<CONFIG:RelWithDebInfo>:/MT>")
22
-endif()
23
-
24
-add_definitions(-DPIPED_PROCESS)
25
-
26
-add_executable(detect-amf
27
-   ${detect-amf_SOURCES}
28
-   ${detect-amf_HEADERS})
29
-
30
-target_link_libraries(detect-amf
31
-   ${enc-amf_LIBRARIES})
32
-
33
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
34
-   set(_output_suffix "64")
35
-else()
36
-   set(_output_suffix "32")
37
-endif()
38
-
39
-set_target_properties(detect-amf
40
-   PROPERTIES
41
-       OUTPUT_NAME "detect-amf${_output_suffix}")
42
-
43
-install_obs_datatarget(detect-amf "obs-plugins/enc-amf")
44
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/detect-amf/detect-amf-support.cpp Deleted
47
 
1
@@ -1,45 +0,0 @@
2
-/*
3
- * Piped program that detects AMF support to prevent startup crashes
4
- * Copyright (C) 2018 Hugh Bailey
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19
- */
20
-
21
-#include "plugin.h"
22
-#include "api-base.h"
23
-#include "amf.h"
24
-#include "amf-capabilities.h"
25
-#include <sstream>
26
-
27
-int main(void) {
28
-   SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS);
29
-
30
-   try {
31
-       // AMF
32
-       Plugin::AMD::AMF::Initialize();
33
-
34
-       // Initialize Graphics APIs
35
-       Plugin::API::InitializeAPIs();
36
-
37
-       Plugin::AMD::CapabilityManager::Initialize();
38
-   } catch (...) {
39
-       return 2;
40
-   }
41
-
42
-   Plugin::AMD::CapabilityManager::Finalize();
43
-   Plugin::API::FinalizeAPIs();
44
-   Plugin::AMD::AMF::Finalize();
45
-   return 3;
46
-}
47
obs-studio-21.0.3.tar.xz/.gitmodules -> obs-studio-21.1.2.tar.xz/.gitmodules Changed
10
 
1
@@ -6,7 +6,7 @@
2
    url = https://github.com/palana/Syphon-Framework.git
3
 [submodule "plugins/enc-amf"]
4
    path = plugins/enc-amf
5
-   url = https://github.com/jp9000/obs-studio_amf-encoder-plugin.git
6
+   url = https://github.com/Xaymar/obs-studio_amf-encoder-plugin.git
7
 [submodule "plugins/obs-browser"]
8
    path = plugins/obs-browser
9
    url = https://github.com/kc5nra/obs-browser.git
10
obs-studio-21.0.3.tar.xz/CI/before-script-osx.sh -> obs-studio-21.1.2.tar.xz/CI/before-script-osx.sh Changed
12
 
1
@@ -1,6 +1,10 @@
2
 # Make sure ccache is found
3
 export PATH=/usr/local/opt/ccache/libexec:$PATH
4
 
5
+cd ./plugins/obs-browser
6
+git checkout origin/osx
7
+cd -
8
+
9
 mkdir build
10
 cd build
11
 cmake -DENABLE_SPARKLE_UPDATER=ON \
12
obs-studio-21.0.3.tar.xz/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/CMakeLists.txt Changed
10
 
1
@@ -60,7 +60,7 @@
2
    endif()
3
 
4
    # Disable pointless constant condition warnings
5
-   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127 /wd4201")
6
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127 /wd4201 /wd4456 /wd4457 /wd4458 /wd4459 /wd4595")
7
 endif()
8
 
9
 if(WIN32)
10
obs-studio-21.0.3.tar.xz/README.rst -> obs-studio-21.1.2.tar.xz/README.rst Changed
24
 
1
@@ -15,11 +15,11 @@
2
 
3
  - Website: https://obsproject.com
4
 
5
- - Help/Documentation/Guides: https://github.com/jp9000/obs-studio/wiki
6
+ - Help/Documentation/Guides: https://github.com/obsproject/obs-studio/wiki
7
 
8
  - Forums: https://obsproject.com/forum/
9
 
10
- - Build Instructions: https://github.com/jp9000/obs-studio/wiki/Install-Instructions
11
+ - Build Instructions: https://github.com/obsproject/obs-studio/wiki/Install-Instructions
12
 
13
  - Developer/API Documentation: https://obsproject.com/docs
14
 
15
@@ -33,7 +33,7 @@
16
 
17
  - If you wish to contribute code to the project, please make sure to
18
    read the coding and commit guidelines:
19
-   https://github.com/jp9000/obs-studio/blob/master/CONTRIBUTING.rst
20
+   https://github.com/obsproject/obs-studio/blob/master/CONTRIBUTING.rst
21
 
22
  - Developer/API documentation can be found here:
23
    https://obsproject.com/docs
24
obs-studio-21.0.3.tar.xz/UI/data/locale.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale.ini Changed
13
 
1
@@ -139,3 +139,11 @@
2
 [nn-NO]
3
 Name=Norsk Nynorsk
4
 
5
+[fil-PH]
6
+Name=Wikang Filipino
7
+
8
+[sq-AL]
9
+Name=gjuha shqipe
10
+
11
+[tl-PH]
12
+Name=Wikang Tagalog
13
obs-studio-21.0.3.tar.xz/UI/data/locale/bg-BG.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/bg-BG.ini Changed
131
 
1
@@ -546,12 +546,27 @@
2
 Basic.Settings.Output.Simple.Warn.Lossless="Предупреждение: Оригиналното качество създава огромни файлове! Запис настроен на Оригинално качество може да заема над 7GB дисково пространство на минута, ако резолюцията и кадрите са високи. Не се препоръчва ако не разполагате със много пространство."
3
 Basic.Settings.Output.Simple.Warn.Lossless.Msg="Сигурни ли сте че искате да ползвате оригиналното качество на записа?"
4
 Basic.Settings.Output.Simple.Warn.Lossless.Title="Предупреждение при ползване на Оригинално Качество!"
5
+Basic.Settings.Output.Simple.Warn.MultipleQSV="Предупреждение: Не можете да ползвате различни и отделни QSV енкодери докато предавате и записвате. Ако искате да предавате и да записвате едновременно, моля променете един от енкодерите."
6
+Basic.Settings.Output.Simple.Encoder.Software="Програмно (x264)"
7
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Хардуеър (QSV)"
8
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Хардуеър (AMD)"
9
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Хардуеър (NVENC)"
10
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Програмно (x264 ниска употреба на процесора, увеличава размера на записа)"
11
 Basic.Settings.Output.VideoBitrate="Видео битрейт"
12
 Basic.Settings.Output.AudioBitrate="Аудио битрейт"
13
 Basic.Settings.Output.Reconnect="Автоматично повторно свързване"
14
 Basic.Settings.Output.RetryDelay="Отлагане на повторно свързване (секунди)"
15
 Basic.Settings.Output.MaxRetries="Максимален брой повторни опити"
16
-
17
+Basic.Settings.Output.Advanced="Включи Допълнителни Настройки за Енкодера"
18
+Basic.Settings.Output.EncoderPreset="Настройка на Енкодера (по-висока = по-малко процесор)"
19
+Basic.Settings.Output.CustomEncoderSettings="Допълнителни Настройки на Енкодера"
20
+Basic.Settings.Output.CustomMuxerSettings="Допълнителни Настройки при Смесване"
21
+Basic.Settings.Output.NoSpaceFileName="Създавай името на записа без Празни Места"
22
+
23
+Basic.Settings.Output.Adv.Rescale="Умащабяване на Изхода"
24
+Basic.Settings.Output.Adv.AudioTrack="Звукова Писта"
25
+Basic.Settings.Output.Adv.Streaming="Предаване"
26
+Basic.Settings.Output.Adv.ApplyServiceSettings="Ползвай настройките на енкодера от платформата"
27
 Basic.Settings.Output.Adv.Audio.Track1="Писта 1"
28
 Basic.Settings.Output.Adv.Audio.Track2="Писта 2"
29
 Basic.Settings.Output.Adv.Audio.Track3="Писта 3"
30
@@ -588,7 +603,9 @@
31
 Basic.Settings.Output.Adv.FFmpeg.GOPSize="Интервал между ключови кадри (кадри)"
32
 Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Покажи всички кодеци (дори и ако са несъвместими)"
33
 
34
+FilenameFormatting.completer="%ХХГГ-%ММ-%ДД %чч-%мм-%сс\n%ГГ-%ММ-%ДД %чч-%мм-%сс\n%Г-%м-%д %Ч-%М-%С\n%г-%м-%д %Ч-%М-%С\n%а %Г-%м-%д %Ч-%М-%С\n%А %Г-%м-%д %Ч-%М-%С\n%Г-%б-%д %Ч-%М-%С\n%Г-%Б-%д %Ч-%М-%С\n%Г- %м-%д %И-%М-%С-%п\n%Г-%м-%д %Ч-%М-%С-%з\n%Г-%м-%д %Ч-%М-%С-%ст"
35
 
36
+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"
37
 
38
 Basic.Settings.Video="Видео"
39
 Basic.Settings.Video.Adapter="Видео адаптер:"
40
@@ -614,6 +631,10 @@
41
 Basic.Settings.Audio="Аудио"
42
 Basic.Settings.Audio.SampleRate="Честота на дискретизацията"
43
 Basic.Settings.Audio.Channels="Канали"
44
+Basic.Settings.Audio.MeterDecayRate="Брой за Звуков Разпад"
45
+Basic.Settings.Audio.MeterDecayRate.Fast="Бързо"
46
+Basic.Settings.Audio.MeterDecayRate.Medium="Средно (ТИП I PPM)"
47
+Basic.Settings.Audio.MeterDecayRate.Slow="Бавно (Type II PPM)"
48
 Basic.Settings.Audio.MultiChannelWarning.Enabled="ПРЕДУПРЕЖДЕНИЕ: Включен е Surround sound."
49
 Basic.Settings.Audio.MultichannelWarning="Ако предавате, проверете дали вашата услуга за стрийминг поддържа едновременно приемане на съраунд звук и възпроизвеждане на съраунд звук. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast са примери, при които съраунд звукът е напълно поддържан. Въпреки че, Facebook Live и YouTube Live подържат и приемат съраунд, Facebook Live пемиксира към стерео звук, а YouTube Live възпроизвежда само два канала.\n\nЗвуковите филтъри на OBS подържат съраунд звук, въпреки това VST поддръжката не е гарантирана."
50
 Basic.Settings.Audio.MultichannelWarning.Title="Включи записването на съраунд звук?"
51
@@ -635,6 +656,7 @@
52
 Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Над Нормата"
53
 Basic.Settings.Advanced.General.ProcessPriority.Normal="Нормален"
54
 Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Под Нормата"
55
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Свободен"
56
 Basic.Settings.Advanced.FormatWarning="Предупреждение: Цветните формати освен NV12 се ползват главно при записи и не са препоръчани при предаване. Предаването може да упражни завишено ползване на Процесора поради прекодиране на форматите."
57
 Basic.Settings.Advanced.Audio.BufferingTime="Време за буфериране на звук"
58
 Basic.Settings.Advanced.Video.ColorFormat="Формат на цвета"
59
@@ -644,22 +666,37 @@
60
 Basic.Settings.Advanced.Video.ColorRange.Full="Пълен"
61
 Basic.Settings.Advanced.Audio.MonitoringDevice="Устройство за Звуково възпроизвеждане"
62
 Basic.Settings.Advanced.Audio.MonitoringDevice.Default="По подразбиране"
63
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Изключи намалянето на звука при разговори"
64
+Basic.Settings.Advanced.StreamDelay="Забавяне на Предаването"
65
 Basic.Settings.Advanced.StreamDelay.Duration="Продължителност (секунди)"
66
 Basic.Settings.Advanced.StreamDelay.Preserve="Запази точката на прекъсване (увеличете забавянето) при повторно свързване"
67
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Приблизително използвана памет: %1 MB"
68
 Basic.Settings.Advanced.Network="Мрежа"
69
+Basic.Settings.Advanced.Network.BindToIP="Свържи към IP"
70
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Позволи нов мрежов код"
71
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Режим на ниска латенция"
72
 
73
 Basic.AdvAudio="Допълнителни Звукови Характеристики"
74
 Basic.AdvAudio.Name="Име"
75
 Basic.AdvAudio.Volume="Сила на звука (%)"
76
 Basic.AdvAudio.Mono="Премиксирай към Mono звук"
77
+Basic.AdvAudio.Panning="Накланяне"
78
+Basic.AdvAudio.SyncOffset="Забавяне (мс)"
79
+Basic.AdvAudio.Monitoring="Звуков Мониториниг "
80
 Basic.AdvAudio.Monitoring.None="Мониторът Изключен"
81
+Basic.AdvAudio.Monitoring.MonitorOnly="Само на Монитора (заглуши изхода)"
82
+Basic.AdvAudio.Monitoring.Both="Монитор и Изход"
83
 Basic.AdvAudio.AudioTracks="Писти"
84
 
85
 Basic.Settings.Hotkeys="Горещи клавиши"
86
+Basic.Settings.Hotkeys.Pair="Клавишни комбинации ползвани от `%1` действат като ключ"
87
 
88
 Basic.Hotkeys.SelectScene="Премини към сцена"
89
 
90
+Basic.SystemTray.Show="Покажи"
91
+Basic.SystemTray.Hide="Скрий"
92
 
93
+Basic.SystemTray.Message.Reconnecting="Връзката Загубена. Свързване..."
94
 
95
 Hotkeys.Insert="Вмъкни"
96
 Hotkeys.Delete="Изтрий"
97
@@ -668,9 +705,33 @@
98
 Hotkeys.PageUp="Страница нагоре"
99
 Hotkeys.PageDown="Страница надолу"
100
 Hotkeys.NumLock="Num Lock"
101
+Hotkeys.ScrollLock="Скрол Лок"
102
+Hotkeys.CapsLock="Капс Лок"
103
+Hotkeys.Backspace="Връщане"
104
+Hotkeys.Tab="Таб"
105
+Hotkeys.Print="Принт"
106
+Hotkeys.Pause="Пауза"
107
+Hotkeys.Left="Ляво"
108
+Hotkeys.Right="Дясно"
109
+Hotkeys.Up="Горе"
110
+Hotkeys.Down="Долу"
111
+Hotkeys.Windows="Windows"
112
+Hotkeys.Super="Супер"
113
+Hotkeys.Menu="Меню"
114
+Hotkeys.Space="Спейс"
115
+Hotkeys.NumpadNum="Нумпад %1"
116
+Hotkeys.NumpadMultiply="Нумпад Умножи"
117
+Hotkeys.NumpadDivide="Нумпад Раздели"
118
 Hotkeys.NumpadAdd="Цифрова клавиатура +"
119
 Hotkeys.NumpadSubtract="Цифрова клавиатура -"
120
 Hotkeys.NumpadDecimal="Цифрова клавиатура ."
121
+Hotkeys.AppleKeypadNum="%1 (Клавиатура)"
122
+Hotkeys.AppleKeypadMultiply="* (Клавиатура)"
123
+Hotkeys.AppleKeypadDivide="/ (Клавиатура)"
124
+Hotkeys.AppleKeypadAdd="+ (Клавиатура)"
125
+Hotkeys.AppleKeypadSubtract="- (Клавиатура)"
126
+Hotkeys.AppleKeypadDecimal=". (Клавиатура)"
127
+Hotkeys.AppleKeypadEqual="= (Клавиатура)"
128
 Hotkeys.MouseButton="Мишка %1"
129
 
130
 Mute="Заглуши"
131
obs-studio-21.0.3.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/cs-CZ.ini Changed
11
 
1
@@ -631,6 +631,9 @@
2
 Basic.Settings.Audio="Zvuk"
3
 Basic.Settings.Audio.SampleRate="Vzorkovací frekvence"
4
 Basic.Settings.Audio.Channels="Kanály"
5
+Basic.Settings.Audio.MeterDecayRate.Fast="Rychle"
6
+Basic.Settings.Audio.MeterDecayRate.Medium="Střední (typ I PPM)"
7
+Basic.Settings.Audio.MeterDecayRate.Slow="Pomalu (typ II PPM)"
8
 Basic.Settings.Audio.MultiChannelWarning.Enabled="VAROVÁNÍ: Prostorový zvuk je zapnut."
9
 Basic.Settings.Audio.MultichannelWarning="Předtím než začnete vysílat si zkontrolujte, zda vaše vysílací služba podporuje příjem a přehrávání prostorového zvuku. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast jsou příklady služeb, které jej plně podporují. I když Facebook Live a YouTube Live oba podporují příjem prostorového zvuku, Facebook Live jej převede na stereo a YouTube Live přehrává pouze dva kanály.\n\nOBS filtry zvuku jej plně podporují, ale podpora u pluginu VST není garantována."
10
 Basic.Settings.Audio.MultichannelWarning.Title="Povolit prostorový zvuk?"
11
obs-studio-21.0.3.tar.xz/UI/data/locale/en-US.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/en-US.ini Changed
11
 
1
@@ -535,6 +535,9 @@
2
 Basic.MainMenu.Help.Logs.UploadLastLog="Upload &Last Log File"
3
 Basic.MainMenu.Help.Logs.ViewCurrentLog="&View Current Log"
4
 Basic.MainMenu.Help.CheckForUpdates="Check For Updates"
5
+Basic.MainMenu.Help.CrashLogs="Crash &Reports"
6
+Basic.MainMenu.Help.CrashLogs.ShowLogs="&Show Crash Reports"
7
+Basic.MainMenu.Help.CrashLogs.UploadLastLog="Upload &Last Crash Report"
8
 
9
 # basic mode settings dialog
10
 Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect."
11
obs-studio-21.1.2.tar.xz/UI/data/locale/fil-PH.ini Added
750
 
1
@@ -0,0 +1,748 @@
2
+
3
+
4
+OK="Sige"
5
+Apply="Ilagay"
6
+Cancel="Kanselahin"
7
+Close="Sarado"
8
+Save="Mag-impok"
9
+Discard="Ialis"
10
+Disable="Huwag paganahin"
11
+Yes="Oo"
12
+No="Hindi"
13
+Add="Idagdag"
14
+Remove="Tanggalin"
15
+Rename="Baguhin ang pangalan"
16
+Interact="Makipag-ugnayan"
17
+Filters="Mga salaan"
18
+Properties="Mga pag-aari"
19
+MoveUp="Gumalaw pataas"
20
+MoveDown="Bumaba"
21
+Settings="Mga pagtatakda"
22
+Display="Ipamalas"
23
+Name="Pangalan"
24
+Exit="Labasan"
25
+Mixer="Panghalo"
26
+Browse="Supling"
27
+Mono="Mono"
28
+Stereo="Stereo"
29
+DroppedFrames="Bumaba ang mga frame %1 (%2%)"
30
+StudioProgramProjector="Fullscreen Projector (Programa)"
31
+PreviewProjector="Fullscreen Projector (Preview)"
32
+SceneProjector="Fullsreen Projector (Eksena)"
33
+SourceProjector="Fullscreen Projector (Pinagmulan)"
34
+StudioProgramWindow="Windowed Projector (Programa)"
35
+PreviewWindow="Windowed Projector (Preview)"
36
+SceneWindow="Windowed Projector (Eksena)"
37
+SourceWindow="Windowed Projector (Pinagmulan)"
38
+MultiviewProjector="Multiview (Fullscreen)"
39
+MultiviewWindowed="Multiview (Windowed)"
40
+Clear="Linisin"
41
+Revert="Ibalik"
42
+Show="Ipakita"
43
+Hide="Itago"
44
+UnhideAll="Huwag itago lahat"
45
+Untitled="Walang pamagat"
46
+New="Bago"
47
+Duplicate="Katulad"
48
+Enable="Paganahin"
49
+DisableOSXVSync="Huwag Paganahin OSX V-Sync"
50
+ResetOSXVSyncOnExit="I-reset ang OSX V-Sync sa Labasan"
51
+HighResourceUsage="Ang Encoding ay labis ang karga! Isaalang alang ang pagbaba ng video settings o gumamit ng mas mabilis na encoding preset."
52
+Transition="Paglipat"
53
+QuickTransitions="Mabilis na Paglipat"
54
+Left="Kaliwa"
55
+Right="Kanan"
56
+Top="Pinakamataas"
57
+Bottom="Kailaliman"
58
+Reset="Baguhin"
59
+Hours="Oras"
60
+Minutes="Minuto"
61
+Seconds="Segundo"
62
+Deprecated="Hindi na ginagamit"
63
+ReplayBuffer="Replay Buffer"
64
+Import="Mag-angkat"
65
+Export="I-export"
66
+Copy="Kopyahin"
67
+Paste="I-paste"
68
+PasteReference="I-paste (Banggit)"
69
+PasteDuplicate="I-paste (Pangalawang salin)"
70
+RemuxRecordings="Mga Pagtatala ng Remux"
71
+Next="Susunod"
72
+Back="Bumalik"
73
+Defaults="Mga hindi pagsipot"
74
+HideMixer="Itago sa panghalo"
75
+TransitionOverride="Override na ang Paglipat"
76
+None="Wala"
77
+StudioMode.Preview="Balikan"
78
+StudioMode.Program="Programa"
79
+ShowInMultiview="Ipakita sa Multiview"
80
+
81
+AlreadyRunning.Title="Tumatakbo na ngayon ang OBS"
82
+AlreadyRunning.Text="Tumatakbo na ang OBS! Maliban na lamang kung gusto mong gawin ito, pakiusap patayin ang anomang nabubuhay na mga mungkahi ng OBS bago subukang magpatakbo ng panibagong mungkahi. Kung meron kang OBS set para mabawasan ang sistemang tray, pakiusap magsiyasat para makita kung ito ay tumatakbo parin."
83
+AlreadyRunning.LaunchAnyway="Maglunsad parin"
84
+
85
+Copy.Filters="Kopyahin ang mga panala"
86
+Paste.Filters="I-paste ang mga panala"
87
+
88
+BandwidthTest.Region="Rehiyon"
89
+BandwidthTest.Region.US="Estados Unidos"
90
+BandwidthTest.Region.EU="Europa"
91
+BandwidthTest.Region.Asia="Asya"
92
+BandwidthTest.Region.Other="Iba pa"
93
+
94
+Basic.FirstStartup.RunWizard="Gusto mo bang mapatakbo ang dalubhasa sa kusang pagkonpigurasyon? Maaari mo ring mano-manuhin ang pagkonpigura ng iyong settings sa pagpindot ng Settings button sa pangunahing window."
95
+Basic.FirstStartup.RunWizard.BetaWarning="(Tandaan: Ang dalubhasang kusang pagkonpigurasyon ay kasalukuyang nasa beta)"
96
+Basic.FirstStartup.RunWizard.NoClicked="Kung magbabago ka ng isip mo, pwede mong patakbuhin ang dalubhasang kusang konpigurasyon anomang oras ulit mula sa mga kasangkapan sa menu."
97
+
98
+Basic.AutoConfig="Dalubhasang Kusang Konpigurasyon"
99
+Basic.AutoConfig.Beta="Dalubhasang Kusang Konpigurasyon (Beta)"
100
+Basic.AutoConfig.ApplySettings="Ilapat ang mga Pagtatakda"
101
+Basic.AutoConfig.StartPage="Paggamit ng Impormasyon"
102
+Basic.AutoConfig.StartPage.SubTitle="Tukuyin ang tamang program na gusto mong gamitin"
103
+Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimize para sa streaming, pangalawa ay ang recording"
104
+Basic.AutoConfig.StartPage.PrioritizeRecording="Optimize para sa recording, Hindi ako mag streaming"
105
+Basic.AutoConfig.VideoPage="Ang mga video settings"
106
+Basic.AutoConfig.VideoPage.SubTitle="Tukuyin ang naayong video settings na gusto mong gamitin"
107
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Kasulukuyang gamitin(%1x%2)"
108
+Basic.AutoConfig.VideoPage.BaseResolution.Display="I-Display %1 (%2x%3)"
109
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Pangsulukuyang Gamitin (%1)"
110
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Sa 60 or kaya sa 30, Pero mas mabuti 60 kung maaari"
111
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Sa 60 or kaya sa 30, Pero mas mabuti 60 para sa mas magandang resolusyon"
112
+Basic.AutoConfig.VideoPage.CanvasExplanation="Paalala: Ang kanbas (base) na ito ay hindi kinakailangan na kaparehas ng resolusyon ng iyong stream or record. Ang iyong actual stream/record na resolusyon ay maaaring pagkasyahin para sa resolusyon ng kanbas para mabawasan ang paggamit kinakailangan na bitrate."
113
+Basic.AutoConfig.StreamPage="Mga batis ng impormasyon"
114
+Basic.AutoConfig.StreamPage.SubTitle="Pakiusap ilagay ang iyong impormasyon pang stream"
115
+Basic.AutoConfig.StreamPage.Service="Serbisyo"
116
+Basic.AutoConfig.StreamPage.Service.ShowAll="Ipakita lahat..."
117
+Basic.AutoConfig.StreamPage.Server="Serber"
118
+Basic.AutoConfig.StreamPage.StreamKey="Ang susi ng iyong stream"
119
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)"
120
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="I-estima ang bitrate kasama ang pag eksamina ng bandwidth (maaaring tumagal ng ilang minuto)"
121
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Piliin ang hardware encoding"
122
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Ang Hardware Encoding ay tinatanggal lahat ng nagamit na CPU, pero kailangan ng mas maraming bitrate para makuha ang parehong lebel ng kalidad"
123
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Babala sa pag stream"
124
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Ang bandwidth test ay tungkol sa stream randomized bidyo data at walang audio sa iyong channel. Kung maaari, mas inirerekomenda na pansamantalang i-off ang pag save ng vides of streams at itakda sa pribado hanggang matapos makumpleto ang pag eksamin"
125
+Basic.AutoConfig.TestPage="Huling Resulta"
126
+Basic.AutoConfig.TestPage.SubTitle.Testing="Ang program na ito ay isinasagawa ang mga set para eksamin para matantiya ang pinakamainam na settings"
127
+Basic.AutoConfig.TestPage.SubTitle.Complete="Ang iyong pagsusuri ay kumpleto na"
128
+Basic.AutoConfig.TestPage.TestingBandwidth="Pagsasagawa ng bandwidth test, ito ay maaaring tumagal ng ilang minuto..."
129
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Kumukunekta sa: %1..."
130
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Bigong kumunekta sa alin mang server, paki tignan ang koneksyon ng iyong internet at subukan ulet."
131
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Pagsusuri ng bandwidth para sa: %1"
132
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Testingin ang stream encoder, ito ay maaaring tumagal ng isang minuto..."
133
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testingin ang recording encoder, ito ay maaaring tumagal ng isang minuto..."
134
+Basic.AutoConfig.TestPage.TestingRes="Testingin ang resolusyon, ito ay maaaring tumagal ng ilang minuto..."
135
+Basic.AutoConfig.TestPage.TestingRes.Fail="Bigong iandar ang encoder"
136
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Testingin %1x%2 %3 FPS..."
137
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streaming Encoder"
138
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Recording Encoder"
139
+Basic.AutoConfig.TestPage.Result.Header="Ang program na ito ay napagkaisahan na ang settings tinatayang lahat ay perpekto para sayo:"
140
+Basic.AutoConfig.TestPage.Result.Footer="Para sa pag gamit ng settings, pindutin ang Apply Settings. Para ma reconfigure ang wizard at simulan muli, pindutin ang Back. Mano-mano i-configure ang settings, at pindutin ang Cancel at buksan ang Settings."
141
+
142
+Basic.Stats="Ang mga Statisktika"
143
+Basic.Stats.CPUUsage="Ang nagamit na CPU"
144
+Basic.Stats.HDDSpaceAvailable="Ang magagamit na espasyo ng HDD"
145
+Basic.Stats.MemoryUsage="Ang nagamit na Memory"
146
+Basic.Stats.AverageTimeToRender="Ang average time para ma render ang frame"
147
+Basic.Stats.SkippedFrames="Laktawin ang frames dahil sa encoding lag"
148
+Basic.Stats.MissedFrames="Nalampasan ang frames dahil sa rendering lag"
149
+Basic.Stats.Output.Stream="Stream"
150
+Basic.Stats.Output.Recording="Recording"
151
+Basic.Stats.Status="Ang estado"
152
+Basic.Stats.Status.Recording="Recording"
153
+Basic.Stats.Status.Live="Naka LIVE"
154
+Basic.Stats.Status.Reconnecting="Muling kumukonekta"
155
+Basic.Stats.Status.Inactive="Hindi na aktiba"
156
+Basic.Stats.DroppedFrames="Naihulog na Frames (Network)"
157
+Basic.Stats.MegabytesSent="Ang total na Data Output"
158
+Basic.Stats.Bitrate="Bitrate"
159
+
160
+Updater.Title="May bagong update na available"
161
+Updater.Text="May bagong update na magagamit:"
162
+Updater.UpdateNow="Mag update ngayon"
163
+Updater.RemindMeLater="Paalalahanan mo ako mamaya"
164
+Updater.Skip="Laktawan ang Bersyon"
165
+Updater.Running.Title="Programa na kasalukuyang aktibo"
166
+Updater.Running.Text="Ang mga output ay kasalukuyang aktibo, mangyaring i-shut down ang anumang mga aktibong output bago sinusubukang i-update"
167
+Updater.NoUpdatesAvailable.Title="Walang magagamit na mga update"
168
+Updater.NoUpdatesAvailable.Text="Walang mga update ang kasalukuyang magagamit"
169
+Updater.FailedToLaunch="Nabigong ilunsad ang updater"
170
+Updater.GameCaptureActive.Title="Kumuha ng laro na aktibo"
171
+Updater.GameCaptureActive.Text="Kasalukuyang nakukuha sa library ang pagkuha ng hook library. Mangyaring isara ang anumang mga laro / programa na nakukuha (o i-restart ang mga bintana) at subukang muli."
172
+
173
+QuickTransitions.SwapScenes="Swap Preview / Output Scenes Pagkatapos Transitioning"
174
+QuickTransitions.SwapScenesTT="Mag swap ng mga preview at output scenes matapos ang transitioning (Kung may orihinal na output scene na umiiral).\nIto ay hindi pwede baguhin ang orihinal na eksena."
175
+QuickTransitions.DuplicateScene="Gayahin ang eksena"
176
+QuickTransitions.DuplicateSceneTT="Kung mag i-edit ng parehas na eksena. pinapayag ang editing transform/visibility of sources kahit baguhin ang output.\nPara ma edit ang properties wag baguhin ang output, paganahin 'Duplicate Sources'.\nAng pagbago ng kalidad nito ay maaaring ma reset ang eksena (kung ito ay umiiral pa rin)."
177
+QuickTransitions.EditProperties="Gayahin ang mga pinagmulang"
178
+QuickTransitions.EditPropertiesTT="Kung mag i-edit ng kaparehas na eksena. payagan mag edit ng katangian ng mga pinagkukunan nang hindi binabago ang output.\nIto ay magagamit king 'Duplicate Scene' ay pinagana.\nAng mga pinagkukunan(gaya ng nakuhang media sources) hindi suportado at di pwede ma edit nang hiwalay.\nAng pagbago ng value nito ay maaaring ma reset ang kasulukuyang output scene(kung mayroon pa).\n\nBabala: Dahil sa pinagkukunan ay magiging doble, ito ay nangangailangan ng ekstrang sistema or video pagkukunan."
179
+QuickTransitions.HotkeyName="Ilipat ng mabilis: %1"
180
+
181
+Basic.AddTransition="Magdagdag ng configurable na transisyon"
182
+Basic.RemoveTransition="Tangalin ang configurable transition"
183
+Basic.TransitionProperties="Mga Properties ng Transisyon"
184
+Basic.SceneTransitions="Mga transisyon ng mga eksena"
185
+Basic.TransitionDuration="Katagalan"
186
+Basic.TogglePreviewProgramMode="Ang Studio Mode"
187
+
188
+TransitionNameDlg.Text="Pakilagay ang pangalan ng transisyon"
189
+TransitionNameDlg.Title="Pangalan ng Transisyon"
190
+
191
+TitleBar.Profile="Ang Profile"
192
+TitleBar.Scenes="Ang mga Eksena"
193
+
194
+NameExists.Title="Ang pangalan ay umiiral na"
195
+NameExists.Text="Ang pangalan ay nagamit na."
196
+
197
+NoNameEntered.Title="Pakilagay ang balidong pangalan"
198
+NoNameEntered.Text="Hindi pwede gumamit ng walang pangalan."
199
+
200
+ConfirmStart.Title="Magsimula ng mag Stream?"
201
+ConfirmStart.Text="Sigurado ka ba na simulang ang pag stream?"
202
+
203
+ConfirmStop.Title="Itigil ba ang Steam?"
204
+ConfirmStop.Text="Sigurado ka itigil ang pag i-stream?"
205
+
206
+ConfirmExit.Title="Lumabas sa OBS?"
207
+ConfirmExit.Text="Ang OBS ay kasulukuyang aktibo. Lahat ng streams/recordings ay magsasara. Sigurado ka ba gusto mong mag exit?"
208
+
209
+ConfirmRemove.Title="I-kumpirma ang pagtangal"
210
+ConfirmRemove.Text="Sigurado ka bang tangalin ang '$1'?"
211
+ConfirmRemove.TextMultiple="Sigurado ka bang tangalin %1 items?"
212
+
213
+Output.StartStreamFailed="Bigong simulang ang pag stream"
214
+Output.StartRecordingFailed="Bigong simulan ang pag record"
215
+Output.StartReplayFailed="Bigong simulang ang replay buffer"
216
+Output.StartFailedGeneric="Bigong simulang ang output. Pakitingnan ang talaan ng mga detalye.\n\nNote: kung ikaw ay gumagamit ng NVENC or AMD encoders, siguraduhin na nag video drivers ay naka update."
217
+
218
+Output.ConnectFail.Title="Bigung kumunekta"
219
+Output.ConnectFail.BadPath="Hindi wasto ang Path or ang Connection URL. Pakitingnan ang settings para ma kumpirma na ito ay pwede."
220
+Output.ConnectFail.ConnectFailed="Bigong kumunekta sa serber"
221
+Output.ConnectFail.InvalidStream="Di maka pasok sa tinutukoy na channel or stream key, pakitignan ng maayos ang stream key. Kung tama, Maaaring may problema sa pagkunekta sa serber."
222
+Output.ConnectFail.Error="Isang di-inaasahang error ng subukang kumunekta sa serber. Karagdagang impormasyon ay nasa log file."
223
+Output.ConnectFail.Disconnected="Nadiskonek mula sa serber."
224
+
225
+Output.RecordFail.Title="Bigong simulang ang pag record"
226
+Output.RecordFail.Unsupported="Ang output format ay maaring di suportado or di sinusuportahan ang higit sa isang audio track. Pakitingnan ang iyong settings at simulan ulet."
227
+Output.RecordNoSpace.Title="Hindi sapat ang iyong espasyo"
228
+Output.RecordNoSpace.Msg="Di sapat ang espasyo para ipatuloy ang pagrerekord."
229
+Output.RecordError.Title="May error sa pagrekord"
230
+Output.RecordError.Msg="Hindi tiyak na error habang nagrerekord."
231
+Output.ReplayBuffer.NoHotkey.Title="Walang set ng hotkey!"
232
+Output.ReplayBuffer.NoHotkey.Msg="Walang na i-save na hotkey para sa replay buffer. Paki \"Save\" ang gagamiting hotkey para ma i-save ang replay recordings."
233
+
234
+Output.BadPath.Title="Di mabuting File Path"
235
+Output.BadPath.Text="Ang na configured na file output path ay di di-wasto. Pakitignan ang iyong settings para ma kumpirma na balido ang file path at na i-set ito."
236
+
237
+LogReturnDialog="Ang na i-uload na log ay tagumpay"
238
+LogReturnDialog.CopyURL="Kupyahin ang URL"
239
+LogReturnDialog.ErrorUploadingLog="Error sa pag-upload ng log file"
240
+
241
+LicenseAgreement="Ang lisensya ng kasunduan"
242
+LicenseAgreement.PleaseReview="Pakitingnan ang lisensya bago gumamit ng OBS. Sa pag gamit ng program, kinikilala mo na nabasa at sumasang-ayon ka sa mga tuntunin nito <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a>. Maaaring mag scroll down para makita ang ibang bahagi ng kasunduan."
243
+LicenseAgreement.ClickIAgreeToContinue="Kung iyong tinatanggap ang termino ng kasunuduan, pindutin ang I Agree to continue. Dapat sumang-ayon sa kasunduan sa pag-gamit ng OBS."
244
+LicenseAgreement.IAgree="Sumasang-ayon Ako"
245
+LicenseAgreement.Exit="Lumabas"
246
+
247
+Remux.SourceFile="Obs Recording"
248
+Remux.TargetFile="Target File"
249
+Remux.Remux="Remux"
250
+Remux.OBSRecording="OBS Recording"
251
+Remux.FinishedTitle="Tapos na ang Remuxing"
252
+Remux.Finished="Ang Recording remuxed"
253
+Remux.FinishedError="Ang Recording Remuxed, pero ang file ay hindi kumpleto"
254
+Remux.SelectRecording="Pumuli ng OBS Recording…"
255
+Remux.SelectTarget="Piliin ang gustong file …"
256
+Remux.FileExistsTitle="Ang napiling file any umiiral na"
257
+Remux.FileExists="Ang napiling file any umiiral na, gusto mo ba itong palitan?"
258
+Remux.ExitUnfinishedTitle="Ang remuxing ay naka progress"
259
+Remux.ExitUnfinished="Di pa tapos ang Remuxing, pag itigil ang render ang napiling file ay di magagamit.\nGusto mo bang huminto sa pag remuxing?"
260
+
261
+UpdateAvailable="May bagong update na available"
262
+UpdateAvailable.Text="Ang Version %1.%2.%3 ay available na.  <a href='%4'>Pindutin para i-download</a>"
263
+
264
+Basic.DesktopDevice1="Ang Desktop Audio"
265
+Basic.DesktopDevice2="Ang Desktop Audio 2"
266
+Basic.AuxDevice1="Ang Mic/Aux"
267
+Basic.AuxDevice2="Ang Mic/Aux 2"
268
+Basic.AuxDevice3="Ang Mic/Aux 3"
269
+Basic.AuxDevice4="Ang Mic/Aux 4"
270
+
271
+Basic.Scene="Eksena"
272
+Basic.DisplayCapture="Ang nakunan na display"
273
+
274
+Basic.Main.PreviewConextMenu.Enable="Ipakita muli ang Larawan"
275
+
276
+ScaleFiltering="I-filter iskala"
277
+ScaleFiltering.Point="Punto"
278
+ScaleFiltering.Bilinear="Bilinear"
279
+ScaleFiltering.Bicubic="Bicubic"
280
+ScaleFiltering.Lanczos="Lanczos"
281
+
282
+Deinterlacing="Deinterlacing"
283
+Deinterlacing.Discard="Baliwalain"
284
+Deinterlacing.Retro="Retro"
285
+Deinterlacing.Blend="I-timpla"
286
+Deinterlacing.Blend2x="I-timpla ng dalwang beses"
287
+Deinterlacing.Linear="Linear"
288
+Deinterlacing.Linear2x="Linear 2x"
289
+Deinterlacing.Yadif="Yadif"
290
+Deinterlacing.Yadif2x="Yadif 2x"
291
+Deinterlacing.TopFieldFirst="Pang unang itaas na field"
292
+Deinterlacing.BottomFieldFirst="Pang unang ibaba na field"
293
+
294
+VolControl.SliderUnmuted="Pandausdos ng volume para '%1': %2"
295
+VolControl.SliderMuted="Pandausdos ng volume para '%1': %2 (kasulukuyang naka mute)"
296
+VolControl.Mute="Mute '%1'"
297
+VolControl.Properties="Mga katangian '%1'"
298
+
299
+Basic.Main.AddSceneDlg.Title="Magdagdag ng mga eksena"
300
+Basic.Main.AddSceneDlg.Text="Pakiusap lagyan ng pangalan ang eksena"
301
+
302
+Basic.Main.DefaultSceneName.Text="Eksena %1"
303
+
304
+Basic.Main.AddSceneCollection.Title="Magdagdag ng Collection ng Eksena"
305
+Basic.Main.AddSceneCollection.Text="Mangyaring ipasok ang pangalan ng koleksyon ng eksena"
306
+
307
+Basic.Main.RenameSceneCollection.Title="I-rename ang Scene Collection"
308
+
309
+AddProfile.Title="Magdagdag ng Profile"
310
+AddProfile.Text="Pakipasok ang pangalan ng profile"
311
+
312
+RenameProfile.Title="Palitan ang pangalan ng Profile"
313
+
314
+Basic.Main.MixerRename.Title="Palitan ang pangalan ng Audio Source"
315
+Basic.Main.MixerRename.Text="Mangyaring ipasok ang pangalan ng pinagmulang audio"
316
+
317
+
318
+Basic.Main.PreviewDisabled="Kasalukuyang hindi pinagana ang pag-preview"
319
+
320
+Basic.SourceSelect="Lumikha / Piliin ang Pinagmulan"
321
+Basic.SourceSelect.CreateNew="Gumawa ng bago"
322
+Basic.SourceSelect.AddExisting="Magdagdag ng Umiiral na"
323
+Basic.SourceSelect.AddVisible="Gawing nakikita ang mapagkukunan"
324
+
325
+Basic.PropertiesWindow="Mga Properties para sa '%1'"
326
+Basic.PropertiesWindow.SelectColor="Pumili ng kulay"
327
+Basic.PropertiesWindow.SelectFont="Piliin ang font"
328
+Basic.PropertiesWindow.ConfirmTitle="Binago ang Mga Setting"
329
+Basic.PropertiesWindow.Confirm="Mayroong mga hindi nai-save na pagbabago. Gusto mo bang panatilihin ang mga ito?"
330
+Basic.PropertiesWindow.NoProperties="Walang magagamit na mga ari-arian"
331
+Basic.PropertiesWindow.AddFiles="Magdagdag ng Mga File"
332
+Basic.PropertiesWindow.AddDir="Magdagdag ng Direktoryo"
333
+Basic.PropertiesWindow.AddURL="Magdagdag ng Path / URL"
334
+Basic.PropertiesWindow.AddEditableListDir="Magdagdag ng direktoryo sa '%1'"
335
+Basic.PropertiesWindow.AddEditableListFiles="Magdagdag ng mga file sa '%1'"
336
+Basic.PropertiesWindow.AddEditableListEntry="Magdagdag ng entry sa '%1'"
337
+Basic.PropertiesWindow.EditEditableListEntry="I-edit ang entry mula sa '%1'"
338
+
339
+Basic.PropertiesView.FPS.Simple="Mga Simpleng FPS na Halaga"
340
+Basic.PropertiesView.FPS.Rational="Mga Rational Value FPS"
341
+Basic.PropertiesView.FPS.ValidFPSRanges="Mga saklaw na wastong FPS:"
342
+
343
+Basic.InteractionWindow="Nakikisalamuha... '%1'"
344
+
345
+Basic.StatusBar.Reconnecting="Nadiskonek, muling kumukonekta sa loob ng %2 segundo(s) (pagtatangka %1)"
346
+Basic.StatusBar.AttemptingReconnect="Sinusubukang kumunekta... (tangka %1)"
347
+Basic.StatusBar.ReconnectSuccessful="Matagumpay na reconnection"
348
+Basic.StatusBar.Delay="Pag antala (%1 segundo)"
349
+Basic.StatusBar.DelayStartingIn="Na antala(magsisimula %1 sec)"
350
+Basic.StatusBar.DelayStoppingIn="Na antala(hihinto %1 sec)"
351
+Basic.StatusBar.DelayStartingStoppingIn="Na antala (hihinto %1 sec, sisimula %2 sec)"
352
+
353
+Basic.Filters="Mga Filter"
354
+Basic.Filters.AsyncFilters="Mga Filter ng Audio / Video"
355
+Basic.Filters.AudioFilters="Mga Filter ng Audio"
356
+Basic.Filters.EffectFilters="Mga Filter ng Epekto"
357
+Basic.Filters.Title="Filter para sa mga '%1'"
358
+Basic.Filters.AddFilter.Title="Salain ang pangalan"
359
+Basic.Filters.AddFilter.Text="Mangyaring tukuyin ang pangalan ng filter"
360
+
361
+Basic.TransformWindow="Pagbabago ng Eksena ng Eksena"
362
+Basic.TransformWindow.Position="Posisyon"
363
+Basic.TransformWindow.Rotation="Pag-ikot"
364
+Basic.TransformWindow.Size="Sukat"
365
+Basic.TransformWindow.Alignment="Positional Alignment"
366
+Basic.TransformWindow.BoundsType="Bounding ng klase ng kahon"
367
+Basic.TransformWindow.BoundsAlignment="Ang pagkahanay ng Bounding Kahon"
368
+Basic.TransformWindow.Bounds="Ang Bounding Box Size"
369
+Basic.TransformWindow.Crop="I-crop ito"
370
+
371
+Basic.TransformWindow.Alignment.TopLeft="Sa taas na kaliwa"
372
+Basic.TransformWindow.Alignment.TopCenter="Sa gintang ibabaw"
373
+Basic.TransformWindow.Alignment.TopRight="Sa taas ng kanan"
374
+Basic.TransformWindow.Alignment.CenterLeft="Naiwan ang Gitna"
375
+Basic.TransformWindow.Alignment.Center="Gitna"
376
+Basic.TransformWindow.Alignment.CenterRight="Tama sa Gitna"
377
+Basic.TransformWindow.Alignment.BottomLeft="Babang Kaliwa"
378
+Basic.TransformWindow.Alignment.BottomCenter="Babang Gitna"
379
+Basic.TransformWindow.Alignment.BottomRight="Baba sa Kanan"
380
+
381
+Basic.TransformWindow.BoundsType.None="Walang hangganan"
382
+Basic.TransformWindow.BoundsType.MaxOnly="Pinakamalaki na sukat lamang"
383
+Basic.TransformWindow.BoundsType.ScaleInner="Sukat sa panloob na hangganan"
384
+Basic.TransformWindow.BoundsType.ScaleOuter="Sukat sa panlabas na hangganan"
385
+Basic.TransformWindow.BoundsType.ScaleToWidth="Sukat sa lapad ng hangganan"
386
+Basic.TransformWindow.BoundsType.ScaleToHeight="Sukat sa taas ng hangganan"
387
+Basic.TransformWindow.BoundsType.Stretch="Mag-stretch sa hangganan"
388
+
389
+Basic.Main.AddSourceHelp.Title="Hindi maaring magdagdag ng pinagmulan"
390
+Basic.Main.AddSourceHelp.Text="Kailangan mong magkaroon ng hindi bababa sa isang eksena sa pinagmulan."
391
+
392
+Basic.Main.Scenes="Mga eksena"
393
+Basic.Main.Sources="Pinagmulan"
394
+Basic.Main.Controls="Mga kontrol"
395
+Basic.Main.Connecting="Kumukonekta..."
396
+Basic.Main.StartRecording="Simula ng Pagtatala"
397
+Basic.Main.StartReplayBuffer="Simulan na ang pag Replay Buffer"
398
+Basic.Main.StartStreaming="Simulan ang mag stream"
399
+Basic.Main.StopRecording="Itigil ang Pagtatala"
400
+Basic.Main.StoppingRecording="Pagtigil sa Pagtatala..."
401
+Basic.Main.StopReplayBuffer="Itigil ang pag Re-replay Buffer"
402
+Basic.Main.StoppingReplayBuffer="Pagtigil sa Pagre-Replay Buffer..."
403
+Basic.Main.StopStreaming="Itiigil ang Pag-stream"
404
+Basic.Main.StoppingStreaming="Pagtigil sa Pag-stream..."
405
+Basic.Main.ForceStopStreaming="Itigil ang Pag-stream (Iwaksi ang Pagkaantala)"
406
+
407
+Basic.MainMenu.File="&Talaksan"
408
+Basic.MainMenu.File.Export="&I-export"
409
+Basic.MainMenu.File.Import="&Angkat"
410
+Basic.MainMenu.File.ShowRecordings="Ipakita at Pag-&record"
411
+Basic.MainMenu.File.Remux="Re&mux Recordings"
412
+Basic.MainMenu.File.Settings="Mga &Setting"
413
+Basic.MainMenu.File.ShowSettingsFolder="Ipakita ang Folder ng Mga Setting"
414
+Basic.MainMenu.File.ShowProfileFolder="Ipakita ang Folder ng Profile"
415
+Basic.MainMenu.AlwaysOnTop="L&aging Nasa Tuktok"
416
+Basic.MainMenu.File.Exit="E&xit"
417
+
418
+Basic.MainMenu.Edit="I-&edit"
419
+Basic.MainMenu.Edit.Undo="&Pawalang-bisa"
420
+Basic.MainMenu.Edit.Redo="&Mag-redo"
421
+Basic.MainMenu.Edit.UndoAction="I-&undo ang $1"
422
+Basic.MainMenu.Edit.RedoAction="&Redo $1"
423
+Basic.MainMenu.Edit.LockPreview="&I-preview ang I-preview"
424
+Basic.MainMenu.Edit.Scale="Preview &Scaling"
425
+Basic.MainMenu.Edit.Scale.Window="Scale to Window"
426
+Basic.MainMenu.Edit.Scale.Canvas="Kanbas (%1x%2)"
427
+Basic.MainMenu.Edit.Scale.Output="Output (%1x%2)"
428
+Basic.MainMenu.Edit.Transform="&Transform"
429
+Basic.MainMenu.Edit.Transform.EditTransform="&Baguhin ang Transform..."
430
+Basic.MainMenu.Edit.Transform.CopyTransform="Kopyahin ang Transform"
431
+Basic.MainMenu.Edit.Transform.PasteTransform="I-paste ang Transform"
432
+Basic.MainMenu.Edit.Transform.ResetTransform="I-&reset ang Transform"
433
+Basic.MainMenu.Edit.Transform.Rotate90CW="I-rotate ang 90 degrees CW"
434
+Basic.MainMenu.Edit.Transform.Rotate90CCW="I-rotate ang 90 degrees CCW"
435
+Basic.MainMenu.Edit.Transform.Rotate180="I-rotate ang 180 degrees"
436
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Flip &Horizontal"
437
+Basic.MainMenu.Edit.Transform.FlipVertical="Flip &Vertical"
438
+Basic.MainMenu.Edit.Transform.FitToScreen="&Fit sa screen"
439
+Basic.MainMenu.Edit.Transform.StretchToScreen="Mag-&stretch sa screen"
440
+Basic.MainMenu.Edit.Transform.CenterToScreen="&Center sa screen"
441
+Basic.MainMenu.Edit.Order="&Order"
442
+Basic.MainMenu.Edit.Order.MoveUp="Ilipat at Pataas (&U)"
443
+Basic.MainMenu.Edit.Order.MoveDown="Ibaba or bumaba (&D)"
444
+Basic.MainMenu.Edit.Order.MoveToTop="Ilipat sa &Tuktok"
445
+Basic.MainMenu.Edit.Order.MoveToBottom="Ilipat sa Ika (&B)"
446
+Basic.MainMenu.Edit.AdvAudio="&Advanced Audio Properties"
447
+
448
+Basic.MainMenu.View="&View"
449
+Basic.MainMenu.View.Toolbars="Mga &Toolbar"
450
+Basic.MainMenu.View.Docks="Docks"
451
+Basic.MainMenu.View.Docks.ResetUI="I-reset ang UI"
452
+Basic.MainMenu.View.Docks.LockUI="I-lock ang UI"
453
+Basic.MainMenu.View.Toolbars.Listboxes="Mga &Listbox"
454
+Basic.MainMenu.View.SceneTransitions="S&cene Mga Paglilipat"
455
+Basic.MainMenu.View.StatusBar="&Status bar"
456
+Basic.MainMenu.View.Fullscreen.Interface="Fullscreen Interface"
457
+
458
+Basic.MainMenu.SceneCollection="Kolek&syon ng Eksena"
459
+Basic.MainMenu.Profile="&Profile"
460
+Basic.MainMenu.Profile.Import="Mag-import ng Profile"
461
+Basic.MainMenu.Profile.Export="I-export ang Profile"
462
+Basic.MainMenu.SceneCollection.Import="Pag Angkat ng Nakolektang eksena"
463
+Basic.MainMenu.SceneCollection.Export="Magluwas ng Nakolektang Eksena"
464
+Basic.MainMenu.Profile.Exists="Ang Profile ay umiiral na ngayon"
465
+Basic.MainMenu.SceneCollection.Exists="Ang Nakolektang Eksena ay umiiral na ngayon"
466
+
467
+Basic.MainMenu.Tools="&Mga Kasangkapan"
468
+
469
+Basic.MainMenu.Help="&Tulong"
470
+Basic.MainMenu.Help.HelpPortal="Tulong &lagusan"
471
+Basic.MainMenu.Help.Website="Pagbisita &website"
472
+Basic.MainMenu.Help.Logs="Mag-&log ng mga File"
473
+Basic.MainMenu.Help.Logs.ShowLogs="&ipakita ang Pag-log ng mga File"
474
+Basic.MainMenu.Help.Logs.UploadCurrentLog="Mag-upload &Kasalukuyang Mag-log ng File"
475
+Basic.MainMenu.Help.Logs.UploadLastLog="Mag-upload &Huling pagla-log ng File"
476
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Tignan ang Kasalukuyang pagla-log"
477
+Basic.MainMenu.Help.CheckForUpdates="Magsiyasat para sa mga update"
478
+
479
+Basic.Settings.ProgramRestart="Ang mga programa ay dapat na-restart para sa mga maaapektuhan na setting."
480
+Basic.Settings.ConfirmTitle="Konpirmahin ang mga pagbabago"
481
+Basic.Settings.Confirm="Hindi mo nai-save ang mga pagbabago. Gusto mo bang i-save ang mga pagbabago?"
482
+
483
+Basic.Settings.General="Pangkalahatan"
484
+Basic.Settings.General.Theme="Tema"
485
+Basic.Settings.General.Language="Lenguwahe"
486
+Basic.Settings.General.EnableAutoUpdates="Awtomatikong pagsusuri para sa mga update tungkol sa startup"
487
+Basic.Settings.General.OpenStatsOnStartup="Magbukas ng palitang-usap ng awtomatikongng stats tungkol sa startup"
488
+Basic.Settings.General.WarnBeforeStartingStream="Ipakita ang konpirmasyon ng palitang-usap nang magsimula ang mga stream"
489
+Basic.Settings.General.WarnBeforeStoppingStream="Ipakita ang konpirmasyon ng palitang-usap nang ihinto ang mga stream"
490
+Basic.Settings.General.Projectors="Mga prodyektor"
491
+Basic.Settings.General.HideProjectorCursor="Itago ang kursor sa kabila ng mga prodyektor"
492
+Basic.Settings.General.ProjectorAlwaysOnTop="Gumawa ng mga prodyektor na laging nakakataas"
493
+Basic.Settings.General.Snapping="Pinagmulan ng Paghahanay na isnaping"
494
+Basic.Settings.General.ScreenSnapping="Paglagot sa mga Pinagmulan ukol sa gilid ng iskrin"
495
+Basic.Settings.General.CenterSnapping="Paglagot sa mga Pinagmulan ukol sa pahalang at patayong sentro"
496
+Basic.Settings.General.SourceSnapping="Paglagot sa mga Pinagmulan ukol sa iba pang mga pinagmulan"
497
+Basic.Settings.General.SnapDistance="Pagkamadamdam na Paglagot"
498
+Basic.Settings.General.RecordWhenStreaming="awtomatikong pagtala nang anod"
499
+Basic.Settings.General.KeepRecordingWhenStreamStops="Panatilihing ang pagtatala kahit tumigil ang stream"
500
+Basic.Settings.General.ReplayBufferWhileStreaming="Awtomatikong pagsisimula ng replay buffer kapag streaming"
501
+Basic.Settings.General.KeepReplayBufferStreamStops="Panatilihing aktibo ang replay buffer kahit tumigil ang stream"
502
+Basic.Settings.General.SysTray="Bandehadong Sistema"
503
+Basic.Settings.General.SysTrayWhenStarted="Magbawas sa bandehadong sistema kapag nagsimula na"
504
+Basic.Settings.General.SystemTrayHideMinimize="Palaging magbawas sa bandehadong sistema sa halip na task bar"
505
+Basic.Settings.General.SaveProjectors="I-save ang mga prodyektor sa labasan"
506
+Basic.Settings.General.SwitchOnDoubleClick="Paglipat sa eksena kahit makadalawang-pindot"
507
+Basic.Settings.General.StudioPortraitLayout="Paganahin ang larawan/vertical layout"
508
+Basic.Settings.General.MultiviewLayout="Multiview Layout"
509
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="Pahalang, Itaas"
510
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Pahalang, Pababa"
511
+Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, Sa kaliwa"
512
+Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, sa kanan"
513
+
514
+Basic.Settings.Stream="Stream"
515
+Basic.Settings.Stream.StreamType="Mga uri ng Stream"
516
+
517
+Basic.Settings.Output="Ang awput"
518
+Basic.Settings.Output.Format="Pagtatala ng recording"
519
+Basic.Settings.Output.Encoder="Encoder"
520
+Basic.Settings.Output.SelectDirectory="Piliin ang direktoryong pagtatala"
521
+Basic.Settings.Output.SelectFile="Piliin ang file ng pagtatala"
522
+Basic.Settings.Output.EnforceBitrate="Ipatupad ang serbisyo ng limitadong bitrate"
523
+Basic.Settings.Output.Mode="Awput Mode"
524
+Basic.Settings.Output.Mode.Simple="Simple"
525
+Basic.Settings.Output.Mode.Adv="Pagsulong"
526
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Awput"
527
+Basic.Settings.Output.UseReplayBuffer="Simulan ang pag replay ng buffer"
528
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Pinakamataas na oras ng replay (segundos)"
529
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Pinakamataas na memorya (Megabytes)"
530
+Basic.Settings.Output.ReplayBuffer.Estimate="Ang na estimang nagamit na memorya: %1 MB"
531
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Hindi ma-estima ang nagamit na memorya. Pakilagay ng pinakamataas na limitasyon ng memorya."
532
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Nota: Siguraduhin na naka takda ang hotkey para sa pag replay ng buffer sa bahaging hotkeys)"
533
+Basic.Settings.Output.ReplayBuffer.Prefix="Ang panlapi ng Replay Buffer Filename"
534
+Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
535
+Basic.Settings.Output.Simple.SavePath="Recording Path"
536
+Basic.Settings.Output.Simple.RecordingQuality="Pagrekord ng Kalidad"
537
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Parehong stream"
538
+Basic.Settings.Output.Simple.RecordingQuality.Small="Mataas na Kalidad, Katamtamang Laki ng File"
539
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size"
540
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Napakalaki ng Laki ng File"
541
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Babala: Ang bitrate ng streaming video ay itatakda sa%1, na kung saan ay ang itaas na limitasyon para sa kasalukuyang streaming service. Kung sigurado ka na gusto mong pumunta sa itaas%1, paganahin ang mga advanced na mga pagpipilian sa encoder at alisan ng tsek ang \"Ipatupad ang mga limitasyong bitrate ng service streaming\"."
542
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Babala: Itatakda ang streaming audio bitrate, na kung saan ay ang itaas na limitasyon para sa kasalukuyang streaming service. Kung sigurado ka na gusto mong pumunta sa itaas, paganahin ang mga advanced na pagpipilian ng encoder at alisan ng tsek ang \"Ipataw ang mga limitasyong bitrate ng service streaming\"."
543
+Basic.Settings.Output.Simple.Warn.Encoder="Babala: Ang pagrekord sa isang encoder ng software sa ibang kalidad kaysa sa stream ay mangangailangan ng dagdag na paggamit ng CPU kung mag-stream at mag-record ka sa parehong oras."
544
+Basic.Settings.Output.Simple.Warn.Lossless="Babala: Hindi mawawalan ng kalidad ang bumubuo ng napakalaking malalaking sukat ng file! Maaaring gumamit ng walang humpay na kalidad ng hanggang 7 gigabytes ng puwang ng disk kada minuto sa mataas na resolution at framerates. Ang hindi nawawala ay hindi inirerekomenda para sa mahabang pag-record maliban kung mayroon kang isang napakalaking halaga ng disk space na magagamit."
545
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigurado ka bang gusto mong gumamit ng kalidad na walang pagkawala?"
546
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless quality warning!"
547
+Basic.Settings.Output.Simple.Warn.MultipleQSV="Babala: Hindi ka maaaring gumamit ng maraming magkahiwalay na mga encoder ng QSV kapag nag-stream at nagre-record nang sabay. Kung nais mong i-stream at i-record nang sabay-sabay, mangyaring baguhin ang alinman sa encoder ng pag-record o stream encoder."
548
+Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
549
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
550
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
551
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
552
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 mababang preset ng paggamit ng CPU, nagpapataas ng laki ng file)"
553
+Basic.Settings.Output.VideoBitrate="Bitrate ng Video"
554
+Basic.Settings.Output.AudioBitrate="Bitrate ng Audio"
555
+Basic.Settings.Output.Reconnect="Awtomatikong mag-reconnect"
556
+Basic.Settings.Output.RetryDelay="Retry Delay (segundo)"
557
+Basic.Settings.Output.MaxRetries="Pinakamataas na Retries"
558
+Basic.Settings.Output.Advanced="Paganahin ang Mga Setting ng Advanced Encoder"
559
+Basic.Settings.Output.EncoderPreset="Encoder Preset (mas mataas = mas CPU)"
560
+Basic.Settings.Output.CustomEncoderSettings="Mga Setting ng Custom Encoder"
561
+Basic.Settings.Output.CustomMuxerSettings="Mga Setting ng Custom Muxer"
562
+Basic.Settings.Output.NoSpaceFileName="Bumuo ng Pangalan ng File nang walang Space"
563
+
564
+Basic.Settings.Output.Adv.Rescale="Rescale Output"
565
+Basic.Settings.Output.Adv.AudioTrack="Audio Track"
566
+Basic.Settings.Output.Adv.Streaming="Streaming"
567
+Basic.Settings.Output.Adv.ApplyServiceSettings="Ipatupad ang mga setting ng encoder ng streaming ng serbisyo"
568
+Basic.Settings.Output.Adv.Audio.Track1="Subaybayan ang 1"
569
+Basic.Settings.Output.Adv.Audio.Track2="Subaybayan ang 2"
570
+Basic.Settings.Output.Adv.Audio.Track3="Subaybayan ang 3"
571
+Basic.Settings.Output.Adv.Audio.Track4="Subaybayan ang 4"
572
+Basic.Settings.Output.Adv.Audio.Track5="Subaybayan ang 5"
573
+Basic.Settings.Output.Adv.Audio.Track6="Subaybayan ang 6"
574
+
575
+Basic.Settings.Output.Adv.Recording="Pagre-record"
576
+Basic.Settings.Output.Adv.Recording.Type="Uri"
577
+Basic.Settings.Output.Adv.Recording.Type.Standard="Standard"
578
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Custom Output (FFmpeg)"
579
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gamitin ang stream encoder)"
580
+Basic.Settings.Output.Adv.Recording.Filename="Pag-format ng Filename"
581
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="I-overwrite kung umiiral ang file"
582
+Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg Output Type"
583
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Output sa URL"
584
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Output to File"
585
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Mga format ng karaniwang recording"
586
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Lahat ng Mga File"
587
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Landas ng file or ang URL"
588
+Basic.Settings.Output.Adv.FFmpeg.Format="Lalagyang ng Format"
589
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Tunog"
590
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Bidyo"
591
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Default Format"
592
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Ang lagayan ng deskripsyon ng format"
593
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Tunog/Bidyo Codec guessed mula sa landas ng File or URL"
594
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Default Encoder"
595
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Huwag paganahin ang Encoder"
596
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Bidyo Encoder"
597
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Ang settings ng Bidyo Encoder(kung mayroon)"
598
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Tonog ng Encoder"
599
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Ang Settings ng Tonog Encoder(kung mayroon)"
600
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Ang mga Settings ng Muxer (kung mayroon)"
601
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Ang pagitan ng Keyframe (frames)"
602
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Ipakita lahat ng codecs (kahit itoy posibleng di-kompatibol)"
603
+
604
+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"
605
+
606
+FilenameFormatting.TT="%CCYY   Taon, apat na numero\n%YY       Taon, huling dalawang numero (00-99)\n%MM       Buwan bilang decimal na numero (01-12)\n%DD     Araw ng buwan, zero-padded (01-31)\n%hh     Oras sa 24h format (00-23)\n%mm     Minuto (00-59)\n%ss     Segundo (00-61)\n%%     A % tanda\n%a       Paikliin ang pangalan at araw ng trabaho\n%A        Buong araw ng trabaho ng pangalan\n%b       Paikliin ang pangalan at Buwan ng trabaho\n%B       Buong pangalan ng buwan\n%d     Araw ng Buwan, zero-padded (01-31)\n%H      Oras sa 24h format (00-23)\n%I      Oras sa 12h format (01-12)\n%m      Buwan bilang decimal na numero (01-12)\n%M      Minute (00-59)\n%p      AM or PM ng pagtatalaga\n%S     Segundo (00-61)\n%y     Taon, huling dalawang numero (00-99)\n%Y        Taon\n%z        ISO 8601 offset mula sa UTC or timezone\n       Pangalan or Pangpaikli\n%Z      Timezone na pangalan or pangpaikli\n"
607
+
608
+Basic.Settings.Video="Bidyo"
609
+Basic.Settings.Video.Adapter="Adapter ng Bidyo"
610
+Basic.Settings.Video.BaseResolution="Base (Kanbas) Resolusyon"
611
+Basic.Settings.Video.ScaledResolution="Output (Pinaliit) Resolusyon"
612
+Basic.Settings.Video.DownscaleFilter="Downscale Filter"
613
+Basic.Settings.Video.DisableAeroWindows="Huwag Paganahin ang Aero (Windows only)"
614
+Basic.Settings.Video.FPS="FPS"
615
+Basic.Settings.Video.FPSCommon="Karaniwang Balyo ng FPS"
616
+Basic.Settings.Video.FPSInteger="Balyo ng Integer FPS"
617
+Basic.Settings.Video.FPSFraction="Balyo ng Fractional FPS"
618
+Basic.Settings.Video.Numerator="Numerator"
619
+Basic.Settings.Video.Denominator="Denominator"
620
+Basic.Settings.Video.Renderer="Renderer"
621
+Basic.Settings.Video.InvalidResolution="Ang Balyo ng resolusyong ay imbalido. Dapat ito  [width]x[height] (i.e. 1920x1080)"
622
+Basic.Settings.Video.CurrentlyActive="Ang kasulukuyang Bidyo output ay aktibo. Paki turn off ang anumang output para mabago ang bidyo settings."
623
+Basic.Settings.Video.DisableAero="Hindi paganahin ang Aero"
624
+
625
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Pinakamabilis, pero malabo pag mag i-scaling)"
626
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Sharpened scaling, 16 mga halimbawa)"
627
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Sharpened scaling, 32 mga halimbawa)"
628
+
629
+Basic.Settings.Audio="Tunog"
630
+Basic.Settings.Audio.SampleRate="Halimbawa ng Antas"
631
+Basic.Settings.Audio.Channels="Mga Channel"
632
+Basic.Settings.Audio.MeterDecayRate="Ang Audio Meter Decay Rate"
633
+Basic.Settings.Audio.MeterDecayRate.Fast="Pabilisin"
634
+Basic.Settings.Audio.MeterDecayRate.Medium="Katamtaman (Tipo I PPM)"
635
+Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Tipo II PPM)"
636
+Basic.Settings.Audio.MultiChannelWarning.Enabled="Babala: Ang Surround sound audio ay naka andar."
637
+Basic.Settings.Audio.MultichannelWarning="Kung nag streaming, paki tignan kung ang iyong streaming service ay parehong supportado ang surround sound ingest at surround sound playback. Twitch, Facebook, 360 Live, Mixer RTMP, Smashcast ay ang mga halimbawa kung saan ang surround sound ay ganap na suportado, pati YouTube Live umaandar lamang sa dawalang channels.\n\nOBS audio filters ay kompatibol lamang sa surround sound, pero hindi siguradong supportado ang VST plugin."
638
+Basic.Settings.Audio.MultichannelWarning.Title="Paganahin ang surround sound audio?"
639
+Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba gusto mong paganahin ang surround sound audio?"
640
+Basic.Settings.Audio.DesktopDevice="Ang Kagamitan sa Desktop Audio"
641
+Basic.Settings.Audio.DesktopDevice2="Ang 2 Kagamitan sa Desktop Audio"
642
+Basic.Settings.Audio.AuxDevice="Mic / Auxiliary Audio Device"
643
+Basic.Settings.Audio.AuxDevice2="Mic / Auxiliary Audio Device 2"
644
+Basic.Settings.Audio.AuxDevice3="Mic / Auxiliary Audio Device 3"
645
+Basic.Settings.Audio.EnablePushToMute="Paganahin ang Push-to-mute"
646
+Basic.Settings.Audio.PushToMuteDelay="Push-to-mute delay"
647
+Basic.Settings.Audio.EnablePushToTalk="Paganahin ang Push-to-talk"
648
+Basic.Settings.Audio.PushToTalkDelay="Push-to-talk delay"
649
+Basic.Settings.Audio.UnknownAudioDevice="[Hindi konektado o hindi magagamit ang device]"
650
+
651
+Basic.Settings.Advanced="Advanced"
652
+Basic.Settings.Advanced.General.ProcessPriority="Prayoridad sa Proseso"
653
+Basic.Settings.Advanced.General.ProcessPriority.High="Mataas"
654
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Higit sa Normal"
655
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
656
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Mas mababa sa normal"
657
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Walang ginagawa"
658
+Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng kulay maliban sa NV12 ay pangunahing inilaan para sa pag-record, at hindi inirerekomenda kapag nag-stream. Maaaring mapalawak ng streaming ang paggamit ng CPU dahil sa conversion ng format ng kulay."
659
+Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time"
660
+Basic.Settings.Advanced.Video.ColorFormat="Format ng Kulay"
661
+Basic.Settings.Advanced.Video.ColorSpace="Ang espasyong kulay ng YUV"
662
+Basic.Settings.Advanced.Video.ColorRange="Ang saklaw ng kulay ng YUV"
663
+Basic.Settings.Advanced.Video.ColorRange.Partial="Bahagyang"
664
+Basic.Settings.Advanced.Video.ColorRange.Full="Buo"
665
+Basic.Settings.Advanced.Audio.MonitoringDevice="Ang kagamitan para sa Audio Monitoring"
666
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="I-Default"
667
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang Windows audio ducking"
668
+Basic.Settings.Advanced.StreamDelay="Ang Antala ng Stream"
669
+Basic.Settings.Advanced.StreamDelay.Duration="Ang Katagalan (segundo)"
670
+Basic.Settings.Advanced.StreamDelay.Preserve="Ingatang ang cutoff point (pataas ng antala) kapang kumokonekta"
671
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Ang na estimang nagamit na memorya: %1 MB"
672
+Basic.Settings.Advanced.Network="Network"
673
+Basic.Settings.Advanced.Network.BindToIP="Ibigkis sa IP"
674
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Paganahin ang bagong networking code"
675
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Mababang latency mode"
676
+
677
+Basic.AdvAudio="Ang aria-arian ng Advanced Audio"
678
+Basic.AdvAudio.Name="Pangalan"
679
+Basic.AdvAudio.Volume="Kalakasan (%)"
680
+Basic.AdvAudio.Mono="Downmix ito sa Mono"
681
+Basic.AdvAudio.Panning="Ang Panning"
682
+Basic.AdvAudio.SyncOffset="Ang Sync Offset (ms)"
683
+Basic.AdvAudio.Monitoring="Ang subaybay ng Audio"
684
+Basic.AdvAudio.Monitoring.None="I-Off ang Monitor"
685
+Basic.AdvAudio.Monitoring.MonitorOnly="Monitor lamang (i-mute ang output)"
686
+Basic.AdvAudio.Monitoring.Both="Monitor at Awput"
687
+Basic.AdvAudio.AudioTracks="Mga Tracks"
688
+
689
+Basic.Settings.Hotkeys="Ang mga Hotkeys"
690
+Basic.Settings.Hotkeys.Pair="Ang nabahaging kombinasyon ng susi na may '%1' akto sa toggles"
691
+
692
+Basic.Hotkeys.SelectScene="Lumipat sa eksena"
693
+
694
+Basic.SystemTray.Show="Ipakita"
695
+Basic.SystemTray.Hide="Itago"
696
+
697
+Basic.SystemTray.Message.Reconnecting="Nadiskonek. Kumokonekta..."
698
+
699
+Hotkeys.Insert="Ipasok"
700
+Hotkeys.Delete="Burahin"
701
+Hotkeys.Home="Pinagmulan"
702
+Hotkeys.End="Tapos"
703
+Hotkeys.PageUp="Itaas ng Pahina"
704
+Hotkeys.PageDown="Ibaba ng pahina"
705
+Hotkeys.NumLock="Num Lock"
706
+Hotkeys.ScrollLock="Scroll Lock"
707
+Hotkeys.CapsLock="Caps Lock"
708
+Hotkeys.Backspace="Backspace"
709
+Hotkeys.Tab="Tab"
710
+Hotkeys.Print="Printa"
711
+Hotkeys.Pause="Itigil"
712
+Hotkeys.Left="Kaliwa"
713
+Hotkeys.Right="Kanan"
714
+Hotkeys.Up="Itaas"
715
+Hotkeys.Down="Ibaba"
716
+Hotkeys.Windows="Windows"
717
+Hotkeys.Super="Super"
718
+Hotkeys.Menu="Pagpipilian"
719
+Hotkeys.Space="Espasyo"
720
+Hotkeys.NumpadNum="Numpad %1"
721
+Hotkeys.NumpadMultiply="Paramihin ang Numpad"
722
+Hotkeys.NumpadDivide="Hatiin ang Numpad"
723
+Hotkeys.NumpadAdd="Magdagdag ng Numpad"
724
+Hotkeys.NumpadSubtract="Magbawas ng Numpad"
725
+Hotkeys.NumpadDecimal="Numero ng Numpad"
726
+Hotkeys.AppleKeypadNum="%1 (Keypad)"
727
+Hotkeys.AppleKeypadMultiply="* (Keypad)"
728
+Hotkeys.AppleKeypadDivide="/ (Keypad)"
729
+Hotkeys.AppleKeypadAdd="+ (Keypad)"
730
+Hotkeys.AppleKeypadSubtract="- (Keypad)"
731
+Hotkeys.AppleKeypadDecimal=". (Keypad)"
732
+Hotkeys.AppleKeypadEqual="= (Keypad)"
733
+Hotkeys.MouseButton="Mouse %1"
734
+
735
+Mute="I-Mute"
736
+Unmute="I-Unmute"
737
+Push-to-mute="Pindutin-para-i-mute"
738
+Push-to-talk="Pindutan-para-magsalita"
739
+
740
+SceneItemShow="Ipakita '%1'"
741
+SceneItemHide="Itago '%1'"
742
+
743
+OutputWarnings.NoTracksSelected="Dapat pumili ka ng kahit isang track"
744
+OutputWarnings.MultiTrackRecording="Babala: Tiyak na pormat (gaya ng FLV) hindi suportado ang maraming tracks kada recording"
745
+OutputWarnings.MP4Recording="Babala: Ang Recording na naka-save sa MP4 ay hindi unrecoverable kung ang file any hindi tinapos (e.g bilang resulta nito BSODs, power losses, atbp.). Kung gusto mo i-record ng maraming audio tracks isaalang-alang ang paggamit ng MKV at remux ang recording para sa mp4 pagkatapos nitong matapos (File->Remux Recordings)"
746
+
747
+FinalScene.Title="Tanggaling ang Eksena"
748
+FinalScene.Text="Doon kailangan ng kahit isang eksena."
749
+
750
obs-studio-21.0.3.tar.xz/UI/data/locale/he-IL.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/he-IL.ini Changed
171
 
1
@@ -28,16 +28,21 @@
2
 Mono="מונו"
3
 Stereo="סטריאו"
4
 DroppedFrames="השמטת תמונות %1 (%2%)"
5
+StudioProgramProjector="מקרן מסך מלא (תוכנה)"
6
 PreviewProjector="מקרן מסך מלא (תצוגה מקדימה)"
7
 SceneProjector="מקרן מסך מלא (סצנה)"
8
 SourceProjector="מקרן מסך מלא (מקור)"
9
+StudioProgramWindow="מקרן חלון (תוכנה)"
10
 PreviewWindow="הקרנה בחלון (תצוגה מקדימה)"
11
 SceneWindow="הקרנה בחלון (סצנה)"
12
 SourceWindow="הקרנה בחלון (מקור)"
13
+MultiviewProjector="תצוגה מרובה (מסך מלא)"
14
+MultiviewWindowed="תצוגה מרובה (חלון)"
15
 Clear="נקה"
16
 Revert="החזר לקדמותו"
17
 Show="הצג"
18
 Hide="הסתר"
19
+UnhideAll="הצג הכל"
20
 Untitled="ללא כותרת"
21
 New="חדש"
22
 Duplicate="שכפל"
23
@@ -66,6 +71,13 @@
24
 RemuxRecordings="רימיקס הקלטות"
25
 Next="הבא"
26
 Back="קודם"
27
+Defaults="ברירות מחדל"
28
+HideMixer="מוחבא בתוך המיקסר"
29
+TransitionOverride="מעבר דרוס"
30
+None="ללא"
31
+StudioMode.Preview="תצוגה מקדימה"
32
+StudioMode.Program="תוכנה"
33
+ShowInMultiview="הראה בתצוגה מרובה"
34
 
35
 AlreadyRunning.Title="OBS פועל כבר"
36
 AlreadyRunning.Text="OBS פועל כבר!  אלא אם התכוונת לעשות את זה, אנא סגור כל מופע קיים לפני נסיון להפעיל מופע חדש.  אנא בדוק אם קיים מופע  הגדר ממוזער במגש המערכת."
37
@@ -110,6 +122,7 @@
38
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding="העדף קידוד בחומרה"
39
 Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="קידוד בחומרה מבטלת רוב השימוש ב- CPU, אבל עשויים לדרוש קצב נתונים גבוה יותר בכדי להשיג את אותה רמת איכות."
40
 Basic.AutoConfig.StreamPage.StreamWarning.Title="אזהרת זרם"
41
+Basic.AutoConfig.StreamPage.StreamWarning.Text="בדיקת רוחב הפס עומדת להזרים נתוני וידאו אקראיים ללא שמע לערוץ שלך. אם אתה מסוגל, מומלץ לבטל באופן זמני את שמירת קטעי הוידאו של הזרם וקבע את הזרם לפרטי עד לאחר שהבדיקה תסתיים. להמשיך?"
42
 Basic.AutoConfig.TestPage="תוצאות סופיות"
43
 Basic.AutoConfig.TestPage.SubTitle.Testing="התוכנית מתבצעת עכשיו סט של בדיקות כדי להעריך את ההגדרות המיטביות"
44
 Basic.AutoConfig.TestPage.SubTitle.Complete="הבדיקה הסתיימה"
45
@@ -156,6 +169,7 @@
46
 Updater.NoUpdatesAvailable.Text="אין עדכונים זמינים כעת"
47
 Updater.FailedToLaunch="נכשלה הפעלת העידכון"
48
 Updater.GameCaptureActive.Title="לכידת משחק פעיל"
49
+Updater.GameCaptureActive.Text="לכידת משחק נמצאת כעת בשימוש. בבקשה סגור את המשחקים/תוכנות שנמצאים בלכידה (או הפעל מחדש את ווינדוס) ונסה שינת."
50
 
51
 QuickTransitions.SwapScenes="החלף סצינות תצוגה מקדימה/פלט לאחר המעבר"
52
 QuickTransitions.SwapScenesTT="החלף הסצינות של התצוגה המקדימה ושל הפלט לאחר המעבר (באם הסצינה המקורית של הפלט עדיין קיימת). \n פעולה זו לא תבטל כל שינוי שייתכן ובוצע לסצינה המקורית של הפלט."
53
@@ -200,6 +214,7 @@
54
 Output.StartStreamFailed="נכשלה הפעלת זרימה"
55
 Output.StartRecordingFailed="נכשלה הפעלת הקלטה"
56
 Output.StartReplayFailed="נכשלה הפעלת מאגר החוזר"
57
+Output.StartFailedGeneric="הפלט נכשל. בבקשה בדוק את הרישומים עבור. \n\nNote: אם אתה משתמש בNVNEC או AMD מקודדים, הקפד שמנהלי ההתקן של הכרטיס מסך מעודכנים."
58
 
59
 Output.ConnectFail.Title="ההתחברות נכשלה"
60
 Output.ConnectFail.BadPath="URL לא חוקי של נתיב או חיבור.  נא בדוק את ההגדרות שלך כדי לוודא כי הם נכונים."
61
@@ -214,6 +229,8 @@
62
 Output.RecordNoSpace.Msg="אין די שטח דיסק כדי להמשיך הקלטה."
63
 Output.RecordError.Title="שגיאה הקלטה"
64
 Output.RecordError.Msg="אירעה שגיאה לא מוגדרת בזמן ההקלטה."
65
+Output.ReplayBuffer.NoHotkey.Title="אין מקש קיצור שנבחר!"
66
+Output.ReplayBuffer.NoHotkey.Msg="אין hotkey שמור למאגר החוזר. בבקשה הגדר את \"שמור\" hotkey לשימוש עבור שמירת מאגר חוזר להקלטות."
67
 
68
 Output.BadPath.Title="נתיב קובץ לא תקין"
69
 Output.BadPath.Text="נתיב פלט הקובץ שהוגדר אינו חוקי.  נא בדוק את הגדרות כדי לוודא שנתיב קובץ תקני נקבע."
70
@@ -295,6 +312,8 @@
71
 
72
 RenameProfile.Title="שנה שם פרופיל"
73
 
74
+Basic.Main.MixerRename.Title="שינוי שם מקור שמע"
75
+Basic.Main.MixerRename.Text="בבקשה הכנס את שם קובץ השמע"
76
 
77
 
78
 Basic.Main.PreviewDisabled="תצוגה מקדימה אינה זמינה כעת"
79
@@ -374,6 +393,7 @@
80
 
81
 Basic.Main.Scenes="סצינות"
82
 Basic.Main.Sources="מקורות"
83
+Basic.Main.Controls="בקרה"
84
 Basic.Main.Connecting="מתחבר..."
85
 Basic.Main.StartRecording="התחל הקלטה"
86
 Basic.Main.StartReplayBuffer="התחל מאגר החוזר"
87
@@ -429,19 +449,27 @@
88
 
89
 Basic.MainMenu.View="&מבט"
90
 Basic.MainMenu.View.Toolbars="&סרגלי כלים"
91
+Basic.MainMenu.View.Docks="עגינה"
92
+Basic.MainMenu.View.Docks.ResetUI="איפוס UI"
93
+Basic.MainMenu.View.Docks.LockUI="נעילת UI"
94
 Basic.MainMenu.View.Toolbars.Listboxes="&תיבות רשימה"
95
 Basic.MainMenu.View.SceneTransitions="&מעברי סצינות"
96
 Basic.MainMenu.View.StatusBar="&שורת מצב"
97
+Basic.MainMenu.View.Fullscreen.Interface="ממשק מסך מלא"
98
 
99
 Basic.MainMenu.SceneCollection="אוסף סצינות(&S)"
100
 Basic.MainMenu.Profile="פרופיל(&P)"
101
 Basic.MainMenu.Profile.Import="ייבא פרופיל"
102
 Basic.MainMenu.Profile.Export="ייצא פרופיל"
103
+Basic.MainMenu.SceneCollection.Import="ייבא אוסף סצינות"
104
+Basic.MainMenu.SceneCollection.Export="ייצא אוסף סצנות"
105
 Basic.MainMenu.Profile.Exists="הפרופיל קיים כבר"
106
+Basic.MainMenu.SceneCollection.Exists="אוסף הסצנות כבר קיים"
107
 
108
 Basic.MainMenu.Tools="& כלים"
109
 
110
 Basic.MainMenu.Help="עזרה(&H)"
111
+Basic.MainMenu.Help.HelpPortal="עזרה & פורטל"
112
 Basic.MainMenu.Help.Website="בקר אתר(&W)"
113
 Basic.MainMenu.Help.Logs="קבצי יומן רישום(&L)"
114
 Basic.MainMenu.Help.Logs.ShowLogs="הצג קבצי יומן רישום(&S)"
115
@@ -458,10 +486,12 @@
116
 Basic.Settings.General.Theme="ערכת עיצוב"
117
 Basic.Settings.General.Language="שפה"
118
 Basic.Settings.General.EnableAutoUpdates="בדוק באופן אוטומטי אם יש עדכונים בעת ההפעלה"
119
+Basic.Settings.General.OpenStatsOnStartup="פתח סטטיסטיקת דיאלוג בעת ההפעלה"
120
 Basic.Settings.General.WarnBeforeStartingStream="הצג תיבת דו-שיח לאישור בעת הפעלת זרם נתונים"
121
 Basic.Settings.General.WarnBeforeStoppingStream="הצג תיבת דו-שיח לאישור בעת עצירת זרם נתונים"
122
 Basic.Settings.General.Projectors="מקרנים"
123
 Basic.Settings.General.HideProjectorCursor="הסתר את הסמן מעל מקרנים"
124
+Basic.Settings.General.ProjectorAlwaysOnTop="הפוך מקרנים תמיד בעליון"
125
 Basic.Settings.General.Snapping="יישור הצמדת מקור"
126
 Basic.Settings.General.ScreenSnapping="הצמד מקורות לקצה המסך"
127
 Basic.Settings.General.CenterSnapping="הצמד מקורות למרכז אופקי ואנכי"
128
@@ -469,10 +499,19 @@
129
 Basic.Settings.General.SnapDistance="רגישות צמד"
130
 Basic.Settings.General.RecordWhenStreaming="הקלטה אוטומטית בעת הזרמת נתונים"
131
 Basic.Settings.General.KeepRecordingWhenStreamStops="המשך הקלטה כאשר הזרמת נתונים מפסיקה"
132
+Basic.Settings.General.ReplayBufferWhileStreaming="הפעל מאגר חוזר באופן אוטומטי בעת הזרמה"
133
+Basic.Settings.General.KeepReplayBufferStreamStops="השאר את המאגר החוזר פעיל כאשר ההזרמה מפסיקה"
134
 Basic.Settings.General.SysTray="מגש המערכת"
135
 Basic.Settings.General.SysTrayWhenStarted="מזער למגש המערכת בתחילה"
136
 Basic.Settings.General.SystemTrayHideMinimize="מזער תמיד למגש המערכת במקום שורת המשימות"
137
 Basic.Settings.General.SaveProjectors="שמור את המקרנים ביציאה"
138
+Basic.Settings.General.SwitchOnDoubleClick="מעבר לסצנה על ידי הקלקה כפולה"
139
+Basic.Settings.General.StudioPortraitLayout="אפשר פריסה אנכית/דיוקן"
140
+Basic.Settings.General.MultiviewLayout="פריסת תצוגה מרובה"
141
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="אופקי, עליון"
142
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="אופקי, תחתון"
143
+Basic.Settings.General.MultiviewLayout.Vertical.Left="אנכי, שמאל"
144
+Basic.Settings.General.MultiviewLayout.Vertical.Right="אנכי, ימין"
145
 
146
 Basic.Settings.Stream="זרם נתונים"
147
 Basic.Settings.Stream.StreamType="סוג זרם נתונים"
148
@@ -592,6 +631,14 @@
149
 Basic.Settings.Audio="אודיו"
150
 Basic.Settings.Audio.SampleRate="קצב דגימה"
151
 Basic.Settings.Audio.Channels="ערוצים"
152
+Basic.Settings.Audio.MeterDecayRate="קצב דעיכה ממד שמע"
153
+Basic.Settings.Audio.MeterDecayRate.Fast="מהיר"
154
+Basic.Settings.Audio.MeterDecayRate.Medium="בינוני (סוג I PPM)"
155
+Basic.Settings.Audio.MeterDecayRate.Slow="איטי (סוג II PPM)"
156
+Basic.Settings.Audio.MultiChannelWarning.Enabled="אזהרה: שמע צליל היקפי מאופשר."
157
+Basic.Settings.Audio.MultichannelWarning="אם הזרימה, בדוק את הזרמת השירות תומך בסראונד סאונד להבלע ואת היקפי הסראונד פלייבק. טוויץ',פייסבוק,360 Liev, מיקסר RTMP, Smashcast דוגמאות לאיפה שסראונד סאונד הוא נתמך. למרות פייסבוק לייב ויוטיוב לייב שניהם מאפשרים סראונד להבלע, פייסבוק לייב משנה לסטריאו ויוטיוב לייב מפעיל בשני ערוצים. \n\nOBS Studio מסנן עם הסראונד סאונד, למרות תמיכת תוסף VST אינו מאובטח."
158
+Basic.Settings.Audio.MultichannelWarning.Title="האם להפעיל שמע צליל היקפי?"
159
+Basic.Settings.Audio.MultichannelWarning.Confirm="אתה בטוח שאתה רוצה לאפשר קול שמע מקיף?"
160
 Basic.Settings.Audio.DesktopDevice="התקן שמע בשולחן עבודה"
161
 Basic.Settings.Audio.DesktopDevice2="התקן שמע בשולחן עבודה 2"
162
 Basic.Settings.Audio.AuxDevice="התקן שמע מיקרופון/עזר"
163
@@ -608,6 +655,7 @@
164
 Basic.Settings.Advanced.General.ProcessPriority.High="גבוה"
165
 Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="מעל לרגיל"
166
 Basic.Settings.Advanced.General.ProcessPriority.Normal="רגיל"
167
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="מתחת לעדיפות רגילה"
168
 Basic.Settings.Advanced.General.ProcessPriority.Idle="לא פעיל"
169
 Basic.Settings.Advanced.FormatWarning="אזהרה: תבניות צבע שונות מ-NV12 נועדו בעיקר עבור הקלטה, והם אינם מומלצות בעת הזרמת נתונים.  הזרמת נתונים עלולה לגרום למשאבי עיבוד מוגברים כתוצאה מהמרת תבנית צבע."
170
 Basic.Settings.Advanced.Audio.BufferingTime="זמן אוגר שמע"
171
obs-studio-21.0.3.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/ja-JP.ini Changed
20
 
1
@@ -28,15 +28,15 @@
2
 Mono="モノラル"
3
 Stereo="ステレオ"
4
 DroppedFrames="ドロップしたフレーム %1 (%2%)"
5
-StudioProgramProjector="全画面プロジェクター (プログラム)"
6
+StudioProgramProjector="全画面プロジェクター (番組)"
7
 PreviewProjector="全画面プロジェクター (プレビュー)"
8
 SceneProjector="全画面プロジェクター (シーン)"
9
 SourceProjector="全画面プロジェクター (ソース)"
10
-StudioProgramWindow="ウィンドウ付きプロジェクター (プログラム)"
11
+StudioProgramWindow="ウィンドウ プロジェクター (番組)"
12
 PreviewWindow="ウィンドウ プロジェクター (プレビュー)"
13
 SceneWindow="ウィンドウ プロジェクター (シーン)"
14
 SourceWindow="ウィンドウ プロジェクター (ソース)"
15
-MultiviewProjector="マルチビュー (フルスクリーン)"
16
+MultiviewProjector="マルチビュー (全画面)"
17
 MultiviewWindowed="マルチビュー (ウィンドウ)"
18
 Clear="クリア"
19
 Revert="元に戻す"
20
obs-studio-21.0.3.tar.xz/UI/data/locale/ka-GE.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/ka-GE.ini Changed
69
 
1
@@ -1,6 +1,9 @@
2
 
3
+Language="ქართული"
4
+Region="საქართველო"
5
 
6
 OK="კაი"
7
+Apply="მიღება"
8
 Cancel="გაუქმება"
9
 Close="დახურვა"
10
 Save="შენახვა"
11
@@ -11,16 +14,22 @@
12
 Add="დამატება"
13
 Remove="წაშლა"
14
 Rename="გადარქმევა"
15
+Interact="ურთიერთქმედება"
16
 Filters="ფილტრები"
17
+Properties="პარამეტრები"
18
 MoveUp="ზევით"
19
 MoveDown="ქვევით"
20
 Settings="პარამეტრები"
21
+Display="ეკრანი"
22
 Name="სახელი"
23
 Exit="გასვლა"
24
 Mixer="მიქშერი"
25
 Browse="მოძიება"
26
 Mono="მონო"
27
 Stereo="სტერეო"
28
+DroppedFrames="კადრების ვარდნა %1 (%2%)"
29
+Clear="გასუფთავება"
30
+Revert="დაბრუნება"
31
 Show="ჩვენება"
32
 Hide="დამალვა"
33
 UnhideAll="ყველაფრის გამოჩენა"
34
@@ -30,10 +39,32 @@
35
 Enable="ჩართვა"
36
 DisableOSXVSync="OSX V-Sync-ის გამორთვა"
37
 ResetOSXVSyncOnExit="OSX V-Sync-ის გადატვირთვა გასვლისას"
38
+HighResourceUsage="დამშიფრავი გადაიტვირთა! სცადეთ ვიდეოს პარამეტრების შემცირება, ან უფრო სწრაფი შიფრაციის პარამეტრების გამოყენება."
39
+Transition="გადასვლა"
40
+QuickTransitions="სწრაფი გადასვლები"
41
+Left="მარცხნივ"
42
+Right="მარჯვნივ"
43
+Top="ზემოთ"
44
+Bottom="ქვემოთ"
45
+Reset="განულება"
46
+Hours="საათი"
47
 Minutes="წუთი"
48
 Seconds="წამი"
49
-
50
-
51
+Deprecated="მოძველებული"
52
+ReplayBuffer="უკან გადახვევის დრო"
53
+Import="შემოტანა"
54
+Export="გატანა"
55
+Copy="დაკოპირება"
56
+Paste="ჩასმა"
57
+Next="შემდეგ"
58
+Back="უკან"
59
+Defaults="ნაგულისხმევი"
60
+
61
+AlreadyRunning.Title="OBS უკვე გაშვებულია"
62
+AlreadyRunning.Text="OBS უკვე გაშვებულია! გთხოვთ, ჯერ დახუროთ OBS-ის ყველა გაშვებული პროცესი, სანამ ახლის გაშვებას შეეცდებით. თუ მითითებული გაქვთ, რომ დახურვის ნაცვლად, OBS სისტემურ არეში უნდა ჩაიკეცოს, გთხოვთ მანდაც გადაამოწმოთ, დარჩენილი ხომ არაა."
63
+AlreadyRunning.LaunchAnyway="მაინც გაშვება"
64
+
65
+Copy.Filters="ფილტრების დაკოპირება"
66
 
67
 
68
 
69
obs-studio-21.0.3.tar.xz/UI/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/nb-NO.ini Changed
10
 
1
@@ -61,7 +61,7 @@
2
 Minutes="Minutter"
3
 Seconds="Sekunder"
4
 Deprecated="Foreldet"
5
-ReplayBuffer="Omspill Buffer"
6
+ReplayBuffer="Omspillingsbuffer"
7
 Import="Importer"
8
 Export="Eksporter"
9
 Copy="Kopier"
10
obs-studio-21.0.3.tar.xz/UI/data/locale/nn-NO.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/nn-NO.ini Changed
46
 
1
@@ -7,6 +7,7 @@
2
 Cancel="Avbryt"
3
 Close="Lukk"
4
 Save="Lagre"
5
+Discard="Bryt av"
6
 Disable="Skrue av"
7
 Yes="Ja"
8
 No="Nei"
9
@@ -22,9 +23,13 @@
10
 Display="Skjerm"
11
 Name="Namn"
12
 Exit="Avslutt"
13
+Mixer="Blandar"
14
 Browse="Bla gjennom"
15
 Mono="Mono"
16
 Stereo="Stereo"
17
+DroppedFrames="Slopne bilete %1 (%2%)"
18
+StudioProgramProjector="Fullskjermframvisar (program)"
19
+PreviewProjector="Fullskjermframvisar (førehandsvising)"
20
 MultiviewProjector="Fleirvising (Fullskjerm)"
21
 MultiviewWindowed="Fleirvising (i vindauge)"
22
 Clear="Tøm"
23
@@ -33,6 +38,22 @@
24
 Untitled="Utan namn"
25
 New="Ny"
26
 Enable="Aktiver"
27
+Left="Venstre"
28
+Right="Høgre"
29
+Top="Topp"
30
+Bottom="Botn"
31
+Reset="Attendeset"
32
+Hours="Timar"
33
+Minutes="Minutt"
34
+Seconds="Sekund"
35
+Import="Innfør"
36
+Export="Utfør"
37
+Copy="Kopier"
38
+Paste="Lim inn"
39
+Next="Neste"
40
+Back="Attende"
41
+Defaults="Standardar"
42
+None="Ingen"
43
 StudioMode.Preview="Førehandsvising"
44
 StudioMode.Program="Program"
45
 
46
obs-studio-21.0.3.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/ru-RU.ini Changed
128
 
1
@@ -171,11 +171,11 @@
2
 Updater.GameCaptureActive.Title="Производится захват игры"
3
 Updater.GameCaptureActive.Text="Библиотека захвата игр уже используется. Закройте захватываемые игры/программы (или перезапустите Windows) и попробуйте ещё раз."
4
 
5
-QuickTransitions.SwapScenes="Замена Просмотра/Вывода Сцены После Перехода"
6
-QuickTransitions.SwapScenesTT="Замена просмотра и вывода сцены после перехода (если выходная оригинальная сцена до сих пор существует).\nЭто будет не отмена каких-либо изменений, что, возможно, было сделано в выходной оригинальной сцены."
7
-QuickTransitions.DuplicateScene="Повторяющиеся Сцены"
8
+QuickTransitions.SwapScenes="Менять местами сцены предпросмотра и вывода после перехода"
9
+QuickTransitions.SwapScenesTT="Меняет местами сцены предпросмотра и вывода после перехода (если оригинальная выходная сцена до сих пор существует).\nЭто не отменяет никаких изменений, которые возможно были сделаны в оригинальной выходной сцене."
10
+QuickTransitions.DuplicateScene="Дублировать сцену"
11
 QuickTransitions.DuplicateSceneTT="При редактировании одной и той же сцены, функция позволяет трансформировать редактирования/видимости источников без изменения выхода.\nДля редактирования свойств источников без изменения выходного сигнала, включить \"дублировать источники'.\nИзменение этого параметра приведет к сбросу выходного сигнала в сцене (если оно еще существует)."
12
-QuickTransitions.EditProperties="Дублировать Источники"
13
+QuickTransitions.EditProperties="Дублировать источники"
14
 QuickTransitions.EditPropertiesTT="При редактировании одной и той же сцены, функция позволяет редактировать свойства источников без изменения выхода.\nЭто может только использоваться, если \"Повторяющиеся Сцены\" включен.\nНекоторые источники (такие как захват или медиа-источники) не поддерживаются и не могут быть отредактированы отдельно.\nИзменение этого параметра приведет к сбросу выходного сигнала в сцене (если оно еще существует).\n\nПредупреждение: поскольку источники будут дублироваться, это может потребовать дополнительных системных ресурсов или видео."
15
 QuickTransitions.HotkeyName="Быстрый переход: %1"
16
 
17
@@ -274,10 +274,10 @@
18
 
19
 Basic.Main.PreviewConextMenu.Enable="Включить предпросмотр"
20
 
21
-ScaleFiltering="Фильтрация масштаба"
22
-ScaleFiltering.Point="Точечная"
23
-ScaleFiltering.Bilinear="Билинейная"
24
-ScaleFiltering.Bicubic="Бикубическая"
25
+ScaleFiltering="Фильтр масштабирования"
26
+ScaleFiltering.Point="Точечный"
27
+ScaleFiltering.Bilinear="Билинейный"
28
+ScaleFiltering.Bicubic="Бикубический"
29
 ScaleFiltering.Lanczos="Метод Ланцоша"
30
 
31
 Deinterlacing="Устранение чересстрочности"
32
@@ -399,12 +399,12 @@
33
 Basic.Main.StartReplayBuffer="Запустить повтор"
34
 Basic.Main.StartStreaming="Запустить трансляцию"
35
 Basic.Main.StopRecording="Остановить запись"
36
-Basic.Main.StoppingRecording="Остановка Записи..."
37
+Basic.Main.StoppingRecording="Остановка записи..."
38
 Basic.Main.StopReplayBuffer="Остановить повтор"
39
 Basic.Main.StoppingReplayBuffer="Остановка повтора..."
40
 Basic.Main.StopStreaming="Остановить трансляцию"
41
 Basic.Main.StoppingStreaming="Остановка вещания..."
42
-Basic.Main.ForceStopStreaming="Остановить передачу (отменить задержку)"
43
+Basic.Main.ForceStopStreaming="Остановить трансляцию (сбросить задержку)"
44
 
45
 Basic.MainMenu.File="&Файл"
46
 Basic.MainMenu.File.Export="&Экспорт"
47
@@ -413,7 +413,7 @@
48
 Basic.MainMenu.File.Remux="Ре&мультиплексирование записей"
49
 Basic.MainMenu.File.Settings="&Настройки"
50
 Basic.MainMenu.File.ShowSettingsFolder="Показать папку с настройками"
51
-Basic.MainMenu.File.ShowProfileFolder="Показать папку профиля"
52
+Basic.MainMenu.File.ShowProfileFolder="Показать папку с профилями"
53
 Basic.MainMenu.AlwaysOnTop="&Поверх других окон"
54
 Basic.MainMenu.File.Exit="&Выход"
55
 
56
@@ -423,15 +423,15 @@
57
 Basic.MainMenu.Edit.UndoAction="&Отменить $1"
58
 Basic.MainMenu.Edit.RedoAction="&Повторить $1"
59
 Basic.MainMenu.Edit.LockPreview="&Заблокировать предпросмотр"
60
-Basic.MainMenu.Edit.Scale="Просмотр и масштабирование"
61
+Basic.MainMenu.Edit.Scale="&Масштабирование предпросмотра"
62
 Basic.MainMenu.Edit.Scale.Window="Масштаб окна"
63
 Basic.MainMenu.Edit.Scale.Canvas="Холст (%1x%2)"
64
 Basic.MainMenu.Edit.Scale.Output="Вывод (%1x%2)"
65
-Basic.MainMenu.Edit.Transform="&Преобразовать"
66
-Basic.MainMenu.Edit.Transform.EditTransform="&Изменить преобразование..."
67
-Basic.MainMenu.Edit.Transform.CopyTransform="Копировать преобразование"
68
-Basic.MainMenu.Edit.Transform.PasteTransform="Вставить преобразование"
69
-Basic.MainMenu.Edit.Transform.ResetTransform="&Сбросить преобразование"
70
+Basic.MainMenu.Edit.Transform="&Трансформировать"
71
+Basic.MainMenu.Edit.Transform.EditTransform="&Изменить отображение..."
72
+Basic.MainMenu.Edit.Transform.CopyTransform="Скопировать трансформацию"
73
+Basic.MainMenu.Edit.Transform.PasteTransform="Вставить трансформацию"
74
+Basic.MainMenu.Edit.Transform.ResetTransform="&Сбросить трансформацию"
75
 Basic.MainMenu.Edit.Transform.Rotate90CW="Повернуть на 90 градусов по часовой"
76
 Basic.MainMenu.Edit.Transform.Rotate90CCW="Повернуть на 90 градусов против часовой"
77
 Basic.MainMenu.Edit.Transform.Rotate180="Повернуть на 180 градусов"
78
@@ -441,7 +441,7 @@
79
 Basic.MainMenu.Edit.Transform.StretchToScreen="&Растянуть на весь экран"
80
 Basic.MainMenu.Edit.Transform.CenterToScreen="&Разместить по центру экрана"
81
 Basic.MainMenu.Edit.Order="&Порядок"
82
-Basic.MainMenu.Edit.Order.MoveUp="Переместить &Выше"
83
+Basic.MainMenu.Edit.Order.MoveUp="Переместить &выше"
84
 Basic.MainMenu.Edit.Order.MoveDown="Переместить &Ниже"
85
 Basic.MainMenu.Edit.Order.MoveToTop="Переместить &Наверх"
86
 Basic.MainMenu.Edit.Order.MoveToBottom="Переместить &Вниз"
87
@@ -491,16 +491,16 @@
88
 Basic.Settings.General.WarnBeforeStoppingStream="Показывать окно подтверждения при остановке трансляции"
89
 Basic.Settings.General.Projectors="Проекторы"
90
 Basic.Settings.General.HideProjectorCursor="Скрыть курсор за проекторы"
91
-Basic.Settings.General.ProjectorAlwaysOnTop="Показывать проекторы поверх всего остального"
92
+Basic.Settings.General.ProjectorAlwaysOnTop="Показывать проекторы поверх всех окон"
93
 Basic.Settings.General.Snapping="Привязка расположения источника"
94
 Basic.Settings.General.ScreenSnapping="Привязка к краю экрана"
95
 Basic.Settings.General.CenterSnapping="Привязка к центру по горизонтали и вертикали"
96
 Basic.Settings.General.SourceSnapping="Привязка к другим источникам"
97
 Basic.Settings.General.SnapDistance="Чувствительность привязки"
98
-Basic.Settings.General.RecordWhenStreaming="Автоматическая запись при стриме"
99
-Basic.Settings.General.KeepRecordingWhenStreamStops="Продолжить запись, когда стрим остановится"
100
+Basic.Settings.General.RecordWhenStreaming="Автоматически включать запись во время трансляции"
101
+Basic.Settings.General.KeepRecordingWhenStreamStops="Продолжать запись после завершения трансляции"
102
 Basic.Settings.General.ReplayBufferWhileStreaming="Автоматически запускать буфер повтора во время трансляции"
103
-Basic.Settings.General.KeepReplayBufferStreamStops="Сохранять буфер повтора активным когда останавливается трансляция"
104
+Basic.Settings.General.KeepReplayBufferStreamStops="Сохранять буфер повтора активным после завершения трансляции"
105
 Basic.Settings.General.SysTray="Системный трей"
106
 Basic.Settings.General.SysTrayWhenStarted="Скрывать окно в системный трей при запуске"
107
 Basic.Settings.General.SystemTrayHideMinimize="Всегда сворачивать в трей вместо панели задач"
108
@@ -534,7 +534,7 @@
109
 Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Примечание: Убедитесь, что установили горячую клавишу для воспроизведения буфера в разделе горячие клавиши)"
110
 Basic.Settings.Output.ReplayBuffer.Prefix="Префикс имени файла повтора"
111
 Basic.Settings.Output.ReplayBuffer.Suffix="Суффикс"
112
-Basic.Settings.Output.Simple.SavePath="Путь к записи"
113
+Basic.Settings.Output.Simple.SavePath="Путь записи"
114
 Basic.Settings.Output.Simple.RecordingQuality="Качество записи"
115
 Basic.Settings.Output.Simple.RecordingQuality.Stream="То же, что у трансляции"
116
 Basic.Settings.Output.Simple.RecordingQuality.Small="Высокое качество, средний размер файла"
117
@@ -552,8 +552,8 @@
118
 Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Аппаратный (AМD)"
119
 Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Аппаратный (NVENC)"
120
 Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Программный (x264 с низкой нагрузкой на ЦП, увеличивает размер файла)"
121
-Basic.Settings.Output.VideoBitrate="Видео битрейт"
122
-Basic.Settings.Output.AudioBitrate="Аудио битрейт"
123
+Basic.Settings.Output.VideoBitrate="Битрейт видео"
124
+Basic.Settings.Output.AudioBitrate="Битрейт аудио"
125
 Basic.Settings.Output.Reconnect="Автопереподключение"
126
 Basic.Settings.Output.RetryDelay="Переподключиться через (секунд)"
127
 Basic.Settings.Output.MaxRetries="Количество попыток подключиться"
128
obs-studio-21.1.2.tar.xz/UI/data/locale/sq-AL.ini Added
172
 
1
@@ -0,0 +1,170 @@
2
+
3
+Language="Gjuha Angleze"
4
+Region="Shtetet e Bashkuara"
5
+
6
+OK="OK"
7
+Apply="Aplikoni"
8
+Cancel="Anuloni"
9
+Close="Mbylle"
10
+Save="Ruaj"
11
+Discard="Mos e ruaj"
12
+Disable="Çaktivizo"
13
+Yes="Po"
14
+No="Jo"
15
+Add="Shto"
16
+Remove="Largoje"
17
+Rename="Riemërto"
18
+Interact="Bashkëveprim"
19
+Filters="Filterar"
20
+Properties="Vetitë"
21
+MoveUp="Lëvize lart"
22
+MoveDown="Lëvize poshtë"
23
+Settings="Cilësimet"
24
+Display="Ekrani"
25
+Name="Emri"
26
+Exit="Dil"
27
+Mixer="Mikser"
28
+Browse="Shfleto"
29
+Mono="Mono"
30
+Stereo="Stereo"
31
+DroppedFrames="Kornizat e rëna %1 (%2%)"
32
+StudioProgramProjector="Projektor me ekran të plotë (Program)"
33
+PreviewProjector="Projektorë me ekran të plotë (Parashikim)"
34
+SceneProjector="Ekran me ekran të plotë (Skena)"
35
+SourceProjector="Projektorë me ekran të plotë (Burimi)"
36
+StudioProgramWindow="Projektor Windowed (Program)"
37
+PreviewWindow="Projektor Windowed (Parashikim)"
38
+SceneWindow="Projektor Windowed (Skena)"
39
+SourceWindow="Projektor Windowed (Burimi)"
40
+MultiviewProjector="Shumë pamje (Ekran i plotë)"
41
+MultiviewWindowed="Shumë pamje (Windowed)"
42
+Clear="Pastro"
43
+Revert="Rikthe"
44
+Show="Shfaq"
45
+Hide="Fsheh"
46
+UnhideAll="Zbuloni të gjitha"
47
+Untitled="I patitulluar"
48
+New="I ri"
49
+Duplicate="Dublikatë"
50
+Enable="Aktivizo"
51
+DisableOSXVSync="Çaktivizo OSX V-Sync"
52
+ResetOSXVSyncOnExit="Rivendos OSX V-Sync në Mbyllje"
53
+HighResourceUsage="Kodimi i mbingarkuar! Merrni parasysh uljen e cilësimeve të videos ose duke përdorur një parazgjedhje më të shpejtë të kodimit."
54
+Transition="Tranzicion"
55
+QuickTransitions="Tranzicione të shpejta"
56
+Left="Majtas"
57
+Right="Djathtas"
58
+Top="Kreu"
59
+Bottom="Fundi"
60
+Reset="Rivë"
61
+Hours="Orë"
62
+Minutes="Minuta"
63
+Seconds="Sekonda"
64
+Deprecated="I pazëvëndësueshëm"
65
+ReplayBuffer="Rifillimi Lustrues"
66
+Import="Importo"
67
+Export="Eksporto"
68
+Copy="Kopjo"
69
+Paste="Ngjit"
70
+PasteReference="Ngjit (Referim)"
71
+PasteDuplicate="Ngjit (Duplikatë)"
72
+RemuxRecordings="Regjistrimet e Remux"
73
+Next="Tjeter"
74
+Back="Prapa"
75
+Defaults="Parazgjedhura"
76
+HideMixer="Fshiheni në Mixer"
77
+TransitionOverride="Zhvendosja e tranzicionit"
78
+None="Asnje"
79
+StudioMode.Preview="Inspektim"
80
+StudioMode.Program="Program"
81
+ShowInMultiview="Shfaqe në Shumë Pamje"
82
+
83
+AlreadyRunning.Title="OBS tashmë po funksion"
84
+AlreadyRunning.Text="OBS tashmë po kandidon! Nëse nuk keni ndërmend ta bëni këtë, mbyllni çdo rast ekzistues të OBS para se të provoni të shkoni në një instancë të re. Nëse keni OBS vendosur për të minimizuar në tabaka e sistemit, ju lutemi kontrolloni për të parë nëse vazhdon të ekzekutohet atje."
85
+AlreadyRunning.LaunchAnyway="Filloje ne nje menyre"
86
+
87
+Copy.Filters="Kopjo Filterat"
88
+Paste.Filters="Ngjit Filterat"
89
+
90
+BandwidthTest.Region="Regjioni"
91
+BandwidthTest.Region.US="Shtetet e Bashkuara"
92
+BandwidthTest.Region.EU="Evropë"
93
+BandwidthTest.Region.Asia="Azi"
94
+BandwidthTest.Region.Other="Të tjera"
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
obs-studio-21.0.3.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/sv-SE.ini Changed
30
 
1
@@ -36,8 +36,8 @@
2
 PreviewWindow="Fönsterprojektor (förhandsvisning)"
3
 SceneWindow="Fönsterprojektor (scen)"
4
 SourceWindow="Fönsterprojektor (källa)"
5
-MultiviewProjector="Flervy (helskärm)"
6
-MultiviewWindowed="Flervy (fönster)"
7
+MultiviewProjector="Multivy (helskärm)"
8
+MultiviewWindowed="Multivy (fönster)"
9
 Clear="Rensa"
10
 Revert="Återgå"
11
 Show="Visa"
12
@@ -77,7 +77,7 @@
13
 None="Ingen"
14
 StudioMode.Preview="Förhandsvisning"
15
 StudioMode.Program="Program"
16
-ShowInMultiview="Visa i flervy"
17
+ShowInMultiview="Visa i multivy"
18
 
19
 AlreadyRunning.Title="OBS körs redan"
20
 AlreadyRunning.Text="OBS körs redan!  Såvida du gjorde detta med flit, stäng ned alla befintliga instanser av OBS innan du försöker köra en ny instans.  Om du har minimerat OBS till systemfältet, kontroller om det fortfarande körs där."
21
@@ -507,7 +507,7 @@
22
 Basic.Settings.General.SaveProjectors="Spara projektorer vid avslut"
23
 Basic.Settings.General.SwitchOnDoubleClick="Övergång till scen vid dubbelklick"
24
 Basic.Settings.General.StudioPortraitLayout="Aktivera porträtt-/vertikalt utseende"
25
-Basic.Settings.General.MultiviewLayout="Multivisningslayout"
26
+Basic.Settings.General.MultiviewLayout="Utseende för multivy"
27
 Basic.Settings.General.MultiviewLayout.Horizontal.Top="Horisontal, överkant"
28
 Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horisontal, nederkant"
29
 Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikal, vänster"
30
obs-studio-21.1.2.tar.xz/UI/data/locale/tl-PH.ini Added
753
 
1
@@ -0,0 +1,751 @@
2
+
3
+Language="Ingles"
4
+Region="Estados Unidos"
5
+
6
+OK="OK"
7
+Apply="Gamitin"
8
+Cancel="Kanselahin"
9
+Close="Isara"
10
+Save="I-save"
11
+Discard="Alisin"
12
+Disable="I-disable"
13
+Yes="Oo"
14
+No="Hindi"
15
+Add="Idagdag"
16
+Remove="Tanggalin"
17
+Rename="Palitan ang pangalan"
18
+Interact="Interact"
19
+Filters="Pansala"
20
+Properties="Mga Katangian"
21
+MoveUp="I-taas"
22
+MoveDown="I-baba"
23
+Settings="Mga Setting"
24
+Display="Ipakita"
25
+Name="Pangalan"
26
+Exit="Lumabas"
27
+Mixer="Mixer"
28
+Browse="Browse"
29
+Mono="Mono"
30
+Stereo="Stereo"
31
+DroppedFrames="Mga imaheng hindi sinali %1 (%2%)"
32
+StudioProgramProjector="Fullscreen Projector (Programa)"
33
+PreviewProjector="Fullscreen Projector (Preview)"
34
+SceneProjector="Fullscreen Projector (Eksena)"
35
+SourceProjector="Fullscreen Projector (Pinagmulan)"
36
+StudioProgramWindow="Windowed Projector (Programa)"
37
+PreviewWindow="Windowed Projector (Preview)"
38
+SceneWindow="Windowed Projector (Eksena)"
39
+SourceWindow="Windowed Projector (Pinagmulan)"
40
+MultiviewProjector="Multiview (Fullscreen)"
41
+MultiviewWindowed="Multiview (Windowed)"
42
+Clear="Linisin"
43
+Revert="Ibalik"
44
+Show="Ipakita"
45
+Hide="Itago"
46
+UnhideAll="Ipakita Lahat"
47
+Untitled="Walang pamagat"
48
+New="Bago"
49
+Duplicate="Kahalintulad"
50
+Enable="I-enable"
51
+DisableOSXVSync="I-disable ang OSX V-Sync"
52
+ResetOSXVSyncOnExit="I-set muli ang OSX V-Sync sa Exit"
53
+HighResourceUsage="Labis na ang karga sa pag-eencode! Pagisipan ang pagpapababa ng mga video setting o ang pag-gamit ng mas mabilis na encoding preset."
54
+Transition="Transisyon"
55
+QuickTransitions="Mabilis na mga Transisyon"
56
+Left="Kaliwa"
57
+Right="Kanan"
58
+Top="Tuktok"
59
+Bottom="Pinakababa"
60
+Reset="I-set muli"
61
+Hours="Mga oras"
62
+Minutes="Mga minuto"
63
+Seconds="Mga segundo"
64
+Deprecated="Hindi na ginagamit"
65
+ReplayBuffer="Replay Buffer"
66
+Import="I-angkat"
67
+Export="I-export"
68
+Copy="Kopyahin"
69
+Paste="I-paste"
70
+PasteReference="I-paste (Reperensya)"
71
+PasteDuplicate="I-paste (Kopya)"
72
+RemuxRecordings="Remux Recordings"
73
+Next="Sunod"
74
+Back="Bumalik"
75
+Defaults="Mga Default"
76
+HideMixer="Itago sa Mixer"
77
+TransitionOverride="Pagpapawalang-bisa ng Transisyon"
78
+None="Wala"
79
+StudioMode.Preview="Preview"
80
+StudioMode.Program="Programa"
81
+ShowInMultiview="Ipakita sa Multiview"
82
+
83
+AlreadyRunning.Title="Ang OBS ay tumatakbo na"
84
+AlreadyRunning.Text="Ang OBS ay tumatakbo na! Kung hindi mo ito sinasadya, mangyari lamang patayin ang mga umiiral na OBS bago subukang magpatakbo ng bago. Kung ikaw ay may OBS set na kailangan i-minimize sa system tray, mangyari lamang tingnan kung ito ay tumatakbo pa doon."
85
+AlreadyRunning.LaunchAnyway="Ilunsad pa rin"
86
+
87
+Copy.Filters="Kopyahin ang mga Panala"
88
+Paste.Filters="I-paste ang mga Panala"
89
+
90
+BandwidthTest.Region="Rehiyon"
91
+BandwidthTest.Region.US="Estados Unidos"
92
+BandwidthTest.Region.EU="Europa"
93
+BandwidthTest.Region.Asia="Asya"
94
+BandwidthTest.Region.Other="Iba pa"
95
+
96
+Basic.FirstStartup.RunWizard="Nais mo bang patakbuhin ang auto-configuration wizard? Maaari mo ring i-configure ang iyong mga setting ng mano-mano sa pamamagitan ng pagpindot ng Settings na button sa pangunahing window."
97
+Basic.FirstStartup.RunWizard.BetaWarning="(Tandaan: Ang auto-configuration wizard ay kasukuyang nasa beta)"
98
+Basic.FirstStartup.RunWizard.NoClicked="Kung magbabago ang iyong isip, maaari mong patakbuhin ang auto-configuration wizard sa anumang oras mula muli sa Tools na menu."
99
+
100
+Basic.AutoConfig="Auto-Configuration Wizard"
101
+Basic.AutoConfig.Beta="Auto-Configuration Wizard (Beta)"
102
+Basic.AutoConfig.ApplySettings="Gamitin ang mga Setting"
103
+Basic.AutoConfig.StartPage="Impormasyon ukol sa Paggamit"
104
+Basic.AutoConfig.StartPage.SubTitle="Tukuyin kung para saan mo gustong gamitin ang programa"
105
+Basic.AutoConfig.StartPage.PrioritizeStreaming="I-optimize para sa pag-stream, pangalawa lamang pag-rerekord"
106
+Basic.AutoConfig.StartPage.PrioritizeRecording="I-optimize para lamang sa pag-rerekord, Hindi ako mag-iistream"
107
+Basic.AutoConfig.VideoPage="Mga Setting sa Video"
108
+Basic.AutoConfig.VideoPage.SubTitle="Tukuyin ang mga setting ng video na gusto mong gamitin"
109
+Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Gamitin ang Pangkasalukuyang (%1x%2)"
110
+Basic.AutoConfig.VideoPage.BaseResolution.Display="Ipakita ang %1 (%2x%3)"
111
+Basic.AutoConfig.VideoPage.FPS.UseCurrent="Gamitin ang Pangkasalukuyang (%1)"
112
+Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 o 30, pero mas piliin ang 60 kung maaari"
113
+Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 o 30, pero mas piliin ang mataas na resolution"
114
+Basic.AutoConfig.VideoPage.CanvasExplanation="Tandaan: Ang kanbas (base) na resolution ay hindi kinakailangang katulad sa resolution na gagamitin mo sa pag-stream o pagrekord. Ang actual na resolution ng iyong stream/rekord ay maaaring pababain upang mabawasan ang gamit sa mga resource o mga kakailanganing bitrate."
115
+Basic.AutoConfig.StreamPage="Mag-stream ng Impormasyon"
116
+Basic.AutoConfig.StreamPage.SubTitle="Mangyari lamang ilagay ang impormasyon ng iyong pagstream"
117
+Basic.AutoConfig.StreamPage.Service="Serbisyo"
118
+Basic.AutoConfig.StreamPage.Service.ShowAll="Ipakita Lahat..."
119
+Basic.AutoConfig.StreamPage.Server="Serber"
120
+Basic.AutoConfig.StreamPage.StreamKey="Stream Key"
121
+Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)"
122
+Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimahin ang bitrate gamit ang bandwith test (maaaring tumagal ng ilang minuto)"
123
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Mas piliin ang hardware encoding"
124
+Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Ang Hardware Encoding ay nagtatanggal ng karamihan sa paggamit ng CPU, ngunit maaaring nangangailangan ito ng mas maraming bitrate upang magkaroon ng katulad na lebel ng kalidad."
125
+Basic.AutoConfig.StreamPage.StreamWarning.Title="Babala sa stream"
126
+Basic.AutoConfig.StreamPage.StreamWarning.Text="Ang bandwith test ay mag-iistream ng datos ng video nang walang audio sa iyong channel. Kung kaya mo, minumungkahi namin na pansamantala mong i-off ang pag-save ng mga video ng mga stream at gawing pribado ang stream hanggang sa matapos ang test. Magpatuloy?"
127
+Basic.AutoConfig.TestPage="Mga Huling Resulta"
128
+Basic.AutoConfig.TestPage.SubTitle.Testing="Ang programang ito ay nagapapatupad ngayon ng mga pagsusuri upang matantiya ang pinakamainam na mga setting"
129
+Basic.AutoConfig.TestPage.SubTitle.Complete="Natapos na ang pagsusuri"
130
+Basic.AutoConfig.TestPage.TestingBandwidth="Nagsasagaw ng bandwidth test, maaaring itong magtagal ng ilang minuto..."
131
+Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Kumukonekta sa: %1..."
132
+Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Bigong maka-konekta sa kahit anong mga serber, mangyari lamang suriin ang iyong koneksyon sa internet at subukan muli."
133
+Basic.AutoConfig.TestPage.TestingBandwidth.Server="Sinusuri ang bandwidth para sa: %1"
134
+Basic.AutoConfig.TestPage.TestingStreamEncoder="Sinusuri ang encoder ng stream, maaari itong magtagal ng isang minuto..."
135
+Basic.AutoConfig.TestPage.TestingRecordingEncoder="Sinusuri ang encoder para sa pagrekord, maaari itong magtagal ng isang minuto..."
136
+Basic.AutoConfig.TestPage.TestingRes="Sinusuri ang mga resolusyon, maaari itong magtagal ng ilang minuto..."
137
+Basic.AutoConfig.TestPage.TestingRes.Fail="Bigong mapatakbo ang encoder"
138
+Basic.AutoConfig.TestPage.TestingRes.Resolution="Sinusuri ang %1x%2 %3 FPS..."
139
+Basic.AutoConfig.TestPage.Result.StreamingEncoder="Encoder para sa Pag-stream"
140
+Basic.AutoConfig.TestPage.Result.RecordingEncoder="Encoder para sa Pagrekord"
141
+Basic.AutoConfig.TestPage.Result.Header="Napagtanto ng programa na ang mga setting na ito ang pinakamainam para sa iyo:"
142
+Basic.AutoConfig.TestPage.Result.Footer="Upang magamit ang mga setting, pindutin ang Apply Settings. Upang ma-configure muli ang wizard at subukang muli, pindutin ang Back. Upang ma-configure mo mismo nang mano-mano ang mga setting, pindutin ang Cancel at buksan ang mga Setting."
143
+
144
+Basic.Stats="Mga Statistika"
145
+Basic.Stats.CPUUsage="Paggamit ng CPU"
146
+Basic.Stats.HDDSpaceAvailable="Puwang sa HDD na magagamit pa"
147
+Basic.Stats.MemoryUsage="Paggamit ng Memorya"
148
+Basic.Stats.AverageTimeToRender="Karaniwang bilis upang ma-render ang frame"
149
+Basic.Stats.SkippedFrames="Mga nalaktawang imahe dahil sa antala sa pag-encode"
150
+Basic.Stats.MissedFrames="Mga imaheng di nakuha dahil sa antala sa pag-render"
151
+Basic.Stats.Output.Stream="Stream"
152
+Basic.Stats.Output.Recording="Pag-rerekord"
153
+Basic.Stats.Status="Estado"
154
+Basic.Stats.Status.Recording="Pagrerekord"
155
+Basic.Stats.Status.Live="LIVE"
156
+Basic.Stats.Status.Reconnecting="Muling kumukunekta"
157
+Basic.Stats.Status.Inactive="Hindi aktibo"
158
+Basic.Stats.DroppedFrames="Mga Imaheng hindi sinali (Network)"
159
+Basic.Stats.MegabytesSent="Kabuuan ng Output ng mga Datos"
160
+Basic.Stats.Bitrate="Bitrate"
161
+
162
+Updater.Title="Mga bagong update na magagamit"
163
+Updater.Text="Mayroong bagong update na magagamit:"
164
+Updater.UpdateNow="Iupdate na Ngayon"
165
+Updater.RemindMeLater="Paalalahanan ako Maya-maya"
166
+Updater.Skip="Laktawan ang Bersyon"
167
+Updater.Running.Title="Ang programa ay kasalukuyang aktibo"
168
+Updater.Running.Text="Ang mga output ay kasalukuyang aktibo, mangyari lamang i-shut down ang anumang mga output na aktibo bago subukang mag-update"
169
+Updater.NoUpdatesAvailable.Title="Walang mga update na magagamit"
170
+Updater.NoUpdatesAvailable.Text="Walang mga update ang kasalukuyang magagamit"
171
+Updater.FailedToLaunch="Bigong malunsad ang updater"
172
+Updater.GameCaptureActive.Title="Ang Game capture ay aktibo"
173
+Updater.GameCaptureActive.Text="Ang hook library ng game capture ay kasalukuyang ginagamit. Mangyari lamang isara ang anumang mga laro/programang nahuli (o i-start muli ang windows) at subukan muli."
174
+
175
+QuickTransitions.SwapScenes="Pagpalitin ang Preview/Output ng mga Eksena Matapos ang Pag-transisyon"
176
+QuickTransitions.SwapScenesTT="Pinagpapalit ang preview at output ng mga eksena matapos ang pagtransisyon (kung ang orihinal na eksena ng output ay nariyan pa).\nHindi nito mapapawalang-bisa ang mga pagbabagong napatupad sa orihinal na eksena ng output."
177
+QuickTransitions.DuplicateScene="Gayahin ang Eksena"
178
+QuickTransitions.DuplicateSceneTT="Kapag nag-eedit ng kaparehong eksena, pinapahintulutan ang pag-edit ng transform/visibility ng mga pinanggalingan nang hindi binabago ang output.\nUpang ma-edit ang mga katangian ng mga pinagmulan nang hindi binabago ang output, paganahin ang 'Duplicate Sources'.\nAng pag-bago ng value na ito ang magseset muli ng pangkasalukuyang output na eksena (kung ito ay nariyan pa)."
179
+QuickTransitions.EditProperties="Gayahin ang mga Source"
180
+QuickTransitions.EditPropertiesTT="Kapag nag-eedit ng kaparehong eksena, pinapahintulutan ang pag-edit ng mga pinagmulan nang hindi binabago ang output.\nMaaari lamang itong gamitin kung ang 'Duplicate Scene' ay gumagana.\nMayroong mga source (tulad ng capture o mga media source) na hindi hindi ito sinusuportahan at hindi maaaring i-edit nang nakahiwalay.\nAng pagbabago ng value na ito ang magseset muli ng kasalukuyang output na eksena (kung nariyan pa ito).\n\nBabala: Dahil kokopyahin ang mga source, maaari itong mangailangan ng dagdag na system o mga video source."
181
+QuickTransitions.HotkeyName="Mabilis na Transisyon: %1"
182
+
183
+Basic.AddTransition="Idagdag ang Configurable na Transisyon"
184
+Basic.RemoveTransition="Alisin ang Configurable na Transisyon"
185
+Basic.TransitionProperties="Mga Katangian ng Transisyon"
186
+Basic.SceneTransitions="Mga Transisyon ng Eksena"
187
+Basic.TransitionDuration="Tagal"
188
+Basic.TogglePreviewProgramMode="Studio Mode"
189
+
190
+TransitionNameDlg.Text="Mangyari lamang ilagay ang pangalan ng transisyon"
191
+TransitionNameDlg.Title="Pangalan ng Transition"
192
+
193
+TitleBar.Profile="Profile"
194
+TitleBar.Scenes="Mga Eksena"
195
+
196
+NameExists.Title="Ang pangalan ay umiiral na"
197
+NameExists.Text="Ang pangalan na ito ay ginagamit na."
198
+
199
+NoNameEntered.Title="Mangyari lamang magbigay ng balidong pangalan"
200
+NoNameEntered.Text="Hindi maaaring walang pangalan."
201
+
202
+ConfirmStart.Title="Umpisahan na ang pag-stream?"
203
+ConfirmStart.Text="Sigurado ka bang gusto mo nang simulan ang pag-stream?"
204
+
205
+ConfirmStop.Title="Itigil ang pag-stream?"
206
+ConfirmStop.Text="Sigurado ka bang gusto mong itigil ang pag-stream?"
207
+
208
+ConfirmExit.Title="Lumabas sa OBS?"
209
+ConfirmExit.Text="Ang OBS ang kasalukuyang aktibo. Ang lahat ng pag-stream/pagrerekord ay magsasara. Sigurado ka bang gusto mong lumabas?"
210
+
211
+ConfirmRemove.Title="Kumpirmahin ang pagtanggal"
212
+ConfirmRemove.Text="Sigurado ka bang gusto mong tanggalin ang '$1\"?"
213
+ConfirmRemove.TextMultiple="Sigurado ka bang gusto mong tanggalin ang %1 na mga item?"
214
+
215
+Output.StartStreamFailed="Bigong masimulan ang pag-stream"
216
+Output.StartRecordingFailed="Bigong masimulan ang pag-rerekord"
217
+Output.StartReplayFailed="Bigong masimulan ang replay buffer"
218
+Output.StartFailedGeneric="Bigong masimulan ang output. Mangyari lamang tingnan ang log para sa mga detalye. \n\nTandaan: Kung ikaw ay gumagamit ng NVENC o AMD na mga encoder, siguraduhing ang iyong mga video driver ay naka-update."
219
+
220
+Output.ConnectFail.Title="Bigong kumonekta"
221
+Output.ConnectFail.BadPath="Hindi wasto ang Path o Connection URL. Mangyari lamang tingnan ang iyong mga setting upang makumpirma na sila ay balido."
222
+Output.ConnectFail.ConnectFailed="Bigong kumonekta sa serber"
223
+Output.ConnectFail.InvalidStream="Hindi madaanan ang tinutukoy na channel o stream key, mangyari lamang tingnan muli ang iyong stream key. Kung ito ay wasto, maaaring mayroong problema sa pagkonekta sa serber."
224
+Output.ConnectFail.Error="Isang di-inaasahang error ang naganap habang sinusubukang kumonekta sa serber. Karagdagang impormasyon ay nasa log file."
225
+Output.ConnectFail.Disconnected="Nadiskonek mula sa serber."
226
+
227
+Output.RecordFail.Title="Bigong masimulan ang pa-rerekord"
228
+Output.RecordFail.Unsupported="Ang output format ay maaaring hindi suportado o di kaya'y hindi nagsusuporta ng higit sa isang audio track. Mangyari lamang tingnan ang iyong mga setting at subukan muli."
229
+Output.RecordNoSpace.Title="Hindi sapat ang espasyo sa disk"
230
+Output.RecordNoSpace.Msg="Hindi sapat ang espasyo sa disk upang magpatuloy sa pag-rerekord."
231
+Output.RecordError.Title="Error sa Pag-rerekord"
232
+Output.RecordError.Msg="Isang hindi matukoy na error ang naganap habang nag-rerekord."
233
+Output.ReplayBuffer.NoHotkey.Title="Walang set ng hotkey!"
234
+Output.ReplayBuffer.NoHotkey.Msg="Walang naka-save na hotkey set para sa replay buffer. Mangyari lamang magtalaga ng \"Save\" hotkey na gagamitin para sa pag-save ng mga replay recording."
235
+
236
+Output.BadPath.Title="Maling File Path"
237
+Output.BadPath.Text="Ang na-configure na output path ay hindi wasto. Mangyari lamang tingnan ang iyong mga setting upang makumpirma na isang balidong file path ay nakatalaga."
238
+
239
+LogReturnDialog="Matagumpay na na-upload ang log"
240
+LogReturnDialog.CopyURL="Kopyahin ang URL"
241
+LogReturnDialog.ErrorUploadingLog="Error sa pag-uupload ng log file"
242
+
243
+LicenseAgreement="Kasunduan sa Lisensya"
244
+LicenseAgreement.PleaseReview="Mangyari lamang basahin ang mga termino sa lisensya bago gamitin ang OBS. Sa paggamit ng programang ito, iyong kinikilala na binasa at sumasang-ayon ka sa mga termino ng <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a>. Paki-scroll down upang makita ang iba pang bahagi ng kasunduan."
245
+LicenseAgreement.ClickIAgreeToContinue="Kung iyong tinatanggap ang mga termino ng kasunduan, pindutin ang I Agree upang makapagpatulay. Kailangan mong sumang-ayon sa kasunduan upang magamit ang OBS."
246
+LicenseAgreement.IAgree="Sumasang-ayon Ako"
247
+LicenseAgreement.Exit="Lumabas"
248
+
249
+Remux.SourceFile="OBS Recording"
250
+Remux.TargetFile="Target File"
251
+Remux.Remux="Remux"
252
+Remux.OBSRecording="OBS Recording"
253
+Remux.FinishedTitle="Tapos na ang pag-remux"
254
+Remux.Finished="Na-remux na ang recording"
255
+Remux.FinishedError="Na-remux na ang recording, ngunit ay file ay maaaring hindi kumpleto"
256
+Remux.SelectRecording="Pumili ng OBS Recording …"
257
+Remux.SelectTarget="Pumili ng target file …"
258
+Remux.FileExistsTitle="Ang target file ay umiiral na"
259
+Remux.FileExists="Ang target file na ito ay umiiral na, gusto ma ba itong palitan?"
260
+Remux.ExitUnfinishedTitle="Ang pagremux ay tinutuloy pa"
261
+Remux.ExitUnfinished="Hindi pa tapos ang pag-remux. Kung ihihinto ito ngayon, maaaring hindi na magagamit ang target file.\nSigurado ka bang gusto mong ihinto ang pagremux?"
262
+
263
+UpdateAvailable="May Bagong Update na Magagamit"
264
+UpdateAvailable.Text="Ang bersyon %1.%2.%3 ay maaari nang gamiting ngayon. <a href='%4'>Pindutin ito upang ma-download</a>"
265
+
266
+Basic.DesktopDevice1="Desktop Audio"
267
+Basic.DesktopDevice2="Desktop Audio 2"
268
+Basic.AuxDevice1="Mic/Aux"
269
+Basic.AuxDevice2="Mic/Aux 2"
270
+Basic.AuxDevice3="Mic/Aux 3"
271
+Basic.AuxDevice4="Mic/Aux 4"
272
+
273
+Basic.Scene="Eksena"
274
+Basic.DisplayCapture="Ipakita ang Kuha"
275
+
276
+Basic.Main.PreviewConextMenu.Enable="Paganahin ang Preview"
277
+
278
+ScaleFiltering="I-scale ang pag-fifilter"
279
+ScaleFiltering.Point="Punto"
280
+ScaleFiltering.Bilinear="Bilinear"
281
+ScaleFiltering.Bicubic="Bicubic"
282
+ScaleFiltering.Lanczos="Lanczos"
283
+
284
+Deinterlacing="Deinterlacing"
285
+Deinterlacing.Discard="Discard"
286
+Deinterlacing.Retro="Retro"
287
+Deinterlacing.Blend="Blend"
288
+Deinterlacing.Blend2x="Blend 2x"
289
+Deinterlacing.Linear="Linear"
290
+Deinterlacing.Linear2x="Linear 2x"
291
+Deinterlacing.Yadif="Yadif"
292
+Deinterlacing.Yadif2x="Yadif 2x"
293
+Deinterlacing.TopFieldFirst="Itaas ang Patlang Una"
294
+Deinterlacing.BottomFieldFirst="Ibaba ang Patlang Una"
295
+
296
+VolControl.SliderUnmuted="Dami ng islayder para sa '%1':%2"
297
+VolControl.SliderMuted="Dami ng islayder para sa '%1':%2 (na kasalukuyang mahina)"
298
+VolControl.Mute="Mahina '%1'"
299
+VolControl.Properties="Ari-arian na para sa '%1'"
300
+
301
+Basic.Main.AddSceneDlg.Title="Idagdag sa Eksena"
302
+Basic.Main.AddSceneDlg.Text="Pakiusap idagdag ang pangalan ng mga eksena"
303
+
304
+Basic.Main.DefaultSceneName.Text="Eksena %1"
305
+
306
+Basic.Main.AddSceneCollection.Title="Idagdag ang Eksena sa Koleksyon"
307
+Basic.Main.AddSceneCollection.Text="Mangyari lamang ilagay ang pangalan ng koleksyon ng mga eksena"
308
+
309
+Basic.Main.RenameSceneCollection.Title="Palitan ang pangalan ng Koleksyon ng mga Eksena"
310
+
311
+AddProfile.Title="Idagdag ang Profile"
312
+AddProfile.Text="Mangyari lamang ilagay ang pangalan ng profile"
313
+
314
+RenameProfile.Title="Palitan ang pangalan ng Profile"
315
+
316
+Basic.Main.MixerRename.Title="Palitan ang pangalan ng Audio Source"
317
+Basic.Main.MixerRename.Text="Mangyari lamang ilagay ang pangalan ng audio source"
318
+
319
+
320
+Basic.Main.PreviewDisabled="Ang preview ay kasalukuyang hindi gumagana"
321
+
322
+Basic.SourceSelect="Lumikha/Pumili ng Source"
323
+Basic.SourceSelect.CreateNew="Lumikha ng bago"
324
+Basic.SourceSelect.AddExisting="Idagdag ang Umiiral na"
325
+Basic.SourceSelect.AddVisible="Palitawin ang source"
326
+
327
+Basic.PropertiesWindow="Mga Katangian para sa '%1'"
328
+Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselect: %2)"
329
+Basic.PropertiesWindow.SelectColor="Pumili ng Kulay"
330
+Basic.PropertiesWindow.SelectFont="Pumili ng font"
331
+Basic.PropertiesWindow.ConfirmTitle="Binago ang mga Setting"
332
+Basic.PropertiesWindow.Confirm="Mayroong mga pagbabagong hindi na-save. Nais mo bang panatilihin ang mga ito?"
333
+Basic.PropertiesWindow.NoProperties="Walang mga katangiang magagamit"
334
+Basic.PropertiesWindow.AddFiles="Idagdag ang mga File"
335
+Basic.PropertiesWindow.AddDir="Idagdag ang Direktory"
336
+Basic.PropertiesWindow.AddURL="Idagdag ang Path/URL"
337
+Basic.PropertiesWindow.AddEditableListDir="Idagdag ang directory sa '%1'"
338
+Basic.PropertiesWindow.AddEditableListFiles="Idagdag ang mga file sa '%1'"
339
+Basic.PropertiesWindow.AddEditableListEntry="Magdagdag ng entry sa '%1'"
340
+Basic.PropertiesWindow.EditEditableListEntry="Baguhin ang entry mula sa '%1'"
341
+
342
+Basic.PropertiesView.FPS.Simple="Simpleng mga FPS Value"
343
+Basic.PropertiesView.FPS.Rational="Rasyonal na mga FPS Value"
344
+Basic.PropertiesView.FPS.ValidFPSRanges="Balidong mga FPS Range:"
345
+
346
+Basic.InteractionWindow="Nakikipag-interact sa '%1'"
347
+
348
+Basic.StatusBar.Reconnecting="Na-diskonek, muling magku-kunek sa loob ng %2 segundo(mga) (pagtangka%1)"
349
+Basic.StatusBar.AttemptingReconnect="Sinusubukang uling maka-konek... (tangka %1)"
350
+Basic.StatusBar.ReconnectSuccessful="Matagumpay na muling naka-konek"
351
+Basic.StatusBar.Delay="Antala (%1 segundo)"
352
+Basic.StatusBar.DelayStartingIn="Antala (magsisimula sa loob ng %1 segundo)"
353
+Basic.StatusBar.DelayStoppingIn="Antala (hihinto sa loob ng %1 segundo)"
354
+Basic.StatusBar.DelayStartingStoppingIn="Antala (hihinto sa loob ng %1 segundo, magsisimula sa loob ng %2 segundo)"
355
+
356
+Basic.Filters="Mga Filter"
357
+Basic.Filters.AsyncFilters="Audio/Video na mga Filter"
358
+Basic.Filters.AudioFilters="Audio na mga Filter"
359
+Basic.Filters.EffectFilters="Efeect na mga Filter"
360
+Basic.Filters.Title="Mga Filter para sa '%1'"
361
+Basic.Filters.AddFilter.Title="Pangalan ng Filter"
362
+Basic.Filters.AddFilter.Text="Mangyari lamang tukuyin ang pangalan ng filter"
363
+
364
+Basic.TransformWindow="Pagbabago ng mga Bagay sa Eksena"
365
+Basic.TransformWindow.Position="Posisyon"
366
+Basic.TransformWindow.Rotation="Pag-ikot"
367
+Basic.TransformWindow.Size="Sukat"
368
+Basic.TransformWindow.Alignment="Pagkahanay-hanay ng mga posisyon"
369
+Basic.TransformWindow.BoundsType="Tipo ng Nakagagapos na Kahon"
370
+Basic.TransformWindow.BoundsAlignment="Pagkakahanay sa Bounding Kahon"
371
+Basic.TransformWindow.Bounds="Kahon Sukat ng Bounding"
372
+Basic.TransformWindow.Crop="I-krop"
373
+
374
+Basic.TransformWindow.Alignment.TopLeft="Itaas sa kaliwa"
375
+Basic.TransformWindow.Alignment.TopCenter="Itaas sa Gitna"
376
+Basic.TransformWindow.Alignment.TopRight="Itaas sa Kanan"
377
+Basic.TransformWindow.Alignment.CenterLeft="Gitna sa Kaliwa"
378
+Basic.TransformWindow.Alignment.Center="Gitna"
379
+Basic.TransformWindow.Alignment.CenterRight="Gitna sa Kanan"
380
+Basic.TransformWindow.Alignment.BottomLeft="Baba sa Kaliwa"
381
+Basic.TransformWindow.Alignment.BottomCenter="Baba sa Gitna"
382
+Basic.TransformWindow.Alignment.BottomRight="Baba sa Kanan"
383
+
384
+Basic.TransformWindow.BoundsType.None="Walang Hangganan"
385
+Basic.TransformWindow.BoundsType.MaxOnly="Pinakamataas na sukat lamang"
386
+Basic.TransformWindow.BoundsType.ScaleInner="Panloob na hangganan ng scale"
387
+Basic.TransformWindow.BoundsType.ScaleOuter="Panlabas na hangganan ng scale"
388
+Basic.TransformWindow.BoundsType.ScaleToWidth="Lapad ng hangganan ng scale"
389
+Basic.TransformWindow.BoundsType.ScaleToHeight="Taas ng hangganan ng scale"
390
+Basic.TransformWindow.BoundsType.Stretch="Kahabaan sa hangganan"
391
+
392
+Basic.Main.AddSourceHelp.Title="Hindi pwede idagdag sa Pinagmulan"
393
+Basic.Main.AddSourceHelp.Text="Kailangan mo na magkaroon ng hindi bababa sa isang eksena na idadagdag sa pinagmulan."
394
+
395
+Basic.Main.Scenes="Eksena"
396
+Basic.Main.Sources="Pinagmulan"
397
+Basic.Main.Controls="Mga kontrol"
398
+Basic.Main.Connecting="Pagkonekta..."
399
+Basic.Main.StartRecording="Magsimula sa Pagtatala"
400
+Basic.Main.StartReplayBuffer="Magsimula Mag replay Buffer"
401
+Basic.Main.StartStreaming="Magsimula na mag Streaming"
402
+Basic.Main.StopRecording="Huminto sa Pagtatala"
403
+Basic.Main.StoppingRecording="Pagtigil sa Pagtatala..."
404
+Basic.Main.StopReplayBuffer="Huminto Mag-replay Buffer"
405
+Basic.Main.StoppingReplayBuffer="Pagtigil Mag-replay Buffer..."
406
+Basic.Main.StopStreaming="Ihinto Mag-streaming"
407
+Basic.Main.StoppingStreaming="Pagtigil ng Daloy..."
408
+Basic.Main.ForceStopStreaming="Itigil ang pag-stream (tanggalin ang antala)"
409
+
410
+Basic.MainMenu.File="&File"
411
+Basic.MainMenu.File.Export="&I-export"
412
+Basic.MainMenu.File.Import="&I-angkat"
413
+Basic.MainMenu.File.ShowRecordings="Ipakita ang mga &Recording"
414
+Basic.MainMenu.File.Remux="Re&mux na mga Recording"
415
+Basic.MainMenu.File.Settings="&Mga Setting"
416
+Basic.MainMenu.File.ShowSettingsFolder="Ipakita ang Folder ng mga Setting"
417
+Basic.MainMenu.File.ShowProfileFolder="Ipakita ang Profile Folder"
418
+Basic.MainMenu.AlwaysOnTop="&Palaging Nasa Tuktok"
419
+Basic.MainMenu.File.Exit="E&xit"
420
+
421
+Basic.MainMenu.Edit="I&edit"
422
+Basic.MainMenu.Edit.Undo="Ipawalang-bisa (&U)"
423
+Basic.MainMenu.Edit.Redo="Gawin Muli (&R)"
424
+Basic.MainMenu.Edit.UndoAction="Ipawalang-bisa $1 (&U)"
425
+Basic.MainMenu.Edit.RedoAction="Gawing Muli $1 (&R)"
426
+Basic.MainMenu.Edit.LockPreview="&Naka-lock na Preview"
427
+Basic.MainMenu.Edit.Scale="Preview &Scaling"
428
+Basic.MainMenu.Edit.Scale.Window="Gawing Kasing-Laki ng Window"
429
+Basic.MainMenu.Edit.Scale.Canvas="Kanbas (%1x%2)"
430
+Basic.MainMenu.Edit.Scale.Output="Output (%1x%2)"
431
+Basic.MainMenu.Edit.Transform="&Transform"
432
+Basic.MainMenu.Edit.Transform.EditTransform="&Baguhin ang Transform..."
433
+Basic.MainMenu.Edit.Transform.CopyTransform="Kopyahin ang Transform"
434
+Basic.MainMenu.Edit.Transform.PasteTransform="I-paste ang Transform"
435
+Basic.MainMenu.Edit.Transform.ResetTransform="&I-set muli ang Transform"
436
+Basic.MainMenu.Edit.Transform.Rotate90CW="Iikot ng 90 degrees CW"
437
+Basic.MainMenu.Edit.Transform.Rotate90CCW="Iikot ng 90 degrees CCW"
438
+Basic.MainMenu.Edit.Transform.Rotate180="Iikot ng 180 degrees"
439
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Baliktarin ng &pahalang"
440
+Basic.MainMenu.Edit.Transform.FlipVertical="Baliktarin ng &patayo"
441
+Basic.MainMenu.Edit.Transform.FitToScreen="&Pagkasyahin sa Screen"
442
+Basic.MainMenu.Edit.Transform.StretchToScreen="&I-stretch sa screen"
443
+Basic.MainMenu.Edit.Transform.CenterToScreen="&I-sentro sa screen"
444
+Basic.MainMenu.Edit.Order="&Pagkakasunod-sunod"
445
+Basic.MainMenu.Edit.Order.MoveUp="Ilipat &Pataas"
446
+Basic.MainMenu.Edit.Order.MoveDown="Ilipat &Pababa"
447
+Basic.MainMenu.Edit.Order.MoveToTop="Ilipat sa &Pinaka taas"
448
+Basic.MainMenu.Edit.Order.MoveToBottom="Ilipat sa &Pinaka baba"
449
+Basic.MainMenu.Edit.AdvAudio="&Advanced na mga Katangian ng Audio"
450
+
451
+Basic.MainMenu.View="&View"
452
+Basic.MainMenu.View.Toolbars="&Mga Toolbar"
453
+Basic.MainMenu.View.Docks="Mga Dock"
454
+Basic.MainMenu.View.Docks.ResetUI="I-set muli ang UI"
455
+Basic.MainMenu.View.Docks.LockUI="I-lock UI"
456
+Basic.MainMenu.View.Toolbars.Listboxes="&Mga Listbox"
457
+Basic.MainMenu.View.SceneTransitions="Mga Transisyon ng S&cene"
458
+Basic.MainMenu.View.StatusBar="&Status Bar"
459
+Basic.MainMenu.View.Fullscreen.Interface="Interface gamit ang buong screen"
460
+
461
+Basic.MainMenu.SceneCollection="&Kolekysyon ng mga Scene"
462
+Basic.MainMenu.Profile="&Profile"
463
+Basic.MainMenu.Profile.Import="I-import ang Profile"
464
+Basic.MainMenu.Profile.Export="I-export ang Profile"
465
+Basic.MainMenu.SceneCollection.Import="I-import ang Koleksyon ng mga Eksena"
466
+Basic.MainMenu.SceneCollection.Export="I-export ang Koleksyon ng mga Eksena"
467
+Basic.MainMenu.Profile.Exists="May ganito ng Profile"
468
+Basic.MainMenu.SceneCollection.Exists="Mayroon ng ganitong koleksyon ng mga eksena"
469
+
470
+Basic.MainMenu.Tools="&Mga Kasangkapan"
471
+
472
+Basic.MainMenu.Help="&Tulong"
473
+Basic.MainMenu.Help.HelpPortal="Portal Para sa &Tulong"
474
+Basic.MainMenu.Help.Website="Bisitahin ang &Website"
475
+Basic.MainMenu.Help.Logs="&Mga Log File"
476
+Basic.MainMenu.Help.Logs.ShowLogs="&Ipakita ang mga Log File"
477
+Basic.MainMenu.Help.Logs.UploadCurrentLog="I-upload ang &Pangkasalukuyang Log File"
478
+Basic.MainMenu.Help.Logs.UploadLastLog="I-upload ang Huling Log File"
479
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Tingnan ang Pangkasalukuyang Log"
480
+Basic.MainMenu.Help.CheckForUpdates="Maghanap ng mga Update"
481
+
482
+Basic.Settings.ProgramRestart="Ang programa ay kailangan i-start muli para gumana ang mga setting na ito."
483
+Basic.Settings.ConfirmTitle="Kumpirmahin ang mga Pagbabago"
484
+Basic.Settings.Confirm="Mayroon kang mga binago na hindi pa na-save. I-save ang mga pagbabago?"
485
+
486
+Basic.Settings.General="Pangkalahatan"
487
+Basic.Settings.General.Theme="Tema"
488
+Basic.Settings.General.Language="Lenggwahe"
489
+Basic.Settings.General.EnableAutoUpdates="Awtomatikong maghanap ng mga update sa pag-start up"
490
+Basic.Settings.General.OpenStatsOnStartup="Buksan ang dialogong panstatistiko sa pag-startup"
491
+Basic.Settings.General.WarnBeforeStartingStream="Ipakita ang kumpirmasyon ng dialogo kapag nagumpisang mag-stream"
492
+Basic.Settings.General.WarnBeforeStoppingStream="Ipakita ang kumpirmasyon ng dialogo kapag naghihinto ng pag-stream"
493
+Basic.Settings.General.Projectors="Mga Projector"
494
+Basic.Settings.General.HideProjectorCursor="Itago ang cursor sa ibabaw ng mga projector"
495
+Basic.Settings.General.ProjectorAlwaysOnTop="Ilagay palagi sa tuktok ang mga projector"
496
+Basic.Settings.General.Snapping="Pag-snap ng pagkakahanay ng source"
497
+Basic.Settings.General.ScreenSnapping="I-snap ang mga source sa gilid ng screen"
498
+Basic.Settings.General.CenterSnapping="I-snap ang mga source sa pahalang at patayong sentro"
499
+Basic.Settings.General.SourceSnapping="I-snap ang mga Source sa iba pang mga source"
500
+Basic.Settings.General.SnapDistance="I-snap ang pagka-sensitibo"
501
+Basic.Settings.General.RecordWhenStreaming="Awtomatikong mag-rekord kapag nag-stream"
502
+Basic.Settings.General.KeepRecordingWhenStreamStops="Patuloy na mag-rekord kapag tumigil ang pag-stream"
503
+Basic.Settings.General.ReplayBufferWhileStreaming="Awtomatikong simulang ang replay buffer kapag nag-stream"
504
+Basic.Settings.General.KeepReplayBufferStreamStops="Panatilihing aktibo ang replay buffer kapag huminto ang pagstream"
505
+Basic.Settings.General.SysTray="System Tray"
506
+Basic.Settings.General.SysTrayWhenStarted="Paliitin sa system tray kapag inumpisahan"
507
+Basic.Settings.General.SystemTrayHideMinimize="Palaging paliitin sa system tray sa halip na task bar"
508
+Basic.Settings.General.SaveProjectors="I-save ang mga projector sa paglabas"
509
+Basic.Settings.General.SwitchOnDoubleClick="Lumipat sa eksena kapag dalawang beses pinindot"
510
+Basic.Settings.General.StudioPortraitLayout="Paganahin ang portrait/patayong layout"
511
+Basic.Settings.General.MultiviewLayout="Multiview Layout"
512
+Basic.Settings.General.MultiviewLayout.Horizontal.Top="Pahalang, Tuktok"
513
+Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Pahalang, Pinaka baba"
514
+Basic.Settings.General.MultiviewLayout.Vertical.Left="Patayo, Kaliwa"
515
+Basic.Settings.General.MultiviewLayout.Vertical.Right="Patayo, Kanan"
516
+
517
+Basic.Settings.Stream="Mag-stream"
518
+Basic.Settings.Stream.StreamType="Uri ng Pag-stream"
519
+
520
+Basic.Settings.Output="Output"
521
+Basic.Settings.Output.Format="Format ng Recording"
522
+Basic.Settings.Output.Encoder="Encoder"
523
+Basic.Settings.Output.SelectDirectory="Pumili ng Recording Directory"
524
+Basic.Settings.Output.SelectFile="Pumili ng Recording File"
525
+Basic.Settings.Output.EnforceBitrate="Ipatupad ang mga limitasyon sa serbisyo ng bitrate sa pag-stream"
526
+Basic.Settings.Output.Mode="Paraan ng Output"
527
+Basic.Settings.Output.Mode.Simple="Payak"
528
+Basic.Settings.Output.Mode.Adv="Mas Mahusay"
529
+Basic.Settings.Output.Mode.FFmpeg="FFmpeg Output"
530
+Basic.Settings.Output.UseReplayBuffer="Paganahin ang Replay Buffer"
531
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Pinakamataas na Oras ng Replay (Segundo)"
532
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Pinakamataas na Memorya (Megabytes)"
533
+Basic.Settings.Output.ReplayBuffer.Estimate="Tantiyang gamit sa memorya: %1 MB"
534
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Hindi matantiya ang gamit sa memorya. Mangyari lamang mag-takda ng pinakamataas na limitasyon sa memorya."
535
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Tandaan: Siguruhing nakapagtakda ka ng hotkey para sa replay buffer sa hotkeys section)"
536
+Basic.Settings.Output.ReplayBuffer.Prefix="Panlapi para Filename ng Replay Buffer"
537
+Basic.Settings.Output.ReplayBuffer.Suffix="Hulapi"
538
+Basic.Settings.Output.Simple.SavePath="Landas ng Recording"
539
+Basic.Settings.Output.Simple.RecordingQuality="Kalidad ng Recording"
540
+Basic.Settings.Output.Simple.RecordingQuality.Stream="Katulad ng pag-stream"
541
+Basic.Settings.Output.Simple.RecordingQuality.Small="Mataas na Kalidad, Katamtamang Laki ng File"
542
+Basic.Settings.Output.Simple.RecordingQuality.HQ="Hindi Matukoy na Kalidad, Malaking File"
543
+Basic.Settings.Output.Simple.RecordingQuality.Lossless="Walang nabago sa Kalidad, Lubhang napakalaking File"
544
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Babala: Ang video bitrate ng pag-stream ay itatakda sa %1, na siyang mataas na limitasyon para sa pangkasalukuyang serbisyo ng pagstream. Kung sigurado kang nais mong lumagpas sa %1, paganahin ang advanced encoder options at tanggalin ang check sa \"Enforce streaming bitrate limits\"."
545
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Babala: Ang audio bitrate ng pag-stream ay itatakda sa %1, na siyang mataas na limitasyon para sa pangkasalukuyang serbisyo ng pag-strean. Kung sigurado kang nais mong lumagpas sa %1, paganahin ang advanced encoder options at tanggalin ang check sa \"Enforce streaming service bitrate limits\"."
546
+Basic.Settings.Output.Simple.Warn.Encoder="Babal: Ang pag-rekord gamit ang isang software encoder na iba ang kalidad sa pag-stream ay mangangailangan ng dagdag na pag-gamit sa CPU kung ikaw ay mag-stream at mag-rekord nang sabay."
547
+Basic.Settings.Output.Simple.Warn.Lossless="Babala: Ang kalidad na lossless ay nagbibigay ng lubhang malalaking file. Ang kalidad na lossless ay maaaring gumamit ng 7 gigabytes ng espasyo ng disk kada minuto o higit pa sa matataas na mga resolusyon o mga framerate. Ang lossless ay hindi minumungkahi para sa mga mahahabang recording maliban na lamang kung mayroon kang napakalaking espasyo sa disk na magagamit."
548
+Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigurado ka bang gusto mong gamitin ang lossless na kalidad?"
549
+Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless na kalidad babala!"
550
+Basic.Settings.Output.Simple.Warn.MultipleQSV="Babala: Hindi ka maaaring gumamit ng maraming magkahiwalay na QSV na mga encoder kapag say na nag-stream at nag-rerekord. Kung nais pagsabayin ang pag-stream at pag-rekord, mangyari lamang ibahin ang encoder para sa pag-rekord o ang encoder para sa pag-stream."
551
+Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
552
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
553
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
554
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
555
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 mababa ang nakatakdang paggamit ng CPU, dagdagan ang laki ng file)"
556
+Basic.Settings.Output.VideoBitrate="Video Bitrate"
557
+Basic.Settings.Output.AudioBitrate="Audio Bitrate"
558
+Basic.Settings.Output.Reconnect="Pakusa Makipagkonek muli"
559
+Basic.Settings.Output.RetryDelay="Subukan muling Maantala (Mga segundo)"
560
+Basic.Settings.Output.MaxRetries="Pinakamaraming Retries"
561
+Basic.Settings.Output.Advanced="Paganahin Pauna ang Enkoder Settings"
562
+Basic.Settings.Output.EncoderPreset="Pangkasalukuyan enkoder (Nakatataas = Mas mababa CPU)"
563
+Basic.Settings.Output.CustomEncoderSettings="Pasadyang enkoder Mga setting"
564
+Basic.Settings.Output.CustomMuxerSettings="Pasadyang mga Setting ng Muxer"
565
+Basic.Settings.Output.NoSpaceFileName="Gumawa ng Pangalan ng File nang walang Pagitan"
566
+
567
+Basic.Settings.Output.Adv.Rescale="I-re-iskala ang Output"
568
+Basic.Settings.Output.Adv.AudioTrack="Pangsubaybay ng Audio"
569
+Basic.Settings.Output.Adv.Streaming="Anod"
570
+Basic.Settings.Output.Adv.ApplyServiceSettings="I-enpors ang anod ng serbisyo ng mga enkoder seting"
571
+Basic.Settings.Output.Adv.Audio.Track1="Subaybayan 1"
572
+Basic.Settings.Output.Adv.Audio.Track2="Subaybayan 2"
573
+Basic.Settings.Output.Adv.Audio.Track3="Subaybayan 3"
574
+Basic.Settings.Output.Adv.Audio.Track4="Subaybayan 4"
575
+Basic.Settings.Output.Adv.Audio.Track5="Subaybayan 5"
576
+Basic.Settings.Output.Adv.Audio.Track6="Subaybayan 6"
577
+
578
+Basic.Settings.Output.Adv.Recording="Pagtatala"
579
+Basic.Settings.Output.Adv.Recording.Type="Uri"
580
+Basic.Settings.Output.Adv.Recording.Type.Standard="Pamantayan"
581
+Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Pasadyang Palabas (FFmpeg)"
582
+Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gamitin ang stream encoder)"
583
+Basic.Settings.Output.Adv.Recording.Filename="Pangalan ng File ng Pag-format"
584
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Higit na pasulat kung ang file ay umiiral"
585
+Basic.Settings.Output.Adv.FFmpeg.Type="Ang Palabas na Uri ng FFmpeg"
586
+Basic.Settings.Output.Adv.FFmpeg.Type.URL="Output sa URL"
587
+Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Output sa File"
588
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Mga Karaniwang format sa pagrekord"
589
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Lahat ng mga File"
590
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Landas ng file o URL"
591
+Basic.Settings.Output.Adv.FFmpeg.Format="Format ng Container"
592
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Audio"
593
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Video"
594
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Default na Format"
595
+Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Paglalarawan ng Container Format"
596
+Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio/Video Codec na hinulaan mula sa landas ng File o URL"
597
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Default Encoder"
598
+Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Huwag paganahin ang Encoder"
599
+Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video Encoder"
600
+Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Mga Setting para sa Video Encoder (kung mayroon)"
601
+Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder"
602
+Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Mga Setting ng Audio Encoder(kung mayroon)"
603
+Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Mga Setting ng Muxer (kung mayroon)"
604
+Basic.Settings.Output.Adv.FFmpeg.GOPSize="Agwat ng Keyframe (mga imahe)"
605
+Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Ipakita ang lahat ng mga code (kahit na maaaring hindi akma)"
606
+
607
+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"
608
+
609
+FilenameFormatting.TT="%CCYY   Taon, apat na tambilang\n%YY        Taon, huling dalawang tambilang (00-99)\n%MM        Buwan bilang isang decimal na numero (01-12)\n%DD       Araw ng buwan, zero-padded (01-31)\n%hh     Oras sa 24h na format (00-23)\n%mm      Minuto(00-59)\n%ss      Segundo (00-61)\n%%     A % sign\n%a        Pina-ikling ngalan ng araw\n%A      Buong ngalan ng araw\n%b        Pinaikling ngalan ng buwan\n%B      Buong ngalan ng buwan\n%d       Araw ng Buwan, zero-padded (01-31)\n%H      Oras sa 24h na format (00-23)\n%I       Oras sa 12h na format (01-12)\n%m       Buwang bilang isang decimal na numero (01-12)\n%M       Minuto (00-59)\n%p      AM o PM na paghirang\n%S        Segundo (00-61)\n%y     Taon, huling dalawang tambilang (00-99)\n%Y     Taon\n%z        ISO 8601 kanselahin mula sa UTC o timezone\n        pangalan ng pinaikli \n%Z       Ngalan ng Timezone o abbreviation\n"
610
+
611
+Basic.Settings.Video="Video"
612
+Basic.Settings.Video.Adapter="Video Adapter"
613
+Basic.Settings.Video.BaseResolution="Resolusyon ng Base (Kanbas)"
614
+Basic.Settings.Video.ScaledResolution="Resolution ng Output (Na-scale)"
615
+Basic.Settings.Video.DownscaleFilter="Pababaan ang Filter"
616
+Basic.Settings.Video.DisableAeroWindows="Huwag paganahin ang Aero (Windows lamang)"
617
+Basic.Settings.Video.FPS="FPS"
618
+Basic.Settings.Video.FPSCommon="Karaniwang mga FPS Value"
619
+Basic.Settings.Video.FPSInteger="Integer ng FPS Value"
620
+Basic.Settings.Video.FPSFraction="Praksyonal na FPS Value"
621
+Basic.Settings.Video.Numerator="Numerador"
622
+Basic.Settings.Video.Denominator="Denominador"
623
+Basic.Settings.Video.Renderer="Renderer"
624
+Basic.Settings.Video.InvalidResolution="Walang bisa ang value ng resolusyon. Kailangang [width]x[height] (hal. 1920x1080)"
625
+Basic.Settings.Video.CurrentlyActive="Kasalukuyang aktibo ang video output. Mangyari lamang patayin ang anumang mga output upang mabago ang mga video setting."
626
+Basic.Settings.Video.DisableAero="Huwag paganahin ang Aero"
627
+
628
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Pinakamabilis, ngunit hindi malinaw pag nag-scale)"
629
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Matalas na pag-scale, 16 na mga halimbawa)"
630
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Pinatalas na pag-scale, 32 na mga halimbawa)"
631
+
632
+Basic.Settings.Audio="Audio"
633
+Basic.Settings.Audio.SampleRate="Sample Rate"
634
+Basic.Settings.Audio.Channels="Mga Channel"
635
+Basic.Settings.Audio.MeterDecayRate="Audio Meter Decay Rate"
636
+Basic.Settings.Audio.MeterDecayRate.Fast="Mabilis"
637
+Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)"
638
+Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Type II PPM)"
639
+Basic.Settings.Audio.MultiChannelWarning.Enabled="BABALA: Naka-enable ang surround sound audio."
640
+Basic.Settings.Audio.MultichannelWarning="Kung nagsi-stream, tingnan kung ang streaming service ay sinusuportahan ang parehong surround sound ingest pat ang surround sound playback. Ang Twitch, Facebook 360 Live, Mixer RTMP, Smashcast ay mga halimbawa kung saan ang surround sound ay sinusuportahan ng buo. Kahit na ang Facebook Live at YouTube live ay parehong tumatanggap ng surround ingest, ang Facebook Live ay nagda-downmix sa stereo, at ang YouTube Live ay nagpapakita lamang ng dalawang channel. \n\nAng OBS audio na mga filter ay akma sa surround sound, pero ang suporta sa VST plugin ay hindi garantisado."
641
+Basic.Settings.Audio.MultichannelWarning.Title="Mapapagana ba ang tunog ng palibot ng audio?"
642
+Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba na gusto mong paganahin ang tunog ng palibot ng audio?"
643
+Basic.Settings.Audio.DesktopDevice="Apatarong Desktop Awdiyo"
644
+Basic.Settings.Audio.DesktopDevice2="Aparatong Desktop Awdiyo 2"
645
+Basic.Settings.Audio.AuxDevice="Mic/Katulong na Aparato ng Awdiyo"
646
+Basic.Settings.Audio.AuxDevice2="Mic/Katulong na Aparato ng Awdiyo 2"
647
+Basic.Settings.Audio.AuxDevice3="Mic/Katulong na Aparato ng Awdiyo 3"
648
+Basic.Settings.Audio.EnablePushToMute="Paganahin Itulak-para-ma-i-mute"
649
+Basic.Settings.Audio.PushToMuteDelay="Pag-antala sa pagtulak-sa-walang tunog"
650
+Basic.Settings.Audio.EnablePushToTalk="Paganahin itulak-sa-usapan"
651
+Basic.Settings.Audio.PushToTalkDelay="Pag-antala sa pagtulak-sa-usapan"
652
+Basic.Settings.Audio.UnknownAudioDevice="[Ang aparato ay hindi nakakonekta o hindi magagamit]"
653
+
654
+Basic.Settings.Advanced="Pauna"
655
+Basic.Settings.Advanced.General.ProcessPriority="Prayoridad na Pagproseso"
656
+Basic.Settings.Advanced.General.ProcessPriority.High="Mataas"
657
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Sa Taas ng Karaniwan"
658
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Karaniwan"
659
+Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Sa ibaba ng karaniwan"
660
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Walang ginagawa"
661
+Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng mga kulay maliban sa NV12 ay ginawa unsa lahat para sa pagrerekord, at hindi nirerekomenda para sa pag-stream. Ang pag-stream ay maaaring magdulot ng dagdag na gamit sa CPU dahil sa pagbago ng format ng kulay."
662
+Basic.Settings.Advanced.Audio.BufferingTime="Bilis ng Pag-buffer ng Audio"
663
+Basic.Settings.Advanced.Video.ColorFormat="Fomat ng Kulay"
664
+Basic.Settings.Advanced.Video.ColorSpace="YUV Espasyo ng Kulay"
665
+Basic.Settings.Advanced.Video.ColorRange="YUV Hanay ng Kulay"
666
+Basic.Settings.Advanced.Video.ColorRange.Partial="Panguna"
667
+Basic.Settings.Advanced.Video.ColorRange.Full="Buo"
668
+Basic.Settings.Advanced.Audio.MonitoringDevice="Kagamitang Pangsubaybay ng Audio"
669
+Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default"
670
+Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang audio ducking ng Windows"
671
+Basic.Settings.Advanced.StreamDelay="Antala sa Pag-stream"
672
+Basic.Settings.Advanced.StreamDelay.Duration="Bilis (segundo)"
673
+Basic.Settings.Advanced.StreamDelay.Preserve="Balikan kung saan huling pinutol (dagadagan ang antala) pagka konekta muli"
674
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Tantiyang Gamit sa Memorya: %1 MB"
675
+Basic.Settings.Advanced.Network="Network"
676
+Basic.Settings.Advanced.Network.BindToIP="Bumigkis sa IP"
677
+Basic.Settings.Advanced.Network.EnableNewSocketLoop="Paganahin ang bagong code ng pag-network"
678
+Basic.Settings.Advanced.Network.EnableLowLatencyMode="Mode para sa low latency"
679
+
680
+Basic.AdvAudio="Pinahusay na mga Katangian ng Audio"
681
+Basic.AdvAudio.Name="Pangalan"
682
+Basic.AdvAudio.Volume="Lakas ng tunog (%)"
683
+Basic.AdvAudio.Mono="I-downmix para maging Mono"
684
+Basic.AdvAudio.Panning="Panning"
685
+Basic.AdvAudio.SyncOffset="Sync Offset (ms)"
686
+Basic.AdvAudio.Monitoring="Pagsubaybay sa Audio"
687
+Basic.AdvAudio.Monitoring.None="Naka-off ang Monitor"
688
+Basic.AdvAudio.Monitoring.MonitorOnly="Monitor Lamang (naka-mute na output)"
689
+Basic.AdvAudio.Monitoring.Both="Monitor at Output"
690
+Basic.AdvAudio.AudioTracks="Mga Track"
691
+
692
+Basic.Settings.Hotkeys="Mga Hotkey"
693
+Basic.Settings.Hotkeys.Pair="Ang mga kombinasyon ng mga key kasama ang '%1' ay nagsisilbing mga toggle"
694
+
695
+Basic.Hotkeys.SelectScene="Lumipat sa eksena"
696
+
697
+Basic.SystemTray.Show="Ipakita"
698
+Basic.SystemTray.Hide="Itago"
699
+
700
+Basic.SystemTray.Message.Reconnecting="Nadiskonekta. Kumukonekta muli..."
701
+
702
+Hotkeys.Insert="Isingit"
703
+Hotkeys.Delete="Burahin"
704
+Hotkeys.Home="Home"
705
+Hotkeys.End="Wakas"
706
+Hotkeys.PageUp="Itaas ng Pahina"
707
+Hotkeys.PageDown="Ibaba ng Pahina"
708
+Hotkeys.NumLock="Num Lock"
709
+Hotkeys.ScrollLock="Scroll Lock"
710
+Hotkeys.CapsLock="Caps Lock"
711
+Hotkeys.Backspace="Backspace"
712
+Hotkeys.Tab="Tab"
713
+Hotkeys.Print="Ilimbag"
714
+Hotkeys.Pause="Ihinto"
715
+Hotkeys.Left="Kaliwa"
716
+Hotkeys.Right="Kanan"
717
+Hotkeys.Up="Taas"
718
+Hotkeys.Down="Baba"
719
+Hotkeys.Windows="Windows"
720
+Hotkeys.Super="Super"
721
+Hotkeys.Menu="Menu"
722
+Hotkeys.Space="Espasyo"
723
+Hotkeys.NumpadNum="Numpad %1"
724
+Hotkeys.NumpadMultiply="Numpad Multiply"
725
+Hotkeys.NumpadDivide="Numpad Divide"
726
+Hotkeys.NumpadAdd="Numpad Add"
727
+Hotkeys.NumpadSubtract="Numpad Subtract"
728
+Hotkeys.NumpadDecimal="Numpad Decimal"
729
+Hotkeys.AppleKeypadNum="%1 (Keypad)"
730
+Hotkeys.AppleKeypadMultiply="* (Keypad)"
731
+Hotkeys.AppleKeypadDivide="/ (Keypad)"
732
+Hotkeys.AppleKeypadAdd="+ (Keypad)"
733
+Hotkeys.AppleKeypadSubtract="- (Keypad)"
734
+Hotkeys.AppleKeypadDecimal=". (Keypad)"
735
+Hotkeys.AppleKeypadEqual="= (Keypad)"
736
+Hotkeys.MouseButton="Mouse %1"
737
+
738
+Mute="I-mute"
739
+Unmute="Ibalik ang Tunog"
740
+Push-to-mute="Pindutin-para-i-mute"
741
+Push-to-talk="Pindutin-para-makipagusap"
742
+
743
+SceneItemShow="Ipakita ang '%1'"
744
+SceneItemHide="Itago '%1'"
745
+
746
+OutputWarnings.NoTracksSelected="Kailangan mong pumili ng kahit isang track"
747
+OutputWarnings.MultiTrackRecording="Babala: May ilang mga format (tulad ng FLV) na hindi sumusuporta ng maramihang track kada isang pag-rekord"
748
+OutputWarnings.MP4Recording="Babala: Ang mga rekording na naka-save sa MP4 ay hindi na muling mababawi kung ang file ay hindi maaaring tapusin (hal. bilang resulta ng mga BSOD, nawalan ng kuryente, at iba pa). Kung gusto mong mag-rekord ng maraming audio track, maaari mong gamitin ang MKV at i-remux ang recording sa mp4 pag natapos na ito (File->Remux Recordings)"
749
+
750
+FinalScene.Title="Burahin ang Eksena"
751
+FinalScene.Text="Kailangan mayroon kahit isang eksena."
752
+
753
obs-studio-21.0.3.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/tr-TR.ini Changed
12
 
1
@@ -631,6 +631,10 @@
2
 Basic.Settings.Audio="Ses"
3
 Basic.Settings.Audio.SampleRate="Örnekleme Sıklığı"
4
 Basic.Settings.Audio.Channels="Kanallar"
5
+Basic.Settings.Audio.MeterDecayRate="Ses Ölçer Sönüm Hızı"
6
+Basic.Settings.Audio.MeterDecayRate.Fast="Hızlı"
7
+Basic.Settings.Audio.MeterDecayRate.Medium="Orta (Tür I PPM)"
8
+Basic.Settings.Audio.MeterDecayRate.Slow="Yavaş (Tür II PPM)"
9
 Basic.Settings.Audio.MultiChannelWarning.Enabled="Uyarı: Surround ses etkin."
10
 Basic.Settings.Audio.MultichannelWarning="Yayın yapılıyorsa, yayın hizmetinizin hem surround ses alınımını hem de surround ses geri oynatımını desteklediğinden emin olun. Twitch, Facebook 360 Live, Karıştırıcı RTMP, Smashcast, surround sesin tam desteklendiği örneklerdir. Facebook Live'ın ve YouTube Live'ın her ikisi de surround alınımını desteklese de, Facebook Live stereo'ya indirger, ve YouTube Live sadece iki kanal oynatır.\n\nOBS ses filtreleri surround sesle uyumludur, ancak VST eklenti desteği kesin değildir."
11
 Basic.Settings.Audio.MultichannelWarning.Title="Surround ses etkinleştirilsin mi?"
12
obs-studio-21.0.3.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/zh-CN.ini Changed
12
 
1
@@ -631,6 +631,10 @@
2
 Basic.Settings.Audio="音频"
3
 Basic.Settings.Audio.SampleRate="采样率"
4
 Basic.Settings.Audio.Channels="声道"
5
+Basic.Settings.Audio.MeterDecayRate="音频表衰减率"
6
+Basic.Settings.Audio.MeterDecayRate.Fast="快速"
7
+Basic.Settings.Audio.MeterDecayRate.Medium="中速(峰值电平表I型)"
8
+Basic.Settings.Audio.MeterDecayRate.Slow="慢速(峰值电平表II型)"
9
 Basic.Settings.Audio.MultiChannelWarning.Enabled="警告: 已启用环绕声音频。"
10
 Basic.Settings.Audio.MultichannelWarning="如果串流, 请检查串流服务是否支持环绕立体声接收和环绕立体声播放。 Twitch, Facebook 360 Live, Mixer RTMP, Smashcast 是充分支持环绕立体声的例子。 虽然 Facebook Live 和 Youtube Live 都支持环绕立体声接收, 但是Facebook Live 降低混合至立体声, 而 Youtube Live 则只播放两个声道。\n\nOBS 音频过滤器与环绕立体声兼容, 但 VST 插件支持无法保证。"
11
 Basic.Settings.Audio.MultichannelWarning.Title="是否启用环绕立体声?"
12
obs-studio-21.0.3.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/zh-TW.ini Changed
12
 
1
@@ -631,6 +631,10 @@
2
 Basic.Settings.Audio="音效"
3
 Basic.Settings.Audio.SampleRate="取樣頻率"
4
 Basic.Settings.Audio.Channels="通道數"
5
+Basic.Settings.Audio.MeterDecayRate="音量計衰減速率"
6
+Basic.Settings.Audio.MeterDecayRate.Fast="快速"
7
+Basic.Settings.Audio.MeterDecayRate.Medium="中 (Type I PPM)"
8
+Basic.Settings.Audio.MeterDecayRate.Slow="慢 (Type II PPM)"
9
 Basic.Settings.Audio.MultiChannelWarning.Enabled="警告: 已啟用環繞聲音訊。"
10
 Basic.Settings.Audio.MultichannelWarning="如果是流媒體,請檢查您的流媒體服務是否同時支持環繞聲攝取和環繞聲播放。 Twitch,Facebook 360 Live,Mixer RTMP,Smashcast都是完全支持環繞聲的例子。 儘管Facebook Live和YouTube Live都接受環繞聲攝取,但是Facebook Live會混音為立體聲,而YouTube Live只播放兩個聲道。\n\n 儘管不支持VST插件,但OBS音頻濾波器與環繞聲兼容。"
11
 Basic.Settings.Audio.MultichannelWarning.Title="是否啟用環繞聲音訊?"
12
obs-studio-21.0.3.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-21.1.2.tar.xz/UI/forms/OBSBasic.ui Changed
57
 
1
@@ -33,6 +33,9 @@
2
   <property name="styleSheet">
3
    <string notr="true"/>
4
   </property>
5
+  <property name="dockOptions">
6
+   <set>QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks</set>
7
+  </property>
8
   <widget class="QWidget" name="centralwidget">
9
    <layout class="QVBoxLayout" name="verticalLayout">
10
     <item>
11
@@ -134,10 +137,19 @@
12
      <addaction name="actionUploadLastLog"/>
13
      <addaction name="actionViewCurrentLog"/>
14
     </widget>
15
+    <widget class="QMenu" name="menuCrashLogs">
16
+     <property name="title">
17
+      <string>Basic.MainMenu.Help.CrashLogs</string>
18
+     </property>
19
+     <addaction name="actionShowCrashLogs"/>
20
+     <addaction name="actionUploadLastCrashLog"/>
21
+    </widget>
22
     <addaction name="actionHelpPortal"/>
23
     <addaction name="actionWebsite"/>
24
     <addaction name="separator"/>
25
     <addaction name="menuLogFiles"/>
26
+    <addaction name="menuCrashLogs"/>
27
+    <addaction name="separator"/>
28
     <addaction name="actionCheckForUpdates"/>
29
    </widget>
30
    <widget class="QMenu" name="menuBasic_MainMenu_Edit">
31
@@ -182,7 +194,7 @@
32
      <addaction name="actionScaleCanvas"/>
33
      <addaction name="actionScaleOutput"/>
34
     </widget>
35
-    <action name="actionCopySource">    
36
+    <action name="actionCopySource">
37
      <property name="text">
38
       <string>Copy</string>
39
      </property>
40
@@ -1579,6 +1591,16 @@
41
     <string>Basic.MainMenu.Help.HelpPortal</string>
42
    </property>
43
   </action>
44
+  <action name="actionShowCrashLogs">
45
+   <property name="text">
46
+    <string>Basic.MainMenu.Help.CrashLogs.ShowLogs</string>
47
+   </property>
48
+  </action>
49
+  <action name="actionUploadLastCrashLog">
50
+   <property name="text">
51
+    <string>Basic.MainMenu.Help.CrashLogs.UploadLastLog</string>
52
+   </property>
53
+  </action>
54
  </widget>
55
  <customwidgets>
56
   <customwidget>
57
obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fil-PH.ini Added
44
 
1
@@ -0,0 +1,42 @@
2
+SceneSwitcher="Awyomatikong Eskana Tagalipat"
3
+SceneSwitcher.OnNoMatch="Kapag walang tumutugma sa bintana:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Huwag lumipat"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Lumipat sa:"
6
+SceneSwitcher.CheckInterval="Suriin ang aktibong pamagat ng bintana bawat:"
7
+SceneSwitcher.ActiveOrNotActive="Ang Eskana Tagalipat ay:"
8
+InvalidRegex.Title="Di-wastong Regular Expression"
9
+InvalidRegex.Text="Siya ay regular na expression na ipinasok mo ay hindi wasto."
10
+Active="Aktibo"
11
+Inactive="Di-aktibo"
12
+Start="Magsimula"
13
+Stop="Ihinto"
14
+
15
+Captions="Mga Caption (Experimental)"
16
+Captions.AudioSource="Pinagmulan ng audio"
17
+Captions.CurrentSystemLanguage="Kasalukuyang Wika ng Wika (%1)"
18
+Captions.Provider="Tagapagbigay"
19
+Captions.Error.GenericFail="Nabigong magsimula ng mga caption"
20
+
21
+OutputTimer="Output ng Timer"
22
+OutputTimer.Stream="Itigil ang streaming pagkatapos:"
23
+OutputTimer.Record="Itigil ang pag-record pagkatapos ng:"
24
+OutputTimer.Stream.StoppingIn="Ang pagtigil ng streaming sa:"
25
+OutputTimer.Record.StoppingIn="Pagre-record ng pagtigil sa:"
26
+OutputTimer.Stream.EnableEverytime="Paganahin ang streaming timer sa bawat oras"
27
+OutputTimer.Record.EnableEverytime="Paganahin ang timer ng pag-record sa bawat oras"
28
+
29
+Scripts="Mga script"
30
+LoadedScripts="Mga Loaded na Mga Script"
31
+AddScripts="Magdagdag ng Mga Script"
32
+RemoveScripts="Alisin ang Mga Script"
33
+ReloadScripts="I-reload ang Mga Script"
34
+PythonSettings="Mga Setting ng Python"
35
+PythonSettings.PythonInstallPath32bit="Path ng Pag-install ng Python (32bit)"
36
+PythonSettings.PythonInstallPath64bit="Path ng Pag-install ng Python (64bit)"
37
+PythonSettings.BrowsePythonPath="Mag-browse sa Python Path"
38
+ScriptLogWindow="Mag-log ng Script"
39
+Description="Paglalarawan"
40
+
41
+FileFilter.ScriptFiles="Mga File ng Script"
42
+FileFilter.AllFiles="Lahat ng Mga File"
43
+
44
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/he-IL.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/he-IL.ini Changed
27
 
1
@@ -1,7 +1,9 @@
2
+SceneSwitcher="החלפת סצנה אוטומטית"
3
 SceneSwitcher.OnNoMatch="כאשר אין חלון מתאים:"
4
 SceneSwitcher.OnNoMatch.DontSwitch="אל תעבור"
5
 SceneSwitcher.OnNoMatch.SwitchTo="עבור ל:"
6
 SceneSwitcher.CheckInterval="בדוק כותרת חלון פעיל בכל:"
7
+SceneSwitcher.ActiveOrNotActive="החלפת סצנה זה:"
8
 InvalidRegex.Title="ביטוי רגולרי לא חוקי"
9
 InvalidRegex.Text="הביטוי הרגולרי שהזנת אינו חוקי."
10
 Active="פעיל"
11
@@ -23,6 +25,15 @@
12
 OutputTimer.Stream.EnableEverytime="הפעל טיימר הזרמה כל פעם"
13
 OutputTimer.Record.EnableEverytime="הפעל טיימר הקלטה כל פעם"
14
 
15
+Scripts="תסריטים"
16
+LoadedScripts="תסריטים טעונים"
17
+AddScripts="הוסף תסריט"
18
+RemoveScripts="מחק תסריטים"
19
+ReloadScripts="טען מחדש תסריטים"
20
+PythonSettings="הגדרות פייתון"
21
+PythonSettings.PythonInstallPath32bit="נתיב התקנת פייתון (32 סיביות)"
22
+PythonSettings.PythonInstallPath64bit="התקנת נתיב פייתון (64 סיביות)"
23
+PythonSettings.BrowsePythonPath="עיון בנתיב פייתון"
24
 ScriptLogWindow="סקריפט לוג"
25
 Description="תיאור"
26
 
27
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ka-GE.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ka-GE.ini Changed
44
 
1
@@ -1,11 +1,42 @@
2
+SceneSwitcher="სცენის თვითგადამრთველი"
3
+SceneSwitcher.OnNoMatch="როცა არცერთი ფანჯარა არ ემთხვევა:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="არ გადაირთოს"
5
+SceneSwitcher.OnNoMatch.SwitchTo="გადაირთოს:"
6
+SceneSwitcher.CheckInterval="მოქმედი ფანჯრის დასახელების გადამოწმების დროის შუალედი:"
7
+SceneSwitcher.ActiveOrNotActive="სცენის თვითგადამრთველი:"
8
+InvalidRegex.Title="არამართებული რეგულარული გამოსახულება"
9
+InvalidRegex.Text="შეყვანილი რეგულარული გამოსახულება არასწორია."
10
 Active="ჩართული"
11
 Inactive="გამორთული"
12
 Start="დაწყება"
13
 Stop="შეწყვეტა"
14
 
15
+Captions="წარწერები (საცდელი)"
16
 Captions.AudioSource="აუდიოს წყარო"
17
+Captions.CurrentSystemLanguage="სისტემის მიმდინარე ენა (%1)"
18
+Captions.Provider="მომწოდებელი"
19
+Captions.Error.GenericFail="წარწერების დადება ვერ მოხერხდა"
20
 
21
+OutputTimer="ჩაწერის და ნაკადის წამზომი"
22
+OutputTimer.Stream="ნაკადი გაეშვას არაუმეტეს:"
23
+OutputTimer.Record="ჩაწერა გაგრძელდეს არაუმეტეს:"
24
+OutputTimer.Stream.StoppingIn="ნაკადის შეჩერების დროა:"
25
 OutputTimer.Record.StoppingIn="ჩაწერის შეწყვეტის დრო:"
26
+OutputTimer.Stream.EnableEverytime="ნაკადის წამზომის ჩართვა ყოველ ჯერზე"
27
+OutputTimer.Record.EnableEverytime="ჩაწერის წამზომის ჩართვა ყოველ ჯერზე"
28
 
29
+Scripts="სკრიპტები"
30
+LoadedScripts="ჩატვირთული სკრიპტები"
31
+AddScripts="სკრიპტების დამატება"
32
+RemoveScripts="სკრიპტების მოცილება"
33
+ReloadScripts="სკრიპტების გადატვირთვა"
34
+PythonSettings="Python-ის პარამეტრები"
35
+PythonSettings.PythonInstallPath32bit="Python-ის დასაყენებელი მდებარეობა (32bit)"
36
+PythonSettings.PythonInstallPath64bit="Python-ის დასაყენებელი მდებარეობა (64bit)"
37
+PythonSettings.BrowsePythonPath="Python-ის მდებარეობის მოძიება"
38
+ScriptLogWindow="სკრიპტის აღრიცხვა"
39
+Description="აღწერილობა"
40
 
41
+FileFilter.ScriptFiles="სკრიპტის ფაილები"
42
+FileFilter.AllFiles="ყველა ფაილი"
43
 
44
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini Changed
18
 
1
@@ -1,4 +1,4 @@
2
-SceneSwitcher="Automatisk Scene Skifter"
3
+SceneSwitcher="Automatisk sceneskifter"
4
 SceneSwitcher.OnNoMatch="Når ingen vindu passer overens:"
5
 SceneSwitcher.OnNoMatch.DontSwitch="Ikke bytt"
6
 SceneSwitcher.OnNoMatch.SwitchTo="Bytt til:"
7
@@ -22,8 +22,8 @@
8
 OutputTimer.Record="Stopp opptak etter:"
9
 OutputTimer.Stream.StoppingIn="Streaming stopper om:"
10
 OutputTimer.Record.StoppingIn="Opptak stopper om:"
11
-OutputTimer.Stream.EnableEverytime="Aktiver streaming timer hver gang"
12
-OutputTimer.Record.EnableEverytime="Aktiver opptaks timer hver gang"
13
+OutputTimer.Stream.EnableEverytime="Aktiver strømmeklokken hver gang"
14
+OutputTimer.Record.EnableEverytime="Aktiver opptaksklokken hver gang"
15
 
16
 Scripts="Skripter"
17
 LoadedScripts="Innlastede skripter"
18
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini Changed
18
 
1
@@ -17,12 +17,12 @@
2
 Captions.Provider="Поставщик"
3
 Captions.Error.GenericFail="Не удалось запустить субтитры"
4
 
5
-OutputTimer="Таймер записи и стрима"
6
-OutputTimer.Stream="Завершить стрим через:"
7
+OutputTimer="Таймер записи и трансляции"
8
+OutputTimer.Stream="Завершить трансляцию через:"
9
 OutputTimer.Record="Завершить запись через:"
10
-OutputTimer.Stream.StoppingIn="Стрим будет завершён через:"
11
+OutputTimer.Stream.StoppingIn="Трансляция будет завершена через:"
12
 OutputTimer.Record.StoppingIn="Запись будет завершена через:"
13
-OutputTimer.Stream.EnableEverytime="Включать таймер стрима каждый раз"
14
+OutputTimer.Stream.EnableEverytime="Включать таймер трансляции каждый раз"
15
 OutputTimer.Record.EnableEverytime="Включать таймер записи каждый раз"
16
 
17
 Scripts="Скрипты"
18
obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/tl-PH.ini Added
44
 
1
@@ -0,0 +1,42 @@
2
+SceneSwitcher="Awtomatikong Taga-palit ng Eksena"
3
+SceneSwitcher.OnNoMatch="Kapag walang tumugmang window:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Huwag lumipat"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Lumipat sa:"
6
+SceneSwitcher.CheckInterval="Suriin ang pamagat ng aktibong window kada:"
7
+SceneSwitcher.ActiveOrNotActive="Ang Tag-palit ng Eksena ay:"
8
+InvalidRegex.Title="Di-wastong Regular Expression"
9
+InvalidRegex.Text="Ang regular na ekspresyon na iyong ipinasok ay imbalido."
10
+Active="Aktibo"
11
+Inactive="Hindi aktibo"
12
+Start="Simula"
13
+Stop="Ihinto"
14
+
15
+Captions="Mga Pamagat (Eksparimento)"
16
+Captions.AudioSource="Pinanggalingan ng Audio"
17
+Captions.CurrentSystemLanguage="Kasalukuyang linggwahe ng sistema (%1)"
18
+Captions.Provider="Tagapagtustos"
19
+Captions.Error.GenericFail="Nabigo sa pasisimula ng mga pamagat"
20
+
21
+OutputTimer="Pamlabas na Orasan"
22
+OutputTimer.Stream="Itigil ang pag-stream pagkatapos:"
23
+OutputTimer.Record="Itigil ang pagtatala pagkatapos:"
24
+OutputTimer.Stream.StoppingIn="Ang pagtigil ng stream sa:"
25
+OutputTimer.Record.StoppingIn="Ang pagtigil ng pagtatala sa:"
26
+OutputTimer.Stream.EnableEverytime="Paganahin ang streaming timer sa bawat oras"
27
+OutputTimer.Record.EnableEverytime="Paganahin ang timer ng pagtatala bawat oras"
28
+
29
+Scripts="Mga iskrip"
30
+LoadedScripts="Mga iskrip na naikarga"
31
+AddScripts="Magdagdag ng iskrip"
32
+RemoveScripts="Tanggalin ang mga iskrip"
33
+ReloadScripts="Ikargang muli ang mga Iskrip"
34
+PythonSettings="Mga Setting Python"
35
+PythonSettings.PythonInstallPath32bit="I-install ang daan sa Python (32bit)"
36
+PythonSettings.PythonInstallPath64bit="I-install ang Daan sa Python (64bit)"
37
+PythonSettings.BrowsePythonPath="Daan ng Browse Python"
38
+ScriptLogWindow="Mag-log sa Iskrip"
39
+Description="Paglalarawan"
40
+
41
+FileFilter.ScriptFiles="Mga File ng Iskrip"
42
+FileFilter.AllFiles="Lahat ng mga File"
43
+
44
obs-studio-21.0.3.tar.xz/UI/obs-app.cpp -> obs-studio-21.1.2.tar.xz/UI/obs-app.cpp Changed
128
 
1
@@ -60,6 +60,7 @@
2
 
3
 static string currentLogFile;
4
 static string lastLogFile;
5
+static string lastCrashLogFile;
6
 
7
 bool portable_mode = false;
8
 static bool multi = false;
9
@@ -1051,6 +1052,11 @@
10
    return currentLogFile.c_str();
11
 }
12
 
13
+const char *OBSApp::GetLastCrashLog() const
14
+{
15
+   return lastCrashLogFile.c_str();
16
+}
17
+
18
 bool OBSApp::TranslateString(const char *lookupVal, const char **out) const
19
 {
20
    for (obs_frontend_translate_ui_cb cb : translatorHooks) {
21
@@ -1097,13 +1103,18 @@
22
    return strref_cmp(&token.text, str) == 0;
23
 }
24
 
25
-static uint64_t convert_log_name(const char *name)
26
+static uint64_t convert_log_name(bool has_prefix, const char *name)
27
 {
28
    BaseLexer  lex;
29
    string     year, month, day, hour, minute, second;
30
 
31
    lexer_start(lex, name);
32
 
33
+   if (has_prefix) {
34
+       string temp;
35
+       if (!get_token(lex, temp, BASETOKEN_ALPHA)) return 0;
36
+   }
37
+
38
    if (!get_token(lex, year,   BASETOKEN_DIGIT)) return 0;
39
    if (!expect_token(lex, "-", BASETOKEN_OTHER)) return 0;
40
    if (!get_token(lex, month,  BASETOKEN_DIGIT)) return 0;
41
@@ -1120,7 +1131,7 @@
42
    return std::stoull(timestring.str());
43
 }
44
 
45
-static void delete_oldest_file(const char *location)
46
+static void delete_oldest_file(bool has_prefix, const char *location)
47
 {
48
    BPtr<char>       logDir(GetConfigPathPtr(location));
49
    string           oldestLog;
50
@@ -1138,7 +1149,8 @@
51
            if (entry->directory || *entry->d_name == '.')
52
                continue;
53
 
54
-           uint64_t ts = convert_log_name(entry->d_name);
55
+           uint64_t ts = convert_log_name(has_prefix,
56
+                   entry->d_name);
57
 
58
            if (ts) {
59
                if (ts < oldest_ts) {
60
@@ -1161,9 +1173,10 @@
61
    }
62
 }
63
 
64
-static void get_last_log(void)
65
+static void get_last_log(bool has_prefix, const char *subdir_to_use,
66
+       std::string &last)
67
 {
68
-   BPtr<char>       logDir(GetConfigPathPtr("obs-studio/logs"));
69
+   BPtr<char>       logDir(GetConfigPathPtr(subdir_to_use));
70
    struct os_dirent *entry;
71
    os_dir_t         *dir        = os_opendir(logDir);
72
    uint64_t         highest_ts = 0;
73
@@ -1173,11 +1186,12 @@
74
            if (entry->directory || *entry->d_name == '.')
75
                continue;
76
 
77
-           uint64_t ts = convert_log_name(entry->d_name);
78
+           uint64_t ts = convert_log_name(has_prefix,
79
+                   entry->d_name);
80
 
81
            if (ts > highest_ts) {
82
-               lastLogFile = entry->d_name;
83
-               highest_ts  = ts;
84
+               last = entry->d_name;
85
+               highest_ts = ts;
86
            }
87
        }
88
 
89
@@ -1240,7 +1254,10 @@
90
 {
91
    stringstream dst;
92
 
93
-   get_last_log();
94
+   get_last_log(false, "obs-studio/logs", lastLogFile);
95
+#ifdef _WIN32
96
+   get_last_log(true, "obs-studio/crashes", lastCrashLogFile);
97
+#endif
98
 
99
    currentLogFile = GenerateTimeDateFilename("txt");
100
    dst << "obs-studio/logs/" << currentLogFile.c_str();
101
@@ -1258,7 +1275,7 @@
102
 #endif
103
 
104
    if (logFile.is_open()) {
105
-       delete_oldest_file("obs-studio/logs");
106
+       delete_oldest_file(false, "obs-studio/logs");
107
        base_set_log_handler(do_log, &logFile);
108
    } else {
109
        blog(LOG_ERROR, "Failed to open log file");
110
@@ -1354,7 +1371,7 @@
111
        OBSTranslator translator;
112
 
113
        create_log_file(logFile);
114
-       delete_oldest_file("obs-studio/profiler_data");
115
+       delete_oldest_file(false, "obs-studio/profiler_data");
116
 
117
        program.installTranslator(&translator);
118
 
119
@@ -1441,7 +1458,7 @@
120
    vsnprintf(text, MAX_CRASH_REPORT_SIZE, format, args);
121
    text[MAX_CRASH_REPORT_SIZE - 1] = 0;
122
 
123
-   delete_oldest_file("obs-studio/crashes");
124
+   delete_oldest_file(true, "obs-studio/crashes");
125
 
126
    string name = "obs-studio/crashes/Crash ";
127
    name += GenerateTimeDateFilename("txt");
128
obs-studio-21.0.3.tar.xz/UI/obs-app.hpp -> obs-studio-21.1.2.tar.xz/UI/obs-app.hpp Changed
10
 
1
@@ -116,6 +116,8 @@
2
    const char *GetLastLog() const;
3
    const char *GetCurrentLog() const;
4
 
5
+   const char *GetLastCrashLog() const;
6
+
7
    std::string GetVersionString() const;
8
    bool IsPortableMode();
9
 
10
obs-studio-21.0.3.tar.xz/UI/properties-view.cpp -> obs-studio-21.1.2.tar.xz/UI/properties-view.cpp Changed
19
 
1
@@ -236,7 +236,7 @@
2
 {
3
    const char    *name = obs_property_name(prop);
4
    const char    *val  = obs_data_get_string(settings, name);
5
-   obs_text_type type  = obs_proprety_text_type(prop);
6
+   obs_text_type type  = obs_property_text_type(prop);
7
 
8
    if (type == OBS_TEXT_MULTILINE) {
9
        QPlainTextEdit *edit = new QPlainTextEdit(QT_UTF8(val));
10
@@ -1529,7 +1529,7 @@
11
 
12
 void WidgetInfo::TextChanged(const char *setting)
13
 {
14
-   obs_text_type type  = obs_proprety_text_type(property);
15
+   obs_text_type type  = obs_property_text_type(property);
16
 
17
    if (type == OBS_TEXT_MULTILINE) {
18
        QPlainTextEdit *edit = static_cast<QPlainTextEdit*>(widget);
19
obs-studio-21.0.3.tar.xz/UI/win-update/updater/hash.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/hash.cpp Changed
21
 
1
@@ -1,3 +1,19 @@
2
+/*
3
+ * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com>
4
+ *
5
+ * Permission to use, copy, modify, and distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
 #include "updater.hpp"
19
 
20
 #include <util/windows/WinHandle.hpp>
21
obs-studio-21.0.3.tar.xz/UI/win-update/updater/http.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/http.cpp Changed
21
 
1
@@ -1,3 +1,19 @@
2
+/*
3
+ * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com>
4
+ *
5
+ * Permission to use, copy, modify, and distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
 #include "Updater.hpp"
19
 
20
 #include <algorithm>
21
obs-studio-21.0.3.tar.xz/UI/win-update/updater/patch.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/patch.cpp Changed
43
 
1
@@ -1,9 +1,31 @@
2
+/*
3
+ * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com>
4
+ *
5
+ * Permission to use, copy, modify, and distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
 #include "updater.hpp"
19
 
20
 #include <stdint.h>
21
 #include <vector>
22
 
23
-#include <lzma.h>
24
+#ifdef _MSC_VER
25
+# define restrict __restrict
26
+# include <lzma.h>
27
+# undef restrict
28
+#else
29
+# include <lzma.h>
30
+#endif
31
 
32
 using namespace std;
33
 
34
@@ -234,7 +256,7 @@
35
 
36
    vector<uint8_t> newData;
37
    try {
38
-       newData.resize(newsize);
39
+       newData.resize((size_t)newsize);
40
    } catch (...) {
41
        throw int(-1);
42
    }
43
obs-studio-21.0.3.tar.xz/UI/win-update/updater/updater.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/updater.cpp Changed
360
 
1
@@ -1,20 +1,18 @@
2
-/******************************************************************************
3
- Copyright (C) 2017 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, write to the Free Software
17
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
18
-******************************************************************************/
19
+/*
20
+ * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com>
21
+ *
22
+ * Permission to use, copy, modify, and distribute this software for any
23
+ * purpose with or without fee is hereby granted, provided that the above
24
+ * copyright notice and this permission notice appear in all copies.
25
+ *
26
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
27
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
28
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
29
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
30
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
31
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
32
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
33
+ */
34
 
35
 #include "updater.hpp"
36
 
37
@@ -59,50 +57,48 @@
38
 
39
 /* ----------------------------------------------------------------------- */
40
 
41
-// http://www.codeproject.com/Articles/320748/Haephrati-Elevating-during-runtime
42
-static bool IsAppRunningAsAdminMode()
43
+static inline bool is_64bit_windows(void);
44
+
45
+static inline bool HasVS2017Redist2()
46
 {
47
-   BOOL  fIsRunAsAdmin        = FALSE;
48
-   DWORD dwError              = ERROR_SUCCESS;
49
-   PSID  pAdministratorsGroup = nullptr;
50
-
51
-   /* Allocate and initialize a SID of the administrators group. */
52
-   SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
53
-   if (!AllocateAndInitializeSid(&NtAuthority,
54
-                                 2,
55
-                                 SECURITY_BUILTIN_DOMAIN_RID,
56
-                                 DOMAIN_ALIAS_RID_ADMINS,
57
-                                 0,
58
-                                 0,
59
-                                 0,
60
-                                 0,
61
-                                 0,
62
-                                 0,
63
-                                 &pAdministratorsGroup)) {
64
-       dwError = GetLastError();
65
-       goto Cleanup;
66
-   }
67
+   wchar_t base[MAX_PATH];
68
+   wchar_t path[MAX_PATH];
69
+   WIN32_FIND_DATAW wfd;
70
+   HANDLE handle;
71
+   int folder = (is32bit && is_64bit_windows())
72
+       ? CSIDL_SYSTEMX86
73
+       : CSIDL_SYSTEM;
74
 
75
-   /* Determine whether the SID of administrators group is enabled in the
76
-    * primary access token of the process. */
77
-   if (!CheckTokenMembership(nullptr, pAdministratorsGroup,
78
-               &fIsRunAsAdmin)) {
79
-       dwError = GetLastError();
80
-       goto Cleanup;
81
-   }
82
+   SHGetFolderPathW(NULL, folder, NULL, SHGFP_TYPE_CURRENT, base);
83
 
84
-Cleanup:
85
-   /* Centralized cleanup for all allocated resources. */
86
-   if (pAdministratorsGroup) {
87
-       FreeSid(pAdministratorsGroup);
88
-       pAdministratorsGroup = nullptr;
89
+   StringCbCopyW(path, sizeof(path), base);
90
+   StringCbCatW(path, sizeof(path), L"\\msvcp140.dll");
91
+   handle = FindFirstFileW(path, &wfd);
92
+   if (handle == INVALID_HANDLE_VALUE) {
93
+       return false;
94
+   } else {
95
+       FindClose(handle);
96
    }
97
 
98
-   /* Throw the error if something failed in the function. */
99
-   if (ERROR_SUCCESS != dwError)
100
+   StringCbCopyW(path, sizeof(path), base);
101
+   StringCbCatW(path, sizeof(path), L"\\vcruntime140.dll");
102
+   handle = FindFirstFileW(path, &wfd);
103
+   if (handle == INVALID_HANDLE_VALUE) {
104
        return false;
105
+   } else {
106
+       FindClose(handle);
107
+   }
108
 
109
-   return !!fIsRunAsAdmin;
110
+   return true;
111
+}
112
+
113
+static bool HasVS2017Redist()
114
+{
115
+   PVOID old = nullptr;
116
+   bool redirect = !!Wow64DisableWow64FsRedirection(&old);
117
+   bool success = HasVS2017Redist2();
118
+   if (redirect) Wow64RevertWow64FsRedirection(old);
119
+   return success;
120
 }
121
 
122
 static void Status(const wchar_t *fmt, ...)
123
@@ -608,6 +604,11 @@
124
           strstr(file, "64.exe") != nullptr;
125
 }
126
 
127
+static inline bool has_str(const char *file, const char *str)
128
+{
129
+   return (file && str) ? (strstr(file, str) != nullptr) : false;
130
+}
131
+
132
 #define UTF8ToWideBuf(wide, utf8) UTF8ToWide(wide, _countof(wide), utf8)
133
 #define WideToUTF8Buf(utf8, wide) WideToUTF8(utf8, _countof(utf8), wide)
134
 
135
@@ -661,6 +662,12 @@
136
        if (!isWin64 && is_64bit_file(fileUTF8))
137
            continue;
138
 
139
+       /* ignore update files of opposite arch to reduce download */
140
+
141
+       if (( is32bit && has_str(fileUTF8, "/64bit/")) ||
142
+           (!is32bit && has_str(fileUTF8, "/32bit/")))
143
+           continue;
144
+
145
        /* convert strings to wide */
146
 
147
        wchar_t sourceURL[1024];
148
@@ -930,6 +937,156 @@
149
 #define HASH_NULL \
150
    L"0000000000000000000000000000000000000000"
151
 
152
+static bool UpdateVS2017Redists(json_t *root)
153
+{
154
+   /* ------------------------------------------ *
155
+    * Initialize session                         */
156
+
157
+   const DWORD tlsProtocols = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2;
158
+
159
+   HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/2.1",
160
+                                     WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
161
+                                     WINHTTP_NO_PROXY_NAME,
162
+                                     WINHTTP_NO_PROXY_BYPASS,
163
+                                     0);
164
+   if (!hSession) {
165
+       Status(L"Update failed: Couldn't open obsproject.com");
166
+       return false;
167
+   }
168
+
169
+   WinHttpSetOption(hSession, WINHTTP_OPTION_SECURE_PROTOCOLS,
170
+       (LPVOID)&tlsProtocols, sizeof(tlsProtocols));
171
+
172
+   HttpHandle hConnect = WinHttpConnect(hSession, L"obsproject.com",
173
+           INTERNET_DEFAULT_HTTPS_PORT, 0);
174
+   if (!hConnect) {
175
+       Status(L"Update failed: Couldn't connect to obsproject.com");
176
+       return false;
177
+   }
178
+
179
+   int responseCode;
180
+
181
+   DWORD waitResult = WaitForSingleObject(cancelRequested, 0);
182
+   if (waitResult == WAIT_OBJECT_0) {
183
+       return false;
184
+   }
185
+
186
+   /* ------------------------------------------ *
187
+    * Download redist                            */
188
+
189
+   Status(L"Downloading %s", L"Visual C++ 2017 Redistributable");
190
+
191
+   const wchar_t *file = (is32bit)
192
+       ? L"vc2017redist_x86.exe"
193
+       : L"vc2017redist_x64.exe";
194
+
195
+   wstring sourceURL;
196
+   sourceURL += L"https://obsproject.com/downloads/";
197
+   sourceURL += file;
198
+
199
+   wstring destPath;
200
+   destPath += tempPath;
201
+   destPath += L"\\";
202
+   destPath += file;
203
+
204
+   if (!HTTPGetFile(hConnect,
205
+            sourceURL.c_str(),
206
+            destPath.c_str(),
207
+            L"Accept-Encoding: gzip",
208
+            &responseCode)) {
209
+
210
+       DeleteFile(destPath.c_str());
211
+       Status(L"Update failed: Could not download "
212
+              L"%s (error code %d)",
213
+              L"Visual C++ 2017 Redistributable",
214
+              responseCode);
215
+       return false;
216
+   }
217
+
218
+   /* ------------------------------------------ *
219
+    * Get expected hash                          */
220
+
221
+   json_t *redistJson = json_object_get(root, is32bit
222
+           ? "vc2017_redist_x86"
223
+           : "vc2017_redist_x64");
224
+   if (!redistJson) {
225
+       Status(L"Update failed: Could not parse VC2017 redist json");
226
+       return false;
227
+   }
228
+
229
+   const char *expectedHashUTF8 = json_string_value(redistJson);
230
+   wchar_t expectedHashWide[BLAKE2_HASH_STR_LENGTH];
231
+   BYTE expectedHash[BLAKE2_HASH_LENGTH];
232
+
233
+   if (!UTF8ToWideBuf(expectedHashWide, expectedHashUTF8)) {
234
+       DeleteFile(destPath.c_str());
235
+       Status(L"Update failed: Couldn't convert Json for redist hash");
236
+       return false;
237
+   }
238
+
239
+   StringToHash(expectedHashWide, expectedHash);
240
+
241
+   wchar_t downloadHashWide[BLAKE2_HASH_STR_LENGTH];
242
+   BYTE downloadHash[BLAKE2_HASH_LENGTH];
243
+
244
+   /* ------------------------------------------ *
245
+    * Get download hash                          */
246
+
247
+   if (!CalculateFileHash(destPath.c_str(), downloadHash)) {
248
+       DeleteFile(destPath.c_str());
249
+       Status(L"Update failed: Couldn't verify integrity of %s",
250
+               L"Visual C++ 2017 Redistributable");
251
+       return false;
252
+   }
253
+
254
+   /* ------------------------------------------ *
255
+    * If hashes do not match, integrity failed   */
256
+
257
+   HashToString(downloadHash, downloadHashWide);
258
+   if (wcscmp(expectedHashWide, downloadHashWide) != 0) {
259
+       DeleteFile(destPath.c_str());
260
+       Status(L"Update failed: Couldn't verify integrity of %s",
261
+               L"Visual C++ 2017 Redistributable");
262
+       return false;
263
+   }
264
+
265
+   /* ------------------------------------------ *
266
+    * If hashes match, install redist            */
267
+
268
+   wchar_t commandline[MAX_PATH + MAX_PATH];
269
+   StringCbPrintf(commandline, sizeof(commandline),
270
+           L"%s /install /quiet /norestart", destPath.c_str());
271
+
272
+   PROCESS_INFORMATION pi = {};
273
+   STARTUPINFO si = {};
274
+   si.cb = sizeof(si);
275
+
276
+   bool success = !!CreateProcessW(destPath.c_str(), commandline,
277
+           nullptr, nullptr, false, CREATE_NO_WINDOW,
278
+           nullptr, nullptr, &si, &pi);
279
+   if (success) {
280
+       Status(L"Installing %s...", L"Visual C++ 2017 Redistributable");
281
+
282
+       CloseHandle(pi.hThread);
283
+       WaitForSingleObject(pi.hProcess, INFINITE);
284
+       CloseHandle(pi.hProcess);
285
+   } else {
286
+       Status(L"Update failed: Could not execute "
287
+              L"%s (error code %d)",
288
+              L"Visual C++ 2017 Redistributable",
289
+              (int)GetLastError());
290
+   }
291
+
292
+   DeleteFile(destPath.c_str());
293
+
294
+   waitResult = WaitForSingleObject(cancelRequested, 0);
295
+   if (waitResult == WAIT_OBJECT_0) {
296
+       return false;
297
+   }
298
+
299
+   return success;
300
+}
301
+
302
 static bool Update(wchar_t *cmdLine)
303
 {
304
    /* ------------------------------------- *
305
@@ -1092,6 +1249,15 @@
306
    }
307
 
308
    /* ------------------------------------- *
309
+    * Check for VS2017 redistributables     */
310
+
311
+   if (!HasVS2017Redist()) {
312
+       if (!UpdateVS2017Redists(root)) {
313
+           return false;
314
+       }
315
+   }
316
+
317
+   /* ------------------------------------- *
318
     * Generate file hash json               */
319
 
320
    Json files(json_array());
321
@@ -1219,7 +1385,7 @@
322
    if (!RunDownloadWorkers(2))
323
        return false;
324
 
325
-   if (completedUpdates != updates.size()) {
326
+   if ((size_t)completedUpdates != updates.size()) {
327
        Status(L"Update failed to download all files.");
328
        return false;
329
    }
330
@@ -1431,11 +1597,28 @@
331
    }
332
 }
333
 
334
+static bool HasElevation()
335
+{
336
+   SID_IDENTIFIER_AUTHORITY sia = SECURITY_NT_AUTHORITY;
337
+   PSID sid = nullptr;
338
+   BOOL elevated = false;
339
+   BOOL success;
340
+
341
+   success = AllocateAndInitializeSid(&sia, 2, SECURITY_BUILTIN_DOMAIN_RID,
342
+           DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &sid);
343
+   if (success && sid) {
344
+       CheckTokenMembership(nullptr, sid, &elevated);
345
+       FreeSid(sid);
346
+   }
347
+
348
+   return elevated;
349
+}
350
+
351
 int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int)
352
 {
353
    INITCOMMONCONTROLSEX icce;
354
 
355
-   if (!IsAppRunningAsAdminMode()) {
356
+   if (!HasElevation()) {
357
        HANDLE hLowMutex = CreateMutexW(nullptr, true,
358
                L"OBSUpdaterRunningAsNonAdminUser");
359
 
360
obs-studio-21.0.3.tar.xz/UI/win-update/updater/updater.hpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/updater.hpp Changed
21
 
1
@@ -1,3 +1,19 @@
2
+/*
3
+ * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com>
4
+ *
5
+ * Permission to use, copy, modify, and distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
 #pragma once
19
 
20
 #define WINVER 0x0600
21
obs-studio-21.0.3.tar.xz/UI/win-update/updater/updater.rc -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/updater.rc Changed
10
 
1
@@ -7,7 +7,7 @@
2
 //
3
 // Generated from the TEXTINCLUDE 2 resource.
4
 //
5
-#include "afxres.h"
6
+#include "winres.h"
7
 
8
 /////////////////////////////////////////////////////////////////////////////
9
 #undef APSTUDIO_READONLY_SYMBOLS
10
obs-studio-21.0.3.tar.xz/UI/window-basic-main.cpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-main.cpp Changed
221
 
1
@@ -1647,13 +1647,30 @@
2
 
3
    ui->viewMenu->addSeparator();
4
 
5
-   QMenu *multiviewProjectorMenu = new QMenu(QTStr("MultiviewProjector"));
6
-   AddProjectorMenuMonitors(multiviewProjectorMenu, this,
7
-           SLOT(OpenMultiviewProjector()));
8
+   multiviewProjectorMenu = new QMenu(QTStr("MultiviewProjector"));
9
    ui->viewMenu->addMenu(multiviewProjectorMenu);
10
-
11
+   connect(ui->viewMenu->menuAction(), &QAction::hovered, this,
12
+           &OBSBasic::UpdateMultiviewProjectorMenu);
13
    ui->viewMenu->addAction(QTStr("MultiviewWindowed"),
14
            this, SLOT(OpenMultiviewWindow()));
15
+
16
+#if !defined(_WIN32) && !defined(__APPLE__)
17
+   delete ui->actionShowCrashLogs;
18
+   delete ui->actionUploadLastCrashLog;
19
+   delete ui->menuCrashLogs;
20
+   delete ui->actionCheckForUpdates;
21
+   ui->actionShowCrashLogs = nullptr;
22
+   ui->actionUploadLastCrashLog = nullptr;
23
+   ui->menuCrashLogs = nullptr;
24
+   ui->actionCheckForUpdates = nullptr;
25
+#endif
26
+}
27
+
28
+void OBSBasic::UpdateMultiviewProjectorMenu()
29
+{
30
+   multiviewProjectorMenu->clear();
31
+   AddProjectorMenuMonitors(multiviewProjectorMenu, this,
32
+           SLOT(OpenMultiviewProjector()));
33
 }
34
 
35
 void OBSBasic::InitHotkeys()
36
@@ -3520,10 +3537,10 @@
37
        QString str = QString("%1 %2: %3x%4 @ %5,%6").
38
            arg(QTStr("Display"),
39
                QString::number(i),
40
-               QString::number((int)screenGeometry.width()),
41
-               QString::number((int)screenGeometry.height()),
42
-               QString::number((int)screenGeometry.x()),
43
-               QString::number((int)screenGeometry.y()));
44
+               QString::number(screenGeometry.width()),
45
+               QString::number(screenGeometry.height()),
46
+               QString::number(screenGeometry.x()),
47
+               QString::number(screenGeometry.y()));
48
 
49
        action = parent->addAction(str, target, slot);
50
        action->setProperty("monitor", i);
51
@@ -4220,10 +4237,10 @@
52
    obs_sceneitem_set_order(item, OBS_ORDER_MOVE_BOTTOM);
53
 }
54
 
55
-static BPtr<char> ReadLogFile(const char *log)
56
+static BPtr<char> ReadLogFile(const char *subdir, const char *log)
57
 {
58
    char logDir[512];
59
-   if (GetConfigPath(logDir, sizeof(logDir), "obs-studio/logs") <= 0)
60
+   if (GetConfigPath(logDir, sizeof(logDir), subdir) <= 0)
61
        return nullptr;
62
 
63
    string path = (char*)logDir;
64
@@ -4237,9 +4254,9 @@
65
    return file;
66
 }
67
 
68
-void OBSBasic::UploadLog(const char *file)
69
+void OBSBasic::UploadLog(const char *subdir, const char *file)
70
 {
71
-   BPtr<char> fileString{ReadLogFile(file)};
72
+   BPtr<char> fileString{ReadLogFile(subdir, file)};
73
 
74
    if (!fileString)
75
        return;
76
@@ -4249,32 +4266,11 @@
77
 
78
    ui->menuLogFiles->setEnabled(false);
79
 
80
-   auto data_deleter = [](obs_data_t *d) { obs_data_release(d); };
81
-   using data_t = unique_ptr<struct obs_data, decltype(data_deleter)>;
82
-
83
-   data_t content{obs_data_create(), data_deleter};
84
-   data_t files{obs_data_create(), data_deleter};
85
-   data_t request{obs_data_create(), data_deleter};
86
-
87
-   obs_data_set_string(content.get(), "content", fileString);
88
-
89
-   obs_data_set_obj(files.get(), file, content.get());
90
-
91
    stringstream ss;
92
    ss << "OBS " << App()->GetVersionString()
93
-      << " log file uploaded at " << CurrentDateTimeString();
94
-   obs_data_set_string(request.get(), "description", ss.str().c_str());
95
-   obs_data_set_bool(request.get(), "public", false);
96
-   obs_data_set_obj(request.get(), "files", files.get());
97
+      << " log file uploaded at " << CurrentDateTimeString()
98
+      << "\n\n" << fileString;
99
 
100
-   const char *json = obs_data_get_json(request.get());
101
-   if (!json) {
102
-       blog(LOG_ERROR, "Failed to get JSON data for log upload");
103
-       return;
104
-   }
105
-
106
-   QBuffer *postData = new QBuffer();
107
-   postData->setData(json, (int) strlen(json));
108
 
109
    if (logUploadThread) {
110
        logUploadThread->wait();
111
@@ -4282,8 +4278,9 @@
112
    }
113
 
114
    RemoteTextThread *thread = new RemoteTextThread(
115
-           "https://api.github.com/gists",
116
-           "application/json", json);
117
+           "https://hastebin.com/documents",
118
+           "text/plain", ss.str().c_str());
119
+
120
    logUploadThread = thread;
121
    connect(thread, &RemoteTextThread::Result,
122
            this, &OBSBasic::logUploadFinished);
123
@@ -4302,12 +4299,12 @@
124
 
125
 void OBSBasic::on_actionUploadCurrentLog_triggered()
126
 {
127
-   UploadLog(App()->GetCurrentLog());
128
+   UploadLog("obs-studio/logs", App()->GetCurrentLog());
129
 }
130
 
131
 void OBSBasic::on_actionUploadLastLog_triggered()
132
 {
133
-   UploadLog(App()->GetLastLog());
134
+   UploadLog("obs-studio/logs", App()->GetLastLog());
135
 }
136
 
137
 void OBSBasic::on_actionViewCurrentLog_triggered()
138
@@ -4326,6 +4323,21 @@
139
    QDesktopServices::openUrl(url);
140
 }
141
 
142
+void OBSBasic::on_actionShowCrashLogs_triggered()
143
+{
144
+   char logDir[512];
145
+   if (GetConfigPath(logDir, sizeof(logDir), "obs-studio/crashes") <= 0)
146
+       return;
147
+
148
+   QUrl url = QUrl::fromLocalFile(QT_UTF8(logDir));
149
+   QDesktopServices::openUrl(url);
150
+}
151
+
152
+void OBSBasic::on_actionUploadLastCrashLog_triggered()
153
+{
154
+   UploadLog("obs-studio/crashes", App()->GetLastCrashLog());
155
+}
156
+
157
 void OBSBasic::on_actionCheckForUpdates_triggered()
158
 {
159
    CheckForUpdates(true);
160
@@ -4343,7 +4355,9 @@
161
    }
162
 
163
    obs_data_t *returnData = obs_data_create_from_json(QT_TO_UTF8(text));
164
-   QString logURL         = obs_data_get_string(returnData, "html_url");
165
+   string resURL = "https://hastebin.com/";
166
+   resURL += obs_data_get_string(returnData, "key");
167
+   QString logURL = resURL.c_str();
168
    obs_data_release(returnData);
169
 
170
    OBSLogReply logDialog(this, logURL);
171
@@ -6040,29 +6054,32 @@
172
    connect(exit, SIGNAL(triggered()),
173
            this, SLOT(close()));
174
 
175
-   QMenu *previewProjector = new QMenu(QTStr("PreviewProjector"));
176
-   AddProjectorMenuMonitors(previewProjector, this,
177
-           SLOT(OpenPreviewProjector()));
178
-   QMenu *studioProgramProjector = new QMenu(
179
-           QTStr("StudioProgramProjector"));
180
-   AddProjectorMenuMonitors(studioProgramProjector, this,
181
-           SLOT(OpenStudioProgramProjector()));
182
-
183
    trayMenu = new QMenu;
184
-   trayMenu->addAction(showHide);
185
-   trayMenu->addMenu(previewProjector);
186
-   trayMenu->addMenu(studioProgramProjector);
187
-   trayMenu->addAction(sysTrayStream);
188
-   trayMenu->addAction(sysTrayRecord);
189
-   trayMenu->addAction(sysTrayReplayBuffer);
190
-   trayMenu->addAction(exit);
191
-   trayIcon->setContextMenu(trayMenu);
192
 }
193
 
194
 void OBSBasic::IconActivated(QSystemTrayIcon::ActivationReason reason)
195
 {
196
-   if (reason == QSystemTrayIcon::Trigger)
197
+   if (reason == QSystemTrayIcon::Trigger) {
198
        ToggleShowHide();
199
+   } else if (reason == QSystemTrayIcon::Context) {
200
+       QMenu *previewProjector = new QMenu(QTStr("PreviewProjector"));
201
+       AddProjectorMenuMonitors(previewProjector, this,
202
+               SLOT(OpenPreviewProjector()));
203
+       QMenu *studioProgramProjector = new QMenu(
204
+               QTStr("StudioProgramProjector"));
205
+       AddProjectorMenuMonitors(studioProgramProjector, this,
206
+               SLOT(OpenStudioProgramProjector()));
207
+
208
+       trayMenu->clear();
209
+       trayMenu->addAction(showHide);
210
+       trayMenu->addMenu(previewProjector);
211
+       trayMenu->addMenu(studioProgramProjector);
212
+       trayMenu->addAction(sysTrayStream);
213
+       trayMenu->addAction(sysTrayRecord);
214
+       trayMenu->addAction(sysTrayReplayBuffer);
215
+       trayMenu->addAction(exit);
216
+       trayMenu->popup(QCursor::pos());
217
+   }
218
 }
219
 
220
 void OBSBasic::SysTrayNotify(const QString &text,
221
obs-studio-21.0.3.tar.xz/UI/window-basic-main.hpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-main.hpp Changed
30
 
1
@@ -186,6 +186,9 @@
2
    QPointer<QAction>         exit;
3
    QPointer<QMenu>           trayMenu;
4
 
5
+   QPointer<QMenu> multiviewProjectorMenu;
6
+   void          UpdateMultiviewProjectorMenu();
7
+
8
    void          DrawBackdrop(float cx, float cy);
9
 
10
    void          SetupEncoders();
11
@@ -196,7 +199,7 @@
12
    void          UpdateVolumeControlsDecayRate();
13
    void          ClearVolumeControls();
14
 
15
-   void          UploadLog(const char *file);
16
+   void          UploadLog(const char *subdir, const char *file);
17
 
18
    void          Save(const char *file);
19
    void          Load(const char *file);
20
@@ -586,6 +589,9 @@
21
    void on_actionViewCurrentLog_triggered();
22
    void on_actionCheckForUpdates_triggered();
23
 
24
+   void on_actionShowCrashLogs_triggered();
25
+   void on_actionUploadLastCrashLog_triggered();
26
+
27
    void on_actionEditTransform_triggered();
28
    void on_actionCopyTransform_triggered();
29
    void on_actionPasteTransform_triggered();
30
obs-studio-21.0.3.tar.xz/UI/window-basic-preview.cpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-preview.cpp Changed
11
 
1
@@ -1105,6 +1105,9 @@
2
    if (obs_sceneitem_locked(item))
3
        return true;
4
 
5
+   if (!SceneItemHasVideo(item))
6
+       return true;
7
+
8
    if (!obs_sceneitem_selected(item))
9
        return true;
10
 
11
obs-studio-21.0.3.tar.xz/UI/window-basic-settings.cpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-settings.cpp Changed
25
 
1
@@ -412,7 +412,6 @@
2
    HookWidget(ui->fpsType,              COMBO_CHANGED,  VIDEO_CHANGED);
3
    HookWidget(ui->fpsCommon,            COMBO_CHANGED,  VIDEO_CHANGED);
4
    HookWidget(ui->fpsInteger,           SCROLL_CHANGED, VIDEO_CHANGED);
5
-   HookWidget(ui->fpsInteger,           SCROLL_CHANGED, VIDEO_CHANGED);
6
    HookWidget(ui->fpsNumerator,         SCROLL_CHANGED, VIDEO_CHANGED);
7
    HookWidget(ui->fpsDenominator,       SCROLL_CHANGED, VIDEO_CHANGED);
8
    HookWidget(ui->renderer,             COMBO_CHANGED,  ADV_RESTART);
9
@@ -443,10 +442,13 @@
10
    HookWidget(ui->enableNewSocketLoop,  CHECK_CHANGED,  ADV_CHANGED);
11
    HookWidget(ui->enableLowLatencyMode, CHECK_CHANGED,  ADV_CHANGED);
12
 
13
-#if !defined(_WIN32) && !defined(__APPLE__) && !HAVE_PULSEAUDIO
14
+#if !defined(_WIN32) && !defined(__APPLE__)
15
    delete ui->enableAutoUpdates;
16
-   delete ui->advAudioGroupBox;
17
    ui->enableAutoUpdates = nullptr;
18
+#endif
19
+
20
+#if !defined(_WIN32) && !defined(__APPLE__) && !HAVE_PULSEAUDIO
21
+   delete ui->advAudioGroupBox;
22
    ui->advAudioGroupBox = nullptr;
23
 #endif
24
 
25
obs-studio-21.0.3.tar.xz/cmake/Modules/CopyMSVCBins.cmake -> obs-studio-21.1.2.tar.xz/cmake/Modules/CopyMSVCBins.cmake Changed
106
 
1
@@ -147,27 +147,27 @@
2
        )
3
 endif()
4
 
5
-if (CMAKE_CONFIGURATION_TYPES MATCHES "Debug")
6
-   file(GLOB QT_DEBUG_BIN_FILES
7
-       "${Qt5Core_DIR}/../../../bin/Qt5Cored.dll"
8
-       "${Qt5Core_DIR}/../../../bin/Qt5Guid.dll"
9
-       "${Qt5Core_DIR}/../../../bin/Qt5Widgetsd.dll"
10
-       "${Qt5Core_DIR}/../../../bin/libGLESv2d.dll"
11
-       "${Qt5Core_DIR}/../../../bin/libEGLd.dll")
12
-   file(GLOB QT_DEBUG_PLAT_BIN_FILES
13
-       "${Qt5Core_DIR}/../../../plugins/platforms/qwindowsd.dll")
14
-endif()
15
-
16
-if (CMAKE_CONFIGURATION_TYPES MATCHES "Rel")
17
-   file(GLOB QT_BIN_FILES
18
-       "${Qt5Core_DIR}/../../../bin/Qt5Core.dll"
19
-       "${Qt5Core_DIR}/../../../bin/Qt5Gui.dll"
20
-       "${Qt5Core_DIR}/../../../bin/Qt5Widgets.dll"
21
-       "${Qt5Core_DIR}/../../../bin/libGLESv2.dll"
22
-       "${Qt5Core_DIR}/../../../bin/libEGL.dll")
23
-   file(GLOB QT_PLAT_BIN_FILES
24
-       "${Qt5Core_DIR}/../../../plugins/platforms/qwindows.dll")
25
-endif()
26
+file(GLOB QT_DEBUG_BIN_FILES
27
+   "${Qt5Core_DIR}/../../../bin/Qt5Cored.dll"
28
+   "${Qt5Core_DIR}/../../../bin/Qt5Guid.dll"
29
+   "${Qt5Core_DIR}/../../../bin/Qt5Widgetsd.dll"
30
+   "${Qt5Core_DIR}/../../../bin/libGLESv2d.dll"
31
+   "${Qt5Core_DIR}/../../../bin/libEGLd.dll")
32
+file(GLOB QT_DEBUG_PLAT_BIN_FILES
33
+   "${Qt5Core_DIR}/../../../plugins/platforms/qwindowsd.dll")
34
+file(GLOB QT_DEBUG_STYLES_BIN_FILES
35
+   "${Qt5Core_DIR}/../../../plugins/styles/qwindowsvistastyled.dll")
36
+
37
+file(GLOB QT_BIN_FILES
38
+   "${Qt5Core_DIR}/../../../bin/Qt5Core.dll"
39
+   "${Qt5Core_DIR}/../../../bin/Qt5Gui.dll"
40
+   "${Qt5Core_DIR}/../../../bin/Qt5Widgets.dll"
41
+   "${Qt5Core_DIR}/../../../bin/libGLESv2.dll"
42
+   "${Qt5Core_DIR}/../../../bin/libEGL.dll")
43
+file(GLOB QT_PLAT_BIN_FILES
44
+   "${Qt5Core_DIR}/../../../plugins/platforms/qwindows.dll")
45
+file(GLOB QT_STYLES_BIN_FILES
46
+   "${Qt5Core_DIR}/../../../plugins/styles/qwindowsvistastyle.dll")
47
 
48
 file(GLOB QT_ICU_BIN_FILES
49
    "${Qt5Core_DIR}/../../../bin/icu*.dll")
50
@@ -190,16 +190,21 @@
51
    ${QT_DEBUG_BIN_FILES})
52
 
53
 set(ALL_PLATFORM_BIN_FILES)
54
-
55
 set(ALL_PLATFORM_REL_BIN_FILES
56
    ${QT_PLAT_BIN_FILES})
57
-
58
 set(ALL_PLATFORM_DBG_BIN_FILES
59
    ${QT_DEBUG_PLAT_BIN_FILES})
60
 
61
+set(ALL_STYLES_BIN_FILES)
62
+set(ALL_STYLES_REL_BIN_FILES
63
+   ${QT_STYLES_BIN_FILES})
64
+set(ALL_STYLES_DBG_BIN_FILES
65
+   ${QT_DEBUG_STYLES_BIN_FILES})
66
+
67
 foreach(list
68
        ALL_BASE_BIN_FILES ALL_REL_BIN_FILES ALL_DBG_BIN_FILES
69
-       ALL_PLATFORM_BIN_FILES ALL_PLATFORM_REL_BIN_FILES ALL_PLATFORM_DBG_BIN_FILES)
70
+       ALL_PLATFORM_BIN_FILES ALL_PLATFORM_REL_BIN_FILES ALL_PLATFORM_DBG_BIN_FILES
71
+       ALL_STYLES_BIN_FILES ALL_STYLES_REL_BIN_FILES ALL_STYLES_DBG_BIN_FILES)
72
    if(${list})
73
        list(REMOVE_DUPLICATES ${list})
74
    endif()
75
@@ -215,8 +220,10 @@
76
 message(STATUS "zlib files: ${ZLIB_BIN_FILES}")
77
 message(STATUS "QT Debug files: ${QT_DEBUG_BIN_FILES}")
78
 message(STATUS "QT Debug Platform files: ${QT_DEBUG_PLAT_BIN_FILES}")
79
+message(STATUS "QT Debug Styles files: ${QT_DEBUG_STYLES_BIN_FILES}")
80
 message(STATUS "QT Release files: ${QT_BIN_FILES}")
81
 message(STATUS "QT Release Platform files: ${QT_PLAT_BIN_FILES}")
82
+message(STATUS "QT Release Styles files: ${QT_STYLES_BIN_FILES}")
83
 message(STATUS "QT ICU files: ${QT_ICU_BIN_FILES}")
84
 
85
 foreach(BinFile ${ALL_BASE_BIN_FILES})
86
@@ -249,4 +256,19 @@
87
    file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/platforms/")
88
 endforeach()
89
 
90
+foreach(BinFile ${ALL_STYLES_BIN_FILES})
91
+   make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/styles")
92
+   file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/styles/")
93
+endforeach()
94
+
95
+foreach(BinFile ${ALL_STYLES_REL_BIN_FILES})
96
+   make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/styles")
97
+   file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/styles/")
98
+endforeach()
99
+
100
+foreach(BinFile ${ALL_STYLES_DBG_BIN_FILES})
101
+   make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/styles")
102
+   file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/styles/")
103
+endforeach()
104
+
105
 set(COPIED_DEPENDENCIES TRUE CACHE BOOL "Dependencies have been copied, set to false to copy again" FORCE)
106
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-lua.c -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obs-scripting-lua.c Changed
51
 
1
@@ -377,7 +377,7 @@
2
    lock_callback();
3
 
4
    lua_pushnumber(script, (lua_Number)seconds);
5
-   call_func(obs_lua_tick_callback, 2, 0);
6
+   call_func(obs_lua_tick_callback, 1, 0);
7
 
8
    unlock_callback();
9
 }
10
@@ -581,6 +581,32 @@
11
 
12
 /* -------------------------------------------- */
13
 
14
+static bool source_enum_filters_proc(obs_source_t *source, obs_source_t *filter, void *param)
15
+{
16
+   lua_State *script = param;
17
+
18
+   obs_source_get_ref(filter);
19
+   ls_push_libobs_obj(obs_source_t, filter, false);
20
+
21
+   size_t idx = lua_rawlen(script, -2);
22
+   lua_rawseti(script, -2, (int)idx + 1);
23
+   return true;
24
+}
25
+
26
+static int source_enum_filters(lua_State *script)
27
+{
28
+   obs_source_t *source;
29
+   if (!ls_get_libobs_obj(obs_source_t, 1, &source))
30
+       return 0;
31
+
32
+   lua_newtable(script);
33
+   obs_source_enum_filters(source, source_enum_filters_proc, script);
34
+   return 1;
35
+}
36
+
37
+
38
+/* -------------------------------------------- */
39
+
40
 static bool enum_items_proc(obs_scene_t *scene, obs_sceneitem_t *item,
41
        void *param)
42
 {
43
@@ -972,6 +998,7 @@
44
    add_func("timer_remove", timer_remove);
45
    add_func("timer_add", timer_add);
46
    add_func("obs_enum_sources", enum_sources);
47
+   add_func("obs_source_enum_filters", source_enum_filters);
48
    add_func("obs_scene_enum_items", scene_enum_items);
49
    add_func("source_list_release", source_list_release);
50
    add_func("sceneitem_list_release", sceneitem_list_release);
51
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-python.c -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obs-scripting-python.c Changed
36
 
1
@@ -1595,6 +1595,8 @@
2
 
3
 extern void add_python_frontend_funcs(PyObject *module);
4
 
5
+static bool python_loaded_at_all = false;
6
+
7
 bool obs_scripting_load_python(const char *python_path)
8
 {
9
    if (python_loaded)
10
@@ -1696,6 +1698,8 @@
11
        obs_python_unload();
12
    }
13
 
14
+   python_loaded_at_all = success;
15
+
16
    if (python_loaded)
17
        obs_add_tick_callback(python_tick, NULL);
18
 
19
@@ -1704,6 +1708,9 @@
20
 
21
 void obs_python_unload(void)
22
 {
23
+   if (!python_loaded_at_all)
24
+       return;
25
+
26
    if (python_loaded && Py_IsInitialized()) {
27
        PyGILState_Ensure();
28
 
29
@@ -1722,4 +1729,6 @@
30
    pthread_mutex_destroy(&tick_mutex);
31
    pthread_mutex_destroy(&timer_mutex);
32
    dstr_free(&cur_py_log_chunk);
33
+
34
+   python_loaded_at_all = false;
35
 }
36
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting.c -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obs-scripting.c Changed
10
 
1
@@ -213,6 +213,8 @@
2
 
3
    pthread_mutex_destroy(&defer_call_mutex);
4
    os_sem_destroy(defer_call_semaphore);
5
+
6
+   scripting_loaded = false;
7
 }
8
 
9
 const char **obs_scripting_supported_formats(void)
10
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obslua/obslua.i -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obslua/obslua.i Changed
9
 
1
@@ -59,6 +59,7 @@
2
 %ignore obs_add_main_render_callback;
3
 %ignore obs_remove_main_render_callback;
4
 %ignore obs_enum_sources;
5
+%ignore obs_source_enum_filters;
6
 %ignore obs_properties_add_button;
7
 %ignore obs_property_set_modified_callback;
8
 %ignore signal_handler_connect;
9
obs-studio-21.0.3.tar.xz/docs/sphinx/reference-properties.rst -> obs-studio-21.1.2.tar.xz/docs/sphinx/reference-properties.rst Changed
10
 
1
@@ -383,7 +383,7 @@
2
 
3
 ---------------------
4
 
5
-.. function:: enum obs_text_type     obs_proprety_text_type(obs_property_t *p)
6
+.. function:: enum obs_text_type     obs_property_text_type(obs_property_t *p)
7
 
8
 ---------------------
9
 
10
obs-studio-21.0.3.tar.xz/libobs-opengl/gl-x11.c -> obs-studio-21.1.2.tar.xz/libobs-opengl/gl-x11.c Changed
9
 
1
@@ -59,6 +59,7 @@
2
    GLX_STENCIL_SIZE, 0,
3
    GLX_DEPTH_SIZE, 0,
4
    GLX_BUFFER_SIZE, 32,
5
+   GLX_ALPHA_SIZE, 8,
6
    GLX_DOUBLEBUFFER, true,
7
    GLX_X_RENDERABLE, true,
8
    None
9
obs-studio-21.0.3.tar.xz/libobs/audio-monitoring/win32/wasapi-output.h -> obs-studio-21.1.2.tar.xz/libobs/audio-monitoring/win32/wasapi-output.h Changed
18
 
1
@@ -3,10 +3,16 @@
2
 #include <audioclient.h>
3
 
4
 
5
+#ifndef KSAUDIO_SPEAKER_2POINT1
6
 #define KSAUDIO_SPEAKER_2POINT1 (KSAUDIO_SPEAKER_STEREO|SPEAKER_LOW_FREQUENCY)
7
+#endif
8
+
9
 #define KSAUDIO_SPEAKER_SURROUND_AVUTIL \
10
    (KSAUDIO_SPEAKER_STEREO|SPEAKER_FRONT_CENTER)
11
+
12
+#ifndef KSAUDIO_SPEAKER_4POINT1
13
 #define KSAUDIO_SPEAKER_4POINT1 (KSAUDIO_SPEAKER_SURROUND|SPEAKER_LOW_FREQUENCY)
14
+#endif
15
 
16
 #define safe_release(ptr) \
17
    do { \
18
obs-studio-21.0.3.tar.xz/libobs/obs-config.h -> obs-studio-21.1.2.tar.xz/libobs/obs-config.h Changed
18
 
1
@@ -34,14 +34,14 @@
2
  *
3
  * Reset to zero each major version
4
  */
5
-#define LIBOBS_API_MINOR_VER  0
6
+#define LIBOBS_API_MINOR_VER  1
7
 
8
 /*
9
  * Increment if backward-compatible bug fix
10
  *
11
  * Reset to zero each major or minor version
12
  */
13
-#define LIBOBS_API_PATCH_VER  3
14
+#define LIBOBS_API_PATCH_VER  2
15
 
16
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
17
                              ((major << 24) | \
18
obs-studio-21.0.3.tar.xz/libobs/obs-output.c -> obs-studio-21.1.2.tar.xz/libobs/obs-output.c Changed
11
 
1
@@ -2061,7 +2061,8 @@
2
        struct caption_text *tail, struct caption_text **head)
3
 {
4
    struct caption_text *next = bzalloc(sizeof(struct caption_text));
5
-   snprintf(&next->text[0], CAPTION_LINE_BYTES + 1, "%.*s", bytes, text);
6
+   snprintf(&next->text[0], CAPTION_LINE_BYTES + 1, "%.*s",
7
+           (int)bytes, text);
8
 
9
    if (!*head) {
10
        *head = next;
11
obs-studio-21.0.3.tar.xz/libobs/obs-properties.c -> obs-studio-21.1.2.tar.xz/libobs/obs-properties.c Changed
19
 
1
@@ -738,7 +738,7 @@
2
    return data ? data->type : OBS_NUMBER_SCROLLER;
3
 }
4
 
5
-enum obs_text_type obs_proprety_text_type(obs_property_t *p)
6
+enum obs_text_type obs_property_text_type(obs_property_t *p)
7
 {
8
    struct text_data *data = get_type_data(p, OBS_PROPERTY_TEXT);
9
    return data ? data->type : OBS_TEXT_DEFAULT;
10
@@ -1107,3 +1107,8 @@
11
        data->ranges.array[idx].max_time :
12
        (struct media_frames_per_second){0};
13
 }
14
+
15
+enum obs_text_type obs_proprety_text_type(obs_property_t *p)
16
+{
17
+   return obs_property_text_type(p);
18
+}
19
obs-studio-21.0.3.tar.xz/libobs/obs-properties.h -> obs-studio-21.1.2.tar.xz/libobs/obs-properties.h Changed
22
 
1
@@ -263,7 +263,7 @@
2
 EXPORT double                 obs_property_float_max(obs_property_t *p);
3
 EXPORT double                 obs_property_float_step(obs_property_t *p);
4
 EXPORT enum obs_number_type   obs_property_float_type(obs_property_t *p);
5
-EXPORT enum obs_text_type     obs_proprety_text_type(obs_property_t *p);
6
+EXPORT enum obs_text_type     obs_property_text_type(obs_property_t *p);
7
 EXPORT enum obs_path_type     obs_property_path_type(obs_property_t *p);
8
 EXPORT const char *           obs_property_path_filter(obs_property_t *p);
9
 EXPORT const char *           obs_property_path_default_path(obs_property_t *p);
10
@@ -336,6 +336,11 @@
11
 EXPORT struct media_frames_per_second obs_property_frame_rate_fps_range_max(
12
        obs_property_t *p, size_t idx);
13
 
14
+#ifndef SWIG
15
+DEPRECATED
16
+EXPORT enum obs_text_type     obs_proprety_text_type(obs_property_t *p);
17
+#endif
18
+
19
 #ifdef __cplusplus
20
 }
21
 #endif
22
obs-studio-21.0.3.tar.xz/libobs/obs.h -> obs-studio-21.1.2.tar.xz/libobs/obs.h Changed
54
 
1
@@ -145,15 +145,16 @@
2
    struct vec2          bounds;
3
 };
4
 
5
-#ifndef SWIG
6
 /**
7
  * Video initialization structure
8
  */
9
 struct obs_video_info {
10
+#ifndef SWIG
11
    /**
12
     * Graphics module to use (usually "libobs-opengl" or "libobs-d3d11")
13
     */
14
    const char          *graphics_module;
15
+#endif
16
 
17
    uint32_t            fps_num;       /**< Output FPS numerator */
18
    uint32_t            fps_den;       /**< Output FPS denominator */
19
@@ -176,7 +177,6 @@
20
 
21
    enum obs_scale_type scale_type;    /**< How to scale if scaling */
22
 };
23
-#endif
24
 
25
 /**
26
  * Audio initialization structure
27
@@ -283,7 +283,6 @@
28
  */
29
 EXPORT profiler_name_store_t *obs_get_profiler_name_store(void);
30
 
31
-#ifndef SWIG
32
 /**
33
  * Sets base video output base resolution/fps/format.
34
  *
35
@@ -301,7 +300,6 @@
36
  *               OBS_VIDEO_FAIL for generic failure
37
  */
38
 EXPORT int obs_reset_video(struct obs_video_info *ovi);
39
-#endif
40
 
41
 /**
42
  * Sets base audio output format/channels/samples/etc
43
@@ -310,10 +308,8 @@
44
  */
45
 EXPORT bool obs_reset_audio(const struct obs_audio_info *oai);
46
 
47
-#ifndef SWIG
48
 /** Gets the current video settings, returns false if no video */
49
 EXPORT bool obs_get_video_info(struct obs_video_info *ovi);
50
-#endif
51
 
52
 /** Gets the current audio settings, returns false if no audio */
53
 EXPORT bool obs_get_audio_info(struct obs_audio_info *oai);
54
obs-studio-21.0.3.tar.xz/libobs/util/config-file.c -> obs-studio-21.1.2.tar.xz/libobs/util/config-file.c Changed
18
 
1
@@ -212,8 +212,15 @@
2
        strref_clear(&value);
3
        config_parse_string(lex, &value, 0);
4
 
5
-       if (!strref_is_empty(&value))
6
+       if (strref_is_empty(&value)) {
7
+           struct config_item item;
8
+           item.name  = bstrdup_n(name.array, name.len);
9
+           item.value = bzalloc(1);
10
+           darray_push_back(sizeof(struct config_item),
11
+                   &section->items, &item);
12
+       } else {
13
            config_add_item(&section->items, &name, &value);
14
+       }
15
    }
16
 }
17
 
18
obs-studio-21.1.2.tar.xz/plugins/coreaudio-encoder/data/locale/fil-PH.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+CoreAudioAAC="CoreAudio AAC encoder"
3
+Bitrate="Bitrate"
4
+AllowHEAAC="Payagan ang HE-AAC"
5
+OutputSamplerate="Output Sample Rate"
6
+UseInputSampleRate="Gamitin ang Sample Rate ng Input (OBS) (maaaring maglista ng mga hindi suportadong bitrates)"
7
+
8
obs-studio-21.1.2.tar.xz/plugins/coreaudio-encoder/data/locale/ka-GE.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+CoreAudioAAC="CoreAudio AAC გამშიფრავი"
3
+Bitrate="ბიტური სიხშირე"
4
+AllowHEAAC="HE-AAC დაშვება"
5
+OutputSamplerate="გამომავალი სიგნალის სიხშირე"
6
+UseInputSampleRate="შემავალი (OBS) სიგნალის სიხშირის გამოყენება (შესაძლოა მოიცავდეს მხარდაუჭერელ სიხშირეებსაც)"
7
+
8
obs-studio-21.1.2.tar.xz/plugins/coreaudio-encoder/data/locale/tl-PH.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+CoreAudioAAC="Ang Buod ng Audio AAC encoder"
3
+Bitrate="Baytreyt"
4
+AllowHEAAC="Pahintulutan ang HE-AAC"
5
+OutputSamplerate="Paglabas ng Sample Rate"
6
+UseInputSampleRate="Gamitin ang pangpasok na (OBS) Sample Rate (Maaaring ilista ang mga hindi sinusuportahang bitrates)"
7
+
8
obs-studio-21.1.2.tar.xz/plugins/decklink/data/locale/fil-PH.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+BlackmagicDevice="Blackmagic Device"
3
+Device="Kagamitan"
4
+Mode="Mode"
5
+Buffering="Gamitin ang Buffering"
6
+PixelFormat="Format ng Pixel"
7
+ColorSpace="YUV Kulay Space"
8
+ColorSpace.Default="Pangunahin"
9
+ColorRange="Saklaw ng Kulay ng YUV"
10
+ColorRange.Default="Pangunahin"
11
+ColorRange.Partial="Bahagyang"
12
+ColorRange.Full="Buong"
13
+ChannelFormat="Pinagmulan"
14
+ChannelFormat.None="Wala"
15
+ChannelFormat.2_0ch="2ch"
16
+ChannelFormat.2_1ch="2.1ch"
17
+ChannelFormat.4_0ch="4ch"
18
+ChannelFormat.4_1ch="4.1ch"
19
+ChannelFormat.5_1ch="5.1ch"
20
+ChannelFormat.7_1ch="7.1ch"
21
+
22
obs-studio-21.1.2.tar.xz/plugins/decklink/data/locale/ka-GE.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+BlackmagicDevice="Blackmagic მოწყობილობა"
3
+Device="მოწყობილობა"
4
+Mode="რეჟიმი"
5
+Buffering="ბუფერიზაციის გამოყენება"
6
+PixelFormat="პიქსელის ფორმატი"
7
+ColorSpace="YUV ფერთა სისტემა"
8
+ColorSpace.Default="ნაგულისხმევი"
9
+ColorRange="YUV ფერთა გამა"
10
+ColorRange.Default="ნაგულისხმევი"
11
+ColorRange.Partial="ნაწილობრივი"
12
+ColorRange.Full="სრული"
13
+ChannelFormat="არხი"
14
+ChannelFormat.None="არცერთი"
15
+ChannelFormat.2_0ch="2 არხიანი"
16
+ChannelFormat.2_1ch="2.1 არხიანი"
17
+ChannelFormat.4_0ch="4 არხიანი"
18
+ChannelFormat.4_1ch="4.1 არხიანი"
19
+ChannelFormat.5_1ch="5.1 არხიანი"
20
+ChannelFormat.7_1ch="7.1 არხიანი"
21
+
22
obs-studio-21.1.2.tar.xz/plugins/decklink/data/locale/tl-PH.ini Added
22
 
1
@@ -0,0 +1,20 @@
2
+BlackmagicDevice="Itim na salamangka na aparato"
3
+Device="Aparato"
4
+Mode="I-mode"
5
+Buffering="Paggamit ng Buffering"
6
+PixelFormat="Ang Format ng Pixel"
7
+ColorSpace="Pagitan sa kulay na YUV"
8
+ColorSpace.Default="I-default"
9
+ColorRange="Ang Saklaw ng Kulay na YUV"
10
+ColorRange.Default="I-default"
11
+ColorRange.Partial="Bahagya"
12
+ColorRange.Full="Puno"
13
+ChannelFormat="Ang Channel"
14
+ChannelFormat.None="Wala"
15
+ChannelFormat.2_0ch="2ch"
16
+ChannelFormat.2_1ch="2.1ch"
17
+ChannelFormat.4_0ch="4ch"
18
+ChannelFormat.4_1ch="4.1ch"
19
+ChannelFormat.5_1ch="5.1ch"
20
+ChannelFormat.7_1ch="7.1ch"
21
+
22
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/Installer.in.iss -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/#Resources/Installer.in.iss Changed
10
 
1
@@ -2,7 +2,7 @@
2
 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3
 
4
 #define MyAppName "AMD Encoder for OBS Studio"
5
-#define MyAppVersion "@enc-amf_VERSION_MAJOR@.@enc-amf_VERSION_MINOR@.@enc-amf_VERSION_PATCH@"
6
+#define MyAppVersion "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"
7
 #define MyAppPublisher "Xaymars Technology Workshop"
8
 #define MyAppURL "http://www.xaymar.com/portfolio/plugin-amd-vce-plugin-for-obs-studio/"
9
 
10
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md Changed
34
 
1
@@ -1,13 +1,27 @@
2
-# 2.3.1 - The Blacklist and imroved support for Replay Buffer
3
-It unfortunately had to come to this. The plugin now finally blacklists older drivers, as it otherwise would turn into an unmaintainable mess trying to support everything back to 16.11.5, the first driver that had AMD AMF support. That means that from this day on, all future versions will only work with a minimum runtime version of 1.4.6.0. So if you're still using an older driver: What are you doing? Update already!
4
+# 2.3.3 - Changes to the Blacklist, Out-of-Process AMF Capability testing and more (Hotfix 1)
5
+The Blacklist introduced with 2.3.0 unfortunately had the side effect that all Windows 8 users were no longer able to use the plugin and had to downgrade. With this version, the blacklist is instead now a warning written into the log file. This is all thanks to @jp9000's work on moving the initial AMF Capability test into a different process, stopping broken drivers from crashing OBS Studio.
6
 
7
-In addition to that, the plugin should now work better with the new networking code as well as replay buffer. The 'Target Bitrate' property is now renamed internally so that external code can properly read it.
8
+Not only that, but a bunch of previously unidentified issues were fixed. H264 VBR should no longer limit the Peak Bitrate to the Target Bitrate, H265 encoding shouldn't get stuck anymore, some older Drivers may now work again with the plugin and Direct 3D 11.1 is now used if it is available.
9
+
10
+Hotfix: Configuration Version should now match the plugin version again.
11
 
12
 ## Changelog
13
+### 2.3.3 (Hotfix)
14
+* Fixed H264 Plugin not properly adjusting config version number.
15
+* Reduced subprocess 'amf-test' size, which is used to check for AMF compatibility.
16
+
17
+### 2.3.2
18
+* Fixed a bunch of startup crashed by moving AMF Capability tests to another process, thanks @jp9000 for doing a lot of the work to make this happen.
19
+* Fixed the H265 encoder not stopping which was caused by 'Keyframe Interval' and 'GOP Size' being stuck at 0 internally.
20
+* Replaced the blacklist with a warning message to allow Windows 8 users to use current versions.
21
+* Fixed a crash with older Drivers which do not have Pre-Pass or VBAQ.
22
+* Fixed 'Target Bitrate' being set as 'Peak Bitrate' in VBR rate control mode.
23
+* Fixed Direct3D 11.1 not being used even if available, resulting in minimally lower performance.
24
+
25
 ### 2.3.1
26
 * Skipped 2.3.0 as it was not included with obs-studio.
27
 * Improved support for the "New Networking Code" and "Replay Buffer" features by renaming 'Bitrate.Target' to 'bitrate'.
28
 
29
 ### 2.3.0
30
 * Added a blacklist for drivers exposing an AMF Runtime older than 1.4.6.0.
31
-* Removed all hidden properties no longer exposed by the newest AMF Runtime.
32
\ No newline at end of file
33
+* Removed all hidden properties no longer exposed by the newest AMF Runtime.
34
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/package.in.bat -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/#Resources/package.in.bat Changed
10
 
1
@@ -1,7 +1,7 @@
2
 @ECHO OFF
3
 REM Shut up, I'm just as lazy as anyone else.
4
 SET "CURDIR=%~dp0"
5
-SET "FINALNAME=AMD-Encoder-for-OBS-Studio.@enc-amf_VERSION_MAJOR@.@enc-amf_VERSION_MINOR@.@enc-amf_VERSION_PATCH@"
6
+SET "FINALNAME=AMD-Encoder-for-OBS-Studio.@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@"
7
 
8
 SET "SevenZip=C:\Program Files\7-Zip\7z.exe"
9
 SET "InnoSetup=C:\Program Files (x86)\Inno Setup 5\Compil32.exe"
10
obs-studio-21.0.3.tar.xz/plugins/enc-amf/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/CMakeLists.txt Changed
96
 
1
@@ -15,15 +15,12 @@
2
 # along with this program; if not, write to the Free Software
3
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
4
 
5
-cmake_minimum_required(VERSION 2.8.12)
6
-PROJECT(enc-amf)
7
+cmake_minimum_required(VERSION 3.1.0)
8
+PROJECT(enc-amf VERSION 2.3.3)
9
 
10
 ################################################################################
11
 # Version
12
 ################################################################################
13
-SET(enc-amf_VERSION_MAJOR 2)
14
-SET(enc-amf_VERSION_MINOR 3)
15
-SET(enc-amf_VERSION_PATCH 1)
16
 configure_file(
17
    "${PROJECT_SOURCE_DIR}/#Resources/package.in.bat"
18
    "${PROJECT_SOURCE_DIR}/#Resources/package.bat"
19
@@ -98,7 +95,7 @@
20
 ################################################################################
21
 # Standalone and OBS Studio Build Data
22
 ################################################################################
23
-if(TARGET obs)
24
+if(TARGET libobs)
25
    # OBS Studio Specific
26
    
27
    # Variables
28
@@ -177,7 +174,6 @@
29
        "${PATH_OBSStudio}/"
30
    )
31
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
32
-   add_definitions(-DNO_PIPED_DETECTION)
33
 endif()
34
 
35
 ################################################################################
36
@@ -195,27 +191,35 @@
37
 
38
 # All Warnings, Extra Warnings, Pedantic
39
 if(MSVC)
40
-  # Force to always compile with W4
41
-  if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
42
-    string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
43
-  else()
44
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
45
-  endif()
46
+   # Force to always compile with W4
47
+   if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
48
+       string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
49
+   else()
50
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
51
+   endif()
52
+
53
+   # Enable Options
54
+   # /Gy (Function-Level Linking)
55
+   # /OPT:REF
56
+   # /OPT:NOICF    
57
+   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gy")
58
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Gy")
59
+   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF /OPT:NOICF")
60
 elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
61
-  # Update if necessary
62
-  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
63
+   # Update if necessary
64
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
65
 endif()
66
 
67
-if(TARGET obs)
68
+# Main Project
69
+if(TARGET libobs)
70
    install_obs_plugin_with_data(enc-amf Resources)
71
-   add_subdirectory(Source/detect-amf)
72
 else()
73
    math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
74
    add_custom_command(TARGET enc-amf POST_BUILD
75
        COMMAND ${CMAKE_COMMAND} -E copy_directory
76
        "${PROJECT_SOURCE_DIR}/Resources/locale"
77
        "${PROJECT_SOURCE_DIR}/#Build/data/obs-plugins/enc-amf/locale"
78
-   )   
79
+   )
80
    add_custom_command(TARGET enc-amf POST_BUILD
81
        COMMAND ${CMAKE_COMMAND} -E copy
82
        "$<TARGET_FILE:enc-amf>"
83
@@ -223,7 +227,10 @@
84
    )
85
    add_custom_command(TARGET enc-amf POST_BUILD
86
        COMMAND ${CMAKE_COMMAND} -E copy
87
-       "$<TARGET_FILE_DIR:enc-amf>/enc-amf.pdb"
88
-       "${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/enc-amf.pdb"
89
+       "$<TARGET_PDB_FILE:enc-amf>"
90
+       "${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/$<TARGET_PDB_FILE_NAME:enc-amf>"
91
    )
92
 endif()
93
+
94
+# Sub Project
95
+add_subdirectory(amf-test)
96
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Include/Version.h.in -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Include/Version.h.in Changed
12
 
1
@@ -19,7 +19,7 @@
2
 
3
 #pragma once
4
 
5
-const uint16_t PLUGIN_VERSION_MAJOR    = @enc-amf_VERSION_MAJOR@;
6
-const uint16_t PLUGIN_VERSION_MINOR    = @enc-amf_VERSION_MINOR@;
7
-const uint32_t PLUGIN_VERSION_PATCH    = @enc-amf_VERSION_PATCH@;
8
+const uint16_t PLUGIN_VERSION_MAJOR    = @PROJECT_VERSION_MAJOR@;
9
+const uint16_t PLUGIN_VERSION_MINOR    = @PROJECT_VERSION_MINOR@;
10
+const uint32_t PLUGIN_VERSION_PATCH    = @PROJECT_VERSION_PATCH@;
11
 const uint64_t PLUGIN_VERSION_FULL = (((uint64_t)(PLUGIN_VERSION_MAJOR & 0xFFFF) << 48ull) | ((uint64_t)(PLUGIN_VERSION_MINOR & 0xFFFF) << 32ull) | ((uint64_t)(PLUGIN_VERSION_PATCH) & 0xFFFFFFFF));
12
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Include/plugin.h -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Include/plugin.h Changed
42
 
1
@@ -33,19 +33,11 @@
2
 #define PLUGIN_NAME                "AMD Advanced Media Framework"
3
 #include "Version.h"
4
 
5
-#ifdef PIPED_PROCESS
6
-#define PLOG(level, ...)
7
-#define PLOG_ERROR(...)
8
-#define PLOG_WARNING(...)
9
-#define PLOG_INFO(...)
10
-#define PLOG_DEBUG(...)
11
-#else
12
 #define PLOG(level, ...)       blog(level, "[AMF] " __VA_ARGS__);
13
 #define PLOG_ERROR(...)            PLOG(LOG_ERROR,   __VA_ARGS__)
14
 #define PLOG_WARNING(...)      PLOG(LOG_WARNING, __VA_ARGS__)
15
 #define PLOG_INFO(...)         PLOG(LOG_INFO,    __VA_ARGS__)
16
 #define PLOG_DEBUG(...)            PLOG(LOG_DEBUG,   __VA_ARGS__)
17
-#endif
18
 
19
 // Utility
20
 #define vstr(s) dstr(s)
21
@@ -70,15 +62,17 @@
22
 #endif
23
 #define OUT
24
 
25
-#ifdef PIPED_PROCESS
26
-#define QUICK_FORMAT_MESSAGE(var, ...) std::string var = "";
27
+#ifdef _WIN64
28
+#define BIT_STR "64"
29
 #else
30
+#define BIT_STR "32"
31
+#endif
32
+
33
 #define QUICK_FORMAT_MESSAGE(var, ...) std::string var = ""; { \
34
        std::vector<char> QUICK_FORMAT_MESSAGE_buf(1024); \
35
        snprintf(QUICK_FORMAT_MESSAGE_buf.data(), QUICK_FORMAT_MESSAGE_buf.size(), __VA_ARGS__); \
36
        var = std::string(QUICK_FORMAT_MESSAGE_buf.data()); \
37
    }
38
-#endif
39
 
40
 #ifndef __FUNCTION_NAME__
41
 #if defined(_WIN32) || defined(_WIN64)   //WINDOWS
42
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini Changed
11
 
1
@@ -147,8 +147,7 @@
2
 QueueSize="Wachtrij Grootte"
3
 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."
4
 View="Weergavemodus"
5
-View.Description="Welke eigenschappen moeten worden getoond?\nAls u
6
-'\@AMF.H264.View.Master\@' gebruikt dan ontvangt u verder geen ondersteuning."
7
+View.Description="Welke eigenschappen moeten worden getoond?\nAls u '\@AMF.H264.View.Master\@' gebruikt dan ontvangt u verder geen ondersteuning."
8
 View.Basic="Simpel"
9
 View.Advanced="Geavanceerd"
10
 View.Expert="Expert"
11
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp Changed
31
 
1
@@ -20,11 +20,6 @@
2
 #include "amf-capabilities.h"
3
 #include "utility.h"
4
 
5
-//#ifdef _WIN32
6
-//#include <windows.h>
7
-//#include <VersionHelpers.h>
8
-//#endif
9
-
10
 using namespace Plugin;
11
 using namespace Plugin::AMD;
12
 
13
@@ -51,6 +46,9 @@
14
 #pragma endregion Singleton
15
 
16
 Plugin::AMD::CapabilityManager::CapabilityManager() {
17
+   // Potential fix for unintended crashes by AMD including asserts in release builds.
18
+   AMD::AMF::Instance()->EnableDebugTrace(false);
19
+
20
    // Key order: API, Adapter, Codec
21
    for (auto api : API::EnumerateAPIs()) {
22
        for (auto adapter : api->EnumerateAdapters()) {
23
@@ -69,7 +67,6 @@
24
                        isSupported = true;
25
                } catch (const std::exception& e) {
26
                    PLOG_WARNING("%s", e.what());
27
-                   (void)e;
28
                }
29
 
30
                PLOG_DEBUG("[Capability Manager] Testing %s Adapter '%s' with codec %s: %s.",
31
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp Changed
28
 
1
@@ -1353,7 +1353,6 @@
2
 
3
 // Internal
4
 void Plugin::AMD::EncoderH264::PacketPriorityAndKeyframe(amf::AMFDataPtr& pData, struct encoder_packet* packet) {
5
-#ifndef PIPED_PROCESS
6
    AMFTRACECALL;
7
    uint64_t pktType;
8
    pData->GetProperty(AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE, &pktType);
9
@@ -1370,10 +1369,6 @@
10
            packet->priority = 0;
11
            break;
12
    }
13
-#else
14
-   (void)pData;
15
-   (void)packet;
16
-#endif
17
 }
18
 
19
 AMF_RESULT Plugin::AMD::EncoderH264::GetExtraDataInternal(amf::AMFVariant* p) {
20
@@ -1498,7 +1493,6 @@
21
        m_UniqueId,
22
        Utility::QualityPresetToString(GetQualityPreset()));
23
    auto profileLevel = static_cast<uint16_t>(GetProfileLevel());
24
-   (void)profileLevel;
25
    PLOG_INFO(PREFIX "    Profile: %s %" PRIu16 ".%" PRIu16,
26
        m_UniqueId,
27
        Utility::ProfileToString(GetProfile()),
28
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp Changed
28
 
1
@@ -1402,7 +1402,6 @@
2
 
3
 // Internal
4
 void Plugin::AMD::EncoderH265::PacketPriorityAndKeyframe(amf::AMFDataPtr& pData, struct encoder_packet* packet) {
5
-#ifndef PIPED_PROCESS
6
    AMFTRACECALL;
7
 
8
    uint64_t pktType;
9
@@ -1416,10 +1415,6 @@
10
            packet->priority = 0;
11
            break;
12
    }
13
-#else
14
-   (void)pData;
15
-   (void)packet;
16
-#endif
17
 }
18
 
19
 AMF_RESULT Plugin::AMD::EncoderH265::GetExtraDataInternal(amf::AMFVariant* p) {
20
@@ -1543,7 +1538,6 @@
21
        m_UniqueId,
22
        Utility::QualityPresetToString(GetQualityPreset()));
23
    auto profileLevel = static_cast<uint16_t>(GetProfileLevel());
24
-   (void)profileLevel;
25
    PLOG_INFO(PREFIX "    Profile: %s %" PRIu16 ".%" PRIu16,
26
        m_UniqueId,
27
        Utility::ProfileToString(GetProfile()),
28
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-encoder.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-encoder.cpp Changed
77
 
1
@@ -536,7 +536,6 @@
2
 }
3
 
4
 void Plugin::AMD::Encoder::GetVideoInfo(struct video_scale_info* info) {
5
-#ifndef PIPED_PROCESS
6
    AMFTRACECALL;
7
 
8
    if (!m_AMFContext || !m_AMFEncoder)
9
@@ -572,9 +571,6 @@
10
    } else {
11
        info->range = VIDEO_RANGE_PARTIAL;
12
    }
13
-#else
14
-   (void)info;
15
-#endif
16
 }
17
 
18
 bool Plugin::AMD::Encoder::GetExtraData(uint8_t** extra_data, size_t* size) {
19
@@ -633,7 +629,6 @@
20
 }
21
 
22
 bool Plugin::AMD::Encoder::EncodeStore(OUT amf::AMFSurfacePtr& surface, IN struct encoder_frame* frame) {
23
-#ifndef PIPED_PROCESS
24
    AMFTRACECALL;
25
 
26
    AMF_RESULT res;
27
@@ -731,10 +726,7 @@
28
            surface->GetDuration(),
29
            printableType.c_str());
30
    }
31
-#else
32
-   (void)surface;
33
-   (void)frame;
34
-#endif
35
+
36
    return true;
37
 }
38
 
39
@@ -938,7 +930,6 @@
40
 }
41
 
42
 bool Plugin::AMD::Encoder::EncodeLoad(IN amf::AMFDataPtr& data, OUT struct encoder_packet* packet, OUT bool* received_packet) {
43
-#ifndef PIPED_PROCESS
44
    AMFTRACECALL;
45
 
46
    if (data == nullptr)
47
@@ -1045,18 +1036,12 @@
48
    }
49
 
50
    *received_packet = true;
51
-#else
52
-   (void)data;
53
-   (void)packet;
54
-   (void)received_packet;
55
-#endif
56
+
57
    return true;
58
 }
59
 
60
 int32_t Plugin::AMD::Encoder::AsyncSendMain(Encoder* obj) {
61
-#ifndef PIPED_PROCESS
62
    os_set_thread_name("AMF Asynchronous Queue Sender");
63
-#endif
64
    return obj->AsyncSendLocalMain();
65
 }
66
 
67
@@ -1112,9 +1097,7 @@
68
 }
69
 
70
 int32_t Plugin::AMD::Encoder::AsyncRetrieveMain(Encoder* obj) {
71
-#ifndef PIPED_PROCESS
72
    os_set_thread_name("AMF Asynchronous Queue Retriever");
73
-#endif
74
    return obj->AsyncRetrieveLocalMain();
75
 }
76
 
77
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf.cpp Changed
39
 
1
@@ -40,7 +40,6 @@
2
    public:
3
 
4
    virtual void __cdecl Write(const wchar_t* scope, const wchar_t* message) override {
5
-#ifndef PIPED_PROCESS
6
        const wchar_t* realmsg = &(message[(33 + wcslen(scope) + 2)]); // Skip Time & Scope
7
        size_t msgLen = wcslen(realmsg) - (sizeof(wchar_t));
8
 
9
@@ -48,10 +47,6 @@
10
            12, &(message[11]),
11
            scope,
12
            msgLen, realmsg);
13
-#else
14
-       (void)scope;
15
-       (void)message;
16
-#endif
17
    }
18
 
19
    virtual void __cdecl Flush() override {}
20
@@ -137,7 +132,7 @@
21
        VerQueryValueA(pBlock, "\\VarFileInfo\\Translation", (LPVOID*)&lpTranslate, &cbTranslate);
22
 
23
        std::vector<char> buf(1024);
24
-       _snprintf(buf.data(), buf.size(), "%s%04x%04x%s",
25
+       snprintf(buf.data(), buf.size(), "%s%04x%04x%s",
26
            "\\StringFileInfo\\",
27
            lpTranslate[0].wLanguage,
28
            lpTranslate[0].wCodePage,
29
@@ -166,8 +161,7 @@
30
 
31
    /// Blacklist Drivers with older SDK.
32
    if (m_AMFVersion_Runtime < AMF_MAKE_FULL_VERSION(1,4,6,0)) {
33
-       QUICK_FORMAT_MESSAGE(msg, "AMF Runtime Version is too old, please update your drivers.");
34
-       throw std::exception(msg.data());
35
+       PLOG_WARNING("The AMF Runtime is very old and unsupported, consider updating your drivers.");
36
    }
37
 
38
    /// Initialize AMF
39
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/api-d3d11.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/api-d3d11.cpp Changed
112
 
1
@@ -27,7 +27,7 @@
2
 class SingletonDXGI {
3
    public:
4
 
5
-   #pragma region Singleton
6
+#pragma region Singleton
7
    static std::shared_ptr<SingletonDXGI> GetInstance() {
8
        static std::shared_ptr<SingletonDXGI> __instance = std::make_shared<SingletonDXGI>();
9
        static std::mutex __mutex;
10
@@ -35,7 +35,7 @@
11
        const std::lock_guard<std::mutex> lock(__mutex);
12
        return __instance;
13
    }
14
-   #pragma endregion Singleton
15
+#pragma endregion Singleton
16
 
17
    SingletonDXGI() {
18
        hModule = LoadLibrary(TEXT("dxgi.dll"));
19
@@ -80,7 +80,7 @@
20
 class SingletonD3D11 {
21
    public:
22
 
23
-   #pragma region Singleton
24
+#pragma region Singleton
25
    static std::shared_ptr<SingletonD3D11> GetInstance() {
26
        static std::shared_ptr<SingletonD3D11> __instance = std::make_shared<SingletonD3D11>();
27
        static std::mutex __mutex;
28
@@ -88,7 +88,7 @@
29
        const std::lock_guard<std::mutex> lock(__mutex);
30
        return __instance;
31
    }
32
-   #pragma endregion Singleton
33
+#pragma endregion Singleton
34
 
35
    SingletonD3D11() {
36
        hModule = LoadLibrary(TEXT("d3d11.dll"));
37
@@ -150,7 +150,7 @@
38
            continue;
39
 
40
        std::vector<char> buf(1024);
41
-       _snprintf(buf.data(), buf.size(), "%ls (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)",
42
+       snprintf(buf.data(), buf.size(), "%ls (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)",
43
            desc.Description,
44
            desc.VendorId,
45
            desc.DeviceId,
46
@@ -230,37 +230,39 @@
47
        D3D_FEATURE_LEVEL_11_1,
48
        D3D_FEATURE_LEVEL_11_0
49
    };
50
-   for (size_t c = 0; c < 3; c++) {
51
-       uint32_t flags = 0;
52
-
53
-       switch (c) {
54
-           case 0:
55
-               flags |= D3D11_CREATE_DEVICE_VIDEO_SUPPORT;
56
-           case 1:
57
-               flags |= D3D11_CREATE_DEVICE_BGRA_SUPPORT;
58
-           case 2:
59
+   for (size_t featureLevel = 0; featureLevel < _countof(featureLevels); featureLevel++) {
60
+       for (size_t enabledFlags = 0; enabledFlags < 3; enabledFlags++) {
61
+           uint32_t flags = 0;
62
+
63
+           switch (enabledFlags) {
64
+               case 0:
65
+                   flags |= D3D11_CREATE_DEVICE_VIDEO_SUPPORT;
66
+               case 1:
67
+                   flags |= D3D11_CREATE_DEVICE_BGRA_SUPPORT;
68
+               case 2:
69
+                   break;
70
+           }
71
+
72
+           hr = d3dInst->D3D11CreateDevice(
73
+               dxgiAdapter,
74
+               dxgiAdapter == NULL ? D3D_DRIVER_TYPE_HARDWARE : D3D_DRIVER_TYPE_UNKNOWN,
75
+               NULL,
76
+               flags,
77
+               featureLevels + featureLevel, UINT(_countof(featureLevels) - featureLevel),
78
+               D3D11_SDK_VERSION,
79
+               &m_Device,
80
+               NULL,
81
+               &m_DeviceContext);
82
+           if (SUCCEEDED(hr)) {
83
                break;
84
-       }
85
-
86
-       hr = d3dInst->D3D11CreateDevice(
87
-           dxgiAdapter,
88
-           dxgiAdapter == NULL ? D3D_DRIVER_TYPE_HARDWARE : D3D_DRIVER_TYPE_UNKNOWN,
89
-           NULL,
90
-           flags,
91
-           featureLevels + 1, _countof(featureLevels) - 1,
92
-           D3D11_SDK_VERSION,
93
-           &m_Device,
94
-           NULL,
95
-           &m_DeviceContext);
96
-       if (SUCCEEDED(hr)) {
97
-           break;
98
-       } else {
99
-           PLOG_WARNING("<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X (mode %d).", hr, c);
100
+           } else {
101
+               PLOG_DEBUG("<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X (mode %lld, level %lld).", hr, enabledFlags, featureLevel);
102
+           }
103
        }
104
    }
105
    if (FAILED(hr)) {
106
        std::vector<char> buf(1024);
107
-       _snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X.", hr);
108
+       snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X.", hr);
109
        throw std::exception(buf.data());
110
    }
111
 }
112
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/api-d3d9.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/api-d3d9.cpp Changed
28
 
1
@@ -55,7 +55,7 @@
2
            enumeratedLUIDs.push_back(adapterLUID);
3
 
4
        std::vector<char> buf(1024);
5
-       _snprintf(buf.data(), buf.size(), "%s [%s] (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)",
6
+       snprintf(buf.data(), buf.size(), "%s [%s] (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)",
7
            adapterIdentifier.Description,
8
            adapterIdentifier.DeviceName,
9
 
10
@@ -140,7 +140,7 @@
11
    HRESULT hr = api->m_Direct3D9Ex->GetDeviceCaps((UINT)adapterNum, D3DDEVTYPE_HAL, &ddCaps);
12
    if (FAILED(hr)) {
13
        std::vector<char> buf(1024);
14
-       _snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to query capabilities for D3D9 adapter, error code %X.", hr);
15
+       snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to query capabilities for D3D9 adapter, error code %X.", hr);
16
        throw std::exception(buf.data());
17
    }
18
 
19
@@ -162,7 +162,7 @@
20
    );
21
    if (FAILED(hr)) {
22
        std::vector<char> buf(1024);
23
-       _snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D9 device, error code %X.", hr);
24
+       snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D9 device, error code %X.", hr);
25
        throw std::exception(buf.data());
26
    }
27
 }
28
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/enc-h264.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/enc-h264.cpp Changed
814
 
1
@@ -17,48 +17,48 @@
2
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
3
  */
4
 
5
-//////////////////////////////////////////////////////////////////////////
6
-// New UI Design
7
-//////////////////////////////////////////////////////////////////////////
8
-// All: Preset
9
-// ----------- Static Section
10
-// Mas: Usage
11
-// All: Quality Preset
12
-// Adv: Profile
13
-// Adv: Profile Level
14
-// Mas: Aspect Ratio
15
-// Exp: Coding Type
16
-// Exp: Maximum Reference Frames
17
-// ----------- Rate Control Section
18
-// All: Rate Control Method
19
-// Adv: Pre-Pass Encoding (if supported)
20
-// All, CBR&VBR: Target Bitrate
21
-// All, VBR: Peak Bitrate
22
-// All, CQP: QP I/P/B
23
-// Adv, CBR&VBR: Min/Max QP
24
-// CBR: Filler Data
25
-// Adv: Frame Skipping
26
-// Exp: VBAQ
27
-// Exp: Enforce HRD
28
-// ----------- VBV Buffer
29
-// Adv: VBV Buffer Size
30
-// Exp: VBV Buffer Initial Fullness
31
-// ----------- Picture Control
32
-// All: Keyframe Interval (Float)
33
-// Mas: IDR Period (Overrides Keyframe Interval if non-zero)
34
-// Adv: B-Frames (if supported)
35
-// Adv: B-Frame Delta QP (if supported, not CQP)
36
-// Adv: B-Frame Reference (if supported and B-Frames enabled)
37
-// Adv: B-Frame Reference Delta QP (if supported, not CQP)
38
-// Exp: Deblocking Filter
39
-// Exp: Motion Estimation (Dropdown)
40
-// ----------- Intra-Refresh
41
-// ToDo: Master Mode only?
42
-// ----------- System
43
-// Adv: API
44
-// Adv: Adapter
45
-// Exp: OpenCL
46
-// All: View
47
+ //////////////////////////////////////////////////////////////////////////
48
+ // New UI Design
49
+ //////////////////////////////////////////////////////////////////////////
50
+ // All: Preset
51
+ // ----------- Static Section
52
+ // Mas: Usage
53
+ // All: Quality Preset
54
+ // Adv: Profile
55
+ // Adv: Profile Level
56
+ // Mas: Aspect Ratio
57
+ // Exp: Coding Type
58
+ // Exp: Maximum Reference Frames
59
+ // ----------- Rate Control Section
60
+ // All: Rate Control Method
61
+ // Adv: Pre-Pass Encoding (if supported)
62
+ // All, CBR&VBR: Target Bitrate
63
+ // All, VBR: Peak Bitrate
64
+ // All, CQP: QP I/P/B
65
+ // Adv, CBR&VBR: Min/Max QP
66
+ // CBR: Filler Data
67
+ // Adv: Frame Skipping
68
+ // Exp: VBAQ
69
+ // Exp: Enforce HRD
70
+ // ----------- VBV Buffer
71
+ // Adv: VBV Buffer Size
72
+ // Exp: VBV Buffer Initial Fullness
73
+ // ----------- Picture Control
74
+ // All: Keyframe Interval (Float)
75
+ // Mas: IDR Period (Overrides Keyframe Interval if non-zero)
76
+ // Adv: B-Frames (if supported)
77
+ // Adv: B-Frame Delta QP (if supported, not CQP)
78
+ // Adv: B-Frame Reference (if supported and B-Frames enabled)
79
+ // Adv: B-Frame Reference Delta QP (if supported, not CQP)
80
+ // Exp: Deblocking Filter
81
+ // Exp: Motion Estimation (Dropdown)
82
+ // ----------- Intra-Refresh
83
+ // ToDo: Master Mode only?
84
+ // ----------- System
85
+ // Adv: API
86
+ // Adv: Adapter
87
+ // Exp: OpenCL
88
+ // All: View
89
 
90
 #include "enc-h264.h"
91
 #include "amf-encoder-h264.h"
92
@@ -136,13 +136,12 @@
93
 }
94
 
95
 void Plugin::Interface::H264Interface::get_defaults(obs_data_t *data) {
96
-   #pragma region OBS - Enforce Streaming Service Restrictions
97
-   obs_data_set_default_int(data, "bitrate", 0);
98
+#pragma region OBS - Enforce Streaming Service Restrictions
99
    obs_data_set_default_int(data, "keyint_sec", 0);
100
    obs_data_set_default_string(data, "rate_control", "");
101
    obs_data_set_default_string(data, "profile", "");
102
    obs_data_set_default_string(data, "preset", "");
103
-   #pragma endregion OBS - Enforce Streaming Service Restrictions
104
+#pragma endregion OBS - Enforce Streaming Service Restrictions
105
 
106
    // Preset
107
    obs_data_set_default_int(data, P_PRESET, static_cast<int64_t>(Presets::None));
108
@@ -243,7 +242,7 @@
109
    obs_properties* props = obs_properties_create();
110
    obs_property_t* p;
111
 
112
-   #pragma region Preset
113
+#pragma region Preset
114
    p = obs_properties_add_list(props, P_PRESET, P_TRANSLATE(P_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
115
    obs_property_set_modified_callback(p, properties_modified);
116
    obs_property_list_add_int(p, "", -1);
117
@@ -254,18 +253,18 @@
118
    obs_property_list_add_int(p, P_TRANSLATE(P_PRESET_LOSSLESS), static_cast<int32_t>(Presets::Lossless));
119
    obs_property_list_add_int(p, P_TRANSLATE(P_PRESET_TWITCH), static_cast<int32_t>(Presets::Twitch));
120
    obs_property_list_add_int(p, P_TRANSLATE(P_PRESET_YOUTUBE), static_cast<int32_t>(Presets::YouTube));
121
-   #pragma endregion Preset
122
+#pragma endregion Preset
123
 
124
    // Static Properties
125
-   #pragma region Quality Preset
126
+#pragma region Quality Preset
127
    p = obs_properties_add_list(props, P_QUALITYPRESET, P_TRANSLATE(P_QUALITYPRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
128
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUALITYPRESET)));
129
    obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_SPEED), static_cast<int32_t>(QualityPreset::Speed));
130
    obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_BALANCED), static_cast<int32_t>(QualityPreset::Balanced));
131
    obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_QUALITY), static_cast<int32_t>(QualityPreset::Quality));
132
-   #pragma endregion Quality Preset
133
+#pragma endregion Quality Preset
134
 
135
-   #pragma region Profile, Levels
136
+#pragma region Profile, Levels
137
    p = obs_properties_add_list(props, P_PROFILE, P_TRANSLATE(P_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
138
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PROFILE)));
139
    obs_property_list_add_int(p, "Constrained Baseline", static_cast<int32_t>(Profile::ConstrainedBaseline));
140
@@ -293,24 +292,24 @@
141
    obs_property_list_add_int(p, "5.0", static_cast<int32_t>(ProfileLevel::L50));
142
    obs_property_list_add_int(p, "5.1", static_cast<int32_t>(ProfileLevel::L51));
143
    obs_property_list_add_int(p, "5.2", static_cast<int32_t>(ProfileLevel::L52));
144
-   #pragma endregion Profile, Levels
145
+#pragma endregion Profile, Levels
146
 
147
-   #pragma region Coding Type
148
+#pragma region Coding Type
149
    p = obs_properties_add_list(props, P_CODINGTYPE, P_TRANSLATE(P_CODINGTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
150
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_CODINGTYPE)));
151
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), static_cast<int32_t>(CodingType::Automatic));
152
    obs_property_list_add_int(p, "CABAC", static_cast<int32_t>(CodingType::CABAC));
153
    obs_property_list_add_int(p, "CALVC", static_cast<int32_t>(CodingType::CALVC));
154
-   #pragma endregion Coding Type
155
+#pragma endregion Coding Type
156
 
157
-   #pragma region Maximum Reference Frames
158
+#pragma region Maximum Reference Frames
159
    p = obs_properties_add_int_slider(props, P_MAXIMUMREFERENCEFRAMES, P_TRANSLATE(P_MAXIMUMREFERENCEFRAMES),
160
        1, 16, 1);
161
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MAXIMUMREFERENCEFRAMES)));
162
-   #pragma endregion Maximum Reference Frames
163
+#pragma endregion Maximum Reference Frames
164
 
165
    // Rate Control
166
-   #pragma region Rate Control Method
167
+#pragma region Rate Control Method
168
    p = obs_properties_add_list(props, P_RATECONTROLMETHOD, P_TRANSLATE(P_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
169
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_RATECONTROLMETHOD)));
170
    obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_CQP), static_cast<int32_t>(RateControlMethod::ConstantQP));
171
@@ -318,16 +317,16 @@
172
    obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBR), static_cast<int32_t>(RateControlMethod::PeakConstrainedVariableBitrate));
173
    obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBRLAT), static_cast<int32_t>(RateControlMethod::LatencyConstrainedVariableBitrate));
174
    obs_property_set_modified_callback(p, properties_modified);
175
-   #pragma endregion Rate Control Method
176
+#pragma endregion Rate Control Method
177
 
178
-   #pragma region Pre-Pass
179
+#pragma region Pre-Pass
180
    p = obs_properties_add_list(props, P_PREPASSMODE, P_TRANSLATE(P_PREPASSMODE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
181
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PREPASSMODE)));
182
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), static_cast<int32_t>(PrePassMode::Disabled));
183
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), static_cast<int32_t>(PrePassMode::Enabled));
184
-   #pragma endregion Pre-Pass
185
+#pragma endregion Pre-Pass
186
 
187
-   #pragma region Parameters
188
+#pragma region Parameters
189
    /// Bitrate Constraints
190
    p = obs_properties_add_int(props, "bitrate", P_TRANSLATE(P_BITRATE_TARGET), 0, 1, 1);
191
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BITRATE_TARGET)));
192
@@ -347,16 +346,16 @@
193
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_PFRAME)));
194
    p = obs_properties_add_int_slider(props, P_QP_BFRAME, P_TRANSLATE(P_QP_BFRAME), 0, 51, 1);
195
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_BFRAME)));
196
-   #pragma endregion Parameters
197
+#pragma endregion Parameters
198
 
199
-   #pragma region Filler Data
200
+#pragma region Filler Data
201
    p = obs_properties_add_list(props, P_FILLERDATA, P_TRANSLATE(P_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
202
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FILLERDATA)));
203
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
204
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
205
-   #pragma endregion Filler Data
206
+#pragma endregion Filler Data
207
 
208
-   #pragma region Frame Skipping
209
+#pragma region Frame Skipping
210
    p = obs_properties_add_list(props, P_FRAMESKIPPING, P_TRANSLATE(P_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
211
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING)));
212
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
213
@@ -367,49 +366,49 @@
214
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING_BEHAVIOUR)));
215
    obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_SKIPNTH), 0);
216
    obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_KEEPNTH), 1);
217
-   #pragma endregion Frame Skipping
218
+#pragma endregion Frame Skipping
219
 
220
-   #pragma region VBAQ
221
+#pragma region VBAQ
222
    p = obs_properties_add_list(props, P_VBAQ, P_TRANSLATE(P_VBAQ), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
223
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBAQ)));
224
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
225
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
226
-   #pragma endregion VBAQ
227
+#pragma endregion VBAQ
228
 
229
-   #pragma region Enforce Hyptothetical Reference Decoder Restrictions
230
+#pragma region Enforce Hyptothetical Reference Decoder Restrictions
231
    p = obs_properties_add_list(props, P_ENFORCEHRD, P_TRANSLATE(P_ENFORCEHRD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
232
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ENFORCEHRD)));
233
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
234
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
235
-   #pragma endregion Enforce Hyptothetical Reference Decoder Restrictions
236
+#pragma endregion Enforce Hyptothetical Reference Decoder Restrictions
237
 
238
    // VBV Buffer
239
-   #pragma region VBV Buffer Mode
240
+#pragma region VBV Buffer Mode
241
    p = obs_properties_add_list(props, P_VBVBUFFER, P_TRANSLATE(P_VBVBUFFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
242
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER)));
243
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), 0);
244
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_MANUAL), 1);
245
    obs_property_set_modified_callback(p, properties_modified);
246
-   #pragma endregion VBV Buffer Mode
247
+#pragma endregion VBV Buffer Mode
248
 
249
-   #pragma region VBV Buffer Strictness
250
+#pragma region VBV Buffer Strictness
251
    p = obs_properties_add_float_slider(props, P_VBVBUFFER_STRICTNESS, P_TRANSLATE(P_VBVBUFFER_STRICTNESS), 0.0, 100.0, 0.1);
252
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_STRICTNESS)));
253
-   #pragma endregion VBV Buffer Strictness
254
+#pragma endregion VBV Buffer Strictness
255
 
256
-   #pragma region VBV Buffer Size
257
+#pragma region VBV Buffer Size
258
    p = obs_properties_add_int_slider(props, P_VBVBUFFER_SIZE, P_TRANSLATE(P_VBVBUFFER_SIZE), 1, 1000000, 1);
259
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_SIZE)));
260
-   #pragma endregion VBV Buffer Size
261
+#pragma endregion VBV Buffer Size
262
 
263
-   #pragma region VBV Buffer Initial Fullness
264
+#pragma region VBV Buffer Initial Fullness
265
    p = obs_properties_add_float_slider(props, P_VBVBUFFER_INITIALFULLNESS, P_TRANSLATE(P_VBVBUFFER_INITIALFULLNESS), 0.0, 100.0, 100.0 / 64.0);
266
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_INITIALFULLNESS)));
267
-   #pragma endregion VBV Buffer Initial Fullness
268
+#pragma endregion VBV Buffer Initial Fullness
269
 
270
    // Picture Control
271
-   #pragma region Interval and Periods
272
-   /// Keyframe, IDR
273
+#pragma region Interval and Periods
274
+/// Keyframe, IDR
275
    p = obs_properties_add_float(props, P_INTERVAL_KEYFRAME, P_TRANSLATE(P_INTERVAL_KEYFRAME), 0, 100, 0.001);
276
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_KEYFRAME)));
277
    p = obs_properties_add_int(props, P_PERIOD_IDR_H264, P_TRANSLATE(P_PERIOD_IDR_H264), 0, 1000, 1);
278
@@ -429,61 +428,61 @@
279
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_BFRAME)));
280
    p = obs_properties_add_int(props, P_PERIOD_BFRAME, P_TRANSLATE(P_PERIOD_BFRAME), 0, 1000, 1);
281
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PERIOD_BFRAME)));
282
-   #pragma endregion Interval and Periods
283
+#pragma endregion Interval and Periods
284
 
285
-   #pragma region B-Frames Pattern
286
+#pragma region B-Frames Pattern
287
    p = obs_properties_add_int_slider(props, P_BFRAME_PATTERN, P_TRANSLATE(P_BFRAME_PATTERN), 0, 3, 1);
288
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_PATTERN)));
289
    obs_property_set_modified_callback(p, properties_modified);
290
-   #pragma endregion B-Frames Pattern
291
+#pragma endregion B-Frames Pattern
292
 
293
-   #pragma region B-Frames Reference
294
+#pragma region B-Frames Reference
295
    p = obs_properties_add_list(props, P_BFRAME_REFERENCE, P_TRANSLATE(P_BFRAME_REFERENCE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
296
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_REFERENCE)));
297
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
298
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
299
    obs_property_set_modified_callback(p, properties_modified);
300
-   #pragma endregion B-Frames Reference
301
+#pragma endregion B-Frames Reference
302
 
303
-   #pragma region B-Frames Delta QP
304
+#pragma region B-Frames Delta QP
305
    p = obs_properties_add_int_slider(props, P_BFRAME_REFERENCEDELTAQP, P_TRANSLATE(P_BFRAME_REFERENCEDELTAQP), -10, 10, 1);
306
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_REFERENCEDELTAQP)));
307
 
308
    p = obs_properties_add_int_slider(props, P_BFRAME_DELTAQP, P_TRANSLATE(P_BFRAME_DELTAQP), -10, 10, 1);
309
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_DELTAQP)));
310
-   #pragma endregion B-Frames Delta QP
311
+#pragma endregion B-Frames Delta QP
312
 
313
-   #pragma region Deblocking Filter
314
+#pragma region Deblocking Filter
315
    p = obs_properties_add_list(props, P_DEBLOCKINGFILTER, P_TRANSLATE(P_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
316
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_DEBLOCKINGFILTER)));
317
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
318
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
319
-   #pragma endregion Deblocking Filter
320
+#pragma endregion Deblocking Filter
321
 
322
-   #pragma region Motion Estimation
323
+#pragma region Motion Estimation
324
    p = obs_properties_add_list(props, P_MOTIONESTIMATION, P_TRANSLATE(P_MOTIONESTIMATION), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
325
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MOTIONESTIMATION)));
326
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
327
    obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_HALF), 1);
328
    obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_QUARTER), 2);
329
    obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_FULL), 3);
330
-   #pragma endregion Motion Estimation
331
+#pragma endregion Motion Estimation
332
 
333
    // System
334
-   #pragma region Video APIs
335
+#pragma region Video APIs
336
    p = obs_properties_add_list(props, P_VIDEO_API, P_TRANSLATE(P_VIDEO_API), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
337
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_API)));
338
    obs_property_set_modified_callback(p, properties_modified);
339
    fill_api_list(p);
340
-   #pragma endregion Video APIs
341
+#pragma endregion Video APIs
342
 
343
-   #pragma region Video Adapters
344
+#pragma region Video Adapters
345
    p = obs_properties_add_list(props, P_VIDEO_ADAPTER, P_TRANSLATE(P_VIDEO_ADAPTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
346
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_ADAPTER)));
347
    obs_property_set_modified_callback(p, properties_modified);
348
-   #pragma endregion Video Adapters
349
+#pragma endregion Video Adapters
350
 
351
-   #pragma region OpenCL
352
+#pragma region OpenCL
353
    p = obs_properties_add_list(props, P_OPENCL_TRANSFER, P_TRANSLATE(P_OPENCL_TRANSFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
354
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_TRANSFER)));
355
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
356
@@ -493,9 +492,9 @@
357
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_CONVERSION)));
358
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
359
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
360
-   #pragma endregion OpenCL
361
+#pragma endregion OpenCL
362
 
363
-   #pragma region Asynchronous Queue
364
+#pragma region Asynchronous Queue
365
    p = obs_properties_add_list(props, P_MULTITHREADING, P_TRANSLATE(P_MULTITHREADING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
366
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MULTITHREADING)));
367
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
368
@@ -503,9 +502,9 @@
369
 
370
    p = obs_properties_add_int_slider(props, P_QUEUESIZE, P_TRANSLATE(P_QUEUESIZE), 1, 32, 1);
371
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUEUESIZE)));
372
-   #pragma endregion Asynchronous Queue
373
+#pragma endregion Asynchronous Queue
374
 
375
-   #pragma region View Mode
376
+#pragma region View Mode
377
    p = obs_properties_add_list(props, P_VIEW, P_TRANSLATE(P_VIEW), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
378
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIEW)));
379
    obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_BASIC), static_cast<int32_t>(ViewMode::Basic));
380
@@ -513,7 +512,7 @@
381
    obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_EXPERT), static_cast<int32_t>(ViewMode::Expert));
382
    obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_MASTER), static_cast<int32_t>(ViewMode::Master));
383
    obs_property_set_modified_callback(p, properties_modified);
384
-   #pragma endregion View Mode
385
+#pragma endregion View Mode
386
 
387
    /// Debug
388
    p = obs_properties_add_bool(props, P_DEBUG, P_TRANSLATE(P_DEBUG));
389
@@ -526,10 +525,10 @@
390
 }
391
 
392
 static void obs_data_transfer_settings(obs_data_t * data) {
393
-   #define TRANSFER_STRING(xold, xnew) obs_data_set_string(data, xnew, obs_data_get_string(data, xold))
394
-   #define TRANSFER_FLOAT(xold, xnew) obs_data_set_double(data, xnew, obs_data_get_double(data, xold))
395
-   #define TRANSFER_INT(xold, xnew) obs_data_set_int(data, xnew, obs_data_get_int(data, xold))
396
-   #define TRANSFER_BOOL(xold, xnew) obs_data_set_bool(data, xnew, obs_data_get_bool(data, xold))
397
+#define TRANSFER_STRING(xold, xnew) obs_data_set_string(data, xnew, obs_data_get_string(data, xold))
398
+#define TRANSFER_FLOAT(xold, xnew) obs_data_set_double(data, xnew, obs_data_get_double(data, xold))
399
+#define TRANSFER_INT(xold, xnew) obs_data_set_int(data, xnew, obs_data_get_int(data, xold))
400
+#define TRANSFER_BOOL(xold, xnew) obs_data_set_bool(data, xnew, obs_data_get_bool(data, xold))
401
 
402
    uint64_t version = obs_data_get_int(data, P_VERSION);
403
    switch (version) {
404
@@ -594,11 +593,8 @@
405
            TRANSFER_INT("H265.IDRPeriod", P_PERIOD_IDR_H265);
406
        case (((uint64_t)(2 & 0xFFFF) << 48ull) | ((uint64_t)(3 & 0xFFFF) << 32ull) | ((uint64_t)(0) & 0xFFFFFFFF)):
407
            TRANSFER_INT(P_BITRATE_TARGET, "bitrate");
408
-           break;
409
-       case PLUGIN_VERSION_FULL:
410
-           obs_data_set_int(data, P_VERSION, PLUGIN_VERSION_FULL);
411
-           break;
412
    }
413
+   obs_data_set_int(data, P_VERSION, PLUGIN_VERSION_FULL);
414
 }
415
 
416
 bool Plugin::Interface::H264Interface::properties_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
417
@@ -608,7 +604,7 @@
418
    // Transfer settings from older Plugin versions to newer ones.
419
    obs_data_transfer_settings(data);
420
 
421
-   #pragma region Video API & Adapter
422
+#pragma region Video API & Adapter
423
    // Video API
424
    const char
425
        *videoAPI_last = obs_data_get_string(data, ("last" P_VIDEO_API)),
426
@@ -648,7 +644,7 @@
427
        try {
428
            auto enc = EncoderH264(api, adapter);
429
 
430
-           #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \
431
+       #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \
432
                auto tmp_p = obs_properties_get(props, prop); \
433
                auto tmp_l = enc.func(); \
434
                enm tmp_s = static_cast<enm>(obs_data_get_int(data, obs_property_name(tmp_p))); \
435
@@ -666,12 +662,12 @@
436
                        obs_data_unset_user_value(data, obs_property_name(tmp_p)); \
437
                } \
438
            }
439
-           #define TEMP_LIMIT_SLIDER(func, prop) { \
440
+       #define TEMP_LIMIT_SLIDER(func, prop) { \
441
                auto tmp_p = obs_properties_get(props, prop); \
442
                auto tmp_l = enc.func(); \
443
                obs_property_int_set_limits(tmp_p, (int)tmp_l.first, (int)tmp_l.second, 1); \
444
            }
445
-           #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \
446
+       #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \
447
                auto tmp_p = obs_properties_get(props, prop); \
448
                auto tmp_l = enc.func(); \
449
                obs_property_int_set_limits(tmp_p, (int)tmp_l.first / 1000, (int)tmp_l.second / 1000, 1); \
450
@@ -705,9 +701,9 @@
451
                e.what());
452
        }
453
    }
454
-   #pragma endregion Video API & Adapter
455
+#pragma endregion Video API & Adapter
456
 
457
-   #pragma region Presets
458
+#pragma region Presets
459
    Presets lastPreset = static_cast<Presets>(obs_data_get_int(data, ("last" P_PRESET))),
460
        preset = static_cast<Presets>(obs_data_get_int(data, P_PRESET));
461
    if (lastPreset != preset) { // Reset State
462
@@ -723,50 +719,50 @@
463
 
464
    switch (preset) {
465
        case Presets::ResetToDefaults:
466
-           #pragma region Default
467
-           {
468
-               obs_property_t* pn = obs_properties_first(props);
469
-               do {
470
-                   const char* name = obs_property_name(pn);
471
-
472
-                   // Do not reset Video Adapter or API.
473
-                   if ((strcmp(name, P_VIDEO_API) == 0) || (strcmp(name, P_VIDEO_ADAPTER) == 0))
474
-                       continue;
475
-
476
-                   switch (obs_property_get_type(pn)) {
477
-                       case obs_property_type::OBS_PROPERTY_BOOL:
478
-                           obs_data_set_bool(data, name, obs_data_get_default_bool(data, name));
479
-                           break;
480
-                       case obs_property_type::OBS_PROPERTY_FLOAT:
481
-                           obs_data_set_double(data, name, obs_data_get_default_double(data, name));
482
-                           break;
483
-                       case obs_property_type::OBS_PROPERTY_INT:
484
-                           obs_data_set_int(data, name, obs_data_get_default_int(data, name));
485
-                           break;
486
-                       case obs_property_type::OBS_PROPERTY_TEXT:
487
-                           obs_data_set_string(data, name, obs_data_get_default_string(data, name));
488
-                           break;
489
-                       case obs_property_type::OBS_PROPERTY_LIST:
490
-                           switch (obs_property_list_format(pn)) {
491
-                               case obs_combo_format::OBS_COMBO_FORMAT_INT:
492
-                                   obs_data_set_int(data, name, obs_data_get_default_int(data, name));
493
-                                   break;
494
-                               case obs_combo_format::OBS_COMBO_FORMAT_FLOAT:
495
-                                   obs_data_set_double(data, name, obs_data_get_default_double(data, name));
496
-                                   break;
497
-                               case obs_combo_format::OBS_COMBO_FORMAT_STRING:
498
-                                   obs_data_set_string(data, name, obs_data_get_default_string(data, name));
499
-                                   break;
500
-                           }
501
-                           break;
502
-                   }
503
-                   obs_property_set_enabled(pn, true);
504
-               } while (obs_property_next(&pn));
505
-           }
506
-           break;
507
-           #pragma endregion Default
508
+       #pragma region Default
509
+       {
510
+           obs_property_t* pn = obs_properties_first(props);
511
+           do {
512
+               const char* name = obs_property_name(pn);
513
+
514
+               // Do not reset Video Adapter or API.
515
+               if ((strcmp(name, P_VIDEO_API) == 0) || (strcmp(name, P_VIDEO_ADAPTER) == 0))
516
+                   continue;
517
+
518
+               switch (obs_property_get_type(pn)) {
519
+                   case obs_property_type::OBS_PROPERTY_BOOL:
520
+                       obs_data_set_bool(data, name, obs_data_get_default_bool(data, name));
521
+                       break;
522
+                   case obs_property_type::OBS_PROPERTY_FLOAT:
523
+                       obs_data_set_double(data, name, obs_data_get_default_double(data, name));
524
+                       break;
525
+                   case obs_property_type::OBS_PROPERTY_INT:
526
+                       obs_data_set_int(data, name, obs_data_get_default_int(data, name));
527
+                       break;
528
+                   case obs_property_type::OBS_PROPERTY_TEXT:
529
+                       obs_data_set_string(data, name, obs_data_get_default_string(data, name));
530
+                       break;
531
+                   case obs_property_type::OBS_PROPERTY_LIST:
532
+                       switch (obs_property_list_format(pn)) {
533
+                           case obs_combo_format::OBS_COMBO_FORMAT_INT:
534
+                               obs_data_set_int(data, name, obs_data_get_default_int(data, name));
535
+                               break;
536
+                           case obs_combo_format::OBS_COMBO_FORMAT_FLOAT:
537
+                               obs_data_set_double(data, name, obs_data_get_default_double(data, name));
538
+                               break;
539
+                           case obs_combo_format::OBS_COMBO_FORMAT_STRING:
540
+                               obs_data_set_string(data, name, obs_data_get_default_string(data, name));
541
+                               break;
542
+                       }
543
+                       break;
544
+               }
545
+               obs_property_set_enabled(pn, true);
546
+           } while (obs_property_next(&pn));
547
+       }
548
+       break;
549
+   #pragma endregion Default
550
        case Presets::Recording:
551
-           #pragma region Recording
552
+       #pragma region Recording
553
            // Static Properties
554
            //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding));
555
            //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false);
556
@@ -795,9 +791,9 @@
557
            obs_data_set_int(data, P_MOTIONESTIMATION, 3);
558
            obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false);
559
            break;
560
-           #pragma endregion Recording
561
+       #pragma endregion Recording
562
        case Presets::HighQuality:
563
-           #pragma region High Quality
564
+       #pragma region High Quality
565
            // Static Properties
566
            //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding));
567
            //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false);
568
@@ -824,9 +820,9 @@
569
            obs_data_set_int(data, P_MOTIONESTIMATION, 3);
570
            obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false);
571
            break;
572
-           #pragma endregion High Quality
573
+       #pragma endregion High Quality
574
        case Presets::Indistinguishable:
575
-           #pragma region Indistinguishable
576
+       #pragma region Indistinguishable
577
            // Static Properties
578
            //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding));
579
            //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false);
580
@@ -853,9 +849,9 @@
581
            obs_data_set_int(data, P_MOTIONESTIMATION, 3);
582
            obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false);
583
            break;
584
-           #pragma endregion Indistinguishable
585
+       #pragma endregion Indistinguishable
586
        case Presets::Lossless:
587
-           #pragma region Lossless
588
+       #pragma region Lossless
589
            // Static Properties
590
            //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding));
591
            //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false);
592
@@ -884,9 +880,9 @@
593
            obs_data_set_int(data, P_MOTIONESTIMATION, 3);
594
            obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false);
595
            break;
596
-           #pragma endregion Lossless
597
+       #pragma endregion Lossless
598
        case Presets::Twitch:
599
-           #pragma region Twitch
600
+       #pragma region Twitch
601
            // Static Properties
602
            //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding));
603
            //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false);
604
@@ -915,9 +911,9 @@
605
            obs_data_set_int(data, P_MOTIONESTIMATION, 3);
606
            obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false);
607
            break;
608
-           #pragma endregion Twitch
609
+       #pragma endregion Twitch
610
        case Presets::YouTube:
611
-           #pragma region YouTube
612
+       #pragma region YouTube
613
            // Static Properties
614
            //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding));
615
            //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false);
616
@@ -946,11 +942,11 @@
617
            obs_data_set_int(data, P_MOTIONESTIMATION, 3);
618
            obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false);
619
            break;
620
-           #pragma endregion YouTube
621
+       #pragma endregion YouTube
622
    }
623
-   #pragma endregion Presets
624
+#pragma endregion Presets
625
 
626
-   #pragma region View Mode
627
+#pragma region View Mode
628
    ViewMode lastView = static_cast<ViewMode>(obs_data_get_int(data, ("last" P_VIEW))),
629
        curView = static_cast<ViewMode>(obs_data_get_int(data, P_VIEW));
630
    if (lastView != curView) {
631
@@ -1027,7 +1023,7 @@
632
    }
633
 
634
    // Special Logic
635
-   #pragma region B-Frames
636
+#pragma region B-Frames
637
    auto bframeProperty = obs_properties_get(props, P_BFRAME_PATTERN);
638
    bool bframeSupported = obs_property_int_max(bframeProperty) > 0;
639
    bool bframeVisible = (curView >= ViewMode::Advanced) && bframeSupported;
640
@@ -1062,9 +1058,9 @@
641
    obs_property_set_visible(obs_properties_get(props, P_BFRAME_REFERENCEDELTAQP), bframeVisible && usingBFrames && usingBFrameReference);
642
    if (!bframeVisible || !usingBFrames || !usingBFrameReference)
643
        obs_data_unset_user_value(data, P_BFRAME_REFERENCEDELTAQP);
644
-   #pragma endregion B-Frames
645
+#pragma endregion B-Frames
646
 
647
-   #pragma region Rate Control
648
+#pragma region Rate Control
649
    bool vis_rcm_bitrate_target = false,
650
        vis_rcm_bitrate_peak = false,
651
        vis_rcm_qp = false,
652
@@ -1137,9 +1133,9 @@
653
    obs_property_set_visible(obs_properties_get(props, P_FILLERDATA), vis_rcm_fillerdata);
654
    if (!vis_rcm_fillerdata)
655
        obs_data_unset_user_value(data, P_FILLERDATA);
656
-   #pragma endregion Rate Control
657
+#pragma endregion Rate Control
658
 
659
-   #pragma region VBV Buffer
660
+#pragma region VBV Buffer
661
    uint32_t vbvBufferMode = static_cast<uint32_t>(obs_data_get_int(data, P_VBVBUFFER));
662
    bool vbvBufferVisible = (curView >= ViewMode::Advanced);
663
 
664
@@ -1155,9 +1151,9 @@
665
        obs_data_unset_user_value(data, P_VBVBUFFER_SIZE);
666
    if (!vbvBufferVisible || vbvBufferMode == 1)
667
        obs_data_unset_user_value(data, P_VBVBUFFER_STRICTNESS);
668
-   #pragma endregion VBV Buffer
669
+#pragma endregion VBV Buffer
670
 
671
-   #pragma region B-Frame Interval
672
+#pragma region B-Frame Interval
673
    bool bframeIntervalVisible = bframeSupported && (curView >= ViewMode::Master);
674
    obs_property_set_visible(obs_properties_get(props, P_PERIOD_BFRAME), bframeIntervalVisible);
675
    obs_property_set_visible(obs_properties_get(props, P_INTERVAL_BFRAME), bframeIntervalVisible);
676
@@ -1165,8 +1161,8 @@
677
        obs_data_unset_user_value(data, P_PERIOD_BFRAME);
678
        obs_data_unset_user_value(data, P_INTERVAL_BFRAME);
679
    }
680
-   #pragma endregion B-Frame Interval
681
-   #pragma endregion View Mode
682
+#pragma endregion B-Frame Interval
683
+#pragma endregion View Mode
684
 
685
    // Permanently disable static properties while encoding.
686
    void* enc = obs_properties_get_param(props);
687
@@ -1331,7 +1327,7 @@
688
    }
689
 
690
    // OBS - Enforce Streaming Service Restrictions
691
-   #pragma region OBS - Enforce Streaming Service Restrictions
692
+#pragma region OBS - Enforce Streaming Service Restrictions
693
    {
694
        // Profile
695
        const char* p_str = obs_data_get_string(data, "profile");
696
@@ -1347,6 +1343,7 @@
697
            } else if (strcmp(p_str, "high") == 0) {
698
                m_VideoEncoder->SetProfile(Profile::High);
699
            }
700
+           obs_data_unset_user_value(data, "profile");
701
        }
702
 
703
        // Preset
704
@@ -1360,9 +1357,10 @@
705
                m_VideoEncoder->SetQualityPreset(QualityPreset::Quality);
706
            }
707
            obs_data_set_int(data, P_QUALITYPRESET, (int32_t)m_VideoEncoder->GetQualityPreset());
708
+           obs_data_unset_user_value(data, "preset");
709
        }
710
    }
711
-   #pragma endregion OBS - Enforce Streaming Service Restrictions
712
+#pragma endregion OBS - Enforce Streaming Service Restrictions
713
 
714
    // Dynamic Properties (Can be changed during Encoding)
715
    this->update(data);
716
@@ -1409,15 +1407,21 @@
717
            } catch (...) {
718
            }
719
        }
720
-       m_VideoEncoder->SetPrePassMode(PrePassMode::Disabled);
721
-       m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(false);
722
+       try {
723
+           m_VideoEncoder->SetPrePassMode(PrePassMode::Disabled);
724
+           m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(false);
725
+       } catch (...) {
726
+       }
727
    } else {
728
        m_VideoEncoder->SetQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MINIMUM)));
729
        m_VideoEncoder->SetQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MAXIMUM)));
730
        m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, "bitrate") * 1000));
731
        m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_PEAK) * 1000));
732
-       m_VideoEncoder->SetPrePassMode(static_cast<PrePassMode>(obs_data_get_int(data, P_PREPASSMODE)));
733
-       m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(!!obs_data_get_int(data, P_VBAQ));
734
+       try {
735
+           m_VideoEncoder->SetPrePassMode(static_cast<PrePassMode>(obs_data_get_int(data, P_PREPASSMODE)));
736
+           m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(!!obs_data_get_int(data, P_VBAQ));
737
+       } catch (...) {
738
+       }
739
    }
740
    if (rcm == RateControlMethod::ConstantBitrate) {
741
        m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, "bitrate") * 1000));
742
@@ -1468,7 +1472,7 @@
743
    }
744
    m_VideoEncoder->SetDeblockingFilterEnabled(!!obs_data_get_int(data, P_DEBLOCKINGFILTER));
745
 
746
-   #pragma region B-Frames
747
+#pragma region B-Frames
748
    if (m_VideoEncoder->CapsBFramePattern() > 0) {
749
        try {
750
            m_VideoEncoder->SetBFramePattern(static_cast<uint8_t>(obs_data_get_int(data, P_BFRAME_PATTERN)));
751
@@ -1480,28 +1484,13 @@
752
        } catch (...) {
753
        }
754
    }
755
-   #pragma endregion B-Frames
756
+#pragma endregion B-Frames
757
 
758
    // Motion Estimation
759
    m_VideoEncoder->SetMotionEstimationHalfPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 1));
760
    m_VideoEncoder->SetMotionEstimationQuarterPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 2));
761
 
762
-   //#pragma region Experimental
763
-   //try { m_VideoEncoder->SetWaitForTaskEnabled(!!obs_data_get_int(data, P_WAITFORTASK)); } catch (...) {}
764
-   //if (m_VideoEncoder->GetUsage() == H264Usage::Transcoding || m_VideoEncoder->GetUsage() == H264Usage::Webcam) {
765
-   //  try { m_VideoEncoder->SetGOPSize(static_cast<uint32_t>(obs_data_get_int(data, P_GOPSIZE))); } catch (...) {}
766
-   //}
767
-   //try { m_VideoEncoder->SetGOPAlignmentEnabled(!!obs_data_get_int(data, P_GOPALIGNMENT)); } catch (...) {}
768
-   //try { m_VideoEncoder->SetIntraRefreshNumberOfStripes(static_cast<uint32_t>(obs_data_get_int(data, P_INTRAREFRESH_NUMBEROFSTRIPES))); } catch (...) {}
769
-   //try { m_VideoEncoder->SetIntraRefreshMacroblocksPerSlot(static_cast<uint32_t>(obs_data_get_int(data, P_INTRAREFRESH_MACROBLOCKSPERSLOT))); } catch (...) {}
770
-   //try { m_VideoEncoder->SetSlicesPerFrame(static_cast<uint32_t>(obs_data_get_int(data, P_SLICESPERFRAME))); } catch (...) {}
771
-   //try { m_VideoEncoder->SetSliceMode(static_cast<H264SliceMode>(obs_data_get_int(data, P_SLICEMODE))); } catch (...) {}
772
-   //try { m_VideoEncoder->SetMaximumSliceSize(static_cast<uint32_t>(obs_data_get_int(data, P_MAXIMUMSLICESIZE))); } catch (...) {}
773
-   //try { m_VideoEncoder->SetSliceControlMode(static_cast<H264SliceControlMode>(obs_data_get_int(data, P_SLICECONTROLMODE))); } catch (...) {}
774
-   //try { m_VideoEncoder->SetSliceControlSize(static_cast<uint32_t>(obs_data_get_int(data, P_SLICECONTROLSIZE))); } catch (...) {}
775
-   //#pragma endregion Experimental
776
-
777
-   #pragma region OBS Enforce Streaming Service Settings
778
+#pragma region OBS Enforce Streaming Service Settings
779
    {
780
        // Rate Control Method
781
        const char* t_str = obs_data_get_string(data, "rate_control");
782
@@ -1518,18 +1507,7 @@
783
            }
784
 
785
            obs_data_set_int(data, P_RATECONTROLMETHOD, (int32_t)m_VideoEncoder->GetRateControlMethod());
786
-       }
787
-
788
-       // Bitrate
789
-       uint64_t bitrateOvr = obs_data_get_int(data, "bitrate") * 1000;
790
-       if (bitrateOvr > 0) {
791
-           if (m_VideoEncoder->GetTargetBitrate() > bitrateOvr)
792
-               m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(bitrateOvr));
793
-           if (m_VideoEncoder->GetPeakBitrate() > bitrateOvr)
794
-               m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(bitrateOvr));
795
-
796
-           obs_data_set_int(data, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
797
-           obs_data_set_int(data, P_BITRATE_PEAK, m_VideoEncoder->GetPeakBitrate() / 1000);
798
+           obs_data_unset_user_value(data, "rate_control");
799
        }
800
 
801
        // IDR-Period (Keyframes)
802
@@ -1540,9 +1518,10 @@
803
 
804
            obs_data_set_double(data, P_INTERVAL_KEYFRAME, static_cast<double_t>(obs_data_get_int(data, "keyint_sec")));
805
            obs_data_set_int(data, P_PERIOD_IDR_H264, static_cast<uint32_t>(obs_data_get_int(data, "keyint_sec") *  (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen))));
806
+           obs_data_unset_user_value(data, "keyint_sec");
807
        }
808
    }
809
-   #pragma endregion OBS Enforce Streaming Service Settings
810
+#pragma endregion OBS Enforce Streaming Service Settings
811
 
812
    m_VideoEncoder->SetDebug(obs_data_get_bool(data, P_DEBUG));
813
 
814
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/enc-h265.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/enc-h265.cpp Changed
485
 
1
@@ -17,7 +17,6 @@
2
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
3
  */
4
 
5
-
6
 //////////////////////////////////////////////////////////////////////////
7
 // New UI Design
8
 //////////////////////////////////////////////////////////////////////////
9
@@ -111,13 +110,13 @@
10
 }
11
 
12
 void Plugin::Interface::H265Interface::get_defaults(obs_data_t *data) {
13
-   #pragma region OBS - Enforce Streaming Service Restrictions
14
+#pragma region OBS - Enforce Streaming Service Restrictions
15
    obs_data_set_default_int(data, "bitrate", 0);
16
    obs_data_set_default_int(data, "keyint_sec", 0);
17
    obs_data_set_default_string(data, "rate_control", "");
18
    obs_data_set_default_string(data, "profile", "");
19
    obs_data_set_default_string(data, "preset", "");
20
-   #pragma endregion OBS - Enforce Streaming Service Restrictions
21
+#pragma endregion OBS - Enforce Streaming Service Restrictions
22
 
23
    // Static
24
    //obs_data_set_default_int(data, P_USAGE, static_cast<int64_t>(Usage::Transcoding));
25
@@ -220,15 +219,15 @@
26
    obs_property_t* p;
27
 
28
    // Static Properties
29
-   #pragma region Quality Preset
30
+#pragma region Quality Preset
31
    p = obs_properties_add_list(props, P_QUALITYPRESET, P_TRANSLATE(P_QUALITYPRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
32
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUALITYPRESET)));
33
    obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_SPEED), static_cast<int32_t>(QualityPreset::Speed));
34
    obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_BALANCED), static_cast<int32_t>(QualityPreset::Balanced));
35
    obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_QUALITY), static_cast<int32_t>(QualityPreset::Quality));
36
-   #pragma endregion Quality Preset
37
+#pragma endregion Quality Preset
38
 
39
-   #pragma region Profile, Levels
40
+#pragma region Profile, Levels
41
    p = obs_properties_add_list(props, P_PROFILE, P_TRANSLATE(P_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
42
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PROFILE)));
43
    obs_property_list_add_int(p, "Main", static_cast<int32_t>(Profile::Main));
44
@@ -249,30 +248,30 @@
45
    obs_property_list_add_int(p, "6.0", static_cast<int32_t>(ProfileLevel::L60));
46
    obs_property_list_add_int(p, "6.1", static_cast<int32_t>(ProfileLevel::L61));
47
    obs_property_list_add_int(p, "6.2", static_cast<int32_t>(ProfileLevel::L62));
48
-   #pragma endregion Profile, Levels
49
+#pragma endregion Profile, Levels
50
 
51
-   #pragma region Tier
52
+#pragma region Tier
53
    p = obs_properties_add_list(props, P_TIER, P_TRANSLATE(P_TIER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
54
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_TIER)));
55
    obs_property_list_add_int(p, "Main", static_cast<int32_t>(H265::Tier::Main));
56
    obs_property_list_add_int(p, "High", static_cast<int32_t>(H265::Tier::High));
57
-   #pragma endregion Tier
58
+#pragma endregion Tier
59
 
60
-   #pragma region Coding Type
61
+#pragma region Coding Type
62
    p = obs_properties_add_list(props, P_CODINGTYPE, P_TRANSLATE(P_CODINGTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
63
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_CODINGTYPE)));
64
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), static_cast<int32_t>(CodingType::Automatic));
65
    obs_property_list_add_int(p, "CABAC", static_cast<int32_t>(CodingType::CABAC));
66
-   #pragma endregion Coding Type
67
+#pragma endregion Coding Type
68
 
69
-   #pragma region Maximum Reference Frames
70
+#pragma region Maximum Reference Frames
71
    p = obs_properties_add_int_slider(props, P_MAXIMUMREFERENCEFRAMES, P_TRANSLATE(P_MAXIMUMREFERENCEFRAMES),
72
        1, 16, 1);
73
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MAXIMUMREFERENCEFRAMES)));
74
-   #pragma endregion Maximum Reference Frames
75
+#pragma endregion Maximum Reference Frames
76
 
77
    // Rate Control
78
-   #pragma region Rate Control Method
79
+#pragma region Rate Control Method
80
    p = obs_properties_add_list(props, P_RATECONTROLMETHOD, P_TRANSLATE(P_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
81
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_RATECONTROLMETHOD)));
82
    obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_CQP), static_cast<int32_t>(RateControlMethod::ConstantQP));
83
@@ -280,16 +279,16 @@
84
    obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBR), static_cast<int32_t>(RateControlMethod::PeakConstrainedVariableBitrate));
85
    obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBRLAT), static_cast<int32_t>(RateControlMethod::LatencyConstrainedVariableBitrate));
86
    obs_property_set_modified_callback(p, properties_modified);
87
-   #pragma endregion Rate Control Method
88
+#pragma endregion Rate Control Method
89
 
90
-   #pragma region Pre-Pass
91
+#pragma region Pre-Pass
92
    p = obs_properties_add_list(props, P_PREPASSMODE, P_TRANSLATE(P_PREPASSMODE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
93
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PREPASSMODE)));
94
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), static_cast<int32_t>(PrePassMode::Disabled));
95
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), static_cast<int32_t>(PrePassMode::Enabled));
96
-   #pragma endregion Pre-Pass
97
+#pragma endregion Pre-Pass
98
 
99
-   #pragma region Parameters
100
+#pragma region Parameters
101
    /// Bitrate Constraints
102
    p = obs_properties_add_int(props, "bitrate", P_TRANSLATE(P_BITRATE_TARGET), 0, 1, 1);
103
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BITRATE_TARGET)));
104
@@ -311,16 +310,16 @@
105
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_PFRAME_MINIMUM)));
106
    p = obs_properties_add_int_slider(props, P_QP_PFRAME_MAXIMUM, P_TRANSLATE(P_QP_PFRAME_MAXIMUM), 0, 51, 1);
107
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_PFRAME_MAXIMUM)));
108
-   #pragma endregion Parameters
109
+#pragma endregion Parameters
110
 
111
-   #pragma region Filler Data
112
+#pragma region Filler Data
113
    p = obs_properties_add_list(props, P_FILLERDATA, P_TRANSLATE(P_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
114
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FILLERDATA)));
115
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
116
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
117
-   #pragma endregion Filler Data
118
+#pragma endregion Filler Data
119
 
120
-   #pragma region Frame Skipping
121
+#pragma region Frame Skipping
122
    p = obs_properties_add_list(props, P_FRAMESKIPPING, P_TRANSLATE(P_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
123
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING)));
124
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
125
@@ -331,49 +330,49 @@
126
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING_BEHAVIOUR)));
127
    obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_SKIPNTH), 0);
128
    obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_KEEPNTH), 1);
129
-   #pragma endregion Frame Skipping
130
+#pragma endregion Frame Skipping
131
 
132
-   #pragma region VBAQ
133
+#pragma region VBAQ
134
    p = obs_properties_add_list(props, P_VBAQ, P_TRANSLATE(P_VBAQ), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
135
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBAQ)));
136
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
137
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
138
-   #pragma endregion VBAQ
139
+#pragma endregion VBAQ
140
 
141
-   #pragma region Enforce Hypothetical Reference Decoder Restrictions
142
+#pragma region Enforce Hypothetical Reference Decoder Restrictions
143
    p = obs_properties_add_list(props, P_ENFORCEHRD, P_TRANSLATE(P_ENFORCEHRD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
144
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ENFORCEHRD)));
145
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
146
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
147
-   #pragma endregion Enforce Hyptothetical Reference Decoder Restrictions
148
+#pragma endregion Enforce Hyptothetical Reference Decoder Restrictions
149
 
150
    // VBV Buffer
151
-   #pragma region VBV Buffer Mode
152
+#pragma region VBV Buffer Mode
153
    p = obs_properties_add_list(props, P_VBVBUFFER, P_TRANSLATE(P_VBVBUFFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
154
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER)));
155
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), 0);
156
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_MANUAL), 1);
157
    obs_property_set_modified_callback(p, properties_modified);
158
-   #pragma endregion VBV Buffer Mode
159
+#pragma endregion VBV Buffer Mode
160
 
161
-   #pragma region VBV Buffer Strictness
162
+#pragma region VBV Buffer Strictness
163
    p = obs_properties_add_float_slider(props, P_VBVBUFFER_STRICTNESS, P_TRANSLATE(P_VBVBUFFER_STRICTNESS), 0.0, 100.0, 0.1);
164
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_STRICTNESS)));
165
-   #pragma endregion VBV Buffer Strictness
166
+#pragma endregion VBV Buffer Strictness
167
 
168
-   #pragma region VBV Buffer Size
169
+#pragma region VBV Buffer Size
170
    p = obs_properties_add_int_slider(props, P_VBVBUFFER_SIZE, P_TRANSLATE(P_VBVBUFFER_SIZE), 1, 1000000, 1);
171
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_SIZE)));
172
-   #pragma endregion VBV Buffer Size
173
+#pragma endregion VBV Buffer Size
174
 
175
-   #pragma region VBV Buffer Initial Fullness
176
+#pragma region VBV Buffer Initial Fullness
177
    p = obs_properties_add_float_slider(props, P_VBVBUFFER_INITIALFULLNESS, P_TRANSLATE(P_VBVBUFFER_INITIALFULLNESS), 0.0, 100.0, 100.0 / 64.0);
178
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_INITIALFULLNESS)));
179
-   #pragma endregion VBV Buffer Initial Fullness
180
+#pragma endregion VBV Buffer Initial Fullness
181
 
182
    // Picture Control
183
-   #pragma region Interval and Periods
184
-   /// Keyframe, IDR
185
+#pragma region Interval and Periods
186
+/// Keyframe, IDR
187
    p = obs_properties_add_float(props, P_INTERVAL_KEYFRAME, P_TRANSLATE(P_INTERVAL_KEYFRAME), 0, 100, 0.001);
188
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_KEYFRAME)));
189
    p = obs_properties_add_int(props, P_PERIOD_IDR_H265, P_TRANSLATE(P_PERIOD_IDR_H265), 0, 1000, 1);
190
@@ -388,17 +387,17 @@
191
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_PFRAME)));
192
    p = obs_properties_add_int(props, P_PERIOD_PFRAME, P_TRANSLATE(P_PERIOD_PFRAME), 0, 1000, 1);
193
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PERIOD_PFRAME)));
194
-   #pragma endregion Interval and Periods
195
+#pragma endregion Interval and Periods
196
 
197
-   #pragma region GOP Type
198
+#pragma region GOP Type
199
    p = obs_properties_add_list(props, P_GOP_TYPE, P_TRANSLATE(P_GOP_TYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
200
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_GOP_TYPE)));
201
    obs_property_list_add_int(p, P_TRANSLATE(P_GOP_TYPE_FIXED), static_cast<int64_t>(H265::GOPType::Fixed));
202
    obs_property_list_add_int(p, P_TRANSLATE(P_GOP_TYPE_VARIABLE), static_cast<int64_t>(H265::GOPType::Variable));
203
    obs_property_set_modified_callback(p, properties_modified);
204
-   #pragma endregion GOP Type
205
+#pragma endregion GOP Type
206
 
207
-   #pragma region GOP Size
208
+#pragma region GOP Size
209
    p = obs_properties_add_int(props, P_GOP_SIZE, P_TRANSLATE(P_GOP_SIZE), 1, 1000, 1);
210
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_GOP_SIZE)));
211
 
212
@@ -407,41 +406,41 @@
213
 
214
    p = obs_properties_add_int(props, P_GOP_SIZE_MAXIMUM, P_TRANSLATE(P_GOP_SIZE_MAXIMUM), 1, 1000, 1);
215
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_GOP_SIZE_MAXIMUM)));
216
-   #pragma endregion GOP Size
217
+#pragma endregion GOP Size
218
 
219
    /// GOP Alignment?
220
 
221
-   #pragma region Deblocking Filter
222
+#pragma region Deblocking Filter
223
    p = obs_properties_add_list(props, P_DEBLOCKINGFILTER, P_TRANSLATE(P_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
224
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_DEBLOCKINGFILTER)));
225
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
226
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
227
-   #pragma endregion Deblocking Filter
228
+#pragma endregion Deblocking Filter
229
 
230
-   #pragma region Motion Estimation
231
+#pragma region Motion Estimation
232
    p = obs_properties_add_list(props, P_MOTIONESTIMATION, P_TRANSLATE(P_MOTIONESTIMATION), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
233
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MOTIONESTIMATION)));
234
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
235
    obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_HALF), 1);
236
    obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_QUARTER), 2);
237
    obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_FULL), 3);
238
-   #pragma endregion Motion Estimation
239
+#pragma endregion Motion Estimation
240
 
241
    // System
242
-   #pragma region Video APIs
243
+#pragma region Video APIs
244
    p = obs_properties_add_list(props, P_VIDEO_API, P_TRANSLATE(P_VIDEO_API), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
245
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_API)));
246
    obs_property_set_modified_callback(p, properties_modified);
247
    fill_api_list(p);
248
-   #pragma endregion Video APIs
249
+#pragma endregion Video APIs
250
 
251
-   #pragma region Video Adapters
252
+#pragma region Video Adapters
253
    p = obs_properties_add_list(props, P_VIDEO_ADAPTER, P_TRANSLATE(P_VIDEO_ADAPTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
254
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_ADAPTER)));
255
    obs_property_set_modified_callback(p, properties_modified);
256
-   #pragma endregion Video Adapters
257
+#pragma endregion Video Adapters
258
 
259
-   #pragma region OpenCL
260
+#pragma region OpenCL
261
    p = obs_properties_add_list(props, P_OPENCL_TRANSFER, P_TRANSLATE(P_OPENCL_TRANSFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
262
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_TRANSFER)));
263
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
264
@@ -451,9 +450,9 @@
265
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_CONVERSION)));
266
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
267
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1);
268
-   #pragma endregion OpenCL
269
+#pragma endregion OpenCL
270
 
271
-   #pragma region Asynchronous Queue
272
+#pragma region Asynchronous Queue
273
    p = obs_properties_add_list(props, P_MULTITHREADING, P_TRANSLATE(P_MULTITHREADING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
274
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MULTITHREADING)));
275
    obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0);
276
@@ -461,9 +460,9 @@
277
 
278
    p = obs_properties_add_int_slider(props, P_QUEUESIZE, P_TRANSLATE(P_QUEUESIZE), 1, 32, 1);
279
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUEUESIZE)));
280
-   #pragma endregion Asynchronous Queue
281
+#pragma endregion Asynchronous Queue
282
 
283
-   #pragma region View Mode
284
+#pragma region View Mode
285
    p = obs_properties_add_list(props, P_VIEW, P_TRANSLATE(P_VIEW), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
286
    obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIEW)));
287
    obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_BASIC), static_cast<int32_t>(ViewMode::Basic));
288
@@ -471,7 +470,7 @@
289
    obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_EXPERT), static_cast<int32_t>(ViewMode::Expert));
290
    obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_MASTER), static_cast<int32_t>(ViewMode::Master));
291
    obs_property_set_modified_callback(p, properties_modified);
292
-   #pragma endregion View Mode
293
+#pragma endregion View Mode
294
 
295
    /// Debug
296
    p = obs_properties_add_bool(props, P_DEBUG, P_TRANSLATE(P_DEBUG));
297
@@ -507,7 +506,7 @@
298
    // Transfer settings from older Plugin versions to newer ones.
299
    obs_data_transfer_settings(data);
300
 
301
-   #pragma region Video API & Adapter
302
+#pragma region Video API & Adapter
303
    // Video API
304
    const char
305
        *videoAPI_last = obs_data_get_string(data, ("last" P_VIDEO_API)),
306
@@ -547,7 +546,7 @@
307
        try {
308
            auto enc = EncoderH265(api, adapter);
309
 
310
-           #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \
311
+       #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \
312
                auto tmp_p = obs_properties_get(props, prop); \
313
                auto tmp_l = enc.func(); \
314
                enm tmp_s = static_cast<enm>(obs_data_get_int(data, obs_property_name(tmp_p))); \
315
@@ -565,12 +564,12 @@
316
                        obs_data_unset_user_value(data, obs_property_name(tmp_p)); \
317
                } \
318
            }
319
-           #define TEMP_LIMIT_SLIDER(func, prop) { \
320
+       #define TEMP_LIMIT_SLIDER(func, prop) { \
321
                auto tmp_p = obs_properties_get(props, prop); \
322
                auto tmp_l = enc.func(); \
323
                obs_property_int_set_limits(tmp_p, (int)tmp_l.first, (int)tmp_l.second, 1); \
324
            }
325
-           #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \
326
+       #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \
327
                auto tmp_p = obs_properties_get(props, prop); \
328
                auto tmp_l = enc.func(); \
329
                obs_property_int_set_limits(tmp_p, (int)tmp_l.first / 1000, (int)tmp_l.second / 1000, 1); \
330
@@ -598,9 +597,9 @@
331
                e.what());
332
        }
333
    }
334
-   #pragma endregion Video API & Adapter
335
+#pragma endregion Video API & Adapter
336
 
337
-   #pragma region View Mode
338
+#pragma region View Mode
339
    ViewMode lastView = static_cast<ViewMode>(obs_data_get_int(data, ("last" P_VIEW))),
340
        curView = static_cast<ViewMode>(obs_data_get_int(data, P_VIEW));
341
    if (lastView != curView) {
342
@@ -672,7 +671,7 @@
343
            obs_data_unset_user_value(data, kv.first);
344
    }
345
 
346
-   #pragma region Rate Control
347
+#pragma region Rate Control
348
    bool vis_rcm_bitrate_target = false,
349
        vis_rcm_bitrate_peak = false,
350
        vis_rcm_qp = false,
351
@@ -746,9 +745,9 @@
352
    if (!(curView >= ViewMode::Expert) || vis_rcm_qp) {
353
        obs_data_unset_user_value(data, P_VBAQ);
354
    }
355
-   #pragma endregion Rate Control
356
+#pragma endregion Rate Control
357
 
358
-   #pragma region VBV Buffer
359
+#pragma region VBV Buffer
360
    uint32_t vbvBufferMode = static_cast<uint32_t>(obs_data_get_int(data, P_VBVBUFFER));
361
    bool vbvBufferVisible = (curView >= ViewMode::Advanced);
362
 
363
@@ -764,9 +763,9 @@
364
        obs_data_unset_user_value(data, P_VBVBUFFER_SIZE);
365
    if (!vbvBufferVisible || vbvBufferMode == 1)
366
        obs_data_unset_user_value(data, P_VBVBUFFER_STRICTNESS);
367
-   #pragma endregion VBV Buffer
368
+#pragma endregion VBV Buffer
369
 
370
-   #pragma region GOP
371
+#pragma region GOP
372
    bool gopvisible = (curView >= ViewMode::Expert);
373
    bool goptype_fixed = (static_cast<H265::GOPType>(obs_data_get_int(data, P_GOP_TYPE)) == H265::GOPType::Fixed);
374
    obs_property_set_visible(obs_properties_get(props, P_GOP_SIZE), goptype_fixed && gopvisible);
375
@@ -778,8 +777,8 @@
376
        obs_data_unset_user_value(data, P_GOP_SIZE_MINIMUM);
377
        obs_data_unset_user_value(data, P_GOP_SIZE_MAXIMUM);
378
    }
379
-   #pragma endregion GOP
380
-   #pragma endregion View Mode
381
+#pragma endregion GOP
382
+#pragma endregion View Mode
383
 
384
    // Permanently disable static properties while encoding.
385
    void* enc = obs_properties_get_param(props);
386
@@ -941,7 +940,7 @@
387
    }
388
 
389
    // Picture Control
390
-   uint32_t gopSize = static_cast<uint32_t>(floor(obsFPSden / (double_t)obsFPSnum));
391
+   uint32_t gopSize = static_cast<uint32_t>(clamp(floor(obsFPSnum / (double_t)obsFPSden), 1, 1000));
392
    H265::GOPType gopType = static_cast<H265::GOPType>(obs_data_get_int(data, P_GOP_TYPE));
393
    m_VideoEncoder->SetGOPType(gopType);
394
    if (static_cast<ViewMode>(obs_data_get_int(data, P_VIEW)) >= ViewMode::Expert) {
395
@@ -965,14 +964,14 @@
396
            double_t keyinterv = obs_data_get_double(data, P_INTERVAL_KEYFRAME);
397
            idrperiod = static_cast<uint32_t>(ceil((keyinterv * framerate) / gopSize));
398
        }
399
-       m_VideoEncoder->SetIDRPeriod(idrperiod);
400
+       m_VideoEncoder->SetIDRPeriod(clamp(idrperiod, 1, 1000));
401
    }
402
    m_VideoEncoder->SetDeblockingFilterEnabled(!!obs_data_get_int(data, P_DEBLOCKINGFILTER));
403
    m_VideoEncoder->SetMotionEstimationHalfPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 1));
404
    m_VideoEncoder->SetMotionEstimationQuarterPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 2));
405
 
406
    // OBS - Enforce Streaming Service Restrictions
407
-   #pragma region OBS - Enforce Streaming Service Restrictions
408
+#pragma region OBS - Enforce Streaming Service Restrictions
409
    {
410
        // Profile
411
        const char* p_str = obs_data_get_string(data, "profile");
412
@@ -980,12 +979,7 @@
413
            if (strcmp(p_str, "main")) {
414
                m_VideoEncoder->SetProfile(Profile::Main);
415
            }
416
-       } else {
417
-           switch (m_VideoEncoder->GetProfile()) {
418
-               case Profile::Main:
419
-                   obs_data_set_string(data, "profile", "main");
420
-                   break;
421
-           }
422
+           obs_data_unset_user_value(data, "profile");
423
        }
424
 
425
        // Preset
426
@@ -999,18 +993,7 @@
427
                m_VideoEncoder->SetQualityPreset(QualityPreset::Quality);
428
            }
429
            obs_data_set_int(data, P_QUALITYPRESET, (int32_t)m_VideoEncoder->GetQualityPreset());
430
-       } else {
431
-           switch (m_VideoEncoder->GetQualityPreset()) {
432
-               case QualityPreset::Speed:
433
-                   obs_data_set_string(data, "preset", "speed");
434
-                   break;
435
-               case QualityPreset::Balanced:
436
-                   obs_data_set_string(data, "preset", "balanced");
437
-                   break;
438
-               case QualityPreset::Quality:
439
-                   obs_data_set_string(data, "preset", "quality");
440
-                   break;
441
-           }
442
+           obs_data_unset_user_value(data, "preset");
443
        }
444
 
445
        // Rate Control Method
446
@@ -1028,36 +1011,10 @@
447
            }
448
 
449
            obs_data_set_int(data, P_RATECONTROLMETHOD, (int32_t)m_VideoEncoder->GetRateControlMethod());
450
-       } else {
451
-           switch (m_VideoEncoder->GetRateControlMethod()) {
452
-               case RateControlMethod::ConstantBitrate:
453
-                   obs_data_set_string(data, "rate_control", "CBR");
454
-                   break;
455
-               case RateControlMethod::PeakConstrainedVariableBitrate:
456
-                   obs_data_set_string(data, "rate_control", "VBR");
457
-                   break;
458
-               case RateControlMethod::LatencyConstrainedVariableBitrate:
459
-                   obs_data_set_string(data, "rate_control", "VBR_LAT");
460
-                   break;
461
-               case RateControlMethod::ConstantQP:
462
-                   obs_data_set_string(data, "rate_control", "CQP");
463
-                   break;
464
-           }
465
+           obs_data_unset_user_value(data, "rate_control");
466
        }
467
-
468
-       // IDR-Period (Keyframes)
469
-       //uint32_t fpsNum = m_VideoEncoder->GetFrameRate().first;
470
-       //uint32_t fpsDen = m_VideoEncoder->GetFrameRate().second;
471
-       //if (obs_data_get_int(data, "keyint_sec") != -1) {
472
-       //  m_VideoEncoder->SetIDRPeriod(static_cast<uint32_t>(obs_data_get_int(data, "keyint_sec") * (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen))));
473
-
474
-       //  obs_data_set_double(data, P_INTERVAL_KEYFRAME, static_cast<double_t>(obs_data_get_int(data, "keyint_sec")));
475
-       //  obs_data_set_int(data, P_PERIOD_IDR_H264, static_cast<uint32_t>(obs_data_get_int(data, "keyint_sec") *  (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen))));
476
-       //} else {
477
-       //  obs_data_set_int(data, "keyint_sec", static_cast<uint64_t>(m_VideoEncoder->GetIDRPeriod() / (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen))));
478
-       //}
479
    }
480
-   #pragma endregion OBS - Enforce Streaming Service Restrictions
481
+#pragma endregion OBS - Enforce Streaming Service Restrictions
482
 
483
    // Dynamic Properties (Can be changed during Encoding)
484
    this->update(data);
485
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/plugin.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/plugin.cpp Changed
225
 
1
@@ -22,13 +22,12 @@
2
 #include "api-base.h"
3
 #include "amf.h"
4
 #include "amf-capabilities.h"
5
-#include <sstream>
6
-
7
 #include "enc-h264.h"
8
 #include "enc-h265.h"
9
-
10
-#include "libobs/util/util.hpp"
11
-
12
+#include <sstream>
13
+#include <libobs/util/pipe.h>
14
+#include <libobs/util/platform.h>
15
+#include <libobs/util/util.hpp>
16
 #ifdef _WIN32
17
 #include <windows.h>
18
 #endif
19
@@ -36,13 +35,53 @@
20
 using namespace Plugin;
21
 using namespace Plugin::AMD;
22
 
23
-//////////////////////////////////////////////////////////////////////////
24
-// Code
25
-//////////////////////////////////////////////////////////////////////////
26
+#if defined(WIN32)
27
 BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID) {
28
    return TRUE;
29
 }
30
 
31
+static inline bool create_process(const char *cmd_line, HANDLE stdin_handle,
32
+   HANDLE stdout_handle, HANDLE *process) {
33
+   PROCESS_INFORMATION pi = { 0 };
34
+   wchar_t *cmd_line_w = NULL;
35
+   STARTUPINFOW si = { 0 };
36
+   bool success = false;
37
+
38
+   si.cb = sizeof(si);
39
+   si.dwFlags = STARTF_USESTDHANDLES;
40
+   si.hStdInput = stdin_handle;
41
+   si.hStdOutput = stdout_handle;
42
+
43
+   os_utf8_to_wcs_ptr(cmd_line, 0, &cmd_line_w);
44
+   if (cmd_line_w) {
45
+       success = !!CreateProcessW(NULL, cmd_line_w, NULL, NULL, true,
46
+           CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
47
+
48
+       if (success) {
49
+           *process = pi.hProcess;
50
+           CloseHandle(pi.hThread);
51
+       }
52
+
53
+       bfree(cmd_line_w);
54
+   }
55
+
56
+   return success;
57
+}
58
+
59
+static bool create_pipe(HANDLE *input, HANDLE *output) {
60
+   SECURITY_ATTRIBUTES sa = { 0 };
61
+
62
+   sa.nLength = sizeof(sa);
63
+   sa.bInheritHandle = true;
64
+
65
+   if (!CreatePipe(input, output, &sa, 0)) {
66
+       return false;
67
+   }
68
+
69
+   return true;
70
+}
71
+#endif
72
+
73
 OBS_DECLARE_MODULE();
74
 OBS_MODULE_AUTHOR("Michael Fabian Dirks");
75
 OBS_MODULE_USE_DEFAULT_LOCALE("enc-amf", "en-US");
76
@@ -165,71 +204,81 @@
77
 }
78
 #endif
79
 
80
-#ifndef NO_PIPED_DETECTION
81
-static inline bool create_process(const char *cmd_line, HANDLE *process)
82
-{
83
-   PROCESS_INFORMATION pi = {0};
84
-   STARTUPINFOW si = {0};
85
-   wchar_t *cmd_line_w = NULL;
86
-   bool success = false;
87
-
88
-   os_utf8_to_wcs_ptr(cmd_line, 0, &cmd_line_w);
89
-   if (cmd_line_w) {
90
-       si.cb = sizeof(si);
91
-       success = !!CreateProcessW(nullptr, cmd_line_w, nullptr,
92
-               nullptr, true, CREATE_NO_WINDOW, nullptr,
93
-               nullptr, &si, &pi);
94
-
95
-       if (success) {
96
-           *process = pi.hProcess;
97
-           CloseHandle(pi.hThread);
98
-       }
99
-
100
-       bfree(cmd_line_w);
101
-   }
102
-
103
-   return success;
104
-}
105
-#endif
106
-
107
-/**
108
-* Required: Called when the module is loaded.  Use this function to load all
109
-* the sources/encoders/outputs/services for your module, or anything else that
110
-* may need loading.
111
-*
112
-* @return           Return true to continue loading the module, otherwise
113
-*                   false to indicate failure and unload the module
114
-*/
115
 MODULE_EXPORT bool obs_module_load(void) {
116
    PLOG_DEBUG("<" __FUNCTION_NAME__ "> Loading...");
117
 
118
-#ifndef NO_PIPED_DETECTION
119
-   HANDLE process = nullptr;
120
-   DWORD detect_code = 0;
121
+#ifdef _WIN32
122
+   // Out-of-process AMF Test
123
+   {
124
+       unsigned long returnCode = 0xFFFFFFFF;
125
+       HANDLE hProcess, hIn, hOut;
126
+       BPtr<char> path = obs_module_file("enc-amf-test" BIT_STR ".exe");
127
 
128
-#ifdef _WIN64
129
-#define BIT_STR "64"
130
-#else
131
-#define BIT_STR "32"
132
-#endif
133
+       if (!create_pipe(&hIn, &hOut)) {
134
+           PLOG_ERROR("Failed to create pipes for AMF test.");
135
+           return false;
136
+       }
137
+       if (!SetHandleInformation(hIn, HANDLE_FLAG_INHERIT, false)
138
+           || !SetHandleInformation(hOut, HANDLE_FLAG_INHERIT, false)) {
139
+           CloseHandle(hIn);
140
+           CloseHandle(hOut);
141
+           PLOG_ERROR("Failed to modify pipes for AMF test.");
142
+           return false;
143
+       };
144
+       if (!create_process(path, hIn, hOut, &hProcess)) {
145
+           CloseHandle(hIn);
146
+           CloseHandle(hOut);
147
+           PLOG_ERROR("Failed to start AMF test subprocess.");
148
+           return false;
149
+       }
150
 
151
-   // Call amf-detect process to check to see if AMF is available before
152
-   // initializing AMF in the process.  This isolates the check and
153
-   // prevents potential startup crashes from affecting OBS startup.
154
-   BPtr<char> path = obs_module_file("detect-amf" BIT_STR ".exe");
155
-   if (create_process(path, &process)) {
156
-       if (WaitForSingleObject(process, 2000) == WAIT_OBJECT_0)
157
-           GetExitCodeProcess(process, &detect_code);
158
-       CloseHandle(process);
159
-   }
160
+       std::vector<char> buf(1024);
161
+       DWORD bufread = 0;
162
+       while (ReadFile(hOut, buf.data(), 1024, &bufread, NULL)) {
163
+           PLOG_ERROR("%s", buf.data());
164
+       }
165
 
166
-   if (detect_code != 3) {
167
-       if (detect_code == 2) {
168
-           PLOG_INFO("<" __FUNCTION_NAME__ "> AMF not supported (no AMD graphics)");
169
-       } else {
170
-           PLOG_INFO("<" __FUNCTION_NAME__ "> AMF detection failure prevented!  <3");
171
+       if (WaitForSingleObject(hProcess, 2000) == WAIT_OBJECT_0)
172
+           GetExitCodeProcess(hProcess, &returnCode);
173
+
174
+       CloseHandle(hProcess);
175
+       CloseHandle(hIn);
176
+       CloseHandle(hOut);
177
+
178
+       switch (returnCode) {
179
+           case STATUS_ACCESS_VIOLATION:
180
+           case STATUS_ARRAY_BOUNDS_EXCEEDED:
181
+           case STATUS_BREAKPOINT:
182
+           case STATUS_DATATYPE_MISALIGNMENT:
183
+           case STATUS_FLOAT_DENORMAL_OPERAND:
184
+           case STATUS_FLOAT_DIVIDE_BY_ZERO:
185
+           case STATUS_FLOAT_INEXACT_RESULT:
186
+           case STATUS_FLOAT_INVALID_OPERATION:
187
+           case STATUS_FLOAT_OVERFLOW:
188
+           case STATUS_FLOAT_STACK_CHECK:
189
+           case STATUS_FLOAT_UNDERFLOW:
190
+           case STATUS_GUARD_PAGE_VIOLATION:
191
+           case STATUS_ILLEGAL_INSTRUCTION:
192
+           case STATUS_IN_PAGE_ERROR:
193
+           case STATUS_INTEGER_DIVIDE_BY_ZERO:
194
+           case STATUS_INTEGER_OVERFLOW:
195
+           case STATUS_INVALID_DISPOSITION:
196
+           case STATUS_INVALID_HANDLE:
197
+           case STATUS_NONCONTINUABLE_EXCEPTION:
198
+           case STATUS_PRIVILEGED_INSTRUCTION:
199
+           case STATUS_SINGLE_STEP:
200
+           case STATUS_STACK_OVERFLOW:
201
+           case STATUS_UNWIND_CONSOLIDATE:
202
+           default:
203
+               PLOG_ERROR("A critical error occured during AMF Testing.");
204
+               return false;
205
+           case 2:
206
+           case 1:
207
+               PLOG_ERROR("AMF Test failed due to one or more errors.");
208
+               return false;
209
+           case 0:
210
+               break;
211
        }
212
-       return false;
213
    }
214
 #endif
215
 
216
@@ -262,7 +311,7 @@
217
    Plugin::Interface::H264Interface::encoder_register();
218
    Plugin::Interface::H265Interface::encoder_register();
219
 
220
-#if defined(_DEBUG)
221
+#ifdef _DEBUG
222
    {
223
        PLOG_INFO("Dumping Parameter Information...");
224
        const wchar_t* encoders[] = {
225
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/utility.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/utility.cpp Changed
30
 
1
@@ -44,7 +44,6 @@
2
 
3
 static std::map<std::string, std::string> translatedMap;
4
 const char* Utility::obs_module_text_multi(const char *key, uint8_t depth) {
5
-#ifndef PIPED_PROCESS
6
    // Check if it already was translated.
7
    if (!translatedMap.count(std::string(key))) { // If not, translate it now.
8
        const char* out = obs_module_text(key);
9
@@ -90,11 +89,6 @@
10
 
11
    auto value = translatedMap.find(std::string(key));
12
    return value->second.c_str();
13
-#else
14
-   (void)key;
15
-   (void)depth;
16
-   return nullptr;
17
-#endif
18
 }
19
 
20
 
21
@@ -338,7 +332,7 @@
22
    throw std::runtime_error("Invalid Parameter");
23
 }
24
 Plugin::AMD::Profile Utility::ProfileFromAMFH264(AMF_VIDEO_ENCODER_PROFILE_ENUM v) {
25
-   #pragma warning( disable: 4063 ) // Developer Note: I know better, Compiler.
26
+#pragma warning( disable: 4063 ) // Developer Note: I know better, Compiler.
27
    switch (v) {
28
        case (AMF_VIDEO_ENCODER_PROFILE_ENUM)256:
29
            return Profile::ConstrainedBaseline;
30
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test Added
2
 
1
+(directory)
2
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/CMakeLists.txt Added
111
 
1
@@ -0,0 +1,109 @@
2
+# A Plugin that integrates the AMD AMF encoder into OBS Studio
3
+# Copyright (C) 2016 - 2017 Michael Fabian Dirks
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, write to the Free Software
17
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
18
+
19
+cmake_minimum_required(VERSION 3.1.0)
20
+PROJECT(enc-amf-test)
21
+
22
+# All Warnings, Extra Warnings, Pedantic
23
+if(MSVC)
24
+   # Hide Microsofts insecurities, as they are usually not cross-platform compatible changes.
25
+   add_definitions(-D_CRT_SECURE_NO_WARNINGS) 
26
+   
27
+   # Force to always compile with W4
28
+   if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
29
+       string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
30
+   else()
31
+       set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
32
+   endif()
33
+   
34
+   # Use Static Linking instead of Dynamic Linking
35
+   string(REPLACE "/MT" "/MD"
36
+       "CMAKE_C_FLAGS" 
37
+       "${CMAKE_C_FLAGS}")
38
+   string(REPLACE "/MT" "/MD" 
39
+       "CMAKE_CXX_FLAGS" 
40
+       "${CMAKE_CXX_FLAGS}")
41
+   string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" UPPER_CONFIG_TYPES)
42
+   foreach(CONFIG_TYPE ${UPPER_CONFIG_TYPES})
43
+       string(REPLACE "/MT" "/MD"
44
+           "CMAKE_C_FLAGS_${CONFIG_TYPE}" 
45
+           "${CMAKE_C_FLAGS_${CONFIG_TYPE}}")
46
+
47
+       string(REPLACE "/MT" "/MD" 
48
+           "CMAKE_CXX_FLAGS_${CONFIG_TYPE}" 
49
+           "${CMAKE_CXX_FLAGS_${CONFIG_TYPE}}")
50
+   endforeach()
51
+   
52
+   # Enable Options
53
+   # /Gy (Function-Level Linking)
54
+   # /OPT:REF
55
+   # /OPT:NOICF    
56
+   set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gy")
57
+   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Gy")
58
+   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF /OPT:NOICF")
59
+elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
60
+  # Update if necessary
61
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic")
62
+endif()
63
+
64
+# Detect Architecture (Bitness)
65
+math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
66
+
67
+# Project
68
+add_executable(enc-amf-test
69
+   "${PROJECT_SOURCE_DIR}/main.cpp"
70
+   "${PROJECT_SOURCE_DIR}/libobs/obs-module.h"
71
+   "${PROJECT_SOURCE_DIR}/libobs/obs-module.c"
72
+   "${enc-amf_SOURCE_DIR}/Source/amf.cpp"
73
+   "${enc-amf_SOURCE_DIR}/Source/amf-capabilities.cpp"
74
+   "${enc-amf_SOURCE_DIR}/Source/amf-encoder.cpp"
75
+   "${enc-amf_SOURCE_DIR}/Source/amf-encoder-h264.cpp"
76
+   "${enc-amf_SOURCE_DIR}/Source/amf-encoder-h265.cpp"
77
+   "${enc-amf_SOURCE_DIR}/Source/api-base.cpp"
78
+   "${enc-amf_SOURCE_DIR}/Source/api-d3d9.cpp"
79
+   "${enc-amf_SOURCE_DIR}/Source/api-d3d11.cpp"
80
+   "${enc-amf_SOURCE_DIR}/Source/utility.cpp"
81
+   "${enc-amf_SOURCE_DIR}/Include/amf.h"
82
+   "${enc-amf_SOURCE_DIR}/Include/amf-capabilities.h"
83
+   "${enc-amf_SOURCE_DIR}/Include/amf-encoder.h"
84
+   "${enc-amf_SOURCE_DIR}/Include/amf-encoder-h264.h"
85
+   "${enc-amf_SOURCE_DIR}/Include/amf-encoder-h265.h"
86
+   "${enc-amf_SOURCE_DIR}/Include/api-base.h"
87
+   "${enc-amf_SOURCE_DIR}/Include/api-d3d9.h"
88
+   "${enc-amf_SOURCE_DIR}/Include/api-d3d11.h"
89
+   "${enc-amf_SOURCE_DIR}/Include/utility.h"
90
+)
91
+include_directories(enc-amf-test BEFORE ${PROJECT_SOURCE_DIR}) 
92
+target_link_libraries(enc-amf-test ${enc-amf_LIBRARIES})
93
+set_target_properties(enc-amf-test
94
+   PROPERTIES
95
+       OUTPUT_NAME "enc-amf-test${BITS}")
96
+
97
+if(TARGET libobs)
98
+   install_obs_datatarget(enc-amf-test "obs-plugins/enc-amf")
99
+else()
100
+   add_custom_command(TARGET enc-amf-test POST_BUILD
101
+       COMMAND ${CMAKE_COMMAND} -E copy
102
+       "$<TARGET_FILE:enc-amf-test>"
103
+       "${enc-amf_SOURCE_DIR}/#Build/data/obs-plugins/enc-amf/$<TARGET_FILE_NAME:enc-amf-test>"
104
+   )
105
+   add_custom_command(TARGET enc-amf-test POST_BUILD
106
+       COMMAND ${CMAKE_COMMAND} -E copy
107
+       "$<TARGET_PDB_FILE:enc-amf-test>"
108
+       "${enc-amf_SOURCE_DIR}/#Build/data/obs-plugins/enc-amf/$<TARGET_PDB_FILE_NAME:enc-amf-test>"
109
+   )
110
+endif()
111
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/libobs Added
2
 
1
+(directory)
2
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/libobs/obs-module.c Added
35
 
1
@@ -0,0 +1,33 @@
2
+/*
3
+ * A Plugin that integrates the AMD AMF encoder into OBS Studio
4
+ * Copyright (C) 2016 - 2017 Michael Fabian Dirks
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19
+ */
20
+
21
+const char *obs_module_text(const char *name) {
22
+   return name;
23
+}
24
+
25
+void blog(int level, char* formatting, ...) {
26
+   level;
27
+   formatting;
28
+   return;
29
+}
30
+
31
+void os_set_thread_name(const char *name) {
32
+   name;
33
+   return;
34
+}
35
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/libobs/obs-module.h Added
24
 
1
@@ -0,0 +1,22 @@
2
+/*
3
+ * A Plugin that integrates the AMD AMF encoder into OBS Studio
4
+ * Copyright (C) 2016 - 2017 Michael Fabian Dirks
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19
+ */
20
+
21
+const char *obs_module_text(const char *);
22
+void blog(int, char*, ...);
23
+void os_set_thread_name(const char *name);
24
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/main.cpp Added
57
 
1
@@ -0,0 +1,55 @@
2
+/*
3
+ * A Plugin that integrates the AMD AMF encoder into OBS Studio
4
+ * Copyright (C) 2016 - 2017 Michael Fabian Dirks
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License
17
+ * along with this program; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
19
+ */
20
+
21
+#include "amf.h"
22
+#include "amf-capabilities.h"
23
+#include "api-base.h"
24
+#include <iostream>
25
+
26
+#ifdef _WIN32
27
+#include "windows.h"
28
+#endif
29
+
30
+using namespace Plugin;
31
+using namespace Plugin::AMD;
32
+
33
+int main(int argc, char* argv[]) {
34
+   argc;
35
+   argv;
36
+
37
+#ifdef _WIN32
38
+   SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS);
39
+#endif
40
+
41
+   try {
42
+       AMF::Initialize();
43
+       API::InitializeAPIs();
44
+       CapabilityManager::Initialize();
45
+       CapabilityManager::Finalize();
46
+       API::FinalizeAPIs();
47
+       AMF::Finalize();
48
+       return 0;
49
+   } catch (std::exception ex) {
50
+       std::cout << ex.what() << std::endl;
51
+       return 1;
52
+   } catch (...) {
53
+       std::cout << "Unknown Error" << std::endl;
54
+       return 2;
55
+   }
56
+}
57
obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/fil-PH.ini Added
38
 
1
@@ -0,0 +1,36 @@
2
+ImageInput="Larawan"
3
+File="Dokumentong Larawan"
4
+UnloadWhenNotShowing="Mag-ibis ng imahe kapag hindi nagpapakita"
5
+
6
+SlideShow="Ipakita ang Slide ng Larawan"
7
+SlideShow.TransitionSpeed="Bilis ng Paglipat (milliseconds)"
8
+SlideShow.SlideTime="Oras sa Pagitan ng Mga Slide (millisecond)"
9
+SlideShow.Files="Dokumentong Larawan"
10
+SlideShow.CustomSize="Bounding Size / Aspect Ratio"
11
+SlideShow.CustomSize.Auto="Awtomatikong"
12
+SlideShow.Randomize="Simulan ang Pag-playback"
13
+SlideShow.Loop="Silo"
14
+SlideShow.Transition="Paglipat"
15
+SlideShow.Transition.Cut="Kunin"
16
+SlideShow.Transition.Fade="Fade"
17
+SlideShow.Transition.Swipe="Mag-swipe"
18
+SlideShow.Transition.Slide="Slide"
19
+SlideShow.PlaybackBehavior="Pag-uugali ng Pagtingin"
20
+SlideShow.PlaybackBehavior.StopRestart="Itigil kapag hindi nakikita, i-restart kapag nakikita"
21
+SlideShow.PlaybackBehavior.PauseUnpause="I-pause kapag hindi nakikita, i-unpause kapag nakikita"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="Laging i-play kahit na hindi nakikita"
23
+SlideShow.SlideMode="Slide Mode"
24
+SlideShow.SlideMode.Auto="Awtomatikong"
25
+SlideShow.SlideMode.Manual="Mano-manong (Gamitin ang mga hotkey upang kontrolin ang slideshow)"
26
+SlideShow.PlayPause="I-play / I-pause"
27
+SlideShow.Restart="I-restart"
28
+SlideShow.Stop="Itigil"
29
+SlideShow.NextSlide="Susunod na Slide"
30
+SlideShow.PreviousSlide="Nakaraang Slide"
31
+SlideShow.HideWhenDone="Itago kapag tapos na ang slideshow"
32
+
33
+ColorSource="Pinagmulan ng Kulay"
34
+ColorSource.Color="Kulay"
35
+ColorSource.Width="Lapad"
36
+ColorSource.Height="Taas"
37
+
38
obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/ka-GE.ini Added
38
 
1
@@ -0,0 +1,36 @@
2
+ImageInput="სურათი"
3
+File="სურათის ფაილი"
4
+UnloadWhenNotShowing="სურათის ამოღება, თუ არ გამოჩნდება"
5
+
6
+SlideShow="სლაიდშოუ"
7
+SlideShow.TransitionSpeed="გადასვლის სიჩქარე (მილიწამებში)"
8
+SlideShow.SlideTime="დაყოვნება სლაიდებს შორის (მილიწამებში)"
9
+SlideShow.Files="სურათების ფაილები"
10
+SlideShow.CustomSize="ჩარჩოს ზომა/გვერდების თანაფარდობა"
11
+SlideShow.CustomSize.Auto="ავტომატური"
12
+SlideShow.Randomize="შემთხვევითი შერჩევა"
13
+SlideShow.Loop="გამეორება"
14
+SlideShow.Transition="გადასვლები"
15
+SlideShow.Transition.Cut="მოჭრა"
16
+SlideShow.Transition.Fade="მილევა"
17
+SlideShow.Transition.Swipe="შენაცვლება"
18
+SlideShow.Transition.Slide="გადაწევა"
19
+SlideShow.PlaybackBehavior="ხილვადობის მიხედვით მოქმედება"
20
+SlideShow.PlaybackBehavior.StopRestart="შეწყვეტა თუ უხილავია, თავიდან გაშვება თუ ხილულია"
21
+SlideShow.PlaybackBehavior.PauseUnpause="შეჩერება თუ უხილავია, გაშვება თუ ხილულია"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="ყოველთვის გაშვება, ხილვადობის მიუხედავად"
23
+SlideShow.SlideMode="სლაიდების მართვა"
24
+SlideShow.SlideMode.Auto="ავტომატური"
25
+SlideShow.SlideMode.Manual="ხელით (ღილაკების გამოყენება სლაიდშოუს სამართავად)"
26
+SlideShow.PlayPause="გაშვება/შეჩერება"
27
+SlideShow.Restart="თავიდან გაშვება"
28
+SlideShow.Stop="შეწყვეტა"
29
+SlideShow.NextSlide="მომდევნო სლაიდი"
30
+SlideShow.PreviousSlide="წინა სლაიდი"
31
+SlideShow.HideWhenDone="დამალვა სლაიდშოუს დასრულებისას"
32
+
33
+ColorSource="ფონის ფერი"
34
+ColorSource.Color="ფერი"
35
+ColorSource.Width="სიგანე"
36
+ColorSource.Height="სიმაღლე"
37
+
38
obs-studio-21.0.3.tar.xz/plugins/image-source/data/locale/ro-RO.ini -> obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/ro-RO.ini Changed
17
 
1
@@ -5,9 +5,15 @@
2
 SlideShow="Slide Show de imagini"
3
 SlideShow.TransitionSpeed="Viteza de tranziție (milisecunde)"
4
 SlideShow.SlideTime="Timpul dintre diapozitive (milisecunde)"
5
+SlideShow.Files="Fișiere Imagine"
6
+SlideShow.CustomSize.Auto="Automat"
7
+SlideShow.Loop="Buclă"
8
 SlideShow.Transition="Tranziție"
9
 SlideShow.Transition.Cut="Decupare"
10
 SlideShow.Transition.Slide="Diapozitiv"
11
+SlideShow.SlideMode.Auto="Automat"
12
+SlideShow.NextSlide="Următorul diapozitiv"
13
+SlideShow.PreviousSlide="Diapozitiv anterior"
14
 
15
 ColorSource.Color="Culoare"
16
 ColorSource.Width="Lățime"
17
obs-studio-21.0.3.tar.xz/plugins/image-source/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/ru-RU.ini Changed
10
 
1
@@ -11,7 +11,7 @@
2
 SlideShow.Randomize="Случайное воспроизведение"
3
 SlideShow.Loop="Повтор"
4
 SlideShow.Transition="Переход"
5
-SlideShow.Transition.Cut="Обрезать"
6
+SlideShow.Transition.Cut="Обрезка"
7
 SlideShow.Transition.Fade="Затухание"
8
 SlideShow.Transition.Swipe="Перемещение"
9
 SlideShow.Transition.Slide="Сдвиг"
10
obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/tl-PH.ini Added
38
 
1
@@ -0,0 +1,36 @@
2
+ImageInput="Imahe"
3
+File="Imahe ng File"
4
+UnloadWhenNotShowing="Mag-ibis ng imahe kapag hindi nagpapakita"
5
+
6
+SlideShow="Ipakita ang pag-slide ng Larawan"
7
+SlideShow.TransitionSpeed="Bilis ng Paglipat (milsegundo)"
8
+SlideShow.SlideTime="Oras sa Pagitan ng mga Slide (milsegundo)"
9
+SlideShow.Files="Mga Imahe ng File"
10
+SlideShow.CustomSize="Karatig na Sukat/Ayos ng Ratio"
11
+SlideShow.CustomSize.Auto="Awtomatiko"
12
+SlideShow.Randomize="Pagkumpara sa Pag-play pabalik"
13
+SlideShow.Loop="Silo"
14
+SlideShow.Transition="Paglipat"
15
+SlideShow.Transition.Cut="Kunin"
16
+SlideShow.Transition.Fade="Kumupas"
17
+SlideShow.Transition.Swipe="Mag-swipe"
18
+SlideShow.Transition.Slide="Mag-slide"
19
+SlideShow.PlaybackBehavior="Paggiging kita ng Pag-uugali"
20
+SlideShow.PlaybackBehavior.StopRestart="Itigil kapag hindi ito makita, i-restart kapag nakikita na"
21
+SlideShow.PlaybackBehavior.PauseUnpause="I-pause kapag hindi makita, i-unpause kapag kita na"
22
+SlideShow.PlaybackBehavior.AlwaysPlay="Laging paandarin kahit hindi nakikita"
23
+SlideShow.SlideMode="Naka-slide Mode"
24
+SlideShow.SlideMode.Auto="Awtomatiko"
25
+SlideShow.SlideMode.Manual="Mano-mano (gamitin ang mga hotkey para makontrol ang pagpapakita ng slide)"
26
+SlideShow.PlayPause="Paganahin/I-pause"
27
+SlideShow.Restart="I-restart"
28
+SlideShow.Stop="Itigil"
29
+SlideShow.NextSlide="Susunod na Slide"
30
+SlideShow.PreviousSlide="Ang nakaraang Slide"
31
+SlideShow.HideWhenDone="Itago kapag ang pagpapakita ng slide ay tapos na"
32
+
33
+ColorSource="Pinagmulan ng kulay"
34
+ColorSource.Color="Kulay"
35
+ColorSource.Width="Lapad"
36
+ColorSource.Height="Taas"
37
+
38
obs-studio-21.0.3.tar.xz/plugins/image-source/obs-slideshow.c -> obs-studio-21.1.2.tar.xz/plugins/image-source/obs-slideshow.c Changed
22
 
1
@@ -657,6 +657,20 @@
2
    if (ss->pause_on_deactivate || ss->manual || ss->stop || ss->paused)
3
        return;
4
 
5
+   /* ----------------------------------------------------- */
6
+   /* fade to transparency when the file list becomes empty */
7
+   if (!ss->files.num) {
8
+       obs_source_t* active_transition_source =
9
+           obs_transition_get_active_source(ss->transition);
10
+
11
+       if (active_transition_source) {
12
+           obs_source_release(active_transition_source);
13
+           do_transition(ss, true);
14
+       }
15
+   }
16
+
17
+   /* ----------------------------------------------------- */
18
+   /* do transition when slide time reached                 */
19
    ss->elapsed += seconds;
20
 
21
    if (ss->elapsed > ss->slide_time) {
22
obs-studio-21.1.2.tar.xz/plugins/linux-alsa/data/locale/fil-PH.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+AlsaInput="Audio Capture Device (ALSA)"
3
+Device="Device"
4
+
5
obs-studio-21.1.2.tar.xz/plugins/linux-alsa/data/locale/ka-GE.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+AlsaInput="ხმის ჩამწერი მოწყობილობა (ALSA)"
3
+Device="მოწყობილობა"
4
+
5
obs-studio-21.1.2.tar.xz/plugins/linux-alsa/data/locale/tl-PH.ini Added
5
 
1
@@ -0,0 +1,3 @@
2
+AlsaInput="Aparatong Pangkuha ng Audio (APA)"
3
+Device="Device"
4
+
5
obs-studio-21.1.2.tar.xz/plugins/linux-capture/data/locale/fil-PH.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+X11SharedMemoryScreenInput="Screen Capture (XSHM)"
3
+Screen="Screen"
4
+CaptureCursor="Kunin ang Cursor"
5
+AdvancedSettings="Mga Advanced na Setting"
6
+XServer="X Server"
7
+XCCapture="Pagkuha ng Window (Xcomposite)"
8
+Window="Window"
9
+CropTop="I-crop ang Tuktok (mga pixel)"
10
+CropLeft="I-crop ang Kaliwa (mga pixel)"
11
+CropRight="I-crop ang Kanan (mga pixel)"
12
+CropBottom="I-crop ang Ika (pixels)"
13
+SwapRedBlue="Magpalit ng pula at asul"
14
+LockX="Lock X server kapag nakukuha"
15
+IncludeXBorder="Isama ang X Border"
16
+ExcludeAlpha="Gumamit ng alpha-less texture na format (Mesa workaround)"
17
+
18
obs-studio-21.1.2.tar.xz/plugins/linux-capture/data/locale/ka-GE.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+X11SharedMemoryScreenInput="ეკრანის გადაღება (XSHM)"
3
+Screen="ეკრანი"
4
+CaptureCursor="მაჩვენებლის ასახვა"
5
+AdvancedSettings="დამატებითი პარამეტრები"
6
+XServer="X სერვერი"
7
+XCCapture="ფანჯრის გადაღება (Xcomposite)"
8
+Window="ფანჯარა"
9
+CropTop="ზემოდან მოჭრა (პიქსელი)"
10
+CropLeft="მარცხნიდან მოჭრა (პიქსელი)"
11
+CropRight="მარჯვნიდან მოჭრა (პიქსელი)"
12
+CropBottom="ქვემოდან მოჭრა (პიქსელი)"
13
+SwapRedBlue="წითლისა ლურჯის შენაცვლება"
14
+LockX="X სერვერის შეზღუდვა გადაღებისას"
15
+IncludeXBorder="X ჩარჩოიანად"
16
+ExcludeAlpha="გაუმჭვირვალე ზედაპირის გამოყენება (Mesa-ს ხარვეზის მოსაგვარებლად)"
17
+
18
obs-studio-21.1.2.tar.xz/plugins/linux-capture/data/locale/tl-PH.ini Added
18
 
1
@@ -0,0 +1,16 @@
2
+X11SharedMemoryScreenInput="Pamagat ng Screen (XSHM)"
3
+Screen="Ang Screen"
4
+CaptureCursor="Pamagat ng kursor"
5
+AdvancedSettings="Ang mga nauunang setting"
6
+XServer="X tagapagsilbi"
7
+XCCapture="Pamagat ng Bintana (Xpinaghalo)"
8
+Window="Bintana"
9
+CropTop="I-crop ang Top (mga pixel)"
10
+CropLeft="I-crop ang kaliwa (mga pixel)"
11
+CropRight="I-crop ang kanan (mga pixel)"
12
+CropBottom="I-crop ang pinakailalim (mga pixel)"
13
+SwapRedBlue="Pagpalitin ang pula at ang asul"
14
+LockX="Kandado sa X server kapag kukuha"
15
+IncludeXBorder="Kasama sa X na hangganan"
16
+ExcludeAlpha="Gumamit ng alpha-less texture na format (Mesa workaround)"
17
+
18
obs-studio-21.0.3.tar.xz/plugins/linux-capture/xcompcap-main.cpp -> obs-studio-21.1.2.tar.xz/plugins/linux-capture/xcompcap-main.cpp Changed
9
 
1
@@ -400,6 +400,7 @@
2
        GLX_BIND_TO_TEXTURE_RGBA_EXT, GL_TRUE,
3
        GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
4
        GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT,
5
+       GLX_ALPHA_SIZE, 8,
6
        GLX_DOUBLEBUFFER, GL_FALSE,
7
        None
8
    };
9
obs-studio-21.1.2.tar.xz/plugins/linux-jack/data/locale/fil-PH.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+StartJACKServer="Simulan ang JACK Server"
3
+Channels="Bilang ng Mga Channel"
4
+JACKInput="JACK Input Client"
5
+
6
obs-studio-21.1.2.tar.xz/plugins/linux-jack/data/locale/ka-GE.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+StartJACKServer="JACK სერვერის გაშვება"
3
+Channels="არხების რაოდენობა"
4
+JACKInput="JACK შეტანის კლიენტი"
5
+
6
obs-studio-21.1.2.tar.xz/plugins/linux-pulseaudio/data/locale/fil-PH.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="Audio Input Capture (PulseAudio)"
3
+PulseOutput="Audio Output Capture (PulseAudio)"
4
+Device="Device"
5
+
6
obs-studio-21.1.2.tar.xz/plugins/linux-pulseaudio/data/locale/ka-GE.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+PulseInput="შემავალი ხმოვანი სიგნალის ჩაწერა (PulseAudio)"
3
+PulseOutput="გამომავალი ხმოვანი სიგნალის ჩაწერა (PulseAudio)"
4
+Device="მოწყობილობა"
5
+
6
obs-studio-21.1.2.tar.xz/plugins/linux-v4l2/data/locale/fil-PH.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+V4L2Input="Video Capture Device (V4L2)"
3
+Device="Device"
4
+Input="Input"
5
+VideoFormat="Format ng Video"
6
+VideoStandard="Standard Video"
7
+DVTiming="DV Timing"
8
+Resolution="Resolution"
9
+FrameRate="Frame rate"
10
+LeaveUnchanged="Mag-iwan ng hindi nabago"
11
+UseBuffering="Gamitin ang Buffering"
12
+
13
obs-studio-21.1.2.tar.xz/plugins/linux-v4l2/data/locale/ka-GE.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+V4L2Input="ვიდეოს ჩამწერი მოწყობილობა (V4L2)"
3
+Device="მოწყობილობა"
4
+Input="შემავალი"
5
+VideoFormat="ვიდეოს ფორმატი"
6
+VideoStandard="ვიდეოს სტანდარტი"
7
+DVTiming="ციფრული ვიდეოს სინქრონიზაცია"
8
+Resolution="გარჩევადობა"
9
+FrameRate="კადრის სიხშირე"
10
+LeaveUnchanged="უცვლელად დატოვება"
11
+UseBuffering="ბუფერიზაციის გამოყენება"
12
+
13
obs-studio-21.1.2.tar.xz/plugins/linux-v4l2/data/locale/tl-PH.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+V4L2Input="Pagkuha ng Video sa Aparato (V4L2)"
3
+Device="Aparato"
4
+Input="Pampasok"
5
+VideoFormat="Ang Format ng Video"
6
+VideoStandard="Ang Pamantayan ng Video"
7
+DVTiming="Ang Tiyempong DV"
8
+Resolution="Resulusyon"
9
+FrameRate="Pag-Rate ng Frame"
10
+LeaveUnchanged="Iniwa ng hindi nabago"
11
+UseBuffering="Gamitin ang Buffering"
12
+
13
obs-studio-21.1.2.tar.xz/plugins/mac-avcapture/data/locale/fil-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+AVCapture="Video Capture aparato"
3
+Device="Aparato"
4
+UsePreset="Gamitin ang Preset"
5
+Preset="Ang Preset"
6
+Buffering="Gamitin ang Buffering"
7
+FrameRate="Rate ng frame"
8
+InputFormat="Format ng input"
9
+ColorSpace="Kulay ng puwang"
10
+VideoRange="Saklaw ng video"
11
+VideoRange.Partial="Bahagyang"
12
+VideoRange.Full="Buong"
13
+Auto="I-Auto"
14
+Unknown="Hindi kilalang ($1)"
15
+
16
obs-studio-21.1.2.tar.xz/plugins/mac-avcapture/data/locale/tl-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+AVCapture="Pagkuha ng Aparato ng Video"
3
+Device="Aparato"
4
+UsePreset="Gamitin ang Preset"
5
+Preset="Ang Preset"
6
+Buffering="Gamitin ang Buffering"
7
+FrameRate="Pag-rate ng Frame"
8
+InputFormat="Pampasok na format"
9
+ColorSpace="Pagitan na Kulay"
10
+VideoRange="Saklaw na Video"
11
+VideoRange.Partial="Ang Partial"
12
+VideoRange.Full="Puno"
13
+Auto="Awto"
14
+Unknown="Hindi kilalang ($1)"
15
+
16
obs-studio-21.1.2.tar.xz/plugins/mac-capture/data/locale/fil-PH.ini Added
23
 
1
@@ -0,0 +1,21 @@
2
+CoreAudio.InputCapture="Awdyo Input KaptyuraPag-capture ng Audio Input"
3
+CoreAudio.OutputCapture="Awdyo Awtput Kaptyura"
4
+CoreAudio.Device="Aparato"
5
+CoreAudio.Device.Default="Pumalya"
6
+DisplayCapture="Ipakita paghuli"
7
+DisplayCapture.Display="Ihayag"
8
+DisplayCapture.ShowCursor="Ipakita ang Cursor"
9
+WindowCapture="Pagkuha ng Window"
10
+WindowCapture.ShowShadow="Ipakita ang anino ng Window"
11
+WindowUtils.Window="Window"
12
+WindowUtils.ShowEmptyNames="Ipakita ang Windows gamit ang mga walang laman na pangalan"
13
+CropMode="I-crop"
14
+CropMode.None="Wala"
15
+CropMode.Manual="Mano-manong"
16
+CropMode.ToWindow="Sa Window"
17
+CropMode.ToWindowAndManual="Upang Window at Manu-manong"
18
+Crop.origin.x="I-crop ang kaliwa"
19
+Crop.origin.y="I-crop ang tuktok"
20
+Crop.size.width="I-crop ang kanan"
21
+Crop.size.height="I-crop ang ibaba"
22
+
23
obs-studio-21.1.2.tar.xz/plugins/mac-capture/data/locale/tl-PH.ini Added
23
 
1
@@ -0,0 +1,21 @@
2
+CoreAudio.InputCapture="Pampasok na Pagkuha ng Audio"
3
+CoreAudio.OutputCapture="Panglabas na pagkuha ng Audio"
4
+CoreAudio.Device="Aparato"
5
+CoreAudio.Device.Default="I-default"
6
+DisplayCapture="Ipakita ang nakuha"
7
+DisplayCapture.Display="Ipakita"
8
+DisplayCapture.ShowCursor="Ipakita ang Kursor"
9
+WindowCapture="Nakuhang bintana"
10
+WindowCapture.ShowShadow="Ipakita ang Anino ng Bintana"
11
+WindowUtils.Window="Bintana"
12
+WindowUtils.ShowEmptyNames="Ipakita ang bintana na may mga walang laman na pangalan"
13
+CropMode="I-crop"
14
+CropMode.None="Wala"
15
+CropMode.Manual="Mano-mano"
16
+CropMode.ToWindow="Sa Bintana"
17
+CropMode.ToWindowAndManual="Sa Bintana at mano-mano"
18
+Crop.origin.x="I-crop sa kaliwa"
19
+Crop.origin.y="I-crop sa taas"
20
+Crop.size.width="I-crop sa kanan"
21
+Crop.size.height="I-crop sa pinakailalim"
22
+
23
obs-studio-21.0.3.tar.xz/plugins/mac-capture/mac-audio.c -> obs-studio-21.1.2.tar.xz/plugins/mac-capture/mac-audio.c Changed
11
 
1
@@ -89,6 +89,9 @@
2
    if (!ca->device_uid)
3
        ca->device_uid = bstrdup("default");
4
 
5
+   ca->default_device = false;
6
+   ca->no_devices = false;
7
+
8
    /* have to do this because mac output devices don't actually exist */
9
    if (astrcmpi(ca->device_uid, "default") == 0) {
10
        if (ca->input) {
11
obs-studio-21.1.2.tar.xz/plugins/mac-syphon/data/locale/fil-PH.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Syphon="Pagkuha ng Laro (Siphon)"
3
+Source="Pinagkukunan"
4
+LaunchSyphonInject="Simulan ang SayponIngekt"
5
+Inject="Turukan"
6
+Application="Aplikasyon"
7
+SyphonLicense="Ipahigod ang Lisensya"
8
+Crop="I-crop"
9
+Crop.origin.x="Gupitin ng maigsi sa kaliwa"
10
+Crop.origin.y="Gupitin ng maigsi sa taas"
11
+Crop.size.width="Gupitin ng maigsi sa kanan"
12
+Crop.size.height="Gupitin ng maigsi sa ibaba"
13
+AllowTransparency="Pahintulutan ang aninaw"
14
+
15
obs-studio-21.1.2.tar.xz/plugins/mac-vth264/data/locale/fil-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+VTH264EncHW="Apol VT H264 Softwer Enkoder"
3
+VTH264EncSW="Apol VT H264 Softwer Enkoder"
4
+VTEncoder="Bidyo ng Kahon ng kasangkapan Enkoder"
5
+Bitrate="Bitreyt"
6
+UseMaxBitrate="Limitasyon ng bitreyt"
7
+MaxBitrate="Pinakamataas na bitreyt"
8
+MaxBitrateWindow="Pinakamataas na bitreyt window (segundo)"
9
+KeyframeIntervalSec="Ang Agwat ng Keypreym (segundo, 0=awto)"
10
+Profile="Propayl"
11
+None="(Wala)"
12
+DefaultEncoder="(Depolt Enkoder)"
13
+UseBFrames="Gamitin ang B-Preyms"
14
+
15
+
16
obs-studio-21.1.2.tar.xz/plugins/mac-vth264/data/locale/tl-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+VTH264EncHW="Ang Hardware Encoder ng Apple VT H264"
3
+VTH264EncSW="Ang Software Encoder ng Apple VT H264"
4
+VTEncoder="Ang VideoToolbox ng Encoder"
5
+Bitrate="Bitreyt"
6
+UseMaxBitrate="Limitasyon sa Bitreyt"
7
+MaxBitrate="Pinakamalakas na bitrate"
8
+MaxBitrateWindow="Pinakamalakas na bitrate window (segundo)"
9
+KeyframeIntervalSec="Ang Pagitan sa Keyframe (segundo, 0=awto)"
10
+Profile="Bista sa Tagiliran"
11
+None="(Wala)"
12
+DefaultEncoder="(I-default ang Encoder)"
13
+UseBFrames="Gumamit ng mga B-Frame"
14
+
15
+
16
obs-studio-21.0.3.tar.xz/plugins/obs-browser/BSUtils.cmake -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/BSUtils.cmake Changed
8
 
1
@@ -49,4 +49,4 @@
2
 macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
3
     set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}
4
         ${XCODE_VALUE})
5
-endmacro (set_xcode_property)
6
\ No newline at end of file
7
+endmacro (set_xcode_property)
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/CMakeLists.txt Changed
71
 
1
@@ -16,14 +16,24 @@
2
    option(USE_STATIC_CRT "Use static CRT" ON)
3
 
4
    if(USE_STATIC_CRT)
5
-       set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS} /MT")
6
-       set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} /MT")
7
-       set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} /MT")
8
-       set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} /MTd")
9
-       set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} /MT")
10
-       set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} /MT")
11
-       set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /MT")
12
-       set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} /MTd")
13
+       string(REPLACE "/MD" "/MT" 
14
+           "CMAKE_C_FLAGS" 
15
+           "${CMAKE_C_FLAGS}")
16
+
17
+       string(REPLACE "/MD" "/MT" 
18
+           "CMAKE_CXX_FLAGS" 
19
+           "${CMAKE_CXX_FLAGS}")
20
+
21
+       string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" UPPER_CONFIG_TYPES)
22
+       foreach(CONFIG_TYPE ${UPPER_CONFIG_TYPES})
23
+           string(REPLACE "/MD" "/MT" 
24
+               "CMAKE_C_FLAGS_${CONFIG_TYPE}" 
25
+               "${CMAKE_C_FLAGS_${CONFIG_TYPE}}")
26
+
27
+           string(REPLACE "/MD" "/MT" 
28
+               "CMAKE_CXX_FLAGS_${CONFIG_TYPE}" 
29
+               "${CMAKE_CXX_FLAGS_${CONFIG_TYPE}}")
30
+       endforeach()
31
    endif()
32
 endif()
33
 
34
@@ -318,7 +328,35 @@
35
        COMMAND rm -rf "$<TARGET_FILE_DIR:cef-isolation>/../Frameworks/CEF Helper.app"
36
        COMMAND cp -Rf "$<TARGET_FILE_DIR:cef-bootstrap>/../../../CEF Helper.app" "$<TARGET_FILE_DIR:cef-isolation>/../Frameworks"
37
        )
38
-       
39
+
40
+else(APPLE)
41
+   math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}")
42
+   add_custom_command(TARGET obs-browser POST_BUILD
43
+       COMMAND ${CMAKE_COMMAND} -E copy_directory
44
+       "${CEF_ROOT_DIR}/Resources"
45
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
46
+   )
47
+
48
+   add_custom_command(TARGET obs-browser POST_BUILD
49
+       COMMAND ${CMAKE_COMMAND} -E copy
50
+       "${CEF_ROOT_DIR}/Release/chrome_elf.dll"
51
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
52
+       COMMAND ${CMAKE_COMMAND} -E copy
53
+       "${CEF_ROOT_DIR}/Release/libcef.dll"
54
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
55
+       COMMAND ${CMAKE_COMMAND} -E copy
56
+       "${CEF_ROOT_DIR}/Release/libEGL.dll"
57
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
58
+       COMMAND ${CMAKE_COMMAND} -E copy
59
+       "${CEF_ROOT_DIR}/Release/libGLESv2.dll"
60
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
61
+       COMMAND ${CMAKE_COMMAND} -E copy
62
+       "${CEF_ROOT_DIR}/Release/natives_blob.bin"
63
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
64
+       COMMAND ${CMAKE_COMMAND} -E copy
65
+       "${CEF_ROOT_DIR}/Release/snapshot_blob.bin"
66
+       "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/"
67
+   )
68
 endif(APPLE)
69
 
70
 if(APPLE)
71
obs-studio-21.0.3.tar.xz/plugins/obs-browser/FindCEF.cmake -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/FindCEF.cmake Changed
47
 
1
@@ -1,5 +1,7 @@
2
 include(FindPackageHandleStandardArgs)
3
 
4
+SET(CEF_ROOT_DIR "" CACHE PATH "Path to a CEF distributed build")
5
+
6
 message("Looking for Chromium Embedded Framework in ${CEF_ROOT_DIR}")
7
 
8
 find_path(CEF_INCLUDE_DIR "include/cef_version.h"
9
@@ -8,10 +10,19 @@
10
 find_library(CEF_LIBRARY
11
    NAMES cef libcef cef.lib libcef.o "Chromium Embedded Framework"
12
    PATHS ${CEF_ROOT_DIR} ${CEF_ROOT_DIR}/Release)
13
+find_library(CEF_LIBRARY_DEBUG
14
+   NAMES cef libcef cef.lib libcef.o "Chromium Embedded Framework"
15
+   PATHS ${CEF_ROOT_DIR} ${CEF_ROOT_DIR}/Debug)
16
 
17
 find_library(CEFWRAPPER_LIBRARY
18
    NAMES cef_dll_wrapper libcef_dll_wrapper
19
-   PATHS ${CEF_ROOT_DIR}/build/libcef_dll ${CEF_ROOT_DIR}/build/libcef_dll_wrapper)
20
+   PATHS ${CEF_ROOT_DIR}/build/libcef_dll/Release
21
+       ${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release
22
+       ${CEF_ROOT_DIR}/build/libcef_dll
23
+       ${CEF_ROOT_DIR}/build/libcef_dll_wrapper)
24
+find_library(CEFWRAPPER_LIBRARY_DEBUG
25
+   NAMES cef_dll_wrapper libcef_dll_wrapper
26
+   PATHS ${CEF_ROOT_DIR}/build/libcef_dll/Debug ${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug)
27
 
28
 if (NOT CEF_LIBRARY)
29
    message(FATAL_ERROR "Could not find the CEF shared library" )
30
@@ -22,8 +33,14 @@
31
 endif (NOT CEFWRAPPER_LIBRARY)
32
 
33
 set(CEF_LIBRARIES
34
-   ${CEF_LIBRARY}
35
-   ${CEFWRAPPER_LIBRARY})
36
+       optimized ${CEFWRAPPER_LIBRARY}
37
+       optimized ${CEF_LIBRARY})
38
+
39
+if (CEF_LIBRARY_DEBUG AND CEFWRAPPER_LIBRARY_DEBUG)
40
+   list(APPEND CEF_LIBRARIES
41
+           debug ${CEFWRAPPER_LIBRARY_DEBUG}
42
+           debug ${CEF_LIBRARY_DEBUG})
43
+endif()
44
 
45
 find_package_handle_standard_args(CEF DEFAULT_MSG CEF_LIBRARY 
46
    CEFWRAPPER_LIBRARY CEF_INCLUDE_DIR)
47
obs-studio-21.0.3.tar.xz/plugins/obs-browser/README.md -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/README.md Changed
34
 
1
@@ -55,7 +55,22 @@
2
 
3
 ### Get the current scene
4
 ```
5
-window.obsstudio.getCurrentScene(function(data) {console.log(data);});
6
+window.obsstudio.getCurrentScene(function(data) { console.log(data); });
7
+
8
+data is a Javascript object containing the following properties:
9
+* width
10
+* height
11
+* name
12
+```
13
+
14
+### Get OBS output status
15
+```
16
+window.obsstudio.getStatus(function data) { console.log(data); });
17
+
18
+data is a Javascript object containing the following properties:
19
+* recording (true/false)
20
+* streaming (true/false)
21
+* replaybuffer (true/false)
22
 ```
23
 
24
 ## Building on OSX
25
@@ -104,7 +119,7 @@
26
 ### Building CEF
27
 #### Getting
28
 *  Download CEF Windows 64bit from [http://opensource.spotify.com/cefbuilds/index.html](http://opensource.spotify.com/cefbuilds/index.html)
29
-  *  Use CEF branch 2987
30
+  *  Use CEF branch 2987, or newer branches up until 3112
31
 *  Extract and cd into the folder
32
 
33
 #### Setting Up Project
34
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-bootstrap/main.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-bootstrap/main.cpp Changed
8
 
1
@@ -31,4 +31,4 @@
2
 #endif
3
    CefRefPtr<BrowserApp> mainApp(new BrowserApp());
4
    return CefExecuteProcess(mainArgs, mainApp.get(), NULL);                   
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-handle.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-handle.h Changed
6
 
1
@@ -60,4 +60,3 @@
2
 
3
    std::unique_ptr<BrowserTexture> browserTexture;
4
 };
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.hpp Changed
9
 
1
@@ -9,6 +9,7 @@
2
    BrowserOBSBridgeMac(id<CEFIsolationService> cefIsolationService);
3
 
4
     const char* GetCurrentSceneJSONData() override;
5
+   const char* GetStatus() override;
6
 
7
 private:
8
    id<CEFIsolationService> cefIsolationService;    
9
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.mm Changed
10
 
1
@@ -8,3 +8,8 @@
2
 {
3
    return [cefIsolationService getCurrentSceneJSONData];
4
 }
5
+
6
+const char* BrowserOBSBridgeMac::GetStatus()
7
+{
8
+   return [cefIsolationService getStatus];
9
+}
10
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.hpp Changed
8
 
1
@@ -42,4 +42,4 @@
2
 public:
3
    IMPLEMENT_REFCOUNTING(BrowserRenderHandler);
4
    
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.mm Changed
8
 
1
@@ -48,4 +48,4 @@
2
    (void)(dirtyRects);
3
 
4
    browserHandle->RenderToAvailableTexture(width, height, data);
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.h Changed
8
 
1
@@ -34,4 +34,4 @@
2
    const int height;
3
    const BrowserSurfaceHandle surfaceHandle;
4
    IOSurfaceRef ioSurfaceRef;
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.mm Changed
8
 
1
@@ -91,4 +91,4 @@
2
    }
3
    return false;
4
 
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.h Changed
6
 
1
@@ -27,4 +27,3 @@
2
    std::map<int, std::shared_ptr<BrowserHandle> > map;
3
 }
4
 @end
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/service-connection-delegate.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/service-connection-delegate.h Changed
8
 
1
@@ -34,4 +34,4 @@
2
 - (void)createConnectionThread;
3
 - (void)shutdown;
4
 
5
-@end
6
\ No newline at end of file
7
+@end
8
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ca-ES.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Fitxer local"
3
+URL="URL"
4
+Width="Amplada"
5
+Height="Alçada"
6
+FPS="FPS"
7
+CSS="CSS personalizat"
8
+ShutdownSourceNotVisible="Apaga la font quan no sigui visible"
9
+RefreshBrowserActive="Actualitza el navegador en activar-se l'escena"
10
+RefreshNoCache="Actualitza la memòria cau de la pàgina actual"
11
+RestartCEF="Reinicia CEF"
12
+BrowserSource="Navegador"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/cs-CZ.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Místní soubor"
3
+URL="Adresa URL"
4
+Width="Šířka"
5
+Height="Výška"
6
+FPS="FPS"
7
+CSS="Vlastní styly"
8
+ShutdownSourceNotVisible="Vypnout zdroj, pokud není vidět"
9
+RefreshBrowserActive="Obnovit stránku při aktivaci scény"
10
+RefreshNoCache="Vyčistit mezipaměť (cache) aktuální stránky"
11
+RestartCEF="Restartovat CEF"
12
+BrowserSource="Prohlížeč"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/da-DK.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Lokal fil"
3
+URL="URL"
4
+Width="Bredde"
5
+Height="Højde"
6
+FPS="FPS"
7
+CSS="Tilpasset CSS"
8
+ShutdownSourceNotVisible="Luk kilden, når den ikke er synlig"
9
+RefreshBrowserActive="Opfrisk browseren, når scenen bliver aktiv"
10
+RefreshNoCache="Opfrisk aktuelle side-cache"
11
+RestartCEF="Genstart CEF"
12
+BrowserSource="Browser"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/de-DE.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Lokale Datei"
3
+URL="URL"
4
+Width="Breite"
5
+Height="Höhe"
6
+FPS="FPS"
7
+CSS="Benutzerdefiniertes CSS"
8
+ShutdownSourceNotVisible="Deaktivieren, wenn Quelle nicht sichtbar ist"
9
+RefreshBrowserActive="Browser aktualisieren, wenn die Szene aktiv wird"
10
+RefreshNoCache="Cache der aktuellen Seite aktualisieren"
11
+RestartCEF="CEF neu starten"
12
+BrowserSource="Browser"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/el-GR.ini Added
10
 
1
@@ -0,0 +1,8 @@
2
+LocalFile="Τοπικό αρχείο"
3
+URL="Διεύθυνση URL"
4
+Width="Πλάτος"
5
+Height="Ύψος"
6
+FPS="Καρέ ανά δευτερόλεπτο"
7
+CSS="Προσαρμοσμένο CSS"
8
+RefreshNoCache="Ανανέωση της μνήμης cache της τρέχουσας σελίδας"
9
+BrowserSource="Πρόγραμμα περιήγησης"
10
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/es-ES.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Archivo local"
3
+URL="URL"
4
+Width="Ancho"
5
+Height="Alto"
6
+FPS="FPS"
7
+CSS="CSS personalizado"
8
+ShutdownSourceNotVisible="Apagar fuente cuando no sea visible"
9
+RefreshBrowserActive="Actualizar el navegador cuando la escena se active"
10
+RefreshNoCache="Actualizar la caché de la página actual"
11
+RestartCEF="Reiniciar CEF"
12
+BrowserSource="Navegador"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/eu-ES.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Bertako fitxategia"
3
+URL="URL"
4
+Width="Zabalera"
5
+Height="Altuera"
6
+FPS="FPS"
7
+CSS="CSS pertsonalizatua"
8
+ShutdownSourceNotVisible="Itzali iturburua ikusgai ez dagoenean"
9
+RefreshBrowserActive="Freskatu nabigatzailea eszena aktibatzen denean"
10
+RefreshNoCache="Freskatu uneko orriaren cachea"
11
+RestartCEF="Berrabiarazi CEF"
12
+BrowserSource="Nabigatzailea"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/fi-FI.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Paikallinen tiedosto"
3
+URL="URL"
4
+Width="Leveys"
5
+Height="Korkeus"
6
+FPS="FPS"
7
+CSS="Mukautettu CSS"
8
+ShutdownSourceNotVisible="Sulje lähde kun se ei ole näkyvissä"
9
+RefreshBrowserActive="Lataa selain uudelleen kun skenestä tulee aktiivinen"
10
+RefreshNoCache="Lataa nykyisen sivun välimuisti uudelleen"
11
+RestartCEF="Uudelleenkäynnistä CEF"
12
+BrowserSource="Selain"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/fr-FR.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Fichier local"
3
+URL="URL"
4
+Width="Largeur"
5
+Height="Hauteur"
6
+FPS="FPS"
7
+CSS="CSS personnalisé"
8
+ShutdownSourceNotVisible="Désactiver la source si elle n'est pas visible"
9
+RefreshBrowserActive="Rafraîchir le navigateur lorsque la scène devient active"
10
+RefreshNoCache="Rafraîchir le cache de cette page"
11
+RestartCEF="Relancer le CEF"
12
+BrowserSource="Navigateur"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/hu-HU.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Helyi fájl"
3
+URL="Webcím"
4
+Width="Szélesség"
5
+Height="Magasság"
6
+FPS="FPS"
7
+CSS="Egyéni CSS"
8
+ShutdownSourceNotVisible="Lekapcsolás, ha nem látható"
9
+RefreshBrowserActive="Böngésző frissítése ha aktívvá válik"
10
+RefreshNoCache="Aktuális oldal gyorsítótárának frissítése"
11
+RestartCEF="CEF újraindítása"
12
+BrowserSource="Böngésző"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/it-IT.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="File locale"
3
+URL="URL"
4
+Width="Larghezza"
5
+Height="Altezza"
6
+FPS="FPS (Fotogrammi al secondo)"
7
+CSS="CSS personalizzato"
8
+ShutdownSourceNotVisible="Arresta quando la sorgente non è visibile"
9
+RefreshBrowserActive="Aggiorna il browser quando la scena diventa attiva"
10
+RefreshNoCache="Ricarica cache della la pagina attuale"
11
+RestartCEF="Riavvia il CEF"
12
+BrowserSource="Browser"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ja-JP.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="ローカルファイル"
3
+URL="URL"
4
+Width="幅"
5
+Height="高さ"
6
+FPS="FPS"
7
+CSS="カスタム CSS"
8
+ShutdownSourceNotVisible="見えないときにソースをシャットダウン"
9
+RefreshBrowserActive="シーンがアクティブになったときにブラウザの表示を更新"
10
+RefreshNoCache="現在のページを再読込"
11
+RestartCEF="CEF を再起動"
12
+BrowserSource="ブラウザ"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ko-KR.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="로컬 파일"
3
+URL="URL"
4
+Width="너비"
5
+Height="높이"
6
+FPS="FPS"
7
+CSS="CSS"
8
+ShutdownSourceNotVisible="소스가 보이지 않는 경우 종료"
9
+RefreshBrowserActive="장면이 활성화되면 브라우저를 새로고침"
10
+RefreshNoCache="현재 페이지의 캐시를 새로고침"
11
+RestartCEF="CEF 재시작"
12
+BrowserSource="브라우저"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/nb-NO.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Lokal fil"
3
+URL="URL"
4
+Width="Bredde"
5
+Height="Høyde"
6
+FPS="FPS"
7
+CSS="Egendefinert CSS"
8
+ShutdownSourceNotVisible="Deaktiver kilde når ikke synlig"
9
+RefreshBrowserActive="Oppdater nettleseren når scenen blir aktiv"
10
+RefreshNoCache="Oppdater bufferen for denne siden"
11
+RestartCEF="Restart CEF"
12
+BrowserSource="Nettleser"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/nl-NL.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Lokaal bestand"
3
+URL="URL"
4
+Width="Breedte"
5
+Height="Hoogte"
6
+FPS="FPS"
7
+CSS="Aangepaste CSS"
8
+ShutdownSourceNotVisible="Schakel bron uit wanneer deze niet zichtbaar is"
9
+RefreshBrowserActive="Vernieuw browser wanneer een scène actief wordt"
10
+RefreshNoCache="Cache van de huidige pagina vernieuwen"
11
+RestartCEF="CEF herstarten"
12
+BrowserSource="Browser"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/pl-PL.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Plik lokalny"
3
+URL="Adres URL"
4
+Width="Szerokość"
5
+Height="Wysokość"
6
+FPS="FPS"
7
+CSS="Własny CSS"
8
+ShutdownSourceNotVisible="Zamknij źródło, gdy niewidoczne"
9
+RefreshBrowserActive="Odśwież przeglądarkę, gdy scena zostanie aktywowana"
10
+RefreshNoCache="Odśwież pamięć podręczną bieżącej strony"
11
+RestartCEF="Uruchom ponownie CEF"
12
+BrowserSource="Przeglądarka"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/pt-BR.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Arquivo local"
3
+URL="URL"
4
+Width="Largura"
5
+Height="Altura"
6
+FPS="FPS"
7
+CSS="CSS Personalizado"
8
+ShutdownSourceNotVisible="Desativar fonte quando Invisível"
9
+RefreshBrowserActive="Atualizar o navegador quando a cena se tornar ativa"
10
+RefreshNoCache="Atualizar o cache da página atual"
11
+RestartCEF="Reiniciar o CEF"
12
+BrowserSource="Navegador"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ru-RU.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Локальный файл"
3
+URL="Адрес URL"
4
+Width="Ширина"
5
+Height="Высота"
6
+FPS="FPS"
7
+CSS="CSS"
8
+ShutdownSourceNotVisible="Отключать, когда не видим"
9
+RefreshBrowserActive="Обновить браузер, когда сцена становится активной"
10
+RefreshNoCache="Обновить кэш текущей страницы"
11
+RestartCEF="Перезапустить CEF"
12
+BrowserSource="Браузер"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/sk-SK.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Lokálny súbor"
3
+URL="URL adresa"
4
+Width="Šírka"
5
+Height="Výška"
6
+FPS="FPS"
7
+CSS="Vlastné CSS"
8
+ShutdownSourceNotVisible="Vypnúť zdroj, keď nie je viditeľný"
9
+RefreshBrowserActive="Obnoviť prehliadač, keď sa scéna stane aktívna"
10
+RefreshNoCache="Vyčistiť medzi-pamäť aktuálnej stránky"
11
+RestartCEF="Reštartovať CEF"
12
+BrowserSource="Prehliadač"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/sv-SE.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Lokal fil"
3
+URL="URL"
4
+Width="Bredd"
5
+Height="Höjd"
6
+FPS="Bildfrekvens"
7
+CSS="Anpassad CSS"
8
+ShutdownSourceNotVisible="Stäng ned källor som inte visas"
9
+RefreshBrowserActive="Uppdatera webbläsaren när scenen blir aktiv"
10
+RefreshNoCache="Uppdatera cachen för aktuell sida"
11
+RestartCEF="Uppdatera CEF"
12
+BrowserSource="Webbläsare"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/tr-TR.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Yerel dosya"
3
+URL="URL"
4
+Width="Genişlik"
5
+Height="Yükseklik"
6
+FPS="FPS"
7
+CSS="Özel CSS"
8
+ShutdownSourceNotVisible="Görünür değilken kaynağı kapat"
9
+RefreshBrowserActive="Sahne etkin olduğunda tarayıcıyı yenile"
10
+RefreshNoCache="Geçerli sayfanın önbelleğini yenile"
11
+RestartCEF="CEF'i Yeniden Başlat"
12
+BrowserSource="Tarayıcı"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/uk-UA.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="Локальний файл"
3
+URL="URL-адреса"
4
+Width="Ширина"
5
+Height="Висота"
6
+FPS="Кадрів в секунду"
7
+CSS="Власний CSS код"
8
+ShutdownSourceNotVisible="Вимикати джерело, коли воно не видиме"
9
+RefreshBrowserActive="Оновити браузер, коли сцена стає активною"
10
+RefreshNoCache="Оновити кеш поточної сторінки"
11
+RestartCEF="Перезапустити CEF"
12
+BrowserSource="Браузер"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/vi-VN.ini Added
12
 
1
@@ -0,0 +1,10 @@
2
+LocalFile="Tập tin cục bộ"
3
+URL="URL"
4
+Width="Rộng"
5
+Height="Cao"
6
+FPS="FPS"
7
+CSS="CSS tùy chỉnh"
8
+ShutdownSourceNotVisible="Tắt máy khi không hiển thị"
9
+RefreshNoCache="Làm mới cache trang hiện tại"
10
+RestartCEF="Khởi động lại CEF"
11
+BrowserSource="Trình duyệt"
12
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/zh-CN.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="本地文件"
3
+URL="URL"
4
+Width="宽度"
5
+Height="高度"
6
+FPS="FPS"
7
+CSS="自定义 CSS"
8
+ShutdownSourceNotVisible="不可见时关闭源"
9
+RefreshBrowserActive="场景变为活动状态时,刷新浏览器"
10
+RefreshNoCache="刷新当前页面缓存"
11
+RestartCEF="重启 CEF"
12
+BrowserSource="浏览器"
13
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/zh-TW.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+LocalFile="本機檔案"
3
+URL="網址"
4
+Width="寬度"
5
+Height="高度"
6
+FPS="FPS (影格率)"
7
+CSS="自訂CSS"
8
+ShutdownSourceNotVisible="不可見時關閉來源"
9
+RefreshBrowserActive="取得焦點時更新瀏覽器"
10
+RefreshNoCache="更新當前頁面快取"
11
+RestartCEF="重新啟動CEF"
12
+BrowserSource="瀏覽器"
13
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/encoding_errors.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/encoding_errors.hpp Changed
6
 
1
@@ -55,4 +55,3 @@
2
 #endif
3
 
4
 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/encoding_utf.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/encoding_utf.hpp Changed
6
 
1
@@ -81,4 +81,3 @@
2
 #endif
3
 
4
 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/scoped_ptr.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/scoped_ptr.hpp Changed
6
 
1
@@ -90,4 +90,3 @@
2
 
3
 #endif
4
 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/utf.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/utf.hpp Changed
6
 
1
@@ -466,4 +466,3 @@
2
 #endif
3
 
4
 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser-facade/main.c -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser-facade/main.c Changed
8
 
1
@@ -76,4 +76,4 @@
2
    }
3
 
4
 
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-listener-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-listener-mac.mm Changed
8
 
1
@@ -140,4 +140,4 @@
2
    obs_leave_graphics();
3
 
4
    browserSource->GetParent()->UpdateBrowser();
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.h Changed
8
 
1
@@ -41,4 +41,4 @@
2
    gs_samplerstate_t *sampler;
3
    gs_vertbuffer_t *vertexBuffer;
4
 
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.mm Changed
10
 
1
@@ -53,7 +53,7 @@
2
 {
3
    obs_enter_graphics();
4
 
5
-   drawEffect = obs_get_default_rect_effect();
6
+   drawEffect = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT);
7
 
8
    struct gs_sampler_info info = {
9
        .filter = GS_FILTER_LINEAR,
10
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service.mm Changed
14
 
1
@@ -120,6 +120,12 @@
2
    return jsonString;
3
 }
4
 
5
+- (const char*)getStatus
6
+{
7
+   const char* jsonString = obsStatusToJSON();
8
+   return jsonString;
9
+}
10
+
11
 - (void)invalidateClient:(id)client withException:(NSException *)exception
12
 {
13
    UNUSED_PARAMETER(client);
14
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/client-connection-delegate.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/client-connection-delegate.h Changed
8
 
1
@@ -29,4 +29,4 @@
2
 - (void)restart;
3
 - (void)shutdown;
4
 
5
-@end
6
\ No newline at end of file
7
+@end
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.c -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.c Changed
8
 
1
@@ -67,4 +67,4 @@
2
 {
3
    build_sprite(data, fabs(end_x - origin_x), fabs(end_y - origin_y),
4
            origin_x, end_x, origin_y, end_y);
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.h Changed
8
 
1
@@ -27,4 +27,4 @@
2
 
3
 void build_sprite_rect(
4
        struct gs_vb_data *data, float origin_x, float origin_y,
5
-       float end_x, float end_y);
6
\ No newline at end of file
7
+       float end_x, float end_y);
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.cpp Changed
8
 
1
@@ -45,4 +45,4 @@
2
        
3
        frame->ExecuteJavaScript(script, href, 0);
4
    }
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.hpp Changed
8
 
1
@@ -41,4 +41,4 @@
2
 private:
3
    IMPLEMENT_REFCOUNTING(BrowserLoadHandler);
4
 
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp Changed
139
 
1
@@ -10,6 +10,7 @@
2
 #include "browser-render-handler.hpp"
3
 #include "browser-load-handler.hpp"
4
 #include "browser-obs-bridge-base.hpp"
5
+#include "browser-listener.hpp"
6
 
7
 BrowserManager::BrowserManager()
8
 : pimpl(new BrowserManager::Impl())
9
@@ -35,6 +36,26 @@
10
    return pimpl->CreateBrowser(browserSettings, browserListener);
11
 }
12
 
13
+CefBrowserHost* BrowserManager::GetBrowserHost(int browserIdentifier)
14
+{
15
+   return pimpl->GetBrowserHost(browserIdentifier);
16
+}
17
+
18
+CefBrowser* BrowserManager::GetBrowser(int browserIdentifier)
19
+{
20
+   return pimpl->GetBrowser(browserIdentifier);
21
+}
22
+
23
+void BrowserManager::LoadURL(int browserIdentifier, CefString& url)
24
+{
25
+   return pimpl->LoadURL(browserIdentifier, url);
26
+}
27
+
28
+bool BrowserManager::IsValidBrowserIdentifier(int browserIdentifier)
29
+{
30
+   return pimpl->IsValidBrowserIdentifier(browserIdentifier);
31
+}
32
+
33
 void BrowserManager::DestroyBrowser(int browserIdentifier)
34
 {
35
    pimpl->DestroyBrowser(browserIdentifier);
36
@@ -128,7 +149,7 @@
37
        const BrowserSettings &browserSettings,
38
        const std::shared_ptr<BrowserListener> &browserListener)
39
 {
40
-   int browserIdentifier = 0;
41
+   int browserIdentifier = -1;
42
    os_event_t *createdEvent;
43
    os_event_init(&createdEvent, OS_EVENT_TYPE_AUTO);
44
 
45
@@ -167,6 +188,7 @@
46
 
47
        if (browser != nullptr) {
48
            browserIdentifier = browser->GetIdentifier();
49
+           browserListener->SetBrowserIdentifier(browserIdentifier);
50
            browserMap[browserIdentifier] = browser;
51
        }
52
        os_event_signal(createdEvent);
53
@@ -177,15 +199,85 @@
54
    return browserIdentifier;
55
 }
56
 
57
+CefBrowserHost* BrowserManager::Impl::GetBrowserHost(int browserIdentifier)
58
+{
59
+   CefBrowserHost* result = NULL;
60
+
61
+   os_event_t* complete_event;
62
+   os_event_init(&complete_event, OS_EVENT_TYPE_AUTO);
63
+
64
+   CefPostTask(TID_UI, BrowserTask::newTask(
65
+       [&]
66
+   {
67
+       result = browserMap[browserIdentifier]->GetHost();
68
+
69
+       os_event_signal(complete_event);
70
+   }));
71
+
72
+   os_event_wait(complete_event);
73
+   os_event_destroy(complete_event);
74
+
75
+   return result;
76
+}
77
+
78
+CefBrowser* BrowserManager::Impl::GetBrowser(int browserIdentifier)
79
+{
80
+   CefBrowser* result = NULL;
81
+
82
+   os_event_t* complete_event;
83
+   os_event_init(&complete_event, OS_EVENT_TYPE_AUTO);
84
+
85
+   CefPostTask(TID_UI, BrowserTask::newTask(
86
+       [&]
87
+   {
88
+       result = browserMap[browserIdentifier];
89
+
90
+       os_event_signal(complete_event);
91
+   }));
92
+
93
+   os_event_wait(complete_event);
94
+   os_event_destroy(complete_event);
95
+
96
+   return result;
97
+}
98
+
99
+void BrowserManager::Impl::LoadURL(int browserIdentifier, CefString& url)
100
+{
101
+   os_event_t* complete_event;
102
+   os_event_init(&complete_event, OS_EVENT_TYPE_AUTO);
103
+
104
+   CefPostTask(TID_UI, BrowserTask::newTask(
105
+       [&]
106
+   {
107
+       browserMap[browserIdentifier]->GetMainFrame()->LoadURL(url);
108
+
109
+       os_event_signal(complete_event);
110
+   }));
111
+
112
+   os_event_wait(complete_event);
113
+   os_event_destroy(complete_event);
114
+}
115
+
116
+bool BrowserManager::Impl::IsValidBrowserIdentifier(int browserIdentifier)
117
+{
118
+   return browserIdentifier >= 0 && browserMap.count(browserIdentifier) > 0;
119
+}
120
+
121
 void 
122
 BrowserManager::Impl::DestroyBrowser(int browserIdentifier)
123
 {
124
    if (browserMap.count(browserIdentifier) > 0) {
125
        CefRefPtr<CefBrowser> browser = browserMap[browserIdentifier];
126
+       browserMap.erase(browserIdentifier);
127
        os_event_t *closeEvent;
128
        os_event_init(&closeEvent, OS_EVENT_TYPE_AUTO);
129
        CefPostTask(TID_UI, BrowserTask::newTask([&, browser] 
130
        {
131
+           // This stops rendering
132
+           // http://magpcss.org/ceforum/viewtopic.php?f=6&t=12079
133
+           // https://bitbucket.org/chromiumembedded/cef/issues/1363/washidden-api-got-broken-on-branch-2062)
134
+           browser->GetHost()->WasHidden(true);
135
+
136
            browser->GetHost()->CloseBrowser(true);
137
            os_event_signal(closeEvent);
138
        }));
139
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp Changed
13
 
1
@@ -33,6 +33,11 @@
2
        const BrowserSettings &browserSettings,
3
        const std::shared_ptr<BrowserListener> &browserListener);
4
 
5
+   CefBrowserHost* GetBrowserHost(int browserIdentifier);
6
+   CefBrowser* GetBrowser(int browserIdentifier);
7
+   void LoadURL(int browserIdentifier, CefString& url);
8
+
9
+   bool IsValidBrowserIdentifier(int browserIdentifier);
10
    void DestroyBrowser(int browserIdentifier);
11
    void TickBrowser(int browserIdentifier);
12
 
13
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.cpp Changed
11
 
1
@@ -15,3 +15,9 @@
2
 
3
    return jsonString; 
4
 }
5
+
6
+const char* BrowserOBSBridgeBase::GetStatus()
7
+{
8
+   const char* jsonString = obsStatusToJSON();
9
+   return jsonString;
10
+}
11
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.hpp Changed
7
 
1
@@ -8,4 +8,5 @@
2
    BrowserOBSBridgeBase();
3
 
4
     const char* GetCurrentSceneJSONData() override;
5
+    const char* GetStatus() override;
6
 };
7
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.cpp Changed
38
 
1
@@ -106,7 +106,7 @@
2
    {
3
        viewWidth = width;
4
        viewHeight = height;
5
-       if (surfaceHandles.size() < 2) {
6
+       if (surfaceHandles.size() < 1) {
7
            BrowserSurfaceHandle newSurfaceHandle = 0;
8
            browserListener->CreateSurface(width, height,
9
                &newSurfaceHandle);
10
@@ -116,16 +116,10 @@
11
            }
12
        }
13
 
14
-       int previousSurfaceHandle = currentSurfaceHandle;
15
-
16
-       currentSurfaceHandle = (++currentSurfaceHandle % surfaceHandles.size());
17
-
18
-       if (currentSurfaceHandle != previousSurfaceHandle) {
19
-           obs_enter_graphics();
20
-           gs_texture_set_image(surfaceHandles[currentSurfaceHandle],
21
-               (const uint8_t*)data, width * 4, false);
22
-           obs_leave_graphics();
23
-       }
24
+       obs_enter_graphics();
25
+       gs_texture_set_image(surfaceHandles[currentSurfaceHandle],
26
+           (const uint8_t*)data, width * 4, false);
27
+       obs_leave_graphics();
28
    }
29
    else if (type == PET_POPUP && popupRect.width > 0 &&
30
        popupRect.height > 0)
31
@@ -156,4 +150,4 @@
32
    
33
 
34
    browserListener->OnDraw(surfaceHandles[currentSurfaceHandle], viewWidth, viewHeight);
35
-}
36
\ No newline at end of file
37
+}
38
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.hpp Changed
17
 
1
@@ -64,7 +64,7 @@
2
    const int height;
3
    const std::shared_ptr<BrowserListener> browserListener;
4
    std::vector<struct gs_texture *> surfaceHandles;
5
-   int currentSurfaceHandle;
6
+   int currentSurfaceHandle = 0;
7
    int viewWidth;
8
    int viewHeight;
9
    CefRect popupRect;
10
@@ -73,4 +73,4 @@
11
 private:
12
    IMPLEMENT_REFCOUNTING(BrowserRenderHandler);
13
    
14
-};
15
\ No newline at end of file
16
+};
17
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-source-base.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-source-base.hpp Changed
8
 
1
@@ -39,4 +39,4 @@
2
    BrowserSource *parent;
3
    gs_texture_t *activeTexture;
4
 
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-source-listener-base.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-source-listener-base.cpp Changed
31
 
1
@@ -19,6 +19,7 @@
2
 #include "browser-source-base.hpp"
3
 #include "browser-types.h"
4
 #include "browser-source-listener-base.hpp"
5
+#include "browser-manager-base.hpp"
6
 
7
 void BrowserSource::Impl::Listener::OnDraw( BrowserSurfaceHandle surfaceHandle,
8
        int width, int height)
9
@@ -26,6 +27,14 @@
10
    UNUSED_PARAMETER(width);
11
    UNUSED_PARAMETER(height);
12
 
13
+   // Check if our browser has not been destroyed yet.
14
+   //
15
+   // Due to the asynchronous nature of CEF, we can get an OnDraw call after
16
+   // BrowserManager::Instance()->DestroyBrowser() call has been made.
17
+   //
18
+   if (!BrowserManager::Instance()->IsValidBrowserIdentifier(GetBrowserIdentifier()))
19
+       return;
20
+
21
    if (textureSet.count(surfaceHandle) > 0) {
22
        obs_enter_graphics();
23
        if (browserSource)
24
@@ -102,4 +111,4 @@
25
        browserSource->activeTexture = nullptr;
26
        obs_leave_graphics();
27
    }
28
-}
29
\ No newline at end of file
30
+}
31
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp Changed
65
 
1
@@ -176,6 +176,16 @@
2
    else {
3
        bs->ExecuteVisiblityJSCallback(true);
4
    }
5
+
6
+   // Start animation
7
+   BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->WasHidden(false);
8
+
9
+#ifdef APPLE
10
+   BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->SetWindowVisibility(true);
11
+#endif
12
+
13
+   // Repaint the view
14
+   BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->Invalidate(PET_VIEW);
15
 }
16
 
17
 // Called when the source is no longer visible
18
@@ -183,6 +193,13 @@
19
 {
20
    BrowserSource *bs = static_cast<BrowserSource *>(data);
21
 
22
+   // Stop animation
23
+   BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->WasHidden(true);
24
+
25
+#ifdef APPLE
26
+   BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->SetWindowVisibility(false);
27
+#endif
28
+
29
    if (bs->GetShutdown()) {
30
        BrowserManager::Instance()->DestroyBrowser(bs->GetBrowserIdentifier());
31
    }
32
@@ -196,7 +213,17 @@
33
    BrowserSource *browserSource = new BrowserSource(settings, source);
34
 
35
    if (browserSource->GetShutdown() && !obs_source_showing(source))
36
+   {
37
        BrowserManager::Instance()->DestroyBrowser(browserSource->GetBrowserIdentifier());
38
+   }
39
+   else
40
+   {
41
+       if (!obs_source_showing(source))
42
+       {
43
+           // Stop animation
44
+           BrowserManager::Instance()->GetBrowser(browserSource->GetBrowserIdentifier())->GetHost()->WasHidden(true);
45
+       }
46
+   }
47
 
48
    return browserSource;
49
 }
50
@@ -206,6 +233,7 @@
51
    BrowserSource *bs = static_cast<BrowserSource *>(data);
52
 
53
    delete bs;
54
+   bs = nullptr;
55
 }
56
 
57
 
58
@@ -294,4 +322,4 @@
59
 
60
 
61
    return browser_source_info;
62
-}
63
\ No newline at end of file
64
+}
65
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.h Changed
6
 
1
@@ -56,4 +56,3 @@
2
 + (id)fromObsKeyEvent: (const obs_key_event *)event;
3
 
4
 @end
5
-
6
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.mm Changed
8
 
1
@@ -83,4 +83,4 @@
2
    return [[ObsKeyEventBridge alloc] initWithObsKeyEvent:event];
3
 }
4
 
5
-@end
6
\ No newline at end of file
7
+@end
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/cef-isolation.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/cef-isolation.h Changed
15
 
1
@@ -38,6 +38,7 @@
2
        surfaceHandle:(BrowserSurfaceHandle)surfaceHandle;
3
 - (void)invalidateClient:(id)client withException:(NSException *)exception;
4
 - (const char*)getCurrentSceneJSONData;
5
+- (const char*)getStatus;
6
 @end
7
 
8
 @protocol CEFIsolatedClient
9
@@ -63,5 +64,3 @@
10
 - (void)executeSceneChangeJSCallback:(const char *)name;
11
 - (void)dispatchJSEvent:(const char *)eventName data:(const char*) jsonString;
12
 @end
13
-
14
-
15
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/cef-logging.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/cef-logging.h Changed
8
 
1
@@ -23,4 +23,4 @@
2
 #define CEFLogDebug(...) NSLog(__VA_ARGS__)
3
 #endif
4
 
5
-#define CEFLogError(...) NSLog(__VA_ARGS__)
6
\ No newline at end of file
7
+#define CEFLogError(...) NSLog(__VA_ARGS__)
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/base64.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/base64.cpp Changed
8
 
1
@@ -120,4 +120,4 @@
2
    }
3
 
4
    return ret;
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/base64.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/base64.hpp Changed
8
 
1
@@ -1,4 +1,4 @@
2
 #include <string>
3
 
4
 std::string base64_encode(unsigned char const*, unsigned int len);
5
-std::string base64_decode(std::string const& s);
6
\ No newline at end of file
7
+std::string base64_decode(std::string const& s);
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-app.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-app.cpp Changed
89
 
1
@@ -78,6 +78,9 @@
2
 
3
    CefRefPtr<CefV8Value> func = CefV8Value::CreateFunction("getCurrentScene", this);
4
    obsStudioObj->SetValue("getCurrentScene", func, V8_PROPERTY_ATTRIBUTE_NONE);
5
+
6
+   CefRefPtr<CefV8Value> getStatus = CefV8Value::CreateFunction("getStatus", this);
7
+   obsStudioObj->SetValue("getStatus", getStatus, V8_PROPERTY_ATTRIBUTE_NONE);
8
 }
9
 
10
 void BrowserApp::ExecuteJSFunction(CefRefPtr<CefBrowser> browser,
11
@@ -164,23 +167,33 @@
12
 
13
        return true;
14
    }
15
-   else if (message->GetName() == "executeCallback") {
16
-        CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context();
17
+   else if (message->GetName() == "executeCallback")
18
+   {
19
+       CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context();
20
+       CefRefPtr<CefV8Value> retval;
21
+       CefRefPtr<CefV8Exception> exception;
22
         
23
-        context->Enter();
24
+       context->Enter();
25
+
26
+       CefRefPtr<CefListValue> arguments = message->GetArgumentList();
27
+       int callbackID = arguments->GetInt(0);
28
+       CefString jsonString = arguments->GetString(1);
29
 
30
-       int callbackID = message->GetArgumentList()->GetInt(0);
31
-       CefString jsonString = message->GetArgumentList()->GetString(1);
32
+       std::string script = fmt::format(
33
+           "JSON.parse('{}');",
34
+           arguments->GetString(1).ToString(),
35
+           jsonString.ToString().c_str());
36
 
37
        CefRefPtr<CefV8Value> callback = callbackMap[callbackID];
38
        CefV8ValueList args;
39
-       args.push_back(CefV8Value::CreateString(jsonString));
40
 
41
-       CefRefPtr<CefV8Value> retval;
42
-       CefRefPtr<CefV8Exception> exception;
43
-        callback->ExecuteFunction(NULL, args);
44
+       context->Eval(script, browser->GetMainFrame()->GetURL(), 0, retval, exception);
45
+
46
+       args.push_back(retval);
47
+
48
+       callback->ExecuteFunction(NULL, args);
49
         
50
-        context->Exit();
51
+       context->Exit();
52
 
53
        callbackMap.erase(callbackID);
54
 
55
@@ -198,8 +211,8 @@
56
        CefRefPtr<CefV8Value>& retval,
57
        CefString& exception)
58
 {
59
-   if (name == "getCurrentScene") {
60
-
61
+   if (name == "getCurrentScene")
62
+   {
63
        if (arguments.size() == 1 && arguments[0]->IsFunction()) {
64
            callbackId++;
65
            callbackMap[callbackId] = arguments[0];
66
@@ -215,6 +228,22 @@
67
 
68
        return true;
69
    }
70
+   else if (name == "getStatus")
71
+   {
72
+       if (arguments.size() == 1 && arguments[0]->IsFunction()) {
73
+           callbackId++;
74
+           callbackMap[callbackId] = arguments[0];
75
+       }
76
+
77
+       CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("getStatus");
78
+       CefRefPtr<CefListValue> args = msg->GetArgumentList();
79
+       args->SetInt(0, callbackId);
80
+
81
+       CefRefPtr<CefBrowser> browser = CefV8Context::GetCurrentContext()->GetBrowser();
82
+       browser->SendProcessMessage(PID_BROWSER, msg);
83
+
84
+       return true;
85
+   }
86
 
87
    // Function does not exist.
88
    return false;
89
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-client.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-client.cpp Changed
22
 
1
@@ -105,5 +105,20 @@
2
 
3
        return true;
4
    }
5
+   else if (message_name == "getStatus") {
6
+
7
+       int callbackID = message->GetArgumentList()->GetInt(0);
8
+
9
+       CefString jsonString = browserOBSBridge->GetStatus();
10
+
11
+       CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("executeCallback");
12
+       CefRefPtr<CefListValue> args = msg->GetArgumentList();
13
+       args->SetInt(0, callbackID);
14
+       args->SetString(1, jsonString);
15
+
16
+       browser->SendProcessMessage(PID_RENDERER, msg);
17
+
18
+       return true;
19
+   }
20
    return false;
21
 }
22
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-listener.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-listener.hpp Changed
22
 
1
@@ -81,4 +81,18 @@
2
    }
3
 
4
    virtual void Invalidated() override {}
5
-};
6
\ No newline at end of file
7
+
8
+private:
9
+   int m_browserIdentifier = -1;
10
+
11
+public:
12
+   void SetBrowserIdentifier(const int browserIdentifier)
13
+   {
14
+       m_browserIdentifier = browserIdentifier;
15
+   }
16
+
17
+   const int GetBrowserIdentifier()
18
+   {
19
+       return m_browserIdentifier;
20
+   }
21
+};
22
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-manager.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-manager.hpp Changed
23
 
1
@@ -19,6 +19,8 @@
2
 
3
 #include <memory>
4
 #include <jansson.h>
5
+#include <include/cef_base.h>
6
+#include <include/cef_client.h>
7
 
8
 class BrowserListener;
9
 struct BrowserSettings;
10
@@ -42,6 +44,12 @@
11
            const std::shared_ptr<BrowserListener>
12
                &browserListener);
13
 
14
+   CefBrowserHost* GetBrowserHost(int browserIdentifier);
15
+   CefBrowser* GetBrowser(int browserIdentifier);
16
+   void LoadURL(int browserIdentifier, CefString& url);
17
+
18
+   bool IsValidBrowserIdentifier(int browserIdentifier);
19
+
20
    void DestroyBrowser(int browserIdentifier);
21
 
22
    void TickBrowser(int browserIdentifier);
23
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-obs-bridge.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-obs-bridge.hpp Changed
9
 
1
@@ -4,4 +4,5 @@
2
 {
3
 public:
4
    virtual const char* GetCurrentSceneJSONData() = 0;
5
-};
6
\ No newline at end of file
7
+   virtual const char* GetStatus() = 0;
8
+};
9
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-scheme.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-scheme.cpp Changed
8
 
1
@@ -116,4 +116,4 @@
2
 {
3
    if (inputStream.is_open())
4
        inputStream.close();
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-scheme.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-scheme.hpp Changed
8
 
1
@@ -59,4 +59,4 @@
2
 
3
 public:
4
    IMPLEMENT_REFCOUNTING(BrowserSchemeHandler);
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-settings.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-settings.hpp Changed
8
 
1
@@ -25,4 +25,4 @@
2
    unsigned int width;
3
    unsigned int height;
4
    unsigned int fps;
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-task.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-task.cpp Changed
8
 
1
@@ -25,4 +25,4 @@
2
 void BrowserTask::Execute()
3
 {
4
    task();
5
-}
6
\ No newline at end of file
7
+}
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-task.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-task.hpp Changed
8
 
1
@@ -35,4 +35,4 @@
2
    std::function<void()> task;
3
 private:
4
    IMPLEMENT_REFCOUNTING(BrowserTask);
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-texture-reference.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-texture-reference.hpp Changed
8
 
1
@@ -36,4 +36,4 @@
2
 private:
3
    class Impl;
4
    std::unique_ptr<Impl> pimpl;
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-texture.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-texture.hpp Changed
8
 
1
@@ -36,4 +36,4 @@
2
 private:
3
    class Impl;
4
    std::unique_ptr<Impl> pimpl;
5
-};
6
\ No newline at end of file
7
+};
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-types.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-types.h Changed
8
 
1
@@ -25,4 +25,4 @@
2
 typedef int BrowserSurfaceHandle;
3
 #else
4
 typedef struct gs_texture *BrowserSurfaceHandle;
5
-#endif
6
\ No newline at end of file
7
+#endif
8
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-version.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-version.h Changed
7
 
1
@@ -1,3 +1,3 @@
2
 #pragma once
3
 
4
-#define OBS_BROWSER_VERSION "1.30.1"
5
\ No newline at end of file
6
+#define OBS_BROWSER_VERSION "1.31.0"
7
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/util.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/util.cpp Changed
25
 
1
@@ -18,4 +18,21 @@
2
    free(obj);
3
 
4
    return jsonString;
5
-}
6
\ No newline at end of file
7
+}
8
+
9
+/**
10
+   Gets the OBS status and generates a JSON encoded string representing the status (recording, streaming etc.).
11
+
12
+   @return json encoded string
13
+*/
14
+const char* obsStatusToJSON()
15
+{
16
+   json_t *obj = json_object();
17
+   json_object_set_new(obj, "recording", json_boolean(obs_frontend_recording_active()));
18
+   json_object_set_new(obj, "streaming", json_boolean(obs_frontend_streaming_active()));
19
+   json_object_set_new(obj, "replaybuffer", json_boolean(obs_frontend_replay_buffer_active()));
20
+   const char *jsonString = json_dumps(obj, 0);
21
+   free(obj);
22
+
23
+   return jsonString;
24
+}
25
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/util.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/util.hpp Changed
9
 
1
@@ -3,4 +3,5 @@
2
 #include <jansson.h>
3
 #include <obs-frontend-api.h>
4
 
5
-extern const char* obsSourceToJSON(obs_source_t *source);
6
\ No newline at end of file
7
+extern const char* obsSourceToJSON(obs_source_t *source);
8
+extern const char* obsStatusToJSON();
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Parcial"
3
 ColorRange.Full="Màxim"
4
 RestartMedia="Reinicia els mitjans"
5
+SpeedPercentage="Velocitat (percentatge)"
6
 Seekable="Cercable"
7
 
8
 MediaFileFilter.AllMediaFiles="Tots els arxius multimèdia"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Teilweise"
3
 ColorRange.Full="Voll"
4
 RestartMedia="Medium neu starten"
5
+SpeedPercentage="Geschwindigkeit (Prozent)"
6
 Seekable="Durchsuchbar"
7
 
8
 MediaFileFilter.AllMediaFiles="Alle Mediendateien"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini Changed
10
 
1
@@ -36,7 +36,7 @@
2
 ColorRange.Partial="Partial"
3
 ColorRange.Full="Full"
4
 RestartMedia="Restart Media"
5
-SpeedPercentage="Speed (perecent)"
6
+SpeedPercentage="Speed (percent)"
7
 Seekable="Seekable"
8
 
9
 MediaFileFilter.AllMediaFiles="All Media Files"
10
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Osittainen"
3
 ColorRange.Full="Täysi"
4
 RestartMedia="Uudelleenkäynnistä media"
5
+SpeedPercentage="Nopeus (prosentti)"
6
 Seekable="Haettava"
7
 
8
 MediaFileFilter.AllMediaFiles="Kaikki mediatiedostot"
9
obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/fil-PH.ini Added
53
 
1
@@ -0,0 +1,51 @@
2
+FFmpegOutput="Ang Awput ng FFmpeg"
3
+FFmpegAAC="Ang Default FFmpeg AAC Encoder"
4
+FFmpegOpus="Ang FFmpeg Opus Encoder"
5
+Bitrate="Bitrate"
6
+Preset="Ang Preset"
7
+RateControl="Kontrolin ang Antas"
8
+KeyframeIntervalSec="Ang pagitan ng Keyframe (segundos, 0=auto)"
9
+Lossless="Lossless"
10
+
11
+BFrames="B-frames"
12
+
13
+NVENC.Use2Pass="Gamitin ang Two-Pass Encoding"
14
+NVENC.Preset.default="I-Default"
15
+NVENC.Preset.hq="Itaas ang Kalidad"
16
+NVENC.Preset.hp="Itaas ang Pagganap"
17
+NVENC.Preset.bd="Bluray"
18
+NVENC.Preset.ll="Mababa na Latency"
19
+NVENC.Preset.llhq="Mababa na Latency Mataas na kalidad"
20
+NVENC.Preset.llhp="Mababa na Latency Mataas na pagganap"
21
+NVENC.Level="Lebel"
22
+
23
+FFmpegSource="Pagkunan ng Media"
24
+LocalFile="Ang File na lokal"
25
+Looping="I-Loop"
26
+Input="Ang Input"
27
+InputFormat="Ang Format ng Input"
28
+BufferingMB="Nag buffering ang Network (MB)"
29
+HardwareDecode="Gamitin ang hardware decoding kapag magagamit"
30
+ClearOnMediaEnd="Itago ang pinagmulan kung tapos ang playback"
31
+Advanced="I-Advanced"
32
+RestartWhenActivated="Simulan mulang ang playback kapag aktibo ang pinagmulan"
33
+CloseFileWhenInactive="Isarado ang file pag di aktibo"
34
+CloseFileWhenInactive.ToolTip="Isarado ang file kapag ang pinagmulan ay di ipinapakita ang stream or\nrecording. Ito nagpapahintulot na baguhin ang pinagmulang pag hindi aktibo,'\n pero dapat mayroong startup delay kapang ang pinagmulan muliang aktibo."
35
+ColorRange="Antas ng kulay ng YUV"
36
+ColorRange.Auto="I-Auto"
37
+ColorRange.Partial="I-Partial"
38
+ColorRange.Full="Buo"
39
+RestartMedia="Simulan muli ang Media"
40
+Seekable="I-Seekable"
41
+
42
+MediaFileFilter.AllMediaFiles="Lahat ng Media Files"
43
+MediaFileFilter.VideoFiles="Bidyo Files"
44
+MediaFileFilter.AudioFiles="Audio Files"
45
+MediaFileFilter.AllFiles="Lahat ng Files"
46
+
47
+ReplayBuffer="Ang Replay Buffer"
48
+ReplayBuffer.Save="I-Save ang Replay"
49
+
50
+HelperProcessFailed="Hindi pwedeng simulan ang pag proseso ng recording helper. Tingan kung OBS file ay hindi hinarangan o tinanggal ng anumang 3rd part antivirus / security software."
51
+UnableToWritePath="Hindi pwedeng sumulat sa %1. Siguraduhin na gamit ang recording path kung saan ang user account mo ay tanggap ang pagsulat at mayroon sapat na espasyo sa disk."
52
+
53
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Partielle"
3
 ColorRange.Full="Complète"
4
 RestartMedia="Redémarrez Media"
5
+SpeedPercentage="Vitesse (pourcent)"
6
 Seekable="Navigable"
7
 
8
 MediaFileFilter.AllMediaFiles="Tous les fichiers multimédias"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Részleges"
3
 ColorRange.Full="Teljes"
4
 RestartMedia="Media újraindítása"
5
+SpeedPercentage="Sebesség (százalékos)"
6
 Seekable="Kereshető"
7
 
8
 MediaFileFilter.AllMediaFiles="Minden médiafájl"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="一部"
3
 ColorRange.Full="全部"
4
 RestartMedia="メディアを再開する"
5
+SpeedPercentage="速度 (パーセント)"
6
 Seekable="シーク可能"
7
 
8
 MediaFileFilter.AllMediaFiles="すべてのメディアファイル"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="부분"
3
 ColorRange.Full="전체"
4
 RestartMedia="미디어 다시재생"
5
+SpeedPercentage="속도 (백분율)"
6
 Seekable="탐색 가능"
7
 
8
 MediaFileFilter.AllMediaFiles="모든 미디어 파일"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Gedeeltelijk"
3
 ColorRange.Full="Volledig"
4
 RestartMedia="Media herstarten"
5
+SpeedPercentage="Snelheid (percentage)"
6
 Seekable="Zoekbaar"
7
 
8
 MediaFileFilter.AllMediaFiles="Alle mediabestanden"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Częściowy"
3
 ColorRange.Full="Pełny"
4
 RestartMedia="Zrestartuj plik audio-wideo"
5
+SpeedPercentage="Szybkość (procent)"
6
 Seekable="Przeszukiwalny"
7
 
8
 MediaFileFilter.AllMediaFiles="Wszystkie pliki multimedialne"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Parcial"
3
 ColorRange.Full="Completo"
4
 RestartMedia="Reiniciar Mídia"
5
+SpeedPercentage="Velocidade (percentagem)"
6
 Seekable="Procurável"
7
 
8
 MediaFileFilter.AllMediaFiles="Todos Arquivos de Mídia"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Частичный"
3
 ColorRange.Full="Полный"
4
 RestartMedia="Перезапустить медиа"
5
+SpeedPercentage="Скорость (проценты)"
6
 Seekable="Перематываемый"
7
 
8
 MediaFileFilter.AllMediaFiles="Все медиа-файлы"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Delvis"
3
 ColorRange.Full="Full"
4
 RestartMedia="Starta om media"
5
+SpeedPercentage="Hastighet (procent)"
6
 Seekable="Sökbar"
7
 
8
 MediaFileFilter.AllMediaFiles="Alla mediafiler"
9
obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/tl-PH.ini Added
53
 
1
@@ -0,0 +1,51 @@
2
+FFmpegOutput="FFmpeg Panglabas"
3
+FFmpegAAC="Ang hindi pagharap ng FFmpeg AAC Encoder"
4
+FFmpegOpus="Ang FFmpeg Opus Encoder"
5
+Bitrate="Bitreyt"
6
+Preset="I-preset"
7
+RateControl="Kontrolin ang Rate"
8
+KeyframeIntervalSec="Ang Pagitan ng Keyframe (segundo, 0=awto)"
9
+Lossless="Walang Pagkawala"
10
+
11
+BFrames="Ang mga B-frame"
12
+
13
+NVENC.Use2Pass="Gamitin ang Dalawang Pass ng Encoding"
14
+NVENC.Preset.default="I-default"
15
+NVENC.Preset.hq="Mataas na Kalidad"
16
+NVENC.Preset.hp="Mataas na Pagganap"
17
+NVENC.Preset.bd="Ang Bluray"
18
+NVENC.Preset.ll="Mababang Pagkawalang kilos"
19
+NVENC.Preset.llhq="Mababang-Pagkawalang kilos na Mataas ang Kalidad"
20
+NVENC.Preset.llhp="Mababang-Pagkawalang kilos na Mataan ang Pagganap"
21
+NVENC.Level="Antas"
22
+
23
+FFmpegSource="Pinagmulan ng Media"
24
+LocalFile="Ang Lokal na File"
25
+Looping="Silo"
26
+Input="Pampasok"
27
+InputFormat="Pampasok na Format"
28
+BufferingMB="Ang Network Buffering (MB)"
29
+HardwareDecode="Gamitin ang hardware sa pag-decode kapag itong magagamit na"
30
+ClearOnMediaEnd="Itago ang pinagmulan kapag ang playback ay natapos"
31
+Advanced="Nauuna"
32
+RestartWhenActivated="I-restart ang playback kapag ang pinagmulan ay naging aktibo na"
33
+CloseFileWhenInactive="Isarado ang file kapag hindi ito aktibo"
34
+CloseFileWhenInactive.ToolTip="Tinatanggal ang file kapag ang pinagmulan ay hindi ipinapakita sa stream o\nnatala. Pinapayagan nito na mabago ang file kapag ang pinagmulan ay hindi aktibo,\nngunit maaaring may ilang pagkaantala sa startup kapag muling pinagana ang pinagmulan."
35
+ColorRange="Ang Saklaw ng Kulay na YUV"
36
+ColorRange.Auto="Awto"
37
+ColorRange.Partial="Bahagya"
38
+ColorRange.Full="Puno"
39
+RestartMedia="I-restart ang Media"
40
+Seekable="Maayos"
41
+
42
+MediaFileFilter.AllMediaFiles="Lahat ng mga Media File"
43
+MediaFileFilter.VideoFiles="Ang mga Video File"
44
+MediaFileFilter.AudioFiles="Ang mga Audio File"
45
+MediaFileFilter.AllFiles="Lahat ng mga File"
46
+
47
+ReplayBuffer="I-replay ang Buffer"
48
+ReplayBuffer.Save="I-save ang Replay"
49
+
50
+HelperProcessFailed="Hindi magawang simulan ang pagtatala ng proseso ng katulong. Suriin na ang mga file ng OBS ay hindi na-block o inalis ng anumang 3rd party antivirus / seguridad ng software."
51
+UnableToWritePath="Hindi makapagsulat sa %1. Tiyaking gumagamit ka ng isang landas sa pagtatala kung saan pinahihintulutan ang iyong user account na magsulat at mayroong sapat na puwang sa disk."
52
+
53
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Kısmi"
3
 ColorRange.Full="Tam"
4
 RestartMedia="Ortamı Yeniden Başlat"
5
+SpeedPercentage="Hız (yüzde)"
6
 Seekable="Aranabilir"
7
 
8
 MediaFileFilter.AllMediaFiles="Tüm Medya Dosyaları"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Частковий"
3
 ColorRange.Full="Повний"
4
 RestartMedia="Перезапустити медіа"
5
+SpeedPercentage="Швидкість (відсотків)"
6
 Seekable="HTTP з перемотуванням"
7
 
8
 MediaFileFilter.AllMediaFiles="Файли мультимедіа"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini Changed
16
 
1
@@ -30,12 +30,13 @@
2
 Advanced="高级"
3
 RestartWhenActivated="当源变为活动状态时重新启动播放"
4
 CloseFileWhenInactive="非活跃状态时关闭文件"
5
-CloseFileWhenInactive.ToolTip="当源没有显示在推流或者\n录像时关闭文件. 这使得在源不活跃状态时可以更改文件,\n但是当当源重新激活时, 可能有一些启动延迟."
6
+CloseFileWhenInactive.ToolTip="当源没有显示在推流或者\n录像时关闭文件。这使得在源不活跃状态时可以更改文件,\n但是当当源重新激活时, 可能有一些启动延迟。"
7
 ColorRange="YUV 颜色范围"
8
 ColorRange.Auto="自动"
9
 ColorRange.Partial="局部"
10
 ColorRange.Full="全部"
11
 RestartMedia="重新启动媒体"
12
+SpeedPercentage="速度(百分比)"
13
 Seekable="可搜索"
14
 
15
 MediaFileFilter.AllMediaFiles="所有媒体文件"
16
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="部分"
3
 ColorRange.Full="全部"
4
 RestartMedia="重新播放媒體"
5
+SpeedPercentage="速度 (百分比)"
6
 Seekable="可查找"
7
 
8
 MediaFileFilter.AllMediaFiles="所有媒體檔案"
9
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c Changed
28
 
1
@@ -20,6 +20,7 @@
2
 #include <util/darray.h>
3
 #include <obs-module.h>
4
 
5
+#include <libavutil/opt.h>
6
 #include <libavformat/avformat.h>
7
 
8
 #include "obs-ffmpeg-formats.h"
9
@@ -229,17 +230,8 @@
10
            enc->context->sample_rate = closest;
11
    }
12
 
13
-   /* if using FFmpeg's AAC encoder, at least set a cutoff value
14
-    * (recommended by konverter) */
15
    if (strcmp(enc->codec->name, "aac") == 0) {
16
-       int cutoff1 = 4000 + (int)enc->context->bit_rate / 8;
17
-       int cutoff2 = 12000 + (int)enc->context->bit_rate / 8;
18
-       int cutoff3 = enc->context->sample_rate / 2;
19
-       int cutoff;
20
-
21
-       cutoff = MIN(cutoff1, cutoff2);
22
-       cutoff = MIN(cutoff, cutoff3);
23
-       enc->context->cutoff = cutoff;
24
+       av_opt_set(enc->context->priv_data, "aac_coder", "fast", 0);
25
    }
26
 
27
    info("bitrate: %" PRId64 ", channels: %d, channel_layout: %x\n",
28
obs-studio-21.1.2.tar.xz/plugins/obs-filters/data/locale/fil-PH.ini Added
79
 
1
@@ -0,0 +1,77 @@
2
+ColorFilter="Pagtama ng Kulay"
3
+ColorGradeFilter="Mag-aplay ng LUT"
4
+MaskFilter="Imahe ng Maskara/Timpla"
5
+AsyncDelayFilter="Naantalang bidyo (Async)"
6
+CropFilter="I-Crop/Pad"
7
+ScrollFilter="Mag-scroll"
8
+ChromaKeyFilter="Susi ng Chroma"
9
+ColorKeyFilter="Susi ng Kulay"
10
+SharpnessFilter="I-Sharpen"
11
+ScaleFilter="I-Scaling/Ratio ng Aspeto"
12
+GPUDelayFilter="I-Render Delay"
13
+UndistortCenter="Undistort center ng imahe kapang nag scaling mula sa ultrawide"
14
+NoiseGate="Ang Noise Gate"
15
+NoiseSuppress="Ang Noise Suppression"
16
+Gain="Ang Gain"
17
+DelayMs="I-Delay (millisegundos)"
18
+Type="I-Type"
19
+MaskBlendType.MaskColor="I-Alpha Mask (Kulang ng Channel)"
20
+MaskBlendType.MaskAlpha="I-Alpha Mask (Alpha ng Channel)"
21
+MaskBlendType.BlendMultiply="I-Blend (Paramihin)"
22
+MaskBlendType.BlendAddition="I-Blend (Dagdagan)"
23
+MaskBlendType.BlendSubtraction="I-Blend (Bawasan)"
24
+Path="Ang Landas"
25
+Color="Kulay"
26
+Opacity="Kalabuan"
27
+Contrast="Kaibahan"
28
+Brightness="Kaliwanagan"
29
+Gamma="Ang Gamma"
30
+BrowsePath.Images="Lahat ng Image Files"
31
+BrowsePath.AllFiles="Lahat ng Files"
32
+KeyColorType="Susi ng Color Type"
33
+KeyColor="Susi ng Kulay"
34
+Similarity="Ang pagkapareho (1-1000)"
35
+Smoothness="Ang pagkakinis (1-1000)"
36
+ColorSpillReduction="Ang pagbawas ng Key Color Spill (1-1000)"
37
+Crop.Left="Kaliwa"
38
+Crop.Right="Kanan"
39
+Crop.Top="Itaas"
40
+Crop.Bottom="Ibaba"
41
+Crop.Width="Ang Lapad"
42
+Crop.Height="Ang Taas"
43
+Crop.Relative="Ang Relative"
44
+ScrollFilter.SpeedX="Ang Horizontal Speed"
45
+ScrollFilter.SpeedY="Ang Vertical Speed"
46
+ScrollFilter.LimitWidth="Limitasyon ng Lapad"
47
+ScrollFilter.LimitHeight="Limitasyon ng Taas"
48
+CustomColor="Pagsadya ng kulay"
49
+Red="Pula"
50
+Green="Berde"
51
+Blue="Asul"
52
+Magenta="Magenta"
53
+NoiseGate.OpenThreshold="Buksan ang Threshold (dB)"
54
+NoiseGate.CloseThreshold="Isarado ang Threshold (dB)"
55
+NoiseGate.AttackTime="Oras ng Pag-atake (milsegudo)"
56
+NoiseGate.HoldTime="Paghawak ng Oras (milsegudo)"
57
+NoiseGate.ReleaseTime="Paglabas ng Oras (milsegudo)"
58
+Gain.GainDB="Makakuha (dB)"
59
+StretchImage="Mag-stretch ng Imahe (itapon ang imahe ng anyong panumbasan)"
60
+Resolution="Resolusyon"
61
+None="Wala"
62
+ScaleFiltering="Iskala ng Pagsasala"
63
+ScaleFiltering.Point="Punto"
64
+ScaleFiltering.Bilinear="Bilinir"
65
+ScaleFiltering.Bicubic="Bikyubik"
66
+ScaleFiltering.Lanczos="Lankzos"
67
+NoiseSuppress.SuppressLevel="Antas ng Pagpigil (dB)"
68
+Saturation="Pagbababad"
69
+HueShift="Kulay ng pagririlyebo"
70
+Amount="Halaga"
71
+Compressor="Kompresor"
72
+Compressor.Ratio="Tumbasan (X:1)"
73
+Compressor.Threshold="Threshold (dB)"
74
+Compressor.AttackTime="Atake (ms)"
75
+Compressor.ReleaseTime="Paglabas (ms)"
76
+Compressor.OutputGain="Makakuha ng Awput (dB)"
77
+Compressor.SidechainSource="Saydcheyn/Pinagmulan ng Daking"
78
+
79
obs-studio-21.0.3.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini Changed
31
 
1
@@ -2,12 +2,12 @@
2
 ColorGradeFilter="Применить LUT"
3
 MaskFilter="Маска изображения/Смешивание"
4
 AsyncDelayFilter="Задержка видео (асинхронность)"
5
-CropFilter="Кадрировать"
6
+CropFilter="Кадрирование"
7
 ScrollFilter="Прокрутка"
8
 ChromaKeyFilter="Хромакей"
9
 ColorKeyFilter="Цветовой ключ"
10
 SharpnessFilter="Увеличить резкость"
11
-ScaleFilter="Коэффициент Масштабирования/Аспект"
12
+ScaleFilter="Масштабирование/Соотношение сторон"
13
 GPUDelayFilter="Задержка отображения"
14
 UndistortCenter="Не искривлять центр изображения при масштабировании Ultrawide разрешения"
15
 NoiseGate="Пропускной уровень шума"
16
@@ -58,10 +58,10 @@
17
 StretchImage="Растянуть изображение (игнорировать пропорции изображения)"
18
 Resolution="Разрешение"
19
 None="Нет"
20
-ScaleFiltering="Масштаб Фильтрации"
21
-ScaleFiltering.Point="Точечная"
22
-ScaleFiltering.Bilinear="Билинейная"
23
-ScaleFiltering.Bicubic="Бикубическая"
24
+ScaleFiltering="Фильтр масштабирования"
25
+ScaleFiltering.Point="Точечный"
26
+ScaleFiltering.Bilinear="Билинейный"
27
+ScaleFiltering.Bicubic="Бикубический"
28
 ScaleFiltering.Lanczos="Метод Ланцоша"
29
 NoiseSuppress.SuppressLevel="Уровень подавления (дБ)"
30
 Saturation="Насыщенность"
31
obs-studio-21.1.2.tar.xz/plugins/obs-filters/data/locale/tl-PH.ini Added
79
 
1
@@ -0,0 +1,77 @@
2
+ColorFilter="Koreksyon ng mga Kulay"
3
+ColorGradeFilter="I-apply ang LUT"
4
+MaskFilter="Imahe ng Mask/Blend"
5
+AsyncDelayFilter="I-delay ang Video (Async)"
6
+CropFilter="I-crop/Pad"
7
+ScrollFilter="I-scroll"
8
+ChromaKeyFilter="Ang Chroma Key"
9
+ColorKeyFilter="Kulay ng mga Key"
10
+SharpnessFilter="Patalasan pa"
11
+ScaleFilter="Scaling/Aspect Ratio"
12
+GPUDelayFilter="Mad-render ng Delay"
13
+UndistortCenter="Ang sentro ay i-undistort kapag ang scaling ay mula sa ultrawide"
14
+NoiseGate="Noise Gate"
15
+NoiseSuppress="Pagtimpiin ang tunog"
16
+Gain="Napunan"
17
+DelayMs="I-delay (millisegundos)"
18
+Type="Tipo"
19
+MaskBlendType.MaskColor="Alpha Mask (Kulay ng Channel)"
20
+MaskBlendType.MaskAlpha="Alpha Mask (Alpha Channel)"
21
+MaskBlendType.BlendMultiply="I-blend (pagpaparami)"
22
+MaskBlendType.BlendAddition="I-blend (pagsamahin)"
23
+MaskBlendType.BlendSubtraction="I-blend (paghiwalayin)"
24
+Path="Daanan"
25
+Color="Kulay"
26
+Opacity="Opacity"
27
+Contrast="Kaibahan"
28
+Brightness="Gaano kaliwanag"
29
+Gamma="Gamma"
30
+BrowsePath.Images="Lahat ng mga Imahen sa File"
31
+BrowsePath.AllFiles="Lahat ng mga Files"
32
+KeyColorType="Tipo ng Kulay sa Key"
33
+KeyColor="Kulay ng Key"
34
+Similarity="Kapareho (1-1000)"
35
+Smoothness="Kakinisan (1-1000)"
36
+ColorSpillReduction="Kulay ng Key sa Spill Reduction (1-1000)"
37
+Crop.Left="Kaliwa"
38
+Crop.Right="Kanan"
39
+Crop.Top="Itaas"
40
+Crop.Bottom="Ibaba"
41
+Crop.Width="Lapad"
42
+Crop.Height="Taas"
43
+Crop.Relative="Kaugnayan"
44
+ScrollFilter.SpeedX="Pahigang Bilis"
45
+ScrollFilter.SpeedY="Patayong Bilis"
46
+ScrollFilter.LimitWidth="Limitasyon ng Lapad"
47
+ScrollFilter.LimitHeight="Limitasyon sa Haba"
48
+CustomColor="Custom na Kulay"
49
+Red="Pula"
50
+Green="Kulay Luntian"
51
+Blue="Bughaw"
52
+Magenta="Magenta"
53
+NoiseGate.OpenThreshold="I-open ang Threshold (dB)"
54
+NoiseGate.CloseThreshold="Isarado ang Threshold (dB)"
55
+NoiseGate.AttackTime="Atakihin ang Oras (millisegundo)"
56
+NoiseGate.HoldTime="Pigilin ang Oras (millisegundo)"
57
+NoiseGate.ReleaseTime="Pakawalan ang Oras (millisegundo)"
58
+Gain.GainDB="Napunan (dB)"
59
+StretchImage="I-stretch ang Imahe (baliwalain ang imahe mula sa aspect ratio)"
60
+Resolution="Resulosyon"
61
+None="Wala"
62
+ScaleFiltering="I-filter ang Scale"
63
+ScaleFiltering.Point="Tuldok"
64
+ScaleFiltering.Bilinear="Bilinear"
65
+ScaleFiltering.Bicubic="Bicubic"
66
+ScaleFiltering.Lanczos="Lanczos"
67
+NoiseSuppress.SuppressLevel="Lebel ng Suppression (dB)"
68
+Saturation="Saturation"
69
+HueShift="Hue Shift"
70
+Amount="Ang Halaga"
71
+Compressor="Ang Comppressor"
72
+Compressor.Ratio="Proporsyon (X:1)"
73
+Compressor.Threshold="Threshold (dB)"
74
+Compressor.AttackTime="Atake (ms)"
75
+Compressor.ReleaseTime="Pakawalan (ms)"
76
+Compressor.OutputGain="Ang nadagdag sa panlabas (dB)"
77
+Compressor.SidechainSource="Pinagmulan ng Sidechain/Ducking"
78
+
79
obs-studio-21.1.2.tar.xz/plugins/obs-libfdk/data/locale/fil-PH.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+LibFDK="libfdk AAC Enkoder"
3
+Bitrate="Bitreyt"
4
+Afterburner="Paganhin ang AAC Afterburner"
5
+
6
obs-studio-21.1.2.tar.xz/plugins/obs-libfdk/data/locale/tl-PH.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+LibFDK="libfdk na AAC Encoder"
3
+Bitrate="Ang Bitrate"
4
+Afterburner="Paganahin ang AAC Afterburner"
5
+
6
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/CMakeLists.txt Changed
10
 
1
@@ -22,6 +22,8 @@
2
 if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt")
3
    find_package(Libcurl REQUIRED)
4
 
5
+   add_definitions(-DFTL_STATIC_COMPILE)
6
+
7
    include_directories(${LIBCURL_INCLUDE_DIRS})
8
 
9
    set(ftl_SOURCES
10
obs-studio-21.1.2.tar.xz/plugins/obs-outputs/data/locale/fil-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+RTMPStream="Ang RTMP Stream"
3
+RTMPStream.DropThreshold="Ang Drop Treshold (millisegundos)"
4
+FLVOutput="Ang FLV File Awput"
5
+FLVOutput.FilePath="Ang Landas ng File"
6
+Default="I-Default"
7
+
8
+ConnectionTimedOut="Ang koneskyong ay nag time out. Siguraduhin na nakaayos at balido ang streaming service at walang firewall na nakaharang sa koneksyon."
9
+PermissionDenied="Ang koneksyon ay hinarang. Suriin ang firewall / anti-virus settings upang matiyak na tiyak na may buong access sa internet ang OBS."
10
+ConnectionAborted="Ang koneksyon ay naudlot. Ito ay karaniwang nagpapahiwatig na may problema sa iyong internet koneksyon at sa streaming service."
11
+ConnectionReset="Ang koneksyon ay na i-reset ng peer. Ito ay karaniwang nagpapahiwatig na may problema sa iyong internet koneksyon at sa streaming service."
12
+HostNotFound="Hindi makita ang Hostname. Siguraduhin na nilagay mo ay balidong streaming server at ang iyong internet koneksyon / DNS ay gumagana ng mabuti."
13
+NoData="Ang hostname ay nakita, pero walang hinihinging tipo ng datus. Ito ay ay nangyayari kapag naka bound sa IPv6 address at ang iyong streaming service ay IPv4 lamang (tignan Settings / Advanced)."
14
+AddressNotAvailable="Hindi magamit ang address. Ikaw ay gumamit at na i-bind ito sa di balidong IP address ( tingan ang Settings / Advanced)."
15
+
16
obs-studio-21.1.2.tar.xz/plugins/obs-outputs/data/locale/tl-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+RTMPStream="RTMP Stream"
3
+RTMPStream.DropThreshold="Treshold ng pagbaba (millisegundos)"
4
+FLVOutput="Ang kinalabasan ng FLV File"
5
+FLVOutput.FilePath="Ang Daanan ng File"
6
+Default="Ang Default"
7
+
8
+ConnectionTimedOut="Ang koneksyon ay nawala. Siguraduhing ikaw ay nag-configured ng isang balidong serbisyo ng streaming at walang firewall na nagpipigil sa koneksyon."
9
+PermissionDenied="Ang koneksyon ay na-block. I-check ang iyong firewall / anti-virus na settings para masiguradong ang OBS ay pwedeng makapasok sa internet."
10
+ConnectionAborted="Ang koneksyon ay nabigo. Ito ay kadalasang indikasyon na ang internet nakoneksyon ay may problema sa'yo o kay sa serbisyo ng streaming."
11
+ConnectionReset="Ang koneksyon ay ni-reset ng peer. Ito ay kadalasang indikasyon na ang internet nakoneksyon ay may problema sa'yo o kay sa serbisyo ng streaming."
12
+HostNotFound="Ang hostname ay hindi matagpuan. Siguraduhing ang nilagay mo ay isang balidong stereaming server at ang iyong internet koneksyon / DNS ay gumagana ng sakto."
13
+NoData="Ang hostname ay natagpuan, ngunit walang data sa ni-request na tipo. Ito ay pwedeng mangyari kung wala kang bound para sa IPv6 na address at ang iyong streaming service ay meron lang IPv4 na mga address (tingnan ang Setting / Advanced)."
14
+AddressNotAvailable="Ang address ay hindi pwede. Pwede kang sumubok na i-bind sa isang hindi balidong IP address (tingnan ang Setting / Advanced)."
15
+
16
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/CMakeLists.txt Changed
159
 
1
@@ -3,64 +3,64 @@
2
 project(libftl)
3
 
4
 option(DISABLE_AUTO_INGEST "Set to TRUE to disable auto ingest feature which removes curl and jansson dependancies" FALSE)
5
+MESSAGE( STATUS "FTL DISABLE_AUTO_INGEST: " ${DISABLE_AUTO_INGEST})
6
 
7
 find_package(Threads REQUIRED)
8
 
9
 set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
10
 set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
11
 
12
-FIND_PACKAGE(CURL)
13
-
14
 if (DISABLE_AUTO_INGEST)
15
-add_definitions(-DDISABLE_AUTO_INGEST)
16
+  add_definitions(-DDISABLE_AUTO_INGEST)
17
 endif()
18
 
19
+# We will only try to include curl if we have auto ingest enabled.
20
+if (NOT DISABLE_AUTO_INGEST)
21
+  FIND_PACKAGE(CURL)
22
+endif()
23
 if (NOT CURL_FOUND AND NOT DISABLE_AUTO_INGEST)
24
-SET(CURL_DISABLE_NTLM ON CACHE BOOL "Disabling NTLM")
25
-SET(CURL_DISABLE_TELNET ON CACHE BOOL "Disabling Telnet")
26
-SET(CURL_DISABLE_LDAP ON CACHE BOOL "Disabling Ldap")
27
-SET(CURL_DISABLE_LDAPS ON CACHE BOOL "Disabling secure ldap")
28
-SET(BUILD_CURL_EXE OFF CACHE BOOL "Building libcurl")
29
-SET(HTTP_ONLY ON CACHE BOOL "using compiling HTTP")
30
-SET(BUILD_TESTING OFF CACHE BOOL "Not building Tests")
31
-add_subdirectory(libcurl)
32
-SET(CURL_INCLUDE_DIRS libcurl/include ${CMAKE_CURRENT_BINARY_DIR}/libcurl/include/curl)
33
-SET(CURL_LIBRARIES libcurl)
34
+  SET(CURL_DISABLE_NTLM ON CACHE BOOL "Disabling NTLM")
35
+  SET(CURL_DISABLE_TELNET ON CACHE BOOL "Disabling Telnet")
36
+  SET(CURL_DISABLE_LDAP ON CACHE BOOL "Disabling Ldap")
37
+  SET(CURL_DISABLE_LDAPS ON CACHE BOOL "Disabling secure ldap")
38
+  SET(BUILD_CURL_EXE OFF CACHE BOOL "Building libcurl")
39
+  SET(HTTP_ONLY ON CACHE BOOL "using compiling HTTP")
40
+  SET(BUILD_TESTING OFF CACHE BOOL "Not building Tests")
41
+  add_subdirectory(libcurl)
42
+  SET(CURL_INCLUDE_DIRS libcurl/include ${CMAKE_CURRENT_BINARY_DIR}/libcurl/include/curl)
43
+  SET(CURL_LIBRARIES libcurl)
44
+  include_directories(${CURL_INCLUDE_DIRS})
45
 endif()
46
-MESSAGE( STATUS "Curl include dir: " ${CURL_INCLUDE_DIRS}) 
47
-include_directories(${CURL_INCLUDE_DIRS})
48
 
49
+# We will only try to include lib jansson if auto ingest is enabled.
50
+SET(JANSSON_LIBRARIES "")
51
 if (NOT DISABLE_AUTO_INGEST)
52
-SET(JANSSON_BUILD_DOCS OFF CACHE BOOL "Jansson docs off")
53
-SET(JANSSON_WITHOUT_TESTS ON CACHE BOOL "Jansson build without tests")
54
-SET(JANSSON_EXAMPLES OFF CACHE BOOL "Jansson disable examples")
55
-SET(USE_WINDOWS_CRYPTOAPI off)
56
-add_subdirectory(libjansson)
57
-include_directories(${CMAKE_CURRENT_BINARY_DIR}/libjansson/include)
58
-SET(JANSSON_LIBRARIES jansson)
59
+  SET(JANSSON_BUILD_DOCS OFF CACHE BOOL "Jansson docs off")
60
+  SET(JANSSON_WITHOUT_TESTS ON CACHE BOOL "Jansson build without tests")
61
+  SET(JANSSON_EXAMPLES OFF CACHE BOOL "Jansson disable examples")
62
+  SET(USE_WINDOWS_CRYPTOAPI off)
63
+  add_subdirectory(libjansson)
64
+  include_directories(${CMAKE_CURRENT_BINARY_DIR}/libjansson/include)
65
+  SET(JANSSON_LIBRARIES jansson)
66
 endif()
67
 
68
-include_directories(libftl libftl/gettimeofday)
69
-
70
-
71
 if (WIN32)
72
-  set(FTL_PLATFORM_FILES ftl_app/win32/xgetopt.c
73
-                            ftl_app/win32/xgetopt.h
74
-                            ftl_app/win32/ctrlc_handler.c)
75
+  set(FTL_PLATFORM_FILES  ftl_app/win32/xgetopt.c
76
+                          ftl_app/win32/xgetopt.h
77
+                          ftl_app/win32/ctrlc_handler.c)
78
   #set(FTL_PLATFORM_LIBS kernel32 user32 gdi32 advapi32 )
79
   #set(FTL_PLATFORM_LIBS ws2_32 )
80
   set(FTLSDK_PLATFORM_FILES libftl/win32/socket.c
81
-                      libftl/win32/socket.h
82
-                       libftl/win32/threads.c
83
-                         libftl/win32/threads.h)
84
-
85
+                            libftl/win32/socket.h
86
+                            libftl/win32/threads.c
87
+                            libftl/win32/threads.h)
88
   include_directories(libftl/win32)
89
 else()
90
   set(FTL_PLATFORM_FILES ftl_app/posix/ctrlc_handler.c)
91
   set(FTLSDK_PLATFORM_FILES libftl/posix/socket.c
92
                             libftl/posix/socket.h
93
-                               libftl/posix/threads.c
94
-                                 libftl/posix/threads.h)
95
+                            libftl/posix/threads.c
96
+                            libftl/posix/threads.h)
97
   include_directories(libftl/posix)
98
 endif()
99
 
100
@@ -74,15 +74,18 @@
101
                        libftl/handshake.c
102
                        libftl/ingest.c
103
                        libftl/ftl_helpers.c
104
-                      libftl/media.c
105
+                       libftl/media.c
106
                        libftl/logging.c
107
                        libftl/ftl.h
108
                        libftl/ftl_private.h
109
                        ${FTLSDK_PLATFORM_FILES})
110
+include_directories(libftl libftl/gettimeofday)
111
+
112
 set_target_properties(ftl PROPERTIES VERSION "0.5.0")
113
 set_target_properties(ftl PROPERTIES SOVERSION 0)
114
 
115
 target_link_libraries(ftl ${CURL_LIBRARIES} ${JANSSON_LIBRARIES})
116
+
117
 if(WIN32)
118
   target_link_libraries(ftl ws2_32)
119
 endif()
120
@@ -93,24 +96,22 @@
121
                ftl_app/file_parser.c
122
                ftl_app/file_parser.h              
123
                ftl_app/gettimeofday.c
124
-              ftl_app/gettimeofday.h
125
-              ftl_app/bitstream.c
126
-              ftl_app/bitstream.h
127
-              ftl_app/cavlc.c
128
-              ftl_app/cavlc.h
129
-              ftl_app/decode.c
130
-              ftl_app/decode.h
131
-              ftl_app/nalu.c
132
-              ftl_app/nalu.h
133
-              ftl_app/utils.c
134
-              ftl_app/utils.h
135
-              ftl_app/dec_obj.h
136
+               ftl_app/gettimeofday.h
137
+               ftl_app/bitstream.c
138
+               ftl_app/bitstream.h
139
+               ftl_app/cavlc.c
140
+               ftl_app/cavlc.h
141
+               ftl_app/decode.c
142
+               ftl_app/decode.h
143
+               ftl_app/nalu.c
144
+               ftl_app/nalu.h
145
+               ftl_app/utils.c
146
+               ftl_app/utils.h
147
+               ftl_app/dec_obj.h
148
                ${FTL_PLATFORM_FILES})
149
 
150
 target_link_libraries(ftl_app ftl ${CURL_LIBRARIES} ${JANSSON_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${FTL_PLATFORM_LIBS})
151
 target_include_directories(ftl_app PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ftl_app)
152
 
153
 # Install rules
154
-install(TARGETS ftl DESTINATION lib)
155
-
156
-
157
+install(TARGETS ftl DESTINATION lib)
158
\ No newline at end of file
159
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl-sdk.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl-sdk.c Changed
123
 
1
@@ -12,15 +12,20 @@
2
 char error_message[1000];
3
 FTL_API const int FTL_VERSION_MAJOR = 0;
4
 FTL_API const int FTL_VERSION_MINOR = 9;
5
-FTL_API const int FTL_VERSION_MAINTENANCE = 9;
6
+FTL_API const int FTL_VERSION_MAINTENANCE = 13;
7
 
8
 // Initializes all sublibraries used by FTL
9
 FTL_API ftl_status_t ftl_init() {
10
+  struct timeval now;
11
+
12
   init_sockets();
13
   os_init();
14
 #ifndef DISABLE_AUTO_INGEST
15
   curl_global_init(CURL_GLOBAL_ALL);
16
 #endif
17
+
18
+  gettimeofday(&now, NULL);
19
+  srand((unsigned int)now.tv_sec);
20
   return FTL_SUCCESS;
21
 }
22
 
23
@@ -42,7 +47,7 @@
24
     os_init_mutex(&ftl->disconnect_mutex);
25
     os_init_mutex(&ftl->status_q.mutex);
26
 
27
-    if (os_semaphore_create(&ftl->status_q.sem, "/StatusQueue", O_CREAT, 0) < 0) {
28
+    if (os_semaphore_create(&ftl->status_q.sem, "/StatusQueue", O_CREAT, 0, FALSE) < 0) {
29
         ret_status = FTL_MALLOC_FAILURE;
30
         break;
31
     }
32
@@ -82,7 +87,7 @@
33
     ftl->video.height = 720;
34
 
35
     ftl->video.media_component.peak_kbps = params->peak_kbps;
36
-    ftl->ingest_hostname = _strdup(params->ingest_hostname);
37
+    ftl->param_ingest_hostname = _strdup(params->ingest_hostname);
38
 
39
     ftl->status_q.count = 0;
40
     ftl->status_q.head = NULL;
41
@@ -118,14 +123,16 @@
42
     return status;
43
   } while (0);
44
 
45
-  internal_ingest_disconnect(ftl);
46
+  if (os_trylock_mutex(&ftl->disconnect_mutex)) {
47
+    internal_ingest_disconnect(ftl);
48
+    os_unlock_mutex(&ftl->disconnect_mutex);
49
+  }
50
   
51
   return status;
52
 }
53
 
54
 FTL_API ftl_status_t ftl_ingest_get_status(ftl_handle_t *ftl_handle, ftl_status_msg_t *msg, int ms_timeout) {
55
   ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv;
56
-  ftl_status_t status = FTL_SUCCESS;
57
 
58
   if (ftl == NULL) {
59
     return FTL_NOT_INITIALIZED;
60
@@ -141,12 +148,12 @@
61
   ftl->video.media_component.peak_kbps = params->peak_kbps;
62
 
63
   if (params->ingest_hostname != NULL) {
64
-    if (ftl->ingest_hostname != NULL) {
65
-      free(ftl->ingest_hostname);
66
-      ftl->ingest_hostname = NULL;
67
+    if (ftl->param_ingest_hostname != NULL) {
68
+      free(ftl->param_ingest_hostname);
69
+      ftl->param_ingest_hostname = NULL;
70
     }
71
 
72
-    ftl->ingest_hostname = _strdup(params->ingest_hostname);
73
+    ftl->param_ingest_hostname = _strdup(params->ingest_hostname);
74
   }
75
 
76
   /* not going to update fps for the moment*/
77
@@ -201,7 +208,7 @@
78
 FTL_API int ftl_ingest_send_media(ftl_handle_t *ftl_handle, ftl_media_type_t media_type, uint8_t *data, int32_t len, int end_of_frame) {
79
 
80
   ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv;
81
-  int64_t dts_increment_usec, dts_usec;
82
+  int64_t dts_increment_usec, dts_usec = 0;
83
 
84
   if (media_type == FTL_AUDIO_DATA) {
85
     dts_usec = ftl->audio.dts_usec;
86
@@ -316,6 +323,10 @@
87
       free(ftl->ingest_hostname);
88
     }
89
 
90
+  if (ftl->param_ingest_hostname != NULL) {
91
+    free(ftl->param_ingest_hostname);
92
+  }
93
+
94
     free(ftl);
95
   }
96
 
97
@@ -324,14 +335,13 @@
98
 
99
 FTL_API ftl_status_t ftl_ingest_destroy(ftl_handle_t *ftl_handle){
100
   ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv;
101
-  ftl_status_t status = FTL_SUCCESS;
102
 
103
   ftl_handle->priv = NULL;
104
 
105
   return internal_ftl_ingest_destroy(ftl);
106
 }
107
 
108
-char* ftl_status_code_to_string(ftl_status_t status) {
109
+FTL_API char* ftl_status_code_to_string(ftl_status_t status) {
110
 
111
   switch (status) {
112
   case FTL_SUCCESS:
113
@@ -406,8 +416,7 @@
114
 }
115
 
116
 BOOL _get_chan_id_and_key(const char *stream_key, uint32_t *chan_id, char *key) {
117
-  size_t len;
118
-  int i;
119
+  size_t len, i = 0;
120
   
121
   len = strlen(stream_key);
122
   for (i = 0; i != len; i++) {
123
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl.h Changed
105
 
1
@@ -28,10 +28,14 @@
2
 #include <stdint.h>
3
 
4
 #ifdef _WIN32
5
-#  ifdef __FTL_INTERNAL
6
-#    define FTL_API __declspec(dllexport)
7
+#  ifdef FTL_STATIC_COMPILE
8
+#    define FTL_API
9
 #  else
10
-#    define FTL_API __declspec(dllimport)
11
+#    ifdef __FTL_INTERNAL
12
+#      define FTL_API __declspec(dllexport)
13
+#    else
14
+#      define FTL_API __declspec(dllimport)
15
+#    endif
16
 #  endif
17
 #else
18
 #  define FTL_API
19
@@ -174,7 +178,8 @@
20
   FTL_STATUS_VIDEO,
21
   FTL_STATUS_AUDIO,
22
   FTL_STATUS_FRAMES_DROPPED,
23
-  FTL_STATUS_NETWORK
24
+  FTL_STATUS_NETWORK,
25
+  FTL_BITRATE_CHANGED
26
 } ftl_status_types_t;
27
 
28
 typedef enum {
29
@@ -233,16 +238,47 @@
30
   int max_frame_size;
31
 }ftl_video_frame_stats_msg_t;
32
 
33
+typedef enum
34
+{
35
+    FTL_BITRATE_DECREASED,
36
+    FTL_BITRATE_INCREASED,
37
+    FTL_BITRATE_STABILIZED
38
+}ftl_bitrate_changed_type_t;
39
+
40
+typedef enum
41
+{
42
+    FTL_BANDWIDTH_CONSTRAINED,
43
+    FTL_UPGRADE_EXCESSIVE,
44
+    FTL_BANDWIDTH_AVAILABLE,
45
+    FTL_STABILIZE_ON_LOWER_BITRATE,
46
+    FTL_STABILIZE_ON_ORIGINAL_BITRATE,
47
+} ftl_bitrate_changed_reason_t;
48
+
49
+typedef struct
50
+{
51
+    ftl_bitrate_changed_type_t bitrate_changed_type;
52
+    ftl_bitrate_changed_reason_t bitrate_changed_reason;
53
+    uint64_t current_encoding_bitrate;
54
+    uint64_t previous_encoding_bitrate;
55
+    float nacks_to_frames_ratio;
56
+    float avg_rtt;
57
+    uint64_t avg_frames_dropped;
58
+    float queue_fullness;
59
+} ftl_bitrate_changed_msg_t;
60
+
61
 /*status messages*/
62
-typedef struct {
63
-  ftl_status_types_t type;
64
-  union {
65
-    ftl_status_log_msg_t log;
66
-    ftl_status_event_msg_t event;
67
-    ftl_packet_stats_msg_t pkt_stats;
68
-    ftl_packet_stats_instant_msg_t ipkt_stats;
69
-    ftl_video_frame_stats_msg_t video_stats;
70
-  } msg;
71
+typedef struct
72
+{
73
+    ftl_status_types_t type;
74
+    union
75
+    {
76
+        ftl_status_log_msg_t log;
77
+        ftl_status_event_msg_t event;
78
+        ftl_packet_stats_msg_t pkt_stats;
79
+        ftl_packet_stats_instant_msg_t ipkt_stats;
80
+        ftl_video_frame_stats_msg_t video_stats;
81
+        ftl_bitrate_changed_msg_t bitrate_changed_msg;
82
+    } msg;
83
 }ftl_status_msg_t;
84
 
85
 /*!
86
@@ -285,8 +321,16 @@
87
 
88
 FTL_API char* ftl_status_code_to_string(ftl_status_t status);
89
 
90
-FTL_API ftl_status_t find_closest_available_ingest(const char* ingestIps[], int ingestsCount, char* bestIngestIpComputed);
91
+FTL_API ftl_status_t ftl_get_video_stats(ftl_handle_t* handle, uint64_t* frames_sent, uint64_t* nacks_received, uint64_t* rtt_recorded, uint64_t* frames_dropped, float* queue_fullness);
92
+
93
+FTL_API ftl_status_t ftl_adaptive_bitrate_thread(
94
+    ftl_handle_t* ftl_handle,
95
+    void* context,
96
+    int(*change_bitrate_callback)(void*, uint64_t),
97
+    uint64_t initial_encoding_bitrate,
98
+    uint64_t min_encoding_bitrate,
99
+    uint64_t max_encoding_bitrate
100
+);
101
 
102
-FTL_API ftl_status_t ftl_get_video_stats(ftl_handle_t* handle, uint64_t* frames_sent, uint64_t* nacks_received);
103
 
104
 #endif // __FTL_H
105
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_helpers.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_helpers.c Changed
60
 
1
@@ -261,34 +261,39 @@
2
   return retval;
3
 }
4
 
5
-ftl_status_t _set_ingest_ip(ftl_stream_configuration_private_t *ftl) {
6
-  char *ingest_ip = NULL;
7
+ftl_status_t _set_ingest_hostname(ftl_stream_configuration_private_t *ftl) {
8
+
9
   ftl_status_t ret_status = FTL_SUCCESS;
10
 
11
   do {
12
-    if (!isdigit(ftl->ingest_hostname[0])) {
13
 #ifndef DISABLE_AUTO_INGEST
14
-      if (strcmp(ftl->ingest_hostname, "auto") == 0) {
15
-        ingest_ip = ingest_find_best(ftl);
16
+      if (strcmp(ftl->param_ingest_hostname, "auto") == 0) {
17
+      ftl->ingest_hostname = ingest_find_best(ftl);
18
       }
19
       else
20
 #endif
21
-      {
22
-        ingest_ip = ingest_get_ip(ftl, ftl->ingest_hostname);
23
-      }
24
+    ftl->ingest_hostname = _strdup(ftl->param_ingest_hostname);
25
+  } while (0);
26
 
27
-      if (ingest_ip == NULL) {
28
-        ret_status = FTL_DNS_FAILURE;
29
-        break;
30
-      }
31
-    }
32
-    else {
33
-      ingest_ip = _strdup(ftl->ingest_hostname);
34
+  return ret_status;
35
+}
36
+
37
+int _get_remote_ip(struct sockaddr *addr, size_t addrlen, char *remote_ip, size_t ip_len) {
38
+  if (addr->sa_family == AF_INET)
39
+  {
40
+    struct sockaddr_in *ipv4_addr = (struct sockaddr_in *)addr;
41
+
42
+    if (inet_ntop(AF_INET, &ipv4_addr->sin_addr.s_addr, remote_ip, ip_len) == NULL) {
43
+      return -1;
44
     }
45
+  }
46
+  else if (addr->sa_family == AF_INET6) {
47
+    struct sockaddr_in6 *ipv6_addr = (struct sockaddr_in6 *)addr;
48
 
49
-    strcpy_s(ftl->ingest_ip, sizeof(ftl->ingest_ip), ingest_ip);
50
-    free(ingest_ip);
51
-  } while (0);
52
+    if (inet_ntop(AF_INET6, &ipv6_addr->sin6_addr.s6_addr, remote_ip, ip_len) == NULL) {
53
+      return -1;
54
+    }
55
+  }
56
 
57
-  return ret_status;
58
+  return 0;
59
 }
60
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_private.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_private.h Changed
181
 
1
@@ -58,6 +58,8 @@
2
 #define SOCKET_RECV_TIMEOUT_MS 5000
3
 #define SOCKET_SEND_TIMEOUT_MS 1000
4
 #define KEEPALIVE_FREQUENCY_MS 5000
5
+#define KEEPALIVE_SEND_WARN_TOLERANCE_MS 1000
6
+#define STATUS_THREAD_SLEEP_TIME_MS 500
7
 #define MAX_PACKET_BUFFER 1500  //Max length of buffer
8
 #define MAX_MTU 1392
9
 #define FTL_UDP_MEDIA_PORT 8082   //legacy port
10
@@ -71,16 +73,58 @@
11
 #define VIDEO_RTP_TS_CLOCK_HZ 90000
12
 #define AUDIO_SAMPLE_RATE 48000
13
 #define AUDIO_PACKET_DURATION_MS 20
14
-#define IPV4_ADDR_ASCII_LEN INET_ADDRSTRLEN 
15
+#define IPVX_ADDR_ASCII_LEN INET6_ADDRSTRLEN
16
 #define INGEST_LIST_URI "https://mixer.com/api/v1/ingests/best"
17
 #define INGEST_LOAD_PORT 8079
18
 #define INGEST_PING_PORT 8079
19
 #define PEAK_BITRATE_KBPS 10000 /*if not supplied this is the peak from the perspective of the send buffer*/
20
 #define PING_TX_INTERVAL_MS 25
21
-#define SENDER_REPORT_TX_INTERVAL_MS 5000
22
+#define SENDER_REPORT_TX_INTERVAL_MS 1000
23
 #define PING_PTYPE 250
24
 #define SENDER_REPORT_PTYPE 200
25
 
26
+ // Adaptive bitrate constants
27
+
28
+ // If the ratio of nacks received to packets sent is greater than the following value, we request a bitrate downgrade.
29
+#define MIN_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FOR_BITRATE_DOWNGRADE 0.1
30
+
31
+ // Duration at which we capture stream stats , i.e frames sent and nacks received
32
+#define STREAM_STATS_CAPTURE_MS 1000
33
+
34
+ // Duration over which we evaluate whether we need to downgrade/upgrade bitrate. Note that we 
35
+ // look at stats over the last c_ulBwCheckDurationMs milliseconds, every c_ulStreamStatsCaptureMs milliseconds.
36
+#define BW_CHECK_DURATION_MS 5000
37
+
38
+ // Interval to wait for bw test after we update bitrate.
39
+#define BITRATE_CHANGED_COOLDOWN_INTERVAL_MS 10000
40
+
41
+ // Percentage to reduce the bitrate to if bandwidth seems too constrained
42
+#define BW_INSUFFICIENT_BITRATE_DOWNGRADE_PERCENTAGE 50
43
+
44
+ // Percentange to reduce the bitrate to if bw upgrade was too excessive
45
+#define REVERT_TO_STABLE_BITRATE_DOWNGRADE_PERCENTAGE 80
46
+
47
+ // Percentage to increase bitrate by if conditions look ideal
48
+#define BW_IDEAL_BITRATE_UPGRADE_BPS 256000;
49
+
50
+ // If ratio of nacks received to packets sent is below the following value bitrate update can be requested
51
+#define MAX_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FORBITRATE_UPGRADE 0.01
52
+
53
+ // If bandwidth is constrained within MaxBitrateUpgradeExcessiveSeconds after bitrate update, revert to last stable bitrate.
54
+#define MAX_MS_TO_DEEM_UPGRADE_EXCESSIVE 60000
55
+
56
+#define MAX_AVG_RTT_TO_DEEM_BW_STABLE 100
57
+
58
+#define MAX_QUEUE_FULLNESS_TO_DEEM_BW_STABLE 0.1
59
+
60
+#define MIN_QUEUE_FULLNESS_TO_DEEM_BW_CONSTRAINED 0.3
61
+
62
+#define MIN_AVG_RTT_TO_DEEM_BW_CONSTRAINED 300
63
+ // If bitrate upgrade was excessive we freeze bitrate upgrade for the next c_bitrateUpgradeFreezeTimeMs milliseconds.
64
+#define BITRATE_UPGRADE_FREEZE_TIME_MS 600000 // 10*60*1000
65
+
66
+#define MAX_STAT_SIZE 5
67
+
68
 #ifndef _WIN32
69
 #define strncpy_s(dst, dstsz, src, cnt) strncpy(dst, src, cnt)
70
 #define sprintf_s(buf, bufsz, fmt, ...) sprintf(buf, fmt, __VA_ARGS__)
71
@@ -110,6 +154,7 @@
72
   FTL_TX_THRD = 0x0080,
73
   FTL_DISABLE_TX_PING_PKTS = 0x0100,
74
   FTL_SPEED_TEST = 0x0200,
75
+  FTL_BITRATE_THRD = 0x0400,
76
   FTL_DISCONNECT_IN_PROGRESS = 0x1000,
77
   FTL_DISABLE_TX_SENDER_REPORT = 0x2000
78
 }ftl_state_t;
79
@@ -151,6 +196,7 @@
80
   int first;/*first packet in frame*/
81
   int last; /*last packet in frame*/
82
   OS_MUTEX mutex;
83
+  BOOL isPartOfIframe;
84
 }nack_slot_t;
85
 
86
 typedef struct _ping_pkt_t {
87
@@ -159,13 +205,13 @@
88
 }ping_pkt_t;
89
 
90
 typedef struct _senderReport_pkt_t {
91
-   uint32_t header;
92
-   uint32_t ssrc;
93
-   uint32_t ntpTimestampHigh;
94
-   uint32_t ntpTimestampLow;
95
-   uint32_t rtpTimestamp;
96
-   uint32_t senderPacketCount;
97
-   uint32_t senderOctetCount;
98
+  uint32_t header;
99
+  uint32_t ssrc;
100
+  uint32_t ntpTimestampHigh;
101
+  uint32_t ntpTimestampLow;
102
+  uint32_t rtpTimestamp;
103
+  uint32_t senderPacketCount;
104
+  uint32_t senderOctetCount;
105
 }senderReport_pkt_t;
106
 
107
 typedef struct {
108
@@ -244,7 +290,8 @@
109
 } ftl_video_component_t;
110
 
111
 typedef struct {
112
-  struct sockaddr_in server_addr;
113
+  size_t ingest_addrlen;
114
+  struct sockaddr *ingest_addr;
115
   SOCKET media_socket;
116
   OS_MUTEX mutex;
117
   int assigned_port;
118
@@ -260,19 +307,32 @@
119
 } ftl_media_config_t;
120
 
121
 typedef struct _ftl_ingest_t {
122
-  char name[30];
123
-  char ip[IPV4_ADDR_ASCII_LEN];
124
+  char *name;
125
+  char *ip;
126
+  char *hostname;
127
   int rtt;
128
   struct _ftl_ingest_t *next;
129
 }ftl_ingest_t;
130
 
131
+typedef struct
132
+{
133
+    ftl_handle_t* handle;
134
+    BOOL(*change_bitrate_callback)(void*, uint64_t);
135
+    void* context;
136
+    uint64_t initial_encoding_bitrate;
137
+    uint64_t max_encoding_bitrate;
138
+    uint64_t min_encoding_bitrate;
139
+} ftl_adaptive_bitrate_thread_params_t;
140
+
141
 typedef struct {
142
   SOCKET ingest_socket;
143
   ftl_state_t state;
144
   OS_MUTEX state_mutex;
145
   OS_MUTEX disconnect_mutex;
146
+  char *param_ingest_hostname;
147
   char *ingest_hostname;
148
-  char ingest_ip[IPV4_ADDR_ASCII_LEN];//ipv4 only
149
+  char *ingest_ip;
150
+  short socket_family;
151
   uint32_t channel_id;
152
   char *key;
153
   char hmacBuffer[512];
154
@@ -281,8 +341,10 @@
155
   char vendor_version[20];
156
   OS_THREAD_HANDLE connection_thread;
157
   OS_THREAD_HANDLE keepalive_thread;
158
+  OS_THREAD_HANDLE bitrate_monitor_thread;
159
   OS_SEMAPHORE connection_thread_shutdown;
160
   OS_SEMAPHORE keepalive_thread_shutdown;
161
+  OS_SEMAPHORE bitrate_thread_shutdown;
162
   ftl_media_config_t media;
163
   ftl_audio_component_t audio;
164
   ftl_video_component_t video;
165
@@ -361,13 +423,13 @@
166
 BOOL is_legacy_ingest(ftl_stream_configuration_private_t *ftl);
167
 ftl_status_t dequeue_status_msg(ftl_stream_configuration_private_t *ftl, ftl_status_msg_t *stats_msg, int ms_timeout);
168
 ftl_status_t enqueue_status_msg(ftl_stream_configuration_private_t *ftl, ftl_status_msg_t *stats_msg);
169
-ftl_status_t _set_ingest_ip(ftl_stream_configuration_private_t *ftl);
170
+ftl_status_t _set_ingest_hostname(ftl_stream_configuration_private_t *ftl);
171
+int _get_remote_ip(struct sockaddr *addr, size_t addrlen, char *remote_ip, size_t ip_len);
172
 
173
 ftl_status_t _init_control_connection(ftl_stream_configuration_private_t *ftl);
174
 ftl_status_t _ingest_connect(ftl_stream_configuration_private_t *stream_config);
175
 ftl_status_t _ingest_disconnect(ftl_stream_configuration_private_t *stream_config);
176
 char * ingest_find_best(ftl_stream_configuration_private_t *ftl);
177
-char * ingest_get_ip(ftl_stream_configuration_private_t *ftl, char *host);
178
 void ingest_release(ftl_stream_configuration_private_t *ftl);
179
 
180
 ftl_status_t media_init(ftl_stream_configuration_private_t *ftl);
181
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.c Changed
48
 
1
@@ -26,6 +26,7 @@
2
 * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
3
 */
4
 
5
+#include <stddef.h>
6
 #include "gettimeofday.h"
7
 
8
 #define NSEC_IN_SEC 1000000000
9
@@ -98,10 +99,10 @@
10
   differenceUs = timeval_subtract_to_us(end, start);
11
 
12
   // Get the number of seconds
13
-  result->tv_sec = USEC_TO_SEC(differenceUs);
14
+  result->tv_sec = (long)USEC_TO_SEC(differenceUs);
15
   
16
   // Put the remainder NS into the second value.
17
-  result->tv_usec = differenceUs - SEC_TO_USEC(result->tv_sec);
18
+  result->tv_usec = (long)(differenceUs - SEC_TO_USEC(result->tv_sec));
19
 
20
   /* Return 1 if result is negative. */
21
   return differenceUs < 0;
22
@@ -161,13 +162,20 @@
23
 uint64_t timeval_to_ntp(struct timeval * tv) {
24
   uint64_t ntpts;
25
 
26
-  ntpts = (((uint64_t)tv->tv_sec + 2208988800u) << 32) + ((uint32_t)tv->tv_usec * 4294.967296);
27
+  ntpts = (uint64_t)((((uint64_t)tv->tv_sec + 2208988800u) << 32) + ((uint32_t)tv->tv_usec * 4294.967296));
28
 
29
   return (ntpts);
30
 }
31
 
32
 void us_to_timeval(struct timeval *outputTimeVal, const int64_t inputTimeUs)
33
 {
34
-  outputTimeVal->tv_sec = USEC_TO_SEC(inputTimeUs);
35
-  outputTimeVal->tv_usec = inputTimeUs - SEC_TO_USEC(outputTimeVal->tv_sec);
36
-}
37
\ No newline at end of file
38
+  outputTimeVal->tv_sec = (long)USEC_TO_SEC(inputTimeUs);
39
+  outputTimeVal->tv_usec = (long)(inputTimeUs - SEC_TO_USEC(outputTimeVal->tv_sec));
40
+}
41
+
42
+int64_t get_ms_elapsed_since(struct timeval *tv)
43
+{
44
+    struct timeval now;
45
+    gettimeofday(&now, NULL);
46
+    return timeval_subtract_to_ms(&now, tv);
47
+}
48
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.h Changed
8
 
1
@@ -20,5 +20,6 @@
2
 uint64_t timeval_to_us(struct timeval *tv);
3
 uint64_t timeval_to_ntp(struct timeval *tv);
4
 void us_to_timeval(struct timeval *outputTimeVal, const int64_t inputTimeUs);
5
+int64_t get_ms_elapsed_since(struct timeval *tv);
6
 
7
 #endif // __GETTIMEOFDAY_H
8
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/handshake.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/handshake.c Changed
378
 
1
@@ -35,8 +35,6 @@
2
 ftl_status_t _log_response(ftl_stream_configuration_private_t *ftl, int response_code);
3
 
4
 ftl_status_t _init_control_connection(ftl_stream_configuration_private_t *ftl) {
5
-  ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN;
6
-
7
   int err = 0;
8
   SOCKET sock = 0;
9
   struct addrinfo hints;
10
@@ -47,6 +45,8 @@
11
   hints.ai_socktype = SOCK_STREAM;
12
   hints.ai_protocol = 0;
13
 
14
+  char ingest_ip[IPVX_ADDR_ASCII_LEN];
15
+
16
   struct addrinfo* resolved_names = 0;
17
   struct addrinfo* p = 0;
18
 
19
@@ -59,13 +59,13 @@
20
 
21
   snprintf(ingest_port_str, 10, "%d", ingest_port);
22
 
23
-  if ((retval = _set_ingest_ip(ftl)) != FTL_SUCCESS) {
24
+  if ((retval = _set_ingest_hostname(ftl)) != FTL_SUCCESS) {
25
     return retval;
26
   }
27
-
28
-  err = getaddrinfo(ftl->ingest_ip, ingest_port_str, &hints, &resolved_names);
29
+  
30
+  err = getaddrinfo(ftl->ingest_hostname, ingest_port_str, &hints, &resolved_names);
31
   if (err != 0) {
32
-    FTL_LOG(ftl, FTL_LOG_ERROR, "getaddrinfo failed to look up ingest address %s.", ftl->ingest_ip);
33
+    FTL_LOG(ftl, FTL_LOG_ERROR, "getaddrinfo failed to look up ingest address %s.", ftl->ingest_hostname);
34
     FTL_LOG(ftl, FTL_LOG_ERROR, "gai error was: %s", gai_strerror(err));
35
     return FTL_DNS_FAILURE;
36
   }
37
@@ -79,6 +79,22 @@
38
       continue;
39
     }
40
 
41
+  if (p->ai_family == AF_INET) {
42
+    struct sockaddr_in *ipv4_addr = (struct sockaddr_in *)p->ai_addr;
43
+    inet_ntop(p->ai_family, &ipv4_addr->sin_addr, ingest_ip, sizeof(ingest_ip));
44
+  }
45
+  else if (p->ai_family == AF_INET6) {
46
+    struct sockaddr_in6 *ipv6_addr = (struct sockaddr_in6 *)p->ai_addr;
47
+    inet_ntop(p->ai_family, &ipv6_addr->sin6_addr, ingest_ip, sizeof(ingest_ip));
48
+  }
49
+  else {
50
+  continue;
51
+  }
52
+
53
+  FTL_LOG(ftl, FTL_LOG_DEBUG, "Got IP: %s\n", ingest_ip);
54
+  ftl->ingest_ip = _strdup(ingest_ip);
55
+  ftl->socket_family = p->ai_family;
56
+
57
     /* Go for broke */
58
     if (connect(sock, p->ai_addr, (int)p->ai_addrlen) == -1) {
59
       FTL_LOG(ftl, FTL_LOG_DEBUG, "failed to connect on candidate, error: %s", get_socket_error());
60
@@ -120,8 +136,6 @@
61
 
62
 ftl_status_t _ingest_connect(ftl_stream_configuration_private_t *ftl) {
63
   ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN;
64
-
65
-  int err = 0;
66
   char response[MAX_INGEST_COMMAND_LEN];
67
 
68
   if (ftl_get_state(ftl, FTL_CONNECTED)) {
69
@@ -213,12 +227,12 @@
70
 
71
     ftl_set_state(ftl, FTL_CONNECTED);
72
 
73
-    if (os_semaphore_create(&ftl->connection_thread_shutdown, "/ConnectionThreadShutdown", O_CREAT, 0) < 0) {
74
+    if (os_semaphore_create(&ftl->connection_thread_shutdown, "/ConnectionThreadShutdown", O_CREAT, 0, FALSE) < 0) {
75
         response_code = FTL_MALLOC_FAILURE;
76
         break;
77
     }
78
 
79
-    if (os_semaphore_create(&ftl->keepalive_thread_shutdown, "/KeepAliveThreadShutdown", O_CREAT, 0) < 0) {
80
+    if (os_semaphore_create(&ftl->keepalive_thread_shutdown, "/KeepAliveThreadShutdown", O_CREAT, 0, FALSE) < 0) {
81
         response_code = FTL_MALLOC_FAILURE;
82
         break;
83
     }
84
@@ -249,46 +263,54 @@
85
 
86
 ftl_status_t _ingest_disconnect(ftl_stream_configuration_private_t *ftl) {
87
 
88
-  ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN;
89
-  char response[MAX_INGEST_COMMAND_LEN];
90
+    ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN;
91
+    char response[MAX_INGEST_COMMAND_LEN];
92
 
93
-  if (ftl_get_state(ftl, FTL_KEEPALIVE_THRD)) {
94
-    ftl_clear_state(ftl, FTL_KEEPALIVE_THRD);
95
-    os_semaphore_post(&ftl->keepalive_thread_shutdown);
96
-    os_wait_thread(ftl->keepalive_thread);
97
-    os_destroy_thread(ftl->keepalive_thread);
98
-    os_semaphore_delete(&ftl->keepalive_thread_shutdown);
99
-  }
100
+    if (ftl_get_state(ftl, FTL_KEEPALIVE_THRD)) {
101
+        ftl_clear_state(ftl, FTL_KEEPALIVE_THRD);
102
+        os_semaphore_post(&ftl->keepalive_thread_shutdown);
103
+        os_wait_thread(ftl->keepalive_thread);
104
+        os_destroy_thread(ftl->keepalive_thread);
105
+        os_semaphore_delete(&ftl->keepalive_thread_shutdown);
106
+    }
107
 
108
-  if (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) {
109
-    ftl_clear_state(ftl, FTL_CXN_STATUS_THRD);
110
-    os_semaphore_post(&ftl->connection_thread_shutdown);
111
-    os_wait_thread(ftl->connection_thread);
112
-    os_destroy_thread(ftl->connection_thread);
113
-    os_semaphore_delete(&ftl->connection_thread_shutdown);
114
-  }
115
+    if (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) {
116
+        ftl_clear_state(ftl, FTL_CXN_STATUS_THRD);
117
+        os_semaphore_post(&ftl->connection_thread_shutdown);
118
+        os_wait_thread(ftl->connection_thread);
119
+        os_destroy_thread(ftl->connection_thread);
120
+        os_semaphore_delete(&ftl->connection_thread_shutdown);
121
+    }
122
 
123
-  if (ftl_get_state(ftl, FTL_CONNECTED)) {
124
+    if (ftl_get_state(ftl, FTL_BITRATE_THRD))
125
+    {
126
+        ftl_clear_state(ftl, FTL_BITRATE_THRD);
127
+        os_semaphore_post(&ftl->bitrate_thread_shutdown);
128
+        os_wait_thread(ftl->bitrate_monitor_thread);
129
+        os_destroy_thread(ftl->bitrate_monitor_thread);
130
+        os_semaphore_delete(&ftl->bitrate_thread_shutdown);
131
+    }
132
 
133
-    ftl_clear_state(ftl, FTL_CONNECTED);
134
+    if (ftl_get_state(ftl, FTL_CONNECTED)) {
135
 
136
-    FTL_LOG(ftl, FTL_LOG_INFO, "light-saber disconnect\n");
137
-    if ((response_code = _ftl_send_command(ftl, FALSE, response, sizeof(response), "DISCONNECT", ftl->channel_id)) != FTL_INGEST_RESP_OK) {
138
-      FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest Disconnect failed with %d (%s)\n", response_code, response);
139
+        ftl_clear_state(ftl, FTL_CONNECTED);
140
+
141
+        FTL_LOG(ftl, FTL_LOG_INFO, "light-saber disconnect\n");
142
+        if ((response_code = _ftl_send_command(ftl, FALSE, response, sizeof(response), "DISCONNECT", ftl->channel_id)) != FTL_INGEST_RESP_OK) {
143
+            FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest Disconnect failed with %d (%s)\n", response_code, response);
144
+        }
145
     }
146
-  }
147
 
148
-  if (ftl->ingest_socket > 0) {
149
-    close_socket(ftl->ingest_socket);
150
-    ftl->ingest_socket = 0;
151
-  }
152
-  
153
-  return FTL_SUCCESS;
154
+    if (ftl->ingest_socket > 0) {
155
+        close_socket(ftl->ingest_socket);
156
+        ftl->ingest_socket = 0;
157
+    }
158
+
159
+    return FTL_SUCCESS;
160
 }
161
 
162
 static ftl_response_code_t _ftl_get_response(ftl_stream_configuration_private_t *ftl, char *response_buf, int response_len){
163
   int len;
164
-  int resp_code = FTL_INGEST_RESP_OK;
165
   memset(response_buf, 0, response_len);
166
   len = recv_all(ftl->ingest_socket, response_buf, response_len, '\n');
167
 
168
@@ -322,7 +344,6 @@
169
 static ftl_response_code_t _ftl_send_command(ftl_stream_configuration_private_t *ftl, BOOL need_response, char *response_buf, int response_len, const char *cmd_fmt, ...) {
170
   int resp_code = FTL_INGEST_RESP_OK;
171
   va_list valist;
172
-  double sum = 0.0;
173
   char *buf = NULL;
174
   int len;
175
   int buflen = MAX_INGEST_COMMAND_LEN * sizeof(char);
176
@@ -376,6 +397,10 @@
177
 {
178
   ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)data;
179
   ftl_response_code_t response_code;
180
+  struct timeval last_send_time, now;
181
+  int64_t ms_since_send = 0;
182
+
183
+  gettimeofday(&last_send_time, NULL);
184
 
185
   while (ftl_get_state(ftl, FTL_KEEPALIVE_THRD)) {
186
     os_semaphore_pend(&ftl->keepalive_thread_shutdown, KEEPALIVE_FREQUENCY_MS);
187
@@ -385,6 +410,16 @@
188
       break;
189
     }
190
 
191
+    // Check how long it has been since we sent a ping last.
192
+    gettimeofday(&now, NULL);
193
+    ms_since_send = timeval_subtract_to_ms(&now, &last_send_time);
194
+    if (ms_since_send > KEEPALIVE_FREQUENCY_MS + KEEPALIVE_SEND_WARN_TOLERANCE_MS)
195
+    {
196
+       FTL_LOG(ftl, FTL_LOG_INFO, "Warning, ping time tolerance warning. Time since last ping %d ms", ms_since_send);
197
+    }
198
+    gettimeofday(&last_send_time, NULL);
199
+
200
+    // Send the ping to ingest now.
201
     if ((response_code = _ftl_send_command(ftl, FALSE, NULL, 0, "PING %d", ftl->channel_id)) != FTL_INGEST_RESP_OK) {
202
       FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest ping failed with %d\n", response_code);
203
     }
204
@@ -397,73 +432,108 @@
205
 
206
 OS_THREAD_ROUTINE connection_status_thread(void *data)
207
 {
208
-  ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)data;
209
-  char buf[1024];
210
-  ftl_status_msg_t status;
211
-  struct timeval last_ping, now;
212
-  int ms_since_ping = 0;
213
-  int keepalive_is_late = KEEPALIVE_FREQUENCY_MS + KEEPALIVE_FREQUENCY_MS; // Add a 5s buffer to the wait time
214
-
215
-  gettimeofday(&last_ping, NULL);
216
+    ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)data;
217
+    char buf[1024];
218
+    ftl_status_msg_t status;
219
+    struct timeval last_ping, now;
220
+    int64_t ms_since_ping = 0;
221
+
222
+    // We ping every 5 seconds, but don't timeout the connection until 30 seconds has passed
223
+    // without hearing anything back from the ingest. This time is high, but some some poor networks
224
+    // this can happen.
225
+    int keepalive_is_late = 6 * KEEPALIVE_FREQUENCY_MS; 
226
+
227
+    gettimeofday(&last_ping, NULL);
228
+
229
+    // Loop while the connection status thread should be alive.
230
+    while (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) {
231
+
232
+        // Wait on the shutdown event for at most STATUS_THREAD_SLEEP_TIME_MS
233
+        os_semaphore_pend(&ftl->connection_thread_shutdown, STATUS_THREAD_SLEEP_TIME_MS);
234
+        if (!ftl_get_state(ftl, FTL_CXN_STATUS_THRD))
235
+        {
236
+            break;
237
+        }
238
 
239
-  while (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) {
240
+        ftl_status_t error_code = FTL_SUCCESS;
241
 
242
-    os_semaphore_pend(&ftl->connection_thread_shutdown, 500);
243
-    if (!ftl_get_state(ftl, FTL_CXN_STATUS_THRD))
244
-    {
245
-      break;
246
-    }
247
+        // Check if there is any data for us to consume.
248
+        unsigned long bytesAvailable = 0;
249
+        int ret = get_socket_bytes_available(ftl->ingest_socket, &bytesAvailable);
250
+        if (ret < 0)
251
+        {
252
+            FTL_LOG(ftl, FTL_LOG_ERROR, "Failed to call get_socket_bytes_available, %s", get_socket_error());
253
+            error_code = FTL_UNKNOWN_ERROR_CODE;
254
+        }
255
+        else
256
+        {
257
+            // If we have data waiting, consume it now.
258
+            if (bytesAvailable > 0)
259
+            {
260
+                int resp_code = _ftl_get_response(ftl, buf, sizeof(buf));
261
+
262
+                // If we got a ping response, mark the time and loop again.
263
+                if (resp_code  == FTL_INGEST_RESP_PING) {
264
+                    gettimeofday(&last_ping, NULL);
265
+                    continue;
266
+                }
267
+
268
+                // If it's anything else, it's an error.
269
+                error_code = _log_response(ftl, resp_code);
270
+            }
271
+        }
272
 
273
-    int ret = recv(ftl->ingest_socket, buf, sizeof(buf), MSG_PEEK);
274
+        // If we don't have an error, check if the ping has timed out.
275
+        if (error_code == FTL_SUCCESS)
276
+        {
277
+            // Get the current time and figure out the time since the last ping was recieved.
278
+            gettimeofday(&now, NULL);
279
+            ms_since_ping = timeval_subtract_to_ms(&now, &last_ping);
280
+            if (ms_since_ping < keepalive_is_late) {
281
+                continue;
282
+            }
283
+
284
+            // Otherwise, we havn't gotten the ping in too long.
285
+            FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest ping timeout, we haven't gotten a ping in %d ms.", ms_since_ping);
286
+            error_code = FTL_NO_PING_RESPONSE;
287
+        }
288
 
289
-    gettimeofday(&now, NULL);
290
-    ms_since_ping = timeval_subtract_to_ms(&now, &last_ping);
291
+        // At this point something is wrong, and we are going to shutdown the connection. Do one more check that we
292
+        // should still be running.
293
+        if (!ftl_get_state(ftl, FTL_CXN_STATUS_THRD))
294
+        {
295
+            break;
296
+        }
297
+        FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest connection has dropped: error code %d\n", error_code);
298
 
299
-    if (ret == 0 && ftl_get_state(ftl, FTL_CXN_STATUS_THRD) || ret > 0 || ms_since_ping > keepalive_is_late) {
300
-      ftl_status_t error_code = FTL_SUCCESS;
301
+        // Clear the state that this thread is running. If we don't do this we will dead lock
302
+        // in the internal_ingest_disconnect.
303
+        ftl_clear_state(ftl, FTL_CXN_STATUS_THRD);
304
 
305
-      if (ret > 0) {
306
-        int resp_code;
307
-        if ((resp_code = _ftl_get_response(ftl, buf, sizeof(buf))) == FTL_INGEST_RESP_PING) {
308
-          gettimeofday(&last_ping, NULL);
309
-          continue;
310
+        // Shutdown the ingest connection.
311
+        if (os_trylock_mutex(&ftl->disconnect_mutex)) {
312
+            internal_ingest_disconnect(ftl);
313
+            os_unlock_mutex(&ftl->disconnect_mutex);
314
         }
315
 
316
-        if (resp_code > 0) {
317
-          error_code = _log_response(ftl, resp_code);
318
+        // Fire an event indicating we shutdown.
319
+        status.type = FTL_STATUS_EVENT;
320
+        if (error_code == FTL_NO_MEDIA_TIMEOUT) {
321
+            status.msg.event.reason = FTL_STATUS_EVENT_REASON_NO_MEDIA;
322
         }
323
-      }
324
-
325
-      if (ms_since_ping > keepalive_is_late) {
326
-        error_code = FTL_NO_PING_RESPONSE;
327
-      }
328
-      
329
-      FTL_LOG(ftl, FTL_LOG_ERROR, "ingest connection has dropped: %s\n", get_socket_error());
330
-
331
-      ftl_clear_state(ftl, FTL_CXN_STATUS_THRD);
332
+        else {
333
+            status.msg.event.reason = FTL_STATUS_EVENT_REASON_UNKNOWN;
334
+        }
335
+        status.msg.event.type = FTL_STATUS_EVENT_TYPE_DISCONNECTED;
336
+        status.msg.event.error_code = error_code;
337
+        enqueue_status_msg(ftl, &status);
338
 
339
-      if (os_trylock_mutex(&ftl->disconnect_mutex)) {
340
-        internal_ingest_disconnect(ftl);
341
-        os_unlock_mutex(&ftl->disconnect_mutex);
342
-      }
343
-
344
-      status.type = FTL_STATUS_EVENT;
345
-      if (error_code == FTL_NO_MEDIA_TIMEOUT) {
346
-        status.msg.event.reason = FTL_STATUS_EVENT_REASON_NO_MEDIA;
347
-      }
348
-      else {
349
-        status.msg.event.reason = FTL_STATUS_EVENT_REASON_UNKNOWN;
350
-      }
351
-      status.msg.event.type = FTL_STATUS_EVENT_TYPE_DISCONNECTED;
352
-      status.msg.event.error_code = error_code;
353
-      enqueue_status_msg(ftl, &status);
354
-      break;
355
+        // Exit the loop.
356
+        break;     
357
     }
358
-  }
359
-
360
-  FTL_LOG(ftl, FTL_LOG_INFO, "Exited connection_status_thread\n");
361
 
362
-  return 0;
363
+    FTL_LOG(ftl, FTL_LOG_INFO, "Exited connection_status_thread");
364
+    return 0;
365
 }
366
 
367
 ftl_status_t _log_response(ftl_stream_configuration_private_t *ftl, int response_code){
368
@@ -522,6 +592,9 @@
369
     case FTL_INGEST_RESP_INTERNAL_SOCKET_TIMEOUT:
370
       FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest socket timeout.");
371
       return FTL_INGEST_SOCKET_TIMEOUT;
372
+    case FTL_INGEST_RESP_UNKNOWN:
373
+        FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest unknown response.");
374
+        return FTL_INTERNAL_ERROR;
375
   }    
376
 
377
   // TODO revert back
378
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/hmac/hmac.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/hmac/hmac.c Changed
26
 
1
@@ -17,7 +17,7 @@
2
   const char * key;
3
   if (keyLen > SHA512_BLOCK_SIZE) {
4
     Sha512Initialise(&ctx);
5
-    Sha512Update(&ctx, (void*)rawKey, keyLen);
6
+    Sha512Update(&ctx, (void*)rawKey, (uint32_t)keyLen);
7
     Sha512Finalise(&ctx, &computedHash);
8
 
9
     key = (const char *)computedHash.bytes;
10
@@ -32,7 +32,7 @@
11
   memset(oKeyPad, O_KEY_PAD, SHA512_BLOCK_SIZE);
12
   memset(iKeyPad, I_KEY_PAD, SHA512_BLOCK_SIZE);
13
 
14
-  int i;
15
+  size_t i = 0;
16
   for(i = 0; i < keyLen; i++) {
17
     oKeyPad[i] ^= key[i];
18
     iKeyPad[i] ^= key[i];
19
@@ -60,4 +60,4 @@
20
   memset(computedHash.bytes, 0, sizeof(computedHash.bytes));
21
 
22
   return SHA512_HEX_STRING_HASH_SIZE;
23
-}
24
\ No newline at end of file
25
+}
26
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ingest.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ingest.c Changed
316
 
1
@@ -14,47 +14,63 @@
2
     ftl_stream_configuration_private_t *ftl;
3
 }_tmp_ingest_thread_data_t;
4
 
5
-static int _ping_server(const char *ip, int port) {
6
+static int _ping_server(const char *hostname, int port) {
7
 
8
   SOCKET sock;
9
-  struct sockaddr_in server_addr;
10
-  unsigned char buf[sizeof(struct in_addr)];
11
-  uint8_t dummy[4];
12
+  struct addrinfo hints;
13
+  char dummy[4];
14
   struct timeval start, stop, delta;
15
   int retval = -1;
16
+  struct addrinfo* resolved_names = 0;
17
+  struct addrinfo* p = 0;
18
+  int err = 0;
19
+  int off = 0;
20
+
21
+  memset(&hints, 0, sizeof(hints));
22
+  hints.ai_family = PF_UNSPEC;
23
+  hints.ai_socktype = SOCK_DGRAM;
24
+  hints.ai_protocol = 0;
25
 
26
-  do {
27
-    if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
28
-    {
29
-      break;
30
-    }
31
+  int ingest_port = INGEST_PORT;
32
+  char port_str[10];
33
 
34
-    if (inet_pton(AF_INET, ip, buf) == 0) {
35
-      break;
36
-    }
37
+  snprintf(port_str, 10, "%d", port);
38
+  
39
+   err = getaddrinfo(hostname, port_str, &hints, &resolved_names);
40
+  if (err != 0) {
41
+    return FTL_DNS_FAILURE;
42
+  }
43
+  
44
+  do {
45
+    for (p = resolved_names; p != NULL; p = p->ai_next) {
46
+      sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol);
47
+      if (sock == -1) {
48
+        continue;
49
+      }
50
 
51
-    //Prepare the sockaddr_in structure
52
-    server_addr.sin_family = AF_INET;
53
-    memcpy((char *)&server_addr.sin_addr.s_addr, (char *)buf, sizeof(buf));
54
-    server_addr.sin_port = htons(port);
55
+      setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&off, sizeof(off));
56
+      set_socket_recv_timeout(sock, 500);
57
 
58
-    set_socket_recv_timeout(sock, 500);
59
+      gettimeofday(&start, NULL);
60
 
61
-    gettimeofday(&start, NULL);
62
+      if (sendto(sock, dummy, sizeof(dummy), 0, p->ai_addr, (int)p->ai_addrlen) == SOCKET_ERROR) {
63
+        printf("Sendto error: %s\n", get_socket_error());
64
+        break;
65
+      }
66
 
67
-    if (sendto(sock, dummy, sizeof(dummy), 0, (struct sockaddr*) &server_addr, sizeof(struct sockaddr_in)) == SOCKET_ERROR) {
68
-      break;
69
-    }
70
+      if (recv(sock, dummy, sizeof(dummy), 0) < 0) {
71
+        break;
72
+      }
73
 
74
-    if (recv(sock, dummy, sizeof(dummy), 0) < 0) {
75
-      break;
76
+      gettimeofday(&stop, NULL);
77
+      timeval_subtract(&delta, &stop, &start);
78
+      retval = (int)timeval_to_ms(&delta);
79
     }
80
-
81
-    gettimeofday(&stop, NULL);
82
-    timeval_subtract(&delta, &stop, &start);
83
-    retval = (int)timeval_to_ms(&delta);
84
   } while (0);
85
 
86
+  /* Free the resolved name struct */
87
+  freeaddrinfo(resolved_names);
88
+
89
   shutdown_socket(sock, SD_BOTH);
90
   close_socket(sock);
91
 
92
@@ -69,92 +85,13 @@
93
 
94
     ingest->rtt = 1000;
95
 
96
-    if ((ping = _ping_server(ingest->ip, INGEST_PING_PORT)) >= 0) {
97
+    if ((ping = _ping_server(ingest->hostname, INGEST_PING_PORT)) >= 0) {
98
         ingest->rtt = ping;
99
     }
100
 
101
     return 0;
102
 }
103
 
104
-ftl_status_t find_closest_available_ingest(const char* ingestIps[], int ingestsCount, char* bestIngestIpComputed)
105
-{
106
-    ftl_ingest_t* ingestElements;
107
-    int i;
108
-
109
-    if ((ingestElements = malloc(sizeof(ftl_ingest_t) * ingestsCount)) == NULL) {
110
-        return FTL_MALLOC_FAILURE;
111
-    }
112
-
113
-    for (i =0; i < ingestsCount; i++) {
114
-        strcpy_s(ingestElements[i].ip, sizeof(ingestElements[i].ip), ingestIps[i]);
115
-        ingestElements[i].rtt = 1000;
116
-        ingestElements[i].next = NULL;
117
-    }
118
-
119
-    OS_THREAD_HANDLE *handles;
120
-    _tmp_ingest_thread_data_t *data;
121
-
122
-    ftl_ingest_t *elmt, *best = NULL;
123
-    struct timeval start, stop, delta;
124
-
125
-    if ((handles = (OS_THREAD_HANDLE *)malloc(sizeof(OS_THREAD_HANDLE) * ingestsCount)) == NULL) {
126
-        free(ingestElements);
127
-        return FTL_MALLOC_FAILURE;
128
-    }
129
-
130
-    if ((data = (_tmp_ingest_thread_data_t *)malloc(sizeof(_tmp_ingest_thread_data_t) * ingestsCount)) == NULL) {
131
-        free(ingestElements);
132
-        free(handles);
133
-        return FTL_MALLOC_FAILURE;
134
-    }
135
-
136
-    gettimeofday(&start, NULL);
137
-
138
-    /*query all the ingests about cpu and rtt*/
139
-    for (i = 0; i < ingestsCount; i++) {
140
-        handles[i] = 0;
141
-        data[i].ingest = &ingestElements[i];
142
-        data[i].ftl = NULL;
143
-        os_create_thread(&handles[i], NULL, _ingest_get_rtt, &data[i]);
144
-        sleep_ms(5); //space out the pings
145
-    }
146
-
147
-    /*wait for all the ingests to complete*/
148
-    for (i = 0; i < ingestsCount; i++) {
149
-
150
-        if (handles[i] != 0) {
151
-            os_wait_thread(handles[i]);
152
-        }
153
-
154
-        if (best == NULL || ingestElements[i].rtt < best->rtt) {
155
-            best = &ingestElements[i];
156
-        }
157
-    }
158
-
159
-    gettimeofday(&stop, NULL);
160
-    timeval_subtract(&delta, &stop, &start);
161
-    int ms = (int)timeval_to_ms(&delta);
162
-
163
-    for (i = 0; i < ingestsCount; i++) {
164
-        if (handles[i] != 0) {
165
-            os_destroy_thread(handles[i]);
166
-        }
167
-    }
168
-
169
-    free(handles);
170
-    free(data);
171
-
172
-    if (best) {
173
-        strcpy_s(bestIngestIpComputed, sizeof(best->ip), best->ip);
174
-        free(ingestElements);
175
-        return FTL_SUCCESS;
176
-    }
177
-
178
-    free(ingestElements);
179
-
180
-    return FTL_UNKNOWN_ERROR_CODE;
181
-}
182
-
183
 #ifndef DISABLE_AUTO_INGEST
184
 OS_THREAD_ROUTINE _ingest_get_hosts(ftl_stream_configuration_private_t *ftl);
185
 
186
@@ -218,9 +155,11 @@
187
   size_t size = json_array_size(ingests);
188
 
189
   for (i = 0; i < size; i++) {
190
-    const char *name, *ip;
191
+    char *name = NULL, *ip=NULL, *hostname=NULL;
192
     ingest_item = json_array_get(ingests, i);
193
-    json_unpack(ingest_item, "{s:s, s:s}", "name", &name, "ip", &ip);
194
+  if (json_unpack(ingest_item, "{s:s, s:s, s:s}", "name", &name, "ip", &ip, "hostname", &hostname) < 0) {
195
+    continue;
196
+  }
197
 
198
     ftl_ingest_t *ingest_elmt;
199
 
200
@@ -228,8 +167,10 @@
201
       goto cleanup;
202
     }
203
 
204
-    strcpy_s(ingest_elmt->name, sizeof(ingest_elmt->name), name);
205
-    strcpy_s(ingest_elmt->ip, sizeof(ingest_elmt->ip), ip);
206
+  ingest_elmt->name = _strdup(name);
207
+  ingest_elmt->ip = _strdup(ip);
208
+  ingest_elmt->hostname = _strdup(hostname);
209
+
210
     ingest_elmt->rtt = 500;
211
 
212
     ingest_elmt->next = NULL;
213
@@ -273,6 +214,9 @@
214
   while (ftl->ingest_list != NULL) {
215
     elmt = ftl->ingest_list;
216
     ftl->ingest_list = elmt->next;
217
+  free(elmt->hostname);
218
+  free(elmt->ip);
219
+  free(elmt->name);
220
     free(elmt);
221
   }
222
 
223
@@ -335,8 +279,8 @@
224
   free(data);
225
 
226
   if (best){
227
-    FTL_LOG(ftl, FTL_LOG_INFO, "%s at ip %s had the shortest RTT of %d ms\n", best->name, best->ip, best->rtt);
228
-    return _strdup(best->ip);
229
+    FTL_LOG(ftl, FTL_LOG_INFO, "%s at ip %s had the shortest RTT of %d ms\n", best->hostname, best->ip, best->rtt);
230
+    return _strdup(best->hostname);
231
   }
232
 
233
   return NULL;
234
@@ -355,81 +299,3 @@
235
     elmt = tmp;
236
   }
237
 }
238
-
239
-char * ingest_get_ip(ftl_stream_configuration_private_t *ftl, char *host) {
240
-  int total_ips;
241
-  char **ips;
242
-  char *ip;
243
-  int i;
244
-
245
-  if ((total_ips = _ingest_lookup_ip(host, &ips)) <= 0) {
246
-    return NULL;
247
-  }
248
-
249
-  ip = _strdup(ips[0]);
250
-
251
-  for (i = 0; i < total_ips; i++) {
252
-    free(ips[i]);
253
-  }
254
-
255
-  free(ips);
256
-
257
-  return ip;
258
-}
259
-
260
-static int _ingest_lookup_ip(const char *ingest_location, char ***ingest_ip) {
261
-  struct addrinfo hints;
262
-  struct addrinfo *result, *rp;
263
-  struct sockaddr_in  *sockaddr_ipv4;
264
-  int ips_found = 0;
265
-  int s;
266
-  BOOL success = FALSE;
267
-  ingest_ip[0] = '\0';
268
-  char ip[INET_ADDRSTRLEN];
269
-
270
-  if (*ingest_ip != NULL) {
271
-    return -1;
272
-  }
273
-
274
-  memset(&hints, 0, sizeof(struct addrinfo));
275
-  hints.ai_family = AF_INET;    
276
-  hints.ai_socktype = 0;
277
-  hints.ai_flags = 0;
278
-  hints.ai_protocol = 0;
279
-  hints.ai_canonname = NULL;
280
-  hints.ai_addr = NULL;
281
-  hints.ai_next = NULL;
282
-
283
-  if ((s = getaddrinfo(ingest_location, NULL, &hints, &result)) != 0) {
284
-    fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s));
285
-    return 0;
286
-  }
287
-
288
-  int total_ips = 0;
289
-  for (rp = result; rp != NULL; rp = rp->ai_next) {
290
-    total_ips++;
291
-  }
292
-
293
-  if ((*ingest_ip = malloc(sizeof(char*) * total_ips)) == NULL) {
294
-    return 0;
295
-  }
296
-  
297
-  ips_found = 0;
298
-  for (rp = result; rp != NULL; rp = rp->ai_next, ips_found++) {
299
-    if (((*ingest_ip)[ips_found] = malloc(IPV4_ADDR_ASCII_LEN)) == NULL) {
300
-      return 0;
301
-    }
302
-
303
-    sockaddr_ipv4 = (struct sockaddr_in *) rp->ai_addr;
304
-
305
-    if (inet_ntop(AF_INET, &sockaddr_ipv4->sin_addr, ip, sizeof(ip)) == NULL) {
306
-      continue;
307
-    }
308
-
309
-    strcpy_s((*ingest_ip)[ips_found], IPV4_ADDR_ASCII_LEN, ip);
310
-  }
311
-
312
-  freeaddrinfo(result);
313
-
314
-  return ips_found;
315
-}
316
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/media.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/media.c Changed
805
 
1
@@ -1,5 +1,7 @@
2
+#define __FTL_INTERNAL
3
 #include "ftl.h"
4
 #include "ftl_private.h"
5
+#include <assert.h>
6
 
7
 #define MAX_RTT_FACTOR 1.3
8
 #define USEC_IN_SEC 1000000
9
@@ -8,6 +10,7 @@
10
 OS_THREAD_ROUTINE audio_send_thread(void *data);
11
 OS_THREAD_ROUTINE recv_thread(void *data);
12
 OS_THREAD_ROUTINE ping_thread(void *data);
13
+OS_THREAD_ROUTINE adaptive_bitrate_thread(void* data);
14
 ftl_status_t _internal_media_destroy(ftl_stream_configuration_private_t *ftl);
15
 static int _nack_init(ftl_media_component_common_t *media);
16
 static int _nack_destroy(ftl_media_component_common_t *media);
17
@@ -28,10 +31,70 @@
18
 static int _send_video_stats(ftl_stream_configuration_private_t *ftl, ftl_media_component_common_t *mc, int interval_ms);
19
 static int _send_instant_pkt_stats(ftl_stream_configuration_private_t *ftl, ftl_media_component_common_t *mc, int interval_ms);
20
 
21
+size_t ingest_addrlen;
22
+struct sockaddr *ingest_addr;
23
+
24
+ftl_status_t _get_addr_info(short family, char *ip, short port, struct sockaddr **addr, size_t *addrlen) {
25
+
26
+  ftl_status_t retval = FTL_SUCCESS;
27
+
28
+    do {
29
+      if (family == AF_INET) {
30
+        struct sockaddr_in *ipv4_addr = NULL;
31
+        size_t len;
32
+
33
+        len = sizeof(struct sockaddr_in);
34
+
35
+        if ((ipv4_addr = malloc(len)) == NULL) {
36
+          retval = FTL_MALLOC_FAILURE;
37
+          break;
38
+        }
39
+
40
+        memset(ipv4_addr, 0, len);
41
+
42
+        ipv4_addr->sin_family = family;
43
+        ipv4_addr->sin_port = htons(port);
44
+
45
+        if (inet_pton(family, ip, &ipv4_addr->sin_addr) != 1) {
46
+          retval = FTL_DNS_FAILURE;
47
+          break;
48
+        }
49
+
50
+        *addrlen = len;
51
+        *addr = (struct sockaddr *)ipv4_addr;
52
+      }
53
+      else if (family == AF_INET6) {
54
+        struct sockaddr_in6 *ipv6_addr = NULL;
55
+        size_t len;
56
+
57
+        len = sizeof(struct sockaddr_in6);
58
+
59
+        if ((ipv6_addr = malloc(len)) == NULL) {
60
+                retval = FTL_MALLOC_FAILURE;
61
+                break;
62
+        }
63
+
64
+        memset(ipv6_addr, 0, len);
65
+
66
+        ipv6_addr->sin6_family = family;
67
+        ipv6_addr->sin6_port = htons(port);
68
+
69
+        if (inet_pton(family, ip, &ipv6_addr->sin6_addr) != 1) {
70
+                retval = FTL_DNS_FAILURE;
71
+                break;
72
+        }
73
+
74
+        *addrlen = len;
75
+        *addr = (struct sockaddr *)ipv6_addr;
76
+      }
77
+  }
78
+  while (0);
79
+  return retval;
80
+}
81
+
82
 ftl_status_t media_init(ftl_stream_configuration_private_t *ftl) {
83
 
84
   ftl_media_config_t *media = &ftl->media;
85
-  unsigned char buf[sizeof(struct in_addr)];
86
   ftl_status_t status = FTL_SUCCESS;
87
   int idx;
88
 
89
@@ -44,27 +107,16 @@
90
     os_init_mutex(&ftl->video.mutex);
91
     os_init_mutex(&ftl->audio.mutex);
92
 
93
-    //Create a socket
94
-    if ((media->media_socket = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
95
-    {
96
-      FTL_LOG(ftl, FTL_LOG_ERROR, "Could not create socket : %s", get_socket_error());
97
-      status = FTL_INTERNAL_ERROR;
98
-      break;
99
+    //use the same socket family as the control connection
100
+    media->media_socket = socket(ftl->socket_family, SOCK_DGRAM, IPPROTO_UDP);
101
+    if (media->media_socket == -1) {
102
+            return FTL_DNS_FAILURE;
103
     }
104
 
105
-    set_socket_send_buf(media->media_socket, 2048);
106
-
107
-    FTL_LOG(ftl, FTL_LOG_INFO, "Socket created\n");
108
-
109
-    if (inet_pton(AF_INET, ftl->ingest_ip, buf) == 0) {
110
-      break;
111
+    if ((status = _get_addr_info(ftl->socket_family, ftl->ingest_ip, media->assigned_port, &media->ingest_addr, &media->ingest_addrlen)) != FTL_SUCCESS) {
112
+            return status;
113
     }
114
 
115
-    //Prepare the sockaddr_in structure
116
-    media->server_addr.sin_family = AF_INET;
117
-    memcpy((char *)&media->server_addr.sin_addr.s_addr, (char *)buf, sizeof(buf));
118
-    media->server_addr.sin_port = htons(media->assigned_port);
119
-
120
     media->max_mtu = MAX_MTU;
121
     gettimeofday(&media->stats_tv, NULL);
122
     media->sender_report_base_ntp.tv_usec = 0;
123
@@ -110,12 +162,12 @@
124
       break;
125
     }
126
 
127
-    if (os_semaphore_create(&ftl->video.media_component.pkt_ready, "/VideoPkt", O_CREAT, 0) < 0) {
128
+    if (os_semaphore_create(&ftl->video.media_component.pkt_ready, "/VideoPkt", O_CREAT, 0, FALSE) < 0) {
129
       status = FTL_MALLOC_FAILURE;
130
       break;
131
     }
132
 
133
-    if (os_semaphore_create(&ftl->audio.media_component.pkt_ready, "/AudioPkt", O_CREAT, 0) < 0) {
134
+    if (os_semaphore_create(&ftl->audio.media_component.pkt_ready, "/AudioPkt", O_CREAT, 0, FALSE) < 0) {
135
         status = FTL_MALLOC_FAILURE;
136
         break;
137
     }
138
@@ -138,7 +190,7 @@
139
         break;
140
     }
141
 
142
-    if (os_semaphore_create(&media->ping_thread_shutdown, "/PingThreadShutdown", O_CREAT, 0) < 0) {
143
+    if (os_semaphore_create(&media->ping_thread_shutdown, "/PingThreadShutdown", O_CREAT, 0, FALSE) < 0) {
144
       status = FTL_MALLOC_FAILURE;
145
       break;
146
     }
147
@@ -217,6 +269,9 @@
148
       shutdown_socket(media->media_socket, SD_BOTH);
149
       close_socket(media->media_socket);
150
       media->media_socket = INVALID_SOCKET;
151
+      if (media->ingest_addr) {
152
+        free(media->ingest_addr);
153
+      }
154
     }
155
     os_unlock_mutex(&media->mutex);
156
   }
157
@@ -278,6 +333,7 @@
158
 
159
     slot->len = 0;
160
     slot->sn = -1;
161
+    slot->isPartOfIframe = 0;
162
   }
163
 
164
   os_init_mutex(&media->nack_slots_lock);
165
@@ -487,7 +543,7 @@
166
 
167
     float adjusted_bytes_sent = (float)total_sent * (1.f - pkt_loss_percent);
168
     int64_t actual_send_time = total_ms + final_rtt - initial_rtt;
169
-    effective_kbps = (int)(adjusted_bytes_sent * 8.f * 1000.f / (float)actual_send_time) / 1000.f;
170
+    effective_kbps = (int)(((float)adjusted_bytes_sent * 8.f * 1000.f / (float)actual_send_time) / 1000.f);
171
 
172
     results->pkts_sent = (int)pkts_sent;
173
     results->nack_requests = (int)lost_pkts;
174
@@ -655,7 +711,7 @@
175
           }
176
           os_unlock_mutex(&ftl->video.mutex);
177
           return bytes_queued;
178
-        }
179
+        }       
180
 
181
         os_lock_mutex(&slot->mutex);
182
 
183
@@ -682,6 +738,7 @@
184
         slot->len = pkt_len;
185
         slot->sn = sn;
186
         gettimeofday(&slot->insert_time, NULL);
187
+        slot->isPartOfIframe = nalu_type == H264_NALU_TYPE_IDR;
188
 
189
         os_unlock_mutex(&slot->mutex);
190
         os_semaphore_post(&mc->pkt_ready);
191
@@ -781,13 +838,19 @@
192
 static int _media_send_slot(ftl_stream_configuration_private_t *ftl, nack_slot_t *slot) {
193
   int tx_len;
194
 
195
+  uint8_t pkt[MAX_PACKET_BUFFER];
196
+  int pkt_len;
197
+
198
   os_lock_mutex(&ftl->media.mutex);
199
-  if ((tx_len = sendto(ftl->media.media_socket, slot->packet, slot->len, 0, (struct sockaddr*) &ftl->media.server_addr, sizeof(struct sockaddr_in))) == SOCKET_ERROR)
200
+  memcpy(pkt, slot->packet, slot->len);
201
+  pkt_len = slot->len;
202
+  os_unlock_mutex(&ftl->media.mutex);
203
+
204
+  if ((tx_len = sendto(ftl->media.media_socket, pkt, pkt_len, 0, (struct sockaddr*) ftl->media.ingest_addr, (int)ftl->media.ingest_addrlen)) == SOCKET_ERROR)
205
   {
206
     FTL_LOG(ftl, FTL_LOG_ERROR, "sendto() failed with error: %s", get_socket_error());
207
   }
208
-  os_unlock_mutex(&ftl->media.mutex);
209
-
210
+  
211
   return tx_len;
212
 }
213
 
214
@@ -866,7 +929,7 @@
215
 
216
   if (mc->nack_enabled) {
217
     tx_len = _media_send_slot(ftl, slot);
218
-    FTL_LOG(ftl, FTL_LOG_INFO, "[%d] resent sn %d, request delay was %d ms", ssrc, sn, req_delay);
219
+    FTL_LOG(ftl, FTL_LOG_INFO, "[%d] resent sn %d, request delay was %d ms, was part of iframe? %d", ssrc, sn, req_delay, slot->isPartOfIframe);
220
   }
221
   mc->stats.nack_requests++;
222
 
223
@@ -988,9 +1051,20 @@
224
   ftl_media_config_t *media = &ftl->media;
225
   int ret;
226
   unsigned char *buf;
227
-  struct sockaddr_in remote_addr;
228
-  socklen_t addr_len;
229
-  char remote_ip[INET_ADDRSTRLEN];
230
+  struct sockaddr_in6 ipv6_addrinfo;
231
+  struct sockaddr_in ipv4_addrinfo;
232
+  struct sockaddr* addrinfo;
233
+  socklen_t addr_len, addrinfo_len;
234
+  char remote_ip[IPVX_ADDR_ASCII_LEN];
235
+
236
+  if (ftl->socket_family == AF_INET) {
237
+     addrinfo = (struct sockaddr *)&ipv4_addrinfo;
238
+     addrinfo_len = sizeof(struct sockaddr_in);
239
+  }
240
+  else {
241
+     addrinfo = (struct sockaddr *)&ipv6_addrinfo;
242
+     addrinfo_len = sizeof(struct sockaddr_in6);
243
+  }
244
 
245
 #ifdef _WIN32
246
   if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)) {
247
@@ -1021,14 +1095,15 @@
248
     }
249
 
250
     // We have data on the socket, read it.
251
-    addr_len = sizeof(remote_addr);
252
-    ret = recvfrom(media->media_socket, buf, MAX_PACKET_BUFFER, 0, (struct sockaddr *)&remote_addr, &addr_len);
253
+    addr_len = addrinfo_len;
254
+    ret = recvfrom(media->media_socket, buf, MAX_PACKET_BUFFER, 0, (struct sockaddr *)addrinfo, &addr_len);
255
     if (ret <= 0) {
256
       // This shouldn't be possible, we should only be here is poll above told us there was data.
257
+      FTL_LOG(ftl, FTL_LOG_INFO, "recv from failed with %s\n", get_socket_error());
258
       continue;
259
     }
260
 
261
-    if (inet_ntop(AF_INET, &remote_addr.sin_addr.s_addr, remote_ip, sizeof(remote_ip)) == NULL) {
262
+    if (_get_remote_ip(addrinfo, addr_len, remote_ip, sizeof(remote_ip)) < 0) {
263
       continue;
264
     }
265
 
266
@@ -1093,7 +1168,7 @@
267
       media_stats_t *pkt_stats = &ftl->video.media_component.stats;
268
 
269
       gettimeofday(&now, NULL);
270
-      delay_ms = timeval_subtract_to_ms(&now, &ping->xmit_time);
271
+      delay_ms = (int)timeval_subtract_to_ms(&now, &ping->xmit_time);
272
 
273
       if (delay_ms > pkt_stats->pkt_rtt_max) {
274
         pkt_stats->pkt_rtt_max = delay_ms;
275
@@ -1242,7 +1317,7 @@
276
 static int _update_stats(ftl_stream_configuration_private_t *ftl) {
277
   struct timeval now;
278
   gettimeofday(&now, NULL);
279
-  int stats_interval = timeval_subtract_to_ms(&now, &ftl->media.stats_tv);
280
+  int stats_interval = (int)timeval_subtract_to_ms(&now, &ftl->media.stats_tv);
281
 
282
   if (stats_interval > 5000) {
283
 
284
@@ -1293,10 +1368,11 @@
285
   mc->stats.total_xmit_delay = 0;
286
   mc->stats.xmit_delay_samples = 0;
287
 
288
+  // rtt stats are cleared by adaptive bitrate thread.
289
   mc->stats.pkt_rtt_max = 0;
290
   mc->stats.pkt_rtt_min = 10000;
291
-  mc->stats.total_rtt = 0;
292
-  mc->stats.rtt_samples = 0;
293
+  //mc->stats.total_rtt = 0;
294
+  //mc->stats.rtt_samples = 0;
295
 
296
   enqueue_status_msg(ftl, &m);
297
 
298
@@ -1387,7 +1463,6 @@
299
             // For each media component...
300
             ftl_media_component_common_t *media_comp[] = { &ftl->video.media_component, &ftl->audio.media_component };
301
             ftl_media_component_common_t *comp;
302
-            struct timeval delta_tv;
303
             int mediaCount = 0;
304
             for (mediaCount = 0; mediaCount < sizeof(media_comp) / sizeof(media_comp[0]); mediaCount++) {
305
 
306
@@ -1401,13 +1476,13 @@
307
 
308
                 // Set the ssrc and packet counts
309
                 senderReport->ssrc = htonl(comp->ssrc);
310
-                senderReport->senderOctetCount = htonl(comp->stats.payload_bytes_sent);
311
-                senderReport->senderPacketCount = htonl(comp->stats.packets_sent);
312
+                senderReport->senderOctetCount = htonl((uint32_t)comp->stats.payload_bytes_sent);
313
+                senderReport->senderPacketCount = htonl((uint32_t)comp->stats.packets_sent);
314
 
315
                 // Grab the last rtp timestamp. Since this is multi threaded we need it locally to ensure it doesn't change.
316
                 uint64_t timestamp = comp->timestamp;
317
                 uint64_t timestamp_dts_usec = comp->timestamp_dts_usec;
318
-                senderReport->rtpTimestamp = htonl(timestamp);
319
+                senderReport->rtpTimestamp = htonl((uint32_t)timestamp);
320
 
321
                 // For the NTP time, we will take the base ntp time for this stream and increment it by the amount of time
322
                 // that has passed from this rtp timestamp and the base timestamp. This way all of the values are derived from
323
@@ -1434,10 +1509,478 @@
324
   return 0;
325
 }
326
 
327
-ftl_status_t ftl_get_video_stats(ftl_handle_t* handle, uint64_t* frames_sent, uint64_t* nacks_received)
328
+// ================================================ Bitrate Monitor Logic =================================================== //
329
+
330
+FTL_API ftl_status_t ftl_get_video_stats(
331
+  ftl_handle_t* handle,
332
+  uint64_t* frames_sent,
333
+  uint64_t* nacks_received,
334
+  uint64_t* rtt_recorded,
335
+  uint64_t* frames_dropped,
336
+  float* queue_fullness
337
+)
338
 {
339
   ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)handle->priv;
340
+  ftl_media_component_common_t *mc = &ftl->video.media_component;
341
   *frames_sent = ftl->video.media_component.stats.frames_sent;
342
   *nacks_received = ftl->video.media_component.stats.nack_requests;
343
+  *rtt_recorded = (mc->stats.rtt_samples) ? mc->stats.total_rtt / mc->stats.rtt_samples : 0;
344
+  *frames_dropped = mc->stats.dropped_frames;
345
+  *queue_fullness = _media_get_queue_fullness(ftl, mc->ssrc);
346
+
347
+  mc->stats.pkt_rtt_max = 0;
348
+  mc->stats.pkt_rtt_min = 10000;
349
+  mc->stats.total_rtt = 0;
350
+  mc->stats.rtt_samples = 0;
351
+
352
   return FTL_SUCCESS;
353
-}
354
\ No newline at end of file
355
+}
356
+
357
+BOOL is_bitrate_reduction_required(
358
+  const float nacks_to_frames_ratio,
359
+  const float avg_rtt,
360
+  const uint64_t avg_frames_dropped_per_second,
361
+  const float queue_fullness)
362
+{
363
+  // TODO : Improve estimation of rtt stability.
364
+  if (nacks_to_frames_ratio > MIN_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FOR_BITRATE_DOWNGRADE
365
+    || avg_frames_dropped_per_second > 3
366
+    || avg_rtt > MIN_AVG_RTT_TO_DEEM_BW_CONSTRAINED
367
+    || queue_fullness > MIN_QUEUE_FULLNESS_TO_DEEM_BW_CONSTRAINED
368
+    )
369
+  {
370
+    return TRUE;
371
+  }
372
+  return FALSE;
373
+}
374
+
375
+BOOL is_bw_stable(
376
+  const float nacks_to_frames_ratio,
377
+  const float avg_rtt,
378
+  const uint64_t avg_frames_dropped_per_second,
379
+  const float queue_fullness)
380
+{
381
+  // TODO : Improve estimation of rtt stability
382
+  if (nacks_to_frames_ratio < MAX_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FORBITRATE_UPGRADE
383
+    && avg_frames_dropped_per_second == 0
384
+    && avg_rtt < MAX_AVG_RTT_TO_DEEM_BW_STABLE
385
+    && queue_fullness < MAX_QUEUE_FULLNESS_TO_DEEM_BW_STABLE
386
+    )
387
+  {
388
+    return TRUE;
389
+  }
390
+  return FALSE;
391
+}
392
+
393
+uint64_t compute_recommended_bitrate(
394
+  const uint64_t current_encoding_bitrate,
395
+  const uint64_t max_encoding_bitrate,
396
+  const uint64_t min_encoding_bitrate,
397
+  ftl_bitrate_changed_reason_t reason
398
+)
399
+{
400
+  uint64_t recommended_bitrate = 0;
401
+
402
+  if (reason == FTL_BANDWIDTH_CONSTRAINED)
403
+  {
404
+    recommended_bitrate = BW_INSUFFICIENT_BITRATE_DOWNGRADE_PERCENTAGE * current_encoding_bitrate / 100;
405
+  }
406
+
407
+  else if (reason == FTL_BANDWIDTH_AVAILABLE)
408
+  {
409
+    recommended_bitrate = current_encoding_bitrate + BW_IDEAL_BITRATE_UPGRADE_BPS;
410
+  }
411
+  else
412
+  {
413
+    recommended_bitrate = REVERT_TO_STABLE_BITRATE_DOWNGRADE_PERCENTAGE * current_encoding_bitrate / 100;
414
+  }
415
+
416
+  if (recommended_bitrate < min_encoding_bitrate)
417
+  {
418
+    recommended_bitrate = min_encoding_bitrate;
419
+  }
420
+
421
+  if (recommended_bitrate > max_encoding_bitrate)
422
+  {
423
+    recommended_bitrate = max_encoding_bitrate;
424
+  }
425
+  return recommended_bitrate;
426
+}
427
+
428
+FTL_API ftl_status_t ftl_adaptive_bitrate_thread(ftl_handle_t* ftl_handle, void* context, int(*change_bitrate_callback)(void*, uint64_t), uint64_t initial_encoding_bitrate, uint64_t min_encoding_bitrate, uint64_t max_encoding_bitrate)
429
+{
430
+  ftl_status_t ret_status = FTL_SUCCESS;
431
+  ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv;
432
+  ftl_adaptive_bitrate_thread_params_t* thread_params = NULL;
433
+
434
+  do
435
+  {
436
+    if ((thread_params = (ftl_adaptive_bitrate_thread_params_t*)malloc(sizeof(ftl_adaptive_bitrate_thread_params_t))) == NULL)
437
+    {
438
+      ret_status = FTL_MALLOC_FAILURE;
439
+      break;
440
+    }
441
+
442
+    memset(thread_params, 0, sizeof(thread_params));
443
+
444
+    thread_params->handle = ftl_handle;
445
+    thread_params->change_bitrate_callback = change_bitrate_callback;
446
+    thread_params->initial_encoding_bitrate = initial_encoding_bitrate;
447
+    thread_params->max_encoding_bitrate = max_encoding_bitrate;
448
+    thread_params->min_encoding_bitrate = min_encoding_bitrate;
449
+    thread_params->context = context;
450
+
451
+    if (os_semaphore_create(&ftl->bitrate_thread_shutdown, "/BitrateThreadShutdown", O_CREAT, 0, FALSE) < 0)
452
+    {
453
+      ret_status = FTL_MALLOC_FAILURE;
454
+      break;
455
+    }
456
+
457
+    if ((os_create_thread(&ftl->bitrate_monitor_thread, NULL, adaptive_bitrate_thread, thread_params)) != 0)
458
+    {
459
+      os_semaphore_delete(&ftl->bitrate_thread_shutdown);
460
+      ret_status = FTL_MALLOC_FAILURE;
461
+      break;
462
+    }
463
+    // Only set this after the thread has actually been created.
464
+    ftl_set_state(ftl, FTL_BITRATE_THRD);
465
+  } while (0);
466
+
467
+  if (ret_status != FTL_SUCCESS)
468
+  {
469
+    free(thread_params);
470
+  }
471
+  return ret_status;
472
+}
473
+
474
+// The threads looks at the stats over the last 5 seconds of data to estimate bandwidth conditoins and compute whether upgrade or downgrade
475
+// is required. If bandwidth is constrained we go down by a large amount and come back up slowly. Once upgrade is too excessive
476
+// we revert to the previous bitrate, and do not try an upgrade for 10 mins.
477
+OS_THREAD_ROUTINE adaptive_bitrate_thread(void* data)
478
+{
479
+  ftl_adaptive_bitrate_thread_params_t *params = (ftl_adaptive_bitrate_thread_params_t *)data;
480
+  ftl_stream_configuration_private_t* ftl = (ftl_stream_configuration_private_t*)params->handle->priv;
481
+
482
+  // We choose a duration of BW_CHECK_DURATION_MS milliseconds to estimate bandiwidth conditions. The duration is sampled at a period of 
483
+  // STREAM_STATS_CAPTURE_MS. Hence the number of stats we save in our circular buffer is MAX_STAT_SIZE.
484
+  assert(MAX_STAT_SIZE == BW_CHECK_DURATION_MS / STREAM_STATS_CAPTURE_MS);
485
+
486
+  FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Starting adaptive bitrate thread");
487
+
488
+  // Circular buffers to hold bw stats data queried via ftl_get_video_params.
489
+  // The stats data shows data aggregated over the last c_ulBwCheckDurationMs milliseconds.
490
+  uint64_t nacks_received[MAX_STAT_SIZE] = {0};
491
+  uint64_t frames_sent[MAX_STAT_SIZE] = {0};
492
+  uint64_t rtts_received[MAX_STAT_SIZE] = {0};
493
+  uint64_t frames_dropped[MAX_STAT_SIZE] = {0};
494
+  float queue_fullness = 0; // queue fullness doesnt need to be aggregated. If it goes above a threshold value we deem bw unstable.
495
+
496
+  uint32_t current_position_of_circular_buffer = 0;
497
+  BOOL circular_buffer_is_full = FALSE;
498
+
499
+  uint64_t last_frames_sent_recorded = 0;
500
+  uint64_t last_nacks_received_recorded = 0;
501
+  uint64_t last_frames_dropped_recorded = 0;
502
+  uint64_t last_rtt_received = 0;
503
+
504
+  ftl_get_video_stats(
505
+    params->handle,
506
+    &last_frames_sent_recorded,
507
+    &last_nacks_received_recorded,
508
+    &last_rtt_received,
509
+    &last_frames_dropped_recorded,
510
+    &queue_fullness
511
+  );
512
+  // Current bitrate encoding as a percentage of the original encoding bitrate.
513
+  uint64_t current_encoding_bitrate = params->initial_encoding_bitrate;
514
+
515
+  struct timeval last_bitrate_upgrade_time, bw_upgrade_freeze_start_time;
516
+  gettimeofday(&last_bitrate_upgrade_time, NULL);
517
+  bw_upgrade_freeze_start_time = (struct timeval) { 0 };
518
+
519
+  BOOL bitrate_changed = FALSE;
520
+  BOOL attempt_to_revert_to_stable_bandwidth_first = FALSE;
521
+
522
+  // If a bitrate is deemed as stable after update, we report it to telemetry.
523
+  //  bitrate is only deemed stable when we reach back to original bitrate, or when we revert to a bitrate after an excessive upgrade.
524
+  BOOL check_bitrate_for_stability = FALSE;
525
+
526
+  while (1)
527
+  {
528
+    os_semaphore_pend(&ftl->bitrate_thread_shutdown, 0);
529
+    if (!ftl_get_state(params->handle->priv, FTL_BITRATE_THRD))
530
+    {
531
+      break;
532
+    }
533
+
534
+    uint64_t nacks_received_recorded = 0;
535
+    uint64_t frames_sent_recorded = 0;
536
+    uint64_t rtt_received = 0;
537
+    uint64_t frames_dropped_recorded = 0;
538
+
539
+    ftl_get_video_stats(params->handle, &frames_sent_recorded, &nacks_received_recorded, &rtt_received, &frames_dropped_recorded, &queue_fullness);
540
+
541
+    uint64_t nacks_received_since_last_check = nacks_received_recorded - last_nacks_received_recorded;
542
+    uint64_t frames_sent_since_last_check = frames_sent_recorded - last_frames_sent_recorded;
543
+    uint64_t frames_dropped_since_last_check = frames_dropped_recorded - last_frames_dropped_recorded;
544
+
545
+    last_nacks_received_recorded = nacks_received_recorded;
546
+    last_frames_sent_recorded = frames_sent_recorded;
547
+    last_frames_dropped_recorded = frames_dropped_recorded;
548
+
549
+    nacks_received[current_position_of_circular_buffer] = nacks_received_since_last_check;
550
+    frames_sent[current_position_of_circular_buffer] = frames_sent_since_last_check;
551
+    rtts_received[current_position_of_circular_buffer] = rtt_received;
552
+    frames_dropped[current_position_of_circular_buffer] = frames_dropped_since_last_check;
553
+
554
+    // Once circular buffer is full, set the flag as we now have enough data to check bandwidth is constrained.
555
+    if (current_position_of_circular_buffer + 1 >= MAX_STAT_SIZE)
556
+    {
557
+      circular_buffer_is_full = TRUE;
558
+    }
559
+    // Update position in circular buffer.
560
+    current_position_of_circular_buffer = (current_position_of_circular_buffer + 1) % MAX_STAT_SIZE;
561
+
562
+    // This conditions ensures that we have stats of the last c_ulBwCheckDurationMs milliseconds.
563
+    if (circular_buffer_is_full)
564
+    {
565
+      uint64_t nacks_received_total = 0;
566
+      uint64_t frames_sent_total = 0;
567
+      uint64_t total_rtt = 0;
568
+      float avg_rtt = 0;
569
+      uint64_t frames_dropped_total = 0;
570
+      uint64_t avg_frames_dropped_per_second = 0;
571
+      float nacks_to_frames_ratio = 0;
572
+      int i;
573
+
574
+      // Count all nacks received for the last c_ulBwCheckDurationMs milliseconds
575
+      for (i = 0; i < MAX_STAT_SIZE; i++)
576
+      {
577
+        nacks_received_total += nacks_received[i];
578
+      }
579
+      // Count all frames sent over the last c_ulBwCheckDurationMs milliseconds
580
+      for (i = 0; i< MAX_STAT_SIZE; i++)
581
+      {
582
+        frames_sent_total += frames_sent[i];
583
+      }
584
+
585
+      if (frames_sent_total != 0)
586
+      {
587
+        nacks_to_frames_ratio = (float)nacks_received_total / (float)frames_sent_total;
588
+      }
589
+
590
+      for (i = 0; i< MAX_STAT_SIZE; i++)
591
+      {
592
+        total_rtt += rtts_received[i];
593
+      }
594
+      avg_rtt = (float)total_rtt / (float)MAX_STAT_SIZE;
595
+
596
+      for (i = 0; i < MAX_STAT_SIZE; i++)
597
+      {
598
+        frames_dropped_total += frames_dropped[i];
599
+      }
600
+      avg_frames_dropped_per_second = (frames_dropped_total / (BW_CHECK_DURATION_MS / 1000));
601
+
602
+      // Check if bandwidth is constrained and bitrate reduction is required. The bandwidth can be constrained for two reasons.
603
+      // Either the available bandwidth has decreased, or we tried to upgrade the bitrate and its too excessive.
604
+      if (is_bitrate_reduction_required(nacks_to_frames_ratio, avg_rtt, avg_frames_dropped_per_second, queue_fullness))
605
+      {
606
+        FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Bitrate reduction required. Nacks Received %d , Frames Sent %d rtt %d queue_fullness %4.2f",
607
+          nacks_received_total,
608
+          frames_sent_total,
609
+          avg_rtt,
610
+          queue_fullness
611
+        );
612
+
613
+        // If we had previously upgraded the bitrate and we started seeing the 
614
+        // constrain within c_iMaxSecondsToDeemBitrateUpgradeExcessive seconds, it means our bitrate upgrade was excessiver. 
615
+        // we should revert back to a lower bitrate and freeze all upgrades for c_uBitrateUpgradeFreezeTimeMs milliseconds.
616
+        if (attempt_to_revert_to_stable_bandwidth_first && get_ms_elapsed_since(&last_bitrate_upgrade_time) < MAX_MS_TO_DEEM_UPGRADE_EXCESSIVE)
617
+        {
618
+          FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Reverting to a stable bitrate and freezing upgrade");
619
+          uint64_t recommended_bitrate = compute_recommended_bitrate(current_encoding_bitrate, params->max_encoding_bitrate, params->min_encoding_bitrate, FTL_UPGRADE_EXCESSIVE);
620
+
621
+          BOOL changeBitrateResult = params->change_bitrate_callback(params->context, recommended_bitrate);
622
+
623
+          if (changeBitrateResult)
624
+          {
625
+            ftl_bitrate_changed_msg_t msg =
626
+            {
627
+              FTL_BITRATE_DECREASED,
628
+              FTL_UPGRADE_EXCESSIVE,
629
+              recommended_bitrate,
630
+              current_encoding_bitrate,
631
+              0.f,
632
+              avg_rtt,
633
+              avg_frames_dropped_per_second,
634
+              queue_fullness
635
+            };
636
+            ftl_status_msg_t status_msg;
637
+            status_msg.type = FTL_BITRATE_CHANGED;
638
+            status_msg.msg.bitrate_changed_msg = msg;
639
+            enqueue_status_msg(params->handle->priv, &status_msg);
640
+
641
+            bitrate_changed = TRUE;
642
+            check_bitrate_for_stability = TRUE;
643
+            attempt_to_revert_to_stable_bandwidth_first = FALSE;
644
+            current_encoding_bitrate = recommended_bitrate;
645
+            gettimeofday(&bw_upgrade_freeze_start_time, NULL);
646
+          }
647
+        }
648
+        // This means the available bandiwdth seems to have decreased and we need to reduce our bitrate to comply.
649
+        else
650
+        {
651
+          uint64_t recommended_bitrate = compute_recommended_bitrate(current_encoding_bitrate, params->max_encoding_bitrate, params->min_encoding_bitrate, FTL_BANDWIDTH_CONSTRAINED);
652
+          BOOL changeBitrateResult = params->change_bitrate_callback(params->context, recommended_bitrate);
653
+          // We had to lower bitrate. Bitrate is not stable.
654
+          check_bitrate_for_stability = FALSE;
655
+          if (changeBitrateResult)
656
+          {
657
+            ftl_bitrate_changed_msg_t msg =
658
+            {
659
+              FTL_BITRATE_DECREASED,
660
+              FTL_BANDWIDTH_CONSTRAINED,
661
+              recommended_bitrate,
662
+              current_encoding_bitrate,
663
+              nacks_to_frames_ratio,
664
+              avg_rtt,
665
+              avg_frames_dropped_per_second,
666
+              queue_fullness
667
+            };
668
+            ftl_status_msg_t status_msg;
669
+            status_msg.type = FTL_BITRATE_CHANGED;
670
+            status_msg.msg.bitrate_changed_msg = msg;
671
+            enqueue_status_msg(params->handle->priv, &status_msg);
672
+
673
+            bitrate_changed = TRUE;
674
+            current_encoding_bitrate = recommended_bitrate;
675
+          }
676
+        }
677
+      }
678
+      // If bandwidth is stable and we are haven't frozen bitrate upgrades due to excessive 
679
+      // bitrate upgrade in the last BwUpgradeFreezeTime millisecods, we upgrade the bitrate.
680
+      else if (is_bw_stable(nacks_to_frames_ratio, avg_rtt, avg_frames_dropped_per_second, queue_fullness))
681
+      {
682
+        if (get_ms_elapsed_since(&bw_upgrade_freeze_start_time) > 180000)
683
+        {
684
+          uint64_t recommended_bitrate = compute_recommended_bitrate(current_encoding_bitrate, params->max_encoding_bitrate, params->min_encoding_bitrate, FTL_BANDWIDTH_AVAILABLE);
685
+          if (recommended_bitrate != current_encoding_bitrate)
686
+          {
687
+            attempt_to_revert_to_stable_bandwidth_first = TRUE;
688
+
689
+            BOOL changeBitrateResult = params->change_bitrate_callback(params->context, recommended_bitrate);
690
+            if (changeBitrateResult)
691
+            {
692
+              ftl_bitrate_changed_msg_t msg =
693
+              {
694
+                FTL_BITRATE_INCREASED,
695
+                FTL_BANDWIDTH_AVAILABLE,
696
+                recommended_bitrate,
697
+                current_encoding_bitrate,
698
+                nacks_to_frames_ratio,
699
+                avg_rtt,
700
+                avg_frames_dropped_per_second,
701
+                queue_fullness
702
+              };
703
+              ftl_status_msg_t status_msg;
704
+              status_msg.type = FTL_BITRATE_CHANGED;
705
+              status_msg.msg.bitrate_changed_msg = msg;
706
+              enqueue_status_msg(params->handle->priv, &status_msg);
707
+
708
+              bitrate_changed = TRUE;
709
+              current_encoding_bitrate = recommended_bitrate;
710
+              // We have reached a MAX_SUPPORTED_BITRATE_BPS. Check for stbility.
711
+              if (recommended_bitrate == params->max_encoding_bitrate)
712
+              {
713
+                check_bitrate_for_stability = TRUE;
714
+              }
715
+              gettimeofday(&last_bitrate_upgrade_time, NULL);
716
+            }
717
+          }
718
+        }
719
+      }
720
+      // If bitrate was changed by one of the steps above, 
721
+      // we sleep for a cooldown period and clear our circular buffers.
722
+      if (bitrate_changed)
723
+      {
724
+        // Clear out the circular buffer as we dont want it to impact our calculations further.
725
+        circular_buffer_is_full = FALSE;
726
+        current_position_of_circular_buffer = 0;
727
+
728
+        // set the peak kbps for throttling
729
+        ftl_media_component_common_t *video = &ftl->video.media_component;
730
+        video->peak_kbps = (int)(5 * current_encoding_bitrate / 1000);
731
+
732
+        // Sleep for a c_ulBitrateChangedCooldownIntervalMs period. If hBroadcastTerminated signal is received exit.
733
+        os_semaphore_pend(&ftl->bitrate_thread_shutdown, BITRATE_CHANGED_COOLDOWN_INTERVAL_MS);
734
+        if (!ftl_get_state(params->handle->priv, FTL_BITRATE_THRD))
735
+        {
736
+          break;
737
+        }
738
+        // Update ullLastFramesSentRecorded and ullLastNacksReceivedRecorded, so the cool down has no impact on our calculations.
739
+        ftl_get_video_stats(params->handle, &last_frames_sent_recorded, &last_nacks_received_recorded, &rtt_received, &last_frames_dropped_recorded, &queue_fullness);
740
+        bitrate_changed = FALSE;
741
+      }
742
+      else
743
+      {
744
+        if (check_bitrate_for_stability)
745
+        {
746
+          FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Stable Bitrate acheived");
747
+
748
+          check_bitrate_for_stability = FALSE;
749
+          if (current_encoding_bitrate == params->max_encoding_bitrate)
750
+          {
751
+            //Uncomment the following 3 lines to demo adaptive bitrate
752
+            //FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Zapping back to low value for demo.");
753
+            //current_encoding_bitrate = 512 * 1000;
754
+            //params->change_bitrate_callback(params->context, 512 * 1000);
755
+
756
+            ftl_bitrate_changed_msg_t msg =
757
+            {
758
+              FTL_BITRATE_STABILIZED,
759
+              FTL_STABILIZE_ON_ORIGINAL_BITRATE,
760
+              params->max_encoding_bitrate,
761
+              current_encoding_bitrate,
762
+              nacks_to_frames_ratio,
763
+              avg_rtt,
764
+              avg_frames_dropped_per_second,
765
+              queue_fullness
766
+            };
767
+            ftl_status_msg_t status_msg;
768
+            status_msg.type = FTL_BITRATE_CHANGED;
769
+            status_msg.msg.bitrate_changed_msg = msg;
770
+            enqueue_status_msg(params->handle->priv, &status_msg);
771
+          }
772
+          else
773
+          {
774
+            ftl_bitrate_changed_msg_t msg =
775
+            {
776
+              FTL_BITRATE_STABILIZED,
777
+              FTL_STABILIZE_ON_LOWER_BITRATE,
778
+              current_encoding_bitrate,
779
+              current_encoding_bitrate,
780
+              nacks_to_frames_ratio,
781
+              avg_rtt,
782
+              avg_frames_dropped_per_second,
783
+              queue_fullness
784
+            };
785
+            ftl_status_msg_t status_msg;
786
+            status_msg.type = FTL_BITRATE_CHANGED;
787
+            status_msg.msg.bitrate_changed_msg = msg;
788
+            enqueue_status_msg(params->handle->priv, &status_msg);
789
+          }
790
+        }
791
+      }
792
+    }
793
+
794
+    // Sleep for c_ulStreamStatsCaptureMs before capturing the next stats
795
+    os_semaphore_pend(&ftl->bitrate_thread_shutdown, STREAM_STATS_CAPTURE_MS);
796
+    if (!ftl_get_state(params->handle->priv, FTL_BITRATE_THRD))
797
+    {
798
+      break;
799
+    }
800
+  }
801
+  FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Shutting down bitrate thread");
802
+  free(params);
803
+  return 0;
804
+}
805
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.c Changed
20
 
1
@@ -28,6 +28,7 @@
2
 #include <string.h>
3
 #include <unistd.h>
4
 #include <sys/socket.h>
5
+#include <sys/ioctl.h>
6
 #include <errno.h>
7
 #include <poll.h>
8
 
9
@@ -85,6 +86,10 @@
10
   return setsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char*)&buffer_space, sizeof(buffer_space));
11
 }
12
 
13
+int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available) {
14
+  return ioctl(socket, FIONREAD, bytes_available);
15
+}
16
+
17
 int poll_socket_for_receive(SOCKET socket, int timeoutMs)
18
 {
19
   // timeoutMs behavior
20
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.h Changed
7
 
1
@@ -13,4 +13,5 @@
2
 int get_socket_send_buf(SOCKET socket, int *buffer_space);
3
 int set_socket_send_buf(SOCKET socket, int buffer_space);
4
 int poll_socket_for_receive(SOCKET socket, int ms_timeout);
5
+int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available);
6
 int shutdown_socket(SOCKET sock, int how);
7
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.c Changed
78
 
1
@@ -66,29 +66,62 @@
2
   return 0;
3
 }
4
 
5
-int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value) {
6
+int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global) {
7
 
8
-  if ((sem->name = strdup(name)) == NULL) {
9
-    return -1;
10
-  }
11
+  int retval = 0;
12
 
13
-  if (name == NULL || name[0] != '/') {
14
-    return -2;
15
-  }
16
+  sem->name = NULL;
17
+  sem->sem = NULL;
18
+
19
+  do {
20
+    if (name == NULL || name[0] != '/') {
21
+      retval = -1;
22
+      break;
23
+    }
24
+
25
+    //if the semaphore is intended to only be used by the same process and not across processes, give it unique name
26
+    if(!is_global) {
27
+      int name_len = strlen(name);
28
+
29
+      if ((sem->name = (char*)malloc( (name_len + 20) * sizeof(char))) == NULL) {
30
+        retval = -2;
31
+        break;
32
+      }
33
+
34
+      sprintf(sem->name, "%s_%d", name, (unsigned int)rand());
35
+    }
36
+    else {
37
+      if ((sem->name = strdup(name)) == NULL) {
38
+        return -2;
39
+      }
40
+    }
41
 
42
 #ifdef __ANDROID__
43
-  if ((sem->sem = (sem_t*)malloc(sizeof(sem_t))) == NULL) {
44
-    return -4;
45
-  }
46
+    if ((sem->sem = (sem_t*)malloc(sizeof(sem_t))) == NULL) {
47
+      retval = -4;
48
+      break;
49
+    }
50
 
51
-  if (sem_init(sem->sem, 0 /* pshared */, 0 /* value */)) {
52
+    if (sem_init(sem->sem, 0 /* pshared */, 0 /* value */)) {
53
 #else
54
-  if ((sem->sem = sem_open(name, oflag, 0644, value)) == SEM_FAILED) {
55
+    if ((sem->sem = sem_open(sem->name, oflag, 0644, value)) == SEM_FAILED) {
56
 #endif
57
-    return -3;
58
+      retval = -3;
59
+      break;
60
+    }
61
+
62
+    return retval;
63
+  }while(0);
64
+
65
+  if(sem->name != NULL){
66
+    free(sem->name);
67
   }
68
 
69
-  return 0;
70
+  if(sem->sem != NULL){
71
+    free(sem->sem);
72
+  }
73
+
74
+  return retval;
75
 }
76
 
77
 int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout) {
78
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.h Changed
18
 
1
@@ -23,6 +23,7 @@
2
 **/
3
 
4
 #include <stdbool.h>
5
+#include <stdio.h>
6
 #include <pthread.h>
7
 #include <semaphore.h>
8
 #include <fcntl.h>
9
@@ -58,7 +59,7 @@
10
 int os_unlock_mutex(OS_MUTEX *mutex);
11
 int os_delete_mutex(OS_MUTEX *mutex);
12
 
13
-int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value);
14
+int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global);
15
 int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout);
16
 int os_semaphore_post(OS_SEMAPHORE *sem);
17
 int os_semaphore_delete(OS_SEMAPHORE *sem);
18
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.c Changed
12
 
1
@@ -77,6 +77,10 @@
2
   return setsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char*)&buffer_space, sizeof(buffer_space));
3
 }
4
 
5
+int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available) {
6
+  return ioctlsocket(socket, FIONREAD, bytes_available);
7
+}
8
+
9
 int poll_socket_for_receive(SOCKET socket, int timeoutMs)
10
 {
11
   // timeoutMs behavior
12
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.h Changed
7
 
1
@@ -7,4 +7,5 @@
2
 int get_socket_send_buf(SOCKET socket, int *buffer_space);
3
 int set_socket_send_buf(SOCKET socket, int buffer_space);
4
 int poll_socket_for_receive(SOCKET socket, int ms_timeout);
5
+int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available);
6
 int shutdown_socket(SOCKET sock, int how);
7
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.c Changed
71
 
1
@@ -22,6 +22,7 @@
2
 * SOFTWARE.
3
 **/
4
 
5
+#include <stdlib.h>
6
 #include "threads.h"
7
 
8
 int os_init(){
9
@@ -86,22 +87,47 @@
10
   return 0;
11
 }
12
 
13
-char tmp[1024];
14
-
15
-int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value) {
16
-
17
-  if (name == NULL) {
18
-    return -1;
19
-  }
20
-
21
-  if ( (*sem = CreateSemaphore(NULL, value, MAX_SEM_COUNT, name)) == NULL){
22
-
23
-    FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, (LPTSTR)&tmp, 1000, NULL);
24
-
25
-    return -3;
26
+int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global) {
27
+
28
+  char *internal_name = NULL;
29
+  int retval = 0;
30
+
31
+  do {
32
+    if (name == NULL) {
33
+      retval = -1;
34
+      break;
35
+    }
36
+
37
+    //if the semaphore is intended to only be used by the same process and not across processes, give it unique name
38
+    if(!is_global) {
39
+      size_t name_len = strlen(name);
40
+      size_t max_name = name_len + 20;
41
+
42
+      if ((internal_name = (char*)malloc(max_name * sizeof(char))) == NULL) {
43
+        retval = -2;
44
+        break;
45
+      }
46
+
47
+      sprintf_s(internal_name, max_name, "%s_%d", name, (unsigned int)rand());
48
+    }
49
+    else {
50
+      if ((internal_name = _strdup(name)) == NULL) {
51
+        retval = -2;
52
+        break;
53
+      }
54
+    }  
55
+
56
+    if ( (*sem = CreateSemaphoreA(NULL, value, MAX_SEM_COUNT, (LPCSTR)internal_name)) == NULL){
57
+      retval = -3;
58
+      break;
59
+    }
60
+  }while(0);
61
+
62
+  if(internal_name != NULL){
63
+    free(internal_name);
64
   }
65
 
66
-  return 0;
67
+  return retval;
68
 }
69
 
70
 int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout) {
71
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.h Changed
18
 
1
@@ -23,6 +23,7 @@
2
 **/
3
 
4
 #include <Windows.h>
5
+#include <stdio.h>
6
 
7
 typedef CRITICAL_SECTION OS_MUTEX;
8
 
9
@@ -51,7 +52,7 @@
10
 int os_unlock_mutex(OS_MUTEX *mutex);
11
 int os_delete_mutex(OS_MUTEX *mutex);
12
 
13
-int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value);
14
+int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global);
15
 int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout);
16
 int os_semaphore_post(OS_SEMAPHORE *sem);
17
 int os_semaphore_delete(OS_SEMAPHORE *sem);
18
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-stream.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-stream.c Changed
28
 
1
@@ -930,7 +930,7 @@
2
                    p->nack_reqs -stream->last_nack_count;
3
            stream->last_nack_count = p->nack_reqs;
4
 
5
-           int log_level = p->nack_reqs > 2 ? LOG_INFO : LOG_DEBUG;
6
+           int log_level = p->nack_reqs > 0 ? LOG_INFO : LOG_DEBUG;
7
 
8
            blog(log_level, "Avg packet send per second %3.1f, "
9
                    "total nack requests %d",
10
@@ -941,7 +941,7 @@
11
            ftl_packet_stats_instant_msg_t *p =
12
                &status.msg.ipkt_stats;
13
 
14
-           int log_level = p->avg_rtt > 200 ? LOG_INFO : LOG_DEBUG;
15
+           int log_level = p->avg_rtt > 20 ? LOG_INFO : LOG_DEBUG;
16
 
17
            blog(log_level, "avg transmit delay %dms "
18
                    "(min: %d, max: %d), "
19
@@ -954,7 +954,7 @@
20
            ftl_video_frame_stats_msg_t *v =
21
                &status.msg.video_stats;
22
 
23
-           int log_level = v->queue_fullness > 5 ?
24
+           int log_level = v->queue_fullness > 0 ?
25
                LOG_INFO : LOG_DEBUG;
26
 
27
            blog(log_level, "Queue an average of %3.2f fps "
28
obs-studio-21.1.2.tar.xz/plugins/obs-qsv11/data/locale/fil-PH.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+TargetUsage="Paggamit ng Target"
3
+Bitrate="Bitreyt"
4
+MaxBitrate="Malakas na Bitreyt"
5
+RateControl="Pagkontrol ng rate"
6
+KeyframeIntervalSec="Pagitan ng Keyframe (segundo, 0=awto)"
7
+Profile="Anyo sa tagiliran"
8
+AsyncDepth="Lalim ng Async"
9
+Accuracy="Katumapakan"
10
+Convergence="Tagpo"
11
+ICQQuality="Kalidad ng ICQ"
12
+LookAheadDepth="Tignan mo ang nasa unahan ng Malalim"
13
+
14
obs-studio-21.1.2.tar.xz/plugins/obs-qsv11/data/locale/tl-PH.ini Added
14
 
1
@@ -0,0 +1,12 @@
2
+TargetUsage="Ang Target ng Usage"
3
+Bitrate="Bitrate"
4
+MaxBitrate="Pinakamataas na bitrate"
5
+RateControl="Ang Rate Kontrol"
6
+KeyframeIntervalSec="Ang Keyframe Interval (segundos, 0=awtomatik)"
7
+Profile="Ang Profile"
8
+AsyncDepth="Async Depth"
9
+Accuracy="Kahusayan"
10
+Convergence="Patagpo"
11
+ICQQuality="Kalidad ng ICQ"
12
+LookAheadDepth="Lalim ng Lookahead"
13
+
14
obs-studio-21.1.2.tar.xz/plugins/obs-text/data/locale/fil-PH.ini Added
36
 
1
@@ -0,0 +1,34 @@
2
+TextGDIPlus="Teksto (GDI+)"
3
+Font="Benditahan"
4
+Text="Teksto"
5
+ReadFromFile="Basahin galing sa file"
6
+TextFile="Tekstong file (UTF-8)"
7
+Filter.TextFiles="Teksto ng mga file"
8
+Filter.AllFiles="Ang lahat ng mga file"
9
+Color="Kulay"
10
+Opacity="Kalabuan"
11
+Gradient="Mapagmahal"
12
+Gradient.Color="Mapagmahal na Kulay"
13
+Gradient.Opacity="Mapagmahal na kalabuan"
14
+Gradient.Direction="Mapagmahal na Direksyon"
15
+BkColor="Panglikuran na Kulay"
16
+BkOpacity="Panglikuran na Kalabuan"
17
+Alignment="Pagkakahanay"
18
+Alignment.Left="Kaliwa"
19
+Alignment.Center="Gitna"
20
+Alignment.Right="Kanan"
21
+Vertical="Patayo"
22
+VerticalAlignment="Patayong Pagkakahanay"
23
+VerticalAlignment.Top="Nangunguna"
24
+VerticalAlignment.Bottom="Pinakailalim"
25
+Outline="Balangkas"
26
+Outline.Size="Balangkas na Sukat"
27
+Outline.Color="Balangkas na kulay"
28
+Outline.Opacity="Balangkas ng kalabuan"
29
+ChatlogMode="Chatlag Mowd"
30
+ChatlogMode.Lines="Linya ng limitasyon sa Chatlog"
31
+UseCustomExtents="Gamitin ang Pasadyang Nakakalawak na Teksto"
32
+UseCustomExtents.Wrap="Ibalot"
33
+Width="Lapad"
34
+Height="Taas"
35
+
36
obs-studio-21.1.2.tar.xz/plugins/obs-text/data/locale/tl-PH.ini Added
36
 
1
@@ -0,0 +1,34 @@
2
+TextGDIPlus="Teksto (GDI+)"
3
+Font="AngFont"
4
+Text="Teksto"
5
+ReadFromFile="Magbasa mula sa file"
6
+TextFile="Teksto File (UTF-8)"
7
+Filter.TextFiles="Teksto ng mgaFiles"
8
+Filter.AllFiles="Lahat ng mga Files"
9
+Color="Kulay"
10
+Opacity="Opacity"
11
+Gradient="Gradient"
12
+Gradient.Color="Gradient na Kulay"
13
+Gradient.Opacity="Gradient na Opacity"
14
+Gradient.Direction="Gradient na Direksyon"
15
+BkColor="Kulay sa Background"
16
+BkOpacity="Backround na Opacity"
17
+Alignment="Amgpagka-align"
18
+Alignment.Left="Kaliwa"
19
+Alignment.Center="Gitna"
20
+Alignment.Right="Kanan"
21
+Vertical="Patayo"
22
+VerticalAlignment="Patayo ang Pagka-align"
23
+VerticalAlignment.Top="Taas"
24
+VerticalAlignment.Bottom="Baba"
25
+Outline="Ang Outline"
26
+Outline.Size="Ang laki ng Outline"
27
+Outline.Color="Ang Kulay ng Outline"
28
+Outline.Opacity="Ang Outline Opacity"
29
+ChatlogMode="Modo ng Chatlog"
30
+ChatlogMode.Lines="Limitasyon ng linya sa Chatlog"
31
+UseCustomExtents="Gumamit ng Custom na Teksto sa Extents"
32
+UseCustomExtents.Wrap="Wrap"
33
+Width="Ang lapad"
34
+Height="Ang Taas"
35
+
36
obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/fil-PH.ini Added
68
 
1
@@ -0,0 +1,66 @@
2
+FadeTransition="Kumupas"
3
+CutTransition="Gumupit"
4
+SwipeTransition="Nakawin"
5
+SlideTransition="Magpadulas"
6
+StingerTransition="Tibo"
7
+FadeToColorTransition="Paglabong sagad sa kulay"
8
+Direction="Direksyon"
9
+Direction.Left="Kaliwa"
10
+Direction.Right="Kanan"
11
+Direction.Up="Pataas"
12
+Direction.Down="Pababa"
13
+SwipeIn="Mag-swipe In"
14
+Color="Kulay"
15
+VideoFile="Bidyo File"
16
+TransitionPoint="Paglipat ng tuldok (milsegundo)"
17
+TransitionPointFrame="Paglipat ng Punto (preym)"
18
+TransitionPointType="Paglipat ng Uri ng Punto"
19
+TransitionPointTypeFrame="Preym"
20
+TransitionPointTypeTime="Oras (milsegundo)"
21
+AudioFadeStyle="Lumabo ang Estilo ng Awdiyo"
22
+AudioFadeStyle.FadeOutFadeIn="Lumalabo sa paglipat ng punto pagkatapos maglabo"
23
+AudioFadeStyle.CrossFade="Kruspeyd"
24
+SwitchPoint="Tugatok ng Kulay ng Punto (porsyento)"
25
+LumaWipeTransition="Pamunas na Luma"
26
+LumaWipe.Image="Larawan"
27
+LumaWipe.Invert="Baliktarin"
28
+LumaWipe.Softness="Lambot"
29
+LumaWipe.Type.BarndoorBottomLeft="Kamalig na pinto sa Kailaliman ng Kaliwa"
30
+LumaWipe.Type.BarndoorHorizontal="Kamalig na pintong Pahalang"
31
+LumaWipe.Type.BarndoorTopLeft="Kamalig na pinto sa Taas ng kaliwa"
32
+LumaWipe.Type.BarndoorVertical="Kamalig na pintong Patayo"
33
+LumaWipe.Type.BlindsHorizontal="Mga blind na Pahalang"
34
+LumaWipe.Type.BoxBottomLeft="Kahon sa Kailaliman ng Kaliwa"
35
+LumaWipe.Type.BoxBottomRight="Kahon sa Kailaliman ng Kanan"
36
+LumaWipe.Type.BoxTopLeft="Kahon sa tuktok ng kaliwang bahagi"
37
+LumaWipe.Type.BoxTopRight="Kahon sa Tuktok ng Kanang bahagi"
38
+LumaWipe.Type.Burst="Pagputok"
39
+LumaWipe.Type.CheckerboardSmall="Damahang maliit"
40
+LumaWipe.Type.Circles="Mga lupon"
41
+LumaWipe.Type.Clock="Orasan"
42
+LumaWipe.Type.Cloud="Ulap"
43
+LumaWipe.Type.Curtain="Kurtina"
44
+LumaWipe.Type.Fan="Pamaypay"
45
+LumaWipe.Type.Fractal="Fraktal"
46
+LumaWipe.Type.Iris="Ayris"
47
+LumaWipe.Type.LinearHorizontal="Sa guhit na Pahalang"
48
+LumaWipe.Type.LinearTopLeft="Guhit sa Kaliwang tuktok"
49
+LumaWipe.Type.LinearTopRight="Guhit sa kanang tuktok"
50
+LumaWipe.Type.LinearVertical="Sa guhit na patayo"
51
+LumaWipe.Type.ParallelZigzagHorizontal="Nakahirelang Palikong Pahalang"
52
+LumaWipe.Type.ParallelZigzagVertical="Pahirelang Palikong Patayo"
53
+LumaWipe.Type.Sinus9="Sinus na 9"
54
+LumaWipe.Type.Spiral="Pilipit"
55
+LumaWipe.Type.Square="Kuwadrado"
56
+LumaWipe.Type.Squares="Mga kuwadrado"
57
+LumaWipe.Type.Stripes="Mga guhit"
58
+LumaWipe.Type.StripsHorizontal="Pahalang na Simutin"
59
+LumaWipe.Type.StripsVertical="Patayong simutin"
60
+LumaWipe.Type.Watercolor="Waterkolor"
61
+LumaWipe.Type.ZigzagHorizontal="Palikong Pahalang"
62
+LumaWipe.Type.ZigzagVertical="Palikong Patayo"
63
+AudioMonitoring="Pagsubaybay sa Audio"
64
+AudioMonitoring.None="I-off ang Pagsubaybay"
65
+AudioMonitoring.MonitorOnly="Magsubaybay lang (i-mute ang output)"
66
+AudioMonitoring.Both="Subaybayan at Output"
67
+
68
obs-studio-21.0.3.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini Changed
8
 
1
@@ -1,5 +1,5 @@
2
 FadeTransition="Затухание"
3
-CutTransition="Обрезать"
4
+CutTransition="Обрезка"
5
 SwipeTransition="Перемещение"
6
 SlideTransition="Сдвиг"
7
 StingerTransition="Стингер"
8
obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/tl-PH.ini Added
68
 
1
@@ -0,0 +1,66 @@
2
+FadeTransition="Palabo"
3
+CutTransition="Putulin"
4
+SwipeTransition="I-swipe"
5
+SlideTransition="I-slide"
6
+StingerTransition="Stinger"
7
+FadeToColorTransition="Palabo sa Kulay"
8
+Direction="Direksyon"
9
+Direction.Left="Kaliwa"
10
+Direction.Right="Kanan"
11
+Direction.Up="Pataas"
12
+Direction.Down="Pababa"
13
+SwipeIn="Mag-swipe papasok"
14
+Color="Kulay"
15
+VideoFile="File ng mga video"
16
+TransitionPoint="Pinagmulan ng Pagbabago (millisegundos)"
17
+TransitionPointFrame="Pinagmulan ng Pagbabago (Frame)"
18
+TransitionPointType="Pinagmulan ng Pagbabago ng Tipo"
19
+TransitionPointTypeFrame="Ang frame"
20
+TransitionPointTypeTime="Oras (millisegundos)"
21
+AudioFadeStyle="Palabo ang istilo ng Audio"
22
+AudioFadeStyle.FadeOutFadeIn="Palabo ang palabas sa pinagmulan ng pagbabago tapos palabo papasok"
23
+AudioFadeStyle.CrossFade="Crossfade"
24
+SwitchPoint="Peak Color Point (porsyento)"
25
+LumaWipeTransition="Luma Wipe"
26
+LumaWipe.Image="Imahe"
27
+LumaWipe.Invert="Ibaliktad"
28
+LumaWipe.Softness="Kalambutan"
29
+LumaWipe.Type.BarndoorBottomLeft="Barndoor Pailalim sa Kaliwa"
30
+LumaWipe.Type.BarndoorHorizontal="Barndoor Pahiga"
31
+LumaWipe.Type.BarndoorTopLeft="Barndoor Pataas sa Kaliwa"
32
+LumaWipe.Type.BarndoorVertical="Barndoor Patayo"
33
+LumaWipe.Type.BlindsHorizontal="Blinds Pahiga"
34
+LumaWipe.Type.BoxBottomLeft="Box Pailalim sa Kaliwa"
35
+LumaWipe.Type.BoxBottomRight="Box Pailalim sa Kanan"
36
+LumaWipe.Type.BoxTopLeft="Box Paitaas sa Kaliwa"
37
+LumaWipe.Type.BoxTopRight="Box Paitaas sa Kanan"
38
+LumaWipe.Type.Burst="Pasabog"
39
+LumaWipe.Type.CheckerboardSmall="Maliit na Checkerboard"
40
+LumaWipe.Type.Circles="Mga Bilog"
41
+LumaWipe.Type.Clock="Orasan"
42
+LumaWipe.Type.Cloud="Ulap"
43
+LumaWipe.Type.Curtain="Kurtina"
44
+LumaWipe.Type.Fan="Fan"
45
+LumaWipe.Type.Fractal="Fractal"
46
+LumaWipe.Type.Iris="Iris"
47
+LumaWipe.Type.LinearHorizontal="Linear Pahiga"
48
+LumaWipe.Type.LinearTopLeft="Linear Pataas sa Kaliwa"
49
+LumaWipe.Type.LinearTopRight="Linear Pataas sa Kanan"
50
+LumaWipe.Type.LinearVertical="Linear Patayo"
51
+LumaWipe.Type.ParallelZigzagHorizontal="Parallel Zigzag Pahiga"
52
+LumaWipe.Type.ParallelZigzagVertical="Parallel Zigzag Patayo"
53
+LumaWipe.Type.Sinus9="Sinus 9"
54
+LumaWipe.Type.Spiral="Pilipit"
55
+LumaWipe.Type.Square="Kuwadrado"
56
+LumaWipe.Type.Squares="Mga kuwadrado"
57
+LumaWipe.Type.Stripes="Mga guhit"
58
+LumaWipe.Type.StripsHorizontal="Pahiga na strips"
59
+LumaWipe.Type.StripsVertical="Patayo na mga strips"
60
+LumaWipe.Type.Watercolor="Watercolor"
61
+LumaWipe.Type.ZigzagHorizontal="Zigzag Pahiga"
62
+LumaWipe.Type.ZigzagVertical="Vertical"
63
+AudioMonitoring="Pag-monitor sa audio"
64
+AudioMonitoring.None="Patayin ang Monitor"
65
+AudioMonitoring.MonitorOnly="Monitor lamang (i-mute ang output)"
66
+AudioMonitoring.Both="Monitor at Output"
67
+
68
obs-studio-21.0.3.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini Changed
10
 
1
@@ -2,7 +2,7 @@
2
 CutTransition="Kes"
3
 SwipeTransition="Kaydır"
4
 SlideTransition="Kaydır"
5
-StingerTransition="Isırıcı"
6
+StingerTransition="Stinger"
7
 FadeToColorTransition="Fade to Color"
8
 Direction="Yönlendir"
9
 Direction.Left="Sol"
10
obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/fil-PH.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Bitrate="Bitreyt"
3
+CustomBufsize="Gamitin ang Pasadyang Sukat ng Buffer"
4
+BufferSize="Sukat Buffer"
5
+RateControl="Kontrolin ang Singil"
6
+CRF="CRF"
7
+KeyframeIntervalSec="Pagitan ng Keyframe (segundo, 0=awto)"
8
+CPUPreset="Paggamit sa Preset ng CPU (mataas=konti CPU)"
9
+Profile="Propayl"
10
+Tune="Tono"
11
+None="(Wala)"
12
+EncoderOptions="x264 Pagpipilian (magkahiwalay sa pamamagitan ng patlang)"
13
+VFR="Pabago-bago ng Framerate (VFR)"
14
+
15
obs-studio-21.0.3.tar.xz/plugins/obs-x264/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/nb-NO.ini Changed
10
 
1
@@ -4,7 +4,7 @@
2
 RateControl="Hastighetskontroll"
3
 CRF="CRF"
4
 KeyframeIntervalSec="Nøkkelbildeintervall (sekunder, 0 = automatisk)"
5
-CPUPreset="Forhåndsinstilling for prosessorbruk (raskere betyr mindre belastning)"
6
+CPUPreset="Forhåndsinnstilling for prosessorbruk (raskere = mindre CPU-bruk)"
7
 Profile="Profil"
8
 Tune="Still inn"
9
 None="(Ingen)"
10
obs-studio-21.0.3.tar.xz/plugins/obs-x264/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/ru-RU.ini Changed
10
 
1
@@ -6,7 +6,7 @@
2
 KeyframeIntervalSec="Интервал ключевых кадров (сек, 0=авто)"
3
 CPUPreset="Предустановка использования ЦП (выше = меньше)"
4
 Profile="Профиль"
5
-Tune="Настроить"
6
+Tune="Настройка"
7
 None="(Нет)"
8
 EncoderOptions="Настройки x264 (разделённые пробелом)"
9
 VFR="Переменная частота кадров (VFR)"
10
obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/tl-PH.ini Added
15
 
1
@@ -0,0 +1,13 @@
2
+Bitrate="Ang Bitrate"
3
+CustomBufsize="Gamitin ang Custom Buffer Size"
4
+BufferSize="Laki ng Buffer"
5
+RateControl="Kontrol ng Rate"
6
+CRF="CRF"
7
+KeyframeIntervalSec="Interbalng Keyframe (segundos, 0=awtomatik)"
8
+CPUPreset="Ang Usage Preset ng CPU (mataas = mababang CPU)"
9
+Profile="Ang Profile"
10
+Tune="Ang tono"
11
+None="(Wala)"
12
+EncoderOptions="x264 Mga opsyon (pinaghiwalay ng espasyo)"
13
+VFR="Variable Framerate (VFR)"
14
+
15
obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/locale/fil-PH.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+StreamingServices="Serbisyong Striming"
3
+CustomStreamingServer="Pagsadya ng striming na serber"
4
+Service="Serbisyo"
5
+Server="Serber"
6
+Server.Auto="Awto (Nirekomenda)"
7
+StreamKey="Susi ng Strim"
8
+UseAuth="Paggamit ng pagpapatunay"
9
+Username="Ginagamit na pangalan"
10
+Password="Password"
11
+ShowAll="Ipakita ang lahat ng mga serbisyo"
12
+
13
obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/locale/nb-NO.ini Changed
10
 
1
@@ -3,7 +3,7 @@
2
 Service="Tjeneste"
3
 Server="Tjener"
4
 Server.Auto="Auto (Anbefales)"
5
-StreamKey="Strømingsnøkkel"
6
+StreamKey="Strømmenøkkel"
7
 UseAuth="Bruk godkjenning"
8
 Username="Brukernavn"
9
 Password="Passord"
10
obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/locale/tl-PH.ini Added
13
 
1
@@ -0,0 +1,11 @@
2
+StreamingServices="Serbisyo ng Streaming"
3
+CustomStreamingServer="Ang Server ng Custom Streaming"
4
+Service="Serbisyo"
5
+Server="Ang Server"
6
+Server.Auto="Awtomatik (Nirokomenda)"
7
+StreamKey="Ang Stream key"
8
+UseAuth="Gumamit ng patunay"
9
+Username="Username"
10
+Password="Password"
11
+ShowAll="Ipakita ang lahat ng mga serbisyo"
12
+
13
obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-21.1.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": 78,
5
+   "version": 80,
6
    "files": [
7
        {
8
            "name": "services.json",
9
-           "version": 78
10
+           "version": 80
11
        }
12
    ]
13
 }
14
obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/services.json Changed
142
 
1
@@ -714,6 +714,10 @@
2
                     "url": "rtmp://seoul.restream.io/live"
3
                 },
4
                 {
5
+                    "name": "Asia (Tokyo, Japan)",
6
+                    "url": "rtmp://tokyo.restream.io/live"
7
+                },
8
+                {
9
                     "name": "Australia (Sydney)",
10
                     "url": "rtmp://au.restream.io/live"
11
                 }
12
@@ -725,39 +729,74 @@
13
         {
14
             "name": "Nood",
15
             "servers": [
16
-              {
17
-                  "name": "EU Central: Frankfurt, Germany",
18
-                  "url": "rtmp://broadcast-frf.nood.tv/20D2AB/live"
19
-              },
20
-              {
21
-                  "name": "EU North: Amsterdam, Netherlands",
22
-                  "url": "rtmp://broadcast-ams.nood.tv/20D2AB/live"
23
-              },
24
-              {
25
-                  "name": "EU West: Stockholm, Sweden",
26
-                  "url": "rtmp://broadcast-arn.nood.tv/20D2AB/live"
27
-              },
28
-              {
29
-                  "name": "US East: Washington, DC",
30
-                  "url": "rtmp://broadcast-dca.nood.tv/20D2AB/live"
31
-              },
32
-              {
33
-                  "name": "US West: Los Angeles, CA",
34
-                  "url": "rtmp://broadcast-oxr.nood.tv/20D2AB/live"
35
-              },
36
-              {
37
-                  "name": "Australia: Sydney",
38
-                  "url": "rtmp://broadcast-syd.nood.tv/20D2AB/live"
39
-              },
40
-              {
41
-                  "name": "Asia: Hong Kong, China",
42
-                  "url": "rtmp://broadcast-hhp.nood.tv/20D2AB/live"
43
-              }
44
+                {
45
+                    "name": "Global: Fastest (Recommended)",
46
+                    "url": "rtmp://stream.nood.tv/live_source"
47
+                },
48
+                {
49
+                    "name": "NA East: Ashburn, VA, USA",
50
+                    "url": "rtmp://us-east-1.stream.nood.tv/live_source"
51
+                },
52
+                {
53
+                    "name": "NA East: Columbus, OH, USA",
54
+                    "url": "rtmp://us-east-2.stream.nood.tv/live_source"
55
+                },
56
+                {
57
+                    "name": "NA East: Montreal, QC, CAN",
58
+                    "url": "rtmp://ca-central-1.stream.nood.tv/live_source"
59
+                },
60
+                {
61
+                    "name": "NA West: San Francisco, CA, USA",
62
+                    "url": "rtmp://us-west-1.stream.nood.tv/live_source"
63
+                },
64
+                {
65
+                    "name": "NA West: Portland, OR, USA",
66
+                    "url": "rtmp://us-west-2.stream.nood.tv/live_source"
67
+                },
68
+                {
69
+                    "name": "SA East: Sao Paulo, BRA",
70
+                    "url": "rtmp://sa-east-1.stream.nood.tv/live_source"
71
+                },
72
+                {
73
+                    "name": "EU West: Dublin, IRL",
74
+                    "url": "rtmp://eu-west-1.stream.nood.tv/live_source"
75
+                },
76
+                {
77
+                    "name": "EU West: London, GBR",
78
+                    "url": "rtmp://eu-west-2.stream.nood.tv/live_source"
79
+                },
80
+                {
81
+                    "name": "EU West: Paris, FRA",
82
+                    "url": "rtmp://eu-west-3.stream.nood.tv/live_source"
83
+                },
84
+                {
85
+                    "name": "EU West: Frankfurt, DEU",
86
+                    "url": "rtmp://eu-central-1.stream.nood.tv/live_source"
87
+                },
88
+                {
89
+                    "name": "Asia North-East: Tokyo, JPN",
90
+                    "url": "rtmp://ap-northeast-1.stream.nood.tv/live_source"
91
+                },
92
+                {
93
+                    "name": "Asia North-East: Seoul, KOR",
94
+                    "url": "rtmp://ap-northeast-2.stream.nood.tv/live_source"
95
+                },
96
+                {
97
+                    "name": "Asia South-East: Singapore, SGP",
98
+                    "url": "rtmp://ap-southeast-1.stream.nood.tv/live_source"
99
+                },
100
+                {
101
+                    "name": "Asia South-East: Sydney, AUS",
102
+                    "url": "rtmp://ap-southeast-2.stream.nood.tv/live_source"
103
+                },
104
+                {
105
+                    "name": "Asia South: Mumbai, IND",
106
+                    "url": "rtmp://ap-south-1.stream.nood.tv/live_source"
107
+                }
108
             ],
109
             "recommended": {
110
                 "keyint": 2,
111
-                "profile": "main",
112
-                "max video bitrate": 3500,
113
+                "max video bitrate": 25000,
114
                 "max audio bitrate": 192
115
             }
116
         },
117
@@ -1175,6 +1214,24 @@
118
                 "max video bitrate": 1000,
119
                 "max audio bitrate": 64
120
             }
121
+        },
122
+        {
123
+            "name": "Vimeo",
124
+            "servers": [
125
+                {
126
+                    "name": "Default",
127
+                    "url": "rtmp://rtmp.cloud.vimeo.com/live"
128
+                }
129
+            ]
130
+        },
131
+        {
132
+            "name": "Aparat",
133
+            "servers": [
134
+                {
135
+                    "name": "Default",
136
+                    "url": "rtmp://rtmp.cdn.asset.aparat.com:443/event"
137
+                }
138
+            ]
139
         }
140
     ]
141
 }
142
obs-studio-21.1.2.tar.xz/plugins/text-freetype2/data/locale/fil-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+TextFreetype2="Teksto (Libreng uri 2)"
3
+Font="Benditahan"
4
+Text="Teksto"
5
+TextFile="Pagkikil sa Teksto (UTF-8 o UTF-16)"
6
+TextFileFilter="Pakikil sa mga Teksto (*. txt);;"
7
+ChatLogMode="Ang Satsatan ay nasa paraan na log (huling anim na mga linya)"
8
+Color1="Kulay isa"
9
+Color2="Kulay pangalawa"
10
+Outline="Balangkas"
11
+DropShadow="I-drop ang Anino"
12
+ReadFromFile="Bahasin mula sa payl"
13
+CustomWidth="Pasadyang pahalang na teksto"
14
+WordWrap="Salitang Na-i-wrap"
15
+
16
obs-studio-21.1.2.tar.xz/plugins/text-freetype2/data/locale/tl-PH.ini Added
16
 
1
@@ -0,0 +1,14 @@
2
+TextFreetype2="Teskto (FreeType 2)"
3
+Font="Ang font"
4
+Text="Teksto"
5
+TextFile="Teksto ng file (UTF-8 or UTF-16)"
6
+TextFileFilter="Teksto ng mga nilalaman (*.txt);;"
7
+ChatLogMode="Ang log modeng chat (huling 6 na linya)"
8
+Color1="Unang Kulay"
9
+Color2="Pangalawang Kulay"
10
+Outline="Ang Outline"
11
+DropShadow="I-drop ang Shadow"
12
+ReadFromFile="Magabasa mula sa aking file"
13
+CustomWidth="Ang custom width ng teksto"
14
+WordWrap="Wrap ng mga Salita"
15
+
16
obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/fil-PH.ini Added
17
 
1
@@ -0,0 +1,15 @@
2
+VLCSource="VLC Pinagmulan ng Bidyo"
3
+Playlist="Playlist"
4
+LoopPlaylist="Talaan ng siluin"
5
+Shuffle="I-shuffle na Playlist"
6
+PlaybackBehavior="Pagiging kita ng PagPag-uugali"
7
+PlaybackBehavior.StopRestart="Itigil kapag hindi nakikita, i-restart kapag nakikita na"
8
+PlaybackBehavior.PauseUnpause="I-pause kapag hindi nakikita, i-unpause kapag nakikita na"
9
+PlaybackBehavior.AlwaysPlay="Palaging paganahin kahit na hindi nakikita"
10
+NetworkCaching="Network Kaching (ms)"
11
+PlayPause="Patugtugin/I-pause"
12
+Restart="I-restart"
13
+Stop="Itigil"
14
+PlaylistNext="Susunod"
15
+PlaylistPrev="Nakaraan"
16
+
17
obs-studio-21.0.3.tar.xz/plugins/vlc-video/data/locale/he-IL.ini -> obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/he-IL.ini Changed
17
 
1
@@ -1,8 +1,15 @@
2
 VLCSource="מקור וידאו VLC"
3
 Playlist="רשימת השמעה"
4
 LoopPlaylist="לולאת רשימת השמעה"
5
+Shuffle="ערבב רשימת השמעה"
6
 PlaybackBehavior="התנהגות ניראות"
7
 PlaybackBehavior.StopRestart="עצור כאשר אינו נראה, התחל מחדש כאשר נראה"
8
 PlaybackBehavior.PauseUnpause="השהה כאשר אינו נראה, בטל השהייה כאשר נראה"
9
 PlaybackBehavior.AlwaysPlay="נגן תמיד גם כאשר לא נראה"
10
+NetworkCaching="רשת אחסון מטמטון (מילי שניות)"
11
+PlayPause="הפעל/הפסק"
12
+Restart="הפעל מחדש"
13
+Stop="עצור"
14
+PlaylistNext="הבא"
15
+PlaylistPrev="הקודם"
16
 
17
obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/ro-RO.ini Added
4
 
1
@@ -0,0 +1,2 @@
2
+VLCSource="Sursă Video VLC"
3
+
4
obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/tl-PH.ini Added
17
 
1
@@ -0,0 +1,15 @@
2
+VLCSource="Pinagmulan ng VLC Video"
3
+Playlist="Mga Playlist"
4
+LoopPlaylist="Loop ng mga Playlist"
5
+Shuffle="I-shuffle ang mga Playlist"
6
+PlaybackBehavior="Ang nakikitang kilos"
7
+PlaybackBehavior.StopRestart="Huminto kung wala ng makita, i-restart kung mero ng makita"
8
+PlaybackBehavior.PauseUnpause="Ihinto kung walang makita, magpatuloy kungwala ng makita"
9
+PlaybackBehavior.AlwaysPlay="Patuloy na mag-play kahit wala ng makita"
10
+NetworkCaching="Network Caching (ms)"
11
+PlayPause="I-play/Ihinto"
12
+Restart="I-restart"
13
+Stop="Ihinto"
14
+PlaylistNext="Susunod"
15
+PlaylistPrev="Nakaraan"
16
+
17
obs-studio-21.0.3.tar.xz/plugins/win-capture/data/locale/cs-CZ.ini -> obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/cs-CZ.ini Changed
9
 
1
@@ -7,6 +7,7 @@
2
 WindowCapture.Priority.Exe="Shoda názvu, jinak najít okno stejného procesu"
3
 CaptureCursor="Zaznamenávat kurzor"
4
 Compatibility="Více-adaptérová kompaktibilita"
5
+SLIFix="Zaznamenávací mód SLI/Crossfire (pomalý)"
6
 AllowTransparency="Povolit průhlednost"
7
 Monitor="Obrazovka"
8
 PrimaryMonitor="Primární obrazovka"
9
obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/fil-PH.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+MonitorCapture="Ipakita ang Kumuha"
3
+WindowCapture="Kumuha ng window"
4
+WindowCapture.Window="Bintana"
5
+WindowCapture.Priority="Bintanang Tugma sa Prayoridad"
6
+WindowCapture.Priority.Title="Pamagat ng Window na mas tugma"
7
+WindowCapture.Priority.Class="Tugmang pamagat, kung hindi matatagpuan ang window sa parehong uri"
8
+WindowCapture.Priority.Exe="Tugmang pamagat, kung hindi makikita ang window sa parehong maipapatupad"
9
+CaptureCursor="Kumuha ng Cursor"
10
+Compatibility="Ang Pagkatugma ng Multi-adapter"
11
+SLIFix="SLI/Crossfire nasa Mode ng Pagkuha (Mabagal)"
12
+AllowTransparency="Pahintulutan ang Pag-aninaw"
13
+Monitor="Magpakita"
14
+PrimaryMonitor="Pangunahing pagsubaybay"
15
+GameCapture="Makuha ang Laro"
16
+GameCapture.AnyFullscreen="Kumuha ng kahit na anong fullscreen ng aplikasyon"
17
+GameCapture.CaptureWindow="Kumuha ng tiyak na window"
18
+GameCapture.UseHotkey="Kumuha ng pangbungad na window kasama ang hotkey"
19
+GameCapture.ForceScaling="Pwersahang Pagsusukat"
20
+GameCapture.ScaleRes="Antas ng Paglutas"
21
+GameCapture.LimitFramerate="Limitahan ang pagkuha ng framerate"
22
+GameCapture.CaptureOverlays="Kumuha ng ikatlong-parte ng mga overlays (tulad ng koponan)"
23
+GameCapture.AntiCheatHook="Gamitin ang iwas-daya para sa pagkatugma ng hook"
24
+GameCapture.HotkeyStart="Kumuha ng pangbungad na window"
25
+GameCapture.HotkeyStop="I-de-aktibo ang pagkuha"
26
+Mode="Paraan"
27
+
28
obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/he-IL.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+MonitorCapture="לכידת תצוגה"
3
+WindowCapture="לכידת חלון"
4
+WindowCapture.Window="חלון"
5
+WindowCapture.Priority="חלון התאמת עדיפות"
6
+WindowCapture.Priority.Title="כותרת חלון חייבת להתאים"
7
+WindowCapture.Priority.Class="התאם כותרת, אחרת מצא חלון מאותו סוג"
8
+WindowCapture.Priority.Exe="התאם כותרת, אחרת תמצא חלון של אותו קובץ הפעלה"
9
+CaptureCursor="לכד סמן"
10
+Compatibility="מתאם מרובה תאימות"
11
+SLIFix="SLI/Crossfire מצב לכידה (איטי)"
12
+AllowTransparency="אפשר שקיפות"
13
+Monitor="צג"
14
+PrimaryMonitor="צג ראשי"
15
+GameCapture="לכידת משחק"
16
+GameCapture.AnyFullscreen="לכוד כל יישום מסך מלא"
17
+GameCapture.CaptureWindow="לכידת חלון ספציפי"
18
+GameCapture.UseHotkey="לכוד חלון חזית עם hotkey"
19
+GameCapture.ForceScaling="הכרח שינוי גודל"
20
+GameCapture.ScaleRes="גודל רזולוציה"
21
+GameCapture.LimitFramerate="מגבלת לכידת קצב פריימים"
22
+GameCapture.CaptureOverlays="לכידת כיסוי צד שלישי (כגון סטים)"
23
+GameCapture.AntiCheatHook="השתמש באנטי-צ'יט לרמות הוק"
24
+GameCapture.HotkeyStart="לכידת חלון חזית"
25
+GameCapture.HotkeyStop="בטל לכידה"
26
+Mode="מצב"
27
+
28
obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/tl-PH.ini Added
28
 
1
@@ -0,0 +1,26 @@
2
+MonitorCapture="Mag Capture ng Display"
3
+WindowCapture="Mag Capture ng Window"
4
+WindowCapture.Window="Ang Window"
5
+WindowCapture.Priority="Ang Match Priority ng Window"
6
+WindowCapture.Priority.Title="Ang paksa ay dapat tumugma sa Window"
7
+WindowCapture.Priority.Class="Tumugma ang paksa, kung hindi hanapin ang kapareho"
8
+WindowCapture.Priority.Exe="Tumugma ang paksa, kung hindi hanapin ang kaparehong pinatutupad"
9
+CaptureCursor="Ang Capture Cursor"
10
+Compatibility="Maraming-adapter Compatibility"
11
+SLIFix="SLI/Crossfire Capture Mode (Mahina)"
12
+AllowTransparency="Hayaan ang Transparency"
13
+Monitor="Ang Display"
14
+PrimaryMonitor="Ang Primirong Monitor"
15
+GameCapture="Ang GameCapture"
16
+GameCapture.AnyFullscreen="Mag-capture ng kahit alin sa fullscreen na aplikasyon"
17
+GameCapture.CaptureWindow="Mag-capture ng partikular na window"
18
+GameCapture.UseHotkey="Mag-capture ng foreground window kasama ang hotkey"
19
+GameCapture.ForceScaling="Pwersa ng Scaling"
20
+GameCapture.ScaleRes="Resolusyon ng Scale"
21
+GameCapture.LimitFramerate="Limitahan ang capture framerate"
22
+GameCapture.CaptureOverlays="Mag-capture ng mga third-party overlays (katulad ng steam)"
23
+GameCapture.AntiCheatHook="Gumamit ng pangkontra-cheat compatibility hook"
24
+GameCapture.HotkeyStart="Mag-capture ng foreground window"
25
+GameCapture.HotkeyStop="I-deactivate ang capture"
26
+Mode="Ang Moda"
27
+
28
obs-studio-21.0.3.tar.xz/plugins/win-capture/data/locale/zh-CN.ini -> obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/zh-CN.ini Changed
9
 
1
@@ -7,6 +7,7 @@
2
 WindowCapture.Priority.Exe="匹配标题, 否则查找同样可执行程序的窗口"
3
 CaptureCursor="捕捉光标"
4
 Compatibility="多适配器的兼容性"
5
+SLIFix="SLI/Crossfire 捕获模式 (慢)"
6
 AllowTransparency="允许透明度"
7
 Monitor="显示器"
8
 PrimaryMonitor="主监视器"
9
obs-studio-21.0.3.tar.xz/plugins/win-capture/data/locale/zh-TW.ini -> obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/zh-TW.ini Changed
9
 
1
@@ -7,6 +7,7 @@
2
 WindowCapture.Priority.Exe="與標題相符,如沒有則找尋相同執行檔的視窗"
3
 CaptureCursor="擷取游標"
4
 Compatibility="多顯示卡相容性"
5
+SLIFix="SLI/Crossfire擷取模式(慢)"
6
 AllowTransparency="允許透明"
7
 Monitor="顯示器"
8
 PrimaryMonitor="主顯示器"
9
obs-studio-21.0.3.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-21.1.2.tar.xz/plugins/win-capture/game-capture.c Changed
20
 
1
@@ -456,7 +456,7 @@
2
    if (pressed && gc->config.mode == CAPTURE_MODE_HOTKEY) {
3
        info("Activate hotkey pressed");
4
        os_atomic_set_long(&gc->hotkey_window,
5
-               (long)GetForegroundWindow());
6
+               (long)(uintptr_t)GetForegroundWindow());
7
        os_atomic_set_bool(&gc->deactivate_hook, true);
8
        os_atomic_set_bool(&gc->activate_hook_now, true);
9
    }
10
@@ -1582,7 +1582,8 @@
11
    bool activate_now = os_atomic_set_bool(&gc->activate_hook_now, false);
12
 
13
    if (activate_now) {
14
-       HWND hwnd = (HWND)os_atomic_load_long(&gc->hotkey_window);
15
+       HWND hwnd = (HWND)(uintptr_t)os_atomic_load_long(
16
+               &gc->hotkey_window);
17
 
18
        if (is_uwp_window(hwnd))
19
            hwnd = get_uwp_actual_window(hwnd);
20
obs-studio-21.0.3.tar.xz/plugins/win-capture/get-graphics-offsets/d3d9-offsets.cpp -> obs-studio-21.1.2.tar.xz/plugins/win-capture/get-graphics-offsets/d3d9-offsets.cpp Changed
90
 
1
@@ -95,7 +95,13 @@
2
        0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00,
3
        0xFF, 0x00,
4
        0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00
5
-   }
6
+   },
7
+   {
8
+       0xF8, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00,
9
+       0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00,
10
+       0xFF, 0x00,
11
+       0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
12
+   },
13
 };
14
 
15
 static const uint8_t mask_cmp[][MAX_CMP_SIZE] = {
16
@@ -124,6 +130,21 @@
17
        0x39, 0x80, 0x00, 0x00, 0x00, 0x00,
18
        0x75, 0x00,
19
        0x40, 0xB8, 0x00, 0x00, 0x00, 0x00
20
+   },
21
+   /*
22
+   * Windows 10 April 2018
23
+   * 49 8B 87 58 40 00 00                 mov     rax, [r15+4058h]
24
+   * 39 98 C0 53 00 00                    cmp     [rax+53C0h], ebx
25
+   * 75 12                                jnz     short loc_1800A7FEC
26
+   * 48 8D 15 7F B6 09 00                 lea     rdx, addrErrorMsg
27
+   *
28
+   * Note: different instructions, last byte skipped due to MAX_CMP_SIZE
29
+   */
30
+   {
31
+       0x48, 0x8B, 0x80, 0x00, 0x00, 0x00, 0x00,
32
+       0x39, 0x80, 0x00, 0x00, 0x00, 0x00,
33
+       0x75, 0x00,
34
+       0x48, 0x8D, 0x00, 0x00, 0x00, 0x00
35
    }
36
 };
37
 
38
@@ -131,6 +152,7 @@
39
 static const uint32_t code_offsets[][2] = {
40
    {3, 10},
41
    {3, 9},
42
+   {3, 9},
43
 };
44
 #else
45
 
46
@@ -148,7 +170,13 @@
47
        0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF,
48
        0xFF, 0x00,
49
        0xFF, 0x00, 0x00, 0x00, 0x00
50
-   }
51
+   },
52
+   {
53
+       0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00,
54
+       0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF,
55
+       0xFF, 0x00,
56
+       0xFF, 0x00, 0x00, 0x00, 0x00
57
+   },
58
 };
59
 
60
 static const uint8_t mask_cmp[][MAX_CMP_SIZE] = {
61
@@ -177,6 +205,20 @@
62
        0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
63
        0x75, 0x00,
64
        0x68, 0x00, 0x00, 0x00, 0x00
65
+   },
66
+
67
+   /*
68
+   * Windows 10 April 2018 Update
69
+   * 8B 86 68 2B 00 00         mov     eax, [esi+2B68h]
70
+   * 83 B8 F4 4D 00 00 00      cmp     dword ptr [eax+4DF4h], 0
71
+   * 75 0F                     jnz     short loc_100D9A9C
72
+   * BA 08 71 01 10            mov     edx, offset errMsg
73
+   */
74
+   {
75
+       0x8B, 0x80, 0x00, 0x00, 0x00, 0x00,
76
+       0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
77
+       0x75, 0x00,
78
+       0xBA, 0x00, 0x00, 0x00, 0x00
79
    }
80
 };
81
 
82
@@ -184,6 +226,7 @@
83
 static const uint32_t code_offsets[][2] = {
84
    {2, 8},
85
    {2, 8},
86
+   {2, 8},
87
 };
88
 #endif
89
 
90
obs-studio-21.0.3.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c -> obs-studio-21.1.2.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c Changed
20
 
1
@@ -690,7 +690,7 @@
2
    uint32_t  tex_size       = cy * pitch;
3
    uint32_t  aligned_header = ALIGN(sizeof(struct shmem_data), 32);
4
    uint32_t  aligned_tex    = ALIGN(tex_size, 32);
5
-   uint32_t  total_size     = aligned_header + aligned_tex * 2;
6
+   uint32_t  total_size     = aligned_header + aligned_tex * 2 + 32;
7
    uintptr_t align_pos;
8
 
9
    if (!init_shared_info(total_size)) {
10
@@ -706,6 +706,9 @@
11
    align_pos &= ~(32 - 1);
12
    align_pos -= (uintptr_t)shmem_info;
13
 
14
+   if (align_pos < sizeof(struct shmem_data))
15
+       align_pos += 32;
16
+
17
    (*data)->last_tex = -1;
18
    (*data)->tex1_offset = (uint32_t)align_pos;
19
    (*data)->tex2_offset = (*data)->tex1_offset + aligned_tex;
20
obs-studio-21.0.3.tar.xz/plugins/win-capture/nt-stuff.h -> obs-studio-21.1.2.tar.xz/plugins/win-capture/nt-stuff.h Changed
19
 
1
@@ -140,7 +140,7 @@
2
    OBS_SYSTEM_PROCESS_INFORMATION2 *spi = data;
3
 
4
    for (;;) {
5
-       if (spi->UniqueProcessId == (HANDLE)process_id) {
6
+       if (spi->UniqueProcessId == (HANDLE)(DWORD_PTR)process_id) {
7
            break;
8
        }
9
 
10
@@ -156,7 +156,7 @@
11
    sti = (OBS_SYSTEM_THREAD_INFORMATION*)((BYTE*)spi + sizeof(*spi));
12
 
13
    for (ULONG i = 0; i < spi->ThreadCount; i++) {
14
-       if (sti[i].UniqueThreadId == (HANDLE)thread_id) {
15
+       if (sti[i].UniqueThreadId == (HANDLE)(DWORD_PTR)thread_id) {
16
            info = &sti[i];
17
            break;
18
        }
19
obs-studio-21.1.2.tar.xz/plugins/win-dshow/data/locale/fil-PH.ini Added
41
 
1
@@ -0,0 +1,39 @@
2
+VideoCaptureDevice="Pagkuha ng Bidyo na device"
3
+Device="Device"
4
+ColorSpace="Kulay sa Pagitan ng YUV"
5
+ColorSpace.Default="I-Default"
6
+ColorRange="Saklaw ng Kulat ng YUV"
7
+ColorRange.Partial="Partial"
8
+ColorRange.Full="Puno"
9
+ConfigureAudio="I-Configure ang Audio"
10
+ConfigureVideo="Ang Configure Bidyo"
11
+ConfigureCrossbar="I-Configure ang Crossbar"
12
+ResFPSType="Ang Resolusyon/Tipo ng FPS"
13
+ResFPSType.Custom="I-Custom"
14
+ResFPSType.DevPreferred="I-Device Default"
15
+FPS.Matching="I-Match Output FPS"
16
+FPS.Highest="Pinakamataas na FPS"
17
+Resolution="Ang Resolusyon"
18
+VideoFormat="Ang Bidyo Format"
19
+VideoFormat.Any="Kahit Ano"
20
+VideoFormat.Unknown="Unknown (%1)"
21
+AudioOutputMode="Ang Audio Output Mode"
22
+AudioOutputMode.Capture="I-Capture lamang ang audio"
23
+AudioOutputMode.DirectSound="Ang Awput desktop audio (DirectSound)"
24
+AudioOutputMode.WaveOut="Ang Output desktop audio (WaveOut)"
25
+UseCustomAudioDevice="Gamitin ang custom audio device"
26
+AudioDevice="Ang Audio Device"
27
+Buffering="Nag Buffering"
28
+Buffering.ToolTip="Kapag pinagana, buffer video/audi datus para masiguro ang smoothest at pinakamainam\ntumpak na possibleng playback, pero nadagdagan ng latency. Kapag gamit\nnagbuffering na may bidyo capture kard, inirekomenda na itakda ang kard at ang \nprogram sa parehong framerate para sa magandang resulta.\n\nKapag di pinagana, tiyakin na mababa nag latency playback, pero kapalit nito ang frame\nplayback accuracy. Ito ay perpekto sa mukha ng kamera, o kaya gusto gumamit ng \nprogram's preview window para i-play ang console.\n\nAuto-detect (default) itakda ito para ipagana kung and device ay delay, at di pinagana\nkung ito ay walang delay."
29
+Buffering.AutoDetect="I-Auto-Detect"
30
+Buffering.Enable="I-Enable"
31
+Buffering.Disable="I-Disable"
32
+Activate="I-Activate"
33
+Deactivate="I-Deactivate"
34
+FlipVertically="I-paltik patayo"
35
+DeactivateWhenNotShowing="I-Deactivate kapag di nagpapakita"
36
+
37
+Bitrate="Bitrate"
38
+Encoder.C985="Ang AVerMedia H.264 Encoder (c985)"
39
+Encoder.C353="Ang AVerMedia H.264 Encoder"
40
+
41
obs-studio-21.1.2.tar.xz/plugins/win-dshow/data/locale/he-IL.ini Added
40
 
1
@@ -0,0 +1,38 @@
2
+VideoCaptureDevice="התקן לכידת וידאו"
3
+Device="התקן"
4
+ColorSpace="מרחב צבע YUV"
5
+ColorSpace.Default="ברירת מחדל"
6
+ColorRange="טווח צבע YUV"
7
+ColorRange.Partial="חלקי"
8
+ColorRange.Full="מלא"
9
+ConfigureAudio="הגדר שמע"
10
+ConfigureVideo="הגדר וידאו"
11
+ConfigureCrossbar="קביעת תצורה של המוט"
12
+ResFPSType="סוג רזולוציה/קצב פריימים לשנייה"
13
+ResFPSType.Custom="מותאם אישית"
14
+ResFPSType.DevPreferred="התקן ברירת מחדל"
15
+FPS.Matching="התאמת פלט קצב פריימים לשנייה"
16
+FPS.Highest="קצב הפריימים לשנייה הגבוה ביותר"
17
+Resolution="רזולוציה"
18
+VideoFormat="פורמט וידאו"
19
+VideoFormat.Any="כל"
20
+VideoFormat.Unknown="לא ידוע (1%)"
21
+AudioOutputMode="מצב פלט קול"
22
+AudioOutputMode.Capture="לכידת שמע בלבד"
23
+AudioOutputMode.DirectSound="פלט שמע בשולחן העבודה (DirectSound)"
24
+AudioOutputMode.WaveOut="פלט שמע בשולחן העבודה (צליל יוצא)"
25
+UseCustomAudioDevice="השתמש בהתקן שמע מותאם אישית"
26
+AudioDevice="התקן שמע"
27
+Buffering="אגירה"
28
+Buffering.ToolTip="כאשר מאופשר, מאגר נתונים וידאו / אודיו כדי להבטיח את ההשמעה חלקה ביותר \n accurate אפשרי, אבל במחיר של חביון מוגברת. בעת שימוש \n בכביסה עם כרטיס לכידת וידאו, מומלץ להגדיר את הכרטיס ואת \ nprogram לאותו פרמטרט לקבלת התוצאות הטובות ביותר. \n\n כאשר הוא מושבת, מבטיח השמעת חביון נמוכה ביותר, אך במחיר של מסגרת \n דיוק חזרה. זה אידיאלי למצלמות פנים, או כאשר ברצונך להשתמש בחלון התצוגה המקדימה של \n כדי להציג קונסולה.   \n\n גילוי אוטומטי (ברירת מחדל) מגדיר אותו כך שאם המכשיר יש עיכוב, והוא מושבת \ nif ללא עיכוב."
29
+Buffering.AutoDetect="זיהוי אוטומטי"
30
+Buffering.Enable="אפשר"
31
+Buffering.Disable="בטל"
32
+Activate="הפעל"
33
+Deactivate="השבת"
34
+FlipVertically="הפוך אנכית"
35
+DeactivateWhenNotShowing="השבת כאשר לא נראה"
36
+
37
+Bitrate="קצב נתונים"
38
+Encoder.C985="מקודד AverMedia H.264 (c985)"
39
+
40
obs-studio-21.1.2.tar.xz/plugins/win-dshow/data/locale/tl-PH.ini Added
41
 
1
@@ -0,0 +1,39 @@
2
+VideoCaptureDevice="Ang Video Capture Device"
3
+Device="Ang Device"
4
+ColorSpace="Ang Kulay Ispasyo ng YUV"
5
+ColorSpace.Default="Mga Default"
6
+ColorRange="Ang Kulay Hangganan ng YUV"
7
+ColorRange.Partial="Pang-una"
8
+ColorRange.Full="Lahat"
9
+ConfigureAudio="I-configure ang Audio"
10
+ConfigureVideo="I-configure ang Video"
11
+ConfigureCrossbar="I-configure ang Crossbar"
12
+ResFPSType="Resolusyon/FPS na Tipo"
13
+ResFPSType.Custom="Ang Custom"
14
+ResFPSType.DevPreferred="Ang Default ng Device"
15
+FPS.Matching="I-match ang Output ng FPS"
16
+FPS.Highest="Pinakamataas na FPS"
17
+Resolution="Resolusyon"
18
+VideoFormat="Ang format ng video"
19
+VideoFormat.Any="Kahit ano"
20
+VideoFormat.Unknown="Hindi matukoy (%1)"
21
+AudioOutputMode="Ang Audio Output Mode"
22
+AudioOutputMode.Capture="Mag-capture ng mga audio lamang"
23
+AudioOutputMode.DirectSound="Ang kinalabasan ng desktop audio (DirektangTunog)"
24
+AudioOutputMode.WaveOut="Ang kinalabasan ng desktop audio (WaveOut)"
25
+UseCustomAudioDevice="Gumamit ng mga audio device"
26
+AudioDevice="Mga Audio Device"
27
+Buffering="Ang Buffering"
28
+Buffering.ToolTip="Kapag pinagana na, ang buffers ng video/audio data ay para masiguro ang pinakamaayos at lahat\nsakto ang posibleng playback, ngunit ang kapalit ay ang pagtaas ng latency. Kung gamit\nbuffering kasama ang video capture na card, inirekomendana i-set angcard at ang\nprograma sa mga kaparehong framerate para sa maayos na resulta.\n\nKung hindi pinagana, tiyakin ang pinakamamabang latency playback, pero sa paggamit ng frame\nplayback na sakto. Ito ay tama para sa mukha ng camera, or kung gusto mong gamitin ang\nang preview ng programa sa window para maglaro ng console.\n\nAwtomatik-detect (default) ang i-set upang mapagana kung ang device ay nagkaroon ng delay, at hindi paganahin\nkung walang delay."
29
+Buffering.AutoDetect="Awtomatik-detect"
30
+Buffering.Enable="Paganahin"
31
+Buffering.Disable="Hindi paganahin"
32
+Activate="Gawing aktibo"
33
+Deactivate="Ihinto ang pagiging aktibo"
34
+FlipVertically="Patayong i-flip"
35
+DeactivateWhenNotShowing="Ihinto ang pagiging aktibo kung walangpinapakita"
36
+
37
+Bitrate="Ang Bitrate"
38
+Encoder.C985="Ang AVerMedia H.264 Encoder (c985)"
39
+Encoder.C353="Ang AVerMedia H.264 Encoder"
40
+
41
obs-studio-21.0.3.tar.xz/plugins/win-mf/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/win-mf/CMakeLists.txt Changed
82
 
1
@@ -1,32 +1,58 @@
2
 project(win-mf)
3
 
4
-set(win-mf_SOURCES
5
-   mf-plugin.cpp
6
-   mf-aac.cpp
7
-   mf-aac-encoder.cpp
8
-   mf-common.cpp
9
-   mf-encoder-descriptor.cpp
10
-   mf-h264.cpp
11
-   mf-h264-encoder.cpp)
12
-
13
-set(win-mf_HEADERS
14
-   mf-common.hpp
15
-   mf-encoder-descriptor.hpp
16
-   mf-aac-encoder.hpp
17
-   mf-h264-encoder.hpp)
18
+set(ENABLE_WINMF FALSE CACHE BOOL "Enables the now deprecated win-mf plugin")
19
+
20
+configure_file(
21
+   "${CMAKE_CURRENT_SOURCE_DIR}/mf-config.hpp.in"
22
+   "${CMAKE_CURRENT_BINARY_DIR}/mf-config.hpp")
23
+
24
+set(win-mf_config_HEADERS
25
+   "${CMAKE_CURRENT_BINARY_DIR}/mf-config.hpp")
26
+
27
+if(ENABLE_WINMF)
28
+   set(win-mf_SOURCES
29
+       mf-plugin.cpp
30
+       mf-aac.cpp
31
+       mf-aac-encoder.cpp
32
+       mf-common.cpp
33
+       mf-encoder-descriptor.cpp
34
+       mf-h264.cpp
35
+       mf-h264-encoder.cpp)
36
+
37
+   set(win-mf_HEADERS
38
+       mf-common.hpp
39
+       mf-encoder-descriptor.hpp
40
+       mf-aac-encoder.hpp
41
+       mf-h264-encoder.hpp)
42
+
43
+   set(win-mf_DEPS
44
+       d3d9
45
+       dxva2
46
+       uuid
47
+       mfplat
48
+       mfuuid
49
+       mf
50
+       wmcodecdspuuid)
51
+else()
52
+   set(win-mf_SOURCES
53
+       mf-plugin.cpp)
54
+endif()
55
 
56
 add_library(win-mf MODULE
57
+   ${win-mf_config_HEADERS}
58
    ${win-mf_SOURCES}
59
    ${win-mf_HEADERS})
60
 
61
 target_link_libraries(win-mf
62
-   d3d9
63
-   dxva2
64
-   uuid
65
-   mfplat
66
-   mfuuid
67
-   mf
68
-   wmcodecdspuuid
69
+   ${win-mf_DEPS}
70
    libobs)
71
 
72
-install_obs_plugin_with_data(win-mf data)
73
+target_include_directories(win-mf
74
+   PUBLIC
75
+   "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>")
76
+
77
+if(ENABLE_WINMF)
78
+   install_obs_plugin_with_data(win-mf data)
79
+else()
80
+   install_obs_plugin(win-mf)
81
+endif()
82
obs-studio-21.1.2.tar.xz/plugins/win-mf/data/locale/fil-PH.ini Added
32
 
1
@@ -0,0 +1,30 @@
2
+MFAACEnc="Saligan ng Media AAC Enkoder"
3
+Bitrate="Bitreyt"
4
+
5
+MF.H264.EncoderName="Saligan ng Media H264 Encoder"
6
+MF.H264.Encoder="Pangalan ng Encoder"
7
+MF.H264.LowLatency="Mababang Pagwalang-kilos (Huwag paganahin sa muling pag-order ng frame)"
8
+MF.H264.BFrames="Magkakasunod na pagbilang ng B-Frame"
9
+MF.H264.CustomBufsize="Gamitin ang Pasadyang Sukat ng Buffer"
10
+MF.H264.BufferSize="Sukat ng Buffer"
11
+MF.H264.CustomMaxBitrate="Gamitin ang pasadyang Max Bitrate"
12
+MF.H264.Bitrate="Bitreyt"
13
+MF.H264.MaxBitrate="Max Bitreyt"
14
+MF.H264.KeyframeIntervalSec="Pagitan ng Keyframe (segundo, 0=awto)"
15
+MF.H264.RateControl="Pagkontral ng Rate"
16
+MF.H264.CBR="CBR (Patuloy na Bitrate)"
17
+MF.H264.VBR="VBR (Baryante Bitrate)"
18
+MF.H264.CQP="CQP (Patuloy na Kalidad)"
19
+MF.H264.MinQP="Pinakamababang QP"
20
+MF.H264.MaxQP="Pinakamataas QP"
21
+MF.H264.QPI="QP Ay-Freym"
22
+MF.H264.QPP="QP Pi-Freym"
23
+MF.H264.QPB="QP Bi-Freym"
24
+MF.H264.Profile="Propayl"
25
+MF.H264.Advanced="Masulong"
26
+
27
+MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Enkoder"
28
+MF.H264.EncoderHWAMD="AMD Coding Video ng Makina H. 264 Encoder (Pundasyon ng Media)"
29
+MF.H264.EncoderHWIntel="Mabilis na Intel Sync H.264 Encoder (Pundasyon ng Media)"
30
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Pundasyon ng Media)"
31
+
32
obs-studio-21.1.2.tar.xz/plugins/win-mf/data/locale/he-IL.ini Added
32
 
1
@@ -0,0 +1,30 @@
2
+MFAACEnc="מקודד מדיה על בסיס AAC"
3
+Bitrate="קצב נתונים"
4
+
5
+MF.H264.EncoderName="מקודד מדיה על בסיס H264"
6
+MF.H264.Encoder="שם מקודד"
7
+MF.H264.LowLatency="השהיה נמוכה (ביטול מסגרת הזמנה-חדשה)"
8
+MF.H264.BFrames="ספירה B-מסגרת רצופה"
9
+MF.H264.CustomBufsize="השתמש בגודל מותאם אישית לאוגר"
10
+MF.H264.BufferSize="גודל אוגר"
11
+MF.H264.CustomMaxBitrate="שימוש מותאם אישית במקסימום קצב נתונים"
12
+MF.H264.Bitrate="קצב נתונים"
13
+MF.H264.MaxBitrate="מקסימום קצב נתונים"
14
+MF.H264.KeyframeIntervalSec="מרווח ערך המפתח פריים בשניות (0=אוטומטי)"
15
+MF.H264.RateControl="בקרת קצב"
16
+MF.H264.CBR="CBR(קצב נתונים קבוע)"
17
+MF.H264.VBR="VBR(קצב נתונים משתנה)"
18
+MF.H264.CQP="CQP(איכות קבועה)"
19
+MF.H264.MinQP="מינימום QP"
20
+MF.H264.MaxQP="מקסימום QP"
21
+MF.H264.QPI="מסגרת-QP"
22
+MF.H264.QPP="P-מסגרת QP"
23
+MF.H264.QPB="B-מסגרת QP"
24
+MF.H264.Profile="פרופיל"
25
+MF.H264.Advanced="מתקדם"
26
+
27
+MF.H264.EncoderSWMicrosoft="מקודד תוכנת מייקרוסופט H.264"
28
+MF.H264.EncoderHWAMD="קידוד מנוע AMD H.264 מקודד (בסיס מדיה)"
29
+MF.H264.EncoderHWIntel="סנכרון מהיר Intel H.264 מקודד (בסיס מדיה)"
30
+MF.H264.EncoderHWNVIDIA="מקודד NVIDIA NVENC H.264 מקודד (בסיס מדיה)"
31
+
32
obs-studio-21.1.2.tar.xz/plugins/win-mf/data/locale/tl-PH.ini Added
32
 
1
@@ -0,0 +1,30 @@
2
+MFAACEnc="Ang Media Foundation AAC Encoder"
3
+Bitrate="Ang Bitrate"
4
+
5
+MF.H264.EncoderName="Ang Media Foundation H264 Encoder"
6
+MF.H264.Encoder="Pangalan ng Encoder"
7
+MF.H264.LowLatency="Mababang Latency (Hindi paganahin ang frame re-ordering)"
8
+MF.H264.BFrames="Magkasunod na B-Frame na pagbilang"
9
+MF.H264.CustomBufsize="Gumamit ng Custom Buffer Size"
10
+MF.H264.BufferSize="Ang Buffer Size"
11
+MF.H264.CustomMaxBitrate="Gumamit ng Custom Max Bitrate"
12
+MF.H264.Bitrate="Ang Bitrate"
13
+MF.H264.MaxBitrate="Ang pinakamataas na Bitrate"
14
+MF.H264.KeyframeIntervalSec="Ang Keyframe Interval (segundos, 0=awtomatik)"
15
+MF.H264.RateControl="Ang Rate ng Kontrol"
16
+MF.H264.CBR="Ang CBR (Constant Bitrate)"
17
+MF.H264.VBR="Ang VBR (Variable Bitrate)"
18
+MF.H264.CQP="Ang VBR (Variable Bitrate)"
19
+MF.H264.MinQP="Pinakamaliit QP"
20
+MF.H264.MaxQP="Pinakamataas QP"
21
+MF.H264.QPI="Ang QP I-Frame"
22
+MF.H264.QPP="Ang QP P-Frame"
23
+MF.H264.QPB="Ang QP B-Frame"
24
+MF.H264.Profile="Ang Profile"
25
+MF.H264.Advanced="Advanced"
26
+
27
+MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Encoder"
28
+MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)"
29
+MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Encoder (Media Foundation)"
30
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Media Foundation)"
31
+
32
obs-studio-21.1.2.tar.xz/plugins/win-mf/mf-config.hpp.in Added
19
 
1
@@ -0,0 +1,17 @@
2
+#ifndef TRUE
3
+#define TRUE 1
4
+#endif
5
+
6
+#ifndef ON
7
+#define ON 1
8
+#endif
9
+
10
+#ifndef FALSE
11
+#define FALSE 0
12
+#endif
13
+
14
+#ifndef OFF
15
+#define OFF 0
16
+#endif
17
+
18
+#define ENABLE_WINMF @ENABLE_WINMF@
19
obs-studio-21.0.3.tar.xz/plugins/win-mf/mf-plugin.cpp -> obs-studio-21.1.2.tar.xz/plugins/win-mf/mf-plugin.cpp Changed
39
 
1
@@ -1,26 +1,36 @@
2
 #include <obs-module.h>
3
-#include <util/profiler.h>
4
+#include "mf-config.hpp"
5
 
6
+#if ENABLE_WINMF
7
+#include <util/profiler.h>
8
 #include "mf-common.hpp"
9
 
10
 extern "C" extern void RegisterMFAACEncoder();
11
 extern void RegisterMFH264Encoders();
12
+#endif
13
 
14
 
15
 extern "C" bool obs_module_load(void)
16
 {
17
+#if ENABLE_WINMF
18
    MFStartup(MF_VERSION, MFSTARTUP_FULL);
19
 
20
    RegisterMFAACEncoder();
21
    RegisterMFH264Encoders();
22
+#endif
23
 
24
    return true;
25
 }
26
 
27
 extern "C" void obs_module_unload(void)
28
 {
29
+#if ENABLE_WINMF
30
    MFShutdown();
31
+#endif
32
 }
33
 
34
 OBS_DECLARE_MODULE()
35
+
36
+#if ENABLE_WINMF
37
 OBS_MODULE_USE_DEFAULT_LOCALE("win-mf", "en-US")
38
+#endif
39
obs-studio-21.1.2.tar.xz/plugins/win-wasapi/data/locale/fil-PH.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+AudioInput="Pagkuha ng Pangpasok sa Awdyio"
3
+AudioOutput="Kumuha ng Palabas na Awdiyo"
4
+Device="Aparato"
5
+Default="Kawalan"
6
+UseDeviceTiming="Gamitin ang Kawalan ng mga selyo ng oras"
7
+
8
obs-studio-21.1.2.tar.xz/plugins/win-wasapi/data/locale/he-IL.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+AudioInput="לכידת קלט שמע"
3
+AudioOutput="לכידת פלט קולי"
4
+Device="התקן"
5
+Default="ברירת מחדל"
6
+UseDeviceTiming="השתמש בהתקן חותמת זמן"
7
+
8
obs-studio-21.1.2.tar.xz/plugins/win-wasapi/data/locale/tl-PH.ini Added
8
 
1
@@ -0,0 +1,6 @@
2
+AudioInput="Pampasok Audio Capture"
3
+AudioOutput="Pamlabas na Audio Capture"
4
+Device="Ang Device"
5
+Default="Ang Default"
6
+UseDeviceTiming="Gumamit ng Device Timestamps"
7
+
8
Refresh

No build results available

Refresh

No rpmlint results available

Request History
boombatower's avatar

boombatower created request almost 7 years ago

- Update to version 21.1.2:
* libobs: Update version to 21.1.2
* win-capture: Update D3D9 signature for Win10 April 2018 Update
* CI: Check out OSX branch of obs-browser
* cmake: Include windows style DLL when copying Qt files
* obs-browser: Update submodule to latest version
* UI/updater: Delete visual studio runtimes after execution
* deps/obs-scripting: Prevent python unload more than once
* obs-browser: Update submodule to latest version
* deps/obs-scripting: Don't allow unloading more than once
* enc-amf: Version 2.3.3
* libobs: Update version to 21.1.0
* deps/obs-scripting: Add obs_source_enum_filters
* rtmp-services: Update ingest list for Aparat.com
* mac-capture: Fix bug where audio device couldn't be changed
* UI: Add Help -> Crash Reports submenu
* UI: Add subdir param to OBSBasic::UploadLog
* UI: Specify whether crash/profiler/logs have prefix
* UI: Specify subdir/variable to save to for get_last_log
* rtmp-services: Update ingest list for Nood.tv
* UI: Replace gist with hastebin for log uploads
* UI/updater: Return false on integrity check failure
* UI/updater: Don't update modules of opposite arch
* UI/updater: Add automatic check/install for VS2017 redist
* UI/updater: Fix a few type size mismatch warnings
* UI/updater: Fix resource compiling bug
* UI/updater: Fix bug with restrict keyword on VS2017
* UI/updater: Set license of windows update module to ISC
* UI/updater: Rewrite function
* Update translations from Crowdin


boombatower's avatar

boombatower accepted request almost 7 years ago

ok