We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 41
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Tue Jan 17 23:38:37 UTC 2017 - jimmy@boombatower.com
4
+
5
+- Update to version 17.0.1:
6
+ * deps/libff: Fix VP8/VP9/webm alpha support
7
+ * rtmp-services: Increase video bitrate limit for YouTube
8
+ * obs-outputs: fix build error on freebsd
9
+ * Update translations from Crowdin
10
+ * [CI] Use prebuilt deps so we can build on 10.9
11
+ * CI: Build more features into FFMPEG deps
12
+ * CI: Update browser plugin ref and build scripts.
13
+ * CI: Fix zip permission issue on CEF plist files
14
+ * obs-x264: ignore opencl param
15
+ * enc-amf: Update to 1.4.3.8
16
+ * CI: Ability to make packages on travis
17
+ * CI: actually call packagesbuild from the right place 😑
18
+ * cmake: Remove unnecessary find_package calls
19
+ * libobs: Fix scale filtering bug when duplicating scenes
20
+ * win-capture: Don't use FindWindow for game capture keepalive
21
+ * CI: Install Packages and use the full version
22
+ * Revert "win-capture: Use FindWindowEx to traverse window list"
23
+ * obs-filters.c: Fix color correction filter OpenGL crash
24
+ * obs-filters.c: Fix color correction filter saturation
25
+ * Update translations from Crowdin
26
+ * UI: Fix bug with uncopied profile import/export files
27
+ * win-capture: Fix game capture size bug when rehooking
28
+ * libobs: Add func to enum active and inactive child tree
29
+ * libobs: Enumerate full tree when adding active child
30
+ * libobs: Add callback for enumerating all scene children
31
+ * obs-x264: Allow opencl through much longer alias
32
+ * libobs: Update to version 17.0.1
33
+
34
+-------------------------------------------------------------------
35
Mon Dec 26 08:32:58 UTC 2016 - jimmy@boombatower.com
36
37
- Update to version 0.17.0:
38
obs-studio.spec
Changed
8
1
2
Name: obs-studio
3
-Version: 0.17.0
4
+Version: 17.0.1
5
Release: 0
6
Summary: A recording/broadcasting program
7
8
_service
Changed
10
1
2
<services>
3
<service name="tar_scm" mode="disabled">
4
<param name="versionformat">@PARENT_TAG@</param>
5
- <param name="revision">refs/tags/0.17.0</param>
6
+ <param name="revision">refs/tags/17.0.1</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
2
<servicedata>
3
<service name="tar_scm">
4
<param name="url">git://github.com/jp9000/obs-studio.git</param>
5
- <param name="changesrevision">93e084088f3c1f3979d78eea3c5d9220b1cea3f7</param>
6
+ <param name="changesrevision">5f5582b87efe396812131b7a2211f1e0e5e85768</param>
7
</service>
8
</servicedata>
9
obs-studio-0.17.0.tar.xz/CI/before-deploy-osx.sh -> obs-studio-17.0.1.tar.xz/CI/before-deploy-osx.sh
Changed
15
1
2
export GIT_HASH=$(git rev-parse --short HEAD)
3
export FILE_DATE=$(date +%Y-%m-%d.%H:%M:%S)
4
-export FILENAME=$FILE_DATE-$GIT_HASH-osx.zip
5
+export FILENAME=$FILE_DATE-$GIT_HASH-osx.pkg
6
mkdir nightly
7
cd ./build
8
sudo python ../CI/install/osx/build_app.py
9
-zip -r -X $FILENAME OBS.app
10
-mv ./$FILENAME ../nightly
11
+packagesbuild ../CI/install/osx/CMakeLists.pkgproj
12
+
13
+sudo cp OBS.pkg ./$FILENAME
14
+sudo mv ./$FILENAME ../nightly
15
obs-studio-0.17.0.tar.xz/CI/before-script-osx.sh -> obs-studio-17.0.1.tar.xz/CI/before-script-osx.sh
Changed
8
1
2
mkdir build
3
cd build
4
-cmake -DBUILD_BROWSER=ON -DCEF_ROOT_DIR=$PWD/../../cef_binary_3.2704.1434.gec3e9ed_macosx64 ..
5
\ No newline at end of file
6
+cmake -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DDepsPath=/tmp/obsdeps -DBUILD_BROWSER=ON -DCEF_ROOT_DIR=$PWD/../../cef_binary_3.2883.1540.gedbfb20_macosx64 ..
7
\ No newline at end of file
8
obs-studio-0.17.0.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-17.0.1.tar.xz/CI/install-dependencies-osx.sh
Changed
30
1
2
+curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg
3
+sudo installer -pkg ./Packages.pkg -target /
4
+
5
brew update
6
7
#Base OBS Deps
8
-brew install ffmpeg x264 qt5
9
+brew install qt5
10
+
11
+curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/osx-deps.tar.gz
12
+tar -xf ./osx-deps.tar.gz -C /tmp
13
14
# CEF Stuff
15
cd ../
16
-curl -kLO http://opensource.spotify.com/cefbuilds/cef_binary_3.2704.1434.gec3e9ed_macosx64.tar.bz2
17
-tar -xf ./cef_binary_3.2704.1434.gec3e9ed_macosx64.tar.bz2
18
-cd ./cef_binary_3.2704.1434.gec3e9ed_macosx64
19
+curl -kLO http://opensource.spotify.com/cefbuilds/cef_binary_3.2883.1540.gedbfb20_macosx64.tar.bz2
20
+tar -xf ./cef_binary_3.2883.1540.gedbfb20_macosx64.tar.bz2
21
+cd ./cef_binary_3.2883.1540.gedbfb20_macosx64
22
mkdir build
23
cd ./build
24
-cmake -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" ..
25
+cmake -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 ..
26
make -j4
27
mkdir libcef_dll
28
-mv ./libcef_dll_wrapper/libcef_dll_wrapper.a ./libcef_dll/libcef_dll_wrapper.a
29
cd ../../
30
obs-studio-17.0.1.tar.xz/CI/install/osx/CMakeLists.pkgproj
Added
201
1
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
4
+<plist version="1.0">
5
+<dict>
6
+ <key>PACKAGES</key>
7
+ <array>
8
+ <dict>
9
+ <key>PACKAGE_FILES</key>
10
+ <dict>
11
+ <key>DEFAULT_INSTALL_LOCATION</key>
12
+ <string>/</string>
13
+ <key>HIERARCHY</key>
14
+ <dict>
15
+ <key>CHILDREN</key>
16
+ <array>
17
+ <dict>
18
+ <key>CHILDREN</key>
19
+ <array>
20
+ <dict>
21
+ <key>CHILDREN</key>
22
+ <array/>
23
+ <key>GID</key>
24
+ <integer>80</integer>
25
+ <key>PATH</key>
26
+ <string>../../../build/OBS.app</string>
27
+ <key>PATH_TYPE</key>
28
+ <integer>3</integer>
29
+ <key>PERMISSIONS</key>
30
+ <integer>493</integer>
31
+ <key>TYPE</key>
32
+ <integer>3</integer>
33
+ <key>UID</key>
34
+ <integer>0</integer>
35
+ </dict>
36
+ <dict>
37
+ <key>CHILDREN</key>
38
+ <array/>
39
+ <key>GID</key>
40
+ <integer>80</integer>
41
+ <key>PATH</key>
42
+ <string>Utilities</string>
43
+ <key>PATH_TYPE</key>
44
+ <integer>0</integer>
45
+ <key>PERMISSIONS</key>
46
+ <integer>493</integer>
47
+ <key>TYPE</key>
48
+ <integer>1</integer>
49
+ <key>UID</key>
50
+ <integer>0</integer>
51
+ </dict>
52
+ </array>
53
+ <key>GID</key>
54
+ <integer>80</integer>
55
+ <key>PATH</key>
56
+ <string>Applications</string>
57
+ <key>PATH_TYPE</key>
58
+ <integer>0</integer>
59
+ <key>PERMISSIONS</key>
60
+ <integer>509</integer>
61
+ <key>TYPE</key>
62
+ <integer>1</integer>
63
+ <key>UID</key>
64
+ <integer>0</integer>
65
+ </dict>
66
+ <dict>
67
+ <key>CHILDREN</key>
68
+ <array>
69
+ <dict>
70
+ <key>CHILDREN</key>
71
+ <array>
72
+ <dict>
73
+ <key>CHILDREN</key>
74
+ <array>
75
+ <dict>
76
+ <key>CHILDREN</key>
77
+ <array>
78
+ <dict>
79
+ <key>CHILDREN</key>
80
+ <array>
81
+ <dict>
82
+ <key>CHILDREN</key>
83
+ <array>
84
+ <dict>
85
+ <key>CHILDREN</key>
86
+ <array/>
87
+ <key>GID</key>
88
+ <integer>80</integer>
89
+ <key>PATH</key>
90
+ <string>../../../build/plugins/obs-browser/CEF.app</string>
91
+ <key>PATH_TYPE</key>
92
+ <integer>3</integer>
93
+ <key>PERMISSIONS</key>
94
+ <integer>493</integer>
95
+ <key>TYPE</key>
96
+ <integer>3</integer>
97
+ <key>UID</key>
98
+ <integer>0</integer>
99
+ </dict>
100
+ <dict>
101
+ <key>CHILDREN</key>
102
+ <array/>
103
+ <key>GID</key>
104
+ <integer>80</integer>
105
+ <key>PATH</key>
106
+ <string>../../../build/plugins/obs-browser/obs-browser.so</string>
107
+ <key>PATH_TYPE</key>
108
+ <integer>3</integer>
109
+ <key>PERMISSIONS</key>
110
+ <integer>493</integer>
111
+ <key>TYPE</key>
112
+ <integer>3</integer>
113
+ <key>UID</key>
114
+ <integer>0</integer>
115
+ </dict>
116
+ </array>
117
+ <key>GID</key>
118
+ <integer>80</integer>
119
+ <key>PATH</key>
120
+ <string>bin</string>
121
+ <key>PATH_TYPE</key>
122
+ <integer>0</integer>
123
+ <key>PERMISSIONS</key>
124
+ <integer>493</integer>
125
+ <key>TYPE</key>
126
+ <integer>2</integer>
127
+ <key>UID</key>
128
+ <integer>0</integer>
129
+ </dict>
130
+ </array>
131
+ <key>GID</key>
132
+ <integer>80</integer>
133
+ <key>PATH</key>
134
+ <string>obs-browser</string>
135
+ <key>PATH_TYPE</key>
136
+ <integer>0</integer>
137
+ <key>PERMISSIONS</key>
138
+ <integer>493</integer>
139
+ <key>TYPE</key>
140
+ <integer>2</integer>
141
+ <key>UID</key>
142
+ <integer>0</integer>
143
+ </dict>
144
+ </array>
145
+ <key>GID</key>
146
+ <integer>80</integer>
147
+ <key>PATH</key>
148
+ <string>plugins</string>
149
+ <key>PATH_TYPE</key>
150
+ <integer>0</integer>
151
+ <key>PERMISSIONS</key>
152
+ <integer>493</integer>
153
+ <key>TYPE</key>
154
+ <integer>2</integer>
155
+ <key>UID</key>
156
+ <integer>0</integer>
157
+ </dict>
158
+ </array>
159
+ <key>GID</key>
160
+ <integer>80</integer>
161
+ <key>PATH</key>
162
+ <string>obs-studio</string>
163
+ <key>PATH_TYPE</key>
164
+ <integer>0</integer>
165
+ <key>PERMISSIONS</key>
166
+ <integer>493</integer>
167
+ <key>TYPE</key>
168
+ <integer>2</integer>
169
+ <key>UID</key>
170
+ <integer>0</integer>
171
+ </dict>
172
+ </array>
173
+ <key>GID</key>
174
+ <integer>80</integer>
175
+ <key>PATH</key>
176
+ <string>Application Support</string>
177
+ <key>PATH_TYPE</key>
178
+ <integer>0</integer>
179
+ <key>PERMISSIONS</key>
180
+ <integer>493</integer>
181
+ <key>TYPE</key>
182
+ <integer>1</integer>
183
+ <key>UID</key>
184
+ <integer>0</integer>
185
+ </dict>
186
+ <dict>
187
+ <key>CHILDREN</key>
188
+ <array/>
189
+ <key>GID</key>
190
+ <integer>0</integer>
191
+ <key>PATH</key>
192
+ <string>Documentation</string>
193
+ <key>PATH_TYPE</key>
194
+ <integer>0</integer>
195
+ <key>PERMISSIONS</key>
196
+ <integer>493</integer>
197
+ <key>TYPE</key>
198
+ <integer>1</integer>
199
+ <key>UID</key>
200
+ <integer>0</integer>
201
obs-studio-17.0.1.tar.xz/CI/install/osx/OBSPublicDSAKey.pem
Added
38
1
2
+-----BEGIN PUBLIC KEY-----
3
+MIIGSDCCBDoGByqGSM44BAEwggQtAoICAQDDTtoCl3zVYY4jq2ZvJhY+jZB23BdR
4
+k+oTQH0lIUuIBjJR+S8NZqylr4SIGF2S76sCDdpK5P7Waj1y5WyBIJQDCPA7UI1T
5
+P8UeZgxLazl+oVPnDhUeiEWCNkZIcn746/pPgdoG5KNjb6CUNQ8X+zkUzq6LJ7w9
6
+Sn02g1FPf0HUlR0D9bx8KweetAZrBGYNP2Mv0RvUSE3TS+t1zJadOp7GsMcoRBxD
7
+XnJXirBiTjGu3pUZ5bJSLEw+Jm46DdEj0f+SSMpPjgRAG3Pn8ac7U+CVonGHEIRB
8
+4+yjHTqF9aPtsABIbAeSh63U54yYcmYuF/ioxTNjXXsNGNm5ZAeGq1/o0iT2eesu
9
+nC6yUYggWSBVZEdTD4uI9iYsYnpjbp+fAUoD53MxTRgKqdOESdtZTJ0HSUqTjngH
10
+kwzpvxN7WmCpxISzAjs5bknu90DcdP2R4KrJfiJJzAMFp0hmwuy4OaUX0+BWZzvW
11
+KxCbHsvJL2asHkX4kQpoGVnYmEglH0vOLuK3iJi96jDcGBDGGPO0OXgu6P00iALT
12
+JF1KylJNnyH0K1a7EbS1QJlF50+zW+okc5Da1iy4vktTP7gPxBHZWeFHPMRZOp1H
13
+CZeP6Lipf9NpE5dqzMuHLFmxWeKn/7CQ2T9LyeTIajbeGqRsoSII3qEgQd/nDM3k
14
+NYt6e7dKx6rk6QIhAJ8/wlS8dyJEnvMwVRqn5ER05q7NuHocmGGiX2V/ONLnAoIC
15
+AQCTFu8RESwHSQ4uR3O0CjlvQKwqEM3Vlv+nyEqYvfqJNAfxrncpV0TF05GvUV7M
16
+e31solt3eK31qjK1H3AMaD8ToCinSYMLaoyMt0AfGljGK5cNZKXn/xFVM4mq71id
17
+RzrIfmL2327+kH7wC/8sk7R3FB/mxPV1fRhKuBqG+Y6x9NX7vz57JnIio20OQKCE
18
+Sn7a18QWHgmt+e+n9R6x7JiVOj+ZTwuPPXpomNB6nPVnQftf3lwB7ug1wJyBxAqy
19
+NkIhzkAk4RDn4NzhP70ULD80GdS36swCIOg08uTSsYA6FMgrD6JLpmKC4Uha8vPM
20
+421qxX8Si/Dk3r4one6NUr2WD0sy754MKOCZ5aD8XUB2ylLzfvdSEaGo+G/IyPtC
21
+o71PMnIStEPXH6GkvzxJv17zvhqQcyKBciqxR7GCQhbwMimp96EPIA3/2UDXQ9UE
22
+O+/JulJKVEuu4HhWLW8+s+qKhyTyP1dRd0qzLoLj81JA3FcotB1Lncas8mtv+eET
23
+Z1tKuDy8f4esOh0fuGNrDiMnm3y+cnsa41k4XLDLPrqGbJHxiRTlGwCMLxLEMcFa
24
+0gjYU3UFFiEvNG0vFWr4h57taLBoyKoyBON+Cmn5hsrKs1J1kTBTc1EvDF5mXjoX
25
+RhlrPxd/6b5aa12d3xIYofcp70RyPBM1AZ7jfWeSgKhN6AOCAgYAAoICAQClbOeZ
26
+cnCCsOaZyXp7aiZmDmJ4dtvCRXc+uD+VzRHlg/8X3BYQ01KUMc5/m+fFT7x8w12w
27
+FEN/txOxTB+NzQBlnRFHWjBOioxHWqAnYLuADP4nZM+1bwaMUBCRUX0MHZbaMMSR
28
+/dBa45Y9quc4JTV8rpfIzXdw1NZjDmnKYwKQxQ6eD/WymJFNpWKkaniMda0HQVCU
29
+eBEEpLjW4UE1YUFQgKuIKUdZ1eBxeXHgX6uDpU53reK8gC5ry8xZXryJlcqhKyQ8
30
+TrDarZgmxhzAvAwPbtCutiOpPaVpCQCdgi4PgA3sAgmdGENXDqTxcSCbCcmCYMzl
31
+pJLh+giO74OwZMqWvHwHPY5wgZbx9Tnw4JS+gsjl3K3XUeY1+J6cgrFCK/9iaRUx
32
+7lBroEgQoi+O+yM9ikPeGZYKwgobWslmNuMdYvbZl+hQF+eo7dgnABl+WHLkHogv
33
+O0wfbENlYECAHXJ/ncyRWoiyd3d/HrZBwMfMFv0hv9JdQ1EjVePXGh9+cDxO0W+Y
34
+ZJhXsXEmQ82+Pg9cCVywLKdbNWi4qPgwYEKKagq4ack6JHCcwbLMmNTz/PaDZpfP
35
+wCCxYzVxKksGnV2tb2quAW1/GB+H9FcPSHvE1MMsPhRwAGAm4+aKuL1IvrvLh8fj
36
+0tZk6dhMjtrBOkZMfnBbSKDKQlcHvXM25yIjgA==
37
+-----END PUBLIC KEY-----
38
obs-studio-17.0.1.tar.xz/CI/install/osx/SyphonInject.pkg
Added
obs-studio-17.0.1.tar.xz/CI/install/osx/obs.png
Added
201
1
2
+
3
+
4
+
5
+
6
+<!DOCTYPE html>
7
+<html lang="en" class=" emoji-size-boost is-u2f-enabled">
8
+ <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# object: http://ogp.me/ns/object# article: http://ogp.me/ns/article# profile: http://ogp.me/ns/profile#">
9
+ <meta charset='utf-8'>
10
+
11
+
12
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-c9ae4d373fcb2c40952201451cd449e00d6dbcedc778b79c9dfb2d076d04993b.css" integrity="sha256-ya5NNz/LLECVIgFFHNRJ4A1tvO3HeLecnfstB20EmTs=" media="all" rel="stylesheet" />
13
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-4d14493830801ffc6d6d6363f3fcef8a6e41fd9e74776dce15fa2c18b2a9bb72.css" integrity="sha256-TRRJODCAH/xtbWNj8/zvim5B/Z50d23OFfosGLKpu3I=" media="all" rel="stylesheet" />
14
+
15
+
16
+
17
+
18
+
19
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
20
+ <meta http-equiv="Content-Language" content="en">
21
+ <meta name="viewport" content="width=device-width">
22
+
23
+ <title>obs-studio-utils/obs.png at master · kc5nra/obs-studio-utils</title>
24
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
25
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
26
+ <link rel="apple-touch-icon" href="/apple-touch-icon.png">
27
+ <link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png">
28
+ <link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
29
+ <link rel="apple-touch-icon" sizes="72x72" href="/apple-touch-icon-72x72.png">
30
+ <link rel="apple-touch-icon" sizes="76x76" href="/apple-touch-icon-76x76.png">
31
+ <link rel="apple-touch-icon" sizes="114x114" href="/apple-touch-icon-114x114.png">
32
+ <link rel="apple-touch-icon" sizes="120x120" href="/apple-touch-icon-120x120.png">
33
+ <link rel="apple-touch-icon" sizes="144x144" href="/apple-touch-icon-144x144.png">
34
+ <link rel="apple-touch-icon" sizes="152x152" href="/apple-touch-icon-152x152.png">
35
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-180x180.png">
36
+ <meta property="fb:app_id" content="1401488693436528">
37
+
38
+ <meta content="https://avatars0.githubusercontent.com/u/231018?v=3&s=400" name="twitter:image:src" /><meta content="@github" name="twitter:site" /><meta content="summary" name="twitter:card" /><meta content="kc5nra/obs-studio-utils" name="twitter:title" /><meta content="Contribute to obs-studio-utils development by creating an account on GitHub." name="twitter:description" />
39
+ <meta content="https://avatars0.githubusercontent.com/u/231018?v=3&s=400" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="kc5nra/obs-studio-utils" property="og:title" /><meta content="https://github.com/kc5nra/obs-studio-utils" property="og:url" /><meta content="Contribute to obs-studio-utils development by creating an account on GitHub." property="og:description" />
40
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
41
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
42
+ <link rel="assets" href="https://assets-cdn.github.com/">
43
+ <link rel="web-socket" href="wss://live.github.com/_sockets/VjI6NTA0OTIxMTc6ZDJjMjcyYzA1MjZiMGM4MGI5MmU2NzBkMTMyMWNiYWZhMjZiZGQ0MGQxOGY1MWNkYmI1NzA0NjhlZTdjM2E2OA==--561fd74d4042c982502dd897714172236351f238">
44
+ <meta name="pjax-timeout" content="1000">
45
+ <link rel="sudo-modal" href="/sessions/sudo_modal">
46
+ <meta name="request-id" content="683BCFFA:2DABC:EE980D1:587831B3" data-pjax-transient>
47
+
48
+ <meta name="msapplication-TileImage" content="/windows-tile.png">
49
+ <meta name="msapplication-TileColor" content="#ffffff">
50
+ <meta name="selected-link" value="repo_source" data-pjax-transient>
51
+
52
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
53
+<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
54
+ <meta name="google-analytics" content="UA-3769691-2">
55
+
56
+<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="683BCFFA:2DABC:EE980D1:587831B3" name="octolytics-dimension-request_id" /><meta content="207897" name="octolytics-actor-id" /><meta content="DDRBoxman" name="octolytics-actor-login" /><meta content="951d1462a992f6b4236b5008d6b11c4331eba4c658fe50ec7c9882e14af522bd" name="octolytics-actor-hash" />
57
+<meta content="/<user-name>/<repo-name>/blob/show" data-pjax-transient="true" name="analytics-location" />
58
+
59
+
60
+
61
+ <meta class="js-ga-set" name="dimension1" content="Logged In">
62
+
63
+
64
+
65
+ <meta name="hostname" content="github.com">
66
+ <meta name="user-login" content="DDRBoxman">
67
+
68
+ <meta name="expected-hostname" content="github.com">
69
+ <meta name="js-proxy-site-detection-payload" content="ZDQzNzZjM2MwNTlmYWFjNzhmNWJlMzY0MzNkMjdiOThhM2U2OTI0ZjlmMzFlYzJmODdjYjMxNDQ5OTBkNjc4NXx7InJlbW90ZV9hZGRyZXNzIjoiMTA0LjU5LjIwNy4yNTAiLCJyZXF1ZXN0X2lkIjoiNjgzQkNGRkE6MkRBQkM6RUU5ODBEMTo1ODc4MzFCMyIsInRpbWVzdGFtcCI6MTQ4NDI3MjA1NiwiaG9zdCI6ImdpdGh1Yi5jb20ifQ==">
70
+
71
+
72
+ <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000">
73
+ <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
74
+
75
+ <meta name="html-safe-nonce" content="0a420a0a7ff0cff8568da5f27c46880ec53370cf">
76
+
77
+ <meta http-equiv="x-pjax-version" content="f36bd54ef0fdb145d68369e21555ea6f">
78
+
79
+
80
+
81
+ <meta name="description" content="Contribute to obs-studio-utils development by creating an account on GitHub.">
82
+ <meta name="go-import" content="github.com/kc5nra/obs-studio-utils git https://github.com/kc5nra/obs-studio-utils.git">
83
+
84
+ <meta content="231018" name="octolytics-dimension-user_id" /><meta content="kc5nra" name="octolytics-dimension-user_login" /><meta content="24656398" name="octolytics-dimension-repository_id" /><meta content="kc5nra/obs-studio-utils" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="24656398" name="octolytics-dimension-repository_network_root_id" /><meta content="kc5nra/obs-studio-utils" name="octolytics-dimension-repository_network_root_nwo" />
85
+ <link href="https://github.com/kc5nra/obs-studio-utils/commits/master.atom" rel="alternate" title="Recent Commits to obs-studio-utils:master" type="application/atom+xml">
86
+
87
+
88
+ <link rel="canonical" href="https://github.com/kc5nra/obs-studio-utils/blob/master/install/osx/obs.png" data-pjax-transient>
89
+ </head>
90
+
91
+
92
+ <body class="logged-in env-production macintosh vis-public page-blob">
93
+ <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div>
94
+ <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ <div class="header header-logged-in true" role="banner">
103
+ <div class="container clearfix">
104
+
105
+ <a class="header-logo-invertocat" href="https://github.com/" data-hotkey="g d" aria-label="Homepage" data-ga-click="Header, go to dashboard, icon:logo">
106
+ <svg aria-hidden="true" class="octicon octicon-mark-github" height="28" version="1.1" viewBox="0 0 16 16" width="28"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
107
+</a>
108
+
109
+
110
+ <div class="header-search scoped-search site-scoped-search js-site-search" role="search">
111
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/kc5nra/obs-studio-utils/search" class="js-site-search-form" data-scoped-search-url="/kc5nra/obs-studio-utils/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
112
+ <label class="form-control header-search-wrapper js-chromeless-input-container">
113
+ <div class="header-search-scope">This repository</div>
114
+ <input type="text"
115
+ class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
116
+ data-hotkey="s"
117
+ name="q"
118
+ placeholder="Search"
119
+ aria-label="Search this repository"
120
+ data-unscoped-placeholder="Search GitHub"
121
+ data-scoped-placeholder="Search"
122
+ autocapitalize="off">
123
+ </label>
124
+</form></div>
125
+
126
+
127
+ <ul class="header-nav float-left" role="navigation">
128
+ <li class="header-nav-item">
129
+ <a href="/pulls" aria-label="Pull requests you created" class="js-selected-navigation-item header-nav-link" data-ga-click="Header, click, Nav menu - item:pulls context:user" data-hotkey="g p" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls">
130
+ Pull requests
131
+</a> </li>
132
+ <li class="header-nav-item">
133
+ <a href="/issues" aria-label="Issues you created" class="js-selected-navigation-item header-nav-link" data-ga-click="Header, click, Nav menu - item:issues context:user" data-hotkey="g i" data-selected-links="/issues /issues/assigned /issues/mentioned /issues">
134
+ Issues
135
+</a> </li>
136
+ <li class="header-nav-item">
137
+ <a class="header-nav-link" href="https://gist.github.com/" data-ga-click="Header, go to gist, text:gist">Gist</a>
138
+ </li>
139
+ </ul>
140
+
141
+
142
+<ul class="header-nav user-nav float-right" id="user-links">
143
+ <li class="header-nav-item">
144
+
145
+ <a href="/notifications" aria-label="You have no unread notifications" class="header-nav-link notification-indicator tooltipped tooltipped-s js-socket-channel js-notification-indicator" data-channel="tenant:1:notification-changed:207897" data-ga-click="Header, go to notifications, icon:read" data-hotkey="g n">
146
+ <span class="mail-status "></span>
147
+ <svg aria-hidden="true" class="octicon octicon-bell" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M14 12v1H0v-1l.73-.58c.77-.77.81-2.55 1.19-4.42C2.69 3.23 6 2 6 2c0-.55.45-1 1-1s1 .45 1 1c0 0 3.39 1.23 4.16 5 .38 1.88.42 3.66 1.19 4.42l.66.58H14zm-7 4c1.11 0 2-.89 2-2H5c0 1.11.89 2 2 2z"/></svg>
148
+</a>
149
+ </li>
150
+
151
+ <li class="header-nav-item dropdown js-menu-container">
152
+ <a class="header-nav-link tooltipped tooltipped-s js-menu-target" href="/new"
153
+ aria-label="Create new…"
154
+ data-ga-click="Header, create new, icon:add">
155
+ <svg aria-hidden="true" class="octicon octicon-plus float-left" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 9H7v5H5V9H0V7h5V2h2v5h5z"/></svg>
156
+ <span class="dropdown-caret"></span>
157
+ </a>
158
+
159
+ <div class="dropdown-menu-content js-menu-content">
160
+ <ul class="dropdown-menu dropdown-menu-sw">
161
+
162
+<a class="dropdown-item" href="/new" data-ga-click="Header, create new repository">
163
+ New repository
164
+</a>
165
+
166
+ <a class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository">
167
+ Import repository
168
+ </a>
169
+
170
+<a class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, create new gist">
171
+ New gist
172
+</a>
173
+
174
+ <a class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization">
175
+ New organization
176
+ </a>
177
+
178
+
179
+
180
+ <div class="dropdown-divider"></div>
181
+ <div class="dropdown-header">
182
+ <span title="kc5nra/obs-studio-utils">This repository</span>
183
+ </div>
184
+ <a class="dropdown-item" href="/kc5nra/obs-studio-utils/issues/new" data-ga-click="Header, create new issue">
185
+ New issue
186
+ </a>
187
+
188
+ </ul>
189
+ </div>
190
+ </li>
191
+
192
+ <li class="header-nav-item dropdown js-menu-container">
193
+ <a class="header-nav-link name tooltipped tooltipped-sw js-menu-target" href="/DDRBoxman"
194
+ aria-label="View profile and more"
195
+ data-ga-click="Header, show menu, icon:avatar">
196
+ <img alt="@DDRBoxman" class="avatar" height="20" src="https://avatars3.githubusercontent.com/u/207897?v=3&s=40" width="20" />
197
+ <span class="dropdown-caret"></span>
198
+ </a>
199
+
200
+ <div class="dropdown-menu-content js-menu-content">
201
obs-studio-17.0.1.tar.xz/CI/install/osx/package_util.py
Added
96
1
2
+def cmd(cmd):
3
+ import subprocess
4
+ import shlex
5
+ return subprocess.check_output(shlex.split(cmd)).rstrip('\r\n')
6
+
7
+def get_tag_info(tag):
8
+ rev = cmd('git rev-parse {0}'.format(latest_tag))
9
+ anno = cmd('git cat-file -p {0}'.format(rev))
10
+ tag_info = []
11
+ for i, v in enumerate(anno.splitlines()):
12
+ if i <= 4:
13
+ continue
14
+ tag_info.append(v.lstrip())
15
+
16
+ return tag_info
17
+
18
+def gen_html(github_user, latest_tag):
19
+
20
+ url = 'https://github.com/{0}/obs-studio/commit/%H'.format(github_user)
21
+
22
+ with open('readme.html', 'w') as f:
23
+ f.write("<html><body>")
24
+ log_cmd = """git log {0}...HEAD --pretty=format:'<li>• <a href="{1}">(view)</a> %s</li>'"""
25
+ log_res = cmd(log_cmd.format(latest_tag, url))
26
+ if len(log_res.splitlines()):
27
+ f.write('<p>Changes since {0}: (Newest to oldest)</p>'.format(latest_tag))
28
+ f.write(log_res)
29
+
30
+ ul = False
31
+ f.write('<p>')
32
+ import re
33
+
34
+ for l in get_tag_info(latest_tag):
35
+ if not len(l):
36
+ continue
37
+ if l.startswith('*'):
38
+ ul = True
39
+ if not ul:
40
+ f.write('<ul>')
41
+ f.write('<li>• {0}</li>'.format(re.sub(r'^(\s*)?[*](\s*)?', '', l)))
42
+ else:
43
+ if ul:
44
+ f.write('</ul><p/>')
45
+ ul = False
46
+ f.write('<p>{0}</p>'.format(l))
47
+ if ul:
48
+ f.write('</ul>')
49
+ f.write('</p></body></html>')
50
+
51
+ cmd('textutil -convert rtf readme.html -output readme.rtf')
52
+ cmd("""sed -i '' 's/Times-Roman/Verdana/g' readme.rtf""")
53
+
54
+def save_manifest(latest_tag, user, jenkins_build, branch, stable):
55
+ log = cmd('git log --pretty=oneline {0}...HEAD'.format(latest_tag))
56
+ manifest = {}
57
+ manifest['commits'] = []
58
+ for v in log.splitlines():
59
+ manifest['commits'].append(v)
60
+ manifest['tag'] = {
61
+ 'name': latest_tag,
62
+ 'description': get_tag_info(latest_tag)
63
+ }
64
+
65
+ manifest['version'] = cmd('git rev-list HEAD --count')
66
+ manifest['sha1'] = cmd('git rev-parse HEAD')
67
+ manifest['jenkins_build'] = jenkins_build
68
+
69
+ manifest['user'] = user
70
+ manifest['branch'] = branch
71
+ manifest['stable'] = stable
72
+
73
+ import cPickle
74
+ with open('manifest', 'w') as f:
75
+ cPickle.dump(manifest, f)
76
+
77
+def prepare_pkg(project, package_id):
78
+ cmd('packagesutil --file "{0}" set package-1 identifier {1}'.format(project, package_id))
79
+ cmd('packagesutil --file "{0}" set package-1 version {1}'.format(project, '1.0'))
80
+
81
+
82
+import argparse
83
+parser = argparse.ArgumentParser(description='obs-studio package util')
84
+parser.add_argument('-u', '--user', dest='user', default='jp9000')
85
+parser.add_argument('-p', '--package-id', dest='package_id', default='org.obsproject.pkg.obs-studio')
86
+parser.add_argument('-f', '--project-file', dest='project', default='OBS.pkgproj')
87
+parser.add_argument('-j', '--jenkins-build', dest='jenkins_build', default='0')
88
+parser.add_argument('-b', '--branch', dest='branch', default='master')
89
+parser.add_argument('-s', '--stable', dest='stable', required=False, action='store_true', default=False)
90
+args = parser.parse_args()
91
+
92
+latest_tag = cmd('git describe --tags --abbrev=0')
93
+gen_html(args.user, latest_tag)
94
+prepare_pkg(args.project, args.package_id)
95
+save_manifest(latest_tag, args.user, args.jenkins_build, args.branch, args.stable)
96
obs-studio-17.0.1.tar.xz/CI/util
Added
2
1
+(directory)
2
obs-studio-17.0.1.tar.xz/CI/util/build-package-deps-osx.sh
Added
133
1
2
+#!/usr/bin/env bash
3
+
4
+CURDIR=$(pwd)
5
+
6
+# the temp directory
7
+WORK_DIR=`mktemp -d`
8
+
9
+# deletes the temp directory
10
+function cleanup {
11
+ #rm -rf "$WORK_DIR"
12
+ echo "Deleted temp working directory $WORK_DIR"
13
+}
14
+
15
+# register the cleanup function to be called on the EXIT signal
16
+trap cleanup EXIT
17
+
18
+cd $WORK_DIR
19
+
20
+DEPS_DEST=$WORK_DIR/obsdeps
21
+
22
+# make dest dirs
23
+mkdir $DEPS_DEST
24
+mkdir $DEPS_DEST/bin
25
+mkdir $DEPS_DEST/include
26
+
27
+# OSX COMPAT
28
+export MACOSX_DEPLOYMENT_TARGET=10.9
29
+
30
+# If you need an olders SDK and Xcode won't give it to you
31
+# https://github.com/phracker/MacOSX-SDKs
32
+
33
+# libopus
34
+curl -L -O http://downloads.xiph.org/releases/opus/opus-1.1.3.tar.gz
35
+tar -xf opus-1.1.3.tar.gz
36
+cd ./opus-1.1.3
37
+mkdir build
38
+cd ./build
39
+../configure --disable-shared --enable-static --prefix="/tmp/obsdeps"
40
+make -j 12
41
+make install
42
+
43
+cd $WORK_DIR
44
+
45
+# libogg
46
+curl -L -O http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz
47
+tar -xf libogg-1.3.2.tar.gz
48
+cd ./libogg-1.3.2
49
+mkdir build
50
+cd ./build
51
+../configure --disable-shared --enable-static --prefix="/tmp/obsdeps"
52
+make -j 12
53
+make install
54
+
55
+cd $WORK_DIR
56
+
57
+# libvorbis
58
+curl -L -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz
59
+tar -xf libvorbis-1.3.5.tar.gz
60
+cd ./libvorbis-1.3.5
61
+mkdir build
62
+cd ./build
63
+../configure --disable-shared --enable-static --prefix="/tmp/obsdeps"
64
+make -j 12
65
+make install
66
+
67
+cd $WORK_DIR
68
+
69
+# libvpx
70
+curl -L -O http://storage.googleapis.com/downloads.webmproject.org/releases/webm/libvpx-1.6.0.tar.bz2
71
+tar -xf libvpx-1.6.0.tar.bz2
72
+cd ./libvpx-1.6.0
73
+mkdir build
74
+cd ./build
75
+../configure --disable-shared --libdir="/tmp/obsdeps/bin"
76
+make -j 12
77
+make install
78
+
79
+cd $WORK_DIR
80
+
81
+# x264
82
+git clone git://git.videolan.org/x264.git
83
+cd ./x264
84
+mkdir build
85
+cd ./build
86
+../configure --extra-ldflags="-mmacosx-version-min=10.9" --enable-static --prefix="/tmp/obsdeps"
87
+make -j 12
88
+make install
89
+../configure --extra-ldflags="-mmacosx-version-min=10.9" --enable-shared --libdir="/tmp/obsdeps/bin" --prefix="/tmp/obsdeps"
90
+make -j 12
91
+ln -f -s libx264.*.dylib libx264.dylib
92
+find . -name \*.dylib -exec cp \{\} $DEPS_DEST/bin/ \;
93
+rsync -avh --include="*/" --include="*.h" --exclude="*" ../* $DEPS_DEST/include/
94
+rsync -avh --include="*/" --include="*.h" --exclude="*" ./* $DEPS_DEST/include/
95
+
96
+cd $WORK_DIR
97
+
98
+# janson
99
+curl -L -O http://www.digip.org/jansson/releases/jansson-2.9.tar.gz
100
+tar -xf jansson-2.9.tar.gz
101
+cd jansson-2.9
102
+mkdir build
103
+cd ./build
104
+../configure --libdir="/tmp/obsdeps/bin" --enable-shared --disable-static
105
+make -j 12
106
+find . -name \*.dylib -exec cp \{\} $DEPS_DEST/bin/ \;
107
+rsync -avh --include="*/" --include="*.h" --exclude="*" ../* $DEPS_DEST/include/
108
+rsync -avh --include="*/" --include="*.h" --exclude="*" ./* $DEPS_DEST/include/
109
+
110
+cd $WORK_DIR
111
+
112
+export LDFLAGS="-L/tmp/obsdeps/lib"
113
+export CFLAGS="-I/tmp/obsdeps/include"
114
+
115
+# FFMPEG
116
+curl -L -O https://github.com/FFmpeg/FFmpeg/archive/n3.2.2.zip
117
+unzip ./n3.2.2.zip
118
+cd ./FFmpeg-n3.2.2
119
+mkdir build
120
+cd ./build
121
+../configure --extra-ldflags="-mmacosx-version-min=10.9" --enable-shared --disable-static --shlibdir="/tmp/obsdeps/bin" --enable-gpl --disable-doc --enable-libx264 --enable-libopus --enable-libvorbis --enable-libvpx
122
+make -j 12
123
+find . -name \*.dylib -exec cp \{\} $DEPS_DEST/bin/ \;
124
+rsync -avh --include="*/" --include="*.h" --exclude="*" ../* $DEPS_DEST/include/
125
+rsync -avh --include="*/" --include="*.h" --exclude="*" ./* $DEPS_DEST/include/
126
+
127
+cd $WORK_DIR
128
+
129
+tar -czf osx-deps.tar.gz obsdeps
130
+
131
+cp ./osx-deps.tar.gz $CURDIR
132
\ No newline at end of file
133
obs-studio-17.0.1.tar.xz/CI/util/win32.sh
Added
71
1
2
+#/bin/bash
3
+
4
+cd x264
5
+make clean
6
+LDFLAGS="-static-libgcc" ./configure --enable-shared --enable-win32thread --disable-avs --disable-ffms --disable-gpac --disable-interlaced --disable-lavf --cross-prefix=i686-w64-mingw32- --host=i686-pc-mingw32 --prefix="/home/jim/packages/win32"
7
+make -j6 fprofiled VIDS="CITY_704x576_60_orig_01.yuv"
8
+make install
9
+i686-w64-mingw32-dlltool -z /home/jim/packages/win32/bin/x264.orig.def --export-all-symbols /home/jim/packages/win32/bin/libx264-148.dll
10
+grep "EXPORTS\|x264" /home/jim/packages/win32/bin/x264.orig.def > /home/jim/packages/win32/bin/x264.def
11
+rm -f /home/jim/packages/win32/bin/x264.org.def
12
+sed -i -e "/\\t.*DATA/d" -e "/\\t\".*/d" -e "s/\s@.*//" /home/jim/packages/win32/bin/x264.def
13
+i686-w64-mingw32-dlltool -m i386 -d /home/jim/packages/win32/bin/x264.def -l /home/jim/packages/win32/bin/x264.lib -D /home/jim/win32/packages/bin/libx264-148.dll
14
+cd ..
15
+
16
+cd opus
17
+make clean
18
+LDFLAGS="-static-libgcc" ./configure -host=i686-w64-mingw32 --prefix="/home/jim/packages/win32" --enable-shared
19
+make -j6
20
+make install
21
+cd ..
22
+
23
+cd zlib/build32
24
+make clean
25
+cmake .. -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_INSTALL_PREFIX=/home/jim/packages/win32 -DINSTALL_PKGCONFIG_DIR=/home/jim/packages/win32/lib/pkgconfig -DCMAKE_RC_COMPILER=i686-w64-mingw32-windres -DCMAKE_SHARED_LINKER_FLAGS="-static-libgcc"
26
+make -j6
27
+make install
28
+mv ../../win32/lib/libzlib.dll.a ../../win32/lib/libz.dll.a
29
+mv ../../win32/lib/libzlibstatic.a ../../win32/lib/libz.a
30
+cp ../win32/zlib.def /home/jim/packages/win32/bin
31
+i686-w64-mingw32-dlltool -m i386 -d ../win32/zlib.def -l /home/jim/packages/win32/bin/zlib.lib -D /home/jim/win32/packages/bin/zlib.dll
32
+cd ../..
33
+
34
+cd libpng
35
+make clean
36
+PKG_CONFIG_PATH="/home/jim/packages/win32/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win32/lib -static-libgcc" CPPFLAGS="-I/home/jim/packages/win32/include" ./configure -host=i686-w64-mingw32 --prefix="/home/jim/packages/win32" --enable-shared
37
+make -j6
38
+make install
39
+cd ..
40
+
41
+cd libogg
42
+make clean
43
+PKG_CONFIG_PATH="/home/jim/packages/win32/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win32/lib -static-libgcc" CPPFLAGS="-I/home/jim/packages/win32/include" ./configure -host=i686-w64-mingw32 --prefix="/home/jim/packages/win32" --enable-shared
44
+make -j6
45
+make install
46
+cd ..
47
+
48
+cd libvorbis
49
+make clean
50
+PKG_CONFIG_PATH="/home/jim/packages/win32/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win32/lib -static-libgcc" CPPFLAGS="-I/home/jim/packages/win32/include" ./configure -host=i686-w64-mingw32 --prefix="/home/jim/packages/win32" --enable-shared --with-ogg="/home/jim/packages/win32"
51
+make -j6
52
+make install
53
+cd ..
54
+
55
+cd libvpxbuild
56
+make clean
57
+PKG_CONFIG_PATH="/home/jim/packages/win32/lib/pkgconfig" CROSS=i686-w64-mingw32- LDFLAGS="-static-libgcc" ../libvpx/configure --prefix=/home/jim/packages/win32 --enable-vp8 --enable-vp9 --disable-docs --disable-examples --enable-shared --disable-static --enable-runtime-cpu-detect --enable-realtime-only --disable-install-bins --disable-install-docs --disable-unit-tests --target=x86-win32-gcc
58
+make -j6
59
+make install
60
+i686-w64-mingw32-dlltool -m i386 -d libvpx.def -l /home/jim/packages/win32/bin/vpx.lib -D /home/jim/win32/packages/bin/libvpx-1.dll
61
+cd ..
62
+
63
+cd ffmpeg
64
+make clean
65
+cp /media/sf_linux/nvEncodeAPI.h /home/jim/packages/win32/include
66
+PKG_CONFIG_PATH="/home/jim/packages/win32/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win32/lib -static-libgcc" CFLAGS="-I/home/jim/packages/win32/include" ./configure --enable-memalign-hack --enable-gpl --disable-programs --disable-doc --arch=x86 --enable-shared --enable-nvenc --enable-libx264 --enable-libopus --enable-libvorbis --enable-libvpx --disable-debug --cross-prefix=i686-w64-mingw32- --target-os=mingw32 --pkg-config=pkg-config --prefix="/home/jim/packages/win32" --disable-postproc
67
+read -n1 -r -p "Press any key to continue building FFmpeg..." key
68
+make -j6
69
+make install
70
+cd ..
71
obs-studio-17.0.1.tar.xz/CI/util/win64.sh
Added
71
1
2
+#/bin/bash
3
+
4
+cd x264
5
+make clean
6
+LDFLAGS="-static-libgcc" ./configure --enable-shared --enable-win32thread --disable-avs --disable-ffms --disable-gpac --disable-interlaced --disable-lavf --cross-prefix=x86_64-w64-mingw32- --host=x86_64-pc-mingw32 --prefix="/home/jim/packages/win64"
7
+make -j6 fprofiled VIDS="CITY_704x576_60_orig_01.yuv"
8
+make install
9
+x86_64-w64-mingw32-dlltool -z /home/jim/packages/win64/bin/x264.orig.def --export-all-symbols /home/jim/packages/win64/bin/libx264-148.dll
10
+grep "EXPORTS\|x264" /home/jim/packages/win64/bin/x264.orig.def > /home/jim/packages/win64/bin/x264.def
11
+rm -f /home/jim/packages/win64/bin/x264.org.def
12
+sed -i -e "/\\t.*DATA/d" -e "/\\t\".*/d" -e "s/\s@.*//" /home/jim/packages/win64/bin/x264.def
13
+x86_64-w64-mingw32-dlltool -m i386:x86-64 -d /home/jim/packages/win64/bin/x264.def -l /home/jim/packages/win64/bin/x264.lib -D /home/jim/win64/packages/bin/libx264-148.dll
14
+cd ..
15
+
16
+cd opus
17
+make clean
18
+LDFLAGS="-static-libgcc" ./configure -host=x86_64-w64-mingw32 --prefix="/home/jim/packages/win64" --enable-shared
19
+make -j6
20
+make install
21
+cd ..
22
+
23
+cd zlib/build64
24
+make clean
25
+cmake .. -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_INSTALL_PREFIX=/home/jim/packages/win64 -DCMAKE_RC_COMPILER=x86_64-w64-mingw32-windres -DCMAKE_SHARED_LINKER_FLAGS="-static-libgcc"
26
+make -j6
27
+make install
28
+mv ../../win64/lib/libzlib.dll.a ../../win64/lib/libz.dll.a
29
+mv ../../win64/lib/libzlibstatic.a ../../win64/lib/libz.a
30
+cp ../win64/zlib.def /home/jim/packages/win64/bin
31
+x86_64-w64-mingw32-dlltool -m i386:x86-64 -d ../win32/zlib.def -l /home/jim/packages/win64/bin/zlib.lib -D /home/jim/win64/packages/bin/zlib.dll
32
+cd ../..
33
+
34
+cd libpng
35
+make clean
36
+PKG_CONFIG_PATH="/home/jim/packages/win64/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win64/lib" CPPFLAGS="-I/home/jim/packages/win64/include" ./configure -host=x86_64-w64-mingw32 --prefix="/home/jim/packages/win64" --enable-shared
37
+make -j6
38
+make install
39
+cd ..
40
+
41
+cd libogg
42
+make clean
43
+PKG_CONFIG_PATH="/home/jim/packages/win64/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win64/lib -static-libgcc" CPPFLAGS="-I/home/jim/packages/win64/include" ./configure -host=x86_64-w64-mingw32 --prefix="/home/jim/packages/win64" --enable-shared
44
+make -j6
45
+make install
46
+cd ..
47
+
48
+cd libvorbis
49
+make clean
50
+PKG_CONFIG_PATH="/home/jim/packages/win64/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win64/lib -static-libgcc" CPPFLAGS="-I/home/jim/packages/win64/include" ./configure -host=x86_64-w64-mingw32 --prefix="/home/jim/packages/win64" --enable-shared --with-ogg="/home/jim/packages/win64"
51
+make -j6
52
+make install
53
+cd ..
54
+
55
+cd libvpxbuild
56
+make clean
57
+PKG_CONFIG_PATH="/home/jim/packages/win64/lib/pkgconfig" CROSS=x86_64-w64-mingw32- LDFLAGS="-static-libgcc" ../libvpx/configure --prefix=/home/jim/packages/win64 --enable-vp8 --enable-vp9 --disable-docs --disable-examples --enable-shared --disable-static --enable-runtime-cpu-detect --enable-realtime-only --disable-install-bins --disable-install-docs --disable-unit-tests --target=x86_64-win64-gcc
58
+make -j6
59
+make install
60
+x86_64-w64-mingw32-dlltool -m i386:x86-64 -d libvpx.def -l /home/jim/packages/win64/bin/vpx.lib -D /home/jim/win64/packages/bin/libvpx-1.dll
61
+cd ..
62
+
63
+cd ffmpeg
64
+make clean
65
+cp /media/sf_linux/nvEncodeAPI.h /home/jim/packages/win64/include
66
+PKG_CONFIG_PATH="/home/jim/packages/win64/lib/pkgconfig" LDFLAGS="-L/home/jim/packages/win64/lib" CPPFLAGS="-I/home/jim/packages/win64/include" ./configure --enable-memalign-hack --enable-gpl --disable-doc --arch=x86_64 --enable-shared --enable-nvenc --enable-libx264 --enable-libopus --enable-libvorbis --enable-libvpx --disable-debug --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32 --pkg-config=pkg-config --prefix="/home/jim/packages/win64" --disable-postproc
67
+read -n1 -r -p "Press any key to continue building FFmpeg..." key
68
+make -j6
69
+make install
70
+cd ..
71
obs-studio-0.17.0.tar.xz/UI/data/locale/ca-ES.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/ca-ES.ini
Changed
96
1
2
Hours="Hores"
3
Minutes="Minuts"
4
Seconds="Segons"
5
+Deprecated="Obsolet"
6
+ReplayBuffer="Memòria intermèdia de reproducció"
7
+Import="Importa"
8
+Export="Exporta"
9
10
QuickTransitions.SwapScenes="Canvia la vista prèvia i sortida d'escenes després de la transició"
11
QuickTransitions.SwapScenesTT="Canvia la vista prèvia i sortida d'escenes després de la transició (si encara existeix l'escena original de la sortida). \nAixò no desfarà qualsevol canvi que pugui haver fet a l'escena original de la sortida."
12
13
Output.RecordNoSpace.Msg="No hi ha prou espai de disc per continuar la gravació."
14
Output.RecordError.Title="Error en l'enregistrament"
15
Output.RecordError.Msg="S'ha produït un error desconegut mentre es gravava."
16
+Output.ReplayBuffer.NoHotkey.Title="Cap tecla d'accés ràpid!"
17
+Output.ReplayBuffer.NoHotkey.Msg="Cap tecla d'accés ràpid establerta per la memòria intermèdia de reproducció. Configureu la tecla d'accés \"Desa\" per desar els enregistraments de reproducció."
18
19
Output.BadPath.Title="Ruta de l'arxiu incorrecta"
20
Output.BadPath.Text="La ruta configurada pel fitxer de sortida no és vàlida. Si us plau, comproveu la configuració per confirmar que s'ha creat una ruta de fitxer vàlida."
21
22
Basic.Main.Sources="Orígens"
23
Basic.Main.Connecting="S'està connectant..."
24
Basic.Main.StartRecording="Inicia l'enregistrament"
25
-Basic.Main.StartStreaming="Inicia l'enregistrament"
26
+Basic.Main.StartReplayBuffer="Inicia la reproducció de la memòria intermèdia"
27
+Basic.Main.StartStreaming="Inicia la transmissió"
28
Basic.Main.StopRecording="Atura l'enregistrament"
29
Basic.Main.StoppingRecording="Aturant l'enregistrament..."
30
+Basic.Main.StopReplayBuffer="Atura la reproducció de la memòria intermèdia"
31
+Basic.Main.StoppingReplayBuffer="S'està aturant la reproducció de la memòria intermèdia..."
32
Basic.Main.StopStreaming="Atura l'enregistrament"
33
Basic.Main.StoppingStreaming="Aturant la transmissió..."
34
Basic.Main.ForceStopStreaming="Atura l'enregistrament (descarta el retard)"
35
36
Basic.MainMenu.File.Import="&Importa"
37
Basic.MainMenu.File.ShowRecordings="Mostra els en®istraments"
38
Basic.MainMenu.File.Remux="Converteix format de gravacions"
39
-Basic.MainMenu.File.Settings="&Paràmetres"
40
+Basic.MainMenu.File.Settings="&Configuració"
41
Basic.MainMenu.File.ShowSettingsFolder="Mostrar carpeta de configuració"
42
Basic.MainMenu.File.ShowProfileFolder="Mostra la carpeta del perfil"
43
Basic.MainMenu.AlwaysOnTop="&Sempre al davant"
44
45
Basic.MainMenu.Edit.UndoAction="&Desfés $1"
46
Basic.MainMenu.Edit.RedoAction="&Refés $1"
47
Basic.MainMenu.Edit.LockPreview="&Bloquejar vista prèvia"
48
+Basic.MainMenu.Edit.Scale="Vista prèvia i escalat"
49
+Basic.MainMenu.Edit.Scale.Window="Ajusta a la finestra"
50
+Basic.MainMenu.Edit.Scale.Canvas="Tela (%1x%2)"
51
+Basic.MainMenu.Edit.Scale.Output="Sortida (%1x%2)"
52
Basic.MainMenu.Edit.Transform="&Transforma"
53
Basic.MainMenu.Edit.Transform.EditTransform="&Editar Transformació..."
54
+Basic.MainMenu.Edit.Transform.CopyTransform="Copia la transformació"
55
+Basic.MainMenu.Edit.Transform.PasteTransform="Enganxa la transformació"
56
Basic.MainMenu.Edit.Transform.ResetTransform="&Reinicialitza Transformació"
57
Basic.MainMenu.Edit.Transform.Rotate90CW="Gira 90 graus a la dreta"
58
Basic.MainMenu.Edit.Transform.Rotate90CCW="Gira 90 graus a l'esquerra"
59
60
61
Basic.MainMenu.SceneCollection="&Col·lecció d'escenes"
62
Basic.MainMenu.Profile="&Perfil"
63
+Basic.MainMenu.Profile.Import="Importació del perfil"
64
+Basic.MainMenu.Profile.Export="Exportació del perfil"
65
+Basic.MainMenu.SceneCollection.Import="Importa col·lecció d'escenes"
66
+Basic.MainMenu.SceneCollection.Export="Exporta la col·lecció d'escenes"
67
+Basic.MainMenu.Profile.Exists="El perfil ja existeix"
68
+Basic.MainMenu.SceneCollection.Exists="La col·lecció d'escenes ja existeix"
69
70
Basic.MainMenu.Tools="&Eines"
71
72
73
Basic.Settings.Output.Mode.Simple="Simple"
74
Basic.Settings.Output.Mode.Adv="Avançat"
75
Basic.Settings.Output.Mode.FFmpeg="Sortida FFmpeg"
76
+Basic.Settings.Output.UseReplayBuffer="Activa la reproducció de la memòria intermèdia"
77
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Temps de reproducció màxim (segons)"
78
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memòria màxima (MB)"
79
+Basic.Settings.Output.ReplayBuffer.Estimate="Ús aproximat de memòria: %1 MB"
80
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="No es pot estimar l'ús de memòria. Establiu el límit màxim de memòria."
81
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Nota: Assegureu-vos d'establir una tecla d'accés ràpid per la memòria intermèdia de reproducció a la secció de tecles ràpides)"
82
+Basic.Settings.Output.ReplayBuffer.Prefix="Prefix del nom del fitxer de la memòria intermèdia"
83
+Basic.Settings.Output.ReplayBuffer.Suffix="Sufix"
84
Basic.Settings.Output.Simple.SavePath="Camí d'enregistrament"
85
Basic.Settings.Output.Simple.RecordingQuality="Qualitat de l'enregistrament"
86
Basic.Settings.Output.Simple.RecordingQuality.Stream="Mateixa que en directe"
87
88
Basic.Settings.Output.Adv.Audio.Track2="Pista 2"
89
Basic.Settings.Output.Adv.Audio.Track3="Pista 3"
90
Basic.Settings.Output.Adv.Audio.Track4="Pista 4"
91
+Basic.Settings.Output.Adv.Audio.Track5="Pista 5"
92
+Basic.Settings.Output.Adv.Audio.Track6="Pista 6"
93
94
Basic.Settings.Output.Adv.Recording="Enregistrament"
95
Basic.Settings.Output.Adv.Recording.Type="Tipus"
96
obs-studio-0.17.0.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/cs-CZ.ini
Changed
10
1
2
Basic.Settings.Output.Adv.Audio.Track2="Stopa 2"
3
Basic.Settings.Output.Adv.Audio.Track3="Stopa 3"
4
Basic.Settings.Output.Adv.Audio.Track4="Stopa 4"
5
+Basic.Settings.Output.Adv.Audio.Track5="Stopa 5"
6
+Basic.Settings.Output.Adv.Audio.Track6="Stopa 6"
7
8
Basic.Settings.Output.Adv.Recording="Nahrávání"
9
Basic.Settings.Output.Adv.Recording.Type="Typ"
10
obs-studio-0.17.0.tar.xz/UI/data/locale/de-DE.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/de-DE.ini
Changed
10
1
2
Region="Deutschland"
3
4
OK="OK"
5
-Apply="Anwenden"
6
+Apply="Übernehmen"
7
Cancel="Abbrechen"
8
Close="Schließen"
9
Save="Speichern"
10
obs-studio-0.17.0.tar.xz/UI/data/locale/fi-FI.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/fi-FI.ini
Changed
10
1
2
Basic.Settings.Output.Adv.Audio.Track2="Raita 2"
3
Basic.Settings.Output.Adv.Audio.Track3="Raita 3"
4
Basic.Settings.Output.Adv.Audio.Track4="Raita 4"
5
+Basic.Settings.Output.Adv.Audio.Track5="Raita 5"
6
+Basic.Settings.Output.Adv.Audio.Track6="Raita 6"
7
8
Basic.Settings.Output.Adv.Recording="Tallennus"
9
Basic.Settings.Output.Adv.Recording.Type="Tyyppi"
10
obs-studio-0.17.0.tar.xz/UI/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/hu-HU.ini
Changed
65
1
2
Basic.MainMenu.File.Export="&Exportálás"
3
Basic.MainMenu.File.Import="&Importálás"
4
Basic.MainMenu.File.ShowRecordings="&Felvételek megjelenítése"
5
-Basic.MainMenu.File.Remux="Re&mux felvételek"
6
+Basic.MainMenu.File.Remux="Felvételek re&muxolása"
7
Basic.MainMenu.File.Settings="&Beállítások"
8
Basic.MainMenu.File.ShowSettingsFolder="Beállítási mappa megjelenítése"
9
Basic.MainMenu.File.ShowProfileFolder="Profilmappa megjelenítése"
10
11
Basic.MainMenu.Edit.RedoAction="&Ismét $1"
12
Basic.MainMenu.Edit.LockPreview="&Előnézet zárolás"
13
Basic.MainMenu.Edit.Scale="Előnézet &méretezés"
14
-Basic.MainMenu.Edit.Scale.Window="Ablakhoz skálázás"
15
+Basic.MainMenu.Edit.Scale.Window="Ablakhoz igazítás"
16
Basic.MainMenu.Edit.Scale.Canvas="Vászon (%1x%2)"
17
Basic.MainMenu.Edit.Scale.Output="Kimenet (%1x%2)"
18
Basic.MainMenu.Edit.Transform="&Alakítás"
19
20
Basic.MainMenu.Tools="&Eszközök"
21
22
Basic.MainMenu.Help="&Segítség"
23
-Basic.MainMenu.Help.Website="Weboldal meglátogatása"
24
+Basic.MainMenu.Help.Website="Weboldal megtekintése"
25
Basic.MainMenu.Help.Logs="&Naplófájlok"
26
Basic.MainMenu.Help.Logs.ShowLogs="&Naplófájlok megjelenítése"
27
Basic.MainMenu.Help.Logs.UploadCurrentLog="&Aktuális Naplófájl feltöltése"
28
Basic.MainMenu.Help.Logs.UploadLastLog="&Utolsó Naplófájl feltöltése"
29
-Basic.MainMenu.Help.Logs.ViewCurrentLog="&Jelenlegi napló megtekintése"
30
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Jelenlegi Naplófájl megtekintése"
31
Basic.MainMenu.Help.CheckForUpdates="Frissítések ellenőrzése"
32
33
Basic.Settings.ProgramRestart="A beállítások érvénybe lépéséhez a program újraindítása szükséges."
34
35
Basic.Settings.Output.Encoder="Kódoló"
36
Basic.Settings.Output.SelectDirectory="Felvételi könyvtár kiválasztása"
37
Basic.Settings.Output.SelectFile="Felvétel fájljának kiválasztása"
38
-Basic.Settings.Output.EnforceBitrate="Stream kiszolgáló bitráta korlátainak kényszerítése"
39
+Basic.Settings.Output.EnforceBitrate="Stream kiszolgáló bitsebesség korlátainak kényszerítése"
40
Basic.Settings.Output.Mode="Kimeneti mód"
41
Basic.Settings.Output.Mode.Simple="Egyszerű"
42
Basic.Settings.Output.Mode.Adv="Haladó"
43
44
Basic.Settings.Output.Simple.RecordingQuality.Small="Jó minőség, közepes fájlméret"
45
Basic.Settings.Output.Simple.RecordingQuality.HQ="Megkülönböztethetetlen minőség, nagy fájlméret"
46
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Veszteségmentes minőség, hatalmas fájlméret"
47
-Basic.Settings.Output.Simple.Warn.VideoBitrate="Figyelem: Az adás videó bitrátája %1 értéken áll, ami a kiválasztott kiszolgáló felső határértéke. Amennyiben túl kívánja lépni a megadott %1 értéket, úgy engedélyezze a haladó kódolási opciókat és törölje a \"stream kiszolgáló bitráta korlátainak kényszerítése\" opciót."
48
-Basic.Settings.Output.Simple.Warn.AudioBitrate="Figyelem: Az adás audio bitrátája %1 értéken áll, ami a kiválasztott kiszolgáló felső határértéke. Amennyiben túl kívánja lépni a megadott %1 értéket, úgy engedélyezze a haladó kódolási opciókat és törölje a \"stream kiszolgáló bitráta korlátainak kényszerítése\" opciót."
49
+Basic.Settings.Output.Simple.Warn.VideoBitrate="Figyelem: Az adás videó bitsebessége %1 értéken áll, ami a kiválasztott kiszolgáló felső határértéke. Amennyiben túl kívánja lépni a megadott %1 értéket, úgy engedélyezze a haladó kódolási opciókat és törölje a \"stream kiszolgáló bitsebesség korlátainak kényszerítése\" opciót."
50
+Basic.Settings.Output.Simple.Warn.AudioBitrate="Figyelem: Az adás audio bitsebessége %1 értéken áll, ami a kiválasztott kiszolgáló felső határértéke. Amennyiben túl kívánja lépni a megadott %1 értéket, úgy engedélyezze a haladó kódolási opciókat és törölje a \"stream kiszolgáló bitsebesség korlátainak kényszerítése\" opciót."
51
Basic.Settings.Output.Simple.Warn.Encoder="Figyelem: A streamtől eltérő minőséggel történő rögzítés, további CPU erőforrásokat igényel, ha egyidejűleg használja mindkettőt."
52
Basic.Settings.Output.Simple.Warn.Lossless="Figyelem: A veszteségmentes minőséggel történő felvétel hatalmas fájlméretet generál. Ezzel a minőséggel percenként akár 7 gigabájt adatot is generálhat nagy felbontáson és képkockasebességen. Ez az eljárás nem ajánlott hosszú felvételekhez, kivéve ha hatalmas lemezterület áll rendelkezésre."
53
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Biztos benne, hogy veszteségmentes minőséget kíván használni?"
54
55
Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardver (AMD)"
56
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardver (NVENC)"
57
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Szoftveres (x264 alacsony CPU használati készlet, növekvő fájlméret)"
58
-Basic.Settings.Output.VideoBitrate="Videó bitráta"
59
-Basic.Settings.Output.AudioBitrate="Audio bitráta"
60
+Basic.Settings.Output.VideoBitrate="Videó bitsebesség"
61
+Basic.Settings.Output.AudioBitrate="Audio bitsebesség"
62
Basic.Settings.Output.Reconnect="Automatikus újracsatlakozás"
63
Basic.Settings.Output.RetryDelay="Újrapróbálkozás késleltetése (másodperc)"
64
Basic.Settings.Output.MaxRetries="Újrapróbálkozások maximális száma"
65
obs-studio-0.17.0.tar.xz/UI/data/locale/it-IT.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/it-IT.ini
Changed
201
1
2
MoveUp="Sposta su"
3
MoveDown="Sposta giù"
4
Settings="Impostazioni"
5
-Display="Display"
6
+Display="Schermo"
7
Name="Nome"
8
Exit="Esci"
9
Mixer="Mixer"
10
11
Mono="Mono"
12
Stereo="Stereo"
13
DroppedFrames="Fotogrammi persi %1 (%2%)"
14
-PreviewProjector="Proiettore Schermo intero (Anteprima)"
15
-SceneProjector="Proiettore Schermo intero (Scena)"
16
-SourceProjector="Proiettore Schermo intero (Sorgente)"
17
+PreviewProjector="Proiettore a schermo intero (anteprima)"
18
+SceneProjector="Proiettore a schermo intero (scena)"
19
+SourceProjector="Proiettore a schermo intero (sorgente)"
20
Clear="Svuota"
21
Revert="Ripristina"
22
Show="Mostra"
23
Hide="Nascondi"
24
-Untitled="Senza Titolo"
25
+Untitled="Senza titolo"
26
New="Nuovo"
27
Duplicate="Duplica"
28
Enable="Abilita"
29
-DisableOSXVSync="Disabilita il V-Sync OSX"
30
-ResetOSXVSyncOnExit="Reimpostare V-Sync OSX in uscita"
31
-HighResourceUsage="Codifica in sovraccarico! È consigliabile abbassare le impostazioni video o utilizzare un settaggio predefinito di codifica più veloce."
32
+DisableOSXVSync="Disabilita V-Sync OSX"
33
+ResetOSXVSyncOnExit="Reimposta V-Sync OSX in uscita"
34
+HighResourceUsage="Codifica in sovraccarico! È consigliabile abbassare le impostazioni video o utilizzare una preimpostazione predefinita di codifica più veloce."
35
Transition="Transizione"
36
QuickTransitions="Transizioni rapide"
37
Left="Sinistra"
38
Right="Destra"
39
Top="Alto"
40
Bottom="Basso"
41
-Reset="Reset"
42
+Reset="Ripristina"
43
Hours="Ore"
44
Minutes="Minuti"
45
Seconds="Secondi"
46
Deprecated="Deprecato"
47
-
48
-QuickTransitions.SwapScenes="Scambia Scena Preview/Uscita dopo la Transizione"
49
-QuickTransitions.SwapScenesTT="Scambia la scena in uniscita con quella in preview dopo la transizione (ammesso che la scena in uscita originale ci sia ancora).\nQuesto non modificherà eventuali cambiamenti apportati alla scena di uscita originale."
50
-QuickTransitions.DuplicateScene="Duplica Scena"
51
-QuickTransitions.DuplicateSceneTT="Quando si modifica la stessa scena, permette di modificare la trasformazione/visibilità di source senza modificare l'output. \nPer modificare le proprietà delle source senza modificare l'output, abilità 'Source duplicate'.\nCambiare questo valore resetterà la scena output attuale (se esite ancora)."
52
+ReplayBuffer="Buffer di replay"
53
+Import="Importa"
54
+Export="Esporta"
55
+
56
+QuickTransitions.SwapScenes="Scambia scene di anteprima/uscita dopo la transizione"
57
+QuickTransitions.SwapScenesTT="Scambia le scene di uscita con quella in anteprima dopo la transizione (ammesso che la scena in uscita originale ci sia ancora).\nQuesto non modificherà eventuali cambiamenti apportati alla scena di uscita originale."
58
+QuickTransitions.DuplicateScene="Duplica scena"
59
+QuickTransitions.DuplicateSceneTT="Quando si modifica la stessa scena, permette di modificare la trasformazione/visibilità delle sorgenti senza modificare l'uscita.\nPer modificare le proprietà delle source senza modificare l'uscita, abilità 'Sorgenti duplicate'.\nCambiare questo valore ripristinerà la scena di uscita attuale (se esiste ancora)."
60
QuickTransitions.EditProperties="Duplica Risorsa"
61
QuickTransitions.EditPropertiesTT="Quando si modifica la stessa scena, consente la modifica di risorse senza modificarne l'output. \nQuesto può essere usato solo se 'Scene doppia' è attivo. \nCerte risorse (come media o catture) non lo supportano e devono essere modificate separatamente. \nCambiare questo valore resetterà l'attuale scena di output (se esiste ancora). \n\nAttenzione: Dato che la risorsa verrà duplicata, questo potrebbe richiedere risorse di sistema o video aggiuntive."
62
QuickTransitions.HotkeyName="Transizioni rapide: %1"
63
64
Basic.TransitionDuration="Durata"
65
Basic.TogglePreviewProgramMode="Modalità studio"
66
67
-TransitionNameDlg.Text="Per favore inserisci il nome della transizione"
68
+TransitionNameDlg.Text="Inserisci il nome della transizione"
69
TransitionNameDlg.Title="Nome transizione"
70
71
TitleBar.Profile="Profilo"
72
73
NoNameEntered.Title="Inserisci un nome valido"
74
NoNameEntered.Text="Non è possibile utilizzare nomi vuoti."
75
76
-ConfirmStart.Title="Inizia diretta?"
77
+ConfirmStart.Title="Vuoi iniziare la trasmissione?"
78
ConfirmStart.Text="Sei sicuro di voler iniziare una diretta?"
79
80
-ConfirmStop.Title="Interrompere diretta?"
81
-ConfirmStop.Text="Sei sicuro di voler interrompere questa diretta?"
82
+ConfirmStop.Title="Vuoi fermare la trasmissione?"
83
+ConfirmStop.Text="Sei sicuro di voler interrompere questa trasmissione?"
84
85
-ConfirmExit.Title="Uscire da OBS?"
86
+ConfirmExit.Title="Vuoi uscire da OBS?"
87
ConfirmExit.Text="OBS è attualmente attivo. Tutte le dirette/registrazioni saranno fermate. Sei sicuro di voler uscire?"
88
89
ConfirmRemove.Title="Conferma la rimozione"
90
91
Output.RecordNoSpace.Msg="Non c'è abbastanza spazio su disco per continuazre la registrazione."
92
Output.RecordError.Title="Errore di registrazione"
93
Output.RecordError.Msg="Si è verificato un errore non specificato durante la registrazione."
94
+Output.ReplayBuffer.NoHotkey.Title="Nessuna scorciatoia assegnata!"
95
+Output.ReplayBuffer.NoHotkey.Msg="Nessuna scorciatoia impostata per salvare il buffer di replay. Impostare la scorciatoia \"Salva\" per poter salvare le registrazioni in replay."
96
97
Output.BadPath.Title="Percorso di file invalido"
98
Output.BadPath.Text="Il percorso configurato per il file di output non è valido. Controlla le tue impostazioni per confermare che un percorso di file valido è stato impostato."
99
100
Remux.OBSRecording="Registrazione OBS"
101
Remux.FinishedTitle="Conversione finita"
102
Remux.Finished="Registrazione convertita"
103
-Remux.FinishedError="Registrazione convertita, ma il file potrebbe essere incompleta"
104
-Remux.SelectRecording="Selezionare registrazione OBS …"
105
+Remux.FinishedError="Registrazione convertita, ma il file potrebbe essere incompleto"
106
+Remux.SelectRecording="Selezionare registrazione OBS…"
107
Remux.SelectTarget="Selezionare il file di destinazione…"
108
Remux.FileExistsTitle="Il file di destinazione esiste"
109
Remux.FileExists="Il file di destinazione esiste, si desidera sostituirlo?"
110
111
Basic.Scene="Scena"
112
Basic.DisplayCapture="Mostra cattura"
113
114
-Basic.Main.PreviewConextMenu.Enable="Abilita Anteprima"
115
+Basic.Main.PreviewConextMenu.Enable="Abilita anteprima"
116
117
ScaleFiltering="Scala di filtraggio"
118
ScaleFiltering.Point="Punto"
119
120
Basic.Main.Sources="Origini"
121
Basic.Main.Connecting="Connessione..."
122
Basic.Main.StartRecording="Avvia registrazione"
123
+Basic.Main.StartReplayBuffer="Avvia Buffer di Replay"
124
Basic.Main.StartStreaming="Avvia trasmissione"
125
Basic.Main.StopRecording="Ferma registrazione"
126
Basic.Main.StoppingRecording="Fermando la registrazione..."
127
+Basic.Main.StopReplayBuffer="Termina Buffer di Replay"
128
+Basic.Main.StoppingReplayBuffer="Fermando il Buffer di Replay..."
129
Basic.Main.StopStreaming="Ferma trasmissione"
130
Basic.Main.StoppingStreaming="Arresto diretta..."
131
Basic.Main.ForceStopStreaming="Ferma Diretta (annulla ritardo)"
132
133
Basic.MainMenu.File.ShowSettingsFolder="Visualizza cartella impostazioni"
134
Basic.MainMenu.File.ShowProfileFolder="Mostra la cartella del profilo"
135
Basic.MainMenu.AlwaysOnTop="&Sempre in primo piano"
136
-Basic.MainMenu.File.Exit="Esci (&X)"
137
+Basic.MainMenu.File.Exit="E&sci"
138
139
Basic.MainMenu.Edit="&Modifica"
140
Basic.MainMenu.Edit.Undo="&Annulla"
141
Basic.MainMenu.Edit.Redo="&Ripristina"
142
Basic.MainMenu.Edit.UndoAction="&Ripristina $1"
143
Basic.MainMenu.Edit.RedoAction="&Ripristina $1"
144
-Basic.MainMenu.Edit.LockPreview="&Blocca Anteprima"
145
-Basic.MainMenu.Edit.Scale="Anteprima & ridimensionamento"
146
+Basic.MainMenu.Edit.LockPreview="&Blocca anteprima"
147
+Basic.MainMenu.Edit.Scale="Anteprima ridimen&sionamento"
148
Basic.MainMenu.Edit.Scale.Window="Scala alla finestra"
149
Basic.MainMenu.Edit.Scale.Canvas="Tela (%1x%2)"
150
Basic.MainMenu.Edit.Scale.Output="Uscita (%1x%2)"
151
Basic.MainMenu.Edit.Transform="&Trasforma"
152
Basic.MainMenu.Edit.Transform.EditTransform="&Modifica e trasforma..."
153
+Basic.MainMenu.Edit.Transform.CopyTransform="Copia Trasformazione"
154
+Basic.MainMenu.Edit.Transform.PasteTransform="Incolla Trasformazione"
155
Basic.MainMenu.Edit.Transform.ResetTransform="&Reset e trasforma"
156
Basic.MainMenu.Edit.Transform.Rotate90CW="Ruota di 90 gradi DW"
157
Basic.MainMenu.Edit.Transform.Rotate90CCW="Ruota di 90 gradi CCW"
158
159
Basic.MainMenu.Edit.Order.MoveDown="Sposta in &basso"
160
Basic.MainMenu.Edit.Order.MoveToTop="Sposta in &primo piano"
161
Basic.MainMenu.Edit.Order.MoveToBottom="Sposta in &fondo"
162
-Basic.MainMenu.Edit.AdvAudio="Proprietà Audio &Avanzate"
163
+Basic.MainMenu.Edit.AdvAudio="Proprietà audio &avanzate"
164
165
Basic.MainMenu.View="&Visualizza"
166
Basic.MainMenu.View.Toolbars="&Barre degli strumenti"
167
168
169
Basic.MainMenu.SceneCollection="&Collezione scene"
170
Basic.MainMenu.Profile="&Profilo"
171
+Basic.MainMenu.Profile.Import="Importa profilo"
172
+Basic.MainMenu.Profile.Export="Esporta profilo"
173
+Basic.MainMenu.SceneCollection.Import="Importa collezione scene"
174
+Basic.MainMenu.SceneCollection.Export="Esporta collezione scene"
175
+Basic.MainMenu.Profile.Exists="Il profilo esiste già"
176
+Basic.MainMenu.SceneCollection.Exists="La collezione di scene già esiste"
177
178
Basic.MainMenu.Tools="&Strumenti"
179
180
-Basic.MainMenu.Help="Aiuto (&H)"
181
+Basic.MainMenu.Help="&Aiuto"
182
Basic.MainMenu.Help.Website="Visita il sito"
183
Basic.MainMenu.Help.Logs="File di &log"
184
Basic.MainMenu.Help.Logs.ShowLogs="&Visualizza i file di Log"
185
186
Basic.Settings.Output.Mode.Simple="Semplice"
187
Basic.Settings.Output.Mode.Adv="Avanzate"
188
Basic.Settings.Output.Mode.FFmpeg="Uscita FFmpeg"
189
+Basic.Settings.Output.UseReplayBuffer="Abilita il Buffer di Replay"
190
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Tempo massimo di Replay (Secondi)"
191
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memoria Massima (Megabytes)"
192
+Basic.Settings.Output.ReplayBuffer.Estimate="Uso della memoria stimato: %1 MB"
193
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Impossibile stimare la memoria utilizzata. Impostare un limite massimo di memoria."
194
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Nota: Assicurati di aver impostato una hotkey per il Buffer di Replay nella sezione delle hotkeys)"
195
+Basic.Settings.Output.ReplayBuffer.Prefix="Prefisso del file per i Buffer di Replay"
196
+Basic.Settings.Output.ReplayBuffer.Suffix="Suffisso"
197
Basic.Settings.Output.Simple.SavePath="Percorso registrazione"
198
Basic.Settings.Output.Simple.RecordingQuality="Qualità della registrazione"
199
Basic.Settings.Output.Simple.RecordingQuality.Stream="Stesso della diretta"
200
201
obs-studio-0.17.0.tar.xz/UI/data/locale/pt-BR.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/pt-BR.ini
Changed
87
1
2
Hours="Horas"
3
Minutes="Minutos"
4
Seconds="Segundos"
5
+Deprecated="Obsoleto"
6
+ReplayBuffer="Buffer do Replay"
7
+Export="Exportar"
8
9
QuickTransitions.SwapScenes="Trocar Cenas de Prévia/Saída após a Transição"
10
QuickTransitions.SwapScenesTT="Troca a preview e a saída após transicionar (se a a cena original de saída ainda exisitr).\nIsto não irá desfazer nenhuma mudança que foi feita na cena original da saída."
11
12
Output.RecordNoSpace.Msg="Não há espaço em disco suficiente para continuar a gravação."
13
Output.RecordError.Title="Erro de gravação"
14
Output.RecordError.Msg="Ocorreu um erro não especificado durante a gravação."
15
+Output.ReplayBuffer.NoHotkey.Title="Tecla de Atalho não configurada!"
16
+Output.ReplayBuffer.NoHotkey.Msg="Tecla de Atalho para salvar o Buffer do replay não definida. Por favor, configure uma tecla de atalho para salvar gravações de replays."
17
18
Output.BadPath.Title="Caminho de Arquivo Inválido"
19
Output.BadPath.Text="O caminho do arquivo de saída é inválido. Por Favor, certifique-se de que um caminho válido foi informado."
20
21
ScaleFiltering.Point="Ponto"
22
ScaleFiltering.Bilinear="Bilinear"
23
ScaleFiltering.Bicubic="Bicúbico"
24
+ScaleFiltering.Lanczos="Lanczos"
25
26
Deinterlacing="Desentrelaçamento"
27
Deinterlacing.Discard="Descartar"
28
29
Basic.Main.Sources="Fontes"
30
Basic.Main.Connecting="Conectando..."
31
Basic.Main.StartRecording="Iniciar gravação"
32
+Basic.Main.StartReplayBuffer="Iniciar Buffer do Replay"
33
Basic.Main.StartStreaming="Iniciar Transmissão"
34
Basic.Main.StopRecording="Parar Gravação"
35
Basic.Main.StoppingRecording="Parando de Gravar..."
36
+Basic.Main.StopReplayBuffer="Parar Buffer do Replay"
37
+Basic.Main.StoppingReplayBuffer="Parando Buffer do Replay..."
38
Basic.Main.StopStreaming="Parar Transmissão"
39
Basic.Main.StoppingStreaming="Parando Transmissão..."
40
Basic.Main.ForceStopStreaming="Pare de transmitir (descartar atraso)"
41
42
Basic.MainMenu.Edit.Scale.Output="Saída (%1x%2)"
43
Basic.MainMenu.Edit.Transform="&Transformar"
44
Basic.MainMenu.Edit.Transform.EditTransform="&Editar Transformação..."
45
+Basic.MainMenu.Edit.Transform.CopyTransform="Copiar Transformação"
46
+Basic.MainMenu.Edit.Transform.PasteTransform="Colar Transformação"
47
Basic.MainMenu.Edit.Transform.ResetTransform="&Limpar Transformação"
48
Basic.MainMenu.Edit.Transform.Rotate90CW="Girar 90º sentido Horário"
49
Basic.MainMenu.Edit.Transform.Rotate90CCW="Girar 90º sentido Anti-Horário"
50
51
52
Basic.MainMenu.SceneCollection="&Coleção de cena"
53
Basic.MainMenu.Profile="&Perfil"
54
+Basic.MainMenu.Profile.Import="Importar Perfil"
55
+Basic.MainMenu.Profile.Export="Exportar Perfil"
56
+Basic.MainMenu.SceneCollection.Import="Importar Grupo de Cenas"
57
+Basic.MainMenu.SceneCollection.Export="Exportar Grupo de Cenas"
58
+Basic.MainMenu.Profile.Exists="Perfil já existe"
59
+Basic.MainMenu.SceneCollection.Exists="O Grupo de Cenas já existe"
60
61
Basic.MainMenu.Tools="Ferramentas (&T)"
62
63
64
Basic.Settings.Output.Mode.Simple="Simples"
65
Basic.Settings.Output.Mode.Adv="Avançado"
66
Basic.Settings.Output.Mode.FFmpeg="Saída de FFmpeg"
67
+Basic.Settings.Output.UseReplayBuffer="Habilitar Buffer de Repetição"
68
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Tempo de Replay máximo (Segundos)"
69
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Memória Máxima (Megabytes)"
70
+Basic.Settings.Output.ReplayBuffer.Estimate="Uso de memória estimado: %1 MB"
71
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Impossível estimar o uso de memória. Por favor, defina o limite máximo de memória."
72
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Nota: Não se esqueça de configurar uma Tecla de Atalho para o Buffer de Replay na seção Teclas de Atalhos)"
73
+Basic.Settings.Output.ReplayBuffer.Prefix="Prefixo do Buffer de Repetição"
74
+Basic.Settings.Output.ReplayBuffer.Suffix="Sufixo"
75
Basic.Settings.Output.Simple.SavePath="Caminho de gravação"
76
Basic.Settings.Output.Simple.RecordingQuality="Qualidade da gravação"
77
Basic.Settings.Output.Simple.RecordingQuality.Stream="Mesmo que a stream"
78
79
Basic.Settings.Output.Adv.Audio.Track2="Faixa 2"
80
Basic.Settings.Output.Adv.Audio.Track3="Faixa 3"
81
Basic.Settings.Output.Adv.Audio.Track4="Faixa 4"
82
+Basic.Settings.Output.Adv.Audio.Track5="Faixa 5"
83
+Basic.Settings.Output.Adv.Audio.Track6="Faixa 6"
84
85
Basic.Settings.Output.Adv.Recording="Gravação"
86
Basic.Settings.Output.Adv.Recording.Type="Tipo"
87
obs-studio-0.17.0.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/ru-RU.ini
Changed
83
1
2
Hours="Часов"
3
Minutes="Минут"
4
Seconds="Секунд"
5
+Deprecated="Устаревшее"
6
+ReplayBuffer="Буфер повтора"
7
+Import="Импорт"
8
+Export="Экспорт"
9
10
QuickTransitions.SwapScenes="Замена Просмотра/Вывода Сцены После Перехода"
11
QuickTransitions.SwapScenesTT="Замена просмотра и вывода сцены после перехода (если выходная оригинальная сцена до сих пор существует).\nЭто будет не отмена каких-либо изменений, что, возможно, было сделано в выходной оригинальной сцены."
12
13
Output.RecordError.Title="Ошибка записи"
14
Output.RecordError.Msg="Во время записи произошла неопознанная ошибка."
15
Output.ReplayBuffer.NoHotkey.Title="Нет набора горячих клавиш!"
16
+Output.ReplayBuffer.NoHotkey.Msg="Не установлено клавиши для сохранения повтора. Пожалуйста, установите горячую клавишу для сохранения записей повторов."
17
18
Output.BadPath.Title="Неправильный путь к файлу"
19
Output.BadPath.Text="Некорректный путь к файлу. Пожалуйста, проверьте настройки, чтобы убедиться в корректности установленного пути."
20
21
Basic.Main.Sources="Источники"
22
Basic.Main.Connecting="Соединение..."
23
Basic.Main.StartRecording="Начать запись"
24
+Basic.Main.StartReplayBuffer="Запустить повтор"
25
Basic.Main.StartStreaming="Запустить трансляцию"
26
Basic.Main.StopRecording="Остановить запись"
27
Basic.Main.StoppingRecording="Остановка Записи..."
28
+Basic.Main.StopReplayBuffer="Остановить повтор"
29
+Basic.Main.StoppingReplayBuffer="Остановка повтора..."
30
Basic.Main.StopStreaming="Остановить трансляцию"
31
Basic.Main.StoppingStreaming="Остановка вещания..."
32
Basic.Main.ForceStopStreaming="Остановить передачу (отменить задержку)"
33
34
Basic.MainMenu.Edit.LockPreview="&Заблокировать предпросмотр"
35
Basic.MainMenu.Edit.Scale="Просмотр и масштабирование"
36
Basic.MainMenu.Edit.Scale.Window="Масштаб окна"
37
+Basic.MainMenu.Edit.Scale.Canvas="Холст (%1x%2)"
38
+Basic.MainMenu.Edit.Scale.Output="Вывод (%1x%2)"
39
Basic.MainMenu.Edit.Transform="&Преобразовать"
40
Basic.MainMenu.Edit.Transform.EditTransform="&Изменить преобразование..."
41
+Basic.MainMenu.Edit.Transform.CopyTransform="Копировать преобразование"
42
+Basic.MainMenu.Edit.Transform.PasteTransform="Вставить преобразование"
43
Basic.MainMenu.Edit.Transform.ResetTransform="&Сбросить преобразование"
44
Basic.MainMenu.Edit.Transform.Rotate90CW="Повернуть на 90 градусов по часовой"
45
Basic.MainMenu.Edit.Transform.Rotate90CCW="Повернуть на 90 градусов против часовой"
46
47
48
Basic.MainMenu.SceneCollection="Коллекция сцен"
49
Basic.MainMenu.Profile="Профиль"
50
+Basic.MainMenu.Profile.Import="Импортировать профиль"
51
+Basic.MainMenu.Profile.Export="Экспортировать профиль"
52
+Basic.MainMenu.SceneCollection.Import="Импортировать коллекцию сцен"
53
+Basic.MainMenu.SceneCollection.Export="Экспортировать коллекцию сцен"
54
+Basic.MainMenu.Profile.Exists="Профиль уже существует"
55
+Basic.MainMenu.SceneCollection.Exists="Коллекция сцен уже существует"
56
57
Basic.MainMenu.Tools="&Инструменты"
58
59
60
Basic.Settings.Output.Mode.Simple="Простой"
61
Basic.Settings.Output.Mode.Adv="Расширенные"
62
Basic.Settings.Output.Mode.FFmpeg="Вывод FFmpeg"
63
+Basic.Settings.Output.UseReplayBuffer="Включить Буфер повтора"
64
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Максимальное время повтора (секунд)"
65
+Basic.Settings.Output.ReplayBuffer.MegabytesMax="Максимальный объем памяти (МБ)"
66
Basic.Settings.Output.ReplayBuffer.Estimate="Предполагаемое использование памяти: %1 МБ"
67
Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Невозможно оценить использование памяти. Пожалуйста, установите максимальный объем памяти."
68
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Примечание: Убедитесь, что установили горячую клавишу для воспроизведения буфера в разделе горячие клавиши)"
69
+Basic.Settings.Output.ReplayBuffer.Prefix="Префикс имени файла повтора"
70
+Basic.Settings.Output.ReplayBuffer.Suffix="Суффикс"
71
Basic.Settings.Output.Simple.SavePath="Путь к записи"
72
Basic.Settings.Output.Simple.RecordingQuality="Качество записи"
73
Basic.Settings.Output.Simple.RecordingQuality.Stream="То же, что у трансляции"
74
75
Basic.Settings.Output.Adv.Audio.Track2="Дорожка 2"
76
Basic.Settings.Output.Adv.Audio.Track3="Дорожка 3"
77
Basic.Settings.Output.Adv.Audio.Track4="Дорожка 4"
78
+Basic.Settings.Output.Adv.Audio.Track5="Дорожка 5"
79
+Basic.Settings.Output.Adv.Audio.Track6="Дорожка 6"
80
81
Basic.Settings.Output.Adv.Recording="Запись"
82
Basic.Settings.Output.Adv.Recording.Type="Тип"
83
obs-studio-0.17.0.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/sv-SE.ini
Changed
78
1
2
Minutes="minuter"
3
Seconds="sekunder"
4
Deprecated="Föråldrat"
5
+ReplayBuffer="Reprisbuffert"
6
+Import="Importera"
7
+Export="Exportera"
8
9
QuickTransitions.SwapScenes="Byt plats på Förhandsvisnings-/utdatascenerna efter skifte"
10
QuickTransitions.SwapScenesTT="Byter plats på förhandsvisnings- och utdatascenerna efter övergång (om utdatans originalscen fortfarande finns). \nDet här kommer inte att ångra några förändringar i utdatans originalscen."
11
12
Output.RecordError.Title="Inspelningsfel"
13
Output.RecordError.Msg="Ett okänt fel uppstod vid inspelning."
14
Output.ReplayBuffer.NoHotkey.Title="Ingen angivet kortkommando!"
15
+Output.ReplayBuffer.NoHotkey.Msg="Inget kortkommando för att spara reprisbufferten har angivits. Ange kortkommandot \"Spara\" för att kunna spara reprisinspelningar."
16
17
Output.BadPath.Title="Ogiltig sökväg"
18
Output.BadPath.Text="Den angivna sökvägen för utmatningsfil är ogiltig. Kontrollera att dina inställningar är korrekta och att en giltig sökväg har angetts."
19
20
Basic.Main.Sources="Källor"
21
Basic.Main.Connecting="Ansluter..."
22
Basic.Main.StartRecording="Starta inspelning"
23
+Basic.Main.StartReplayBuffer="Starta reprisbuffert"
24
Basic.Main.StartStreaming="Börja strömma"
25
Basic.Main.StopRecording="Stoppa inspelning"
26
Basic.Main.StoppingRecording="Stoppar inspelning..."
27
+Basic.Main.StopReplayBuffer="Stoppa reprisbuffert"
28
+Basic.Main.StoppingReplayBuffer="Stoppar reprisbuffert..."
29
Basic.Main.StopStreaming="Sluta strömma"
30
Basic.Main.StoppingStreaming="Stoppar ström..."
31
Basic.Main.ForceStopStreaming="Sluta strömma (ignorera fördröjning)"
32
33
Basic.MainMenu.Edit.Scale.Output="Utmatning (%1x%2)"
34
Basic.MainMenu.Edit.Transform="&Omvandla"
35
Basic.MainMenu.Edit.Transform.EditTransform="&Redigera omvandling..."
36
+Basic.MainMenu.Edit.Transform.CopyTransform="Kopiera transformering"
37
+Basic.MainMenu.Edit.Transform.PasteTransform="Klistra in transformering"
38
Basic.MainMenu.Edit.Transform.ResetTransform="&Återställ omvandling"
39
Basic.MainMenu.Edit.Transform.Rotate90CW="Rotera 90 grader medsols &>"
40
Basic.MainMenu.Edit.Transform.Rotate90CCW="Rotera 90 grader motsols &<"
41
42
43
Basic.MainMenu.SceneCollection="&Scensamling"
44
Basic.MainMenu.Profile="&Profil"
45
+Basic.MainMenu.Profile.Import="Importera profil"
46
+Basic.MainMenu.Profile.Export="Exportera profil"
47
+Basic.MainMenu.SceneCollection.Import="Importera scensamling"
48
+Basic.MainMenu.SceneCollection.Export="Exportera scensamling"
49
+Basic.MainMenu.Profile.Exists="Profilen finns redan"
50
+Basic.MainMenu.SceneCollection.Exists="Scensamlingen finns redan"
51
52
Basic.MainMenu.Tools="&Verktyg"
53
54
55
Basic.Settings.Output.Mode.Simple="Simpel"
56
Basic.Settings.Output.Mode.Adv="Avancerat"
57
Basic.Settings.Output.Mode.FFmpeg="FFmpeg-utmatning"
58
+Basic.Settings.Output.UseReplayBuffer="Aktivera reprisbuffert"
59
+Basic.Settings.Output.ReplayBuffer.SecondsMax="Maximal repristid (sekunder)"
60
Basic.Settings.Output.ReplayBuffer.MegabytesMax="Maximalt minne (Megabyte)"
61
Basic.Settings.Output.ReplayBuffer.Estimate="Uppskattad minnesanvändning: %1 MB"
62
+Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Kan inte uppskatta minnesanvändningen. Ange maximal minnesgräns."
63
+Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(OBS: Se till att ange ett kortkommando för reprisbufferten i avsnittet för kortkommandon)"
64
+Basic.Settings.Output.ReplayBuffer.Prefix="Filnamnsprefix för reprisbuffert"
65
+Basic.Settings.Output.ReplayBuffer.Suffix="Suffix"
66
Basic.Settings.Output.Simple.SavePath="Inspelningssökväg"
67
Basic.Settings.Output.Simple.RecordingQuality="Inspelningskvalitet"
68
Basic.Settings.Output.Simple.RecordingQuality.Stream="Samma som ström"
69
70
Basic.Settings.Output.Adv.Audio.Track2="Spår 2"
71
Basic.Settings.Output.Adv.Audio.Track3="Spår 3"
72
Basic.Settings.Output.Adv.Audio.Track4="Spår 4"
73
+Basic.Settings.Output.Adv.Audio.Track5="Spår 5"
74
+Basic.Settings.Output.Adv.Audio.Track6="Spår 6"
75
76
Basic.Settings.Output.Adv.Recording="Inspelning"
77
Basic.Settings.Output.Adv.Recording.Type="Typ"
78
obs-studio-0.17.0.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/tr-TR.ini
Changed
36
1
2
Duplicate="Çoğalt"
3
Enable="Etkinleştir"
4
DisableOSXVSync="OSX V-Sync Devre Dışı Bırakma"
5
+ResetOSXVSyncOnExit="OSX V-Sync'i Çıkışta Sıfırla"
6
HighResourceUsage="Kodlama aşırı yüklendi! Video ayarlarını kapatmayı veya daha hızlı bir kodlama ön ayarını kullanmayı düşünün."
7
Transition="Geçiş"
8
QuickTransitions="Hızlı Geçiş"
9
10
Basic.Main.AddSceneDlg.Title="Sahne Ekle"
11
Basic.Main.AddSceneDlg.Text="Lütfen sahne adını giriniz"
12
13
-Basic.Main.DefaultSceneName.Text="%1 Sahnesi"
14
+Basic.Main.DefaultSceneName.Text="Sahne %1"
15
16
Basic.Main.AddSceneCollection.Title="Sahne Koleksiyonu Ekle"
17
Basic.Main.AddSceneCollection.Text="Sahne koleksiyonunun isimini giriniz"
18
19
Basic.Settings.Video.CurrentlyActive="Video çıkışı şu anda etkin durumda. Video ayarlarını değiştirmek için lütfen bütün çıkışları kapalı duruma getirin."
20
Basic.Settings.Video.DisableAero="Aero'yu Devre Dışı Bırak"
21
22
+Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (En hızlı, ancak boyutlandırmada bulanık görüntü)"
23
+Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Keskinleştirilmiş boyutlandırma, 16 örnek)"
24
+Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Keskinleştirilmiş boyutlandırma, 32 örnek)"
25
26
Basic.Settings.Audio="Ses"
27
Basic.Settings.Audio.SampleRate="Örnekleme Sıklığı"
28
29
30
Mute="Sesi Kapat"
31
Unmute="Sesi Aç"
32
+Push-to-mute="Bas-Sessize Al"
33
Push-to-talk="Bas konuş"
34
35
SceneItemShow="'%1' Göster"
36
obs-studio-0.17.0.tar.xz/UI/data/locale/uk-UA.ini -> obs-studio-17.0.1.tar.xz/UI/data/locale/uk-UA.ini
Changed
32
1
2
Basic.MainMenu.Edit.Scale.Output="Як Вивід (%1x%2)"
3
Basic.MainMenu.Edit.Transform="&Розміри"
4
Basic.MainMenu.Edit.Transform.EditTransform="Редагуват&и Розміри..."
5
+Basic.MainMenu.Edit.Transform.CopyTransform="Копіювати Розміри"
6
+Basic.MainMenu.Edit.Transform.PasteTransform="Вставити Розміри"
7
Basic.MainMenu.Edit.Transform.ResetTransform="Розміри за &замовчуванням"
8
Basic.MainMenu.Edit.Transform.Rotate90CW="Повернути на 90 За годинниковою стрілкою"
9
Basic.MainMenu.Edit.Transform.Rotate90CCW="Повернути на 90 Проти годинникової стрілки"
10
11
12
Basic.MainMenu.SceneCollection="&Набір Сцен"
13
Basic.MainMenu.Profile="&Профіль"
14
+Basic.MainMenu.Profile.Import="Імпорт Профілю"
15
+Basic.MainMenu.Profile.Export="Експорт Профілю"
16
+Basic.MainMenu.SceneCollection.Import="Імпорт Набору Сцен"
17
+Basic.MainMenu.SceneCollection.Export="Експорт Набору Сцен"
18
+Basic.MainMenu.Profile.Exists="Профіль вже існує"
19
+Basic.MainMenu.SceneCollection.Exists="Набір Сцен вже існує"
20
21
Basic.MainMenu.Tools="Додаткові &засоби"
22
23
24
Basic.Settings.Output.Adv.Audio.Track2="Доріжка 2"
25
Basic.Settings.Output.Adv.Audio.Track3="Доріжка 3"
26
Basic.Settings.Output.Adv.Audio.Track4="Доріжка 4"
27
+Basic.Settings.Output.Adv.Audio.Track5="Доріжка 5"
28
+Basic.Settings.Output.Adv.Audio.Track6="Доріжка 6"
29
30
Basic.Settings.Output.Adv.Recording="Запис"
31
Basic.Settings.Output.Adv.Recording.Type="Тип"
32
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ca-ES.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ca-ES.ini
Changed
17
1
2
Start="Inicia"
3
Stop="Atura"
4
5
+Captions="Subtítols (Experimental)"
6
+Captions.AudioSource="Font d'àudio"
7
+Captions.CurrentSystemLanguage="Idioma actual del sistema (%1)"
8
9
OutputTimer="Temporitzador de sortida"
10
OutputTimer.Stream="Atura la transmissió després de:"
11
OutputTimer.Record="Atura la gravació després de:"
12
OutputTimer.Stream.StoppingIn="La transmissió s'aturarà en:"
13
OutputTimer.Record.StoppingIn="La gravació s'aturarà en:"
14
+OutputTimer.Stream.EnableEverytime="Activa el temporitzador en cada transmissió"
15
+OutputTimer.Record.EnableEverytime="Activa el temporitzador en cada enregistrament"
16
17
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/cs-CZ.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/cs-CZ.ini
Changed
11
1
2
Start="Spustit"
3
Stop="Zastavit"
4
5
+Captions="Titulky (experiment.)"
6
+Captions.AudioSource="Zdroj zvuku"
7
+Captions.CurrentSystemLanguage="Aktuální systémový jazyk (%1)"
8
9
OutputTimer="Časovač"
10
OutputTimer.Stream="Přestat vysílat po:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini
Changed
11
1
2
Stop="Stop"
3
4
Captions="Untertitel (experimentell)"
5
-Captions.AudioSource="Audioquelle:"
6
+Captions.AudioSource="Audioquelle"
7
+Captions.CurrentSystemLanguage="Aktuelle Systemsprache (%1)"
8
9
OutputTimer="Ausgabetimer"
10
OutputTimer.Stream="Stoppe Stream nach:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini
Changed
11
1
2
Start="Iniciar"
3
Stop="Detener"
4
5
+Captions="Subtítulos (Experimental)"
6
+Captions.AudioSource="Fuente de audio"
7
+Captions.CurrentSystemLanguage="Idioma actual del sistema (%1)"
8
9
OutputTimer="Temporizador de salida"
10
OutputTimer.Stream="Detener la transmisión después de:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini
Changed
11
1
2
Start="Hasi"
3
Stop="Gelditu"
4
5
+Captions="Epigrafeak (esperimentala)"
6
+Captions.AudioSource="Audio-iturburua"
7
+Captions.CurrentSystemLanguage="Sistemaren hizkuntza (%1)"
8
9
OutputTimer="Irteera tenporizadorea"
10
OutputTimer.Stream="Gelditu transmisioa hau pasata:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fi-FI.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fi-FI.ini
Changed
11
1
2
Start="Käynnistä"
3
Stop="Pysäytä"
4
5
+Captions="Kuvatekstit (Experimental)"
6
+Captions.AudioSource="Äänilähde"
7
+Captions.CurrentSystemLanguage="Järjestelmän kieli (%1)"
8
9
OutputTimer="Ulostulo-ajastin"
10
OutputTimer.Stream="Pysäyttää lähetyksen:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fr-FR.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fr-FR.ini
Changed
11
1
2
Start="Démarrer"
3
Stop="Arrêter"
4
5
+Captions="Sous-titres (expérimental)"
6
+Captions.AudioSource="Source audio"
7
+Captions.CurrentSystemLanguage="Langue du système (%1)"
8
9
OutputTimer="Minuterie des sorties"
10
OutputTimer.Stream="Arrêter le streaming dans :"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hu-HU.ini
Changed
11
1
2
Start="Start"
3
Stop="Stop"
4
5
+Captions="Feliratok (Kísérleti)"
6
+Captions.AudioSource="Audio forrás"
7
+Captions.CurrentSystemLanguage="Rendszer aktuális nyelve (%1)"
8
9
OutputTimer="Kimeneti időzítő"
10
OutputTimer.Stream="Stream leállítása:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/it-IT.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/it-IT.ini
Changed
17
1
2
Start="Inizio"
3
Stop="Stop"
4
5
+Captions="Sottotitoli (Sperimentale)"
6
+Captions.AudioSource="Fonte audio"
7
+Captions.CurrentSystemLanguage="Lingua del sistema in uso (%1)"
8
9
OutputTimer="Timer Output"
10
OutputTimer.Stream="Termina diretta dopo:"
11
OutputTimer.Record="Termina registrazione dopo:"
12
OutputTimer.Stream.StoppingIn="La diretta terminerà in:"
13
OutputTimer.Record.StoppingIn="La registrazione terminerà in:"
14
+OutputTimer.Stream.EnableEverytime="Abilita il timer per lo streaming ogni volta"
15
+OutputTimer.Record.EnableEverytime="Abilita il timer per la registrazione ogni volta"
16
17
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ja-JP.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ja-JP.ini
Changed
11
1
2
Start="開始"
3
Stop="停止"
4
5
+Captions="見出し (実験的)"
6
+Captions.AudioSource="音声ソース"
7
+Captions.CurrentSystemLanguage="現在のシステム言語 (%1)"
8
9
OutputTimer="出力タイマー"
10
OutputTimer.Stream="配信停止の時間設定:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ko-KR.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ko-KR.ini
Changed
11
1
2
Start="시작"
3
Stop="중단"
4
5
+Captions="자막 (실험적 기능)"
6
+Captions.AudioSource="오디오 소스"
7
+Captions.CurrentSystemLanguage="현재 시스템 언어 (%1)"
8
9
OutputTimer="출력 시간 설정"
10
OutputTimer.Stream="이 시간 이후 방송 중단:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nl-NL.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nl-NL.ini
Changed
11
1
2
Start="Start"
3
Stop="Stop"
4
5
+Captions="Ondertiteling (Experimenteel)"
6
+Captions.AudioSource="Audiobron"
7
+Captions.CurrentSystemLanguage="Huidige Systeemtaal (%1)"
8
9
OutputTimer="Uitvoertimer"
10
OutputTimer.Stream="Stop met streamen na:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini
Changed
11
1
2
Start="Start"
3
Stop="Stop"
4
5
+Captions="Podpisy (eksperymentalne)"
6
+Captions.AudioSource="Źródła dźwięku"
7
+Captions.CurrentSystemLanguage="Obecny język systemu (%1)"
8
9
OutputTimer="Wyłącznik czasowy"
10
OutputTimer.Stream="Zatrzymaj stream po:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini
Changed
11
1
2
Start="Запустить"
3
Stop="Остановить"
4
5
+Captions="Субтитры (экспериментально)"
6
+Captions.AudioSource="Источник звука"
7
+Captions.CurrentSystemLanguage="Текущий язык системы (%1)"
8
9
OutputTimer="Таймер записи и стрима"
10
OutputTimer.Stream="Завершить стрим через:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini
Changed
11
1
2
Start="Starta"
3
Stop="Stoppa"
4
5
+Captions="Undertexter (experimentell)"
6
+Captions.AudioSource="Ljudkälla"
7
+Captions.CurrentSystemLanguage="Aktuellt systemspråk (%1)"
8
9
OutputTimer="Utdatatimer"
10
OutputTimer.Stream="Sluta streama efter:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/tr-TR.ini
Changed
27
1
2
SceneSwitcher="Otomatik Sahne Değiştirici"
3
+SceneSwitcher.OnNoMatch="Hiçbir pencere ile eşleşmez ise:"
4
SceneSwitcher.OnNoMatch.DontSwitch="Geçiş yapma"
5
SceneSwitcher.OnNoMatch.SwitchTo="Şuna geç:"
6
SceneSwitcher.CheckInterval="Etkin pencere başlığını kontrol et:"
7
SceneSwitcher.ActiveOrNotActive="Sahne Değiştirici:"
8
+InvalidRegex.Title="Geçersiz Kurallı İfade"
9
+InvalidRegex.Text="Girdiğiniz kurallı ifade geçersiz."
10
Active="Etkin"
11
Inactive="Devre Dışı"
12
Start="Başlat"
13
Stop="Durdur"
14
15
+Captions="Altyazı (Deneysel)"
16
+Captions.AudioSource="Ses kaynağı"
17
+Captions.CurrentSystemLanguage="Geçerli Sistem Dili (%1)"
18
19
OutputTimer="Çıkış Zamanlayıcısı"
20
OutputTimer.Stream="Şuradan sonra yayını durdur:"
21
OutputTimer.Record="Şuradan sonra kaydı durdur:"
22
+OutputTimer.Stream.StoppingIn="Yayın durduruluyor:"
23
+OutputTimer.Record.StoppingIn="Kayıt durduruluyor:"
24
OutputTimer.Stream.EnableEverytime="Her zaman yayın zamanlayıcıyı etkinleştir"
25
OutputTimer.Record.EnableEverytime="Her zaman kayıt zamanlayıcıyı etkinleştir"
26
27
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/uk-UA.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/uk-UA.ini
Changed
11
1
2
Start="Запустити"
3
Stop="Зупинити"
4
5
+Captions="Субтитри (експериментально)"
6
+Captions.AudioSource="Джерело Аудіо"
7
+Captions.CurrentSystemLanguage="Поточна мова Системи (%1)"
8
9
OutputTimer="Таймер для Виводу"
10
OutputTimer.Stream="Закінчити трансляцію за:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini
Changed
11
1
2
Start="开始"
3
Stop="停止"
4
5
+Captions="标题(实验)"
6
+Captions.AudioSource="音频源"
7
+Captions.CurrentSystemLanguage="当前系统语言 (%1)"
8
9
OutputTimer="输出计时器"
10
OutputTimer.Stream="停止流处理后:"
11
obs-studio-0.17.0.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-TW.ini -> obs-studio-17.0.1.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-TW.ini
Changed
11
1
2
Start="開始"
3
Stop="停止"
4
5
+Captions="標題 (實驗)"
6
+Captions.AudioSource="音訊源"
7
+Captions.CurrentSystemLanguage="目前系統語言 (%1)"
8
9
OutputTimer="輸出計時器"
10
OutputTimer.Stream="在下面時間後停止串流:"
11
obs-studio-0.17.0.tar.xz/UI/window-basic-main-profiles.cpp -> obs-studio-17.0.1.tar.xz/UI/window-basic-main-profiles.cpp
Changed
23
1
2
profileDir + "/basic.ini");
3
QFile::copy(dir + "/service.json",
4
profileDir + "/service.json");
5
+ QFile::copy(dir + "/streamEncoder.json",
6
+ profileDir + "/streamEncoder.json");
7
+ QFile::copy(dir + "/recordEncoder.json",
8
+ profileDir + "/recordEncoder.json");
9
RefreshProfiles();
10
} else {
11
QMessageBox::information(this,
12
13
outputDir + "/basic.ini");
14
QFile::copy(inputPath + currentProfile + "/service.json",
15
outputDir + "/service.json");
16
+ QFile::copy(inputPath + currentProfile + "/streamEncoder.json",
17
+ outputDir + "/streamEncoder.json");
18
+ QFile::copy(inputPath + currentProfile + "/recordEncoder.json",
19
+ outputDir + "/recordEncoder.json");
20
}
21
}
22
}
23
obs-studio-0.17.0.tar.xz/cmake/Modules/CopyMSVCBins.cmake -> obs-studio-17.0.1.tar.xz/cmake/Modules/CopyMSVCBins.cmake
Changed
14
1
2
set(_bin_suffix 32)
3
endif()
4
5
-find_package(Libavcodec QUIET)
6
-find_package(Libx264 QUIET)
7
-find_package(Libfdk QUIET)
8
-find_package(ssl QUIET)
9
-find_package(Qt5Core QUIET)
10
-
11
file(GLOB FFMPEG_BIN_FILES
12
"${FFMPEG_avcodec_INCLUDE_DIR}/../bin/avcodec-*.dll"
13
"${FFMPEG_avcodec_INCLUDE_DIR}/../bin${_bin_suffix}/avcodec-*.dll"
14
obs-studio-0.17.0.tar.xz/deps/libff/libff/ff-demuxer.c -> obs-studio-17.0.1.tar.xz/deps/libff/libff/ff-demuxer.c
Changed
16
1
2
}
3
4
if (codec == NULL) {
5
- codec = avcodec_find_decoder(codec_context->codec_id);
6
+ if (codec_context->codec_id == AV_CODEC_ID_VP8)
7
+ codec = avcodec_find_decoder_by_name("libvpx");
8
+ else if (codec_context->codec_id == AV_CODEC_ID_VP9)
9
+ codec = avcodec_find_decoder_by_name("libvpx-vp9");
10
+
11
+ if (!codec)
12
+ codec = avcodec_find_decoder(codec_context->codec_id);
13
if (codec == NULL) {
14
av_log(NULL, AV_LOG_WARNING, "no decoder found for"
15
" codec with id %d",
16
obs-studio-0.17.0.tar.xz/libobs/obs-config.h -> obs-studio-17.0.1.tar.xz/libobs/obs-config.h
Changed
10
1
2
*
3
* Reset to zero each major or minor version
4
*/
5
-#define LIBOBS_API_PATCH_VER 0
6
+#define LIBOBS_API_PATCH_VER 1
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
((major << 24) | \
10
obs-studio-0.17.0.tar.xz/libobs/obs-scene.c -> obs-studio-17.0.1.tar.xz/libobs/obs-scene.c
Changed
59
1
2
3
static void scene_enum_sources(void *data,
4
obs_source_enum_proc_t enum_callback,
5
- void *param)
6
+ void *param, bool active)
7
{
8
struct obs_scene *scene = data;
9
struct obs_scene_item *item;
10
11
next = item->next;
12
13
obs_sceneitem_addref(item);
14
- if (os_atomic_load_long(&item->active_refs) > 0)
15
+ if (!active || os_atomic_load_long(&item->active_refs) > 0)
16
enum_callback(scene->source, item->source, param);
17
obs_sceneitem_release(item);
18
19
20
full_unlock(scene);
21
}
22
23
+static void scene_enum_active_sources(void *data,
24
+ obs_source_enum_proc_t enum_callback,
25
+ void *param)
26
+{
27
+ scene_enum_sources(data, enum_callback, param, true);
28
+}
29
+
30
+static void scene_enum_all_sources(void *data,
31
+ obs_source_enum_proc_t enum_callback,
32
+ void *param)
33
+{
34
+ scene_enum_sources(data, enum_callback, param, false);
35
+}
36
+
37
static inline void detach_sceneitem(struct obs_scene_item *item)
38
{
39
if (item->prev)
40
41
.get_height = scene_getheight,
42
.load = scene_load,
43
.save = scene_save,
44
- .enum_active_sources = scene_enum_sources
45
+ .enum_active_sources = scene_enum_active_sources,
46
+ .enum_all_sources = scene_enum_all_sources
47
};
48
49
obs_scene_t *obs_scene_create(const char *name)
50
51
new_item->align = item->align;
52
new_item->last_width = item->last_width;
53
new_item->last_height = item->last_height;
54
+ new_item->output_scale = item->output_scale;
55
+ new_item->scale_filter = item->scale_filter;
56
new_item->box_transform = item->box_transform;
57
new_item->draw_transform = item->draw_transform;
58
new_item->bounds_type = item->bounds_type;
59
obs-studio-0.17.0.tar.xz/libobs/obs-source.c -> obs-studio-17.0.1.tar.xz/libobs/obs-source.c
Changed
105
1
2
void *param;
3
};
4
5
-static void enum_source_tree_callback(obs_source_t *parent, obs_source_t *child,
6
- void *param)
7
+static void enum_source_active_tree_callback(obs_source_t *parent,
8
+ obs_source_t *child, void *param)
9
{
10
struct source_enum_data *data = param;
11
bool is_transition = child->info.type == OBS_SOURCE_TYPE_TRANSITION;
12
13
if (is_transition)
14
obs_transition_enum_sources(child,
15
- enum_source_tree_callback, param);
16
+ enum_source_active_tree_callback, param);
17
if (child->info.enum_active_sources) {
18
if (child->context.data) {
19
child->info.enum_active_sources(child->context.data,
20
- enum_source_tree_callback, data);
21
+ enum_source_active_tree_callback, data);
22
}
23
}
24
25
26
obs_source_addref(source);
27
28
if (source->info.type == OBS_SOURCE_TYPE_TRANSITION)
29
- obs_transition_enum_sources(source, enum_source_tree_callback,
30
- &data);
31
+ obs_transition_enum_sources(source,
32
+ enum_source_active_tree_callback, &data);
33
if (source->info.enum_active_sources)
34
source->info.enum_active_sources(source->context.data,
35
- enum_source_tree_callback, &data);
36
+ enum_source_active_tree_callback, &data);
37
+
38
+ obs_source_release(source);
39
+}
40
+
41
+static void enum_source_full_tree_callback(obs_source_t *parent,
42
+ obs_source_t *child, void *param)
43
+{
44
+ struct source_enum_data *data = param;
45
+ bool is_transition = child->info.type == OBS_SOURCE_TYPE_TRANSITION;
46
+
47
+ if (is_transition)
48
+ obs_transition_enum_sources(child,
49
+ enum_source_full_tree_callback, param);
50
+ if (child->info.enum_all_sources) {
51
+ if (child->context.data) {
52
+ child->info.enum_active_sources(child->context.data,
53
+ enum_source_full_tree_callback, data);
54
+ }
55
+ } else if (child->info.enum_active_sources) {
56
+ if (child->context.data) {
57
+ child->info.enum_active_sources(child->context.data,
58
+ enum_source_full_tree_callback, data);
59
+ }
60
+ }
61
+
62
+ data->enum_callback(parent, child, data->param);
63
+}
64
+
65
+static void obs_source_enum_full_tree(obs_source_t *source,
66
+ obs_source_enum_proc_t enum_callback,
67
+ void *param)
68
+{
69
+ struct source_enum_data data = {enum_callback, param};
70
+ bool is_transition;
71
+
72
+ if (!data_valid(source, "obs_source_enum_active_tree"))
73
+ return;
74
+
75
+ is_transition = source->info.type == OBS_SOURCE_TYPE_TRANSITION;
76
+ if (!is_transition && !source->info.enum_active_sources)
77
+ return;
78
+
79
+ obs_source_addref(source);
80
+
81
+ if (source->info.type == OBS_SOURCE_TYPE_TRANSITION)
82
+ obs_transition_enum_sources(source,
83
+ enum_source_full_tree_callback, &data);
84
+
85
+ if (source->info.enum_all_sources) {
86
+ source->info.enum_all_sources(source->context.data,
87
+ enum_source_full_tree_callback, &data);
88
+
89
+ } else if (source->info.enum_active_sources) {
90
+ source->info.enum_active_sources(source->context.data,
91
+ enum_source_full_tree_callback, &data);
92
+ }
93
94
obs_source_release(source);
95
}
96
97
return false;
98
}
99
100
- obs_source_enum_active_tree(child, check_descendant, &info);
101
+ obs_source_enum_full_tree(child, check_descendant, &info);
102
if (info.exists)
103
return false;
104
105
obs-studio-0.17.0.tar.xz/libobs/obs-source.h -> obs-studio-17.0.1.tar.xz/libobs/obs-source.h
Changed
23
1
2
bool (*audio_render)(void *data, uint64_t *ts_out,
3
struct obs_source_audio_mix *audio_output,
4
uint32_t mixers, size_t channels, size_t sample_rate);
5
+
6
+ /**
7
+ * Called to enumerate all active and inactive sources being used
8
+ * within this source. If this callback isn't implemented,
9
+ * enum_active_sources will be called instead.
10
+ *
11
+ * This is typically used if a source can have inactive child sources.
12
+ *
13
+ * @param data Filter data
14
+ * @param enum_callback Enumeration callback
15
+ * @param param User data to pass to callback
16
+ */
17
+ void (*enum_all_sources)(void *data,
18
+ obs_source_enum_proc_t enum_callback,
19
+ void *param);
20
};
21
22
EXPORT void obs_register_source_s(const struct obs_source_info *info,
23
obs-studio-0.17.0.tar.xz/plugins/coreaudio-encoder/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/coreaudio-encoder/data/locale/hu-HU.ini
Changed
10
1
2
CoreAudioAAC="CoreAudio AAC kódoló"
3
-Bitrate="Bitráta"
4
+Bitrate="Bitsebesség"
5
AllowHEAAC="HE-AAC engedélyezése"
6
OutputSamplerate="Kimeneti mintavételráta"
7
-UseInputSampleRate="Beviteli (OBS) mintaráta használata (kilistázza a nem támogatott bitrátákat)"
8
+UseInputSampleRate="Beviteli (OBS) mintaráta használata (kilistázza a nem támogatott bitsebességeket)"
9
10
obs-studio-0.17.0.tar.xz/plugins/coreaudio-encoder/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/coreaudio-encoder/data/locale/tr-TR.ini
Changed
7
1
2
Bitrate="Bit hızı"
3
AllowHEAAC="HE-ACC'ye izin ver"
4
OutputSamplerate="Çıkış örnek hızı"
5
+UseInputSampleRate="Giriş (OBS) Örnekleme Hızını Kullan (desteklenmeyen bit hızları listelenebilir)"
6
7
obs-studio-0.17.0.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md
Changed
29
1
2
-# 1.4.3.4 - Crimson ReLive Compatibility Update (Hotfix 1)
3
-Crimson ReLive changed how the Full Range flag is applied, which caused the plugin to break since it expected another property there. This has been fixed and some log messages have been changed to also result in better readability for users and support.
4
+# 1.4.3.8 - Settings Transfer, Automatic VBV Buffer adjustment and Fixes (Hotfix 2)
5
+Another day, another new feature: this time it is transferring settings between versions, so that you will no longer use settings when a change to a setting is made. Since it only just now started tracking the config version, it will only work with settings created between 1.4.3.0 and 1.4.3.5, any other version might end up with broken settings.
6
7
-Hotfix 1: The Driver update also broke VBAQ, but it caused less issues than the Full Range flag. This has been fixed.
8
+Another change has been done to the Automatic VBV Buffer Size, which will now behave much more predictable. A value of 0% is completely unrestricted, 50% matches the calculated bitrate and 100% matches the calculated strict bitrate.
9
+
10
+Presets will also now use the proper minimum and maximum QP values and the minimum QP default value has been increased to 11.
11
+
12
+Hotfix 1: Fix enumeration based properties not working correctly due to a programming error.
13
+Hotfix 2: Actually fix the enumeration based properties for real this time.
14
15
## Changelog
16
-* Hotfix 1: Experimental Property VBAQ would not be properly set.
17
-* Hotfix 1: Runtime and Compiled Against version numbers were switched around.
18
-* Fixed: Experimental Full Range Color mode no longer causes encoding to fail. (Fixes #175)
19
-* Changed: Queue status log messages have been reduced to once per second instead of once per frame.
20
-* Changed: First submission log message now show the time in seconds instead of nanoseconds.
21
+* Added: Version-specific setting transfer code which should reduce the lost settings between updates.
22
+* Changed: VBV Buffer Strictness is now linear with three steps: 100000 (0%), Target Bitrate (50%) and Strict Target Bitrate (100%).
23
+* Changed: Default for Minimum QP is now 11.
24
+* Fixed: Presets not using the proper QP Minimum and Maximum.
25
+* Fixed: Startup log messages not showing proper error codes.
26
+* Hotfix: Fix enumeration based properties not using the correct values.
27
+* Hotfix: Fix the default value for B-Frame Pattern being '-1' due to an oversight in code.
28
\ No newline at end of file
29
obs-studio-0.17.0.tar.xz/plugins/enc-amf/CMakeLists.txt -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/CMakeLists.txt
Changed
10
1
2
SET(enc-amf_VERSION_MAJOR 1)
3
SET(enc-amf_VERSION_MINOR 4)
4
SET(enc-amf_VERSION_PATCH 3)
5
-SET(enc-amf_VERSION_BUILD 4)
6
+SET(enc-amf_VERSION_BUILD 8)
7
configure_file(
8
"${PROJECT_SOURCE_DIR}/#Resources/package.in.bat"
9
"${PROJECT_SOURCE_DIR}/#Resources/package.bat"
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/CONTRIBUTING.md -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/CONTRIBUTING.md
Changed
20
1
2
The plugin itself is made up of several sub-modules:
3
4
* AMF: amf.cpp, amf.h, amf-capabilities.cpp, amf-capabilities.h
5
+* Encoder: amf-encoder.cpp, amf-encoder.h
6
* H264: amf-h264.cpp, amf-h264.h, enc-h264.cpp, enc-h264.h
7
-* H265: amf-h265.cpp, amf-h265.h, enc-h265.cpp, enc-h265.h
8
* API: api-base.cpp, api-base.h
9
-* API-OGL: api-opengl.cpp, api-opengl.h
10
-* API-D3D9: api-d3d9.cpp, api-d3d9.h
11
-* API-D3D11: api-d3d11.cpp, api-d3d11.h
12
+* API-OpenGL: api-opengl.cpp, api-opengl.h
13
+* API-Direct3D9: api-d3d9.cpp, api-d3d9.h
14
+* API-Direct3D11: api-d3d11.cpp, api-d3d11.h
15
* API-Host: api-host.cpp, api-host.h
16
+* Plugin: plugin.cpp, plugin.h, CMakeLists.txt
17
* Utilities: misc-util.cpp
18
* Locale: Any locale files
19
* Resources: Any resource files
20
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/amf-capabilities.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/amf-capabilities.h
Changed
32
1
2
Plugin::API::Adapter adapter);
3
static void ReportAdapterTypeCapabilities(std::shared_ptr<Plugin::API::Base> api,
4
Plugin::API::Adapter adapter,
5
- VCEEncoderType type);
6
+ H264EncoderType type);
7
static void ReportAdapterTypeIOCapabilities(std::shared_ptr<Plugin::API::Base> api,
8
Plugin::API::Adapter adapter,
9
- VCEEncoderType type,
10
+ H264EncoderType type,
11
bool output);
12
13
//////////////////////////////////////////////////////////////////////////
14
15
~VCECapabilities();
16
17
bool Refresh();
18
- std::vector<std::pair<VCEEncoderType, VCEDeviceCapabilities>>
19
+ std::vector<std::pair<H264EncoderType, VCEDeviceCapabilities>>
20
GetAllAdapterCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter);
21
VCEDeviceCapabilities
22
- GetAdapterCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter, VCEEncoderType type);
23
+ GetAdapterCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter, H264EncoderType type);
24
25
private:
26
- std::map<std::tuple<std::string, Plugin::API::Adapter, Plugin::AMD::VCEEncoderType>, VCEDeviceCapabilities> capabilityMap;
27
+ std::map<std::tuple<std::string, Plugin::API::Adapter, Plugin::AMD::H264EncoderType>, VCEDeviceCapabilities> capabilityMap;
28
};
29
}
30
}
31
\ No newline at end of file
32
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/amf-h264.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/amf-h264.h
Changed
201
1
2
namespace Plugin {
3
namespace AMD {
4
// Internal Properties
5
- enum VCEEncoderType {
6
- VCEEncoderType_AVC, // Advanced Video Coding
7
- VCEEncoderType_SVC, // Scalable Video Coding
8
- VCEEncoderType_HEVC, // High-Efficiency Video Coding (Discovered in amfrt64.dll)
9
+ enum class H264EncoderType : uint8_t {
10
+ AVC = 0, // Advanced Video Coding
11
+ SVC, // Scalable Video Coding
12
+ HEVC, // High-Efficiency Video Coding (Discovered in amfrt64.dll)
13
};
14
- enum VCEMemoryType {
15
- VCEMemoryType_Host, // Host-Managed Memory
16
- VCEMemoryType_DirectX9, // DirectX9
17
- VCEMemoryType_DirectX11, // DirectX11
18
- VCEMemoryType_OpenGL, // OpenGL
19
+ enum class H264MemoryType : uint8_t {
20
+ Host = 0, // Host-Managed Memory
21
+ DirectX9, // DirectX9
22
+ DirectX11, // DirectX11
23
+ OpenGL, // OpenGL
24
};
25
- enum VCEColorFormat {
26
+ enum class H264ColorFormat : uint8_t {
27
// 4:2:0 Formats
28
- VCEColorFormat_NV12, // NV12
29
- VCEColorFormat_I420, // YUV 4:2:0
30
+ NV12 = 0, // NV12
31
+ I420, // YUV 4:2:0
32
// 4:2:2 Formats
33
- VCEColorFormat_YUY2,
34
+ YUY2,
35
// Uncompressed
36
- VCEColorFormat_BGRA, // ARGB
37
- VCEColorFormat_RGBA, // RGBA
38
+ BGRA, // ARGB
39
+ RGBA, // RGBA
40
// Other
41
- VCEColorFormat_GRAY,
42
+ GRAY, // Y 4:0:0
43
};
44
- enum VCEColorProfile {
45
- VCEColorProfile_601,
46
- VCEColorProfile_709,
47
- VCEColorProfile_2020, // HDR
48
+ enum class H264ColorProfile : uint8_t {
49
+ Rec601 = 0,
50
+ Rec709,
51
+ Rec2020, // Truer to world color, used for HDR
52
};
53
54
// Static Properties
55
- enum VCEUsage {
56
- VCEUsage_Transcoding,
57
- VCEUsage_UltraLowLatency,
58
- VCEUsage_LowLatency,
59
- VCEUsage_Webcam, // For SVC
60
+ enum class H264Usage : uint8_t {
61
+ Transcoding = 0, // Only one capable of streaming to services.
62
+ UltraLowLatency, // Low Latency Recording or Network Streaming
63
+ LowLatency, // Low Latency Recording or Network Streaming
64
+ Webcam, // For SVC Recording and Streaming
65
};
66
- enum VCEQualityPreset {
67
- VCEQualityPreset_Speed,
68
- VCEQualityPreset_Balanced,
69
- VCEQualityPreset_Quality,
70
+ enum class H264QualityPreset : uint8_t {
71
+ Speed = 0,
72
+ Balanced,
73
+ Quality,
74
};
75
- enum VCEProfile {
76
- VCEProfile_Baseline = 66,
77
- VCEProfile_Main = 77,
78
- VCEProfile_High = 100,
79
- VCEProfile_ConstrainedBaseline = 256,
80
- VCEProfile_ConstrainedHigh = 257
81
+ enum class H264Profile : uint16_t {
82
+ Baseline = 66,
83
+ Main = 77,
84
+ High = 100,
85
+ ConstrainedBaseline = 256,
86
+ ConstrainedHigh = 257
87
};
88
- enum VCEProfileLevel {
89
- VCEProfileLevel_Automatic = 0,
90
- VCEProfileLevel_10 = 10,
91
- VCEProfileLevel_11,
92
- VCEProfileLevel_12,
93
- VCEProfileLevel_13,
94
- VCEProfileLevel_20 = 20,
95
- VCEProfileLevel_21,
96
- VCEProfileLevel_22,
97
- VCEProfileLevel_30 = 30,
98
- VCEProfileLevel_31,
99
- VCEProfileLevel_32,
100
- VCEProfileLevel_40 = 40,
101
- VCEProfileLevel_41,
102
- VCEProfileLevel_42,
103
- VCEProfileLevel_50 = 50,
104
- VCEProfileLevel_51,
105
- VCEProfileLevel_52,
106
- VCEProfileLevel_60 = 60,
107
- VCEProfileLevel_61,
108
- VCEProfileLevel_62,
109
+ enum class H264ProfileLevel : uint8_t {
110
+ Automatic = 0,
111
+ L10 = 10,
112
+ L11,
113
+ L12,
114
+ L13,
115
+ L20 = 20,
116
+ L21,
117
+ L22,
118
+ L30 = 30,
119
+ L31,
120
+ L32,
121
+ L40 = 40,
122
+ L41,
123
+ L42,
124
+ L50 = 50,
125
+ L51,
126
+ L52,
127
};
128
- enum VCEScanType {
129
- VCEScanType_Progressive,
130
- VCEScanType_Interlaced,
131
+ enum class H264ScanType : uint8_t {
132
+ Progressive = 0,
133
+ Interlaced,
134
};
135
- enum VCECodingType {
136
- VCECodingType_Default = 0,
137
- VCECodingType_CABAC = 1,
138
- VCECodingType_CALVC = 2,
139
+ enum class H264CodingType : uint8_t {
140
+ Default = 0,
141
+ CABAC = 1,
142
+ CALVC = 2,
143
};
144
145
// Dynamic Properties
146
- enum VCERateControlMethod {
147
- VCERateControlMethod_ConstantQP,
148
- VCERateControlMethod_ConstantBitrate,
149
- VCERateControlMethod_VariableBitrate_PeakConstrained,
150
- VCERateControlMethod_VariableBitrate_LatencyConstrained,
151
+ enum class H264RateControlMethod : uint8_t {
152
+ ConstantQP = 0,
153
+ ConstantBitrate,
154
+ VariableBitrate_PeakConstrained,
155
+ VariableBitrate_LatencyConstrained = 3,
156
};
157
- enum VCEBFramePattern {
158
- VCEBFramePattern_None,
159
- VCEBFramePattern_One,
160
- VCEBFramePattern_Two,
161
- VCEBFramePattern_Three,
162
+ enum class H264BFramePattern : uint8_t {
163
+ None = 0,
164
+ One,
165
+ Two,
166
+ Three,
167
};
168
169
// Experimental
170
- enum VCESliceMode {
171
- VCESliceMode_Horizontal = 1,
172
- VCESliceMode_Vertical = 2
173
+ enum class H264SliceMode : uint8_t {
174
+ Horizontal = 1,
175
+ Vertical = 2
176
};
177
- enum VCESliceControlMode {
178
- VCESliceControlMode_Off,
179
- VCESliceControlMode_Macroblock = 1, // AMF_VIDEO_ENCODER_SLICE_CTRL_MODE_MB
180
- VCESliceControlMode_Invalid,
181
- VCESliceControlMode_Macroblock_Row = 3 // AMF_VIDEO_ENCODER_SLICE_CTRL_MODE_MB_ROW
182
+ enum class H264SliceControlMode : uint8_t {
183
+ Off = 0,
184
+ Macroblock = 1, // AMF_VIDEO_ENCODER_SLICE_CTRL_MODE_MB
185
+ Invalid,
186
+ Macroblock_Row = 3 // AMF_VIDEO_ENCODER_SLICE_CTRL_MODE_MB_ROW
187
};
188
-
189
-
190
-
191
- class VCEEncoder {
192
+
193
+ class H264Encoder {
194
#pragma region Initializer & Finalizer
195
public:
196
- VCEEncoder(
197
- VCEEncoderType p_Type,
198
+ H264Encoder(
199
+ H264EncoderType p_Type,
200
std::string p_VideoAPI,
201
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/amf.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/amf.h
Changed
10
1
2
amf::AMFFactory* m_AMFFactory;
3
amf::AMFTrace* m_AMFTrace;
4
amf::AMFDebug* m_AMFDebug;
5
+ amf::AMFTraceWriter* m_TraceWriter;
6
};
7
}
8
}
9
\ No newline at end of file
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/api-base.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/api-base.h
Changed
27
1
2
//////////////////////////////////////////////////////////////////////////
3
namespace Plugin {
4
namespace API {
5
- enum APIType {
6
- APIType_Host,
7
- APIType_Direct3D9,
8
- APIType_Direct3D11,
9
- APIType_OpenGL,
10
+ enum class Type {
11
+ Host,
12
+ Direct3D9,
13
+ Direct3D11,
14
+ OpenGL,
15
};
16
17
struct Adapter {
18
19
//////////////////////////////////////////////////////////////////////////
20
public:
21
virtual std::string GetName() = 0;
22
- virtual APIType GetType() = 0;
23
+ virtual Type GetType() = 0;
24
25
virtual std::vector<Adapter> EnumerateAdapters() = 0;
26
virtual Adapter GetAdapterById(uint32_t idLow, uint32_t idHigh) = 0;
27
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/api-d3d11.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/api-d3d11.h
Changed
10
1
2
namespace API {
3
class Direct3D11 : public Base {
4
virtual std::string GetName() override;
5
- virtual APIType GetType() override;
6
+ virtual Type GetType() override;
7
8
virtual std::vector<Adapter> EnumerateAdapters() override;
9
virtual Adapter GetAdapterById(uint32_t idLow, uint32_t idHigh) override;
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/api-d3d9.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/api-d3d9.h
Changed
10
1
2
namespace API {
3
class Direct3D9 : public Base {
4
virtual std::string GetName() override;
5
- virtual APIType GetType() override;
6
+ virtual Type GetType() override;
7
8
virtual std::vector<Adapter> EnumerateAdapters() override;
9
virtual Adapter GetAdapterById(uint32_t idLow, uint32_t idHigh);
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/api-host.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/api-host.h
Changed
10
1
2
namespace API {
3
class Host : public Base {
4
virtual std::string GetName() override;
5
- virtual APIType GetType() override;
6
+ virtual Type GetType() override;
7
8
virtual std::vector<Adapter> EnumerateAdapters() override;
9
virtual Adapter GetAdapterById(uint32_t idLow, uint32_t idHigh);
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/api-opengl.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/api-opengl.h
Changed
10
1
2
namespace API {
3
class OpenGL : public Base {
4
virtual std::string GetName() override;
5
- virtual APIType GetType() override;
6
+ virtual Type GetType() override;
7
8
virtual std::vector<Adapter> EnumerateAdapters() override;
9
virtual Adapter GetAdapterById(uint32_t idLow, uint32_t idHigh);
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/enc-h264.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/enc-h264.h
Changed
19
1
2
#define AMF_H264_VIEW_MASTER TEXT_AMF_H264("View.Master")
3
#define AMF_H264_DEBUG TEXT_AMF_H264("Debug")
4
#define AMF_H264_DEBUG_DESCRIPTION TEXT_AMF_H264("Debug.Description")
5
+#define AMF_H264_VERSION TEXT_AMF_H264("Version")
6
7
//////////////////////////////////////////////////////////////////////////
8
// Code
9
10
// Storage
11
//////////////////////////////////////////////////////////////////////////
12
private:
13
- Plugin::AMD::VCEEncoder* m_VideoEncoder;
14
+ Plugin::AMD::H264Encoder* m_VideoEncoder;
15
};
16
}
17
}
18
\ No newline at end of file
19
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Include/plugin.h -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Include/plugin.h
Changed
18
1
2
//////////////////////////////////////////////////////////////////////////
3
// Includes
4
//////////////////////////////////////////////////////////////////////////
5
-#include <stdint.h>
6
+
7
+// Microsoft as always does not follow the standard and declares safe functions unsafe.
8
+// Or even straight up marks them as deprecated, what the fuck Microsoft?
9
+#ifdef _MSC_VER
10
+#define _CRT_SECURE_NO_WARNINGS
11
+#pragma warning(disable : 4996)
12
+#endif
13
+
14
+#include <cstdint>
15
#include <inttypes.h>
16
#include <exception>
17
#include <stdexcept>
18
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/ca-ES.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/ca-ES.ini
Changed
122
1
2
AMF.Util.Toggle.Disabled="Desactivat"
3
AMF.Util.Toggle.Enabled="Activat"
4
AMF.H264.Preset="Configuració preestablerta"
5
+AMF.H264.Preset.ResetToDefaults="Restableix als valors per defecte"
6
AMF.H264.Preset.Recording="S'està enregistrant"
7
AMF.H264.Preset.HighQuality="Alta qualitat"
8
AMF.H264.Preset.Indistinguishable="Indistinguible"
9
10
AMF.H264.Usage.UltraLowLatency="Latència ultra baixa"
11
AMF.H264.Usage.LowLatency="Latència baixa"
12
AMF.H264.QualityPreset="Qualitat del perfil"
13
+AMF.H264.QualityPreset.Description="Quina qualitat del perfil d'AMD s'ha d'intentar aconseguir:\n- 'Velocitat' és la més ràpida però la que pitjor qualitat obté,\n- 'Equilibrat' està entre 'Velocitat' i 'Qualitat' oferint un balanç entre els dos,\n- 'Qualitat' ofereix la millor qualitat possible per una determinada tassa de marcs."
14
AMF.H264.QualityPreset.Speed="Velocitat"
15
AMF.H264.QualityPreset.Balanced="Equilibrat"
16
AMF.H264.QualityPreset.Quality="Qualitat"
17
AMF.H264.Profile="Perfil"
18
+AMF.H264.Profile.Description="Quin perfil H.264 s'ha d'utilitzar per la codificació, ordenats de major qualitat al més suportat."
19
AMF.H264.ProfileLevel="Nivell de perfil"
20
+AMF.H264.ProfileLevel.Description="Nivell de perfil H.264 a utilitzar per la codificació:\n- 'Automàtic' calcula el millor nivell de perfil per certa velocitat i mida de marcs,\n- '4.1' suporta 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' suporta 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' suporta 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' suporta 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' suporta 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
21
AMF.H264.RateControlMethod="Mètode de control del flux"
22
+AMF.H264.RateControlMethod.Description="Quin mètode de control de flux s'ha d'utilitzar:\n- '\@AMF.H264.RateControlMethod.CQP\@' assigna valors fixos de QP a I-/P-/B-Frames (Paràmetre de quantització),\n- '\@AMF.H264.RateControlMethod.CBR\@' es manté en la tassa de marcs objectiu (utilitzant dades de farciment) (recomanat per transmissions en directe),\n- '\@AMF.H264.RateControlMethod.VBR\@' es manté per sota d'un pic de tassa de marcs,\n- '\@AMF.H264.RateControlMethod.VBR_LAT\@' es manté prop de la tassa de marcs desitjada si la latència i carrega de la GPU ho permet, si no s'augmentarà la taxa de marcs (recomanat per a enregistraments)."
23
AMF.H264.RateControlMethod.CQP="QP constant (CQP)"
24
AMF.H264.RateControlMethod.CBR="Flux constant (CBR)"
25
AMF.H264.RateControlMethod.VBR.Peak="Flux variable (pic restringit)(VBR)"
26
AMF.H264.RateControlMethod.VBR.Latency="Flux variable (latència restringida) (VBR_LAT)"
27
AMF.H264.Bitrate.Target="Tassa de bits desitjada"
28
+AMF.H264.Bitrate.Target.Description="Tassa de marcs a intentar arribar a la seqüència general."
29
AMF.H264.Bitrate.Peak="Pic de tassa de bits"
30
+AMF.H264.Bitrate.Peak.Description="Tassa de marcs a intentar aconseguir com pic màxim en la seqüència general."
31
AMF.H264.QP.Minimum="QP mínim"
32
+AMF.H264.QP.Minimum.Description="Valor mínim de QP (paràmetre de quantització) a utilitzar en un fotograma."
33
AMF.H264.QP.Maximum="QP màxim"
34
+AMF.H264.QP.Maximum.Description="Valor màxim de QP (paràmetre de quantització) a utilitzar en un fotograma."
35
AMF.H264.QP.IFrame="I-Frame QP"
36
+AMF.H264.QP.IFrame.Description="Valor fix de QP per I-Frames."
37
AMF.H264.QP.PFrame="P-Frame QP"
38
+AMF.H264.QP.PFrame.Description="Valor fix de QP per P-Frames."
39
AMF.H264.QP.BFrame="B-Frame QP"
40
+AMF.H264.QP.BFrame.Description="Valor de QP fix (paràmetre de quantització) a utilitzar per B-Frames."
41
+AMF.H264.VBVBuffer="Memòria intermèdia VBV"
42
+AMF.H264.VBVBuffer.Description="Quin mètode s'ha d'utilitzar per determinar la mida de la memòria intermèdia VBV:\n- 'Automàtic' calcula la mida utilitzant una restricció estricta,\n- 'Manual' permet a l'usuari controlar la mida.\nLa memòria intermèdia VBV (Verificador de la memòria intermèdia del vídeo) és usat per certs mètodes de control del flux per mantenir la taxa de bits dins dels paràmetres establerts."
43
+AMF.H264.VBVBuffer.Strictness="Rigorositat de la memòria intermèdia VBV"
44
+AMF.H264.VBVBuffer.Strictness.Description="Determina la rigidesa de la memòria intermèdia VBV, con 100% essent tant estricte com sigui possible i 0% sense restricció."
45
+AMF.H264.VBVBuffer.Size="Mida de la memòria intermèdia VBV"
46
+AMF.H264.VBVBuffer.Size.Description="La mida de la memòria intermèdia VBV que s'utilitza per al control de la tassa de marcs en una seqüencia."
47
+AMF.H264.VBVBuffer.Fullness="Amplitud de la memòria intermèdia VBV"
48
+AMF.H264.VBVBuffer.Fullness.Description="Com de ple és la memòria intermèdia VMV inicialment, només afectarà la seqüència inicial de la codificació."
49
AMF.H264.FillerData="Dades a omplir"
50
+AMF.H264.FillerData.Description="En activar les dades de farciment es permet al codificador mantenir almenys la tassa de marcs desitjada omplint l'espai que falta amb informació sense valor."
51
AMF.H264.FrameSkipping="Omissió de fotogrames"
52
+AMF.H264.FrameSkipping.Description="L'omissió de fotogrames permet al codificador saltar fotogrames per complir amb el requeriment de la tassa de marcs objectiu.\nQuan el codificador salta un fotograma inserirà una NAL que repetirà el darrer fotograma codificat a la transmissió.\nPot ajudar amb tassa de bits objectiu molt baixes."
53
AMF.H264.EnforceHRDCompatibility="Força la compatibilitat amb HRD"
54
+AMF.H264.EnforceHRDCompatibility.Description="Força les restriccions del descodificador hipotètic de referència que limiten el canvi de valor màxim de QP dins d'un fotograma."
55
+AMF.H264.KeyframeInterval="Interval de fotogrames clau"
56
+AMF.H264.KeyframeInterval.Description="Quants segons han d'haver entre fotogrames que no es poden descartar.\nTambé controla la mida de la seqüència (GOP)."
57
+AMF.H264.IDRPeriod="Període IDR"
58
+AMF.H264.IDRPeriod.Description="Defineix la distància entre Instantaneous Decoding Refreshes (IDR) en fotogrames. També controla la mida de la seqüència del GOP."
59
+AMF.H264.BFrame.Pattern="B-Frames"
60
+AMF.H264.BFrame.Pattern.Description="La quantitat de B-Frames a utilitzar mestre es codifica.\nCompatible amb targetes de 2ª i 3ª generació VCE. Impacte negatiu en el rendiment de codificació."
61
+AMF.H264.BFrame.DeltaQP="Delta QP per B-Frames"
62
+AMF.H264.BFrame.DeltaQP.Description="Valor Delta QP per al darrer I- o P-Frame per B-Frames no referenciables."
63
+AMF.H264.BFrame.Reference="B-Frames referenciables"
64
+AMF.H264.BFrame.Reference.Description="Permet a un B-Frames utilitzar també B-Frames com referència, enlloc de P- i I-Frames."
65
+AMF.H264.BFrame.ReferenceDeltaQP="Delta QP per als fotogrames referenciables"
66
+AMF.H264.BFrame.ReferenceDeltaQP.Description="Valor Delta QP per al darrer I- o P-Frame per B-Frames referenciables."
67
AMF.H264.DeblockingFilter="Filtre d'eliminació de blocs"
68
+AMF.H264.DeblockingFilter.Description="Estableix l'indicador que el descodificador està permès a utilitzar el Filtre d'eliminació de blocs per a la transmissió codificada."
69
AMF.H264.ScanType="Tipus d'exploració"
70
+AMF.H264.ScanType.Description="Quin mètode de escaneig utilitzar, deixeu-lo sempre a '\@AMF.H264.ScanType.Progressive\@'."
71
AMF.H264.ScanType.Progressive="Progressiu"
72
AMF.H264.ScanType.Interlaced="Entrellaçat"
73
+AMF.H264.MotionEstimation="Estimació del moviment"
74
+AMF.H264.MotionEstimation.Description="L'estimació del moviment permet al codificador reduir el flux de dades necessari calculant d'on vénen els píxels."
75
AMF.H264.MotionEstimation.None="Cap"
76
AMF.H264.MotionEstimation.Half="Meitat de píxel"
77
AMF.H264.MotionEstimation.Quarter="Quart de Píxel"
78
+AMF.H264.MotionEstimation.Both="Meitat i quart de píxel"
79
+AMF.H264.CodingType="Tipus de codificació"
80
+AMF.H264.CodingType.Description="Quin tipus de codificació utilitzar:\n* \@AMF.Util.Default\@ deixeu que AMF ho decideixi (recomanat).\n* CALVC (Context-Adaptive Variable-Length Coding) és més ràpid, però mes gran.\n* CABAC (Context-Adaptive Binary Arithmetic Coding) es més lent, però més petit."
81
AMF.H264.MaximumLTRFrames="Fotogrames màxims LTR"
82
+AMF.H264.MaximumLTRFrames.Description="Fotogrames de referència a llarg plaç (LTR) és una característica que permet al codificador marcar certs marcs en una seqüencia com referents per un llarg temps.\nEls fotogrames LTR no poden ser utilitzats amb B-Pictures i el codificador desactivarà B-Pictures si s'utilitza."
83
+AMF.H264.MaximumAccessUnitSize="Mida màxima de la unitat d'accés"
84
+AMF.H264.MaximumAccessUnitSize.Description="Mida d'una unitat d'accés per a una NAL."
85
+AMF.H264.HeaderInsertionSpacing="Espaiat d'inserció de capçaleres"
86
+AMF.H264.HeaderInsertionSpacing.Description="Quants fotogrames han d'haver entre capçaleres NAL."
87
+AMF.H264.WaitForTask="Espera per la tasca"
88
+AMF.H264.WaitForTask.Description="Desconegut, Experimental"
89
+AMF.H264.PreAnalysisPass="Passada d'anàlisi previ"
90
+AMF.H264.PreAnalysisPass.Description="Desconegut, Experimental"
91
+AMF.H264.VBAQ="VBAQ"
92
+AMF.H264.VBAQ.Description="Desconegut, Experimental"
93
+AMF.H264.GOPSize="Mida del GOP"
94
+AMF.H264.GOPSize.Description="Desconegut, Experimental"
95
+AMF.H264.GOPAlignment="Alineació del GOP"
96
+AMF.H264.GOPAlignment.Description="Desconegut, Experimental"
97
+AMF.H264.MaximumReferenceFrames="Fotogrames de referència màxims"
98
+AMF.H264.MaximumReferenceFrames.Description="Desconegut, Experimental"
99
+AMF.H264.SlicesPerFrame="Porcions per fotograma"
100
+AMF.H264.SlicesPerFrame.Description="Quantes porcions I-Frame han de ser emmagatzemats en cada fotograma?\nUn valor de 0 permet al codificador decidir sobre la marxa.\nLa codificació Intra-Refresh és usada per a una reproducció i exploració més fluïda."
101
+AMF.H264.SliceMode="Mode de porcions"
102
+AMF.H264.SliceMode.Description="Desconegut, Experimental"
103
+AMF.H264.MaximumSliceSize="Mida màxima de la porció"
104
+AMF.H264.MaximumSliceSize.Description="Desconegut, Experimental"
105
+AMF.H264.SliceControlMode="Mode de control de la porció"
106
+AMF.H264.SliceControlMode.Description="Desconegut, Experimental"
107
+AMF.H264.SliceControlSize="Control de mida de la porció"
108
+AMF.H264.SliceControlSize.Description="Desconegut, Experimental"
109
+AMF.H264.IntraRefresh.NumberOfStripes="Numero de línies Intra-Refresh"
110
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Desconegut, Experimental"
111
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Macroblocs intra-refresh per Slot"
112
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Quants macroblocs han de ser emmagatzemats en cada slot?\nUn valor de 0 desactiva aquesta funció.\nLa codificació Intra-Refresh és usada per a una reproducció i exploració més fluïda."
113
+AMF.H264.VideoAPI="API de vídeo"
114
+AMF.H264.VideoAPI.Description="Quina API utilitzar per la codificació."
115
+AMF.H264.VideoAdapter="Adaptador de vídeo"
116
+AMF.H264.VideoAdapter.Description="Quin adaptador utilitzar per la codificació."
117
+AMF.H264.OpenCL="OpenCL"
118
+AMF.H264.OpenCL.Description="El codificador hauria d'utilitzar OpenCL per presentar els fotogrames individuals?"
119
AMF.H264.View="Mode de visualització"
120
AMF.H264.View.Description="Quines propietats han de ser visibles. No rebreu suport si feu servir el mode de vista 'Expert' o 'Màster'."
121
AMF.H264.View.Basic="Bàsic"
122
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/da-DK.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/da-DK.ini
Changed
31
1
2
AMF.Util.Default="Standard"
3
+AMF.Util.Automatic="Automatisk"
4
+AMF.Util.Manual="Manuelt"
5
AMF.Util.Toggle.Disabled="Deaktiveret"
6
AMF.Util.Toggle.Enabled="Aktiveret"
7
+AMF.H264.Preset="Forudindstillinger"
8
+AMF.H264.Preset.ResetToDefaults="Nulstil til standarder"
9
+AMF.H264.Preset.Recording="Optagelse"
10
+AMF.H264.Preset.HighQuality="Højkvalitet"
11
+AMF.H264.Preset.Indistinguishable="Indistingverbar"
12
+AMF.H264.Preset.Lossless="Tabsfri"
13
+AMF.H264.Preset.YouTube="YouTube"
14
+AMF.H264.Usage="Anvendelse"
15
+AMF.H264.Usage.Description="Hvilken anvendelse AMF bør indstilles til:\n- '\@AMF.H264.Usage.Transcoding\@' er omkodning til generelle formål (anbefalet),\n - '\@AMF.H264.Usage.UltraLowLatency\@' er til virkelig lav-forsinkelseskodning,\n- '\@AMF.H264.Usage.LowLatency\@' er tilsvarende ovennævnte med en lidt større forsinkelse.\nStreaming understøtter kun '\@AMF.H264.Usage.Transcoding\@', alle andre værdier kan benyttes til optagelse."
16
AMF.H264.Usage.Transcoding="Transcoding"
17
AMF.H264.Usage.UltraLowLatency="Ekstrem Lav Ventetid"
18
AMF.H264.Usage.LowLatency="Lav Ventetid"
19
AMF.H264.QualityPreset="Kvalitets profiler"
20
+AMF.H264.QualityPreset.Description="Hvilken Kvalitetsforudindstilling AMF bør forsøges målrettet imod:\n- '\@AMF. H264. QualityPreset.Speed\@' er den hurtigste, men har den ringeste kvalitet,\n- '\@AMF. H264. QualityPreset.Balanced\@' er en balanceret blanding af begge,\n- '\@AMF. H264. QualityPreset.Quality\@' giver den bedste kvalitet for en given bithastighed."
21
AMF.H264.QualityPreset.Speed="Hastighed (Dårligste kvalitet)"
22
AMF.H264.QualityPreset.Balanced="Balanceret (Mellem Kvalitet)"
23
AMF.H264.QualityPreset.Quality="Kvalitet (Bedste Kvalitet)"
24
AMF.H264.Profile="Profil"
25
+AMF.H264.Profile.Description="Hvilken H.264-profil at benytte til kodning, sorteret fra højeste kvalitet til mest udbredte understøttelse."
26
AMF.H264.ProfileLevel="Profil Niveau"
27
+AMF.H264.ProfileLevel.Description="Hvilket H.264-profilniveau at benytte til kodning:\n- ' \@AMF. Util.Automatic\@' beregner det best profilniveau for en given billedhastighed og -størrelse,\n- '4.1' understøtter 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' understøtter 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' understøtter 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' understøtter 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' understøtter 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960 x 540 172 FPS"
28
AMF.H264.RateControlMethod="Rate Control Method"
29
AMF.H264.RateControlMethod.CQP="Constant QP (CQP)"
30
AMF.H264.RateControlMethod.CBR="Constant Bitrate (CBR)"
31
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/eu-ES.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/eu-ES.ini
Changed
14
1
2
AMF.H264.SliceControlMode.Description="Ezezaguna, esperimentala"
3
AMF.H264.SliceControlSize.Description="Ezezaguna, esperimentala"
4
AMF.H264.IntraRefresh.NumberOfStripes.Description="Ezezaguna, esperimentala"
5
+AMF.H264.VideoAPI="Bideo APIa"
6
+AMF.H264.VideoAPI.Description="Zein API erabili kodeketarako."
7
+AMF.H264.VideoAdapter="Bideo egokigailua"
8
+AMF.H264.VideoAdapter.Description="Zein egokigailu erabili kodeketarako."
9
AMF.H264.OpenCL="OpenCL"
10
+AMF.H264.OpenCL.Description="Kodetzaileak OpenCL erabili behar du banakako fotogramak bidaltzeko?"
11
AMF.H264.View="Ikuspegia"
12
AMF.H264.View.Description="Zein propietate ikusi behar dira. Ez duzu laguntzarik jasoko 'Aditu' edo 'Maisu' ikuspegian."
13
AMF.H264.View.Basic="Oinarrizkoa"
14
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/hu-HU.ini
Changed
79
1
2
AMF.H264.ProfileLevel="Profil szint"
3
AMF.H264.RateControlMethod="Bitráta vezérlés"
4
AMF.H264.RateControlMethod.CQP="Erőltetett QP (CQP)"
5
-AMF.H264.RateControlMethod.CBR="Konstans bitráta (CBR)"
6
-AMF.H264.RateControlMethod.VBR.Peak="Változó bitráta (Csúcsértéket betartva) (VBR)"
7
-AMF.H264.RateControlMethod.VBR.Latency="Változó bitráta (Késleltetés kényszerítése) (VBR_LAT)"
8
-AMF.H264.Bitrate.Target="Bitráta (Bitben)"
9
+AMF.H264.RateControlMethod.CBR="Konstans bitsebesség (CBR)"
10
+AMF.H264.RateControlMethod.VBR.Peak="Változó bitsebesség (Csúcsértéket betartva) (VBR)"
11
+AMF.H264.RateControlMethod.VBR.Latency="Változó bitsebesség (Késleltetés kényszerítése) (VBR_LAT)"
12
+AMF.H264.Bitrate.Target="Célbitsebesség"
13
AMF.H264.Bitrate.Target.Description="Bitráta amelyet szeretne elérni a konvertálás során."
14
-AMF.H264.Bitrate.Peak="Csúcs bitráta (Bitben)"
15
-AMF.H264.Bitrate.Peak.Description="Bitráta amelyet maximálisan elérhet a konvertálás során."
16
+AMF.H264.Bitrate.Peak="Csúcs bitsebesség"
17
+AMF.H264.Bitrate.Peak.Description="Bitsebesség amelyet maximálisan elérhet a konvertálás során."
18
AMF.H264.QP.Minimum="Minimum QP"
19
AMF.H264.QP.Minimum.Description="Legalacsonyabb QP (Quantization Parameter) képkockában használható érték."
20
AMF.H264.QP.Maximum="Maximum QP"
21
22
AMF.H264.KeyframeInterval="Kulcsképkocka időköze"
23
AMF.H264.IDRPeriod="IDR időköz"
24
AMF.H264.BFrame.Pattern="B képkocka"
25
+AMF.H264.BFrame.Pattern.Description="A B képkockák száma kódolás közben.\nA második és harmadik generációjú VCE kártyák támogatják. Hátráltató hatása van a kódolás teljesítményére."
26
AMF.H264.BFrame.DeltaQP="B képkocka Delta QP"
27
+AMF.H264.BFrame.DeltaQP.Description="Delta QP érték az utolsó I vagy P képkocka nem referenciálható B képkockáihoz."
28
AMF.H264.BFrame.Reference="Referenciálható B képkockák"
29
AMF.H264.BFrame.Reference.Description="Lehetővé teszi a B képkockák számára, hogy B képkockát referenciaként használjon, P és I képkockák helyett."
30
AMF.H264.BFrame.ReferenceDeltaQP="Delta QP a referenciálható B kockákhoz"
31
32
AMF.H264.ScanType.Progressive="Progresszív"
33
AMF.H264.ScanType.Interlaced="Váltottsoros (Kísérleti)"
34
AMF.H264.MotionEstimation="Mozgásbecslés"
35
+AMF.H264.MotionEstimation.Description="Mozdulat becslés lehetővé teszi a kódolónak, hogy csökkentse a bitsebesség követelményt a pixel elmozdulásának a felbecsülésével."
36
AMF.H264.MotionEstimation.None="Semmi"
37
AMF.H264.MotionEstimation.Half="Fél-pixel"
38
AMF.H264.MotionEstimation.Quarter="Negyed-pixel"
39
40
AMF.H264.CodingType="Kódolás típusa"
41
AMF.H264.MaximumLTRFrames="Maximális LTR képkocka"
42
AMF.H264.MaximumAccessUnitSize="Hozzáférési egység maximális mérete"
43
+AMF.H264.MaximumAccessUnitSize.Description="NAL számára a legnagyobb elérési egység."
44
+AMF.H264.HeaderInsertionSpacing.Description="NAL fejlécek közötti képkockák száma."
45
+AMF.H264.WaitForTask="Feladatra várakozás"
46
+AMF.H264.WaitForTask.Description="Ismeretlen, kísérleti"
47
AMF.H264.PreAnalysisPass="Elemzés előtti fázis"
48
+AMF.H264.PreAnalysisPass.Description="Ismeretlen, kísérleti"
49
AMF.H264.VBAQ="VBAQ"
50
+AMF.H264.VBAQ.Description="Ismeretlen, kísérleti"
51
AMF.H264.GOPSize="GOP méret"
52
+AMF.H264.GOPSize.Description="Ismeretlen, kísérleti"
53
AMF.H264.GOPAlignment="GOP igazítás"
54
+AMF.H264.GOPAlignment.Description="Ismeretlen, kísérleti"
55
AMF.H264.MaximumReferenceFrames="Maximális referencia képkockák"
56
+AMF.H264.MaximumReferenceFrames.Description="Ismeretlen, kísérleti"
57
AMF.H264.SlicesPerFrame="Szeletelés képkockánként"
58
AMF.H264.SliceMode="Szelet mód"
59
+AMF.H264.SliceMode.Description="Ismeretlen, kísérleti"
60
AMF.H264.MaximumSliceSize="Maximális szeletméret"
61
+AMF.H264.MaximumSliceSize.Description="Ismeretlen, kísérleti"
62
+AMF.H264.SliceControlMode="Szelet ellenőrzési mód"
63
+AMF.H264.SliceControlMode.Description="Ismeretlen, kísérleti"
64
+AMF.H264.SliceControlSize="Szeletméret ellenőrzés"
65
+AMF.H264.SliceControlSize.Description="Ismeretlen, kísérleti"
66
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Ismeretlen, kísérleti"
67
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Hány makroblokkot tároljon céllánként?\nA 0 érték kikapcsolja a funkciót.\nIntra-Refresh kódolás a gyorsabb lejátszáshoz és kereséshez használható."
68
AMF.H264.VideoAPI="Videó API"
69
AMF.H264.VideoAPI.Description="Melyik API használható kódoláshoz."
70
AMF.H264.VideoAdapter="Videó adapter"
71
AMF.H264.VideoAdapter.Description="Melyik adapter használható kódoláshoz."
72
AMF.H264.OpenCL="OpenCL"
73
+AMF.H264.OpenCL.Description="A kódolós használhat OpenCL-t az egyes képkockák elkészítéséhez?"
74
AMF.H264.View="Nézet mód"
75
+AMF.H264.View.Description="Milyen tulajdonságok jelenjenek meg?\nA '\@AMF.H264.View.Master\@' használata kizárja a támogatásban való részesülésből."
76
AMF.H264.View.Basic="Alap"
77
AMF.H264.View.Advanced="Haladó"
78
AMF.H264.View.Expert="Szakértő"
79
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/it-IT.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/it-IT.ini
Changed
25
1
2
AMF.H264.MaximumAccessUnitSize="Massima dimensione di unità d'accesso"
3
AMF.H264.HeaderInsertionSpacing="Spaziatura di inserimento di intestazione"
4
AMF.H264.WaitForTask="Attendere per attività"
5
+AMF.H264.WaitForTask.Description="Sconosciuto, sperimentale"
6
+AMF.H264.PreAnalysisPass="Analisi pre-pass"
7
+AMF.H264.PreAnalysisPass.Description="Sconosciuto, sperimentale"
8
+AMF.H264.VBAQ="VBAQ"
9
+AMF.H264.VBAQ.Description="Sconosciuto, sperimentale"
10
+AMF.H264.GOPSize="Dimensione del GOP"
11
+AMF.H264.GOPSize.Description="Sconosciuto, sperimentale"
12
+AMF.H264.GOPAlignment="Allineamento del GOP"
13
+AMF.H264.GOPAlignment.Description="Sconosciuto, sperimentale"
14
+AMF.H264.MaximumReferenceFrames="Numero massimo di frames di riferimento"
15
+AMF.H264.MaximumReferenceFrames.Description="Sconosciuto, sperimentale"
16
AMF.H264.SlicesPerFrame="Slices Per Frame"
17
+AMF.H264.SliceMode="Modalità Slice"
18
+AMF.H264.SliceMode.Description="Sconosciuto, sperimentale"
19
+AMF.H264.MaximumSliceSize="Dimensione massima frame"
20
+AMF.H264.MaximumSliceSize.Description="Sconosciuto, sperimentale"
21
+AMF.H264.SliceControlMode="Modalità di controllo Slice"
22
AMF.H264.View="Modalità di visualizzazione"
23
AMF.H264.View.Basic="Basico"
24
AMF.H264.View.Advanced="Avanzate"
25
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/ko-KR.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/ko-KR.ini
Changed
18
1
2
AMF.H264.KeyframeInterval.Description="손실이 불가능한 프레임 사이에 얼마나 많은 시간(초)이 필요한지 설정합니다.\n또한 영상(GOP) 크기도 제어합니다."
3
AMF.H264.IDRPeriod="IDR 주기"
4
AMF.H264.IDRPeriod.Description="프레임 내에서 순간 복호 갱신(nstantaneous Decoding Refreshes) 사이의 거리를 설정합니다. 또한, GOP-장면 크기를 제어합니다."
5
+AMF.H264.BFrame.Pattern="B-화면"
6
AMF.H264.BFrame.Pattern.Description="인코딩에 얼마나 많은 B-화면을 사용할지 설정합니다.\n2, 3세대 VCE카드에서 지원합니다. 인코딩 성능에 부정적인 영향을 줍니다."
7
AMF.H264.BFrame.DeltaQP="B-화면 델타 QP"
8
AMF.H264.BFrame.DeltaQP.Description="비참조 B-화면에 쓰이는 마지막 I- 혹은P-화면의 델타 QP 값"
9
10
AMF.H264.HeaderInsertionSpacing.Description="NAL 헤더 사이에 얼마나 많은 프레임이 필요한지 설정합니다. 0(자동)에서 바꾸는 것은 추천하지 않습니다."
11
AMF.H264.WaitForTask="작업을 대기"
12
AMF.H264.WaitForTask.Description="알수 없음, 실험적인 기능"
13
+AMF.H264.PreAnalysisPass="사전분석 처리"
14
+AMF.H264.PreAnalysisPass.Description="알수 없음, 실험적인 기능"
15
AMF.H264.VBAQ="VBAQ"
16
AMF.H264.VBAQ.Description="알수 없음, 실험적인 기능"
17
AMF.H264.GOPSize="GOP 크기"
18
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini
Changed
131
1
2
AMF.Util.Default="Standaard"
3
AMF.Util.Automatic="Automatisch"
4
+AMF.Util.Manual="Handmatig"
5
AMF.Util.Toggle.Disabled="Uitgeschakeld"
6
AMF.Util.Toggle.Enabled="Ingeschakeld"
7
AMF.H264.Preset="Voorkeursinstelling"
8
+AMF.H264.Preset.ResetToDefaults="Standaardinstellingen herstellen"
9
AMF.H264.Preset.Recording="Opname"
10
AMF.H264.Preset.HighQuality="Hoge kwaliteit"
11
AMF.H264.Preset.Indistinguishable="Ononderscheidbaar"
12
13
AMF.H264.Usage.UltraLowLatency="Ultra Low Latency"
14
AMF.H264.Usage.LowLatency="Low Latency"
15
AMF.H264.QualityPreset="Kwaliteitsinstelling"
16
+AMF.H264.QualityPreset.Description="Welke kwaliteitsinstelling AMF moet proberen te halen:\n- '\@AMF.H264.QualityPreset.Speed\@' is de snelste maar heeft de slechtste kwaliteit,\n- '\@AMF.H264.QualityPreset.Balanced\@' is een gebalanceerde mix van beide,\n- '\@AMF.H264.QualityPreset.Quality\@' geeft de beste kwaliteit voor een gekozen bitrate."
17
AMF.H264.QualityPreset.Speed="Snelheid"
18
AMF.H264.QualityPreset.Balanced="Gebalanceerd"
19
AMF.H264.QualityPreset.Quality="Kwaliteit"
20
AMF.H264.Profile="Profiel"
21
+AMF.H264.Profile.Description="Welk h.264 profiel gebruikt moet worden, gesorteerd van beste kwaliteit tot breedste ondersteuning."
22
AMF.H264.ProfileLevel="Profielniveau"
23
AMF.H264.ProfileLevel.Description="Welk H.264 profielniveau moet worden gebruikt voor encoden:\n- 'Automatisch' berekent het beste profielniveau voor de gebruikte framerate en framegrootte.\n- '4.1' ondersteunt 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' ondersteunt 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' ondersteunt1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' ondersteunt3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' ondersteunt 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
24
AMF.H264.RateControlMethod="Rate control methode"
25
+AMF.H264.RateControlMethod.Description="Welke rate control methode gebruikt moet worden:\n- '\@AMF.H264.RateControlMethod.CQP\@' kent vaste I-/P-/B-Frame QP waardes toe,\n- '\@AMF.H264.RateControlMethod.CBR\@' blijft op de insgestelde doelbitrate (met opvuldata) (aanbevolen voor streamen),\n- '\@AMF.H264.RateControlMethod.VBR\@' blijft onder de ingestelde piek bitrate,\n- '\@AMF.H264.RateControlMethod.VBR_LAT\@' blijft in de buurt van de doelbitrate als de GPU latency en belasting het toestaan, anders zal er een hogere bitrate worden gebruikt (aanbevolen voor opnames)."
26
AMF.H264.RateControlMethod.CQP="Constant QP (CQP)"
27
AMF.H264.RateControlMethod.CBR="Constant Bitrate (CBR)"
28
AMF.H264.RateControlMethod.VBR.Peak="Variable Bitrate (Peak Constrained) (VBR)"
29
AMF.H264.RateControlMethod.VBR.Latency="Variable Bitrate (Latency Constrained) (VBR_LAT)"
30
AMF.H264.Bitrate.Target="Doelbitrate"
31
+AMF.H264.Bitrate.Target.Description="Bitrate om te proberen aan te houden in de gehele reeks."
32
AMF.H264.Bitrate.Peak="Maximale bitrate"
33
+AMF.H264.Bitrate.Peak.Description="Bitrate om in de gehele reeks maximaal naartoe te pieken."
34
AMF.H264.QP.Minimum="Minimale QP"
35
+AMF.H264.QP.Minimum.Description="Laagste QP waarde om te gebruiken in een frame."
36
AMF.H264.QP.Maximum="Maximale QP"
37
+AMF.H264.QP.Maximum.Description="Hoogste QP waarde om te gebruiken in een frame."
38
AMF.H264.QP.IFrame="I-Frame QP"
39
+AMF.H264.QP.IFrame.Description="Vaste QP waarde om te gebruiken voor I-frames."
40
AMF.H264.QP.PFrame="P-Frame QP"
41
+AMF.H264.QP.PFrame.Description="Vaste QP waarde om te gebruiken voor P-frames."
42
AMF.H264.QP.BFrame="B-Frame QP"
43
+AMF.H264.QP.BFrame.Description="Vaste QP waarde om te gebruiken voor B-frames."
44
AMF.H264.VBVBuffer="VBV Buffer"
45
+AMF.H264.VBVBuffer.Description="Welke methode moet worden gebruikt om de VBV buffergrootte te bepalen:\n- '\@AMF.Util.Automatic\@' berekent de grootte met een strengheid-instelling.\n- '\@AMF.Util.Manual\@' laat de gebruiker de grootte bepalen.\nVBV (Video Buffering Verifier) buffer wordt gebruikt door bepaalde Rate Control methodes om de algehele bitrate binnen de aangegeven perken te houden."
46
+AMF.H264.VBVBuffer.Strictness="VBV Buffer-strengheid"
47
+AMF.H264.VBVBuffer.Strictness.Description="Bepaalt de strengheid van de VBV buffer, waar 100% zo streng mogelijk is, en 0% geen restricties oplegt."
48
+AMF.H264.VBVBuffer.Size="VBV Buffergrootte"
49
+AMF.H264.VBVBuffer.Size.Description="De grootte van de VBV Buffer welke wordt gebruikt voor bitrate controle in een reeks."
50
+AMF.H264.VBVBuffer.Fullness="VBV Buffervulling"
51
+AMF.H264.VBVBuffer.Fullness.Description="Hoe vol de VBV Buffer initieel is, beïnvloedt alleen de initiële reeks van encoden."
52
AMF.H264.FillerData="Opvuldata"
53
+AMF.H264.FillerData.Description="Inschakelen van opvuldata laat de encoder tenminste de doelbitrate aanhouden door de overtollige ruimte in een reeks te vullen met lege informatie."
54
AMF.H264.FrameSkipping="Frames overslaan"
55
+AMF.H264.FrameSkipping.Description="Frame Skipping laat een encoder frames droppen om de doelbitrate te halen.\nAls de encoder een frame dropt vult het een herhaal-laatste-frame NAL in de stream.\nKan helpen bij erg lage doelbitrates."
56
AMF.H264.EnforceHRDCompatibility="Forceer HDR compatibiliteit"
57
+AMF.H264.EnforceHRDCompatibility.Description="Forceer hypothetische referentiedecoder-restricties welke de maximale QP waarde veranderen binnen een frame."
58
+AMF.H264.KeyframeInterval="Keyframe-Interval"
59
+AMF.H264.KeyframeInterval.Description="Bepaalt de afstand tussen keyframes in seconden. Bepaalt ook de GOP-sequence size."
60
+AMF.H264.IDRPeriod="IDR Periode"
61
+AMF.H264.IDRPeriod.Description="Bepaalt de afstand tussen Instantaneous Decoding Refreshes (IDR) in frames. Bepaalt ook de GOP-sequence size."
62
+AMF.H264.BFrame.Pattern="B-frames"
63
+AMF.H264.BFrame.Pattern.Description="Het aantal B-frames om te gebruiken tijdens het encoden.\nOndersteund door 2e en 3e generatie VCE-kaarten. Negatieve invloed op encodingprestaties."
64
+AMF.H264.BFrame.DeltaQP="Delta QP voor B-frames"
65
+AMF.H264.BFrame.DeltaQP.Description="Delta QP waarde tot de laatste I- of P-frame voor niet-refereerbare B-frames."
66
+AMF.H264.BFrame.Reference="Refereerbare B-frames"
67
+AMF.H264.BFrame.Reference.Description="Laat een B-frame ook B-frames gebruiken als referentie, in plaats van enkel P- en I-frames."
68
+AMF.H264.BFrame.ReferenceDeltaQP="Delta QP voor refereerbare B-frames"
69
+AMF.H264.BFrame.ReferenceDeltaQP.Description="Delta QP waarde tot de laatste I- of P-frame voor refereerbare B-frames."
70
AMF.H264.DeblockingFilter="Deblocking Filter"
71
+AMF.H264.DeblockingFilter.Description="Staat de encoder toe om een Deblocking Filter te gebruiken voor de gecodeerde stream."
72
AMF.H264.ScanType="Scantype"
73
+AMF.H264.ScanType.Description="Welke scanmethode gebruikt moet worden, laat dit altijd op '\@AMF.H264.ScanType.Progressive\@'."
74
AMF.H264.ScanType.Progressive="Progressive"
75
AMF.H264.ScanType.Interlaced="Interlaced"
76
+AMF.H264.MotionEstimation="Bewegingsschatting"
77
+AMF.H264.MotionEstimation.Description="Bewigingsschatting laat de encoder de benodigde bitrate verlagen door te schatten waar een pixel heen ging."
78
+AMF.H264.MotionEstimation.None="Geen"
79
+AMF.H264.MotionEstimation.Half="Halve pixel"
80
+AMF.H264.MotionEstimation.Quarter="Kwartpixel"
81
+AMF.H264.MotionEstimation.Both="Halve en kwartpixel"
82
+AMF.H264.CodingType="Codeertype"
83
+AMF.H264.CodingType.Description="Welk codeertype gebruikt moet worden:\n* \@AMF.Util.Default\@ laat AMF bepalen (aanbevolen).\n* CALVC (Context-Adaptive Variable-Length Coding) is sneller, maar groter.\n* CABAC (Context-Adaptive Binary Arithmetic Coding) is langzamer, maar kleiner."
84
AMF.H264.MaximumLTRFrames="Maximale LTR Frames"
85
+AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) frames zijn een functie waarmee de encoder bepaalde frames in een reeks kan aanmerken als refereerbaar gedurende een lange tijd.\nLTR frames kunnen niet met B-frames gebruikt worden, en de encoder zal B-frames ook uitzetten als deze gebruikt worden."
86
+AMF.H264.MaximumAccessUnitSize="Maximale Access Unit grootte"
87
+AMF.H264.MaximumAccessUnitSize.Description="De maximale grootte voor een Access Unit voor een NAL."
88
+AMF.H264.HeaderInsertionSpacing="Header Insertion Spacing"
89
+AMF.H264.HeaderInsertionSpacing.Description="Hoeveel frames er tussen NAL headers moeten zitten."
90
+AMF.H264.WaitForTask="Wacht op taak"
91
+AMF.H264.WaitForTask.Description="Onbekend, experimenteel"
92
+AMF.H264.PreAnalysisPass="Pre-analyse pass"
93
+AMF.H264.PreAnalysisPass.Description="Onbekend, experimenteel"
94
+AMF.H264.VBAQ="VBAQ"
95
+AMF.H264.VBAQ.Description="Onbekend, experimenteel"
96
+AMF.H264.GOPSize="GOP-grootte"
97
+AMF.H264.GOPSize.Description="Onbekend, experimenteel"
98
+AMF.H264.GOPAlignment="GOP-uitlijning"
99
+AMF.H264.GOPAlignment.Description="Onbekend, experimenteel"
100
+AMF.H264.MaximumReferenceFrames="Maximale referentieframes"
101
+AMF.H264.MaximumReferenceFrames.Description="Onbekend, experimenteel"
102
+AMF.H264.SlicesPerFrame="Segmenten per frame"
103
+AMF.H264.SlicesPerFrame.Description="Hoeveel I-frame segmenten moeten er worden opgeslagen bij elke frame?\nEen waarde van nul laat de encoder bepalen.\nIntra-refresh encoding wordt gebruikt voor snellere weergave van en zoeken door video."
104
+AMF.H264.SliceMode="Slice-modus"
105
+AMF.H264.SliceMode.Description="Onbekend, experimenteel"
106
+AMF.H264.MaximumSliceSize="Maximale Segmentgrootte"
107
+AMF.H264.MaximumSliceSize.Description="Onbekend, experimenteel"
108
+AMF.H264.SliceControlMode="Slice Control Mode"
109
+AMF.H264.SliceControlMode.Description="Onbekend, experimenteel"
110
+AMF.H264.SliceControlSize="Slice Control Size"
111
+AMF.H264.SliceControlSize.Description="Onbekend, experimenteel"
112
+AMF.H264.IntraRefresh.NumberOfStripes="Intra-Refresh Number of Stripes"
113
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Onbekend, experimenteel"
114
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Intra-Refresh Macroblocks per Slot"
115
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Hoeveel Macroblocks moeten er in elk slot worden opgeslagen?\nEen waarde van 0 schakelt deze functie uit.\nIntra-Refresh encoding wordt gebruikt voor snellere weergave van en zoeken door video."
116
+AMF.H264.VideoAPI="Video API"
117
+AMF.H264.VideoAPI.Description="Welke API gebruikt moet worden voor encoden."
118
+AMF.H264.VideoAdapter="Videoadapter"
119
+AMF.H264.VideoAdapter.Description="Welke apter gebruikt moet worden voor encoding."
120
+AMF.H264.OpenCL="OpenCL"
121
+AMF.H264.OpenCL.Description="Moet de encoder OpenCL gebruiken om de individuele frames te leveren?"
122
+AMF.H264.View="Weergavemodus"
123
+AMF.H264.View.Description="Welke eigenschappen moeten getoond worden?\nHet gebruiken van '\@AMF.H264.View.Master\@' diskwalificeert je voor het ontvangen van ondersteuning."
124
+AMF.H264.View.Basic="Simpel"
125
+AMF.H264.View.Advanced="Geavanceerd"
126
+AMF.H264.View.Expert="Expert"
127
+AMF.H264.View.Master="Meester"
128
+AMF.H264.Debug="Debug"
129
+AMF.H264.Debug.Description="Schakel extra debug-logging in, dit moet actief zijn als je ondersteuning nodig hebt met deze encoder."
130
131
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/pl-PL.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/pl-PL.ini
Changed
13
1
2
AMF.H264.ScanType="Metoda skanowania"
3
AMF.H264.ScanType.Progressive="Progresywne"
4
AMF.H264.ScanType.Interlaced="Z przeplotem"
5
+AMF.H264.MotionEstimation="Szacowania ruchu"
6
+AMF.H264.MotionEstimation.None="Żaden"
7
+AMF.H264.MotionEstimation.Half="Pół piksela"
8
+AMF.H264.MotionEstimation.Quarter="Kwartał piksela"
9
+AMF.H264.MotionEstimation.Both="Pół i kwartał piksela"
10
AMF.H264.CodingType="Typ kodowania"
11
AMF.H264.MaximumAccessUnitSize="Maksymalny rozmiar Access Unit"
12
AMF.H264.MaximumAccessUnitSize.Description="Maksymalny rozmiar Access Unit. Wartość 0 umożliwia enkoderowi wybranie najlepszej wartości."
13
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/ru-RU.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/ru-RU.ini
Changed
98
1
2
AMF.H264.QualityPreset.Balanced="Баланс"
3
AMF.H264.QualityPreset.Quality="Качество"
4
AMF.H264.Profile="Профиль кодирования"
5
+AMF.H264.Profile.Description="Какой профиль формата H.264, использовать для кодирования, отсортированный от высочайшего качества для самой широкой поддержки."
6
AMF.H264.ProfileLevel="Уровень профиля"
7
AMF.H264.ProfileLevel.Description="Какой уровень профиля H.264 использовать для кодирования:\n- 'Автоматически' выбирает наиболее подходящий уровень под выбранную частоту и размер кадра,\n- '4.1' поддерживает 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' поддерживает 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' поддерживает 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' поддерживает 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' поддерживает 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
8
AMF.H264.RateControlMethod="Метод кодирования"
9
+AMF.H264.RateControlMethod.Description="Как оценить способ контроля должны быть использованы:\n- '\@AMF.H264.RateControlMethod.CQP\@' назначает фиксированные I-/P-/B-Значения кадра QP,\n- '\@AMF.H264.RateControlMethod.CBR\@' остается в данном целевом Битрейте (используя данные заполнителя) (рекомендуется для стрима),\n-'\@AMF.H264.RateControlMethod.VBR\@' остается ниже пика Битрейта,\n-'\@AMF.H264.RateControlMethod.VBR_LAT\@' остается близко к целевому Битрейту, если задержка GPU и нагрузки позволяют, в противном случае будут использовать более высокий Битрейт (рекомендуется для стрима)."
10
AMF.H264.RateControlMethod.CQP="CQP: постоянное качество"
11
AMF.H264.RateControlMethod.CBR="CBR: постоянный битрейт"
12
AMF.H264.RateControlMethod.VBR.Peak="VBR: переменный битрейт (Ограничение пиков)"
13
14
AMF.H264.QP.Maximum="Максимальное QP"
15
AMF.H264.QP.Maximum.Description="Наибольшее значение QP (Параметр квантования) для использования в кадре."
16
AMF.H264.QP.IFrame="I-кадр QP"
17
+AMF.H264.QP.IFrame.Description="Фиксированное значение QP используемое для I-Кадров."
18
AMF.H264.QP.PFrame="P-кадр QP"
19
+AMF.H264.QP.PFrame.Description="Фиксированное значение QP используемое для P-Кадров."
20
AMF.H264.QP.BFrame="B-кадр QP"
21
AMF.H264.QP.BFrame.Description="Фиксированное значение QP (Параметр квантования) для использования в B-Кадрах."
22
AMF.H264.VBVBuffer="Буфер VBV"
23
AMF.H264.VBVBuffer.Description="Какой метод следует использовать для определения Размера буфера VBV:\n- '\@AMF.Util.Automatic\@' рассчитывает размер ограничивающийся строгостью,\n- '\@AMF.Util.Manual\@' позволяет пользователю контролировать размер буфера.\nVBV (Верификатор буферизации видео) буфер используется некоторыми Методами управления скоростью, чтобы сохранить общий битрейт в пределах заданных ограничений."
24
AMF.H264.VBVBuffer.Strictness="Строгость буфера VBV"
25
+AMF.H264.VBVBuffer.Strictness.Description="Определяет жесткость буфера vbv, при 100% будет максимально жестким и 0% будет неограниченным."
26
AMF.H264.VBVBuffer.Size="Размер буфера VBV"
27
+AMF.H264.VBVBuffer.Size.Description="Размер буфера vbv, которая используется для управления скорости передачи данных в последовательности."
28
AMF.H264.VBVBuffer.Fullness="Заполнение буфера VBV"
29
AMF.H264.VBVBuffer.Fullness.Description="Изначальная степень заполнения VBV буфера, будет влиять только на первоначальную последовательность кодирования."
30
AMF.H264.FillerData="Данные наполнителя"
31
+AMF.H264.FillerData.Description="Включение данных наполнителей позволяет кодировщику сохранять, по крайней мере, целевой Битрейт, заполняя оставшееся пространство в последовательности с пустой информации."
32
AMF.H264.FrameSkipping="Пропуск кадров"
33
+AMF.H264.FrameSkipping.Description="Пропуск кадров позволяет кодировщику падение кадров в целях соответствия требованиям целевого битрейта.\nКогда в энкодере пропадает рамка вместо этого вставьте повторять-последний кадр NAL в стрим.\nМожет помочь с очень низким битрейтом."
34
AMF.H264.EnforceHRDCompatibility="Принудительная HRD совместимость"
35
+AMF.H264.EnforceHRDCompatibility.Description="Соблюдение гипотетическому эталону Декодера ограничения, которые ограничивают максимальное значение QP изменения в кадре."
36
AMF.H264.KeyframeInterval="Интервал ключевых кадров"
37
AMF.H264.KeyframeInterval.Description="Сколько секунд должен быть просадок кадров.\nТакже контролирует GOP Size."
38
AMF.H264.IDRPeriod="Период IDR"
39
AMF.H264.IDRPeriod.Description="Определяет расстояние между Мгновенными обновлениями декодирования (IDR) в кадрах. Так же контролирует размер последовательности GOP."
40
+AMF.H264.BFrame.Pattern="B-Кадры"
41
+AMF.H264.BFrame.Pattern.Description="Количество B-кадров использованное при кодировании.\nПоддерживается 2-й и 3-й VCE карт поколения. Негативно влияет на производительность кодирования."
42
+AMF.H264.BFrame.DeltaQP="QP дельта для B-Кадров"
43
+AMF.H264.BFrame.DeltaQP.Description="Значение дельты QP в последних I- или P-Кадров для нессылаемых B-Кадров."
44
+AMF.H264.BFrame.Reference="Ссылаемые B-Кадры"
45
+AMF.H264.BFrame.Reference.Description="Разрешить B-Кадру так же использовать B-Кадры как ссылки, вместо просто P- и I-Кадров."
46
+AMF.H264.BFrame.ReferenceDeltaQP="Дельта QP для ссылаемых B-кадров"
47
+AMF.H264.BFrame.ReferenceDeltaQP.Description="Значение дельты QP в последних I- или P-Кадров для ссылаемых B-Кадров."
48
AMF.H264.DeblockingFilter="Фильтр деблокинга"
49
AMF.H264.DeblockingFilter.Description="Устанавливает флаг, что декодер может использовать фильтр удаления блочности для прямой трансляции."
50
AMF.H264.ScanType="Развертка"
51
52
AMF.H264.MotionEstimation.Half="Пол-пиксельная"
53
AMF.H264.MotionEstimation.Quarter="Четверть-пиксельная"
54
AMF.H264.MotionEstimation.Both="Пол- & Четверть-пиксельная"
55
+AMF.H264.CodingType="Тип кодирования"
56
+AMF.H264.CodingType.Description="Какой тип кодирования использовать:\n* \@AMF.Util.Default\@ позволяет решать AMF (рекомендуется).\n* CALVC (контекстно-Адаптивное с переменной длинной кодирования) - это быстрее, но больше.\n* CABAC (контекстно-Адаптивное Двоичное арифметическое кодирование) - это медленнее, но меньше."
57
AMF.H264.MaximumLTRFrames="Максимум LTR-кадров"
58
+AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) Frames - функция позволяющая кодировщику помечать определенные кадры в последовательности как ссылаемые.\nLTR Frames не может использоваться B-кадры и энкодер будет отключать B-кадры, если они используются."
59
AMF.H264.MaximumAccessUnitSize="Максимальный Размер Блока Доступа"
60
AMF.H264.MaximumAccessUnitSize.Description="Большой размер блока доступа для NAL. Значение 0 позволяет регулировать, чтобы выбрать лучший."
61
AMF.H264.HeaderInsertionSpacing="Расстояние вставки заголовка"
62
AMF.H264.HeaderInsertionSpacing.Description="Сколько кадров должно быть между заголовками NAL. Не рекомендуется менять значение с 0 (автоматически)."
63
+AMF.H264.WaitForTask="Дождитесь Задач"
64
+AMF.H264.WaitForTask.Description="Неизвестно, Экспериментально"
65
+AMF.H264.PreAnalysisPass="Проход пред-анализа"
66
+AMF.H264.PreAnalysisPass.Description="Неизвестно, Экспериментально"
67
+AMF.H264.VBAQ="VBAQ"
68
+AMF.H264.VBAQ.Description="Неизвестно, Экспериментально"
69
+AMF.H264.GOPSize="Размер GOP"
70
+AMF.H264.GOPSize.Description="Неизвестно, Экспериментально"
71
+AMF.H264.GOPAlignment="Выравнивание GOP"
72
+AMF.H264.GOPAlignment.Description="Неизвестно, Экспериментально"
73
+AMF.H264.MaximumReferenceFrames="Максимум кадров-ссылок"
74
+AMF.H264.MaximumReferenceFrames.Description="Неизвестно, Экспериментально"
75
AMF.H264.SlicesPerFrame="Количество частей на кадр"
76
AMF.H264.SlicesPerFrame.Description="Сколько кусков I-Кадров должно быть сохранено в каждом кадре?\nЗначение 0 позволяет кодировщику выбирать \"на лету\".\nКодирование Intra-Refresh используется для быстрого воспроизведения и поиска при перемотке."
77
+AMF.H264.SliceMode="Режим Slice"
78
+AMF.H264.SliceMode.Description="Неизвестно, Экспериментально"
79
+AMF.H264.MaximumSliceSize="Максимальный размер Slice"
80
+AMF.H264.MaximumSliceSize.Description="Неизвестно, Экспериментально"
81
+AMF.H264.SliceControlMode="Режим управления Slice"
82
+AMF.H264.SliceControlMode.Description="Неизвестно, Экспериментально"
83
+AMF.H264.SliceControlSize="Размер элемента управления Slice"
84
+AMF.H264.SliceControlSize.Description="Неизвестно, Экспериментально"
85
+AMF.H264.IntraRefresh.NumberOfStripes="Число полос Intra-Refresh"
86
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Неизвестно, Экспериментально"
87
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Количество Intra-Refresh Макроблоков на слот"
88
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Сколько Макроблоков должно быть сохранено в каждом слоте?\nЗначение 0 отключает эту функцию.\nКодирование Intra-Refresh используется для быстрого воспроизведения и поиска при перемотке."
89
+AMF.H264.VideoAPI="Video API"
90
+AMF.H264.VideoAPI.Description="Какой API использовать для кодирования."
91
+AMF.H264.VideoAdapter="Видеоадаптер"
92
+AMF.H264.VideoAdapter.Description="Какой видеоадаптер использовать для кодирования."
93
+AMF.H264.OpenCL="OpenCL"
94
+AMF.H264.OpenCL.Description="Должен ли кодировщик использовать OpenCL для подтверждения индивидуальных кадров?"
95
AMF.H264.View="Режим просмотра"
96
AMF.H264.View.Description="Какие параметры должны быть видны. Вы не будете получать поддержку при использовании режимов 'Эксперт' и 'Мастер'."
97
AMF.H264.View.Basic="Обычный"
98
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/sv-SE.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/sv-SE.ini
Changed
60
1
2
AMF.H264.Bitrate.Target.Description="Bithastighet att försöka uppnå i den övergripande sekvensen."
3
AMF.H264.Bitrate.Peak="Maximal bithastighet"
4
AMF.H264.QP.Minimum="Minimal QP"
5
+AMF.H264.QP.Minimum.Description="Lägsta QP-värde att använda i en bildruta."
6
AMF.H264.QP.Maximum="Maximal QP"
7
+AMF.H264.QP.Maximum.Description="Högsta QP-värde att använda i en bildruta."
8
+AMF.H264.QP.IFrame="QP för I-bildrutor"
9
+AMF.H264.QP.IFrame.Description="Konstant QP-värde att använda för I-bildrutor."
10
+AMF.H264.QP.PFrame="QP för P-bildrutor"
11
+AMF.H264.QP.PFrame.Description="Konstant QP-värde att använda för P-bildrutor."
12
+AMF.H264.QP.BFrame="QP för B-bildrutor"
13
+AMF.H264.QP.BFrame.Description="Konstant QP-värde att använda för B-bildrutor."
14
AMF.H264.VBVBuffer="VBV-buffert"
15
AMF.H264.VBVBuffer.Description="Vilken metod som ska användas för att bestämma VBV-buffertens storlek:\n- '\@AMF.Util.Automatic\@' beräknar storleken med hjälp av en strikt begränsning,\n- '\@AMF.Util.Manual\@' låter användaren kontrollera storleken.\nVBV-buffertern (Video Buffering Verifier) används av vissa Rate Control Methods för att hålla den övergripande bithastigheten inom de angivna begränsningarna."
16
AMF.H264.VBVBuffer.Strictness="Strikthet för VBV-buffert"
17
+AMF.H264.VBVBuffer.Strictness.Description="Bestämmer noggrannheten för VBV-bufferten, där 100% är så noggrann som möjligt och 0% är gränslös."
18
AMF.H264.VBVBuffer.Size="VBV-buffertstorlek"
19
+AMF.H264.FillerData="Fyllningsdata"
20
+AMF.H264.FillerData.Description="Fyllningsdata låter kodaren behålla önskad bithastighet genom att fylla upp det återstående utrymmet i en sekvens med tom information."
21
AMF.H264.FrameSkipping="Hoppa över bildrutor"
22
AMF.H264.EnforceHRDCompatibility="Tvinga HRD-kompatibilitet"
23
+AMF.H264.KeyframeInterval="Intervall för keyframes"
24
+AMF.H264.KeyframeInterval.Description="Definierar avståndet mellan keyframes i sekunder. Kontrollerar även GOP-sekvensens storlek."
25
AMF.H264.IDRPeriod="IDR-period"
26
AMF.H264.IDRPeriod.Description="Definierar avståndet mellan Instantaneous Decoding Refreshes (IDR) i bildrutor. Kontrollerar även GOP-sekvensens storlek."
27
+AMF.H264.BFrame.Pattern="B-bildrutor"
28
AMF.H264.DeblockingFilter="Avblockningsfilter"
29
AMF.H264.ScanType="Typ av skanning"
30
AMF.H264.ScanType.Description="Vilken skanningsmetod att använda, lämna alltid detta på '\@AMF.H264.ScanType.Progressive\@'."
31
32
AMF.H264.CodingType="Kodningstyp"
33
AMF.H264.CodingType.Description="Vilken typ av kodning som ska användas:\n* \@AMF.Util.Default\@ låter AMF bestämma (rekommenderas).\n* CALVC (Context-Adaptive Variable-Length Coding) är snabbare, men större.\n* CABAC (Context-Adaptive Binary Arithmetic Coding) är långsammare, men mindre."
34
AMF.H264.MaximumLTRFrames="Maximalt antal LTR-bildrutor"
35
+AMF.H264.HeaderInsertionSpacing.Description="Hur många bildrutor som borde vara mellan NAL-headers."
36
+AMF.H264.WaitForTask="Väntar på arbetsuppgifter"
37
+AMF.H264.WaitForTask.Description="Okänd, experimentell"
38
+AMF.H264.PreAnalysisPass.Description="Okänd, experimentell"
39
+AMF.H264.VBAQ="VBAQ"
40
+AMF.H264.VBAQ.Description="Okänd, experimentell"
41
+AMF.H264.GOPSize="GOP-storlek"
42
+AMF.H264.GOPSize.Description="Okänd, experimentell"
43
+AMF.H264.GOPAlignment="GOP-justering"
44
+AMF.H264.GOPAlignment.Description="Okänd, experimentell"
45
+AMF.H264.MaximumReferenceFrames.Description="Okänd, experimentell"
46
+AMF.H264.SliceMode.Description="Okänd, experimentell"
47
+AMF.H264.MaximumSliceSize.Description="Okänd, experimentell"
48
+AMF.H264.SliceControlMode.Description="Okänd, experimentell"
49
+AMF.H264.SliceControlSize.Description="Okänd, experimentell"
50
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Okänd, experimentell"
51
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Hur många Macroblock bör lagras i varje plats?\nEtt värdet på 0 inaktiverar denna funktion.\nIntra-uppdaterade kodning används för snabbare uppspelning och sökning."
52
+AMF.H264.VideoAPI="Video-API"
53
+AMF.H264.VideoAPI.Description="Vilken API att använda för kodning."
54
+AMF.H264.VideoAdapter="Grafikkort"
55
+AMF.H264.OpenCL="OpenCL"
56
+AMF.H264.OpenCL.Description="Bör kodaren använda OpenCL för att skicka de individuella bildrutorna?"
57
AMF.H264.View="Visningsläge"
58
AMF.H264.View.Basic="Grundläggande"
59
AMF.H264.View.Advanced="Avancerad"
60
obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/tr-TR.ini
Added
54
1
2
+AMF.Util.Default="Varsayılan"
3
+AMF.Util.Automatic="Otomatik"
4
+AMF.Util.Manual="Elle"
5
+AMF.Util.Toggle.Disabled="Devre Dışı"
6
+AMF.Util.Toggle.Enabled="Etkin"
7
+AMF.H264.Preset="Ön Tanımlı"
8
+AMF.H264.Preset.ResetToDefaults="Varsayılan Ayarlara Geri Dön"
9
+AMF.H264.Preset.Recording="Kaydediliyor"
10
+AMF.H264.Preset.HighQuality="Yüksek Kalite"
11
+AMF.H264.Preset.Lossless="Kayıpsız"
12
+AMF.H264.Preset.Twitch="Twitch"
13
+AMF.H264.Preset.YouTube="YouTube"
14
+AMF.H264.Usage="Kullanım"
15
+AMF.H264.Usage.UltraLowLatency="Ultra Düşük Gecikme"
16
+AMF.H264.Usage.LowLatency="Düşük Gecikme"
17
+AMF.H264.QualityPreset.Speed="Hız"
18
+AMF.H264.QualityPreset.Balanced="Dengeli"
19
+AMF.H264.QualityPreset.Quality="Kalite"
20
+AMF.H264.Profile="Profil"
21
+AMF.H264.ProfileLevel="Profil Seviyesi"
22
+AMF.H264.Bitrate.Target="Hedef Bit Hızı"
23
+AMF.H264.QP.Minimum="Minimum QP"
24
+AMF.H264.QP.Maximum="Maksimum QP"
25
+AMF.H264.VBVBuffer.Size="VBV Arabellek Boyutu"
26
+AMF.H264.FrameSkipping="Kare Atlama"
27
+AMF.H264.ScanType="Tarama Türü"
28
+AMF.H264.MotionEstimation.None="Hiçbiri"
29
+AMF.H264.MotionEstimation.Half="Yarım Piksel"
30
+AMF.H264.MotionEstimation.Quarter="Çeyrek Piksel"
31
+AMF.H264.MotionEstimation.Both="Yarım ve Çeyrek Piksel"
32
+AMF.H264.WaitForTask.Description="Bilinmeyen, Deneysel"
33
+AMF.H264.PreAnalysisPass.Description="Bilinmeyen, Deneysel"
34
+AMF.H264.VBAQ="VBAQ"
35
+AMF.H264.VBAQ.Description="Bilinmeyen, Deneysel"
36
+AMF.H264.GOPSize.Description="Bilinmeyen, Deneysel"
37
+AMF.H264.GOPAlignment.Description="Bilinmeyen, Deneysel"
38
+AMF.H264.MaximumReferenceFrames.Description="Bilinmeyen, Deneysel"
39
+AMF.H264.SliceMode.Description="Bilinmeyen, Deneysel"
40
+AMF.H264.MaximumSliceSize.Description="Bilinmeyen, Deneysel"
41
+AMF.H264.SliceControlMode.Description="Bilinmeyen, Deneysel"
42
+AMF.H264.SliceControlSize.Description="Bilinmeyen, Deneysel"
43
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Bilinmeyen, Deneysel"
44
+AMF.H264.VideoAPI="Video API"
45
+AMF.H264.VideoAdapter="Ekran Kartı"
46
+AMF.H264.OpenCL="OpenCL"
47
+AMF.H264.View="Görüntüleme Modu"
48
+AMF.H264.View.Basic="Temel"
49
+AMF.H264.View.Advanced="Gelişmiş"
50
+AMF.H264.View.Expert="Uzman"
51
+AMF.H264.View.Master="Usta"
52
+AMF.H264.Debug="Hata Ayıklama"
53
+
54
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/uk-UA.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/uk-UA.ini
Changed
23
1
2
AMF.H264.BFrame.Pattern="B-кадри"
3
AMF.H264.BFrame.Pattern.Description="Визначає кількість послідовних B-кадрів у кодуванні.\nПідтримується принаймні 2-м та 3-м поколінням VCE карт. Маєнегативний вплив на продуктивність."
4
AMF.H264.BFrame.DeltaQP="B-кадри, відхил QP"
5
+AMF.H264.BFrame.DeltaQP.Description="Відхил QP (параметра квантування) для не опорних B-кадрів, по відношенню до I-кадрів та P-кадрів."
6
+AMF.H264.BFrame.Reference="B-кадри як опорні"
7
+AMF.H264.BFrame.Reference.Description="Дозволяє робити B-кадри опорними для інших B-кадрів в додаток до вже існуючих P- та I-кадрів."
8
+AMF.H264.BFrame.ReferenceDeltaQP="Відхил QP (параметра квантування) для опорних B-кадрів"
9
+AMF.H264.BFrame.ReferenceDeltaQP.Description="Відхил QP (параметра квантування) для опорних B-кадрів, по відношенню до I-кадрів та P-кадрів."
10
AMF.H264.DeblockingFilter="Деблокінг-фільтр"
11
AMF.H264.DeblockingFilter.Description="Встановлює позначку, що дозволяє декодеру використовувати Деблокінг-фільтр для цього відео."
12
AMF.H264.ScanType="Вид розгортки"
13
14
AMF.H264.SlicesPerFrame.Description="Скільки фрагментів I-кадрів буде у кожному кадру?\nНульове значення дозволяє енкодеру визначати цю кількість під час кодування самостійно.\nIntra-Refresh кодування використовується для більш швидкого відтворення та навігації."
15
AMF.H264.IntraRefresh.NumberOfStripes="Кількість рядків Intra-Refresh"
16
AMF.H264.IntraRefresh.MacroblocksPerSlot="Кількість Intra-Refresh макроблоків на слот"
17
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="Визначає скільки Intra-Refresh макроблоків на слот можна використовувати при кодуванні.\nНульове значення вимикає цю опцію.\nIntra-Refresh кодування використовується для більш швидкого відтворення та навігації."
18
+AMF.H264.VideoAPI="Відео API"
19
+AMF.H264.VideoAPI.Description="Визначає який API використовувати для кодування."
20
AMF.H264.VideoAdapter="Відеоадаптер"
21
AMF.H264.VideoAdapter.Description="Визначає який відеоадаптер використовувати для кодування."
22
AMF.H264.OpenCL="OpenCL"
23
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/vi-VN.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/vi-VN.ini
Changed
14
1
2
AMF.H264.MotionEstimation.Both="1/2 và 1/4 Pixel"
3
AMF.H264.CodingType="Coding Type"
4
AMF.H264.MaximumLTRFrames="LTR Frames tối đa"
5
+AMF.H264.GOPSize="Kích cỡ GOP"
6
+AMF.H264.GOPSize.Description="Không rõ, thử nghiệm"
7
AMF.H264.SlicesPerFrame="Lát cho mỗi khung hình"
8
+AMF.H264.VideoAPI="Video API"
9
+AMF.H264.VideoAdapter="Card đồ họa"
10
+AMF.H264.OpenCL="OpenCL"
11
AMF.H264.View="Chế độ xem"
12
AMF.H264.View.Basic="Cơ bản"
13
AMF.H264.View.Advanced="Nâng cao"
14
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Resources/locale/zh-TW.ini -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Resources/locale/zh-TW.ini
Changed
99
1
2
AMF.H264.Usage.UltraLowLatency="超低延遲"
3
AMF.H264.Usage.LowLatency="低延遲"
4
AMF.H264.QualityPreset="預設品質"
5
+AMF.H264.QualityPreset.Description="AMF 嘗試達成的預設品質:\n- '\@AMF.H264.QualityPreset.Speed\@' 為最快但最差的品質,\n- '\@AMF.H264.QualityPreset.Balanced\@' 為中間點,\n- '\@AMF.H264.QualityPreset.Quality\@' 在給定的位元速率下有最佳的品質。"
6
AMF.H264.QualityPreset.Speed="速度"
7
AMF.H264.QualityPreset.Balanced="平衡"
8
AMF.H264.QualityPreset.Quality="品質"
9
10
AMF.H264.QP.Maximum="最大 QP 值"
11
AMF.H264.QP.Maximum.Description="一個訊框中使用的最高 QP (量化參數) 值。"
12
AMF.H264.QP.IFrame="I-訊框 QP"
13
+AMF.H264.QP.IFrame.Description="I 訊框所使用的固定 QP 值"
14
AMF.H264.QP.PFrame="P-訊框 QP"
15
+AMF.H264.QP.PFrame.Description="P 訊框所使用的固定 QP 值"
16
AMF.H264.QP.BFrame="B-訊框 QP"
17
AMF.H264.QP.BFrame.Description="B-訊框使用的固定 QP (量化參數) 值。"
18
AMF.H264.VBVBuffer="VBV(Video Buffering Verifier) 緩衝區"
19
AMF.H264.VBVBuffer.Description="決定 VBV 緩衝區大小的方法:\n- '\@AMF.Util.Automatic\@' 根據嚴格性計算大小,\n- '\@AMF.Util.Manual\@' 允許使用者調整大小。\n 某些速率控制方法會使用 VBV (Video Buffering Verifier) 緩衝區讓整體的位元速率保持在給定的條件之內。"
20
AMF.H264.VBVBuffer.Strictness="VBV 緩衝區嚴格性"
21
+AMF.H264.VBVBuffer.Strictness.Description="決定 VBV 緩衝區的嚴密性,100% 表示盡可能的嚴格,0% 表示完全不限制。"
22
AMF.H264.VBVBuffer.Size="VBV 緩衝區大小"
23
+AMF.H264.VBVBuffer.Size.Description="VBV緩衝區的大小,這將用於過程中的位元速率控制"
24
AMF.H264.VBVBuffer.Fullness="初始 VBV 緩衝區填充度"
25
AMF.H264.VBVBuffer.Fullness.Description="VBV 緩衝區起始該多滿,將只影響編碼的起始。"
26
AMF.H264.FillerData="填塞空白資料"
27
AMF.H264.FillerData.Description="啟用填塞空白資料允許編碼器保持位元速率至少有目標位元速率,編碼器將會將不足的位元用空白訊息填滿"
28
AMF.H264.FrameSkipping="省略訊框"
29
+AMF.H264.FrameSkipping.Description="省略訊框允許編碼器在為了達成目標位元速率時省略部份訊框。\n當編碼器省略訊框時,他將插入重複上一個訊框的指令。\n對極低的目標位元速率有幫助。"
30
AMF.H264.EnforceHRDCompatibility="與 HRD 相容"
31
+AMF.H264.EnforceHRDCompatibility.Description="執行 Hypothetical Reference Decoder 限制,這將限制單一訊框內 QP 值的最大變化量。"
32
+AMF.H264.KeyframeInterval="關鍵訊框間隔"
33
+AMF.H264.KeyframeInterval.Description="以秒為單位,定義關鍵訊框之間的距離。同時也控制了 GOP 序列的大小。"
34
+AMF.H264.IDRPeriod="IDR 周期"
35
+AMF.H264.IDRPeriod.Description="以訊框為單位,定義瞬間解碼重新更新(Instantaneous Decoding Refreshes)間的距離。同時也控制了 GOP 序列的大小。"
36
+AMF.H264.BFrame.Pattern="B 訊框"
37
+AMF.H264.BFrame.Pattern.Description="編碼時使用的 B 訊框數量。\n搭載第二代和第三代影像編碼引擎的顯示卡支援此參數。對編碼效能會有不良影響。"
38
+AMF.H264.BFrame.DeltaQP="B 訊框的 QP 值變化"
39
+AMF.H264.BFrame.DeltaQP.Description="在沒使用可參照 B 訊框時, B 訊框與上一個I或P訊框間的QP值變化。"
40
+AMF.H264.BFrame.Reference="可參照 B 訊框"
41
+AMF.H264.BFrame.Reference.Description="允許 B 訊框也使用 B 訊框作為參照,而不限於 P 和 I 訊框。"
42
+AMF.H264.BFrame.ReferenceDeltaQP="可參照 B 訊框的 QP 值變化"
43
+AMF.H264.BFrame.ReferenceDeltaQP.Description="在使用可參照 B 訊框時,B 訊框與上一個 I 或 P 訊框間的 QP 值變化。"
44
AMF.H264.DeblockingFilter="去塊狀色斑濾鏡"
45
+AMF.H264.DeblockingFilter.Description="設定選項,讓解碼器可以使用去塊狀色斑濾鏡。"
46
AMF.H264.ScanType="掃描類型"
47
+AMF.H264.ScanType.Description="掃描方式,請確保此值為'\@AMF.H264.ScanType.Progressive\@'。"
48
AMF.H264.ScanType.Progressive="漸進式"
49
AMF.H264.ScanType.Interlaced="交错式"
50
AMF.H264.MotionEstimation="動態估算"
51
52
AMF.H264.MotionEstimation.Half="半像素"
53
AMF.H264.MotionEstimation.Quarter="四分之一像素"
54
AMF.H264.MotionEstimation.Both="半 & 四分之一像素"
55
-AMF.H264.MaximumLTRFrames="長期參照訊框(LTR)最大數量"
56
+AMF.H264.CodingType="Coding Type"
57
+AMF.H264.CodingType.Description="Which type of coding to use:\n* \@AMF.Util.Default\@ lets AMF decide (recommended).\n* CALVC (Context-Adaptive Variable-Length Coding) is faster, but larger.\n* CABAC (Context-Adaptive Binary Arithmetic Coding) is slower, but smaller."
58
+AMF.H264.MaximumLTRFrames="Maximum LTR Frames"
59
+AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) Frames are a feature that allows the encoder to flag certain frames in a sequence as referencable for a long time.\nLTR Frames can't be used with B-Frames and the encoder will disable B-Frames if these are used."
60
+AMF.H264.MaximumAccessUnitSize="Maximum Access Unit Size"
61
+AMF.H264.MaximumAccessUnitSize.Description="Largest Size of an Access Unit for a NAL."
62
+AMF.H264.HeaderInsertionSpacing="Header Insertion Spacing"
63
+AMF.H264.HeaderInsertionSpacing.Description="How many frames should be between NAL headers."
64
+AMF.H264.WaitForTask="Wait For Task"
65
+AMF.H264.WaitForTask.Description="Unknown, Experimental"
66
+AMF.H264.PreAnalysisPass="預分析階段"
67
+AMF.H264.PreAnalysisPass.Description="Unknown, Experimental"
68
+AMF.H264.VBAQ="VBAQ"
69
+AMF.H264.VBAQ.Description="Unknown, Experimental"
70
+AMF.H264.GOPSize="GOP Size"
71
+AMF.H264.GOPSize.Description="Unknown, Experimental"
72
+AMF.H264.GOPAlignment="GOP Alignment"
73
+AMF.H264.GOPAlignment.Description="Unknown, Experimental"
74
+AMF.H264.MaximumReferenceFrames="Maximum Reference Frames"
75
+AMF.H264.MaximumReferenceFrames.Description="Unknown, Experimental"
76
+AMF.H264.SlicesPerFrame="Slices Per Frame"
77
+AMF.H264.SlicesPerFrame.Description="How many I-Frame slices should be stored with each frame?\nA value of zero lets the encoder decide on the fly.\nIntra-Refresh encoding is used for faster playback and seeking."
78
+AMF.H264.SliceMode="Slice Mode"
79
+AMF.H264.SliceMode.Description="Unknown, Experimental"
80
+AMF.H264.MaximumSliceSize="Maximum Slice Size"
81
+AMF.H264.MaximumSliceSize.Description="Unknown, Experimental"
82
+AMF.H264.SliceControlMode="Slice Control Mode"
83
+AMF.H264.SliceControlMode.Description="Unknown, Experimental"
84
+AMF.H264.SliceControlSize="Slice Control Size"
85
+AMF.H264.SliceControlSize.Description="Unknown, Experimental"
86
+AMF.H264.IntraRefresh.NumberOfStripes="Intra-Refresh Number of Stripes"
87
+AMF.H264.IntraRefresh.NumberOfStripes.Description="Unknown, Experimental"
88
+AMF.H264.IntraRefresh.MacroblocksPerSlot="Intra-Refresh Macroblocks per Slot"
89
+AMF.H264.IntraRefresh.MacroblocksPerSlot.Description="How many Macroblocks should be stored in each slot?\nA value of 0 disables this feature.\nIntra-Refresh encoding is used for faster playback and seeking."
90
+AMF.H264.VideoAPI="影像 API"
91
+AMF.H264.VideoAPI.Description="用於編碼的API。"
92
+AMF.H264.VideoAdapter="顯示卡"
93
+AMF.H264.VideoAdapter.Description="用於編碼的顯示卡。"
94
+AMF.H264.OpenCL="OpenCL"
95
+AMF.H264.OpenCL.Description="編碼器應該使用 OpenCL 來發送各個訊框?"
96
AMF.H264.View="檢視模式"
97
AMF.H264.View.Description="該顯示哪些屬性?\n使用'\@AMF.H264.View.Master\@'時將不提供任何的支援。"
98
AMF.H264.View.Basic="基本"
99
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp
Changed
201
1
2
3
void Plugin::AMD::VCECapabilities::ReportAdapterCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter) {
4
auto inst = GetInstance();
5
- VCEEncoderType types[] = {
6
- VCEEncoderType_AVC,
7
- VCEEncoderType_SVC,
8
+ H264EncoderType types[] = {
9
+ H264EncoderType::AVC,
10
+ H264EncoderType::SVC,
11
};
12
13
- AMF_LOG_INFO("Capabilities for Device '%s' on API %s:",
14
- adapter.Name.c_str(),
15
- api->GetName().c_str());
16
+ AMF_LOG_INFO("Capabilities for %s adapter '%s':",
17
+ api->GetName().c_str(),
18
+ adapter.Name.c_str());
19
20
for (auto type : types) {
21
ReportAdapterTypeCapabilities(api, adapter, type);
22
}
23
}
24
25
-void Plugin::AMD::VCECapabilities::ReportAdapterTypeCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter, VCEEncoderType type) {
26
+void Plugin::AMD::VCECapabilities::ReportAdapterTypeCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter, H264EncoderType type) {
27
auto inst = GetInstance();
28
auto caps = inst->GetAdapterCapabilities(api, adapter, type);
29
30
AMF_LOG_INFO(" %s (Acceleration: %s)",
31
- (type == VCEEncoderType_AVC ? "AVC" : (type == VCEEncoderType_SVC ? "SVC" : (type == VCEEncoderType_HEVC ? "HEVC" : "Unknown"))),
32
+ (type == H264EncoderType::AVC ? "AVC" : (type == H264EncoderType::SVC ? "SVC" : "Unknown")),
33
(caps.acceleration_type == amf::AMF_ACCEL_SOFTWARE ? "Software" : (caps.acceleration_type == amf::AMF_ACCEL_GPU ? "GPU" : (caps.acceleration_type == amf::AMF_ACCEL_HARDWARE ? "Hardware" : "None")))
34
);
35
36
37
return;
38
39
AMF_LOG_INFO(" Limits");
40
- AMF_LOG_INFO(" Profile: %s", Plugin::Utility::ProfileAsString((VCEProfile)caps.maxProfile));
41
+ AMF_LOG_INFO(" Profile: %s", Plugin::Utility::ProfileAsString((H264Profile)caps.maxProfile));
42
AMF_LOG_INFO(" Profile Level: %ld.%ld", caps.maxProfileLevel / 10, caps.maxProfileLevel % 10);
43
AMF_LOG_INFO(" Bitrate: %ld", caps.maxBitrate);
44
AMF_LOG_INFO(" Reference Frames: %ld (min) - %ld (max)", caps.minReferenceFrames, caps.maxReferenceFrames);
45
- if (type == VCEEncoderType_SVC)
46
+ if (type == H264EncoderType::SVC)
47
AMF_LOG_INFO(" Temporal Layers: %ld", caps.maxTemporalLayers);
48
AMF_LOG_INFO(" Features");
49
AMF_LOG_INFO(" B-Frames: %s", caps.supportsBFrames ? "Supported" : "Not Supported");
50
51
ReportAdapterTypeIOCapabilities(api, adapter, type, true);
52
}
53
54
-void Plugin::AMD::VCECapabilities::ReportAdapterTypeIOCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter, VCEEncoderType type, bool output) {
55
+void Plugin::AMD::VCECapabilities::ReportAdapterTypeIOCapabilities(std::shared_ptr<Plugin::API::Base> api, Plugin::API::Adapter adapter, H264EncoderType type, bool output) {
56
auto amf = Plugin::AMD::AMF::GetInstance();
57
58
auto inst = GetInstance();
59
60
try {
61
adapters = api->EnumerateAdapters();
62
} catch (std::exception e) {
63
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unexpected exception while enumerating adapters for API '%s':", api->GetName());
64
- AMF_LOG_ERROR("%s", e.what());
65
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Exception while enumerating %s adapters: %s.",
66
+ api->GetName(),
67
+ e.what());
68
continue;
69
} catch (...) {
70
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unexpected critical exception while enumerating adapters for API '%s'.", api->GetName());
71
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Critical exception while enumerating %s adapters.",
72
+ api->GetName());
73
throw;
74
}
75
76
for (auto adapter : adapters) {
77
// Create AMF Instance
78
amf::AMFContextPtr amfContext;
79
- if (amfFactory->CreateContext(&amfContext) != AMF_OK) {
80
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> CreateContext failed for device '%s', error %ls (code %d).",
81
+ res = amfFactory->CreateContext(&amfContext);
82
+ if (res != AMF_OK) {
83
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unable to create context on %s adapter '%s', error %ls (code %lld).",
84
+ api->GetName().c_str(),
85
adapter.Name.c_str(),
86
amfInstance->GetTrace()->GetResultText(res),
87
res);
88
89
try {
90
apiInst = api->CreateInstanceOnAdapter(adapter);
91
} catch (std::exception e) {
92
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unexpected exception while testing adapter '%s' on API '%s':", adapter.Name, api->GetName());
93
- AMF_LOG_ERROR("%s", e.what());
94
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Exception while intializing %s adapter '%s': %s.",
95
+ api->GetName(),
96
+ adapter.Name,
97
+ e.what());
98
continue;
99
} catch (...) {
100
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unexpected critical exceptionwhile testing adapter '%s' on API '%s'.", adapter.Name, api->GetName());
101
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Critical exception while intializing %s adapter '%s'.",
102
+ api->GetName(),
103
+ adapter.Name);
104
throw;
105
}
106
switch (api->GetType()) {
107
- case Plugin::API::APIType_Direct3D11:
108
+ case Plugin::API::Type::Direct3D11:
109
res = amfContext->InitDX11(api->GetContextFromInstance(apiInst));
110
break;
111
- case Plugin::API::APIType_Direct3D9:
112
+ case Plugin::API::Type::Direct3D9:
113
res = amfContext->InitDX9(api->GetContextFromInstance(apiInst));
114
break;
115
- case Plugin::API::APIType_OpenGL:
116
+ case Plugin::API::Type::OpenGL:
117
res = amfContext->InitOpenGL(api->GetContextFromInstance(apiInst), nullptr, nullptr);
118
break;
119
default:
120
121
break;
122
}
123
if (res != AMF_OK) {
124
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Init failed for device '%s', error %ls (code %d).",
125
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Initialization failed for %s adapter '%s', error %ls (code %lld).",
126
+ api->GetName(),
127
adapter.Name.c_str(),
128
amfInstance->GetTrace()->GetResultText(res),
129
res);
130
continue;
131
}
132
133
- VCEEncoderType types[] = {
134
- VCEEncoderType_AVC,
135
- VCEEncoderType_SVC
136
+ H264EncoderType types[] = {
137
+ H264EncoderType::AVC,
138
+ H264EncoderType::SVC
139
};
140
for (auto type : types) {
141
VCEDeviceCapabilities devCaps = VCEDeviceCapabilities();
142
143
amf::AMFComponentPtr amfComponent;
144
- if (amfFactory->CreateComponent(amfContext,
145
+ res = amfFactory->CreateComponent(amfContext,
146
Plugin::Utility::VCEEncoderTypeAsAMF(type),
147
- &amfComponent) != AMF_OK) {
148
- AMF_LOG_ERROR("CreateComponent failed for device '%s' with codec '%s', error %ls (code %d).",
149
+ &amfComponent);
150
+ if (res != AMF_OK) {
151
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unable to create component for %s adapter '%s' with codec '%s', error %ls (code %lld).",
152
+ api->GetName(),
153
adapter.Name.c_str(),
154
Plugin::Utility::VCEEncoderTypeAsString(type),
155
- amfInstance->GetTrace()->GetResultText(res),
156
- res);
157
+ amfInstance->GetTrace()->GetResultText(res), res);
158
continue;
159
}
160
161
amf::AMFCapsPtr amfCaps;
162
res = amfComponent->GetCaps(&amfCaps);
163
if (res != AMF_OK) {
164
- AMF_LOG_ERROR("GetCaps failed for device '%s' with codec '%s', error %ls (code %d).",
165
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unable to query capabilities for %s adapter '%s' with codec '%s', error %ls (code %lld).",
166
+ api->GetName(),
167
adapter.Name.c_str(),
168
Plugin::Utility::VCEEncoderTypeAsString(type),
169
- amfInstance->GetTrace()->GetResultText(res),
170
- res);
171
+ amfInstance->GetTrace()->GetResultText(res), res);
172
amfComponent->Terminate();
173
continue;
174
}
175
176
amfCaps->GetProperty(AMF_VIDEO_ENCODER_CAP_FIXED_SLICE_MODE, &(devCaps.supportsFixedSliceMode));
177
amfCaps->GetProperty(AMF_VIDEO_ENCODER_CAP_NUM_OF_HW_INSTANCES, &(devCaps.maxNumOfHwInstances));
178
179
- if (GetIOCapability(false, amfCaps, &(devCaps.input)) != AMF_OK)
180
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> GetInputCaps failed for device '%s' with codec '%ls', error %ls (code %d).",
181
+ res = GetIOCapability(false, amfCaps, &(devCaps.input));
182
+ if (res != AMF_OK)
183
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unable to query input capabilities for %s adapter '%s' with codec '%s', error %ls (code %lld).",
184
+ api->GetName(),
185
adapter.Name.c_str(),
186
Plugin::Utility::VCEEncoderTypeAsString(type),
187
amfInstance->GetTrace()->GetResultText(res), res);
188
189
- if (GetIOCapability(true, amfCaps, &(devCaps.output)) != AMF_OK)
190
- AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> GetOutputCaps failed capabilities for device '%s' with codec '%ls', error %ls (code %d).",
191
+ res = GetIOCapability(true, amfCaps, &(devCaps.output));
192
+ if (res != AMF_OK)
193
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Unable to query output capabilities for %s adapter '%s' with codec '%s', error %ls (code %lld).",
194
+ api->GetName(),
195
adapter.Name.c_str(),
196
Plugin::Utility::VCEEncoderTypeAsString(type),
197
amfInstance->GetTrace()->GetResultText(res), res);
198
199
return true;
200
}
201
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/amf-h264.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/amf-h264.cpp
Changed
201
1
2
// Code
3
//////////////////////////////////////////////////////////////////////////
4
5
+#define AMF_PROPERTY_FRAME L"Frame"
6
+#define AMF_PROPERTY_TIME_SENDINPUT L"TimeSendInput"
7
+#define AMF_PROPERTY_TIME_CREATESURFACE L"TimeCreateSurface"
8
+#define AMF_PROPERTY_TIME_CONVERT L"TimeConvert"
9
+#define AMF_PROPERTY_TIME_ENCODE L"TimeEncode"
10
+
11
// Logging and Exception Helpers
12
static void FormatTextWithAMFError(std::vector<char>* buffer, const char* format, AMF_RESULT res) {
13
sprintf(buffer->data(), format, Plugin::AMD::AMF::GetInstance()->GetTrace()->GetResultText(res), res);
14
15
}
16
#endif
17
18
-Plugin::AMD::VCEEncoder::VCEEncoder(
19
- VCEEncoderType p_Type,
20
+Plugin::AMD::H264Encoder::H264Encoder(
21
+ H264EncoderType p_Type,
22
std::string p_VideoAPI,
23
uint64_t p_VideoAdapterId,
24
bool p_OpenCL,
25
- VCEColorFormat p_SurfaceFormat/* = VCESurfaceFormat_NV12*/
26
+ H264ColorFormat p_SurfaceFormat/* = VCESurfaceFormat_NV12*/
27
) {
28
#pragma region Assign Default Values
29
m_EncoderType = p_Type;
30
31
m_FrameRate.first = 30; m_FrameRate.second = 1;
32
m_FrameRateDivisor = ((double_t)m_FrameRate.first / (double_t)m_FrameRate.second);
33
m_FrameRateReverseDivisor = ((double_t)m_FrameRate.second / (double_t)m_FrameRate.first);
34
- m_InputQueueLimit = (uint32_t)(m_FrameRateDivisor);
35
+ m_InputQueueLimit = (uint32_t)(m_FrameRateDivisor * 3);
36
m_InputQueueLastSize = 0;
37
m_TimerPeriod = 1;
38
m_LastQueueWarnMessageTime = std::chrono::high_resolution_clock::time_point(std::chrono::high_resolution_clock::duration(0));
39
40
m_APIAdapter = m_API->GetAdapterById(p_VideoAdapterId & UINT_MAX, (p_VideoAdapterId >> 32) & UINT_MAX);
41
m_APIInstance = m_API->CreateInstanceOnAdapter(m_APIAdapter);
42
switch (m_API->GetType()) {
43
- case Plugin::API::APIType_Direct3D11:
44
- m_MemoryType = VCEMemoryType_DirectX11;
45
+ case Plugin::API::Type::Direct3D11:
46
+ m_MemoryType = H264MemoryType::DirectX11;
47
res = m_AMFContext->InitDX11(m_API->GetContextFromInstance(m_APIInstance));
48
break;
49
- case Plugin::API::APIType_Direct3D9:
50
- m_MemoryType = VCEMemoryType_DirectX9;
51
+ case Plugin::API::Type::Direct3D9:
52
+ m_MemoryType = H264MemoryType::DirectX11;
53
res = m_AMFContext->InitDX9(m_API->GetContextFromInstance(m_APIInstance));
54
break;
55
- case Plugin::API::APIType_OpenGL:
56
- m_MemoryType = VCEMemoryType_OpenGL;
57
+ case Plugin::API::Type::OpenGL:
58
+ m_MemoryType = H264MemoryType::OpenGL;
59
res = m_AMFContext->InitOpenGL(m_API->GetContextFromInstance(m_APIInstance), GetDesktopWindow(), nullptr);
60
break;
61
- case Plugin::API::APIType_Host:
62
- m_MemoryType = VCEMemoryType_Host;
63
+ case Plugin::API::Type::Host:
64
+ m_MemoryType = H264MemoryType::Host;
65
m_OpenCL = false;
66
break;
67
}
68
69
/// Create the AMF Converter component.
70
if (m_AMFFactory->CreateComponent(m_AMFContext, AMFVideoConverter, &m_AMFConverter) != AMF_OK)
71
ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Unable to create VideoConverter component, error %ls (code %ld).", res);
72
- if (m_AMFConverter->SetProperty(AMF_VIDEO_CONVERTER_MEMORY_TYPE, Utility::MemoryTypeAsAMF(m_MemoryType)) != AMF_OK)
73
- ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Memory Type not supported by VideoConverter component, error %ls (code %ld).", res);
74
- if (m_AMFConverter->SetProperty(AMF_VIDEO_CONVERTER_OUTPUT_FORMAT, Utility::SurfaceFormatAsAMF(m_ColorFormat)))
75
- ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Color Format not supported by VideoConverter component, error %ls (code %ld).", res);
76
77
#ifdef _DEBUG
78
printDebugInfo(m_AMFEncoder);
79
80
AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> Initialized.");
81
}
82
83
-Plugin::AMD::VCEEncoder::~VCEEncoder() {
84
+Plugin::AMD::H264Encoder::~H264Encoder() {
85
if (m_Flag_IsStarted)
86
Stop();
87
88
89
m_API = nullptr;
90
}
91
92
-void Plugin::AMD::VCEEncoder::Start() {
93
+void Plugin::AMD::H264Encoder::Start() {
94
+ AMF_RESULT res = AMF_UNEXPECTED;
95
+
96
// Set proper Timer resolution.
97
m_TimerPeriod = 1;
98
while (timeBeginPeriod(m_TimerPeriod) == TIMERR_NOCANDO) {
99
++m_TimerPeriod;
100
}
101
102
- // Create Encoder
103
- AMF_RESULT res = m_AMFEncoder->Init(Utility::SurfaceFormatAsAMF(m_ColorFormat),
104
- m_FrameSize.first, m_FrameSize.second);
105
- if (res != AMF_OK)
106
- ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Encoder initialization failed with error %ls (code %ld).", res);
107
-
108
- // Create Converter
109
- m_AMFConverter->SetProperty(AMF_VIDEO_CONVERTER_COLOR_PROFILE, this->GetColorProfile());
110
+ // Initialize Converter
111
+ if (m_AMFConverter->SetProperty(AMF_VIDEO_CONVERTER_MEMORY_TYPE, Utility::MemoryTypeAsAMF(m_MemoryType)) != AMF_OK)
112
+ ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Memory Type not supported by VideoConverter component, error %ls (code %ld).", res);
113
+ if (m_AMFConverter->SetProperty(AMF_VIDEO_CONVERTER_OUTPUT_FORMAT, amf::AMF_SURFACE_NV12))
114
+ ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Color Format not supported by VideoConverter component, error %ls (code %ld).", res);
115
+ m_AMFConverter->SetProperty(AMF_VIDEO_CONVERTER_COLOR_PROFILE, (size_t)this->GetColorProfile());
116
if (m_AMFConverter->SetProperty(L"FullRangeColor", this->IsFullRangeColorEnabled()) != AMF_OK)
117
m_AMFConverter->SetProperty(L"NominalRange", this->IsFullRangeColorEnabled());
118
-
119
res = m_AMFConverter->Init(Utility::SurfaceFormatAsAMF(m_ColorFormat), m_FrameSize.first, m_FrameSize.second);
120
if (res != AMF_OK)
121
ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Converter initialization failed with error %ls (code %ld).", res);
122
123
+ // Initialize Encoder
124
+ res = m_AMFEncoder->Init(amf::AMF_SURFACE_NV12,
125
+ m_FrameSize.first, m_FrameSize.second);
126
+ if (res != AMF_OK)
127
+ ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Encoder initialization failed with error %ls (code %ld).", res);
128
+
129
m_Flag_IsStarted = true;
130
131
// Threading
132
- m_Input.thread = std::thread(&(Plugin::AMD::VCEEncoder::InputThreadMain), this);
133
- m_Output.thread = std::thread(&(Plugin::AMD::VCEEncoder::OutputThreadMain), this);
134
+ m_Input.thread = std::thread(&(Plugin::AMD::H264Encoder::InputThreadMain), this);
135
+ m_Output.thread = std::thread(&(Plugin::AMD::H264Encoder::OutputThreadMain), this);
136
137
#ifdef _DEBUG
138
printDebugInfo(m_AMFEncoder);
139
#endif
140
}
141
142
-void Plugin::AMD::VCEEncoder::Restart() {
143
+void Plugin::AMD::H264Encoder::Restart() {
144
if (!m_Flag_IsStarted)
145
return;
146
147
148
ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Initialization failed with error %ls (code %ld).", res);
149
}
150
151
-void Plugin::AMD::VCEEncoder::Stop() {
152
+void Plugin::AMD::H264Encoder::Stop() {
153
// Restore Timer precision.
154
if (m_TimerPeriod != 0) {
155
timeEndPeriod(m_TimerPeriod);
156
157
std::queue<amf::AMFDataPtr>().swap(m_Output.queue);
158
m_PacketDataBuffer.clear();
159
m_ExtraDataBuffer.clear();
160
- }
161
+}
162
163
-bool Plugin::AMD::VCEEncoder::IsStarted() {
164
+bool Plugin::AMD::H264Encoder::IsStarted() {
165
return m_Flag_IsStarted;
166
}
167
168
-bool Plugin::AMD::VCEEncoder::SendInput(struct encoder_frame* frame) {
169
+bool Plugin::AMD::H264Encoder::SendInput(struct encoder_frame* frame) {
170
// Early-Exception if not encoding.
171
if (!m_Flag_IsStarted) {
172
const char* error = "<" __FUNCTION_NAME__ "> Attempted to send input while not running.";
173
174
throw std::exception(error);
175
}
176
177
+ /* Performance Monitoring */ std::chrono::high_resolution_clock::time_point tpSend = std::chrono::high_resolution_clock::now();
178
+
179
// Attempt to queue for 1 second (forces "Encoding overloaded" message to appear).
180
bool queueSuccessful = false;
181
auto queueStart = std::chrono::high_resolution_clock::now();
182
183
184
// Push into queue if it has room.
185
if (queueSize < m_InputQueueLimit) {
186
+ /* Performance Monitoring */ std::chrono::high_resolution_clock::time_point tpCreateSurface = std::chrono::high_resolution_clock::now();
187
amf::AMFSurfacePtr pAMFSurface = CreateSurfaceFromFrame(frame);
188
+ /* Performance Monitoring */ auto timeCreate = std::chrono::high_resolution_clock::now() - tpCreateSurface;
189
if (!pAMFSurface) {
190
AMF_LOG_ERROR("Unable copy frame for submission, terminating...");
191
return false;
192
} else {
193
pAMFSurface->SetPts(frame->pts / m_FrameRate.second);
194
- pAMFSurface->SetProperty(L"Frame", frame->pts);
195
pAMFSurface->SetDuration((uint64_t)ceil(m_FrameRateReverseDivisor * AMF_SECOND));
196
+ pAMFSurface->SetProperty(AMF_PROPERTY_FRAME, frame->pts);
197
+ /* Performance Monitoring */ pAMFSurface->SetProperty(AMF_PROPERTY_TIME_SENDINPUT, std::chrono::nanoseconds(tpSend.time_since_epoch()).count());
198
+ /* Performance Monitoring */ pAMFSurface->SetProperty(AMF_PROPERTY_TIME_CREATESURFACE, std::chrono::nanoseconds(timeCreate).count());
199
+ /* Performance Monitoring */ pAMFSurface->SetProperty(AMF_PROPERTY_TIME_CONVERT, 0);
200
+ /* Performance Monitoring */ pAMFSurface->SetProperty(AMF_PROPERTY_TIME_ENCODE, 0);
201
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/amf.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/amf.cpp
Changed
154
1
2
3
class CustomWriter : public amf::AMFTraceWriter {
4
public:
5
+
6
virtual void Write(const wchar_t* scope, const wchar_t* message) override {
7
const wchar_t* realmsg = &(message[(33 + wcslen(scope) + 2)]); // Skip Time & Scope
8
size_t msgLen = wcslen(realmsg) - (sizeof(wchar_t));
9
10
- blog(LOG_INFO, "[AMF Encoder] [%.*ls][%ls] %.*ls",
11
+ blog(LOG_INFO, "[AMF Encoder] [%.*ls][%ls] %.*ls",
12
12, &(message[11]),
13
- scope,
14
+ scope,
15
msgLen, realmsg);
16
}
17
18
virtual void Flush() override {}
19
-
20
- static std::shared_ptr<CustomWriter> GetInstance() {
21
- static std::shared_ptr<CustomWriter> __instance = std::make_shared<CustomWriter>();
22
- static std::mutex __mutex;
23
-
24
- const std::lock_guard<std::mutex> lock(__mutex);
25
- return __instance;
26
- }
27
};
28
29
std::shared_ptr<Plugin::AMD::AMF> Plugin::AMD::AMF::GetInstance() {
30
31
AMF_RESULT res = AMF_OK;
32
33
// Initialize AMF Library
34
- AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Initializing...");
35
+ AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> Initializing...");
36
37
#pragma region Null Class Members
38
m_TimerPeriod = 0;
39
40
DWORD error = GetLastError();
41
std::vector<char> buf(1024);
42
sprintf(buf.data(), "Unable to load '%ls', error code %ld.", AMF_DLL_NAME, error);
43
- AMF_LOG_ERROR("%s", buf.data());
44
- throw std::exception(buf.data(), error);
45
+ throw std::exception(buf.data());
46
}
47
- AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Loaded '%ls'.", AMF_DLL_NAME);
48
+ AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> Loaded '%ls'.", AMF_DLL_NAME);
49
#ifdef _WIN32 // Windows: Get Product Version
50
std::vector<char> verbuf(GetFileVersionInfoSizeW(AMF_DLL_NAME, nullptr));
51
GetFileVersionInfoW(AMF_DLL_NAME, 0, (DWORD)verbuf.size(), verbuf.data());
52
53
if (!AMFQueryVersion) {
54
DWORD error = GetLastError();
55
std::vector<char> buf(1024);
56
- sprintf(buf.data(), "<Plugin::AMD::AMF::AMF> Finding Address of Function '%s' failed with error code %ld.", AMF_QUERY_VERSION_FUNCTION_NAME, error);
57
- AMF_LOG_ERROR("%s", buf.data());
58
- throw std::exception(buf.data(), error);
59
+ sprintf(buf.data(), "<" __FUNCTION_NAME__ "> Finding Address of Function '%s' failed with error code %ld.", AMF_QUERY_VERSION_FUNCTION_NAME, error);
60
+ throw std::exception(buf.data());
61
}
62
/// Query Runtime Version
63
m_AMFVersion_Compiler = AMF_FULL_VERSION;
64
res = AMFQueryVersion(&m_AMFVersion_Runtime);
65
if (res != AMF_OK)
66
- ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Querying Version failed with error %ls (code %ld).", res);
67
+ ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Querying Version failed with error %ls (code %ld).", res);
68
#pragma endregion Query AMF Runtime Version
69
70
/// Find Function for Initializing AMF.
71
72
if (!AMFInit) {
73
DWORD error = GetLastError();
74
std::vector<char> buf(1024);
75
- sprintf(buf.data(), "<Plugin::AMD::AMF::AMF> Finding Address of Function '%s' failed with error code %ld.", AMF_INIT_FUNCTION_NAME, error);
76
- AMF_LOG_ERROR("%s", buf.data());
77
+ sprintf(buf.data(), "<" __FUNCTION_NAME__ "> Finding Address of Function '%s' failed with error code %ld.", AMF_INIT_FUNCTION_NAME, error);
78
throw std::exception(buf.data(), error);
79
} else {
80
res = AMFInit(m_AMFVersion_Runtime, &m_AMFFactory);
81
if (res != AMF_OK)
82
- ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Initializing AMF Library failed with error %ls (code %ld).", res);
83
+ ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Initializing AMF Library failed with error %ls (code %ld).", res);
84
}
85
- AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> AMF Library initialized.");
86
+ AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> AMF Library initialized.");
87
88
/// Retrieve Trace Object.
89
res = m_AMFFactory->GetTrace(&m_AMFTrace);
90
if (res != AMF_OK) {
91
- ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Retrieving Trace object failed with error %ls (code %ld).", res);
92
+ ThrowExceptionWithAMFError("<" __FUNCTION_NAME__ "> Retrieving Trace object failed with error %ls (code %ld).", res);
93
}
94
95
/// Retrieve Debug Object.
96
res = m_AMFFactory->GetDebug(&m_AMFDebug);
97
if (res != AMF_OK) {
98
- AMF_LOG_ERROR("<Plugin::AMD::AMF::AMF> Retrieving Debug object failed with error code %ls (code %ld).", res);
99
+ AMF_LOG_ERROR("<" __FUNCTION_NAME__ "> Retrieving Debug object failed with error code %ls (code %ld).", res);
100
throw std::exception("", res);
101
}
102
103
- /// Register Custom Trace Writer and disable Debug Tracing.
104
- m_AMFTrace->RegisterWriter(L"OBSWriter", CustomWriter::GetInstance().get(), true);
105
+ /// Register Trace Writer and disable Debug Tracing.
106
+ m_TraceWriter = new CustomWriter();
107
+ m_AMFTrace->RegisterWriter(L"OBSWriter", m_TraceWriter, true);
108
this->EnableDebugTrace(false);
109
110
// Log success
111
112
lProductVersionSize, pProductVersion
113
);
114
115
- AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Initialized.");
116
+ AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> Initialized.");
117
}
118
119
Plugin::AMD::AMF::~AMF() {
120
- AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Finalizing.");
121
+ AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> Finalizing.");
122
123
- /// Unregister Writer
124
- if (m_AMFTrace)
125
- m_AMFTrace->UnregisterWriter(L"OBSWriter");
126
+ /// Unregister Trace Writer
127
+ m_AMFTrace->UnregisterWriter(L"OBSWriter");
128
+ delete m_TraceWriter;
129
+ m_TraceWriter = nullptr;
130
131
// Free Library again
132
if (m_AMFModule)
133
134
AMFInit = nullptr;
135
#pragma endregion Null Class Members
136
137
- AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Finalized.");
138
+ AMF_LOG_DEBUG("<" __FUNCTION_NAME__ "> Finalized.");
139
}
140
141
amf::AMFFactory* Plugin::AMD::AMF::GetFactory() {
142
143
144
void Plugin::AMD::AMF::EnableDebugTrace(bool enable) {
145
if (!m_AMFTrace)
146
- throw std::exception(__FUNCTION_NAME__ " called without a AMFTrace object!");
147
+ throw std::exception("<" __FUNCTION_NAME__ "> called without a AMFTrace object!");
148
if (!m_AMFDebug)
149
- throw std::exception(__FUNCTION_NAME__ " called without a AMFDebug object!");
150
+ throw std::exception("<" __FUNCTION_NAME__ "> called without a AMFDebug object!");
151
152
m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_CONSOLE, false);
153
m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_CONSOLE, AMF_TRACE_ERROR);
154
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/api-d3d11.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/api-d3d11.cpp
Changed
10
1
2
delete instance;
3
}
4
5
-Plugin::API::APIType Plugin::API::Direct3D11::GetType() {
6
- return APIType_Direct3D11;
7
+Plugin::API::Type Plugin::API::Direct3D11::GetType() {
8
+ return Type::Direct3D11;
9
}
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/api-d3d9.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/api-d3d9.cpp
Changed
10
1
2
delete instance;
3
}
4
5
-Plugin::API::APIType Plugin::API::Direct3D9::GetType() {
6
- return APIType_Direct3D9;
7
+Plugin::API::Type Plugin::API::Direct3D9::GetType() {
8
+ return Type::Direct3D9;
9
}
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/api-host.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/api-host.cpp
Changed
12
1
2
return "Host";
3
}
4
5
-Plugin::API::APIType Plugin::API::Host::GetType() {
6
- return APIType_Host;
7
+Plugin::API::Type Plugin::API::Host::GetType() {
8
+ return Type::Host;
9
}
10
11
std::vector<Adapter> Plugin::API::Host::EnumerateAdapters() {
12
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/api-opengl.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/api-opengl.cpp
Changed
10
1
2
return nullptr;
3
}
4
5
-Plugin::API::APIType Plugin::API::OpenGL::GetType() {
6
- return APIType_OpenGL;
7
+Plugin::API::Type Plugin::API::OpenGL::GetType() {
8
+ return Type::OpenGL;
9
}
10
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/enc-h264.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/enc-h264.cpp
Changed
201
1
2
using namespace Plugin::AMD;
3
using namespace Plugin::Interface;
4
5
-enum Presets {
6
+enum class Presets : int8_t {
7
None = -1,
8
ResetToDefaults = 0,
9
Recording,
10
11
Twitch,
12
YouTube,
13
};
14
-enum ViewMode {
15
+enum class ViewMode :uint8_t {
16
Basic,
17
Advanced,
18
Expert,
19
20
bool haveAVCsupport = false;
21
for (auto api : Plugin::API::Base::EnumerateAPIs()) {
22
for (auto adapter : api->EnumerateAdapters()) {
23
- auto caps = VCECapabilities::GetInstance()->GetAdapterCapabilities(api, adapter, VCEEncoderType_AVC);
24
+ auto caps = VCECapabilities::GetInstance()->GetAdapterCapabilities(api, adapter, H264EncoderType::AVC);
25
if (caps.acceleration_type != amf::AMF_ACCEL_NOT_SUPPORTED)
26
haveAVCsupport = true;
27
}
28
29
AMF_LOG_ERROR("%s", e->what());
30
delete e;
31
} catch (...) {
32
- AMF_LOG_ERROR("Unknown Exception during start up.");
33
+ AMF_LOG_ERROR("Unknown Exception.");
34
}
35
if (enc)
36
delete enc;
37
38
AMF_LOG_ERROR("%s", e->what());
39
delete e;
40
} catch (...) {
41
- AMF_LOG_ERROR("Unknown Exception during shut down.");
42
+ AMF_LOG_ERROR("Unknown Exception.");
43
}
44
data = nullptr;
45
}
46
47
try {
48
return static_cast<Plugin::Interface::H264Interface*>(data)->encode(frame, packet, received_packet);
49
} catch (std::exception e) {
50
- AMF_LOG_ERROR("Exception: %s", e.what());
51
- AMF_LOG_ERROR("Unable to encode, see log for more information.");
52
- return false;
53
+ AMF_LOG_ERROR("%s", e.what());
54
+ } catch (std::exception* e) {
55
+ AMF_LOG_ERROR("%s", e->what());
56
+ delete e;
57
} catch (...) {
58
+ AMF_LOG_ERROR("Unknown Exception.");
59
throw;
60
}
61
+ return false;
62
}
63
64
void Plugin::Interface::H264Interface::get_defaults(obs_data_t *data) {
65
66
#pragma endregion OBS - Enforce Streaming Service Restrictions
67
68
// Preset
69
- obs_data_set_default_int(data, AMF_H264_PRESET, -1);
70
+ obs_data_set_default_int(data, AMF_H264_PRESET, static_cast<int32_t>(Presets::None));
71
72
// Static Properties
73
- obs_data_set_default_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
74
- obs_data_set_default_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Balanced);
75
- obs_data_set_default_int(data, AMF_H264_PROFILE, VCEProfile_Main);
76
- obs_data_set_default_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
77
+ obs_data_set_default_int(data, AMF_H264_USAGE, static_cast<int32_t>(H264Usage::Transcoding));
78
+ obs_data_set_default_int(data, AMF_H264_QUALITY_PRESET, static_cast<int32_t>(H264QualityPreset::Balanced));
79
+ obs_data_set_default_int(data, AMF_H264_PROFILE, static_cast<int32_t>(H264Profile::Main));
80
+ obs_data_set_default_int(data, AMF_H264_PROFILELEVEL, static_cast<int32_t>(H264ProfileLevel::Automatic));
81
82
// Rate Control Properties
83
obs_data_set_int(data, "last" vstr(AMF_H264_RATECONTROLMETHOD), -1);
84
- obs_data_set_default_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
85
+ obs_data_set_default_int(data, AMF_H264_RATECONTROLMETHOD, static_cast<int32_t>(H264RateControlMethod::ConstantBitrate));
86
obs_data_set_default_int(data, AMF_H264_BITRATE_TARGET, 3500);
87
obs_data_set_default_int(data, AMF_H264_BITRATE_PEAK, 9000);
88
- obs_data_set_default_int(data, AMF_H264_QP_MINIMUM, 0);
89
+ obs_data_set_default_int(data, AMF_H264_QP_MINIMUM, 11);
90
obs_data_set_default_int(data, AMF_H264_QP_MAXIMUM, 51);
91
obs_data_set_default_int(data, AMF_H264_QP_IFRAME, 22);
92
obs_data_set_default_int(data, AMF_H264_QP_PFRAME, 22);
93
94
obs_data_set_int(data, "last" vstr(AMF_H264_VBVBUFFER), -1);
95
obs_data_set_default_int(data, AMF_H264_VBVBUFFER, 0);
96
obs_data_set_default_int(data, AMF_H264_VBVBUFFER_SIZE, 3500);
97
- obs_data_set_default_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 0);
98
+ obs_data_set_default_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 50);
99
obs_data_set_default_double(data, AMF_H264_VBVBUFFER_FULLNESS, 100);
100
obs_data_set_default_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
101
obs_data_set_default_int(data, AMF_H264_FILLERDATA, 1);
102
103
obs_data_set_default_double(data, AMF_H264_KEYFRAME_INTERVAL, 2);
104
obs_data_set_default_int(data, AMF_H264_IDR_PERIOD, 60);
105
obs_data_set_int(data, "last" vstr(AMF_H264_BFRAME_PATTERN), -1);
106
- obs_data_set_default_int(data, AMF_H264_BFRAME_PATTERN, VCEBFramePattern_None);
107
+ obs_data_set_default_int(data, AMF_H264_BFRAME_PATTERN, static_cast<int32_t>(H264BFramePattern::None));
108
obs_data_set_int(data, "last" vstr(AMF_H264_BFRAME_REFERENCE), -1);
109
obs_data_set_default_int(data, AMF_H264_BFRAME_REFERENCE, 0);
110
obs_data_set_default_int(data, AMF_H264_BFRAME_REFERENCEDELTAQP, 2);
111
112
obs_data_set_default_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
113
114
// Miscellaneous Control Properties
115
- obs_data_set_default_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
116
+ obs_data_set_default_int(data, AMF_H264_SCANTYPE, static_cast<int32_t>(H264ScanType::Progressive));
117
obs_data_set_default_int(data, AMF_H264_MOTIONESTIMATION, 3);
118
119
// Experimental Properties
120
obs_data_set_default_int(data, AMF_H264_MAXIMUMLTRFRAMES, 0);
121
- obs_data_set_default_int(data, AMF_H264_CODINGTYPE, VCECodingType_Default);
122
+ obs_data_set_default_int(data, AMF_H264_CODINGTYPE, static_cast<int32_t>(H264CodingType::Default));
123
obs_data_set_default_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
124
obs_data_set_default_int(data, AMF_H264_SLICESPERFRAME, 1);
125
- obs_data_set_default_int(data, AMF_H264_SLICEMODE, VCESliceMode_Horizontal);
126
+ obs_data_set_default_int(data, AMF_H264_SLICEMODE, static_cast<int32_t>(H264SliceMode::Horizontal));
127
obs_data_set_default_int(data, AMF_H264_MAXIMUMSLICESIZE, INT_MAX);
128
- obs_data_set_default_int(data, AMF_H264_SLICECONTROLMODE, VCESliceControlMode_Off);
129
+ obs_data_set_default_int(data, AMF_H264_SLICECONTROLMODE, static_cast<int32_t>(H264SliceControlMode::Off));
130
obs_data_set_default_int(data, AMF_H264_SLICECONTROLSIZE, 0);
131
obs_data_set_default_int(data, AMF_H264_INTRAREFRESH_NUMBEROFSTRIPES, 0);
132
obs_data_set_default_int(data, AMF_H264_INTRAREFRESH_MACROBLOCKSPERSLOT, 0);
133
134
obs_data_set_default_int(data, AMF_H264_VIDEOADAPTER, 0);
135
obs_data_set_default_int(data, AMF_H264_OPENCL, 0);
136
obs_data_set_int(data, "last" vstr(AMF_H264_VIEW), -1);
137
- obs_data_set_default_int(data, AMF_H264_VIEW, ViewMode::Basic);
138
+ obs_data_set_default_int(data, AMF_H264_VIEW, static_cast<int32_t>(ViewMode::Basic));
139
obs_data_set_default_bool(data, AMF_H264_DEBUG, false);
140
+ obs_data_set_default_int(data, AMF_H264_VERSION, 0x0001000400030005ull);
141
}
142
143
static void fill_api_list(obs_property_t* p) {
144
145
p = obs_properties_add_list(props, AMF_H264_PRESET, TEXT_T(AMF_H264_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
146
obs_property_set_modified_callback(p, properties_modified);
147
obs_property_list_add_int(p, "", -1);
148
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_RESETTODEFAULTS), Presets::ResetToDefaults);
149
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_RECORDING), Presets::Recording);
150
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_HIGHQUALITY), Presets::HighQuality);
151
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_INDISTINGUISHABLE), Presets::Indistinguishable);
152
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_LOSSLESS), Presets::Lossless);
153
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_TWITCH), Presets::Twitch);
154
- obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_YOUTUBE), Presets::YouTube);
155
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_RESETTODEFAULTS), static_cast<int32_t>(Presets::ResetToDefaults));
156
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_RECORDING), static_cast<int32_t>(Presets::Recording));
157
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_HIGHQUALITY), static_cast<int32_t>(Presets::HighQuality));
158
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_INDISTINGUISHABLE), static_cast<int32_t>(Presets::Indistinguishable));
159
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_LOSSLESS), static_cast<int32_t>(Presets::Lossless));
160
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_TWITCH), static_cast<int32_t>(Presets::Twitch));
161
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_PRESET_YOUTUBE), static_cast<int32_t>(Presets::YouTube));
162
#pragma endregion Preset
163
164
#pragma region Static Properties
165
#pragma region Usage
166
p = obs_properties_add_list(props, AMF_H264_USAGE, TEXT_T(AMF_H264_USAGE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
167
obs_property_set_long_description(p, TEXT_T(AMF_H264_USAGE_DESCRIPTION));
168
- obs_property_list_add_int(p, TEXT_T(AMF_H264_USAGE_TRANSCODING), VCEUsage_Transcoding);
169
- obs_property_list_add_int(p, TEXT_T(AMF_H264_USAGE_ULTRALOWLATENCY), VCEUsage_UltraLowLatency);
170
- obs_property_list_add_int(p, TEXT_T(AMF_H264_USAGE_LOWLATENCY), VCEUsage_LowLatency);
171
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_USAGE_TRANSCODING), static_cast<int32_t>(H264Usage::Transcoding));
172
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_USAGE_ULTRALOWLATENCY), static_cast<int32_t>(H264Usage::UltraLowLatency));
173
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_USAGE_LOWLATENCY), static_cast<int32_t>(H264Usage::LowLatency));
174
// Webcam requires SVC, which is not something OBSs properties API makes easy to support. Nor would it look like anything usable.
175
//obs_property_list_add_int(list, TEXT_T(AMF_H264_USAGE_WEBCAM), VCEUsage_Webcam);
176
#pragma endregion Usage
177
178
#pragma region Quality Preset
179
p = obs_properties_add_list(props, AMF_H264_QUALITY_PRESET, TEXT_T(AMF_H264_QUALITY_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
180
obs_property_set_long_description(p, TEXT_T(AMF_H264_QUALITY_PRESET_DESCRIPTION));
181
- obs_property_list_add_int(p, TEXT_T(AMF_H264_QUALITY_PRESET_SPEED), VCEQualityPreset_Speed);
182
- obs_property_list_add_int(p, TEXT_T(AMF_H264_QUALITY_PRESET_BALANCED), VCEQualityPreset_Balanced);
183
- obs_property_list_add_int(p, TEXT_T(AMF_H264_QUALITY_PRESET_QUALITY), VCEQualityPreset_Quality);
184
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_QUALITY_PRESET_SPEED), static_cast<int32_t>(H264QualityPreset::Speed));
185
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_QUALITY_PRESET_BALANCED), static_cast<int32_t>(H264QualityPreset::Balanced));
186
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_QUALITY_PRESET_QUALITY), static_cast<int32_t>(H264QualityPreset::Quality));
187
#pragma endregion Quality Preset
188
189
#pragma region Profile
190
191
#pragma region Method
192
p = obs_properties_add_list(props, AMF_H264_RATECONTROLMETHOD, TEXT_T(AMF_H264_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
193
obs_property_set_long_description(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_DESCRIPTION));
194
- obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_CQP), VCERateControlMethod_ConstantQP);
195
- obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_CBR), VCERateControlMethod_ConstantBitrate);
196
- obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_VBR), VCERateControlMethod_VariableBitrate_PeakConstrained);
197
- obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_VBR_LAT), VCERateControlMethod_VariableBitrate_LatencyConstrained);
198
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_CQP), static_cast<int32_t>(H264RateControlMethod::ConstantQP));
199
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_CBR), static_cast<int32_t>(H264RateControlMethod::ConstantBitrate));
200
+ obs_property_list_add_int(p, TEXT_T(AMF_H264_RATECONTROLMETHOD_VBR), static_cast<int32_t>(H264RateControlMethod::VariableBitrate_PeakConstrained));
201
obs-studio-0.17.0.tar.xz/plugins/enc-amf/Source/misc-util.cpp -> obs-studio-17.0.1.tar.xz/plugins/enc-amf/Source/misc-util.cpp
Changed
201
1
2
3
namespace Plugin {
4
namespace Utility {
5
- VCEProfileLevel inline GetMinimumProfileLevel(std::pair<uint32_t, uint32_t> frameSize, std::pair<uint32_t, uint32_t> frameRate) {
6
+ H264ProfileLevel inline GetMinimumProfileLevel(std::pair<uint32_t, uint32_t> frameSize, std::pair<uint32_t, uint32_t> frameRate) {
7
typedef std::pair<uint32_t, uint32_t> levelRestriction;
8
- typedef std::pair<VCEProfileLevel, levelRestriction> level;
9
+ typedef std::pair<H264ProfileLevel, levelRestriction> level;
10
11
static const level profileLevelLimit[] = { // [Level, [Samples, Samples_Per_Sec]]
12
- level(VCEProfileLevel_10, levelRestriction(25344, 380160)),
13
- level(VCEProfileLevel_11, levelRestriction(101376, 768000)),
14
- level(VCEProfileLevel_12, levelRestriction(101376, 1536000)),
15
- level(VCEProfileLevel_13, levelRestriction(101376, 3041280)),
16
- level(VCEProfileLevel_20, levelRestriction(101376, 3041280)),
17
- level(VCEProfileLevel_21, levelRestriction(202752, 5068800)),
18
- level(VCEProfileLevel_22, levelRestriction(414720, 5184000)),
19
- level(VCEProfileLevel_30, levelRestriction(414720, 10368000)),
20
- level(VCEProfileLevel_31, levelRestriction(921600, 27648000)),
21
- level(VCEProfileLevel_32, levelRestriction(1310720, 55296000)),
22
- //level(VCEProfileLevel_40, levelRestriction(2097152, 62914560)), // Technically identical to 4.1, but backwards compatible.
23
- level(VCEProfileLevel_41, levelRestriction(2097152, 62914560)),
24
- level(VCEProfileLevel_42, levelRestriction(2228224, 133693440)),
25
- level(VCEProfileLevel_50, levelRestriction(5652480, 150994944)),
26
- level(VCEProfileLevel_51, levelRestriction(9437184, 251658240)),
27
- level(VCEProfileLevel_52, levelRestriction(9437184, 530841600)),
28
- level((VCEProfileLevel)-1, levelRestriction(0, 0))
29
+ level(H264ProfileLevel::L10, levelRestriction(25344, 380160)),
30
+ level(H264ProfileLevel::L11, levelRestriction(101376, 768000)),
31
+ level(H264ProfileLevel::L12, levelRestriction(101376, 1536000)),
32
+ level(H264ProfileLevel::L13, levelRestriction(101376, 3041280)),
33
+ level(H264ProfileLevel::L20, levelRestriction(101376, 3041280)),
34
+ level(H264ProfileLevel::L21, levelRestriction(202752, 5068800)),
35
+ level(H264ProfileLevel::L22, levelRestriction(414720, 5184000)),
36
+ level(H264ProfileLevel::L30, levelRestriction(414720, 10368000)),
37
+ level(H264ProfileLevel::L31, levelRestriction(921600, 27648000)),
38
+ level(H264ProfileLevel::L32, levelRestriction(1310720, 55296000)),
39
+ //level(H264ProfileLevel::40, levelRestriction(2097152, 62914560)), // Technically identical to 4.1, but backwards compatible.
40
+ level(H264ProfileLevel::L41, levelRestriction(2097152, 62914560)),
41
+ level(H264ProfileLevel::L42, levelRestriction(2228224, 133693440)),
42
+ level(H264ProfileLevel::L50, levelRestriction(5652480, 150994944)),
43
+ level(H264ProfileLevel::L51, levelRestriction(9437184, 251658240)),
44
+ level(H264ProfileLevel::L52, levelRestriction(9437184, 530841600)),
45
+ level((H264ProfileLevel)-1, levelRestriction(0, 0))
46
};
47
48
uint32_t samples = frameSize.first * frameSize.second;
49
uint32_t samples_sec = (uint32_t)ceil((double_t)samples * ((double_t)frameRate.first / (double_t)frameRate.second));
50
51
level curLevel = profileLevelLimit[0];
52
- for (uint32_t index = 0; curLevel.first != -1; index++) {
53
+ for (uint32_t index = 0; (int32_t)curLevel.first != -1; index++) {
54
curLevel = profileLevelLimit[index];
55
56
if (samples > curLevel.second.first)
57
58
59
return curLevel.first;
60
}
61
- return VCEProfileLevel_52;
62
+ return H264ProfileLevel::L52;
63
}
64
65
#pragma region VCEEncoderType
66
- inline const char* VCEEncoderTypeAsString(VCEEncoderType type) {
67
+ inline const char* VCEEncoderTypeAsString(H264EncoderType type) {
68
const char* types[] = {
69
"AVC",
70
"SVC",
71
"HEVC"
72
};
73
- return types[type];
74
+ return types[(uint8_t)type];
75
}
76
- inline const wchar_t* VCEEncoderTypeAsAMF(VCEEncoderType type) {
77
+ inline const wchar_t* VCEEncoderTypeAsAMF(H264EncoderType type) {
78
const wchar_t* types[] = {
79
AMFVideoEncoderVCE_AVC,
80
AMFVideoEncoderVCE_SVC,
81
L"AMFVideoEncoderHW_HEVC"
82
};
83
- return types[type];
84
+ return types[(uint8_t)type];
85
}
86
#pragma endregion VCEEncoderType
87
#pragma region VCEMemoryType
88
- inline const char* MemoryTypeAsString(VCEMemoryType memoryType) {
89
+ inline const char* MemoryTypeAsString(H264MemoryType memoryType) {
90
static const char* memoryTypeToString[] = {
91
"Host",
92
"DirectX9",
93
"DirectX11",
94
"OpenGL"
95
};
96
- return memoryTypeToString[memoryType];
97
+ return memoryTypeToString[(uint8_t)memoryType];
98
}
99
- inline amf::AMF_MEMORY_TYPE MemoryTypeAsAMF(VCEMemoryType memoryType) {
100
+ inline amf::AMF_MEMORY_TYPE MemoryTypeAsAMF(H264MemoryType memoryType) {
101
static amf::AMF_MEMORY_TYPE memoryTypeToAMF[] = {
102
amf::AMF_MEMORY_HOST,
103
amf::AMF_MEMORY_DX9,
104
amf::AMF_MEMORY_DX11,
105
amf::AMF_MEMORY_OPENGL,
106
};
107
- return memoryTypeToAMF[memoryType];
108
+ return memoryTypeToAMF[(uint8_t)memoryType];
109
}
110
#pragma endregion VCEMemoryType
111
#pragma region VCESurfaceFormat
112
- inline const char* SurfaceFormatAsString(VCEColorFormat surfaceFormat) {
113
+ inline const char* SurfaceFormatAsString(H264ColorFormat surfaceFormat) {
114
static const char* surfaceFormatToString[] = {
115
"NV12",
116
"I420",
117
118
"RGBA",
119
"GRAY",
120
};
121
- return surfaceFormatToString[surfaceFormat];
122
+ return surfaceFormatToString[(uint8_t)surfaceFormat];
123
}
124
- inline amf::AMF_SURFACE_FORMAT SurfaceFormatAsAMF(VCEColorFormat surfaceFormat) {
125
+ inline amf::AMF_SURFACE_FORMAT SurfaceFormatAsAMF(H264ColorFormat surfaceFormat) {
126
static amf::AMF_SURFACE_FORMAT surfaceFormatToAMF[] = {
127
// 4:2:0 Formats
128
amf::AMF_SURFACE_NV12,
129
130
// Other
131
amf::AMF_SURFACE_GRAY8,
132
};
133
- return surfaceFormatToAMF[surfaceFormat];
134
+ return surfaceFormatToAMF[(uint8_t)surfaceFormat];
135
}
136
#pragma endregion VCESurfaceFormat
137
#pragma region VCEUsage
138
- inline const char* UsageAsString(VCEUsage usage) {
139
+ inline const char* UsageAsString(H264Usage usage) {
140
static const char* usageToString[] = {
141
"Transcoding",
142
"Ultra Low Latency",
143
"Low Latency",
144
"Webcam"
145
};
146
- return usageToString[usage];
147
+ return usageToString[(uint8_t)usage];
148
}
149
- inline AMF_VIDEO_ENCODER_USAGE_ENUM UsageAsAMF(VCEUsage usage) {
150
+ inline AMF_VIDEO_ENCODER_USAGE_ENUM UsageAsAMF(H264Usage usage) {
151
static AMF_VIDEO_ENCODER_USAGE_ENUM usageToAMF[] = {
152
AMF_VIDEO_ENCODER_USAGE_TRANSCONDING,
153
AMF_VIDEO_ENCODER_USAGE_ULTRA_LOW_LATENCY,
154
AMF_VIDEO_ENCODER_USAGE_LOW_LATENCY,
155
AMF_VIDEO_ENCODER_USAGE_WEBCAM,
156
};
157
- return usageToAMF[usage];
158
+ return usageToAMF[(uint8_t)usage];
159
}
160
- inline VCEUsage UsageFromAMF(uint32_t usage) {
161
- static VCEUsage usageFromAMF[] = {
162
- VCEUsage_Transcoding,
163
- VCEUsage_UltraLowLatency,
164
- VCEUsage_LowLatency,
165
- VCEUsage_Webcam,
166
+ inline H264Usage UsageFromAMF(uint32_t usage) {
167
+ static H264Usage usageFromAMF[] = {
168
+ H264Usage::Transcoding,
169
+ H264Usage::UltraLowLatency,
170
+ H264Usage::LowLatency,
171
+ H264Usage::Webcam,
172
};
173
- return usageFromAMF[usage];
174
+ return usageFromAMF[(uint8_t)usage];
175
}
176
#pragma endregion VCEUsage
177
#pragma region VCEQualityPreset
178
- inline const char* QualityPresetAsString(VCEQualityPreset preset) {
179
+ inline const char* QualityPresetAsString(H264QualityPreset preset) {
180
static const char* qualityPresetToString[] = {
181
"Speed",
182
"Balanced",
183
"Quality"
184
};
185
- return qualityPresetToString[preset];
186
+ return qualityPresetToString[(uint8_t)preset];
187
}
188
#pragma endregion VCEQualityPreset
189
#pragma region VCEProfile
190
- inline const char* ProfileAsString(VCEProfile profile) {
191
+ inline const char* ProfileAsString(H264Profile profile) {
192
switch (profile) {
193
- case VCEProfile_Baseline:
194
+ case H264Profile::Baseline:
195
return "Baseline";
196
- case VCEProfile_Main:
197
+ case H264Profile::Main:
198
return "Main";
199
- case VCEProfile_High:
200
+ case H264Profile::High:
201
obs-studio-0.17.0.tar.xz/plugins/image-source/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/image-source/data/locale/tr-TR.ini
Changed
9
1
2
SlideShow.TransitionSpeed="Geçiş Hızı (milisaniye)"
3
SlideShow.SlideTime="Slaytlar Arası Süre (milisaniye)"
4
SlideShow.Files="Görüntü Dosyaları"
5
+SlideShow.Randomize="Rastgele Gösterim"
6
SlideShow.Transition="Geçiş"
7
SlideShow.Transition.Cut="Cut"
8
SlideShow.Transition.Fade="Fade"
9
obs-studio-0.17.0.tar.xz/plugins/linux-capture/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/linux-capture/data/locale/tr-TR.ini
Changed
7
1
2
SwapRedBlue="Kırmızı ve maviyi değiştir"
3
LockX="Yakalama sırasında X sunucusunu kilitle"
4
IncludeXBorder="X Çerçevesini Dahil Et"
5
+ExcludeAlpha="Alpha kanalı olmayan doku biçimi kullan (Mesa geçici çözüm)"
6
7
obs-studio-0.17.0.tar.xz/plugins/mac-capture/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/mac-capture/data/locale/hu-HU.ini
Changed
8
1
2
CoreAudio.InputCapture="Bemeneti hangrögzítés"
3
-CoreAudio.OutputCapture="Kimeneti hangrögzítés"
4
+CoreAudio.OutputCapture="Kimeneti hangrögzítő"
5
CoreAudio.Device="Eszköz"
6
CoreAudio.Device.Default="Alapértelmezett"
7
DisplayCapture="Kijelző felvétel"
8
obs-studio-0.17.0.tar.xz/plugins/mac-vth264/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/mac-vth264/data/locale/hu-HU.ini
Changed
16
1
2
VTH264EncHW="Apple VT H264 hardveres kódoló"
3
VTH264EncSW="Apple VT H264 szoftveres kódoló"
4
VTEncoder="VideoToolbox H264 kódoló"
5
-Bitrate="Bitráta"
6
-UseMaxBitrate="Bitráta limit"
7
-MaxBitrate="Maximális bitráta"
8
-MaxBitrateWindow="Maximális bitrátaablak (másodperc)"
9
+Bitrate="Bitsebesség"
10
+UseMaxBitrate="Bitsebesség limit"
11
+MaxBitrate="Maximális bitsebesség"
12
+MaxBitrateWindow="Maximális bitsebességablak (másodperc)"
13
KeyframeIntervalSec="Kulcsképkocka időköze (másodperc, 0=auto)"
14
Profile="Profil"
15
None="(Nincs)"
16
obs-studio-0.17.0.tar.xz/plugins/mac-vth264/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/mac-vth264/data/locale/tr-TR.ini
Changed
14
1
2
VTH264EncSW="Apple VT H264 Yazılım Kodlayıcı"
3
VTEncoder="VideoToolbox Kodlayıcı"
4
Bitrate="Bithızı"
5
+UseMaxBitrate="Bit hızını sınırla"
6
MaxBitrate="Maks bit hızı"
7
KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
8
Profile="Profil"
9
None="(Yok)"
10
DefaultEncoder="(Varsayılan Kodlayıcı)"
11
+UseBFrames="B-Frame kullan"
12
13
14
obs-studio-0.17.0.tar.xz/plugins/obs-browser/CMakeLists.txt -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/CMakeLists.txt
Changed
171
1
2
obs-browser/main.cpp
3
obs-browser/main-source.cpp
4
shared/browser-source.cpp
5
- shared/base64.cpp)
6
+ shared/base64.cpp
7
+ shared/util.cpp)
8
9
set(obs-browser_HEADERS
10
shared/browser-manager.hpp
11
12
shared/browser-types.h
13
shared/base64.hpp
14
shared/browser-types.h
15
- shared/browser-version.h)
16
+ shared/browser-version.h
17
+ shared/util.hpp)
18
19
if (APPLE)
20
list(APPEND obs-browser_SOURCES
21
22
obs-browser/browser-render-handler.cpp
23
obs-browser/browser-source-base.cpp
24
obs-browser/browser-load-handler.cpp
25
- shared/browser-scheme.cpp)
26
+ obs-browser/browser-obs-bridge-base.cpp
27
+ shared/browser-scheme.cpp
28
+ fmt/format.cc)
29
30
list(APPEND obs-browser_HEADERS
31
shared/browser-client.hpp
32
33
obs-browser/browser-render-handler.hpp
34
obs-browser/browser-source-base.hpp
35
obs-browser/browser-load-handler.hpp
36
- shared/browser-scheme.hpp)
37
+ obs-browser/browser-obs-bridge-base.hpp
38
+ shared/browser-scheme.hpp
39
+ fmt/format.h)
40
41
endif(APPLE)
42
43
set(obs-browser_LIBRARIES
44
- libobs
45
- obs-frontend-api)
46
+ obs-frontend-api
47
+ ${OBS_JANSSON_IMPORT})
48
49
if (APPLE)
50
list(APPEND obs-browser_LIBRARIES
51
52
"obs-browser"
53
"shared")
54
55
+target_include_directories(obs-browser PUBLIC
56
+ ${OBS_JANSSON_INCLUDE_DIRS})
57
+
58
if (APPLE)
59
target_include_directories(obs-browser PUBLIC
60
"shared-apple")
61
-else(APPLE)
62
- target_include_directories_system(obs-browser PUBLIC ${CEF_INCLUDE_DIR})
63
+else (APPLE)
64
+ target_include_directories_system(obs-browser PUBLIC ${CEF_ROOT_DIR})
65
endif(APPLE)
66
67
+
68
if (APPLE)
69
set_xcode_property(obs-browser CLANG_CXX_LIBRARY "libc++")
70
endif(APPLE)
71
72
set(cef-isolation_SOURCES
73
cef-isolation/main.mm
74
cef-isolation/cef-isolated-client.mm
75
+ cef-isolation/browser-obs-bridge-mac.mm
76
cef-isolation/browser-handle.mm
77
cef-isolation/browser-render-handler.mm
78
cef-isolation/browser-texture-mac.mm
79
80
shared/browser-app.cpp
81
shared/browser-scheme.cpp
82
shared/base64.cpp
83
- obs-browser/browser-load-handler.cpp)
84
+ obs-browser/browser-load-handler.cpp
85
+ fmt/format.cc)
86
87
set(cef-isolation_HEADERS
88
shared-apple/cef-logging.h
89
90
cef-isolation/browser-render-handler.hpp
91
cef-isolation/browser-texture-mac.h
92
cef-isolation/service-connection-delegate.h
93
+ cef-isolation/browser-obs-bridge-mac.hpp
94
shared/browser-texture.hpp
95
shared/browser-client.hpp
96
shared/browser-task.hpp
97
98
obs-browser/browser-load-handler.hpp
99
shared/browser-scheme.hpp
100
shared/browser-types.h
101
+ shared/browser-obs-bridge.hpp
102
shared-apple/browser-bridges.h)
103
104
add_executable(cef-isolation
105
106
"shared"
107
"shared-apple")
108
109
- target_include_directories_system(cef-isolation PUBLIC ${CEF_INCLUDE_DIR})
110
+ target_include_directories_system(cef-isolation
111
+ PUBLIC
112
+ ${CEF_INCLUDE_DIR}
113
+ ${OBS_JANSSON_INCLUDE_DIRS})
114
115
target_link_libraries(cef-isolation
116
${CEF_LIBRARIES}
117
+ ${OBS_JANSSON_IMPORT}
118
${APPKIT_FRAMEWORK}
119
${IOSURFACE_FRAMEWORK})
120
121
122
123
set(cef-bootstrap_SOURCES
124
cef-bootstrap/main.cpp
125
- shared/browser-app.cpp)
126
+ shared/browser-app.cpp
127
+ fmt/format.cc)
128
129
set(cef-bootstrap_HEADERS
130
- shared/browser-app.hpp)
131
+ shared/browser-app.hpp
132
+ fmt/format.h)
133
134
add_executable(cef-bootstrap
135
${cef-bootstrap_SOURCES}
136
137
endif(APPLE AND XCODE)
138
139
target_include_directories(cef-bootstrap PRIVATE "shared")
140
-target_include_directories_system(cef-bootstrap PUBLIC ${CEF_INCLUDE_DIR})
141
+target_include_directories_system(cef-bootstrap
142
+ PUBLIC
143
+ ${CEF_ROOT_DIR}
144
+ ${OBS_JANSSON_INCLUDE_DIRS})
145
146
target_link_libraries(cef-bootstrap
147
- ${CEF_LIBRARIES})
148
+ ${CEF_LIBRARIES}
149
+ ${OBS_JANSSON_IMPORT})
150
151
if (APPLE)
152
153
154
OUTPUT_NAME "CEF"
155
MACOSX_BUNDLE TRUE
156
BUILD_WITH_INSTALL_RPATH TRUE
157
- INSTALL_RPATH "@loader_path/../Frameworks"
158
+ INSTALL_RPATH "@executable_path/.."
159
MACOSX_BUNDLE_BUNDLE_NAME "CEF Helper"
160
MACOSX_BUNDLE_GUI_IDENTIFIER "org.catchexception.cef.cef-isolation")
161
162
163
OUTPUT_NAME "CEF Helper"
164
MACOSX_BUNDLE TRUE
165
BUILD_WITH_INSTALL_RPATH TRUE
166
- INSTALL_RPATH "@loader_path/../../../"
167
+ INSTALL_RPATH "@executable_path/../../../.."
168
MACOSX_BUNDLE_BUNDLE_NAME "CEF Helper"
169
MACOSX_BUNDLE_GUI_IDENTIFIER "org.catchexception.cef.cef-bootstrap")
170
171
obs-studio-0.17.0.tar.xz/plugins/obs-browser/FindCEF.cmake -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/FindCEF.cmake
Changed
10
1
2
3
find_library(CEFWRAPPER_LIBRARY
4
NAMES cef_dll_wrapper libcef_dll_wrapper
5
- PATHS ${CEF_ROOT_DIR}/build/libcef_dll)
6
+ PATHS ${CEF_ROOT_DIR}/build/libcef_dll ${CEF_ROOT_DIR}/build/libcef_dll_wrapper)
7
8
if (NOT CEF_LIBRARY)
9
message(FATAL_ERROR "Could not find the CEF shared library" )
10
obs-studio-0.17.0.tar.xz/plugins/obs-browser/README.md -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/README.md
Changed
52
1
2
3
### Register for scene change callbacks
4
```
5
-/**
6
- * onSceneChange gets callbacks when the scene is changed
7
- *
8
- * @param {string} sceneName - The name of the scene that was changed to.
9
- */
10
-window.obsstudio.onSceneChange = function(sceneName) {
11
-
12
-};
13
+window.addEventListener('obsSceneChanged', function(evt) {
14
+ var t = document.createTextNode(evt.detail.name);
15
+ document.body.appendChild(t);
16
+});
17
+```
18
+#### Other events that are available
19
+* obsStreamingStarting
20
+* obsStreamingStarted
21
+* obsStreamingStopping
22
+* obsStreamingStopped
23
+* obsRecordingStarting
24
+* obsRecordingStarted
25
+* obsRecordingStopping
26
+* obsRecordingStopped
27
+
28
+### Get the current scene
29
+```
30
+window.obsstudio.getCurrentScene(function(data) {console.log(data);});
31
```
32
33
## Building on OSX
34
35
### Building CEF
36
#### Getting
37
* Download CEF Mac 64 from [https://cefbuilds.com/](https://cefbuilds.com/)
38
- * At the time of writing this I used build 2704
39
+ * At the time of writing this I used build 2883
40
* Extract and cd into the folder
41
42
#### Setting Up Project
43
44
echo "add_subdirectory(obs-browser)" >> ./plugins/CMakeLists.txt
45
mkdir build
46
cd ./build
47
-cmake -D CMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake -D CEF_ROOT_DIR=/Users/username/Development/cef_binary_3.2704.1434.gec3e9ed_macosx64 -G Xcode ..
48
+cmake -D CMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake -D CEF_ROOT_DIR=/Users/username/Development/cef_binary_3.2883.1540.gedbfb20_macosx64 -D BUILD_BROWSER=yes -G Xcode ..
49
open obs-studio.xcodeproj/
50
```
51
52
obs-studio-17.0.1.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.hpp
Added
17
1
2
+#pragma once
3
+
4
+#include "cef-isolation.h"
5
+#include "browser-obs-bridge.hpp"
6
+
7
+class BrowserOBSBridgeMac : public BrowserOBSBridge
8
+{
9
+public:
10
+ BrowserOBSBridgeMac(id<CEFIsolationService> cefIsolationService);
11
+
12
+ const char* GetCurrentSceneJSONData() override;
13
+
14
+private:
15
+ id<CEFIsolationService> cefIsolationService;
16
+};
17
obs-studio-17.0.1.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.mm
Added
12
1
2
+#include "browser-obs-bridge-mac.hpp"
3
+
4
+BrowserOBSBridgeMac::BrowserOBSBridgeMac(id<CEFIsolationService> cefIsolationService)
5
+: cefIsolationService(cefIsolationService)
6
+{}
7
+
8
+const char* BrowserOBSBridgeMac::GetCurrentSceneJSONData()
9
+{
10
+ return [cefIsolationService getCurrentSceneJSONData];
11
+}
12
obs-studio-0.17.0.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.hpp
Changed
9
1
2
3
BrowserRenderHandler(std::shared_ptr<BrowserHandle> &browserHandle);
4
5
-
6
public: /* CefRenderHandler overrides */
7
8
virtual bool GetViewRect(CefRefPtr<CefBrowser> browser, CefRect &rect)
9
obs-studio-0.17.0.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.mm -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.mm
Changed
72
1
2
******************************************************************************/
3
4
#import <Cocoa/Cocoa.h>
5
+#import <Foundation/Foundation.h>
6
7
#include <include/cef_app.h>
8
#include <include/cef_browser.h>
9
10
11
#import "cef-isolated-client.h"
12
13
+#import "browser-obs-bridge-mac.hpp"
14
+
15
@implementation CEFIsolatedClient
16
17
- (id)init
18
19
new BrowserHandle(browserSettings.width,
20
browserSettings.height, _server));
21
22
+ BrowserOBSBridge *browserOBSBridge = new BrowserOBSBridgeMac(_server);
23
+
24
sync_on_cef_ui(^{
25
26
CefRefPtr<BrowserRenderHandler> browserRenderHandler =
27
28
new BrowserLoadHandler(std::string([browserSettings.css UTF8String]));
29
30
CefRefPtr<BrowserClient> browserClient =
31
- new BrowserClient(browserRenderHandler.get(),loadHandler);
32
+ new BrowserClient(browserRenderHandler.get(),loadHandler, browserOBSBridge);
33
34
CefWindowInfo windowInfo;
35
windowInfo.view = nullptr;
36
37
return;
38
}
39
40
- host->HandleKeyEventBeforeTextInputClient(nsEvent);
41
-
42
- NSTextInputContext *inputContext =
43
- host->GetNSTextInputContext();
44
- [inputContext handleEvent:nsEvent];
45
-
46
- host->HandleKeyEventAfterTextInputClient(nsEvent);
47
+ host->SendKeyEvent(keyEvent);
48
}
49
}];
50
}
51
52
}];
53
}
54
55
+-(void)dispatchJSEvent:(const char *)eventName data:(const char *)jsonString
56
+{
57
+ [self sendEventToAllBrowsers:^(SharedBrowserHandle browserHandle)
58
+ {
59
+ CefRefPtr<CefBrowser> browser = browserHandle->GetBrowser();
60
+
61
+ CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("DispatchJSEvent");
62
+ CefRefPtr<CefListValue> args = msg->GetArgumentList();
63
+ args->SetString(0, eventName);
64
+ args->SetString(1, jsonString);
65
66
+ browser->SendProcessMessage(PID_RENDERER, msg);
67
+ }];
68
+}
69
70
- (void)destroyBrowser:(const int)browserIdentifier {
71
if (map.count(browserIdentifier) == 1) {
72
obs-studio-17.0.1.tar.xz/plugins/obs-browser/fmt
Added
2
1
+(directory)
2
obs-studio-17.0.1.tar.xz/plugins/obs-browser/fmt/format.cc
Added
201
1
2
+/*
3
+ Formatting library for C++
4
+
5
+ Copyright (c) 2012 - 2016, Victor Zverovich
6
+ All rights reserved.
7
+
8
+ Redistribution and use in source and binary forms, with or without
9
+ modification, are permitted provided that the following conditions are met:
10
+
11
+ 1. Redistributions of source code must retain the above copyright notice, this
12
+ list of conditions and the following disclaimer.
13
+ 2. Redistributions in binary form must reproduce the above copyright notice,
14
+ this list of conditions and the following disclaimer in the documentation
15
+ and/or other materials provided with the distribution.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
21
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+#include "format.h"
30
+
31
+#include <string.h>
32
+
33
+#include <cctype>
34
+#include <cerrno>
35
+#include <climits>
36
+#include <cmath>
37
+#include <cstdarg>
38
+#include <cstddef> // for std::ptrdiff_t
39
+
40
+#if defined(_WIN32) && defined(__MINGW32__)
41
+# include <cstring>
42
+#endif
43
+
44
+#if FMT_USE_WINDOWS_H
45
+# if defined(NOMINMAX) || defined(FMT_WIN_MINMAX)
46
+# include <windows.h>
47
+# else
48
+# define NOMINMAX
49
+# include <windows.h>
50
+# undef NOMINMAX
51
+# endif
52
+#endif
53
+
54
+using fmt::internal::Arg;
55
+
56
+#if FMT_EXCEPTIONS
57
+# define FMT_TRY try
58
+# define FMT_CATCH(x) catch (x)
59
+#else
60
+# define FMT_TRY if (true)
61
+# define FMT_CATCH(x) if (false)
62
+#endif
63
+
64
+#ifdef _MSC_VER
65
+# pragma warning(push)
66
+# pragma warning(disable: 4127) // conditional expression is constant
67
+# pragma warning(disable: 4702) // unreachable code
68
+// Disable deprecation warning for strerror. The latter is not called but
69
+// MSVC fails to detect it.
70
+# pragma warning(disable: 4996)
71
+#endif
72
+
73
+// Dummy implementations of strerror_r and strerror_s called if corresponding
74
+// system functions are not available.
75
+static inline fmt::internal::Null<> strerror_r(int, char *, ...) {
76
+ return fmt::internal::Null<>();
77
+}
78
+static inline fmt::internal::Null<> strerror_s(char *, std::size_t, ...) {
79
+ return fmt::internal::Null<>();
80
+}
81
+
82
+namespace fmt {
83
+namespace {
84
+
85
+#ifndef _MSC_VER
86
+# define FMT_SNPRINTF snprintf
87
+#else // _MSC_VER
88
+inline int fmt_snprintf(char *buffer, size_t size, const char *format, ...) {
89
+ va_list args;
90
+ va_start(args, format);
91
+ int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
92
+ va_end(args);
93
+ return result;
94
+}
95
+# define FMT_SNPRINTF fmt_snprintf
96
+#endif // _MSC_VER
97
+
98
+#if defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
99
+# define FMT_SWPRINTF snwprintf
100
+#else
101
+# define FMT_SWPRINTF swprintf
102
+#endif // defined(_WIN32) && defined(__MINGW32__) && !defined(__NO_ISOCEXT)
103
+
104
+// Checks if a value fits in int - used to avoid warnings about comparing
105
+// signed and unsigned integers.
106
+template <bool IsSigned>
107
+struct IntChecker {
108
+ template <typename T>
109
+ static bool fits_in_int(T value) {
110
+ unsigned max = INT_MAX;
111
+ return value <= max;
112
+ }
113
+ static bool fits_in_int(bool) { return true; }
114
+};
115
+
116
+template <>
117
+struct IntChecker<true> {
118
+ template <typename T>
119
+ static bool fits_in_int(T value) {
120
+ return value >= INT_MIN && value <= INT_MAX;
121
+ }
122
+ static bool fits_in_int(int) { return true; }
123
+};
124
+
125
+const char RESET_COLOR[] = "\x1b[0m";
126
+
127
+typedef void (*FormatFunc)(Writer &, int, StringRef);
128
+
129
+// Portable thread-safe version of strerror.
130
+// Sets buffer to point to a string describing the error code.
131
+// This can be either a pointer to a string stored in buffer,
132
+// or a pointer to some static immutable string.
133
+// Returns one of the following values:
134
+// 0 - success
135
+// ERANGE - buffer is not large enough to store the error message
136
+// other - failure
137
+// Buffer should be at least of size 1.
138
+int safe_strerror(
139
+ int error_code, char *&buffer, std::size_t buffer_size) FMT_NOEXCEPT {
140
+ FMT_ASSERT(buffer != 0 && buffer_size != 0, "invalid buffer");
141
+
142
+ class StrError {
143
+ private:
144
+ int error_code_;
145
+ char *&buffer_;
146
+ std::size_t buffer_size_;
147
+
148
+ // A noop assignment operator to avoid bogus warnings.
149
+ void operator=(const StrError &) {}
150
+
151
+ // Handle the result of XSI-compliant version of strerror_r.
152
+ int handle(int result) {
153
+ // glibc versions before 2.13 return result in errno.
154
+ return result == -1 ? errno : result;
155
+ }
156
+
157
+ // Handle the result of GNU-specific version of strerror_r.
158
+ int handle(char *message) {
159
+ // If the buffer is full then the message is probably truncated.
160
+ if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1)
161
+ return ERANGE;
162
+ buffer_ = message;
163
+ return 0;
164
+ }
165
+
166
+ // Handle the case when strerror_r is not available.
167
+ int handle(internal::Null<>) {
168
+ return fallback(strerror_s(buffer_, buffer_size_, error_code_));
169
+ }
170
+
171
+ // Fallback to strerror_s when strerror_r is not available.
172
+ int fallback(int result) {
173
+ // If the buffer is full then the message is probably truncated.
174
+ return result == 0 && strlen(buffer_) == buffer_size_ - 1 ?
175
+ ERANGE : result;
176
+ }
177
+
178
+ // Fallback to strerror if strerror_r and strerror_s are not available.
179
+ int fallback(internal::Null<>) {
180
+ errno = 0;
181
+ buffer_ = strerror(error_code_);
182
+ return errno;
183
+ }
184
+
185
+ public:
186
+ StrError(int err_code, char *&buf, std::size_t buf_size)
187
+ : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {}
188
+
189
+ int run() {
190
+ strerror_r(0, 0, ""); // Suppress a warning about unused strerror_r.
191
+ return handle(strerror_r(error_code_, buffer_, buffer_size_));
192
+ }
193
+ };
194
+ return StrError(error_code, buffer, buffer_size).run();
195
+}
196
+
197
+void format_error_code(Writer &out, int error_code,
198
+ StringRef message) FMT_NOEXCEPT {
199
+ // Report error code making sure that the output fits into
200
+ // INLINE_BUFFER_SIZE to avoid dynamic memory allocation and potential
201
obs-studio-17.0.1.tar.xz/plugins/obs-browser/fmt/format.h
Added
201
1
2
+/*
3
+ Formatting library for C++
4
+
5
+ Copyright (c) 2012 - 2016, Victor Zverovich
6
+ All rights reserved.
7
+
8
+ Redistribution and use in source and binary forms, with or without
9
+ modification, are permitted provided that the following conditions are met:
10
+
11
+ 1. Redistributions of source code must retain the above copyright notice, this
12
+ list of conditions and the following disclaimer.
13
+ 2. Redistributions in binary form must reproduce the above copyright notice,
14
+ this list of conditions and the following disclaimer in the documentation
15
+ and/or other materials provided with the distribution.
16
+
17
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
21
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+
29
+#ifndef FMT_FORMAT_H_
30
+#define FMT_FORMAT_H_
31
+
32
+#include <cassert>
33
+#include <clocale>
34
+#include <cmath>
35
+#include <cstdio>
36
+#include <cstring>
37
+#include <limits>
38
+#include <memory>
39
+#include <stdexcept>
40
+#include <string>
41
+#include <vector>
42
+#include <utility>
43
+
44
+#ifdef _SECURE_SCL
45
+# define FMT_SECURE_SCL _SECURE_SCL
46
+#else
47
+# define FMT_SECURE_SCL 0
48
+#endif
49
+
50
+#if FMT_SECURE_SCL
51
+# include <iterator>
52
+#endif
53
+
54
+#if defined(_MSC_VER) && _MSC_VER <= 1500
55
+typedef unsigned __int32 uint32_t;
56
+typedef unsigned __int64 uint64_t;
57
+typedef __int64 intmax_t;
58
+#else
59
+#include <stdint.h>
60
+#endif
61
+
62
+#if !defined(FMT_HEADER_ONLY) && defined(_WIN32)
63
+# ifdef FMT_EXPORT
64
+# define FMT_API __declspec(dllexport)
65
+# elif defined(FMT_SHARED)
66
+# define FMT_API __declspec(dllimport)
67
+# endif
68
+#endif
69
+#ifndef FMT_API
70
+# define FMT_API
71
+#endif
72
+
73
+#ifdef __GNUC__
74
+# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
75
+# define FMT_GCC_EXTENSION __extension__
76
+# if FMT_GCC_VERSION >= 406
77
+# pragma GCC diagnostic push
78
+// Disable the warning about "long long" which is sometimes reported even
79
+// when using __extension__.
80
+# pragma GCC diagnostic ignored "-Wlong-long"
81
+// Disable the warning about declaration shadowing because it affects too
82
+// many valid cases.
83
+# pragma GCC diagnostic ignored "-Wshadow"
84
+// Disable the warning about implicit conversions that may change the sign of
85
+// an integer; silencing it otherwise would require many explicit casts.
86
+# pragma GCC diagnostic ignored "-Wsign-conversion"
87
+# endif
88
+# if __cplusplus >= 201103L || defined __GXX_EXPERIMENTAL_CXX0X__
89
+# define FMT_HAS_GXX_CXX11 1
90
+# endif
91
+#else
92
+# define FMT_GCC_EXTENSION
93
+#endif
94
+
95
+#if defined(__INTEL_COMPILER)
96
+# define FMT_ICC_VERSION __INTEL_COMPILER
97
+#elif defined(__ICL)
98
+# define FMT_ICC_VERSION __ICL
99
+#endif
100
+
101
+#if defined(__clang__) && !defined(FMT_ICC_VERSION)
102
+# pragma clang diagnostic push
103
+# pragma clang diagnostic ignored "-Wdocumentation"
104
+#endif
105
+
106
+#ifdef __GNUC_LIBSTD__
107
+# define FMT_GNUC_LIBSTD_VERSION (__GNUC_LIBSTD__ * 100 + __GNUC_LIBSTD_MINOR__)
108
+#endif
109
+
110
+#ifdef __has_feature
111
+# define FMT_HAS_FEATURE(x) __has_feature(x)
112
+#else
113
+# define FMT_HAS_FEATURE(x) 0
114
+#endif
115
+
116
+#ifdef __has_builtin
117
+# define FMT_HAS_BUILTIN(x) __has_builtin(x)
118
+#else
119
+# define FMT_HAS_BUILTIN(x) 0
120
+#endif
121
+
122
+#ifdef __has_cpp_attribute
123
+# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)
124
+#else
125
+# define FMT_HAS_CPP_ATTRIBUTE(x) 0
126
+#endif
127
+
128
+#ifndef FMT_USE_VARIADIC_TEMPLATES
129
+// Variadic templates are available in GCC since version 4.4
130
+// (http://gcc.gnu.org/projects/cxx0x.html) and in Visual C++
131
+// since version 2013.
132
+# define FMT_USE_VARIADIC_TEMPLATES \
133
+ (FMT_HAS_FEATURE(cxx_variadic_templates) || \
134
+ (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800)
135
+#endif
136
+
137
+#ifndef FMT_USE_RVALUE_REFERENCES
138
+// Don't use rvalue references when compiling with clang and an old libstdc++
139
+// as the latter doesn't provide std::move.
140
+# if defined(FMT_GNUC_LIBSTD_VERSION) && FMT_GNUC_LIBSTD_VERSION <= 402
141
+# define FMT_USE_RVALUE_REFERENCES 0
142
+# else
143
+# define FMT_USE_RVALUE_REFERENCES \
144
+ (FMT_HAS_FEATURE(cxx_rvalue_references) || \
145
+ (FMT_GCC_VERSION >= 403 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1600)
146
+# endif
147
+#endif
148
+
149
+#if FMT_USE_RVALUE_REFERENCES
150
+# include <utility> // for std::move
151
+#endif
152
+
153
+// Check if exceptions are disabled.
154
+#if defined(__GNUC__) && !defined(__EXCEPTIONS)
155
+# define FMT_EXCEPTIONS 0
156
+#endif
157
+#if defined(_MSC_VER) && !_HAS_EXCEPTIONS
158
+# define FMT_EXCEPTIONS 0
159
+#endif
160
+#ifndef FMT_EXCEPTIONS
161
+# define FMT_EXCEPTIONS 1
162
+#endif
163
+
164
+#ifndef FMT_THROW
165
+# if FMT_EXCEPTIONS
166
+# define FMT_THROW(x) throw x
167
+# else
168
+# define FMT_THROW(x) assert(false)
169
+# endif
170
+#endif
171
+
172
+// Define FMT_USE_NOEXCEPT to make fmt use noexcept (C++11 feature).
173
+#ifndef FMT_USE_NOEXCEPT
174
+# define FMT_USE_NOEXCEPT 0
175
+#endif
176
+
177
+#ifndef FMT_NOEXCEPT
178
+# if FMT_EXCEPTIONS
179
+# if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \
180
+ (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || \
181
+ _MSC_VER >= 1900
182
+# define FMT_NOEXCEPT noexcept
183
+# else
184
+# define FMT_NOEXCEPT throw()
185
+# endif
186
+# else
187
+# define FMT_NOEXCEPT
188
+# endif
189
+#endif
190
+
191
+// A macro to disallow the copy constructor and operator= functions
192
+// This should be used in the private: declarations for a class
193
+#ifndef FMT_USE_DELETED_FUNCTIONS
194
+# define FMT_USE_DELETED_FUNCTIONS 0
195
+#endif
196
+
197
+#if FMT_USE_DELETED_FUNCTIONS || FMT_HAS_FEATURE(cxx_deleted_functions) || \
198
+ (FMT_GCC_VERSION >= 404 && FMT_HAS_GXX_CXX11) || _MSC_VER >= 1800
199
+# define FMT_DELETED_OR_UNDEFINED = delete
200
+# define FMT_DISALLOW_COPY_AND_ASSIGN(TypeName) \
201
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.h -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.h
Changed
10
1
2
3
void RefreshPageNoCache(int browserIdentifier);
4
5
+ void DispatchJSEvent(const char *eventName, const char *jsonData);
6
+
7
private:
8
std::unique_ptr<CEFIsolationServiceManager> cefIsolationServiceManager;
9
};
10
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.mm -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.mm
Changed
25
1
2
pimpl->RefreshPageNoCache(browserIdentifier);
3
}
4
5
+void BrowserManager::DispatchJSEvent(const char *name, const char *jsonData)
6
+{
7
+ pimpl->DispatchJSEvent(name, jsonData);
8
+}
9
+
10
int BrowserManager::CreateBrowser(const BrowserSettings &browserSettings,
11
const std::shared_ptr<BrowserListener> &browserListener)
12
{
13
14
cefIsolationServiceManager->RefreshPageNoCache(browserIdentifier);
15
}
16
17
+void BrowserManager::Impl::DispatchJSEvent(const char *eventName, const char *jsonData)
18
+{
19
+ cefIsolationServiceManager->DispatchJSEvent(eventName, jsonData);
20
+}
21
+
22
static BrowserManager *instance;
23
24
BrowserManager *BrowserManager::Instance()
25
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.h -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.h
Changed
25
1
2
3
#include <Foundation/Foundation.h>
4
#include <string>
5
+#include <jansson.h>
6
7
@class CEFIsolationService;
8
@class ClientConnectionDelegate;
9
10
11
void RefreshPageNoCache(int browserIdentifier);
12
13
+ void DispatchJSEvent(const char *eventName, const char *jsonData);
14
+
15
public:
16
NSString *GetUniqueClientName() { return _uniqueClientName; }
17
18
19
CEFIsolationService *_cefIsolationService;
20
NSObject *cefIsolationServiceLock;
21
22
-};
23
\ No newline at end of file
24
+};
25
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.mm -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.mm
Changed
25
1
2
******************************************************************************/
3
4
#include <string>
5
+#import <Foundation/Foundation.h>
6
7
// shared
8
#include "browser-listener.hpp"
9
10
@catch (NSException *exception) {}
11
}
12
13
-
14
-
15
-
16
+void CEFIsolationServiceManager::DispatchJSEvent(const char *eventName, const char *jsonData)
17
+{
18
+ id<CEFIsolatedClient> cefIsolatedClient =
19
+ [_cefIsolationService client];
20
+ @try {
21
+ [cefIsolatedClient dispatchJSEvent:eventName data:jsonData];
22
+ }
23
+ @catch (NSException *exception) {}
24
+}
25
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service.mm -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service.mm
Changed
36
1
2
3
#include "browser-listener.hpp"
4
5
+#include <obs-frontend-api.h>
6
+#include "util.hpp"
7
+
8
@implementation CEFIsolationService
9
{
10
std::map<int, std::shared_ptr<BrowserListener> > listenerMap;
11
12
}
13
}
14
15
+- (const char*)getCurrentSceneJSONData
16
+{
17
+ obs_source_t *source = obs_frontend_get_current_scene();
18
+
19
+ const char* jsonString = obsSourceToJSON(source);
20
+
21
+ obs_source_release(source);
22
+
23
+ return jsonString;
24
+}
25
+
26
- (void)invalidateClient:(id)client withException:(NSException *)exception
27
{
28
UNUSED_PARAMETER(client);
29
30
}
31
}
32
33
-@end
34
\ No newline at end of file
35
+@end
36
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp
Changed
66
1
2
#include "browser-client.hpp"
3
#include "browser-render-handler.hpp"
4
#include "browser-load-handler.hpp"
5
+#include "browser-obs-bridge-base.hpp"
6
7
BrowserManager::BrowserManager()
8
: pimpl(new BrowserManager::Impl())
9
10
pimpl->RefreshPageNoCache(browserIdentifier);
11
}
12
13
+/**
14
+ Sends JSON Data about an OBS event to be executed as a DOM event.
15
+ The jsonString is already encoded so that we can pass it across the process boundary that cef-isolation creates.
16
+
17
+ @param eventName the name of the DOM event that we will fire
18
+ @param jsonString A json encoded string that will be accessable from the detail field of the event object
19
+ @return
20
+*/
21
+void BrowserManager::DispatchJSEvent(const char *eventName, const char *jsonString)
22
+{
23
+ pimpl->DispatchJSEvent(eventName, jsonString);
24
+}
25
+
26
BrowserManager::Impl::Impl()
27
{
28
os_event_init(&dispatchEvent, OS_EVENT_TYPE_AUTO);
29
30
os_event_t *createdEvent;
31
os_event_init(&createdEvent, OS_EVENT_TYPE_AUTO);
32
33
+ BrowserOBSBridge *browserOBSBridge = new BrowserOBSBridgeBase();
34
+
35
CefPostTask(TID_UI, BrowserTask::newTask(
36
[&]
37
{
38
39
new BrowserLoadHandler(browserSettings.css));
40
41
CefRefPtr<BrowserClient> browserClient(
42
- new BrowserClient(renderHandler,loadHandler));
43
+ new BrowserClient(renderHandler, loadHandler, browserOBSBridge));
44
45
CefWindowInfo windowInfo;
46
windowInfo.transparent_painting_enabled = true;
47
48
});
49
}
50
51
+void BrowserManager::Impl::DispatchJSEvent(const char *eventName, const char *jsonString)
52
+{
53
+ ExecuteOnAllBrowsers([&](CefRefPtr<CefBrowser> b)
54
+ {
55
+ CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("DispatchJSEvent");
56
+ CefRefPtr<CefListValue> args = msg->GetArgumentList();
57
+ args->SetString(0, eventName);
58
+ args->SetString(1, jsonString);
59
+ b->SendProcessMessage(PID_RENDERER, msg);
60
+ });
61
+}
62
+
63
void
64
BrowserManager::Impl::Startup()
65
{
66
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp
Changed
10
1
2
void ExecuteSceneChangeJSCallback(const char *name);
3
4
void RefreshPageNoCache(int browserIdentifier);
5
+
6
+ void DispatchJSEvent(const char *eventName, const char *jsonString);
7
8
private:
9
void ExecuteOnBrowser(int browserIdentifier,
10
obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.cpp
Added
19
1
2
+#include "browser-obs-bridge-base.hpp"
3
+
4
+#include "util.hpp"
5
+
6
+BrowserOBSBridgeBase::BrowserOBSBridgeBase()
7
+{}
8
+
9
+const char* BrowserOBSBridgeBase::GetCurrentSceneJSONData()
10
+{
11
+ obs_source_t *source = obs_frontend_get_current_scene();
12
+
13
+ const char* jsonString = obsSourceToJSON(source);
14
+
15
+ obs_source_release(source);
16
+
17
+ return jsonString;
18
+}
19
obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.hpp
Added
13
1
2
+#pragma once
3
+
4
+#include "browser-obs-bridge.hpp"
5
+
6
+class BrowserOBSBridgeBase : public BrowserOBSBridge
7
+{
8
+public:
9
+ BrowserOBSBridgeBase();
10
+
11
+ const char* GetCurrentSceneJSONData() override;
12
+};
13
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp
Changed
53
1
2
obs_data_set_default_int(settings, "height", 600);
3
obs_data_set_default_int(settings, "fps", 30);
4
obs_data_set_default_bool(settings, "shutdown", false);
5
+ obs_data_set_default_bool(settings, "restart_when_active", false);
6
obs_data_set_default_string(settings, "css", "body { background-color: rgba(0, 0, 0, 0); margin: 0px auto; overflow: hidden; }");
7
}
8
9
10
obs_properties_add_text(props, "css",
11
obs_module_text("CSS"), OBS_TEXT_MULTILINE);
12
obs_properties_add_bool(props, "shutdown",
13
- obs_module_text("Shutdown when not active"));
14
+ obs_module_text("Shutdown source when not visible"));
15
+ obs_properties_add_bool(props, "restart_when_active",
16
+ obs_module_text("Refresh browser when scene becomes active"));
17
18
obs_properties_add_button(props, "refreshnocache",
19
obs_module_text("Refresh cache of current page"), refreshnocache_button_clicked);
20
21
return obs_module_text("BrowserSource");
22
}
23
24
+static void browser_source_activate(void *data)
25
+{
26
+ BrowserSource *bs = static_cast<BrowserSource *>(data);
27
+ obs_data_t *settings = obs_source_get_settings(bs->GetSource());
28
+ bool restart = obs_data_get_bool(settings, "restart_when_active");
29
+
30
+ if (restart)
31
+ BrowserManager::Instance()->RefreshPageNoCache(bs->GetBrowserIdentifier());
32
+}
33
+
34
+static void browser_source_deactivate(void *data)
35
+{
36
+
37
+}
38
+
39
// Called when the source is visible
40
static void browser_source_show(void *data)
41
{
42
43
browser_source_info.video_render = browser_source_render;
44
browser_source_info.show = browser_source_show;
45
browser_source_info.hide = browser_source_hide;
46
+ browser_source_info.activate = browser_source_activate;
47
+ browser_source_info.deactivate = browser_source_deactivate;
48
+
49
50
return browser_source_info;
51
}
52
\ No newline at end of file
53
obs-studio-0.17.0.tar.xz/plugins/obs-browser/obs-browser/main.cpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/obs-browser/main.cpp
Changed
80
1
2
3
#include "browser-version.h"
4
#include "browser-manager.hpp"
5
+#include "util.hpp"
6
7
OBS_DECLARE_MODULE()
8
OBS_MODULE_USE_DEFAULT_LOCALE("obs-browser", "en-US")
9
10
// Handle events from the frontend
11
static void handle_obs_frontend_event(enum obs_frontend_event event, void *)
12
{
13
- if (event == OBS_FRONTEND_EVENT_SCENE_CHANGED) {
14
-
15
- obs_source_t *source = obs_frontend_get_current_scene();
16
-
17
- const char *name = obs_source_get_name(source);
18
-
19
- BrowserManager::Instance()->ExecuteSceneChangeJSCallback(name);
20
- obs_source_release(source);
21
+ switch(event)
22
+ {
23
+ case OBS_FRONTEND_EVENT_STREAMING_STARTING:
24
+ BrowserManager::Instance()->DispatchJSEvent("obsStreamingStarting", nullptr);
25
+ break;
26
+ case OBS_FRONTEND_EVENT_STREAMING_STARTED:
27
+ BrowserManager::Instance()->DispatchJSEvent("obsStreamingStarted", nullptr);
28
+ break;
29
+ case OBS_FRONTEND_EVENT_STREAMING_STOPPING:
30
+ BrowserManager::Instance()->DispatchJSEvent("obsStreamingStopping", nullptr);
31
+ break;
32
+ case OBS_FRONTEND_EVENT_STREAMING_STOPPED:
33
+ BrowserManager::Instance()->DispatchJSEvent("obsStreamingStopped", nullptr);
34
+ break;
35
+ case OBS_FRONTEND_EVENT_RECORDING_STARTING:
36
+ BrowserManager::Instance()->DispatchJSEvent("obsRecordingStarting", nullptr);
37
+ break;
38
+ case OBS_FRONTEND_EVENT_RECORDING_STARTED:
39
+ BrowserManager::Instance()->DispatchJSEvent("obsRecordingStarted", nullptr);
40
+ break;
41
+ case OBS_FRONTEND_EVENT_RECORDING_STOPPING:
42
+ BrowserManager::Instance()->DispatchJSEvent("obsRecordingStopping", nullptr);
43
+ break;
44
+ case OBS_FRONTEND_EVENT_RECORDING_STOPPED:
45
+ BrowserManager::Instance()->DispatchJSEvent("obsRecordingStopped", nullptr);
46
+ break;
47
+ case OBS_FRONTEND_EVENT_SCENE_CHANGED:
48
+ {
49
+ obs_source_t *source = obs_frontend_get_current_scene();
50
+
51
+ const char* jsonString = obsSourceToJSON(source);
52
+
53
+ BrowserManager::Instance()->DispatchJSEvent("obsSceneChanged", jsonString);
54
+
55
+ obs_source_release(source);
56
+ break;
57
+ }
58
+ case OBS_FRONTEND_EVENT_SCENE_LIST_CHANGED:
59
+ break;
60
+ case OBS_FRONTEND_EVENT_TRANSITION_CHANGED:
61
+ break;
62
+ case OBS_FRONTEND_EVENT_TRANSITION_STOPPED:
63
+ break;
64
+ case OBS_FRONTEND_EVENT_TRANSITION_LIST_CHANGED:
65
+ break;
66
+ case OBS_FRONTEND_EVENT_SCENE_COLLECTION_CHANGED:
67
+ break;
68
+ case OBS_FRONTEND_EVENT_SCENE_COLLECTION_LIST_CHANGED:
69
+ break;
70
+ case OBS_FRONTEND_EVENT_PROFILE_CHANGED:
71
+ break;
72
+ case OBS_FRONTEND_EVENT_PROFILE_LIST_CHANGED:
73
+ break;
74
+ case OBS_FRONTEND_EVENT_EXIT:
75
+ BrowserManager::Instance()->DispatchJSEvent("obsExit", nullptr);
76
+ break;
77
}
78
}
79
80
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared-apple/cef-isolation.h -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared-apple/cef-isolation.h
Changed
29
1
2
#pragma once
3
4
#import <Foundation/Foundation.h>
5
+#include <jansson.h>
6
7
#include "browser-types.h"
8
9
10
height:(int)height
11
surfaceHandle:(BrowserSurfaceHandle)surfaceHandle;
12
- (void)invalidateClient:(id)client withException:(NSException *)exception;
13
+- (const char*)getCurrentSceneJSONData;
14
@end
15
16
@protocol CEFIsolatedClient
17
18
- (oneway void)sendFocus:(int)browserIdentifier focus:(BOOL)focus;
19
- (void)sendKeyClick:(int) browserIdentifier
20
event:(bycopy ObsKeyEventBridge *)event keyUp:(BOOL)keyUp;
21
+- (void)refreshPageNoCache:(const int)browserIdentifier;
22
+- (void)executeVisiblityJSCallback:(const int)browserIdentifier
23
+ visible:(BOOL)visible;
24
+- (void)executeSceneChangeJSCallback:(const char *)name;
25
+- (void)dispatchJSEvent:(const char *)eventName data:(const char*) jsonString;
26
@end
27
28
29
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-app.cpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-app.cpp
Changed
143
1
2
3
#include <iostream>
4
#include <string>
5
+#include <jansson.h>
6
7
-#include "cefsimple/simple_handler.h"
8
+#include "fmt/format.h"
9
#include "include/cef_browser.h"
10
#include "include/cef_command_line.h"
11
#include "include/wrapper/cef_helpers.h"
12
13
{
14
CefRefPtr<CefV8Value> globalObj = context->GetGlobal();
15
16
- CefRefPtr<CefV8Value> obsStudioObj = CefV8Value::CreateObject(0);
17
+ CefRefPtr<CefV8Value> obsStudioObj = CefV8Value::CreateObject(0, 0);
18
globalObj->SetValue("obsstudio", obsStudioObj, V8_PROPERTY_ATTRIBUTE_NONE);
19
20
CefRefPtr<CefV8Value> pluginVersion = CefV8Value::CreateString(OBS_BROWSER_VERSION);
21
obsStudioObj->SetValue("pluginVersion", pluginVersion, V8_PROPERTY_ATTRIBUTE_NONE);
22
+
23
+ CefRefPtr<CefV8Value> func = CefV8Value::CreateFunction("getCurrentScene", this);
24
+ obsStudioObj->SetValue("getCurrentScene", func, V8_PROPERTY_ATTRIBUTE_NONE);
25
}
26
27
void BrowserApp::ExecuteJSFunction(CefRefPtr<CefBrowser> browser,
28
29
30
bool BrowserApp::OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
31
CefProcessId source_process,
32
- CefRefPtr<CefProcessMessage> message) {
33
+ CefRefPtr<CefProcessMessage> message)
34
+{
35
DCHECK(source_process == PID_BROWSER);
36
37
CefRefPtr<CefListValue> args = message->GetArgumentList();
38
39
ExecuteJSFunction(browser, "onVisibilityChange", arguments);
40
return true;
41
}
42
- else if (message->GetName() == "SceneChange") {
43
+ else if (message->GetName() == "DispatchJSEvent") {
44
+ CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context();
45
+
46
+ context->Enter();
47
+
48
+ CefRefPtr<CefV8Value> globalObj = context->GetGlobal();
49
+
50
+ // Build up a new json object to store the CustomEvent data in.
51
+ json_t *json = json_object();
52
+
53
+ if (args->GetSize() > 1) {
54
+ json_error_t error;
55
+
56
+ json_object_set_new(json, "detail", json_loads(args->GetString(1).ToString().c_str(), 0, &error));
57
+ }
58
+
59
+ char *jsonString = json_dumps(json, 0);
60
+
61
+ std::string script = fmt::format(
62
+ "new CustomEvent('{}', {});",
63
+ args->GetString(0).ToString(),
64
+ jsonString);
65
+
66
+ free(jsonString);
67
+
68
+ CefRefPtr<CefV8Value> returnValue;
69
+ CefRefPtr<CefV8Exception> exception;
70
+
71
+ // Create the CustomEvent object
72
+ // We have to use eval to invoke the new operator
73
+ context->Eval(script, browser->GetMainFrame()->GetURL(), 0, returnValue, exception);
74
+
75
CefV8ValueList arguments;
76
- arguments.push_back(CefV8Value::CreateString(args->GetString(0)));
77
+ arguments.push_back(returnValue);
78
+
79
+ CefRefPtr<CefV8Value> dispatchEvent = globalObj->GetValue("dispatchEvent");
80
+ dispatchEvent->ExecuteFunction(NULL, arguments);
81
+
82
+ context->Exit();
83
+
84
+ return true;
85
+ }
86
+ else if (message->GetName() == "executeCallback") {
87
+ CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context();
88
+
89
+ context->Enter();
90
+
91
+ int callbackID = message->GetArgumentList()->GetInt(0);
92
+ CefString jsonString = message->GetArgumentList()->GetString(1);
93
+
94
+ CefRefPtr<CefV8Value> callback = callbackMap[callbackID];
95
+
96
+ CefV8ValueList args;
97
+ args.push_back(CefV8Value::CreateString(jsonString));
98
+
99
+ CefRefPtr<CefV8Value> retval;
100
+ CefRefPtr<CefV8Exception> exception;
101
+ callback->ExecuteFunction(NULL, args);
102
+
103
+ context->Exit();
104
+
105
+ callbackMap.erase(callbackID);
106
+
107
+
108
+ return true;
109
+ }
110
+
111
+ return false;
112
+}
113
+
114
+// CefV8Handler::Execute
115
+bool BrowserApp::Execute(const CefString& name,
116
+ CefRefPtr<CefV8Value> object,
117
+ const CefV8ValueList& arguments,
118
+ CefRefPtr<CefV8Value>& retval,
119
+ CefString& exception)
120
+{
121
+ if (name == "getCurrentScene") {
122
+
123
+ if (arguments.size() == 1 && arguments[0]->IsFunction()) {
124
+ callbackId++;
125
+ callbackMap[callbackId] = arguments[0];
126
+ }
127
+
128
+ CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("getCurrentScene");
129
+ CefRefPtr<CefListValue> args = msg->GetArgumentList();
130
+ args->SetInt(0, callbackId);
131
+
132
+ CefRefPtr<CefBrowser> browser =
133
+ CefV8Context::GetCurrentContext()->GetBrowser();
134
+ browser->SendProcessMessage(PID_BROWSER, msg);
135
136
- ExecuteJSFunction(browser , "onSceneChange", arguments);
137
return true;
138
}
139
140
+ // Function does not exist.
141
return false;
142
}
143
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-app.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-app.hpp
Changed
35
1
2
#include <include/cef_render_process_handler.h>
3
4
class BrowserApp : public CefApp,
5
- public CefRenderProcessHandler
6
+ public CefRenderProcessHandler,
7
+ public CefV8Handler
8
{
9
10
public:
11
12
CefProcessId source_process,
13
CefRefPtr<CefProcessMessage> message) OVERRIDE;
14
15
+public: /* CefV8Handler */
16
+ virtual bool Execute(const CefString& name,
17
+ CefRefPtr<CefV8Value> object,
18
+ const CefV8ValueList& arguments,
19
+ CefRefPtr<CefV8Value>& retval,
20
+ CefString& exception) OVERRIDE;
21
+
22
private:
23
virtual void ExecuteJSFunction(CefRefPtr<CefBrowser> browser,
24
const char *functionName,
25
CefV8ValueList arguments);
26
-
27
- IMPLEMENT_REFCOUNTING(BrowserApp);
28
29
+ typedef std::map<int, CefRefPtr<CefV8Value>> CallbackMap;
30
+ int callbackId;
31
+ CallbackMap callbackMap;
32
+
33
+ IMPLEMENT_REFCOUNTING(BrowserApp);
34
};
35
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-client.cpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-client.cpp
Changed
46
1
2
#include <include/cef_render_handler.h>
3
4
#include "browser-client.hpp"
5
+#include "browser-obs-bridge.hpp"
6
7
BrowserClient::BrowserClient(CefRenderHandler *renderHandler,
8
- CefLoadHandler *loadHandler)
9
- : renderHandler(renderHandler), loadHandler(loadHandler)
10
+ CefLoadHandler *loadHandler, BrowserOBSBridge *browserOBSBridge)
11
+ : renderHandler(renderHandler), loadHandler(loadHandler), browserOBSBridge(browserOBSBridge)
12
{
13
}
14
15
16
17
// remove all context menu contributions
18
model->Clear();
19
-}
20
\ No newline at end of file
21
+}
22
+
23
+bool BrowserClient::OnProcessMessageReceived(
24
+ CefRefPtr<CefBrowser> browser,
25
+ CefProcessId source_process,
26
+ CefRefPtr<CefProcessMessage> message)
27
+{
28
+ const std::string& message_name = message->GetName();
29
+ if (message_name == "getCurrentScene") {
30
+
31
+ int callbackID = message->GetArgumentList()->GetInt(0);
32
+
33
+ const char* jsonString = browserOBSBridge->GetCurrentSceneJSONData();
34
+
35
+ CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("executeCallback");
36
+ CefRefPtr<CefListValue> args = msg->GetArgumentList();
37
+ args->SetInt(0, callbackID);
38
+ args->SetString(1, jsonString);
39
+
40
+ browser->SendProcessMessage(PID_RENDERER, msg);
41
+
42
+ return true;
43
+ }
44
+ return false;
45
+}
46
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-client.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-client.hpp
Changed
45
1
2
#pragma once
3
4
#include <include/cef_client.h>
5
+#include "browser-obs-bridge.hpp"
6
7
class BrowserSource;
8
class BrowserRenderHandler;
9
10
{
11
public:
12
BrowserClient(CefRenderHandler *renderHandler,
13
- CefLoadHandler *loadHandler);
14
+ CefLoadHandler *loadHandler,
15
+ BrowserOBSBridge *browserOBSBridge);
16
17
public: /* CefClient overrides */
18
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() OVERRIDE;
19
20
virtual CefRefPtr<CefContextMenuHandler> GetContextMenuHandler()
21
OVERRIDE;
22
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() OVERRIDE;
23
+ virtual bool OnProcessMessageReceived(
24
+ CefRefPtr<CefBrowser> browser,
25
+ CefProcessId source_process,
26
+ CefRefPtr<CefProcessMessage> message) OVERRIDE;
27
28
public: /* CefLifeSpanHandler overrides */
29
virtual bool OnBeforePopup(CefRefPtr<CefBrowser> browser,
30
31
CefRefPtr<CefFrame> frame,
32
CefRefPtr<CefContextMenuParams> params,
33
CefRefPtr<CefMenuModel> model);
34
+
35
private:
36
CefRefPtr<CefRenderHandler> renderHandler;
37
CefRefPtr<CefLoadHandler> loadHandler;
38
+ BrowserOBSBridge *browserOBSBridge;
39
40
public:
41
IMPLEMENT_REFCOUNTING(BrowserClient);
42
-};
43
\ No newline at end of file
44
+};
45
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-listener.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-listener.hpp
Changed
9
1
2
BrowserSurfaceHandle *surfaceHandle) = 0;
3
virtual void DestroySurface(BrowserSurfaceHandle surfaceHandle) = 0;
4
virtual void Invalidated() = 0;
5
-
6
};
7
8
class BrowserListener : public BrowserListenerBase
9
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-manager.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-manager.hpp
Changed
18
1
2
#pragma once
3
4
#include <memory>
5
+#include <jansson.h>
6
7
class BrowserListener;
8
struct BrowserSettings;
9
10
11
void RefreshPageNoCache(int browserIdentifier);
12
13
+ void DispatchJSEvent(const char *eventName, const char *jsonString);
14
+
15
private:
16
class Impl;
17
std::unique_ptr<Impl> pimpl;
18
obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-obs-bridge.hpp
Added
10
1
2
+#pragma once
3
+
4
+class BrowserOBSBridge
5
+{
6
+public:
7
+ virtual const char* GetCurrentSceneJSONData() = 0;
8
+};
9
\ No newline at end of file
10
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-source.hpp -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-source.hpp
Changed
9
1
2
uint32_t height;
3
uint32_t fps;
4
bool shutdown;
5
+ bool restart_when_active;
6
7
int browserIdentifier;
8
9
obs-studio-0.17.0.tar.xz/plugins/obs-browser/shared/browser-version.h -> obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/browser-version.h
Changed
8
1
2
#pragma once
3
4
-#define OBS_BROWSER_VERSION "1.25.0"
5
\ No newline at end of file
6
+#define OBS_BROWSER_VERSION "1.27.0"
7
\ No newline at end of file
8
obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/util.cpp
Added
24
1
2
+#include "util.hpp"
3
+
4
+/**
5
+ Takes an OBS source and generates a JSON encoded string representing information about the source.
6
+
7
+ @param source is the OBS source that we want to turn into json data
8
+ @return json encoded string
9
+*/
10
+const char* obsSourceToJSON(obs_source_t *source)
11
+{
12
+ const char *name = obs_source_get_name(source);
13
+
14
+ json_t *obj = json_object();
15
+ json_object_set_new(obj, "name", json_string(name));
16
+ json_object_set_new(obj, "width", json_integer(obs_source_get_width(source)));
17
+ json_object_set_new(obj, "height", json_integer(obs_source_get_height(source)));
18
+ const char *jsonString = json_dumps(obj, 0);
19
+ free(obj);
20
+
21
+ return jsonString;
22
+}
23
\ No newline at end of file
24
obs-studio-17.0.1.tar.xz/plugins/obs-browser/shared/util.hpp
Added
9
1
2
+#pragma once
3
+
4
+#include <jansson.h>
5
+#include <obs-frontend-api.h>
6
+
7
+extern const char* obsSourceToJSON(obs_source_t *source);
8
\ No newline at end of file
9
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini
Changed
16
1
2
KeyframeIntervalSec="Interval de fotograma clau (en segons, 0 = automàtic)"
3
Lossless="Sense pèrdues"
4
5
+BFrames="B-frames"
6
7
NVENC.Use2Pass="Utilitza codificació en dues passades"
8
NVENC.Preset.default="Per defecte"
9
10
MediaFileFilter.AudioFiles="Arxius d'àudio"
11
MediaFileFilter.AllFiles="Tots els fitxers"
12
13
+ReplayBuffer="Memòria intermèdia de reproducció"
14
+ReplayBuffer.Save="Desa la repetició"
15
16
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/cs-CZ.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/cs-CZ.ini
Changed
9
1
2
KeyframeIntervalSec="Interval klíč. snímků (vteřiny, 0=auto)"
3
Lossless="Lossless"
4
5
+BFrames="B-frames"
6
7
NVENC.Use2Pass="Použít dvoustupňové enkódování"
8
NVENC.Preset.default="Výchozí"
9
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini
Changed
9
1
2
FFmpegOutput="FFmpeg kimenet"
3
FFmpegAAC="FFmpeg alapértelmezett AAC kódoló"
4
-Bitrate="Bitráta"
5
+Bitrate="Bitsebesség"
6
Preset="Készlet"
7
RateControl="Sebesség Vezérlés"
8
KeyframeIntervalSec="Kulcsképkocka időköze (másodperc, 0=auto)"
9
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/it-IT.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/it-IT.ini
Changed
16
1
2
KeyframeIntervalSec="Intervallo Keyframe (secondi, 0=automatico)"
3
Lossless="Lossless"
4
5
+BFrames="B-frames"
6
7
NVENC.Use2Pass="Usa codifica in due passaggi"
8
NVENC.Preset.default="Predefinito"
9
10
MediaFileFilter.AudioFiles="File audio"
11
MediaFileFilter.AllFiles="Tutti i file"
12
13
+ReplayBuffer="Buffer di Replay"
14
+ReplayBuffer.Save="Salva Replay"
15
16
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini
Changed
16
1
2
KeyframeIntervalSec="Интервал ключевых кадров (сек, 0=авто)"
3
Lossless="Без потерь"
4
5
+BFrames="B-Кадры"
6
7
NVENC.Use2Pass="Использовать двухпроходное кодирование"
8
NVENC.Preset.default="По умолчанию"
9
10
MediaFileFilter.AudioFiles="Аудиофайлы"
11
MediaFileFilter.AllFiles="Все файлы"
12
13
+ReplayBuffer="Буфер повтора"
14
ReplayBuffer.Save="Сохранить повтор"
15
16
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini
Changed
16
1
2
KeyframeIntervalSec="Intervall för keyframes (sekunder, 0=automatisk)"
3
Lossless="Förlustfri"
4
5
+BFrames="B-bildrutor"
6
7
NVENC.Use2Pass="Använd tvåpassavkodning"
8
NVENC.Preset.default="Standard"
9
10
MediaFileFilter.AudioFiles="Ljudfiler"
11
MediaFileFilter.AllFiles="Alla filer"
12
13
+ReplayBuffer="Reprisbuffert"
14
+ReplayBuffer.Save="Spara repris"
15
16
obs-studio-0.17.0.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini
Changed
29
1
2
FFmpegAAC="FFmpeg Varsayılan AAC Kodlayıcı"
3
Bitrate="Bit hızı"
4
Preset="Ön Tanımlı"
5
+RateControl="Oran Kontrolü"
6
KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
7
Lossless="Kayıpsız"
8
9
+BFrames="B-frame'leri"
10
11
+NVENC.Use2Pass="İki Taramalı Kodlama Kullan"
12
NVENC.Preset.default="Varsayılan"
13
NVENC.Preset.hq="Yüksek Kalite"
14
NVENC.Preset.hp="Yüksek Performans"
15
16
DiscardNonIntra="Intra Olmayan Kareler"
17
DiscardNonKey="Anahtar Olmayan Kareler"
18
DiscardAll="Tüm Kareler (Dikkatli Olun!)"
19
+RestartWhenActivated="Yeniden oynatmayı kaynak etkin olduğunda yeniden başlat"
20
ColorRange="YUV Renk Aralığı"
21
ColorRange.Auto="Otomatik"
22
ColorRange.Partial="Kısmi"
23
24
MediaFileFilter.AllFiles="Tüm Dosyalar"
25
26
ReplayBuffer="Tekrar Oynatma Arabelleği"
27
+ReplayBuffer.Save="Yeniden Oynatmayı Kaydet"
28
29
obs-studio-0.17.0.tar.xz/plugins/obs-filters/color-correction-filter.c -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/color-correction-filter.c
Changed
37
1
2
};
3
4
const static float root3 = 0.57735f;
5
+const static float red_weight = 0.299f;
6
+const static float green_weight = 0.587f;
7
+const static float blue_weight = 0.114f;
8
+
9
10
/*
11
* As the functions' namesake, this provides the internal name of your Filter,
12
13
SETTING_SATURATION) + 1.0f;
14
15
/* Factor in the selected color weights. */
16
- float one_minus_sat = (1.0f - filter->saturation) / 3.0f;
17
- float sat_val = one_minus_sat + filter->saturation;
18
+ float one_minus_sat_red = (1.0f - filter->saturation) * red_weight;
19
+ float one_minus_sat_green = (1.0f - filter->saturation) * green_weight;
20
+ float one_minus_sat_blue = (1.0f - filter->saturation) * blue_weight;
21
+ float sat_val_red = one_minus_sat_red + filter->saturation;
22
+ float sat_val_green = one_minus_sat_green + filter->saturation;
23
+ float sat_val_blue = one_minus_sat_blue + filter->saturation;
24
25
/* Now we build our Saturation matrix. */
26
filter->sat_matrix = (struct matrix4)
27
{
28
- sat_val, one_minus_sat, one_minus_sat, 0.0f,
29
- one_minus_sat, sat_val, one_minus_sat, 0.0f,
30
- one_minus_sat, one_minus_sat, sat_val, 0.0f,
31
+ sat_val_red, one_minus_sat_red, one_minus_sat_red, 0.0f,
32
+ one_minus_sat_green, sat_val_green, one_minus_sat_green, 0.0f,
33
+ one_minus_sat_blue, one_minus_sat_blue, sat_val_blue, 0.0f,
34
0.0f, 0.0f, 0.0f, 1.0f
35
};
36
37
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/color_correction_filter.effect -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/color_correction_filter.effect
Changed
40
1
2
float2 uv : TEXCOORD0;
3
};
4
5
-struct CurrentPixel {
6
- float4 current_pixel;
7
-};
8
-
9
VertData VSDefault(VertData vert_in)
10
{
11
VertData vert_out;
12
13
14
float4 PSColorFilterRGBA(VertData vert_in) : TARGET
15
{
16
- /* Realize the struct. */
17
- CurrentPixel pixel = (CurrentPixel) 0;
18
-
19
/* Grab the current pixel to perform operations on. */
20
- pixel.current_pixel = image.Sample(textureSampler, vert_in.uv);
21
+ float4 currentPixel = image.Sample(textureSampler, vert_in.uv);
22
23
/* Always address the gamma first. */
24
- pixel.current_pixel.rgb = pow(pixel.current_pixel.rgb, gamma);
25
+ currentPixel.rgb = pow(currentPixel.rgb, gamma);
26
27
/* Much easier to manipulate pixels for these types of operations
28
* when in a matrix such as the below. See
29
* http://www.graficaobscura.com/matrix/index.html and
30
* https://docs.rainmeter.net/tips/colormatrix-guide/for more info.
31
*/
32
- pixel.current_pixel = mul(color_matrix, pixel.current_pixel);
33
+ currentPixel = mul(color_matrix, currentPixel);
34
35
- return pixel.current_pixel;
36
+ return currentPixel;
37
}
38
39
technique Draw
40
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/ca-ES.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/ca-ES.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Bicúbic"
3
ScaleFiltering.Lanczos="Lanczos"
4
NoiseSuppress.SuppressLevel="Nivell de supressió (dB)"
5
+Saturation="Saturació"
6
+HueShift="Cavi de tonalitat"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/cs-CZ.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/cs-CZ.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Bikubický"
3
ScaleFiltering.Lanczos="Lanczos"
4
NoiseSuppress.SuppressLevel="Úroveň potlačení (dB)"
5
+Saturation="Saturace"
6
+HueShift="Posun odstínu"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/eu-ES.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/eu-ES.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Bikubikoa"
3
ScaleFiltering.Lanczos="Lanczos"
4
NoiseSuppress.SuppressLevel="Kenketaren maila (dB)"
5
+Saturation="Margoasetasuna"
6
+HueShift="Nabardura Aldaketa"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/fi-FI.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/fi-FI.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Bicubic"
3
ScaleFiltering.Lanczos="Lanczos"
4
NoiseSuppress.SuppressLevel="Vaimennustaso (dB)"
5
+Saturation="Värikylläisyys"
6
+HueShift="Värisävy"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/it-IT.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/it-IT.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Bicubico"
3
ScaleFiltering.Lanczos="Lanczos"
4
NoiseSuppress.SuppressLevel="Livello di soppressione (dB)"
5
+Saturation="Saturazione"
6
+HueShift="Cambio di tonalità"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Бикубическая"
3
ScaleFiltering.Lanczos="Метод Ланцоша"
4
NoiseSuppress.SuppressLevel="Уровень подавления (дБ)"
5
+Saturation="Насыщенность"
6
+HueShift="Сдвиг оттенка"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/sv-SE.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/sv-SE.ini
Changed
7
1
2
ScaleFiltering.Bicubic="Bikubisk"
3
ScaleFiltering.Lanczos="Lanczos"
4
NoiseSuppress.SuppressLevel="Brusreduceringsnivå (dB)"
5
+Saturation="Mättnad"
6
7
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/tr-TR.ini
Changed
30
1
2
ColorFilter="Renk Düzeltme"
3
MaskFilter="Görüntü Maskesi/Blend"
4
AsyncDelayFilter="Görüntü Gecikmesi (Async)"
5
+CropFilter="Kes/Kaydır"
6
ScrollFilter="Kaydır"
7
ChromaKeyFilter="Chroma Anahtarı"
8
ColorKeyFilter="Renk Anahtarı"
9
SharpnessFilter="Keskinleştirme"
10
+ScaleFilter="Ölçeklendirme/Boy Oranı"
11
NoiseGate="Gürültü Filtresi"
12
NoiseSuppress="Gürültü Bastırma"
13
Gain="Kazanç"
14
15
NoiseGate.HoldTime="Kavrama Süresi (milisaniye)"
16
NoiseGate.ReleaseTime="Bırakma Süresi (milisaniye)"
17
Gain.GainDB="Kazanç (dB)"
18
+StretchImage="Görüntüyü Uzat (görüntü boy oranını görmezden gelir)"
19
Resolution="Çözünürlük"
20
None="Hiçbiri"
21
ScaleFiltering="Ölçek Filtreleme"
22
23
ScaleFiltering.Bilinear="Bilinear"
24
ScaleFiltering.Bicubic="Bicubic"
25
ScaleFiltering.Lanczos="Lanczos"
26
+NoiseSuppress.SuppressLevel="Bastırma Düzeyi (dB)"
27
+Saturation="Renk Doygunluğu"
28
+HueShift="Ton Kayması"
29
30
obs-studio-0.17.0.tar.xz/plugins/obs-filters/data/locale/uk-UA.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-filters/data/locale/uk-UA.ini
Changed
8
1
2
ScaleFiltering.Bicubic="Бікубічний"
3
ScaleFiltering.Lanczos="Ланцош"
4
NoiseSuppress.SuppressLevel="Рівень подавлення (дБ)"
5
+Saturation="Насиченість"
6
+HueShift="Відтінок"
7
8
obs-studio-0.17.0.tar.xz/plugins/obs-libfdk/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-libfdk/data/locale/hu-HU.ini
Changed
7
1
2
LibFDK="libfdk AAC kódoló"
3
-Bitrate="Bitráta"
4
+Bitrate="Bitsebesség"
5
Afterburner="AAC Afterburner engedélyezése"
6
7
obs-studio-0.17.0.tar.xz/plugins/obs-outputs/net-if.h -> obs-studio-17.0.1.tar.xz/plugins/obs-outputs/net-if.h
Changed
9
1
2
# ifdef __linux__
3
# include <linux/if_link.h>
4
# elif __FreeBSD__
5
+# include <netinet/in.h>
6
# ifndef _GNU_SOURCE
7
# define _GNU_SOURCE
8
# define __NET_IF_GNU_SOURCE__
9
obs-studio-0.17.0.tar.xz/plugins/obs-qsv11/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-qsv11/data/locale/hu-HU.ini
Changed
10
1
2
TargetUsage="Felhasználási cél"
3
-Bitrate="Bitráta"
4
-MaxBitrate="Max bitráta"
5
+Bitrate="Bitsebesség"
6
+MaxBitrate="Max bitsebesség"
7
RateControl="Sebesség Vezérlés"
8
KeyframeIntervalSec="Kulcsképkocka időköze (másodperc, 0=auto)"
9
Profile="Profil"
10
obs-studio-0.17.0.tar.xz/plugins/obs-qsv11/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-qsv11/data/locale/tr-TR.ini
Changed
14
1
2
TargetUsage="Hedef Kullanımı"
3
Bitrate="Bit hızı"
4
MaxBitrate="Maks Bit hızı"
5
+RateControl="Oran Kontrolü"
6
KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
7
Profile="Profil"
8
+AsyncDepth="Eşzamansız Derinlik"
9
Accuracy="Doğruluk"
10
+Convergence="Yakınsama"
11
ICQQuality="ICQ Kalitesi"
12
+LookAheadDepth="İleri Yönlü Derinlik"
13
14
obs-studio-0.17.0.tar.xz/plugins/obs-text/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-text/data/locale/tr-TR.ini
Changed
9
1
2
Outline.Color="Anahat Rengi"
3
Outline.Opacity="Anahat Saydamlığı"
4
UseCustomExtents="İsteğe Bağlı Metin Boyutu Kullan"
5
+UseCustomExtents.Wrap="Metni Kaydır"
6
Width="Genişlik"
7
Height="Yükseklik"
8
9
obs-studio-0.17.0.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini
Changed
10
1
2
Direction.Down="Aşağı"
3
SwipeIn="İçeri Kaydır"
4
Color="Renk"
5
+SwitchPoint="En yüksek Renk Noktası (yüzde)"
6
+LumaWipeTransition="Luma Wipe"
7
LumaWipe.Image="Görüntü"
8
LumaWipe.Invert="Ters Çevir"
9
LumaWipe.Softness="Yumuşaklık"
10
obs-studio-0.17.0.tar.xz/plugins/obs-x264/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-x264/data/locale/hu-HU.ini
Changed
7
1
2
-Bitrate="Bitráta"
3
+Bitrate="Bitsebesség"
4
CustomBufsize="Egyéni pufferméret használata"
5
BufferSize="Pufferméret"
6
RateControl="Sebesség Vezérlés"
7
obs-studio-0.17.0.tar.xz/plugins/obs-x264/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/obs-x264/data/locale/tr-TR.ini
Changed
9
1
2
Bitrate="Bit hızı"
3
CustomBufsize="İsteğe Bağlı Arabellek Boyutu Kullan"
4
BufferSize="Arabellek Boyutu"
5
+RateControl="Oran Kontrolü"
6
CRF="CRF"
7
KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
8
CPUPreset="CPU Kullanım Önayarı (yüksek = az CPU kullanımı)"
9
obs-studio-0.17.0.tar.xz/plugins/obs-x264/obs-x264.c -> obs-studio-17.0.1.tar.xz/plugins/obs-x264/obs-x264.c
Changed
22
1
2
preset, profile, tune);
3
}
4
5
+#define OPENCL_ALIAS "opencl_is_experimental_and_potentially_unstable"
6
+
7
static inline void set_param(struct obs_x264 *obsx264, const char *param)
8
{
9
char *name;
10
11
strcmp(name, "fps") != 0 &&
12
strcmp(name, "force-cfr") != 0 &&
13
strcmp(name, "width") != 0 &&
14
- strcmp(name, "height") != 0) {
15
+ strcmp(name, "height") != 0 &&
16
+ strcmp(name, "opencl") != 0) {
17
+ if (strcmp(name, OPENCL_ALIAS) == 0)
18
+ strcpy(name, "opencl");
19
if (x264_param_parse(&obsx264->params, name, val) != 0)
20
warn("x264 param: %s failed", param);
21
}
22
obs-studio-0.17.0.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-17.0.1.tar.xz/plugins/rtmp-services/data/package.json
Changed
14
1
2
{
3
"url": "https://obsproject.com/obs2_update/rtmp-services",
4
- "version": 43,
5
+ "version": 44,
6
"files": [
7
{
8
"name": "services.json",
9
- "version": 43
10
+ "version": 44
11
}
12
]
13
}
14
obs-studio-0.17.0.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-17.0.1.tar.xz/plugins/rtmp-services/data/services.json
Changed
10
1
2
"recommended": {
3
"keyint": 2,
4
"profile": "main",
5
- "max video bitrate": 18000,
6
+ "max video bitrate": 51000,
7
"max audio bitrate": 160
8
}
9
},
10
obs-studio-0.17.0.tar.xz/plugins/vlc-video/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/vlc-video/data/locale/tr-TR.ini
Changed
10
1
2
VLCSource="VLC Video Kaynağı"
3
Playlist="Oynatma Listesi"
4
+LoopPlaylist="Oynatma Listesini Yinele"
5
+PlaybackBehavior="Görünürlük davranışı"
6
+PlaybackBehavior.StopRestart="Görünür değilken durdur, görünür olunca yeniden başlat"
7
+PlaybackBehavior.PauseUnpause="Görünür değilken duraklat, görünür olunca oynat"
8
+PlaybackBehavior.AlwaysPlay="Görünür değilken bile oynat"
9
10
obs-studio-0.17.0.tar.xz/plugins/win-capture/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/win-capture/data/locale/tr-TR.ini
Changed
16
1
2
PrimaryMonitor="Birincil Ekran"
3
GameCapture="Oyun Yakalama"
4
GameCapture.AnyFullscreen="Tam ekran herhangi bir uygulamayı yakala"
5
+GameCapture.CaptureWindow="Belirli bir pencereyi yakala"
6
+GameCapture.UseHotkey="Ön plandaki pencereyi kısayol ile yakala"
7
GameCapture.ForceScaling="Zorla Ölçekle"
8
GameCapture.ScaleRes="Ölçekleme Çözünürlüğü"
9
GameCapture.LimitFramerate="Yakalama kare hızını sınırlandır"
10
GameCapture.CaptureOverlays="Üçüncü taraf katmanları yakala (steam vb.)"
11
GameCapture.AntiCheatHook="Anti-hile uyumluluğunu kullan"
12
+GameCapture.HotkeyStart="Ön plandaki pencereyi yakala"
13
+GameCapture.HotkeyStop="Yakalamayı devre dışı bırak"
14
Mode="Mod"
15
16
obs-studio-0.17.0.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-17.0.1.tar.xz/plugins/win-capture/game-capture.c
Changed
130
1
2
ipc_pipe_server_t pipe;
3
gs_texture_t *texture;
4
struct hook_info *global_hook_info;
5
- HANDLE keepalive_thread;
6
- DWORD keepalive_thread_id;
7
+ HANDLE keepalive_mutex;
8
HANDLE hook_init;
9
HANDLE hook_restart;
10
HANDLE hook_stop;
11
12
gc->data = NULL;
13
}
14
15
- if (gc->keepalive_thread) {
16
- PostThreadMessage(gc->keepalive_thread_id, WM_QUIT, 0, 0);
17
- WaitForSingleObject(gc->keepalive_thread, 300);
18
- close_handle(&gc->keepalive_thread);
19
- }
20
-
21
if (gc->app_sid) {
22
LocalFree(gc->app_sid);
23
gc->app_sid = NULL;
24
25
close_handle(&gc->hook_exit);
26
close_handle(&gc->hook_init);
27
close_handle(&gc->hook_data_map);
28
+ close_handle(&gc->keepalive_mutex);
29
close_handle(&gc->global_hook_info_map);
30
close_handle(&gc->target_process);
31
close_handle(&gc->texture_mutexes[0]);
32
33
return true;
34
}
35
36
-struct keepalive_data {
37
- struct game_capture *gc;
38
- HANDLE initialized;
39
-};
40
-
41
-#define DEF_FLAGS (WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS)
42
-
43
-static DWORD WINAPI keepalive_window_thread(struct keepalive_data *data)
44
-{
45
- HANDLE initialized = data->initialized;
46
- struct game_capture *gc = data->gc;
47
- wchar_t new_name[64];
48
- WNDCLASSW wc;
49
- HWND window;
50
- MSG msg;
51
-
52
- _snwprintf(new_name, sizeof(new_name), L"%s%lu",
53
- WINDOW_HOOK_KEEPALIVE, gc->process_id);
54
-
55
- memset(&wc, 0, sizeof(wc));
56
- wc.style = CS_OWNDC;
57
- wc.hInstance = GetModuleHandleW(NULL);
58
- wc.lpfnWndProc = (WNDPROC)DefWindowProc;
59
- wc.lpszClassName = new_name;
60
-
61
- if (!RegisterClass(&wc)) {
62
- warn("Failed to create keepalive window class: %lu",
63
- GetLastError());
64
- return 0;
65
- }
66
-
67
- window = CreateWindowExW(0, new_name, NULL, DEF_FLAGS, 0, 0, 1, 1,
68
- NULL, NULL, wc.hInstance, NULL);
69
- if (!window) {
70
- warn("Failed to create keepalive window: %lu",
71
- GetLastError());
72
- return 0;
73
- }
74
-
75
- SetEvent(initialized);
76
-
77
- while (GetMessage(&msg, NULL, 0, 0)) {
78
- TranslateMessage(&msg);
79
- DispatchMessage(&msg);
80
- }
81
-
82
- DestroyWindow(window);
83
- UnregisterClassW(new_name, wc.hInstance);
84
-
85
- return 0;
86
-}
87
-
88
static inline bool init_keepalive(struct game_capture *gc)
89
{
90
- struct keepalive_data data;
91
- HANDLE initialized = CreateEvent(NULL, false, false, NULL);
92
-
93
- data.gc = gc;
94
- data.initialized = initialized;
95
+ wchar_t new_name[64];
96
+ _snwprintf(new_name, 64, L"%s%lu", WINDOW_HOOK_KEEPALIVE,
97
+ gc->process_id);
98
99
- gc->keepalive_thread = CreateThread(NULL, 0,
100
- (LPTHREAD_START_ROUTINE)keepalive_window_thread,
101
- &data, 0, &gc->keepalive_thread_id);
102
- if (!gc->keepalive_thread) {
103
- warn("Failed to create keepalive window thread: %lu",
104
- GetLastError());
105
+ gc->keepalive_mutex = CreateMutexW(NULL, false, new_name);
106
+ if (!gc->keepalive_mutex) {
107
+ warn("Failed to create keepalive mutex: %lu", GetLastError());
108
return false;
109
}
110
111
- WaitForSingleObject(initialized, INFINITE);
112
- CloseHandle(initialized);
113
-
114
return true;
115
}
116
117
118
gc->global_hook_info->capture_overlay = gc->config.capture_overlays;
119
gc->global_hook_info->force_shmem = gc->config.force_shmem;
120
gc->global_hook_info->use_scale = gc->config.force_scaling;
121
- gc->global_hook_info->cx = gc->config.scale_cx;
122
- gc->global_hook_info->cy = gc->config.scale_cy;
123
+ if (gc->config.scale_cx)
124
+ gc->global_hook_info->cx = gc->config.scale_cx;
125
+ if (gc->config.scale_cy)
126
+ gc->global_hook_info->cy = gc->config.scale_cy;
127
reset_frame_interval(gc);
128
129
obs_enter_graphics();
130
obs-studio-0.17.0.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h -> obs-studio-17.0.1.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h
Changed
16
1
2
3
static inline bool capture_alive(void)
4
{
5
- return !!FindWindowW(keepalive_name, NULL);
6
+ HANDLE handle = OpenMutexW(SYNCHRONIZE, false, keepalive_name);
7
+ CloseHandle(handle);
8
+
9
+ if (handle)
10
+ return true;
11
+
12
+ return GetLastError() != ERROR_FILE_NOT_FOUND;
13
}
14
15
static inline bool capture_active(void)
16
obs-studio-0.17.0.tar.xz/plugins/win-capture/window-helpers.c -> obs-studio-17.0.1.tar.xz/plugins/win-capture/window-helpers.c
Changed
37
1
2
HWND child;
3
4
GetWindowThreadProcessId(parent, &parent_id);
5
- child = FindWindowEx(parent, NULL, NULL, NULL);
6
+ child = GetWindow(parent, GW_CHILD);
7
8
while (child) {
9
DWORD child_id = 0;
10
11
if (child_id != parent_id)
12
return child;
13
14
- child = FindWindowEx(parent, child, NULL, NULL);
15
+ child = GetNextWindow(child, GW_HWNDNEXT);
16
}
17
18
return NULL;
19
20
}
21
22
while (true) {
23
- window = FindWindowEx(GetDesktopWindow(), window, NULL, NULL);
24
+ window = GetNextWindow(window, GW_HWNDNEXT);
25
if (!window || check_window_valid(window, mode))
26
break;
27
}
28
29
30
static inline HWND first_window(enum window_search_mode mode, HWND *parent)
31
{
32
- HWND window = FindWindowEx(GetDesktopWindow(), NULL, NULL, NULL);
33
+ HWND window = GetWindow(GetDesktopWindow(), GW_CHILD);
34
35
*parent = NULL;
36
37
obs-studio-0.17.0.tar.xz/plugins/win-dshow/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/win-dshow/data/locale/hu-HU.ini
Changed
10
1
2
FlipVertically="Függőleges tükrözés"
3
DeactivateWhenNotShowing="Kikapcsolás, ha nem jelenik meg"
4
5
-Bitrate="Bitráta"
6
+Bitrate="Bitsebesség"
7
Encoder.C985="AVerMedia H.264 kódoló (c985)"
8
Encoder.C353="AVerMedia H.264 kódoló"
9
10
obs-studio-0.17.0.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/win-dshow/data/locale/tr-TR.ini
Changed
9
1
2
Activate="Etkinleştir"
3
Deactivate="Devredışı Bırak"
4
FlipVertically="Dikey Çevir"
5
+DeactivateWhenNotShowing="Gösterilmediğinde devre dışı bırak"
6
7
Bitrate="Bit hızı"
8
Encoder.C985="AVerMedia H.264 Kodlayıcısı (c985)"
9
obs-studio-0.17.0.tar.xz/plugins/win-mf/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/win-mf/data/locale/hu-HU.ini
Changed
27
1
2
MFAACEnc="Media Foundation AAC kódoló"
3
-Bitrate="Bitráta"
4
+Bitrate="Bitsebesség"
5
6
MF.H264.EncoderName="Media Foundation H264 kódoló"
7
MF.H264.Encoder="Kódoló név"
8
9
MF.H264.BFrames="Egymást követő B-Frame szám"
10
MF.H264.CustomBufsize="Egyéni pufferméret használata"
11
MF.H264.BufferSize="Pufferméret"
12
-MF.H264.CustomMaxBitrate="Egyéni maximális bitráta használata"
13
-MF.H264.Bitrate="Bitráta"
14
-MF.H264.MaxBitrate="Max bitráta"
15
+MF.H264.CustomMaxBitrate="Egyéni maximális bitsebesség használata"
16
+MF.H264.Bitrate="Bitsebesség"
17
+MF.H264.MaxBitrate="Max bitsebesség"
18
MF.H264.KeyframeIntervalSec="Kulcsképkocka időköze (másodperc, 0=auto)"
19
MF.H264.RateControl="Sebesség vezérlés"
20
-MF.H264.CBR="CBR (állandó bitráta)"
21
-MF.H264.VBR="VBR (változó bitráta)"
22
+MF.H264.CBR="CBR (állandó bitsebesség)"
23
+MF.H264.VBR="VBR (változó bitsebesség)"
24
MF.H264.CQP="CQP (állandó minőség)"
25
MF.H264.MinQP="Minimális QP"
26
MF.H264.MaxQP="Maximális QP"
27
obs-studio-0.17.0.tar.xz/plugins/win-mf/data/locale/tr-TR.ini -> obs-studio-17.0.1.tar.xz/plugins/win-mf/data/locale/tr-TR.ini
Changed
31
1
2
3
MF.H264.EncoderName="Medya Vakfı H264 Kodlayıcısı"
4
MF.H264.Encoder="Kodlayıcı Adı"
5
+MF.H264.LowLatency="Düşük Gecikme Süresi (Çerçeve yeniden sıralamasını devre dışı bırak)"
6
+MF.H264.BFrames="Ardışık B-Frame sayısı"
7
MF.H264.CustomBufsize="İsteğe Bağlı Arabellek Boyutu Kullan"
8
MF.H264.BufferSize="Arabellek Boyutu"
9
+MF.H264.CustomMaxBitrate="Özel En Yüksek Bit Hızı Kullan"
10
MF.H264.Bitrate="Bithızı"
11
-MF.H264.MaxBitrate="Maks Bit hızı"
12
+MF.H264.MaxBitrate="En Yüksek Bit Hızı"
13
MF.H264.KeyframeIntervalSec="Anahtarkare Aralığı (saniye, 0=otomatik)"
14
+MF.H264.RateControl="Oran Kontrolü"
15
+MF.H264.CBR="CBR (Sabit bit hızı)"
16
MF.H264.VBR="VBR (Değişken Bit Hızı)"
17
+MF.H264.CQP="CQP (Sabit Kalite)"
18
MF.H264.MinQP="Minimum QP"
19
MF.H264.MaxQP="Maksimum QP"
20
+MF.H264.QPI="QP I-Frame"
21
+MF.H264.QPP="QP P-Frame"
22
+MF.H264.QPB="QP B-Frame"
23
MF.H264.Profile="Profil"
24
MF.H264.Advanced="Gelişmiş"
25
26
+MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Kodlayıcısı"
27
+MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodlayıcısı (Media Foundation)"
28
+MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Kodlayıcısı (Media Foundation)"
29
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Kodlayıcısı (Media Foundation)"
30
31
obs-studio-0.17.0.tar.xz/plugins/win-wasapi/data/locale/hu-HU.ini -> obs-studio-17.0.1.tar.xz/plugins/win-wasapi/data/locale/hu-HU.ini
Changed
9
1
2
-AudioInput="Bemeneti hangrögzítés"
3
-AudioOutput="Kimeneti hangrögzítés"
4
+AudioInput="Bemeneti hangrögzítő"
5
+AudioOutput="Kimeneti hangrögzítő"
6
Device="Eszköz"
7
Default="Alapértelmezett"
8
UseDeviceTiming="Eszköz időbélyegzőinek használata"
9