Changes of Revision 37
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Fri Nov 04 15:36:07 UTC 2016 - jimmy@boombatower.com
4
+
5
+- Update to version 0.16.4:
6
+ * libobs/util: Fix get_dll_ver not reporting DLL name
7
+ * Display license in MSI installer
8
+ * rtmp-services: Add Asian Livecoding.tv server and increase video bitrate
9
+ * UI: Enable HiDPI scaling.
10
+ * frontend-tools: Fix crash when adding invalid regex
11
+ * UI: Use Qt lib for screen info instead of x11 libs
12
+ * enc-amf: Update to 1.3.2.3
13
+ * UI: Only scale HiDPI on QT 5.6+
14
+ * enc-amf: Update to 1.3.3.1
15
+ * libobs-d3d11: Log GetDeviceRemovedReason
16
+ * Add 256x256 icon to windows ico for HiDPI displays
17
+ * UI: Add Portable Mode indicator to title bar and log
18
+ * UI: Add raw text and text file to drag&drop support
19
+ * UI: Split Properties window with a QSplitter
20
+ * CMake: Warn if empty QTDIR/DepsPath vars on Windows
21
+ * OSX Travis build
22
+ * CI: Upload artifacts on all pushes
23
+ * CI: Add irc notifications to travis config
24
+ * CI: Reduce travis irc notice to one line
25
+ * CI: Package OSX build into an actual app
26
+ * CI: Use python2 to run package script
27
+ * Build browser plugin on travis for OSX
28
+ * Update obs-browser submodule to a working version
29
+ * obs-frontend-api: Add library version
30
+ * cmake: Fix FFmpeg search path on debian
31
+ * decklink: Update Blackmagic SDK to 10.8.0
32
+ * CI: Build on OSX 10.10 on travis
33
+ * UI: Fix bug in frontend API event
34
+ * frontend-tools: Add output timers
35
+ * frontend-tools: Code cleanup of output timers
36
+ * frontend-tools: Add ability to start timer if output is already active
37
+ * UI: Fix sys. tray crashes when sys. tray not available
38
+ * UI: Fix poor handling of system tray pointers
39
+ * UI: Fix improper brace placement for function
40
+ * UI: Remove unused variable
41
+ * UI: Fix full screen projector on screens that have reserved areas
42
+ * obs-ffmpeg: Add b-frames to NVENC logging
43
+ * UI: Fix --profile option not working on non-windows
44
+ * rtmp-services: Add Picarto
45
+ * libobs/util: Add Get() function to CoTaskMemPtr
46
+ * libobs: Fix missing call to profile_end() when encoding fails
47
+ * libobs: Add date/time to crash handler
48
+ * obs-transitions: Avoid branching in slide_transition.effect
49
+ * obs-ffmpeg: Fix a couple printf compiler warnings.
50
+ * libobs-d3d11: Store dxgi adapter used for device
51
+ * libobs-d3d11: Store compiled shader data (for rebuilding)
52
+ * libobs-d3d11: Correct error message for pixel shaders
53
+ * libobs-d3d11: Store shader samplers as pointers
54
+ * libobs-d3d11: Correct error message for staging surfaces
55
+ * libobs-d3d11: Correct error message creating blend states
56
+ * libobs-d3d11: Store index and add "Start" function
57
+ * libobs-d3d11: Clear device state before unloading
58
+ * libobs-d3d11: Store swap initialization data (for rebuilding)
59
+ * libobs-d3d11: Store device adapter index (for rebuilding)
60
+ * libobs-d3d11: Store static textures in RAM (for rebuilding)
61
+ * libobs-d3d11: Store static vertex buffer data (for rebuilding)
62
+ * libobs-d3d11: Save all D3D11 object descriptors (for rebuilding)
63
+ * libobs-d3d11: Make shared texture error message less vague
64
+ * libobs-d3d11: Use linked list for all objects (for rebuilding)
65
+ * libobs-d3d11: Remove unused function
66
+ * libobs-d3d11: Add Release funtions to all GS objects
67
+ * libobs-d3d11: Rebuild device and assets if device removed/reset
68
+ * win-capture: Cache cursor textures to prevent reallocation
69
+ * win-capture: Use IUnknown for getting swap backbuffers
70
+ * win-capture: Add D3D12 capture support
71
+ * UI: Allow the ability to use deprecated sources
72
+ * UI: Add AMD presets and update settings
73
+ * enc-amf: Update to release 1.4.0.0
74
+ * Update translations from CrowdIn
75
+ * libobs: Update to version 0.16.3
76
+ * win-mf: Deprecate AMD Media Foundation H.264 encoder
77
+ * UI: Fix tab order of Crop fields in Transform Properties
78
+ * enc-amf: Update to Version 1.4.1.0
79
+ * Revert "UI: Only scale HiDPI on QT 5.6+"
80
+ * Revert "UI: Enable HiDPI scaling."
81
+ * enc-amf: Fix VS2013 compiling issue
82
+ * libobs: Update to version 0.16.4
83
+- Expand libobs-frontend-api.so to include all versions in %files.
84
+- After upstream fix place libobs-(opengl|frontend-api).so in devel.
85
+
86
+-------------------------------------------------------------------
87
Thu Sep 29 20:07:16 UTC 2016 - jimmy@boombatower.com
88
89
- Update to version 0.16.2:
90
obs-studio.spec
Changed
28
1
2
Name: obs-studio
3
-Version: 0.16.2
4
+Version: 0.16.4
5
Release: 0
6
Summary: A recording/broadcasting program
7
8
9
# needs obs-plugins in lib/ even though 64bit
10
%{_usr}/lib/obs-plugins
11
%{_libdir}/libobs.so.0
12
-%{_libdir}/libobs-frontend-api.so
13
-%{_libdir}/libobs-opengl.so*
14
+%{_libdir}/libobs-frontend-api.so.*
15
+%{_libdir}/libobs-opengl.so.*
16
%{_libdir}/libobsglad.so.0
17
%{_datadir}/applications/obs.desktop
18
%{_datadir}/icons/hicolor/256x256/apps/obs.png
19
20
%defattr(-, root, root)
21
%{_usr}/lib/cmake
22
%{_libdir}/libobs.so
23
+%{_libdir}/libobs-frontend-api.so
24
+%{_libdir}/libobs-opengl.so
25
%{_libdir}/libobsglad.so
26
%{_includedir}/obs
27
28
_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.16.2</param>
6
+ <param name="revision">refs/tags/0.16.4</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">580cfc1a95a6bb2b4ea6f002c95c630ae4542ed7</param>
6
+ <param name="changesrevision">b77fdd7c9a99b34414afeb90d5d5a2970fb58f58</param>
7
</service>
8
</servicedata>
9
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/InstallerLicense.txt
Deleted
23
1
2
-The MIT License (MIT)
3
-
4
-Copyright (c) 2016
5
-
6
-Permission is hereby granted, free of charge, to any person obtaining a copy
7
-of this software and associated documentation files (the "Software"), to deal
8
-in the Software without restriction, including without limitation the rights
9
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
-copies of the Software, and to permit persons to whom the Software is
11
-furnished to do so, subject to the following conditions:
12
-
13
-The above copyright notice and this permission notice shall be included in all
14
-copies or substantial portions of the Software.
15
-
16
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
-SOFTWARE.
23
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/Libs
Deleted
2
1
-(directory)
2
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/Libs/16.8.3
Deleted
2
1
-(directory)
2
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/Libs/16.8.3/amfrt64.i64
Deleted
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/Libs/16.9.2
Deleted
2
1
-(directory)
2
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/Libs/16.9.2/amfrt32.i64
Deleted
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#ThirdParty
Deleted
2
1
-(directory)
2
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#ThirdParty/README.md
Deleted
17
1
2
-# Third Party Content for the OBS AMF Plugin
3
-
4
-## OBS Studio Source & Build Files
5
-
6
-1. Clone the OBS Studio Source Code
7
-2. Build it (both x86 and x64) with the same Visual Studio version you built the plugin with.
8
-3. Create a soft link (directory junction) to the OBS Studio Source Code root named OBS-Studio here.<br>
9
-Ex (Windows): mklink /J OBS-Studio C:/Src/OBS/
10
-
11
-## AMD AMF SDK
12
-
13
-1. Clone the [AMD AMF SDK](https://github.com/GPUOpen-LibrariesAndSDKs/AMF)
14
-2. Create a Soft Link (Directory Junction) to <SDK root>/amf/public/ called AMD-AMF-SDK.<br>
15
-Ex (Windows): mklink /J AMD-AMF-SDK C:/Src/AMF/
16
\ No newline at end of file
17
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Include/enc-h264-simple.h
Deleted
85
1
2
-/*
3
-MIT License
4
-
5
-Copyright (c) 2016 Michael Fabian Dirks
6
-
7
-Permission is hereby granted, free of charge, to any person obtaining a copy
8
-of this software and associated documentation files (the "Software"), to deal
9
-in the Software without restriction, including without limitation the rights
10
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
-copies of the Software, and to permit persons to whom the Software is
12
-furnished to do so, subject to the following conditions:
13
-
14
-The above copyright notice and this permission notice shall be included in all
15
-copies or substantial portions of the Software.
16
-
17
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
-SOFTWARE.
24
-*/
25
-
26
-#pragma once
27
-//////////////////////////////////////////////////////////////////////////
28
-// Includes
29
-//////////////////////////////////////////////////////////////////////////
30
-#include <stdint.h>
31
-#include <inttypes.h>
32
-
33
-// Plugin
34
-#include "plugin.h"
35
-#include "amd-amf.h"
36
-#include "amd-amf-vce.h"
37
-#include "amd-amf-vce-capabilities.h"
38
-
39
-//////////////////////////////////////////////////////////////////////////
40
-// Code
41
-//////////////////////////////////////////////////////////////////////////
42
-namespace Plugin {
43
- namespace Interface {
44
- class H264SimpleInterface {
45
- //////////////////////////////////////////////////////////////////////////
46
- // Static Code
47
- //////////////////////////////////////////////////////////////////////////
48
- public:
49
- static void encoder_register();
50
- static const char* get_name(void* type_data);
51
- static void get_defaults(obs_data_t *settings);
52
- static obs_properties_t* get_properties(void* data);
53
- static bool ui_modified(obs_properties_t *props, obs_property_t *property, obs_data_t *settings);
54
-
55
- static void* create(obs_data_t* settings, obs_encoder_t* encoder);
56
- static void destroy(void* data);
57
- static bool update(void *data, obs_data_t *settings);
58
- static bool encode(void *data, struct encoder_frame * frame, struct encoder_packet * packet, bool * received_packet);
59
- static void get_video_info(void *data, struct video_scale_info *info);
60
- static bool get_extra_data(void *data, uint8_t** extra_data, size_t* size);
61
-
62
- //////////////////////////////////////////////////////////////////////////
63
- // Module Code
64
- //////////////////////////////////////////////////////////////////////////
65
- public:
66
-
67
- H264SimpleInterface(obs_data_t* settings, obs_encoder_t* encoder);
68
- ~H264SimpleInterface();
69
-
70
- bool update(obs_data_t* settings);
71
- bool encode(struct encoder_frame * frame, struct encoder_packet * packet, bool * received_packet);
72
- void get_video_info(struct video_scale_info* info);
73
- bool get_extra_data(uint8_t** extra_data, size_t* size);
74
-
75
- //////////////////////////////////////////////////////////////////////////
76
- // Storage
77
- //////////////////////////////////////////////////////////////////////////
78
- private:
79
- Plugin::AMD::VCEEncoder* m_VideoEncoder;
80
-
81
- };
82
- }
83
-}
84
\ No newline at end of file
85
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Source/enc-h264-simple.cpp
Deleted
989
1
2
-/*
3
-MIT License
4
-
5
-Copyright (c) 2016 Michael Fabian Dirks
6
-
7
-Permission is hereby granted, free of charge, to any person obtaining a copy
8
-of this software and associated documentation files (the "Software"), to deal
9
-in the Software without restriction, including without limitation the rights
10
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
-copies of the Software, and to permit persons to whom the Software is
12
-furnished to do so, subject to the following conditions:
13
-
14
-The above copyright notice and this permission notice shall be included in all
15
-copies or substantial portions of the Software.
16
-
17
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
-SOFTWARE.
24
-*/
25
-
26
-//////////////////////////////////////////////////////////////////////////
27
-// Includes
28
-//////////////////////////////////////////////////////////////////////////
29
-#include "enc-h264-simple.h"
30
-
31
-#if (defined _WIN32) | (defined _WIN64)
32
-#include <VersionHelpers.h>
33
-#endif
34
-
35
-//////////////////////////////////////////////////////////////////////////
36
-// Defines
37
-//////////////////////////////////////////////////////////////////////////
38
-
39
-// Simple Interface
40
-#define AMF_H264SIMPLE_NAME TEXT_AMF_H264SIMPLE("Name")
41
-#define AMF_H264SIMPLE_PRESET TEXT_AMF_H264SIMPLE("Preset")
42
-#define AMF_H264SIMPLE_PRESET_RECORDING TEXT_AMF_H264SIMPLE("Preset.Recording")
43
-#define AMF_H264SIMPLE_PRESET_TWITCH TEXT_AMF_H264SIMPLE("Preset.Twitch")
44
-#define AMF_H264SIMPLE_PRESET_YOUTUBE TEXT_AMF_H264SIMPLE("Preset.YouTube")
45
-#define AMF_H264SIMPLE_PRESET_HIGHQUALTIY TEXT_AMF_H264SIMPLE("Preset.HighQuality")
46
-#define AMF_H264SIMPLE_PRESET_INDISTINGUISHABLE TEXT_AMF_H264SIMPLE("Preset.Indistinguishable")
47
-#define AMF_H264SIMPLE_PRESET_LOSSLESS TEXT_AMF_H264SIMPLE("Preset.Lossless")
48
-#define AMF_H264SIMPLE_KEYFRAME_INTERVAL TEXT_AMF_H264SIMPLE("KeyframeInterval")
49
-#define AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE TEXT_AMF_H264SIMPLE("UseCustomBufferSize")
50
-#define AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE TEXT_AMF_H264SIMPLE("CustomBufferSize")
51
-#define AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS TEXT_AMF_H264SIMPLE("CustomBufferFullness")
52
-#define AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE TEXT_AMF_H264SIMPLE("UseCustomGOPSize")
53
-#define AMF_H264SIMPLE_ADVANCED_SHOW_PARAMETERS TEXT_AMF_H264SIMPLE("ShowAdvancedParameters")
54
-#define AMF_H264SIMPLE_EXPERT_SHOW_PARAMETERS TEXT_AMF_H264SIMPLE("ShowExpertParameters")
55
-
56
-//////////////////////////////////////////////////////////////////////////
57
-// Code
58
-//////////////////////////////////////////////////////////////////////////
59
-using namespace Plugin;
60
-using namespace Plugin::AMD;
61
-using namespace Plugin::Interface;
62
-
63
-enum Preset {
64
- Preset_Recording,
65
- Preset_Twitch,
66
- Preset_YouTube,
67
- Preset_HighQuality,
68
- Preset_Indistinguishable,
69
- Preset_Lossless,
70
-};
71
-
72
-void Plugin::Interface::H264SimpleInterface::encoder_register() {
73
- static obs_encoder_info* encoder_info = new obs_encoder_info();
74
- static const char* encoder_name = "amd_amf_h264_simple";
75
- static const char* encoder_codec = "h264";
76
-
77
- std::memset(encoder_info, 0, sizeof(obs_encoder_info));
78
-
79
- // Initialize Structure
80
- encoder_info->id = encoder_name;
81
- encoder_info->type = obs_encoder_type::OBS_ENCODER_VIDEO;
82
- encoder_info->codec = encoder_codec;
83
-
84
- // Functions
85
- encoder_info->get_name = &get_name;
86
- encoder_info->get_defaults = &get_defaults;
87
- encoder_info->get_properties = &get_properties;
88
- encoder_info->create = &create;
89
- encoder_info->destroy = &destroy;
90
- encoder_info->encode = &encode;
91
- encoder_info->update = &update;
92
- encoder_info->get_video_info = &get_video_info;
93
- encoder_info->get_extra_data = &get_extra_data;
94
-
95
- obs_register_encoder(encoder_info);
96
-}
97
-
98
-const char* Plugin::Interface::H264SimpleInterface::get_name(void*) {
99
- return obs_module_text(AMF_H264SIMPLE_NAME);
100
-}
101
-
102
-void Plugin::Interface::H264SimpleInterface::get_defaults(obs_data_t *data) {
103
- // Main Properties
104
- /// Preset
105
- obs_data_set_default_int(data, AMF_H264SIMPLE_PRESET, -1);
106
- /// Keyframe Interval
107
- obs_data_set_default_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 2);
108
- /// Quality Preset
109
- obs_data_set_default_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Balanced);
110
- /// Profile
111
- obs_data_set_default_int(data, AMF_H264_PROFILE, VCEProfile_Main);
112
- obs_data_set_default_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_41);
113
- /// Rate Control
114
- obs_data_set_default_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
115
- obs_data_set_default_int(data, AMF_H264_QP_MINIMUM, 18);
116
- obs_data_set_default_int(data, AMF_H264_QP_MAXIMUM, 51);
117
- /// Rate Control: CBR, VBR
118
- obs_data_set_default_int(data, AMF_H264_BITRATE_TARGET, 2500);
119
- obs_data_set_default_int(data, AMF_H264_BITRATE_PEAK, 2500);
120
- /// Rate Control: Constant QP
121
- obs_data_set_default_int(data, AMF_H264_QP_IFRAME, 22);
122
- obs_data_set_default_int(data, AMF_H264_QP_PFRAME, 22);
123
- obs_data_set_default_int(data, AMF_H264_QP_BFRAME, 22);
124
- /// VBV Buffer
125
- obs_data_set_default_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, false);
126
- obs_data_set_default_int(data, AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE, 2500);
127
- obs_data_set_default_double(data, AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS, 100.0);
128
- /// Frame Skipping
129
- obs_data_set_default_bool(data, AMF_H264_FRAMESKIPPING, false);
130
-
131
- // Advanced Properties
132
- obs_data_set_default_bool(data, AMF_H264SIMPLE_ADVANCED_SHOW_PARAMETERS, false);
133
- obs_data_set_default_int(data, AMF_H264_BPICTURE_PATTERN, 0);
134
- obs_data_set_default_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
135
- obs_data_set_default_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
136
- obs_data_set_default_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
137
- obs_data_set_default_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
138
- obs_data_set_default_int(data, AMF_H264_DEBLOCKINGFILTER, 0);
139
-
140
- // Expert Properties
141
- obs_data_set_default_bool(data, AMF_H264SIMPLE_EXPERT_SHOW_PARAMETERS, false);
142
- obs_data_set_default_int(data, AMF_H264_MEMORYTYPE, VCEMemoryType_Host);
143
- obs_data_set_default_int(data, AMF_H264_COMPUTETYPE, VCEComputeType_None);
144
- obs_data_set_default_int(data, AMF_H264_SURFACEFORMAT, -1);
145
- /// GOP Size
146
- obs_data_set_default_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
147
- obs_data_set_default_int(data, AMF_H264_GOP_SIZE, 60);
148
- /// CABAC
149
- obs_data_set_default_bool(data, AMF_H264_CABAC, true);
150
-
151
- // Debug Mode
152
- obs_data_set_default_bool(data, AMF_H264_DEBUGTRACING, false);
153
-
154
- //////////////////////////////////////////////////////////////////////////
155
- // OBS - Enforce Streaming Service Restrictions
156
- //////////////////////////////////////////////////////////////////////////
157
- obs_data_set_default_int(data, "bitrate", -1);
158
- obs_data_set_default_int(data, "keyint_sec", -1);
159
- obs_data_set_default_string(data, "rate_control", "");
160
- obs_data_set_default_string(data, "profile", "");
161
- obs_data_set_int(data, "bitrate", -1);
162
- obs_data_set_int(data, "keyint_sec", -1);
163
- obs_data_set_string(data, "rate_control", "");
164
- obs_data_set_string(data, "profile", "");
165
-}
166
-
167
-obs_properties_t* Plugin::Interface::H264SimpleInterface::get_properties(void*) {
168
- obs_properties* props = obs_properties_create();
169
- obs_property_t* list;
170
- obs_property_t* p;
171
-
172
- // Main Properties
173
- /// Preset
174
- list = obs_properties_add_list(props, AMF_H264SIMPLE_PRESET, obs_module_text(AMF_H264SIMPLE_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
175
- obs_property_list_add_int(list, "", -1);
176
- obs_property_list_add_int(list, obs_module_text(AMF_H264SIMPLE_PRESET_TWITCH), Preset_Twitch);
177
- obs_property_list_add_int(list, obs_module_text(AMF_H264SIMPLE_PRESET_YOUTUBE), Preset_YouTube);
178
- obs_property_list_add_int(list, obs_module_text(AMF_H264SIMPLE_PRESET_RECORDING), Preset_Recording);
179
- obs_property_list_add_int(list, obs_module_text(AMF_H264SIMPLE_PRESET_HIGHQUALTIY), Preset_HighQuality);
180
- obs_property_list_add_int(list, obs_module_text(AMF_H264SIMPLE_PRESET_INDISTINGUISHABLE), Preset_Indistinguishable);
181
- obs_property_list_add_int(list, obs_module_text(AMF_H264SIMPLE_PRESET_LOSSLESS), Preset_Lossless);
182
- obs_property_set_modified_callback(list, &ui_modified);
183
-
184
- /// Key-Frame Interval
185
- obs_properties_add_int(props, AMF_H264SIMPLE_KEYFRAME_INTERVAL, obs_module_text(AMF_H264SIMPLE_KEYFRAME_INTERVAL), 1, 60, 1);
186
-
187
- /// Quality Preset
188
- list = obs_properties_add_list(props, AMF_H264_QUALITY_PRESET, obs_module_text(AMF_H264_QUALITY_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
189
- obs_property_list_add_int(list, obs_module_text(AMF_H264_QUALITY_PRESET_SPEED), Plugin::AMD::VCEQualityPreset::VCEQualityPreset_Speed);
190
- obs_property_list_add_int(list, obs_module_text(AMF_H264_QUALITY_PRESET_BALANCED), Plugin::AMD::VCEQualityPreset::VCEQualityPreset_Balanced);
191
- obs_property_list_add_int(list, obs_module_text(AMF_H264_QUALITY_PRESET_QUALITY), Plugin::AMD::VCEQualityPreset::VCEQualityPreset_Quality);
192
-
193
- /// Profile
194
- list = obs_properties_add_list(props, AMF_H264_PROFILE, obs_module_text(AMF_H264_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
195
- obs_property_list_add_int(list, "Baseline", Plugin::AMD::VCEProfile::VCEProfile_Baseline);
196
- obs_property_list_add_int(list, "Main", Plugin::AMD::VCEProfile::VCEProfile_Main);
197
- obs_property_list_add_int(list, "High", Plugin::AMD::VCEProfile::VCEProfile_High);
198
-
199
- /// Profile Level
200
- list = obs_properties_add_list(props, AMF_H264_PROFILELEVEL, obs_module_text(AMF_H264_PROFILELEVEL), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
201
- switch (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfileLevel) {
202
- case 62:
203
- obs_property_list_add_int(list, "6.2", VCEProfileLevel_62);
204
- case 61:
205
- obs_property_list_add_int(list, "6.1", VCEProfileLevel_61);
206
- case 60:
207
- obs_property_list_add_int(list, "6.0", VCEProfileLevel_60);
208
- case 52:
209
- obs_property_list_add_int(list, "5.2", VCEProfileLevel_52);
210
- case 51:
211
- obs_property_list_add_int(list, "5.1", VCEProfileLevel_51);
212
- case 50:
213
- obs_property_list_add_int(list, "5.0", VCEProfileLevel_50);
214
- case 42: // Some VCE 2.0 Cards.
215
- obs_property_list_add_int(list, "4.2", VCEProfileLevel_42);
216
- case 41: // Some APUs and VCE 1.0 Cards.
217
- obs_property_list_add_int(list, "4.1", VCEProfileLevel_41);
218
- case 40: // These should in theory be supported by all VCE 1.0 devices and APUs.
219
- obs_property_list_add_int(list, "4.0", VCEProfileLevel_40);
220
- case 32:
221
- obs_property_list_add_int(list, "3.2", VCEProfileLevel_32);
222
- case 31:
223
- obs_property_list_add_int(list, "3.1", VCEProfileLevel_31);
224
- case 30:
225
- obs_property_list_add_int(list, "3.0", VCEProfileLevel_30);
226
- case 22:
227
- obs_property_list_add_int(list, "2.2", VCEProfileLevel_22);
228
- case 21:
229
- obs_property_list_add_int(list, "2.1", VCEProfileLevel_21);
230
- case 20:
231
- obs_property_list_add_int(list, "2.0", VCEProfileLevel_20);
232
- case 13:
233
- obs_property_list_add_int(list, "1.3", VCEProfileLevel_13);
234
- case 12:
235
- obs_property_list_add_int(list, "1.2", VCEProfileLevel_12);
236
- case 11:
237
- obs_property_list_add_int(list, "1.1", VCEProfileLevel_11);
238
- case 10:
239
- default:
240
- obs_property_list_add_int(list, "1.0", VCEProfileLevel_10);
241
- }
242
-
243
- /// Rate Control
244
- list = obs_properties_add_list(props, AMF_H264_RATECONTROLMETHOD, obs_module_text(AMF_H264_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
245
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_CQP), Plugin::AMD::VCERateControlMethod::VCERateControlMethod_ConstantQP);
246
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_CBR), Plugin::AMD::VCERateControlMethod::VCERateControlMethod_ConstantBitrate);
247
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_VBR), Plugin::AMD::VCERateControlMethod::VCERateControlMethod_VariableBitrate_PeakConstrained);
248
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_VBR_LAT), Plugin::AMD::VCERateControlMethod::VCERateControlMethod_VariableBitrate_LatencyConstrained);
249
- obs_property_set_modified_callback(list, &ui_modified);
250
-
251
- /// Rate Control: CBR, VBR
252
- obs_properties_add_int(props, AMF_H264_BITRATE_TARGET, obs_module_text(AMF_H264_BITRATE_TARGET), 10, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000, 1);
253
- obs_properties_add_int(props, AMF_H264_BITRATE_PEAK, obs_module_text(AMF_H264_BITRATE_PEAK), 10, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000, 1);
254
-
255
- /// Rate Control: Constrained QP
256
- obs_properties_add_int_slider(props, AMF_H264_QP_MINIMUM, obs_module_text(AMF_H264_QP_MINIMUM), 0, 51, 1);
257
- obs_properties_add_int_slider(props, AMF_H264_QP_MAXIMUM, obs_module_text(AMF_H264_QP_MAXIMUM), 0, 51, 1);
258
- obs_properties_add_int_slider(props, AMF_H264_QP_IFRAME, obs_module_text(AMF_H264_QP_IFRAME), 0, 51, 1);
259
- obs_properties_add_int_slider(props, AMF_H264_QP_PFRAME, obs_module_text(AMF_H264_QP_PFRAME), 0, 51, 1);
260
- obs_properties_add_int_slider(props, AMF_H264_QP_BFRAME, obs_module_text(AMF_H264_QP_BFRAME), 0, 51, 1);
261
-
262
- /// VBV Buffer
263
- p = obs_properties_add_bool(props, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, obs_module_text(AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE));
264
- obs_properties_add_int(props, AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE, obs_module_text(AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE), 1, 100000, 1);
265
- obs_properties_add_float_slider(props, AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS, obs_module_text(AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS), 0, 100, 1.5625);
266
- obs_property_set_modified_callback(p, &ui_modified);
267
-
268
- /// Other Options
269
- list = obs_properties_add_list(props, AMF_H264_FILLERDATA, obs_module_text(AMF_H264_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
270
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
271
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
272
- list = obs_properties_add_list(props, AMF_H264_FRAMESKIPPING, obs_module_text(AMF_H264_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
273
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
274
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
275
-
276
- { // Advanced Properties
277
- p = obs_properties_add_bool(props, AMF_H264SIMPLE_ADVANCED_SHOW_PARAMETERS, obs_module_text(AMF_H264SIMPLE_ADVANCED_SHOW_PARAMETERS));
278
- obs_property_set_modified_callback(p, &ui_modified);
279
-
280
- /// B-Pictures
281
- obs_properties_add_int_slider(props, AMF_H264_BPICTURE_PATTERN, obs_module_text(AMF_H264_BPICTURE_PATTERN), 0, 3, 1);
282
- list = obs_properties_add_list(props, AMF_H264_BPICTURE_REFERENCE, obs_module_text(AMF_H264_BPICTURE_REFERENCE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
283
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
284
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
285
- obs_properties_add_int_slider(props, AMF_H264_QP_BPICTURE_DELTA, obs_module_text(AMF_H264_QP_BPICTURE_DELTA), -10, 10, 1);
286
- obs_properties_add_int_slider(props, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, obs_module_text(AMF_H264_QP_REFERENCE_BPICTURE_DELTA), -10, 10, 1);
287
-
288
- /// De-Blocking Filter
289
- list = obs_properties_add_list(props, AMF_H264_DEBLOCKINGFILTER, obs_module_text(AMF_H264_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
290
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
291
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
292
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
293
-
294
- /// HRD Restrictions
295
- list = obs_properties_add_list(props, AMF_H264_ENFORCEHRDCOMPATIBILITY, obs_module_text(AMF_H264_ENFORCEHRDCOMPATIBILITY), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
296
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
297
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
298
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
299
- }
300
-
301
- { // Expert Properties
302
- p = obs_properties_add_bool(props, AMF_H264SIMPLE_EXPERT_SHOW_PARAMETERS, obs_module_text(AMF_H264SIMPLE_EXPERT_SHOW_PARAMETERS));
303
- obs_property_set_modified_callback(p, &ui_modified);
304
-
305
- /// Memory Type
306
- list = obs_properties_add_list(props, AMF_H264_MEMORYTYPE, obs_module_text(AMF_H264_MEMORYTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
307
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_AUTOMATIC), VCEMemoryType_Auto);
308
- obs_property_list_add_int(list, "Host", VCEMemoryType_Host);
309
- if (IsWindowsXPOrGreater()) {
310
- obs_property_list_add_int(list, "DirectX 9", VCEMemoryType_DirectX9);
311
- if (IsWindows8OrGreater()) {
312
- obs_property_list_add_int(list, "DirectX 11", VCEMemoryType_DirectX11);
313
- }
314
- }
315
- obs_property_list_add_int(list, "OpenGL", VCEMemoryType_OpenGL);
316
-
317
- /// Compute Type
318
- list = obs_properties_add_list(props, AMF_H264_COMPUTETYPE, obs_module_text(AMF_H264_COMPUTETYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
319
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), VCEComputeType_None);
320
- obs_property_list_add_int(list, "OpenCL", VCEComputeType_OpenCL);
321
-
322
- /// Surface Format
323
- list = obs_properties_add_list(props, AMF_H264_SURFACEFORMAT, obs_module_text(AMF_H264_SURFACEFORMAT), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
324
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_AUTOMATIC), -1);
325
- auto formats = Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->input.formats;
326
- for (auto format = formats.begin(); format != formats.end(); format++) {
327
- switch (format->first) {
328
- case amf::AMF_SURFACE_NV12:
329
- obs_property_list_add_int(list, "NV12 (4:2:0)", VCESurfaceFormat_NV12);
330
- break;
331
- case amf::AMF_SURFACE_YUV420P:
332
- obs_property_list_add_int(list, "I420 (4:2:0)", VCESurfaceFormat_I420);
333
- break;
334
- case amf::AMF_SURFACE_YUY2:
335
- obs_property_list_add_int(list, "YUY2 (4:2:2)", VCESurfaceFormat_YUY2);
336
- break;
337
- case amf::AMF_SURFACE_BGRA:
338
- obs_property_list_add_int(list, "BGRA (Uncompressed)", VCESurfaceFormat_BGRA);
339
- break;
340
- case amf::AMF_SURFACE_RGBA:
341
- obs_property_list_add_int(list, "RGBA (Uncompressed)", VCESurfaceFormat_RGBA);
342
- break;
343
- case amf::AMF_SURFACE_GRAY8:
344
- obs_property_list_add_int(list, "Y800 (Gray)", VCESurfaceFormat_GRAY);
345
- break;
346
- }
347
- }
348
-
349
- /// GOP Size
350
- p = obs_properties_add_bool(props, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, obs_module_text(AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE));
351
- obs_property_set_modified_callback(p, &ui_modified);
352
- obs_properties_add_int(props, AMF_H264_GOP_SIZE, obs_module_text(AMF_H264_GOP_SIZE), 1, 1000, 1);
353
-
354
- /// CABAC
355
- list = obs_properties_add_list(props, AMF_H264_CABAC, obs_module_text(AMF_H264_CABAC), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
356
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
357
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
358
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
359
-
360
-
361
- // Debug Mode
362
- obs_properties_add_bool(props, AMF_H264_DEBUGTRACING, obs_module_text(AMF_H264_DEBUGTRACING));
363
- }
364
-
365
- return props;
366
-}
367
-
368
-bool Plugin::Interface::H264SimpleInterface::ui_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
369
- if (obs_data_get_int(data, AMF_H264SIMPLE_PRESET) != -1) {
370
- switch (obs_data_get_int(data, AMF_H264SIMPLE_PRESET)) {
371
- case Preset_Twitch: // Twitch
372
- obs_data_set_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 2);
373
- obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
374
- obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
375
- obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_41);
376
- obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
377
- obs_data_set_int(data, AMF_H264_QP_MINIMUM, 18);
378
- obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
379
- obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 3000);
380
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, false);
381
- obs_data_set_int(data, AMF_H264_FILLERDATA, 1);
382
- obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
383
-
384
- // Advanced Properties
385
- obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, 0);
386
- obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
387
- obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
388
- obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
389
- obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
390
- obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
391
-
392
- // Expert Properties
393
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
394
- obs_data_set_int(data, AMF_H264_CABAC, -1);
395
- break;
396
- case Preset_YouTube: // YouTube
397
- // Basic Properties
398
- obs_data_set_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 2);
399
- obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
400
- obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
401
- obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_41);
402
- obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
403
- obs_data_set_int(data, AMF_H264_QP_MINIMUM, 18);
404
- obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
405
- obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 6000);
406
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, false);
407
- obs_data_set_int(data, AMF_H264_FILLERDATA, 1);
408
- obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
409
-
410
- // Advanced Properties
411
- obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, 0);
412
- obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
413
- obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
414
- obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
415
- obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
416
- obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
417
-
418
- // Expert Properties
419
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
420
- obs_data_set_int(data, AMF_H264_CABAC, -1);
421
- break;
422
- case Preset_Recording: // Recording
423
- obs_data_set_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 1);
424
- obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
425
- obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
426
- obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfileLevel);
427
- obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_VariableBitrate_LatencyConstrained);
428
- obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
429
- obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
430
- obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 10000);
431
- obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000);
432
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, false);
433
- obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
434
- obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 1);
435
-
436
- // Advanced Properties
437
- obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 3 : 0));
438
- obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 1 : 0));
439
- obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
440
- obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
441
- obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
442
- obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
443
-
444
- // Expert Properties
445
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
446
- obs_data_set_int(data, AMF_H264_CABAC, -1);
447
- break;
448
- case Preset_HighQuality:
449
- // Basic Properties
450
- obs_data_set_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 1);
451
- obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
452
- obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
453
- obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfileLevel);
454
- obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantQP);
455
- obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
456
- obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
457
- obs_data_set_int(data, AMF_H264_QP_IFRAME, 16);
458
- obs_data_set_int(data, AMF_H264_QP_PFRAME, 19);
459
- obs_data_set_int(data, AMF_H264_QP_BFRAME, 21);
460
- obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 10000);
461
- obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000);
462
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, false);
463
- obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
464
- obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
465
-
466
- // Advanced Properties
467
- obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 3 : 0));
468
- obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 1 : 0));
469
- obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
470
- obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
471
- obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
472
- obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
473
-
474
- // Expert Properties
475
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
476
- obs_data_set_int(data, AMF_H264_CABAC, -1);
477
- break;
478
- case Preset_Indistinguishable:
479
- // Basic Properties
480
- obs_data_set_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 1);
481
- obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
482
- obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
483
- obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfileLevel);
484
- obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantQP);
485
- obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
486
- obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
487
- obs_data_set_int(data, AMF_H264_QP_IFRAME, 11);
488
- obs_data_set_int(data, AMF_H264_QP_PFRAME, 14);
489
- obs_data_set_int(data, AMF_H264_QP_BFRAME, 16);
490
- obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 10000);
491
- obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000);
492
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, false);
493
- obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
494
- obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
495
-
496
- // Advanced Properties
497
- obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 3 : 0));
498
- obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 1 : 0));
499
- obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
500
- obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
501
- obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
502
- obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
503
-
504
- // Expert Properties
505
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
506
- obs_data_set_int(data, AMF_H264_CABAC, -1);
507
- break;
508
- case Preset_Lossless:
509
- // Basic Properties
510
- obs_data_set_int(data, AMF_H264SIMPLE_KEYFRAME_INTERVAL, 1);
511
- obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
512
- obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
513
- obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfileLevel);
514
- obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantQP);
515
- obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
516
- obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
517
- obs_data_set_int(data, AMF_H264_QP_IFRAME, 0);
518
- obs_data_set_int(data, AMF_H264_QP_PFRAME, 0);
519
- obs_data_set_int(data, AMF_H264_QP_BFRAME, 0);
520
- obs_data_set_int(data, AMF_H264_BITRATE_TARGET, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000);
521
- obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000);
522
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE, true);
523
- obs_data_set_int(data, AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000);
524
- obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
525
- obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
526
-
527
- // Advanced Properties
528
- obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 3 : 0));
529
- obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 1 : 0));
530
- obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
531
- obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
532
- obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
533
- obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
534
-
535
- // Expert Properties
536
- obs_data_set_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE, false);
537
- obs_data_set_int(data, AMF_H264_CABAC, -1);
538
- break;
539
- }
540
- //obs_data_set_int(data, AMF_H264SIMPLE_PRESET, -1);
541
- }
542
-
543
- { // Rate Control Settings
544
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BITRATE_PEAK), false);
545
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BITRATE_TARGET), false);
546
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_IFRAME), false);
547
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_PFRAME), false);
548
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_BFRAME), false);
549
-
550
- switch (obs_data_get_int(data, AMF_H264_RATECONTROLMETHOD)) {
551
- case Plugin::AMD::VCERateControlMethod::VCERateControlMethod_ConstantQP:
552
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_IFRAME), true);
553
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_PFRAME), true);
554
- if (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames) {
555
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_BFRAME), true);
556
- }
557
- break;
558
- case Plugin::AMD::VCERateControlMethod::VCERateControlMethod_VariableBitrate_PeakConstrained:
559
- case Plugin::AMD::VCERateControlMethod::VCERateControlMethod_VariableBitrate_LatencyConstrained:
560
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BITRATE_PEAK), true);
561
- case Plugin::AMD::VCERateControlMethod::VCERateControlMethod_ConstantBitrate:
562
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BITRATE_TARGET), true);
563
- break;
564
- }
565
- }
566
-
567
- { // Buffer Size
568
- obs_property_set_visible(obs_properties_get(props, AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE), false);
569
- obs_property_set_visible(obs_properties_get(props, AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS), false);
570
- if (obs_data_get_bool(data, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE)) {
571
- obs_property_set_visible(obs_properties_get(props, AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE), true);
572
- obs_property_set_visible(obs_properties_get(props, AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS), true);
573
- }
574
- }
575
-
576
- { // Advanced Properties
577
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BPICTURE_PATTERN), false);
578
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BPICTURE_REFERENCE), false);
579
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_BPICTURE_DELTA), false);
580
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_REFERENCE_BPICTURE_DELTA), false);
581
- obs_property_set_visible(obs_properties_get(props, AMF_H264_DEBLOCKINGFILTER), false);
582
- obs_property_set_visible(obs_properties_get(props, AMF_H264_ENFORCEHRDCOMPATIBILITY), false);
583
-
584
- if (obs_data_get_bool(data, AMF_H264SIMPLE_ADVANCED_SHOW_PARAMETERS)) {
585
- if (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames) {
586
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BPICTURE_PATTERN), true);
587
- obs_property_set_visible(obs_properties_get(props, AMF_H264_BPICTURE_REFERENCE), true);
588
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_BPICTURE_DELTA), true);
589
- obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_REFERENCE_BPICTURE_DELTA), true);
590
- }
591
- obs_property_set_visible(obs_properties_get(props, AMF_H264_DEBLOCKINGFILTER), true);
592
- obs_property_set_visible(obs_properties_get(props, AMF_H264_ENFORCEHRDCOMPATIBILITY), true);
593
- }
594
- }
595
-
596
- { // Expert Properties
597
- obs_property_set_visible(obs_properties_get(props, AMF_H264_MEMORYTYPE), false);
598
- obs_property_set_visible(obs_properties_get(props, AMF_H264_COMPUTETYPE), false);
599
- obs_property_set_visible(obs_properties_get(props, AMF_H264_SURFACEFORMAT), false);
600
- obs_property_set_visible(obs_properties_get(props, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE), false);
601
- obs_property_set_visible(obs_properties_get(props, AMF_H264_GOP_SIZE), false);
602
- obs_property_set_visible(obs_properties_get(props, AMF_H264_CABAC), false);
603
-
604
- if (obs_data_get_bool(data, AMF_H264SIMPLE_EXPERT_SHOW_PARAMETERS)) {
605
- obs_property_set_visible(obs_properties_get(props, AMF_H264_MEMORYTYPE), true);
606
- obs_property_set_visible(obs_properties_get(props, AMF_H264_COMPUTETYPE), true);
607
- obs_property_set_visible(obs_properties_get(props, AMF_H264_SURFACEFORMAT), true);
608
-
609
- /// GOP Size
610
- obs_property_set_visible(obs_properties_get(props, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE), true);
611
- if (obs_data_get_bool(data, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE))
612
- obs_property_set_visible(obs_properties_get(props, AMF_H264_GOP_SIZE), true);
613
-
614
- /// CABAC
615
- obs_property_set_visible(obs_properties_get(props, AMF_H264_CABAC), true);
616
- }
617
- }
618
-
619
- return true;
620
-}
621
-
622
-void* Plugin::Interface::H264SimpleInterface::create(obs_data_t* settings, obs_encoder_t* encoder) {
623
- try {
624
- return new Plugin::Interface::H264SimpleInterface(settings, encoder);
625
- } catch (...) {
626
- AMF_LOG_ERROR("Unable to create Encoder, see log for more information.");
627
- return NULL;
628
- }
629
-}
630
-
631
-#pragma warning( push )
632
-#pragma warning( disable: 4702 )
633
-void Plugin::Interface::H264SimpleInterface::destroy(void* data) {
634
- try {
635
- delete (static_cast<Plugin::Interface::H264SimpleInterface*>(data));
636
- data = nullptr;
637
- } catch (...) {
638
- AMF_LOG_ERROR("Unable to destroy Encoder, see log for more information.");
639
- }
640
-}
641
-#pragma warning( pop )
642
-
643
-#pragma warning( push )
644
-#pragma warning( disable: 4702 )
645
-bool Plugin::Interface::H264SimpleInterface::update(void *data, obs_data_t *settings) {
646
- try {
647
- return static_cast<Plugin::Interface::H264SimpleInterface*>(data)->update(settings);
648
- } catch (...) {
649
- AMF_LOG_ERROR("Unable to update Encoder, see log for more information.");
650
- return false;
651
- }
652
-}
653
-#pragma warning( pop )
654
-
655
-bool Plugin::Interface::H264SimpleInterface::encode(void *data, struct encoder_frame * frame, struct encoder_packet * packet, bool * received_packet) {
656
- try {
657
- return static_cast<Plugin::Interface::H264SimpleInterface*>(data)->encode(frame, packet, received_packet);
658
- } catch (...) {
659
- AMF_LOG_ERROR("Unable to encode, see log for more information.");
660
- return false;
661
- }
662
-}
663
-
664
-void Plugin::Interface::H264SimpleInterface::get_video_info(void *data, struct video_scale_info *info) {
665
- try {
666
- static_cast<Plugin::Interface::H264SimpleInterface*>(data)->get_video_info(info);
667
- } catch (...) {
668
- AMF_LOG_ERROR("Unable to get video info, see log for more information.");
669
- }
670
-}
671
-
672
-bool Plugin::Interface::H264SimpleInterface::get_extra_data(void *data, uint8_t** extra_data, size_t* size) {
673
- try {
674
- return static_cast<Plugin::Interface::H264SimpleInterface*>(data)->get_extra_data(extra_data, size);
675
- } catch (...) {
676
- AMF_LOG_ERROR("Unable to get extra data, see log for more information.");
677
- return false;
678
- }
679
-}
680
-
681
-//////////////////////////////////////////////////////////////////////////
682
-// Module Code
683
-//////////////////////////////////////////////////////////////////////////
684
-Plugin::Interface::H264SimpleInterface::H264SimpleInterface(obs_data_t* settings, obs_encoder_t* encoder) {
685
- int32_t width, height, fpsNum, fpsDen;
686
-
687
- AMF_LOG_INFO("<AMFEncoder::H264SimpleInterface::H264SimpleInterface> Initializing...");
688
-
689
- // OBS Settings
690
- width = obs_encoder_get_width(encoder);
691
- height = obs_encoder_get_height(encoder);
692
- video_t *video = obs_encoder_video(encoder);
693
- const struct video_output_info *voi = video_output_get_info(video);
694
- fpsNum = voi->fps_num;
695
- fpsDen = voi->fps_den;
696
-
697
- // AMF Setup
698
- Plugin::AMD::AMF::GetInstance()->EnableDebugTrace(obs_data_get_bool(settings, AMF_H264_DEBUGTRACING));
699
-
700
- // Set up Encoder
701
- VCESurfaceFormat surfFormat = (VCESurfaceFormat)obs_data_get_int(settings, AMF_H264_SURFACEFORMAT);
702
- if (surfFormat == -1) {
703
- switch (voi->format) {
704
- case VIDEO_FORMAT_NV12:
705
- surfFormat = VCESurfaceFormat_NV12;
706
- break;
707
- case VIDEO_FORMAT_I420:
708
- surfFormat = VCESurfaceFormat_I420;
709
- break;
710
- case VIDEO_FORMAT_RGBA:
711
- surfFormat = VCESurfaceFormat_RGBA;
712
- break;
713
- case VIDEO_FORMAT_BGRA:
714
- surfFormat = VCESurfaceFormat_BGRA;
715
- break;
716
- case VIDEO_FORMAT_Y800:
717
- surfFormat = VCESurfaceFormat_GRAY;
718
- break;
719
- default:
720
- surfFormat = VCESurfaceFormat_NV12;
721
- break;
722
- }
723
- }
724
- m_VideoEncoder = new Plugin::AMD::VCEEncoder(VCEEncoderType_AVC, surfFormat, (VCEMemoryType)obs_data_get_int(settings, AMF_H264_MEMORYTYPE), (VCEComputeType)obs_data_get_int(settings, AMF_H264_COMPUTETYPE));
725
-
726
- // Static Parameters
727
- /// Usage - Always Transcoding
728
- m_VideoEncoder->SetUsage(VCEUsage_Transcoding);
729
-
730
- /// Quality Preset - User Defined
731
- m_VideoEncoder->SetQualityPreset((VCEQualityPreset)obs_data_get_int(settings, AMF_H264_QUALITY_PRESET));
732
-
733
- /// Frame Size, Frame Rate - Taken from OBS
734
- m_VideoEncoder->SetFrameSize(width, height);
735
- m_VideoEncoder->SetFrameRate(fpsNum, fpsDen);
736
-
737
- /// Profile, Profile Level - User Defined
738
- m_VideoEncoder->SetProfile((VCEProfile)obs_data_get_int(settings, AMF_H264_PROFILE));
739
- m_VideoEncoder->SetProfileLevel((VCEProfileLevel)obs_data_get_int(settings, AMF_H264_PROFILELEVEL));
740
-
741
- // Static Parameters
742
- /// Rate Control Method - User Defined
743
- m_VideoEncoder->SetRateControlMethod((VCERateControlMethod)obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD));
744
-
745
- /// Frame Skipping - User Defined
746
- m_VideoEncoder->SetRateControlSkipFrameEnabled(!!obs_data_get_int(settings, AMF_H264_FRAMESKIPPING));
747
-
748
- /// Minimum QP, Maximum QP - User Defined
749
- m_VideoEncoder->SetMinimumQP((uint8_t)obs_data_get_int(settings, AMF_H264_QP_MINIMUM));
750
- m_VideoEncoder->SetMaximumQP((uint8_t)obs_data_get_int(settings, AMF_H264_QP_MAXIMUM));
751
-
752
- /// Rate Control Method: CBR, VBR, VBR_LAT
753
- if (obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD) != VCERateControlMethod_ConstantQP) {
754
- if (obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD) == VCERateControlMethod_ConstantBitrate) {
755
- /// Target Bitrate - User Defined
756
- uint32_t bitrate = (uint32_t)obs_data_get_int(settings, AMF_H264_BITRATE_TARGET) * 1000;
757
- m_VideoEncoder->SetTargetBitrate(bitrate);
758
- m_VideoEncoder->SetPeakBitrate(bitrate);
759
- } else {
760
- /// Target Bitrate - User Defined
761
- m_VideoEncoder->SetTargetBitrate((uint32_t)obs_data_get_int(settings, AMF_H264_BITRATE_TARGET) * 1000);
762
- /// Peak Bitrate - User Defined
763
- m_VideoEncoder->SetPeakBitrate((uint32_t)obs_data_get_int(settings, AMF_H264_BITRATE_PEAK) * 1000);
764
- }
765
- }
766
-
767
- /// Rate Control Method: CQP
768
- if (obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD) == VCERateControlMethod_ConstantQP) {
769
- /// I-, P-, B-Frame QP - User Defined
770
- m_VideoEncoder->SetIFrameQP((uint8_t)obs_data_get_int(settings, AMF_H264_QP_IFRAME));
771
- m_VideoEncoder->SetPFrameQP((uint8_t)obs_data_get_int(settings, AMF_H264_QP_PFRAME));
772
- try {
773
- m_VideoEncoder->SetBFrameQP((uint8_t)obs_data_get_int(settings, AMF_H264_QP_BFRAME));
774
- } catch (...) {}
775
- }
776
-
777
- /// Buffer Size, Initial Fullness - User Defined or Automatic
778
- if (obs_data_get_bool(settings, AMF_H264SIMPLE_USE_CUSTOM_BUFFER_SIZE)) {
779
- m_VideoEncoder->SetVBVBufferSize((uint32_t)obs_data_get_int(settings, AMF_H264SIMPLE_CUSTOM_BUFFER_SIZE) * 1000);
780
- m_VideoEncoder->SetInitialVBVBufferFullness(obs_data_get_double(settings, AMF_H264SIMPLE_CUSTOM_BUFFER_FULLNESS) / 100.0);
781
- } else {
782
- if (obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD) != VCERateControlMethod_ConstantQP) {
783
- uint32_t bitrate = (uint32_t)max(obs_data_get_int(settings, AMF_H264_BITRATE_TARGET), obs_data_get_int(settings, AMF_H264_BITRATE_PEAK));
784
- m_VideoEncoder->SetVBVBufferSize(bitrate * 1000);
785
- } else {
786
- // When using Constant QP, one will have to pick a QP that is decent
787
- // in both quality and bitrate. We can easily calculate both the QP
788
- // required for an average bitrate and the average bitrate itself
789
- // with these formulas:
790
- // BITRATE = ((1 - (QP / 51)) ^ 2) * ((Width * Height) * 1.5 * (FPSNumerator / FPSDenumerator))
791
- // QP = (1 - sqrt(BITRATE / ((Width * Height) * 1.5 * (FPSNumerator / FPSDenumerator)))) * 51
792
- double_t bitrate = (width * height);
793
- switch (voi->format) {
794
- case VIDEO_FORMAT_NV12: // Y=W*H, UV=W*H/2. Total = 1.5
795
- bitrate *= 1.5;
796
- break;
797
- case VIDEO_FORMAT_I420: // Y=W*H, U=W*H/2, V=W*H/2. Total = 2
798
- bitrate *= 2;
799
- break;
800
- case VIDEO_FORMAT_RGBA: // R=W*H, G=W*H, B=W*H. Total = 3
801
- bitrate *= 3;
802
- break;
803
- }
804
- bitrate *= ((double_t)fpsNum / (double_t)fpsDen);
805
- double_t qpMult = (double_t)min(
806
- min(
807
- obs_data_get_int(settings, AMF_H264_QP_MINIMUM),
808
- obs_data_get_int(settings, AMF_H264_QP_MAXIMUM)
809
- ), min(
810
- min(
811
- obs_data_get_int(settings, AMF_H264_QP_IFRAME),
812
- obs_data_get_int(settings, AMF_H264_QP_PFRAME)
813
- ), obs_data_get_int(settings, AMF_H264_QP_BFRAME)
814
- )
815
- );
816
- qpMult = (51 - qpMult) / 51.0;
817
- qpMult = qpMult * qpMult;
818
- qpMult = max(qpMult, 0.001); // Needs to be at least 0.001.
819
- bitrate *= qpMult;
820
- m_VideoEncoder->SetVBVBufferSize((uint32_t)bitrate);
821
- }
822
- m_VideoEncoder->SetInitialVBVBufferFullness(1.0);
823
- }
824
-
825
- /// Filler Data - User Defined
826
- m_VideoEncoder->SetFillerDataEnabled(!!obs_data_get_int(settings, AMF_H264_FILLERDATA));
827
-
828
- /// Enforce HRD Compatibility - User Defined or Default
829
- if (obs_data_get_int(settings, AMF_H264_ENFORCEHRDCOMPATIBILITY) != -1)
830
- m_VideoEncoder->SetEnforceHRDRestrictionsEnabled(!!obs_data_get_int(settings, AMF_H264_ENFORCEHRDCOMPATIBILITY));
831
-
832
- /// IDR Period - User Defined (Full Second Granularity)
833
- m_VideoEncoder->SetIDRPeriod((uint32_t)((double_t)obs_data_get_int(settings, AMF_H264SIMPLE_KEYFRAME_INTERVAL) * ((double_t)fpsNum / (double_t)fpsDen)));
834
-
835
- /// Deblocking Filter - User Defined or Default
836
- if (obs_data_get_int(settings, AMF_H264_DEBLOCKINGFILTER) != -1)
837
- m_VideoEncoder->SetDeBlockingFilterEnabled(!!obs_data_get_int(settings, AMF_H264_DEBLOCKINGFILTER));
838
-
839
- try {
840
- m_VideoEncoder->SetBPicturePattern((VCEBPicturePattern)obs_data_get_int(settings, AMF_H264_BPICTURE_PATTERN));
841
- } catch (...) {}
842
- try {
843
- m_VideoEncoder->SetBPictureReferenceEnabled(!!obs_data_get_int(settings, AMF_H264_BPICTURE_REFERENCE));
844
- } catch (...) {}
845
- try {
846
- m_VideoEncoder->SetBPictureDeltaQP((int8_t)obs_data_get_int(settings, AMF_H264_QP_BPICTURE_DELTA));
847
- } catch (...) {}
848
- try {
849
- m_VideoEncoder->SetReferenceBPictureDeltaQP((int8_t)obs_data_get_int(settings, AMF_H264_QP_REFERENCE_BPICTURE_DELTA));
850
- } catch (...) {}
851
-
852
- /// Encoder Miscellaneous Parameters
853
- m_VideoEncoder->SetScanType(VCEScanType_Progressive);
854
- if (obs_data_get_bool(settings, AMF_H264SIMPLE_USE_CUSTOM_GOP_SIZE))
855
- m_VideoEncoder->SetGOPSize((uint32_t)obs_data_get_int(settings, AMF_H264_GOP_SIZE));
856
- if (obs_data_get_int(settings, AMF_H264_CABAC) != -1)
857
- m_VideoEncoder->SetCABACEnabled(!!obs_data_get_bool(settings, AMF_H264_CABAC));
858
-
859
- /// Encoder Motion Estimation Parameters
860
- m_VideoEncoder->SetHalfPixelMotionEstimationEnabled(true);
861
- m_VideoEncoder->SetQuarterPixelMotionEstimationEnabled(true);
862
-
863
- /// Encoder Resolution Parameters
864
- m_VideoEncoder->SetFrameSize(width, height);
865
- m_VideoEncoder->SetFrameRate(fpsNum, fpsDen);
866
-
867
- //////////////////////////////////////////////////////////////////////////
868
- // OBS - Enforce Streaming Service Restrictions
869
- //////////////////////////////////////////////////////////////////////////
870
- {
871
- // Profile
872
- const char* p_str = obs_data_get_string(settings, "profile");
873
- if (strcmp(p_str, "") != 0) {
874
- if (strcmp(p_str, "baseline")) {
875
- m_VideoEncoder->SetProfile(VCEProfile_Baseline);
876
- } else if (strcmp(p_str, "main")) {
877
- m_VideoEncoder->SetProfile(VCEProfile_Main);
878
- } else if (strcmp(p_str, "high")) {
879
- m_VideoEncoder->SetProfile(VCEProfile_High);
880
- }
881
- } else {
882
- switch (m_VideoEncoder->GetProfile()) {
883
- case VCEProfile_Baseline:
884
- obs_data_set_string(settings, "profile", "baseline");
885
- break;
886
- case VCEProfile_Main:
887
- obs_data_set_string(settings, "profile", "main");
888
- break;
889
- case VCEProfile_High:
890
- obs_data_set_string(settings, "profile", "high");
891
- break;
892
- }
893
- }
894
-
895
- // Rate Control Method
896
- const char* t_str = obs_data_get_string(settings, "rate_control");
897
- if (strcmp(t_str, "") != 0) {
898
- if (strcmp(t_str, "CBR") == 0) {
899
- m_VideoEncoder->SetRateControlMethod(VCERateControlMethod_ConstantBitrate);
900
- m_VideoEncoder->SetFillerDataEnabled(true);
901
- } else if (strcmp(t_str, "VBR") == 0) {
902
- m_VideoEncoder->SetRateControlMethod(VCERateControlMethod_VariableBitrate_PeakConstrained);
903
- } else if (strcmp(t_str, "VBR_LAT") == 0) {
904
- m_VideoEncoder->SetRateControlMethod(VCERateControlMethod_VariableBitrate_LatencyConstrained);
905
- } else if (strcmp(t_str, "CQP") == 0) {
906
- m_VideoEncoder->SetRateControlMethod(VCERateControlMethod_ConstantQP);
907
- }
908
- } else {
909
- switch (m_VideoEncoder->GetRateControlMethod()) {
910
- case VCERateControlMethod_ConstantBitrate:
911
- obs_data_set_string(settings, "rate_control", "CBR");
912
- break;
913
- case VCERateControlMethod_VariableBitrate_PeakConstrained:
914
- obs_data_set_string(settings, "rate_control", "VBR");
915
- break;
916
- case VCERateControlMethod_VariableBitrate_LatencyConstrained:
917
- obs_data_set_string(settings, "rate_control", "VBR_LAT");
918
- break;
919
- case VCERateControlMethod_ConstantQP:
920
- obs_data_set_string(settings, "rate_control", "CQP");
921
- break;
922
- }
923
- }
924
-
925
- // Bitrate
926
- uint64_t bitrateOvr = obs_data_get_int(settings, "bitrate") * 1000;
927
- if (bitrateOvr != -1) {
928
- if (m_VideoEncoder->GetTargetBitrate() > bitrateOvr)
929
- m_VideoEncoder->SetTargetBitrate((uint32_t)bitrateOvr);
930
-
931
- if (m_VideoEncoder->GetPeakBitrate() > bitrateOvr)
932
- m_VideoEncoder->SetPeakBitrate((uint32_t)bitrateOvr);
933
-
934
- obs_data_set_int(settings, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
935
- } else {
936
- obs_data_set_int(settings, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
937
- }
938
-
939
- // IDR-Period (Keyframes)
940
- if (obs_data_get_int(settings, "keyint_sec") != -1) {
941
- m_VideoEncoder->SetIDRPeriod((uint32_t)(obs_data_get_int(settings, "keyint_sec") * ((double_t)fpsNum / (double_t)fpsDen)));
942
- } else {
943
- obs_data_set_int(settings, "keyint_sec", (uint64_t)(m_VideoEncoder->GetIDRPeriod() / ((double_t)fpsNum / (double_t)fpsDen)));
944
- }
945
- }
946
-
947
- //////////////////////////////////////////////////////////////////////////
948
- // Verify
949
- //////////////////////////////////////////////////////////////////////////
950
- m_VideoEncoder->LogProperties();
951
-
952
- //////////////////////////////////////////////////////////////////////////
953
- // Start Encoding
954
- //////////////////////////////////////////////////////////////////////////
955
- m_VideoEncoder->Start();
956
-
957
- AMF_LOG_INFO("<AMFEncoder::H264SimpleInterface::H264SimpleInterface> Initialized.");
958
-}
959
-
960
-Plugin::Interface::H264SimpleInterface::~H264SimpleInterface() {
961
- AMF_LOG_INFO("<AMFEncoder::H264SimpleInterface::~H264SimpleInterface> Finalizing...");
962
- m_VideoEncoder->Stop();
963
- delete m_VideoEncoder;
964
- AMF_LOG_INFO("<AMFEncoder::H264SimpleInterface::~H264SimpleInterface> Complete.");
965
-}
966
-
967
-#pragma warning( push )
968
-#pragma warning( disable: 4100 )
969
-bool Plugin::Interface::H264SimpleInterface::update(obs_data_t* settings) {
970
- // settings is not flagged as a unused here, since a future update may add support for this.
971
- return false;
972
-}
973
-#pragma warning( pop )
974
-
975
-bool Plugin::Interface::H264SimpleInterface::encode(struct encoder_frame * frame, struct encoder_packet * packet, bool * received_packet) {
976
- bool retVal = true;
977
- retVal = m_VideoEncoder->SendInput(frame);
978
- m_VideoEncoder->GetOutput(packet, received_packet);
979
- return retVal;
980
-}
981
-
982
-void Plugin::Interface::H264SimpleInterface::get_video_info(struct video_scale_info* info) {
983
- m_VideoEncoder->GetVideoInfo(info);
984
-}
985
-
986
-bool Plugin::Interface::H264SimpleInterface::get_extra_data(uint8_t** extra_data, size_t* size) {
987
- return m_VideoEncoder->GetExtraData(extra_data, size);
988
-}
989
obs-studio-0.16.4.tar.xz/.travis.yml
Added
41
1
2
+os: osx
3
+osx_image: xcode7.1
4
+env:
5
+ matrix:
6
+ - CMAKE_PREFIX_PATH=/usr/local/opt/qt5/lib/cmake
7
+ global:
8
+ # AWS S3 creds
9
+ # access key
10
+ - secure: "MfhOg+84yb4ZHB2tM8PIPFQX2Y+WLN0I0iiAgyLC4KaHPUoNOyloe9yk6OjV7Lj7SZWqTlQUsqHa8S9mOUswGIody1Ydglo4RvyGOKCd8I6b2ri/jE8qHVuD9sO+sNlIxq4YqqG/qReTsbSs2YEgLneZUCYLCk/fihl8L6eVuSc="
11
+ # secret
12
+ - secure: "JRQVU2zgC3hY6CEY+Crmh/upp93En0BzKaLcsuBT538johNlK7m5hn3m2UOw63seLvBvVaKKWUDj9N986a3DwcXxWPMyF/9ctXgNWy39WzaVWxrbVR5nQB1fdiRp5YEgkoVN+gEm3OVF7sV5AGzh5/8CvEdRCoTLIGgMGHxW9mc="
13
+
14
+language: cpp
15
+
16
+before_install: "./CI/install-dependencies-osx.sh"
17
+before_script: "./CI/before-script-osx.sh"
18
+script: cd ./build && make -j4 && cd -
19
+before_deploy: "./CI/before-deploy-osx.sh"
20
+
21
+deploy:
22
+ provider: s3
23
+ access_key_id: $AWS_ACCESS_KEY
24
+ secret_access_key: $AWS_SECRET_KEY
25
+ skip_cleanup: true
26
+ local_dir: nightly
27
+ bucket: obs-nightly
28
+ region: us-west-2
29
+ acl: public_read
30
+ on:
31
+ repo: jp9000/obs-studio
32
+
33
+# The channel name "azubu.il.us.quakenet.org#obs-dev" is encrypted against jp9000/obs-studio to prevent IRC spam of forks
34
+notifications:
35
+ irc:
36
+ skip_join: true
37
+ template:
38
+ - "%{message} %{build_url}"
39
+ channels:
40
+ - secure: k9j7+ogVODMlveZdd5pP73AVLCFl1VbzVaVon0ECn3EQcxnLSpiZbc6l+PnIUKgee5pRKtUB4breufgmr4puq3s69YeQiOVKk5gx2yJGZ5jGacbSne0xTspzPxapiEbVUkcJ2L7gKntDG4+SUiW67dtt4G26O7zsErDF/lY/woQ=
41
obs-studio-0.16.4.tar.xz/CI
Added
2
1
+(directory)
2
obs-studio-0.16.4.tar.xz/CI/before-deploy-osx.sh
Added
10
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
+mkdir nightly
6
+cd ./build
7
+sudo python ../CI/install/osx/build_app.py
8
+zip -r -X $FILENAME OBS.app
9
+mv ./$FILENAME ../nightly
10
obs-studio-0.16.4.tar.xz/CI/before-script-osx.sh
Added
6
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
obs-studio-0.16.4.tar.xz/CI/install
Added
2
1
+(directory)
2
obs-studio-0.16.4.tar.xz/CI/install-dependencies-osx.sh
Added
19
1
2
+brew update
3
+
4
+#Base OBS Deps
5
+brew install ffmpeg x264 qt5 python cmake
6
+
7
+# CEF Stuff
8
+cd ../
9
+curl -kLO http://opensource.spotify.com/cefbuilds/cef_binary_3.2704.1434.gec3e9ed_macosx64.tar.bz2
10
+tar -xf ./cef_binary_3.2704.1434.gec3e9ed_macosx64.tar.bz2
11
+cd ./cef_binary_3.2704.1434.gec3e9ed_macosx64
12
+mkdir build
13
+cd ./build
14
+cmake -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" ..
15
+make -j4
16
+mkdir libcef_dll
17
+mv ./libcef_dll_wrapper/libcef_dll_wrapper.a ./libcef_dll/libcef_dll_wrapper.a
18
+cd ../../
19
obs-studio-0.16.4.tar.xz/CI/install/osx
Added
2
1
+(directory)
2
obs-studio-0.16.4.tar.xz/CI/install/osx/build_app.py
Added
214
1
2
+#!/usr/bin/env python
3
+
4
+candidate_paths = "bin obs-plugins data".split()
5
+
6
+plist_path = "../cmake/osxbundle/Info.plist"
7
+icon_path = "../cmake/osxbundle/obs.icns"
8
+run_path = "../cmake/osxbundle/obslaunch.sh"
9
+
10
+#not copied
11
+blacklist = """/usr /System""".split()
12
+
13
+#copied
14
+whitelist = """/usr/local""".split()
15
+
16
+#
17
+#
18
+#
19
+
20
+
21
+from sys import argv
22
+from glob import glob
23
+from subprocess import check_output, call
24
+from collections import namedtuple
25
+from shutil import copy, copytree, rmtree
26
+from os import makedirs, rename, walk, path as ospath
27
+import plistlib
28
+
29
+import argparse
30
+parser = argparse.ArgumentParser(description='obs-studio package util')
31
+parser.add_argument('-d', '--base-dir', dest='dir', default='rundir/RelWithDebInfo')
32
+parser.add_argument('-n', '--build-number', dest='build_number', default='0')
33
+parser.add_argument('-k', '--public-key', dest='public_key', default='OBSPublicDSAKey.pem')
34
+parser.add_argument('-f', '--sparkle-framework', dest='sparkle', default=None)
35
+parser.add_argument('-b', '--base-url', dest='base_url', default='https://builds.catchexception.org/obs-studio')
36
+parser.add_argument('-u', '--user', dest='user', default='jp9000')
37
+parser.add_argument('-c', '--channel', dest='channel', default='master')
38
+parser.add_argument('-s', '--stable', dest='stable', required=False, action='store_true', default=False)
39
+parser.add_argument('-p', '--prefix', dest='prefix', default='')
40
+args = parser.parse_args()
41
+
42
+def cmd(cmd):
43
+ import subprocess
44
+ import shlex
45
+ return subprocess.check_output(shlex.split(cmd)).rstrip('\r\n')
46
+
47
+LibTarget = namedtuple("LibTarget", ("path", "external", "copy_as"))
48
+
49
+inspect = list()
50
+
51
+inspected = set()
52
+
53
+build_path = args.dir
54
+build_path = build_path.replace("\\ ", " ")
55
+
56
+def add(name, external=False, copy_as=None):
57
+ if external and copy_as is None:
58
+ copy_as = name.split("/")[-1]
59
+ if name[0] != "/":
60
+ name = build_path+"/"+name
61
+ t = LibTarget(name, external, copy_as)
62
+ if t in inspected:
63
+ return
64
+ inspect.append(t)
65
+ inspected.add(t)
66
+
67
+
68
+for i in candidate_paths:
69
+ print("Checking " + i)
70
+ for root, dirs, files in walk(build_path+"/"+i):
71
+ for file_ in files:
72
+ path = root + "/" + file_
73
+ try:
74
+ out = check_output("{0}otool -L '{1}'".format(args.prefix, path), shell=True,
75
+ universal_newlines=True)
76
+ if "is not an object file" in out:
77
+ continue
78
+ except:
79
+ continue
80
+ rel_path = path[len(build_path)+1:]
81
+ print(repr(path), repr(rel_path))
82
+ add(rel_path)
83
+
84
+def add_plugins(path, replace):
85
+ for img in glob(path.replace(
86
+ "lib/QtCore.framework/Versions/5/QtCore",
87
+ "plugins/%s/*"%replace).replace(
88
+ "Library/Frameworks/QtCore.framework/Versions/5/QtCore",
89
+ "share/qt5/plugins/%s/*"%replace)):
90
+ if "_debug" in img:
91
+ continue
92
+ add(img, True, img.split("plugins/")[-1])
93
+
94
+actual_sparkle_path = '@loader_path/Frameworks/Sparkle.framework/Versions/A/Sparkle'
95
+
96
+while inspect:
97
+ target = inspect.pop()
98
+ print("inspecting", repr(target))
99
+ path = target.path
100
+ if path[0] == "@":
101
+ continue
102
+ out = check_output("{0}otool -L '{1}'".format(args.prefix, path), shell=True,
103
+ universal_newlines=True)
104
+
105
+ if "QtCore" in path:
106
+ add_plugins(path, "platforms")
107
+ add_plugins(path, "imageformats")
108
+ add_plugins(path, "accessible")
109
+
110
+
111
+ for line in out.split("\n")[1:]:
112
+ new = line.strip().split(" (")[0]
113
+ if '@' in new and "sparkle.framework" in new.lower():
114
+ actual_sparkle_path = new
115
+ print "Using sparkle path:", repr(actual_sparkle_path)
116
+ if not new or new[0] == "@" or new.endswith(path.split("/")[-1]):
117
+ continue
118
+ whitelisted = False
119
+ for i in whitelist:
120
+ if new.startswith(i):
121
+ whitelisted = True
122
+ if not whitelisted:
123
+ blacklisted = False
124
+ for i in blacklist:
125
+ if new.startswith(i):
126
+ blacklisted = True
127
+ break
128
+ if blacklisted:
129
+ continue
130
+ add(new, True)
131
+
132
+changes = list()
133
+for path, external, copy_as in inspected:
134
+ if not external:
135
+ continue #built with install_rpath hopefully
136
+ changes.append("-change '%s' '@rpath/%s'"%(path, copy_as))
137
+changes = " ".join(changes)
138
+
139
+info = plistlib.readPlist(plist_path)
140
+
141
+latest_tag = cmd('git describe --tags --abbrev=0')
142
+log = cmd('git log --pretty=oneline {0}...HEAD'.format(latest_tag))
143
+
144
+from os import path
145
+# set version
146
+if args.stable:
147
+ info["CFBundleVersion"] = latest_tag
148
+ info["CFBundleShortVersionString"] = latest_tag
149
+ info["SUFeedURL"] = '{0}/stable/updates.xml'.format(args.base_url)
150
+else:
151
+ info["CFBundleVersion"] = args.build_number
152
+ info["CFBundleShortVersionString"] = '{0}.{1}'.format(latest_tag, args.build_number)
153
+ info["SUFeedURL"] = '{0}/{1}/{2}/updates.xml'.format(args.base_url, args.user, args.channel)
154
+
155
+info["SUPublicDSAKeyFile"] = path.basename(args.public_key)
156
+info["OBSFeedsURL"] = '{0}/feeds.xml'.format(args.base_url)
157
+
158
+app_name = info["CFBundleName"]+".app"
159
+icon_file = "tmp/Contents/Resources/%s"%info["CFBundleIconFile"]
160
+
161
+copytree(build_path, "tmp/Contents/Resources/", symlinks=True)
162
+copy(icon_path, icon_file)
163
+plistlib.writePlist(info, "tmp/Contents/Info.plist")
164
+makedirs("tmp/Contents/MacOS")
165
+copy(run_path, "tmp/Contents/MacOS/%s"%info["CFBundleExecutable"])
166
+try:
167
+ copy(args.public_key, "tmp/Contents/Resources")
168
+except:
169
+ pass
170
+
171
+if args.sparkle is not None:
172
+ copytree(args.sparkle, "tmp/Contents/Frameworks/Sparkle.framework", symlinks=True)
173
+
174
+prefix = "tmp/Contents/Resources/"
175
+sparkle_path = '@loader_path/{0}/Frameworks/Sparkle.framework/Versions/A/Sparkle'
176
+
177
+cmd('{0}install_name_tool -change {1} {2} {3}/bin/obs'.format(
178
+ args.prefix, actual_sparkle_path, sparkle_path.format('../..'), prefix))
179
+
180
+
181
+
182
+for path, external, copy_as in inspected:
183
+ id_ = ""
184
+ filename = path
185
+ rpath = ""
186
+ if external:
187
+ id_ = "-id '@rpath/%s'"%copy_as
188
+ filename = prefix + "bin/" +copy_as
189
+ rpath = "-add_rpath @loader_path/ -add_rpath @executable_path/"
190
+ if "/" in copy_as:
191
+ try:
192
+ dirs = copy_as.rsplit("/", 1)[0]
193
+ makedirs(prefix + "bin/" + dirs)
194
+ except:
195
+ pass
196
+ copy(path, filename)
197
+ else:
198
+ filename = path[len(build_path)+1:]
199
+ id_ = "-id '@rpath/../%s'"%filename
200
+ if not filename.startswith("bin"):
201
+ print(filename)
202
+ rpath = "-add_rpath '@loader_path/{}/'".format(ospath.relpath("bin/", ospath.dirname(filename)))
203
+ filename = prefix + filename
204
+
205
+ cmd = "{0}install_name_tool {1} {2} {3} '{4}'".format(args.prefix, changes, id_, rpath, filename)
206
+ call(cmd, shell=True)
207
+
208
+try:
209
+ rename("tmp", app_name)
210
+except:
211
+ print("App already exists")
212
+ rmtree("tmp")
213
\ No newline at end of file
214
obs-studio-0.16.2.tar.xz/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/CMakeLists.txt
Changed
23
1
2
3
project(obs-studio)
4
5
+if(WIN32)
6
+ if (QTDIR OR DEFINED ENV{QTDIR} OR DEFINED ENV{QTDIR32} OR DEFINED ENV{QTDIR64})
7
+ # Qt path set by user or env var
8
+ else()
9
+ set(QTDIR "" CACHE PATH "Path to Qt (e.g. C:/Qt/5.7/msvc2015_64)")
10
+ message(WARNING "QTDIR variable is missing. Please set this variable to specify path to Qt (e.g. C:/Qt/5.7/msvc2015_64)")
11
+ endif()
12
+ if (DepsPath OR DEFINED ENV{DepsPath} OR DEFINED ENV{DepsPath32} OR DEFINED ENV{DepsPath64})
13
+ # Dependencies path set by user or env var
14
+ else()
15
+ set(DepsPath "" CACHE PATH "Path to compiled dependencies (e.g. D:/dependencies/win64)")
16
+ message(WARNING "DepsPath variable is missing. Please set this variable to specify path to compiled dependencies (e.g. D:/dependencies/win64)")
17
+ endif()
18
+endif()
19
+
20
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
21
22
include(ObsHelpers)
23
obs-studio-0.16.2.tar.xz/UI/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/UI/CMakeLists.txt
Changed
22
1
2
set(obs_PLATFORM_SOURCES
3
platform-x11.cpp)
4
5
- find_package(XCB COMPONENTS XCB REQUIRED RANDR REQUIRED XINERAMA REQUIRED)
6
-
7
- include_directories(
8
- ${XCB_INCLUDE_DIRS}
9
- ${X11_XCB_INCLUDE_DIRS})
10
-
11
- add_definitions(
12
- ${XCB_DEFINITIONS}
13
- ${X11_XCB_DEFINITIONS})
14
-
15
- set(obs_PLATFORM_LIBRARIES
16
- ${XCB_LIBRARIES}
17
- ${X11_XCB_LIBRARIES}
18
+ set(obs_PLATFORM_LIBRARIES
19
Qt5::X11Extras)
20
endif()
21
22
obs-studio-0.16.2.tar.xz/UI/api-interface.cpp -> obs-studio-0.16.4.tar.xz/UI/api-interface.cpp
Changed
10
1
2
3
bool obs_frontend_recording_active(void) override
4
{
5
- return main->outputHandler->StreamingActive();
6
+ return main->outputHandler->RecordingActive();
7
}
8
9
void *obs_frontend_add_tools_menu_qaction(const char *name) override
10
obs-studio-0.16.2.tar.xz/UI/data/locale/ca-ES.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/ca-ES.ini
Changed
19
1
2
Top="Part superior"
3
Bottom="Part inferior"
4
Reset="Restableix"
5
+Hours="Hores"
6
+Minutes="Minuts"
7
+Seconds="Segons"
8
9
QuickTransitions.SwapScenes="Canvia la vista prèvia i sortida d'escenes després de la transició"
10
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."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="Advertència: No es poden utilitzar diversos descodificadors QSV separats en transmetre i enregistrar al mateix temps. Per transmetre i engrestriar al mateix temps, si us plau modifiqueu-los, ja sigui el codificador de gravació o el codificador de transmissió."
13
Basic.Settings.Output.Simple.Encoder.Software="Programari (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Maquinari (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Maquinari (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Maquinari (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Programari (preconfiguració de x264 amb baix ús de CPU, augmenta la mida del fitxer)"
18
Basic.Settings.Output.VideoBitrate="Bitrate de vídeo"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/cs-CZ.ini
Changed
19
1
2
Top="Nahoře"
3
Bottom="Dole"
4
Reset="Resetovat"
5
+Hours="Hodiny"
6
+Minutes="Minuty"
7
+Seconds="Vteřiny"
8
9
QuickTransitions.SwapScenes="Prohodit scény náhledu a výstupu po přechodu"
10
QuickTransitions.SwapScenesTT="Prohodí scény náhledu a výstupu po přechodu (pokud originální výstupní scéna stále existuje).\nTato funkce nevrátí provedené změny, které byly provedeny v originální scéně výstupu."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="Varování: Není možné použit více oddělených QSV enkodérů pro streamování a nahrávání ve stejnou dobu. Pokud chcete tuto limitaci obejít, tak změňte použitý enkodér pro streamování či nahrávání."
13
Basic.Settings.Output.Simple.Encoder.Software="Softwarový (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardwarový (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardwarový (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardwarový (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softwarový (x264 předvolba nízkého zatížení CPU, větší soubory)"
18
Basic.Settings.Output.VideoBitrate="Bitrate videa"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/da-DK.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/da-DK.ini
Changed
157
1
2
Top="Top"
3
Bottom="Bund"
4
Reset="Nulstil"
5
+Hours="Timer"
6
+Minutes="Minutter"
7
+Seconds="Sekunder"
8
9
QuickTransitions.SwapScenes="Byt om på forhåndsvisning/output scener efter overgang"
10
+QuickTransitions.SwapScenesTT="Ombytter uddrag- og output-scener efter omskiftning (hvis oprindelige output-scene stadig eksisterer).\nDette vil ikke omgøre eventuelle ændringer, der måtte været udført på den oprindelige output-scene."
11
QuickTransitions.DuplicateScene="Dupliker scene"
12
+QuickTransitions.DuplicateSceneTT="Muliggør, ved redigere af den samme, scene, redigering af transformering/synlighed af kilder uden at ændre på output. \nFor at rediger egenskaber for kilder uden at ændre på output, aktivér 'Duplikér Kilder'.\nÆndring af denne værd vil nulstille den nuværende output-scene (hvis den stadig findes)."
13
QuickTransitions.EditProperties="Dupliker kilder"
14
+QuickTransitions.EditPropertiesTT="Muliggør, ved redigering af den samme scene, redigering af egenskaber for kilder uden at ændre på output.\nDette kan kun benyttes, hvis 'Duplikér Scene' er aktiv. \nVisse kilder (såsom optagne kilder eller mediekilder) understøtter ikke dette og kan ikke redigeres separat.\nÆndring af denne værdi vil nulstille den nuværende output-scene (hvis den stadig findes).\n\nAdvarsel: Da kilder vil blive duplikeret, kan dette kræve ekstra system- eller videoressourcer."
15
QuickTransitions.HotkeyName="Hurtig overgang: %1"
16
17
Basic.AddTransition="Tilføj konfigurerbar overgang"
18
19
20
ConfirmRemove.Title="Bekræfte fjern"
21
ConfirmRemove.Text="Er du sikker på du ønsker at fjerne '$1'?"
22
+ConfirmRemove.TextMultiple="Er du sikker på at du vil fjerne %1 elementer?"
23
24
Output.ConnectFail.Title="Kunne ikke oprette forbindelse"
25
Output.ConnectFail.BadPath="Ugyldig sti eller forbindelses URL. Kontroller indstillinger for at bekræfte, at de er gyldige."
26
27
Remux.SourceFile="OBS optagelse"
28
Remux.TargetFile="Destinationsfil"
29
Remux.Remux="Remux"
30
+Remux.OBSRecording="OBS optagelse"
31
Remux.FinishedTitle="Remuxing færdigt"
32
Remux.Finished="Optagelse remuxed"
33
Remux.FinishedError="Optagelse remuxed, men filen kan være ufuldstændige"
34
35
36
Basic.Main.PreviewConextMenu.Enable="Aktiver visning"
37
38
+ScaleFiltering="Skala filtrering"
39
+ScaleFiltering.Point="Punkt"
40
+ScaleFiltering.Bilinear="Bilinear"
41
+ScaleFiltering.Bicubic="Bikubisk"
42
+ScaleFiltering.Lanczos="Lanczos"
43
44
Deinterlacing="Deinterlacing"
45
Deinterlacing.Discard="Kassér"
46
Deinterlacing.Retro="Retro"
47
+Deinterlacing.Blend="Bland"
48
Deinterlacing.Linear="Lineær"
49
Deinterlacing.Linear2x="Lineær 2x"
50
51
52
Basic.PropertiesWindow.Confirm="Der er ændringer, som ikke er gemt. Vil du gerne beholde dem?"
53
Basic.PropertiesWindow.NoProperties="Ingen egenskaber tilgængelige"
54
Basic.PropertiesWindow.AddFiles="Tilføj filer"
55
+Basic.PropertiesWindow.AddDir="Tilføj mappe"
56
Basic.PropertiesWindow.AddURL="Tilføj sti/url"
57
+Basic.PropertiesWindow.AddEditableListDir="Tilføj mappe til '%1'"
58
Basic.PropertiesWindow.AddEditableListFiles="Tilføj filer til '%1'"
59
Basic.PropertiesWindow.AddEditableListEntry="Tilføj emne til '%1'"
60
Basic.PropertiesWindow.EditEditableListEntry="Rediger emne fra '%1'"
61
62
Basic.Main.StartRecording="Start optagelse"
63
Basic.Main.StartStreaming="Start streaming"
64
Basic.Main.StopRecording="Stop optagelse"
65
+Basic.Main.StoppingRecording="Stopper optagelse..."
66
Basic.Main.StopStreaming="Stop streaming"
67
+Basic.Main.StoppingStreaming="Stopper stream..."
68
Basic.Main.ForceStopStreaming="Stop streaming (ignorer forsinkelse)"
69
70
Basic.MainMenu.File="&Fil"
71
72
Basic.MainMenu.Edit.Redo="&Redo"
73
Basic.MainMenu.Edit.UndoAction="Fortryd $1 (&U)"
74
Basic.MainMenu.Edit.RedoAction="&Redo $1"
75
+Basic.MainMenu.Edit.LockPreview="&Lås forhåndsvisning"
76
Basic.MainMenu.Edit.Transform="&Transformering"
77
-Basic.MainMenu.Edit.Transform.EditTransform="Redigere transformering... (&E)"
78
+Basic.MainMenu.Edit.Transform.EditTransform="Rediger transformering... (&E)"
79
Basic.MainMenu.Edit.Transform.ResetTransform="Nulstille transformering (&R)"
80
Basic.MainMenu.Edit.Transform.Rotate90CW="Roter 90 grader CW"
81
Basic.MainMenu.Edit.Transform.Rotate90CCW="Roter 90 grader CCW"
82
83
Basic.MainMenu.Edit.Order.MoveToBottom="Flyt til &Bunden"
84
Basic.MainMenu.Edit.AdvAudio="&Avancerede lydegenskaber"
85
86
+Basic.MainMenu.View="&Vis"
87
+Basic.MainMenu.View.Toolbars="&Værktøjslinjer"
88
+Basic.MainMenu.View.Toolbars.Listboxes="&Listebokse"
89
+Basic.MainMenu.View.SceneTransitions="S&cene overgange"
90
+Basic.MainMenu.View.StatusBar="&Statuslinje"
91
92
Basic.MainMenu.SceneCollection="&Scenesamling"
93
Basic.MainMenu.Profile="&Profil"
94
95
+Basic.MainMenu.Tools="Værk&tøjer"
96
97
Basic.MainMenu.Help="&Hjælp"
98
Basic.MainMenu.Help.Website="Besøg &websted"
99
100
Basic.Settings.General.Language="Sprog"
101
Basic.Settings.General.WarnBeforeStartingStream="Vis bekræftelses-dialog ved opstart af stream"
102
Basic.Settings.General.WarnBeforeStoppingStream="Vis bekræftelses-dialog ved afslutning af stream"
103
+Basic.Settings.General.HideProjectorCursor="Skjul markør over projektorer"
104
+Basic.Settings.General.ProjectorAlwaysOnTop="Hav altid projektorer øverst"
105
Basic.Settings.General.Snapping="Kilde justeringsfastgørelse"
106
Basic.Settings.General.ScreenSnapping="Fastgør kilder til kanten af skærmen"
107
Basic.Settings.General.CenterSnapping="Fastgør kilder til horisontalt og vertikalt centrum"
108
Basic.Settings.General.SourceSnapping="Fastgør kilder til andre kilder"
109
Basic.Settings.General.SnapDistance="Fastgørings-følsomhed"
110
+Basic.Settings.General.RecordWhenStreaming="Optag automatisk ved streaming"
111
+Basic.Settings.General.KeepRecordingWhenStreamStops="Bliv ved med at optage når stream stopper"
112
+Basic.Settings.General.SysTrayEnabled="Aktiver proceslinje-ikon"
113
+Basic.Settings.General.SysTrayWhenStarted="Minimer til proceslinjen ved start"
114
115
Basic.Settings.Stream="Stream"
116
Basic.Settings.Stream.StreamType="Streamtype"
117
118
Basic.Settings.Output.Simple.RecordingQuality.Lossless="Tabsfri kvalitet, utrolig stor filstørrelse"
119
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
120
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
121
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
122
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
123
Basic.Settings.Output.VideoBitrate="Video Bitrate"
124
Basic.Settings.Output.AudioBitrate="Audio Bitrate"
125
126
Basic.Settings.Audio.UnknownAudioDevice="[Enhed ikke tilsluttet eller ikke tilgængelig]"
127
128
Basic.Settings.Advanced="Avanceret"
129
+Basic.Settings.Advanced.General.ProcessPriority="Proces prioritet"
130
+Basic.Settings.Advanced.General.ProcessPriority.High="Høj"
131
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Over normal"
132
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
133
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Ikke aktiv"
134
Basic.Settings.Advanced.Video.ColorFormat="Farveformat"
135
Basic.Settings.Advanced.Video.ColorSpace="YUV farverum"
136
Basic.Settings.Advanced.Video.ColorRange="YUV farveområde"
137
138
Basic.Settings.Advanced.StreamDelay="Stream forsinkelse"
139
Basic.Settings.Advanced.StreamDelay.Duration="Varighed (sekunder)"
140
Basic.Settings.Advanced.StreamDelay.MemoryUsage="Anslået hukommelsesbrug: %1 MB"
141
+Basic.Settings.Advanced.Network="Netværk"
142
+Basic.Settings.Advanced.Network.BindToIP="Bind til IP"
143
144
Basic.AdvAudio="Avancerede lydegenskaber"
145
Basic.AdvAudio.Name="Navn"
146
147
Basic.Hotkeys.StopRecording="Stop optagelse"
148
Basic.Hotkeys.SelectScene="Skift til scene"
149
150
+Basic.SystemTray.Show="Vis"
151
+Basic.SystemTray.Hide="Skjul"
152
153
+Basic.SystemTray.Message.Reconnecting="Afbrudt. Forbinder igen..."
154
155
Hotkeys.Insert="Insert"
156
Hotkeys.Delete="Delete"
157
obs-studio-0.16.2.tar.xz/UI/data/locale/de-DE.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/de-DE.ini
Changed
20
1
2
Top="Oben"
3
Bottom="Unten"
4
Reset="Zurücksetzen"
5
+Hours="Stunde(n)"
6
+Minutes="Minute(n)"
7
+Seconds="Sekunde(n)"
8
9
QuickTransitions.SwapScenes="Tausche Vorschau/Ausgabe-Szenen nach dem Übergang"
10
QuickTransitions.SwapScenesTT="Vertauscht die Vorschau- und Ausgabe-Szenen nach dem Übergang (falls die ursprüngliche Ausgabe-Szene noch vorhanden ist).\nEventuelle Änderungen an der original Ausgabe-Szene werden hierbei nicht rückgängig gemacht."
11
12
Basic.SystemTray.Show="Anzeigen"
13
Basic.SystemTray.Hide="Ausblenden"
14
15
-Basic.SystemTray.Message.Reconnecting="Verbindung verloren. Verbinde erneut..."
16
+Basic.SystemTray.Message.Reconnecting="Verbindung verloren. Verbinde erneut..."
17
18
Hotkeys.Insert="Einfügen"
19
Hotkeys.Delete="Entfernen"
20
obs-studio-0.16.2.tar.xz/UI/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/el-GR.ini
Changed
23
1
2
Close="Κλείσιμο"
3
Save="Αποθήκευση"
4
Discard="Απόρριψη"
5
+Disable="Απενεργοποίηση"
6
Yes="Ναι"
7
No="Όχι"
8
Add="Προσθήκη"
9
10
Duplicate="Διπλότυπη εγγραφή"
11
Enable="Ενεργοποίηση"
12
DisableOSXVSync="Απενεργοποίηση OSX V-Sync"
13
+Left="Αριστερά"
14
+Right="Δεξιά"
15
+Top="Επάνω"
16
+Bottom="Κάτω"
17
+Hours="Ώρες"
18
+Minutes="Λεπτά"
19
+Seconds="Δευτερόλεπτα"
20
21
22
Basic.TransitionDuration="Διάρκεια"
23
obs-studio-0.16.2.tar.xz/UI/data/locale/en-US.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/en-US.ini
Changed
12
1
2
Top="Top"
3
Bottom="Bottom"
4
Reset="Reset"
5
+Hours="Hours"
6
+Minutes="Minutes"
7
+Seconds="Seconds"
8
+Deprecated="Deprecated"
9
10
# quick transitions
11
QuickTransitions.SwapScenes="Swap Preview/Output Scenes After Transitioning"
12
obs-studio-0.16.2.tar.xz/UI/data/locale/es-ES.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/es-ES.ini
Changed
11
1
2
Top="Arriba"
3
Bottom="Abajo"
4
Reset="Reiniciar"
5
+Hours="Horas"
6
+Minutes="Minutos"
7
+Seconds="Segundos"
8
9
QuickTransitions.SwapScenes="Cambiar vista previa y salida escenas después de la transición"
10
QuickTransitions.SwapScenesTT="Cambia la vista previa y salida escenas después de la transición (si todavía existe la escena original de la salida). \nEsto no deshará cualquier cambio que pueda haber hecho a la escena original de la salida."
11
obs-studio-0.16.2.tar.xz/UI/data/locale/eu-ES.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/eu-ES.ini
Changed
19
1
2
Top="Goian"
3
Bottom="Behean"
4
Reset="Berrezarri"
5
+Hours="ordu"
6
+Minutes="minutu"
7
+Seconds="segundo"
8
9
QuickTransitions.SwapScenes="Trukatu Aurrebista/Irteera-eszenak trantsizioen ondoren"
10
QuickTransitions.SwapScenesTT="Trukatu aurrebistak eta irteera-eszenak trantsizioen ondoren (baldin eta irteerakoaren jatorrizkoa eszena badago).\n Honek ez du desegingo irteerakoaren jatorrizko eszenari egindako aldaketak."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="Kontuz: Ezin dituzu QSV kodeatzaile ugari bananduta erabili aldiberean jariotu eta grabatzerakoan. Aldiberean jariotu eta grabatzea nahi baduzu, mesedez aldatu bietako bat, grabaketa kodeatzailea edo jariotze kodeatzailea."
13
Basic.Settings.Output.Simple.Encoder.Software="Softwarea (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardwarea (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardwarea (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardwarea (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softwarea (x264 PUZ erabilpen apaleko aurre-ezarpena, fitxategiaren tamaina handitzen du)"
18
Basic.Settings.Output.VideoBitrate="Bideo bit-emaria"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/fi-FI.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/fi-FI.ini
Changed
19
1
2
Top="Ylhäältä"
3
Bottom="Alhaalta"
4
Reset="Palauta"
5
+Hours="Tuntia"
6
+Minutes="Minuuttia"
7
+Seconds="Sekuntia"
8
9
QuickTransitions.SwapScenes="Vaihda esikatselu- ja ulostulo-skenet siirtymän jälkeen"
10
QuickTransitions.SwapScenesTT="Vaihda esikatselu- ja ulostulo-skenet siirtymän jälkeen (jos ulostulon alkuperäinen skene on yhä olemassa).\nTämä ei peruuta muutoksia joita on tehty alkuperäiseen skeneen."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="Varoitus: Et voi käyttää useampaa QSV-enkooderia lähettäessä ja tallentaessa samaan aikaan. Jos haluat tehdä molempia yhtä aikaa, vaihda lähetys tai tallennus-enkooderi."
13
Basic.Settings.Output.Simple.Encoder.Software="Ohjelmistopohjainen (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Laitteistopohjainen (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Laitteisto (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Laitteistopohjainen (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Ohjelmistopohjainen (x264 matala CPU-käyttö, lisää tiedostokokoa)"
18
Basic.Settings.Output.VideoBitrate="Kuvan bitrate"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/fr-FR.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/fr-FR.ini
Changed
11
1
2
Top="En haut"
3
Bottom="En bas"
4
Reset="Réinitialiser"
5
+Hours="Heures"
6
+Minutes="Minutes"
7
+Seconds="Secondes"
8
9
QuickTransitions.SwapScenes="Permuter les scènes d'aperçu et de sortie après la transition"
10
QuickTransitions.SwapScenesTT="Permute les scènes d'aperçu et de sortie après la transition (si la scène d'origine de la sortie existe toujours). \nCela n'annulera pas les modifications qui auront pu être faites sur la scène d'origine de la sortie."
11
obs-studio-0.16.2.tar.xz/UI/data/locale/hr-HR.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/hr-HR.ini
Changed
20
1
2
Right="Zdesna"
3
Top="Odozgo"
4
Bottom="Odozdo"
5
+Reset="Poništi"
6
+Hours="Sati"
7
+Minutes="Minuta"
8
+Seconds="Sekundi"
9
10
QuickTransitions.SwapScenes="Zameni scene pregleda/izlaza nakon prelaza"
11
QuickTransitions.SwapScenesTT="Zamenjuje scene pregleda i izlaza nakon prelaza (ako originalna scena izlaza još uvek postoji).\nOvo neće poništiti promene koje su načinjene nad originalnom scenom izlaza."
12
13
Basic.Settings.Output.Simple.Warn.MultipleQSV="Upozorenje: Ne možete koristi više odvojenih QSV enkodera kada emitujete i snimate u isto vreme. Ako želite da emitujete i snimate u isto vreme, molim promenite ili enkoder snimanja ili enkoder emitovanja."
14
Basic.Settings.Output.Simple.Encoder.Software="Softverski (x264)"
15
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Mašinski (QSV)"
16
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Mašinski (AMD)"
17
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Mašinski (NVENC)"
18
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softverski (x264 niska upotreba procesora, povećava veličinu datoteke)"
19
Basic.Settings.Output.VideoBitrate="Protok videa"
20
obs-studio-0.16.2.tar.xz/UI/data/locale/hu-HU.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/hu-HU.ini
Changed
20
1
2
Top="Felső"
3
Bottom="Alsó"
4
Reset="Újraindít"
5
+Hours="Óra"
6
+Minutes="Perc"
7
+Seconds="Másodperc"
8
9
QuickTransitions.SwapScenes="Előnézeti/Kimeneti Jelenetek cseréje átmenet után"
10
QuickTransitions.SwapScenesTT="Az előnézet és a kimeneti jelenet cseréje átmenet után (ha a kimenet eredeti jelenete még létezik).\nEz nincs kihatással a kimenet eredeti jelenetére."
11
12
Basic.MainMenu.SceneCollection="&Jelenet gyűjtemény"
13
Basic.MainMenu.Profile="&Profil"
14
15
-Basic.MainMenu.Tools="&Eszközők"
16
+Basic.MainMenu.Tools="&Eszközök"
17
18
Basic.MainMenu.Help="&Segítség"
19
Basic.MainMenu.Help.Website="Weboldal meglátogatása"
20
obs-studio-0.16.2.tar.xz/UI/data/locale/it-IT.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/it-IT.ini
Changed
56
1
2
Right="Destra"
3
Top="Alto"
4
Bottom="Basso"
5
+Reset="Reset"
6
+Hours="Ore"
7
+Minutes="Minuti"
8
+Seconds="Secondi"
9
10
QuickTransitions.SwapScenes="Scambia Scena Preview/Uscita dopo la Transizione"
11
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."
12
13
Basic.MainMenu.SceneCollection="&Collezione scene"
14
Basic.MainMenu.Profile="&Profilo"
15
16
+Basic.MainMenu.Tools="&Strumenti"
17
18
Basic.MainMenu.Help="Aiuto (&H)"
19
Basic.MainMenu.Help.Website="Visita il sito"
20
21
Basic.Settings.General.WarnBeforeStartingStream="Chiedi conferma quando si avvia una diretta"
22
Basic.Settings.General.WarnBeforeStoppingStream="Chiedi conferma quando si termina una diretta"
23
Basic.Settings.General.HideProjectorCursor="Nascondi cursore sopra proiettori"
24
+Basic.Settings.General.ProjectorAlwaysOnTop="Rendono i proiettori sempre in primo piano"
25
Basic.Settings.General.Snapping="Allineamento Snapping Source"
26
Basic.Settings.General.ScreenSnapping="Snap source nei bordi dello schermo"
27
Basic.Settings.General.CenterSnapping="Snap source al centro orizzontale e verticale"
28
29
Basic.Settings.General.SnapDistance="Sensibilità Snap"
30
Basic.Settings.General.RecordWhenStreaming="Registra automaticamente quando si è in diretta"
31
Basic.Settings.General.KeepRecordingWhenStreamStops="Continua a registrare quando la diretta s'interrompe"
32
+Basic.Settings.General.SysTrayEnabled="Abilita icona area di notifica"
33
+Basic.Settings.General.SysTrayWhenStarted="Minimizza all'area di notifica all'avvio"
34
35
Basic.Settings.Stream="Stream"
36
Basic.Settings.Stream.StreamType="Tipo di stream"
37
38
Basic.Settings.Output.Simple.Warn.MultipleQSV="Attenzione: Non è possibile usare più encoder QSV quando si è in diretta e si registra allo stesso tempo. Se vuoi andare in diretta e registrare allo stesso tempo, cambia l'encoder per la registrazione o l'encoder per la diretta."
39
Basic.Settings.Output.Simple.Encoder.Software="Software (x264)"
40
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
41
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
42
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
43
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 Preset con basso utilizzo della CPU, aumenta le dimensioni del file)"
44
Basic.Settings.Output.VideoBitrate="Bitrate video"
45
46
Basic.Hotkeys.StopRecording="Ferma registrazione"
47
Basic.Hotkeys.SelectScene="Passa alla scena"
48
49
+Basic.SystemTray.Show="Mostra"
50
+Basic.SystemTray.Hide="Nascondi"
51
52
+Basic.SystemTray.Message.Reconnecting="Disconnesso. Riconnessione..."
53
54
Hotkeys.Insert="Ins"
55
Hotkeys.Delete="Canc"
56
obs-studio-0.16.2.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/ja-JP.ini
Changed
11
1
2
Top="上"
3
Bottom="下"
4
Reset="リセット"
5
+Hours="時間"
6
+Minutes="分"
7
+Seconds="秒"
8
9
QuickTransitions.SwapScenes="トランジション後にプレビュー/出力シーンを入れ替え"
10
QuickTransitions.SwapScenesTT="(出力のオリジナルシーンがまだ存在する場合)、トランジション後のプレビューと出力シーンを入れ替えます。\nこれは出力のオリジナルシーンに加えられた可能性があるすべての変更を元に戻しません。"
11
obs-studio-0.16.2.tar.xz/UI/data/locale/ko-KR.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/ko-KR.ini
Changed
19
1
2
Top="위"
3
Bottom="아래"
4
Reset="초기화"
5
+Hours="시"
6
+Minutes="분"
7
+Seconds="초"
8
9
QuickTransitions.SwapScenes="전환 후 미리 보기/출력 장면을 교체"
10
QuickTransitions.SwapScenesTT="(만약 출력 쪽 원본 장면이 있을 때) 전환 작업 이후 미리 보기와 출력 장면을 교체합니다. \n출력 쪽 원본 장면에서 변경한 내용은 사라지지 않습니다."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="경고: 방송과 녹화를 동시에 하고 있을 때 여러 개의 독립된 QSV 인코더를 사용할 수 없습니다. 두 작업을 동시에 하려면 녹화 혹은 방송 인코더 둘 중 하나를 바꿔야 합니다."
13
Basic.Settings.Output.Simple.Encoder.Software="소프트웨어 (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="하드웨어 (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="하드웨어 (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="하드웨어 (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="소프트웨어 (x264 CPU 부담이 적지만 파일 크기가 증가)"
18
Basic.Settings.Output.VideoBitrate="비디오 비트레이트"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/ms-MY.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/ms-MY.ini
Changed
336
1
2
Display="Paparan"
3
Name="Nama"
4
Exit="Keluar"
5
-Mixer="Pengadun(suara)"
6
+Mixer="Pengadun suara"
7
Browse="Cari"
8
Mono="Mono"
9
Stereo="Stereo"
10
-DroppedFrames="Gambar-gambar Terjatuh %1 (%2%)"
11
+DroppedFrames="%1 Gambar Hilang (%2%)"
12
PreviewProjector="Paparan Projektor penuh (Pratonton)"
13
SceneProjector="Paparan Projektor penuh (Adegan)"
14
SourceProjector="Paparan Projektor penuh (Sumber)"
15
16
Show="Tunjuk"
17
Hide="Sembunyi"
18
Untitled="Tiada tajuk"
19
-New="Baru"
20
-Duplicate="Salin"
21
+New="Baharu"
22
+Duplicate="Salin semula"
23
Enable="Benarkan"
24
-DisableOSXVSync="Nyahaktifkan OSX V-Sync"
25
-ResetOSXVSyncOnExit="Tetapkan semula OSX V-Sync apabila keluar"
26
-HighResourceUsage="Pengekodan terbeban! Cuba turunkan tetapan video ataupun gunakan pratetapan pengekodan yang lebih cepat."
27
+DisableOSXVSync="Nyahaktifkan V-Sync OSX"
28
+ResetOSXVSyncOnExit="Set semula OSX V-Sync apabila keluar"
29
+HighResourceUsage="Pengekodan terbeban! Cuba turunkan tetapan video ataupun gunakan pratetap pengekodan yang lebih laju."
30
Transition="Peralihan"
31
QuickTransitions="Peralihan Pantas"
32
Left="Kiri"
33
Right="Kanan"
34
Top="Atas"
35
Bottom="Bawah"
36
+Reset="Set semula"
37
+Hours="Jam"
38
+Minutes="Minit"
39
+Seconds="Saat"
40
41
-QuickTransitions.SwapScenes="Tukar Pratonton/Output Adegan-adegan Selepas Peralihan"
42
-QuickTransitions.SwapScenesTT="Menukarkan pratonton dan output adegan-adegan sleeps peralihan(jika output adegan mash wujud).\nIni tidak akan mengundurkan semarang perubahan yang mungkin telah dibuat pada output adegan yang asal."
43
+QuickTransitions.SwapScenes="Tukar Pratonton/Pengeluaran Adegan Selepas Peralihan"
44
+QuickTransitions.SwapScenesTT="Menukarkan pratonton dan pengeluaran adegan-adegan selepas peralihan(jika pengeluaran adegan mash wujud).\nIni tidak akan mengundurkan sebarang perubahan yang mungkin telah dilakukan pada pengeluaran adegan yang asal."
45
QuickTransitions.DuplicateScene="Klonkan Adegan"
46
-QuickTransitions.DuplicateSceneTT="Apabila menyunting adegan yang sama, ini membolehkan penyuntingan perubahan/keterlihatan tanpa mengubah output..\nUntuk edit sifat-sifat adegan-adegan tanpa mengubah suai output, aktifkan 'Klonkan Adegan'.\nPengubahan nilai ini akan menetapkan semula output adegan (jika adegan masih wujud)."
47
+QuickTransitions.DuplicateSceneTT="Apabila menyunting adegan yang sama, ini membolehkan penyuntingan perubahan/keterlihatan tanpa mengubah pengeluaran.\nUntuk edit sifat-sifat adegan tanpa mengubah suai pengeluaran, aktifkan 'Klonkan Adegan'.\nPengubahan nilai ini akan menetapkan semula pengeluaran adegan (jika adegan masih wujud)."
48
QuickTransitions.EditProperties="Klonkan Sumber"
49
-QuickTransitions.EditPropertiesTT="Apabila menyunting adegan yang sama, ini membolehkan penyuntingan sumber-sumber tanpa mengubah output.\nIni hanya boleh dilakukan jika 'Klonkan Adegan' diaktifkan.\nSebahagian sumber (seperti sumber-sumber tangkapan atau media) tidak menyokong tetapan ini dan tidak boleh disunting secara berasingan.\nPenukaran nilai ini akan menetapkan semula output adegan yang sedang digunakan (jika adegan masih wujud).\n\nAmaran: Kerana sumber-sumber akan diklonkan, ini mungkin memerlukan penambahan sumber-sumber sistem/video."
50
+QuickTransitions.EditPropertiesTT="Apabila menyunting adegan yang sama, ini membolehkan penyuntingan sumber-sumber tanpa mengubah pengeluaran.\nIni hanya boleh dilakukan jika 'Klonkan Adegan' diaktifkan.\nSebahagian sumber (seperti sumber-sumber penangkapan atau media) tidak menyokong tetapan ini dan tidak boleh disunting secara berasingan.\nPenukaran nilai ini akan menetapkan semula pengeluaran adegan yang sedang digunakan (jika adegan masih wujud).\n\nAmaran: Pilihan ini mungkin memerlukan sumber-sumber sistem/audio tambahan kerana sumber-sumber akan diklonkan."
51
QuickTransitions.HotkeyName="Peralihan Pantas: %1"
52
53
-Basic.AddTransition="Tambah Peralihan Yang Boleh Diubahsuai"
54
-Basic.RemoveTransition="Buang Peralihan Yang Boleh Diubahsuai"
55
+Basic.AddTransition="Tambah Peralihan yang Boleh Diubahsuai"
56
+Basic.RemoveTransition="Buang Peralihan yang Boleh Diubahsuai"
57
Basic.TransitionProperties="Sifat-sifat Peralihan"
58
Basic.SceneTransitions="Peralihan-peralihan Adegan"
59
Basic.TransitionDuration="Tempoh"
60
61
62
ConfirmRemove.Title="Pengesahan untuk Buang"
63
ConfirmRemove.Text="Adakah anda pasti untuk buang '$1'?"
64
+ConfirmRemove.TextMultiple="Adakah anda yakin untuk buang %1 barang?"
65
66
Output.ConnectFail.Title="Penyambungan gagal"
67
Output.ConnectFail.BadPath="Sambungan URL atau Laluan yang tidak sah. Sila semak semula tetapan anda to mengesahkan bahawa semuanya sah."
68
Output.ConnectFail.ConnectFailed="Penyambungan ke pelayan gagal"
69
+Output.ConnectFail.InvalidStream="Tidak dapat mencapai saluran yang ditetapkan/kata kunci 'stream', sila semak semula kata kunci 'stream'. Jika ia betul, kemungkinan ada masalah menyambung kepada pelayan."
70
Output.ConnectFail.Error="Ralat tidak dijangka berlaku sewaktu percubaan menyambung ke pelayan. Maklumat lanjut di dalam fail log."
71
Output.ConnectFail.Disconnected="Terputus daripada pelayan."
72
73
Output.RecordFail.Title="Gagal memulakan rakaman"
74
-Output.RecordFail.Unsupported="Output format adalah tidak disokong atau tidak membenarkan lebih daripada satu 'audio track'. Sila semak tetapan anda dan cuba lagi."
75
+Output.RecordFail.Unsupported="Format pengeluaran tidak disokong atau tidak membenarkan lebih daripada satu trek audio. Sila semak tetapan anda dan cuba lagi."
76
Output.RecordNoSpace.Title="Ruang simpanan tidak cukup"
77
Output.RecordNoSpace.Msg="Tiada ruang simpanan yang cukup untuk meneruskan rakaman."
78
Output.RecordError.Title="Ralat rakaman"
79
Output.RecordError.Msg="Ralat yang tidak ditetapkan berlaku semasa rakaman."
80
81
Output.BadPath.Title="Laluan Fail Rosak"
82
-Output.BadPath.Text="Laluan output fail yang dikonfigurasikan tidak sah.Sila semak semula tetapan anda untuk mengesahkan laluan fail yang sah telah ditetapkan."
83
+Output.BadPath.Text="Laluan pengeluaran fail yang dikonfigurasikan tidak sah. Sila semak semula tetapan anda untuk mengesahkan laluan fail yang sah telah ditetapkan."
84
85
-LogReturnDialog="Memuat naik Log Berjaya"
86
+LogReturnDialog="Muat naik Log Berjaya"
87
LogReturnDialog.CopyURL="Salin URL"
88
LogReturnDialog.ErrorUploadingLog="Ralat memuat naikkan fail log"
89
90
91
LicenseAgreement.Exit="Keluar"
92
93
Remux.SourceFile="Rakaman OBS"
94
-Remux.TargetFile="Fail sasaran"
95
+Remux.TargetFile="Fail Sasaran"
96
+Remux.Remux="Tukar format"
97
Remux.OBSRecording="Rakaman OBS"
98
+Remux.FinishedTitle="Penukaran format selesai"
99
+Remux.Finished="Format rakaman ditukar"
100
+Remux.FinishedError="Format rakaman ditukar, tetapi fail itu mungkin tidak lengkap"
101
Remux.SelectRecording="Pilih Rakaman OBS …"
102
Remux.SelectTarget="Pilih fail sasaran …"
103
Remux.FileExistsTitle="Fail sasaran wujud"
104
Remux.FileExists="Fail sasaran wujud, adakah anda mahu gantikannya?"
105
+Remux.ExitUnfinishedTitle="Penukaran format sedang dijalankan"
106
+Remux.ExitUnfinished="Penukaran format masih belum selesai, menghentikannya sekarang boleh menyebabkan fail sasaran tidak boleh digunakan.\nAdakah anda pasti untuk memberhentikan proses ini?"
107
108
UpdateAvailable="Ada Versi Baru"
109
UpdateAvailable.Text="Versi %1.%2.%3 kini ada. <a href='%4'>Klik sini untuk memuat turun</a>"
110
111
Basic.DesktopDevice1="Audio Desktop"
112
-Basic.DesktopDevice2="Audio Desktop"
113
+Basic.DesktopDevice2="Audio Desktop 2"
114
Basic.AuxDevice1="Mic/Aux"
115
Basic.AuxDevice2="Mic/Aux 2"
116
Basic.AuxDevice3="Mic/Aux 3"
117
Basic.AuxDevice4="Mic/Aux 4"
118
119
Basic.Scene="Adegan"
120
+Basic.DisplayCapture="Paparan Penuh"
121
122
Basic.Main.PreviewConextMenu.Enable="Benarkan Pratonton"
123
124
+ScaleFiltering="Skala Tapisan"
125
+ScaleFiltering.Point="Point"
126
+ScaleFiltering.Bilinear="Bilinear"
127
+ScaleFiltering.Bicubic="Bicubic"
128
+ScaleFiltering.Lanczos="Lanczos"
129
130
+Deinterlacing="Deinterlacing"
131
+Deinterlacing.Discard="Discard"
132
Deinterlacing.Retro="Retro"
133
+Deinterlacing.Blend="Blend"
134
+Deinterlacing.Blend2x="Blend 2x"
135
Deinterlacing.Linear="Linear"
136
+Deinterlacing.Linear2x="Linear 2x"
137
+Deinterlacing.Yadif="Yadif"
138
+Deinterlacing.Yadif2x="Yadif 2x"
139
+Deinterlacing.TopFieldFirst="Bahagian Atas Dahulu"
140
+Deinterlacing.BottomFieldFirst="Bahagian Bawah Dahulu"
141
142
Basic.Main.AddSceneDlg.Title="Tambah Adegan"
143
Basic.Main.AddSceneDlg.Text="Sila taip nama adegan"
144
145
Basic.PropertiesWindow.Confirm="Ada perubahan yang belum disimpan. Adakah anda mahu menyimpannya?"
146
Basic.PropertiesWindow.NoProperties="Tiada sifat-sifat disediakan"
147
Basic.PropertiesWindow.AddFiles="Tambah Fail-Fail"
148
+Basic.PropertiesWindow.AddDir="Tambah Direktori"
149
Basic.PropertiesWindow.AddURL="Tambah laluan/URL"
150
+Basic.PropertiesWindow.AddEditableListDir="Tambah direktori ke '%1'"
151
Basic.PropertiesWindow.AddEditableListFiles="Tambah fail ke '%1'"
152
Basic.PropertiesWindow.AddEditableListEntry="Tambah entri ke '%1'"
153
Basic.PropertiesWindow.EditEditableListEntry="Sunting entri daripada '%1'"
154
155
-Basic.PropertiesView.FPS.Simple="Nilai-nilai mudah FPS"
156
-Basic.PropertiesView.FPS.Rational="Nilai-nilai pecahan FPS"
157
-Basic.PropertiesView.FPS.ValidFPSRanges="Julat sah FPS:"
158
+Basic.PropertiesView.FPS.Simple="Nilai-nilai FPS mudah"
159
+Basic.PropertiesView.FPS.Rational="Nilai-nilai FPS pecahan"
160
+Basic.PropertiesView.FPS.ValidFPSRanges="Julat FPS sah:"
161
162
Basic.InteractionWindow="Berinteraksi dengan '%1'"
163
164
165
Basic.TransformWindow.Position="Kedudukan"
166
Basic.TransformWindow.Rotation="Pusingan"
167
Basic.TransformWindow.Size="Saiz"
168
+Basic.TransformWindow.Alignment="Kedudukan Penjajaran"
169
+Basic.TransformWindow.Crop="Potong"
170
171
Basic.TransformWindow.Alignment.TopLeft="Kiri Atas"
172
Basic.TransformWindow.Alignment.TopCenter="Tengah Atas"
173
174
Basic.Main.StartRecording="Mula rakaman"
175
Basic.Main.StartStreaming="Mula 'streaming'"
176
Basic.Main.StopRecording="Hentikan rakaman"
177
+Basic.Main.StoppingRecording="Menghentikan rakaman..."
178
Basic.Main.StopStreaming="Hentikan 'streaming'"
179
+Basic.Main.StoppingStreaming="Menghentikan 'streaming'..."
180
Basic.Main.ForceStopStreaming="Berhenti 'streaming' (buang kelewatan)"
181
182
Basic.MainMenu.File="&Fail"
183
Basic.MainMenu.File.Export="&Export"
184
Basic.MainMenu.File.Import="&Import"
185
Basic.MainMenu.File.ShowRecordings="Papar &Rakaman"
186
+Basic.MainMenu.File.Remux="Format& rakaman"
187
Basic.MainMenu.File.Settings="&Tetapan"
188
Basic.MainMenu.File.ShowSettingsFolder="Tunjukkan Folder Tetapan"
189
Basic.MainMenu.File.ShowProfileFolder="Tunjukkan Folder Profil"
190
191
Basic.MainMenu.Edit.Redo="Buat Semula (&R)"
192
Basic.MainMenu.Edit.UndoAction="&Ubah Balik $1"
193
Basic.MainMenu.Edit.RedoAction="&Ubah Semula $1"
194
+Basic.MainMenu.Edit.LockPreview="&Kunci Pratonton"
195
Basic.MainMenu.Edit.Transform="&Ubah"
196
Basic.MainMenu.Edit.Transform.EditTransform="&Sunting Perubahan..."
197
Basic.MainMenu.Edit.Transform.Rotate90CW="Putarkan 90 darjah mengikut arah jam"
198
Basic.MainMenu.Edit.Transform.Rotate90CCW="Putarkan 90 darjah melawan arah jam"
199
Basic.MainMenu.Edit.Transform.Rotate180="Putarkan 180 darjah"
200
+Basic.MainMenu.Edit.Transform.FlipHorizontal="Flip secara &Mendatar"
201
+Basic.MainMenu.Edit.Transform.FlipVertical="Flip secara &Menegak"
202
Basic.MainMenu.Edit.Transform.FitToScreen="&Muat di skrin"
203
Basic.MainMenu.Edit.Transform.StretchToScreen="&Regangkan ke skrin"
204
Basic.MainMenu.Edit.Order.MoveUp="Gerakkan ke &atas"
205
206
Basic.MainMenu.Help.Logs="Fail &Log"
207
Basic.MainMenu.Help.Logs.ShowLogs="&Tunjukkan Fail-Fail Log"
208
Basic.MainMenu.Help.Logs.UploadCurrentLog="Muat naik Fail Log &Kini"
209
+Basic.MainMenu.Help.Logs.UploadLastLog="Muat naik &Fail Log Terakhir"
210
+Basic.MainMenu.Help.Logs.ViewCurrentLog="&Paparkan Log Semasa"
211
Basic.MainMenu.Help.CheckForUpdates="Semak Versi Baharu"
212
213
+Basic.Settings.ProgramRestart="Program ini mesti dimulakan semula untuk tetapan-tetapan ini berkesan."
214
Basic.Settings.ConfirmTitle="Sahkan Perubahan"
215
Basic.Settings.Confirm="Anda mempunyai perubahan yang tidak disimpan. Simpan perubahan?"
216
217
218
Basic.Settings.General.Language="Bahasa"
219
Basic.Settings.General.WarnBeforeStartingStream="Tunjukkan dialog pengesahan ketika memulakan 'stream'"
220
Basic.Settings.General.WarnBeforeStoppingStream="Tunjukkan dialog pengesahan ketika menghentikan 'stream'"
221
+Basic.Settings.General.HideProjectorCursor="Sembunyikan tetikus atas projektor"
222
+Basic.Settings.General.ProjectorAlwaysOnTop="Jadikan projektor sentiasa di atas"
223
+Basic.Settings.General.SnapDistance="Kepekaan 'snap'"
224
+Basic.Settings.General.RecordWhenStreaming="Rakam apabila 'streaming' secara automatik"
225
+Basic.Settings.General.KeepRecordingWhenStreamStops="Tetap rakam selepas 'stream' berhenti"
226
227
Basic.Settings.Stream="'Stream'"
228
Basic.Settings.Stream.StreamType="Jenis 'Stream'"
229
230
+Basic.Settings.Output="Hasil"
231
Basic.Settings.Output.Format="Format Rakaman"
232
Basic.Settings.Output.SelectFile="Pilih Fail Rakaman"
233
+Basic.Settings.Output.EnforceBitrate="Kuatkuasakan had nilai bit perkhidmatan 'streaming'"
234
+Basic.Settings.Output.Mode.Simple="Mudah"
235
+Basic.Settings.Output.Mode.Adv="Lanjutan"
236
Basic.Settings.Output.Simple.RecordingQuality="Kualiti Rakaman"
237
Basic.Settings.Output.Simple.RecordingQuality.Stream="Sama seperti 'stream'"
238
Basic.Settings.Output.Simple.Encoder.Software="Perisian (x264)"
239
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)"
240
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)"
241
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)"
242
+Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (Preset x264: pengunaan CPU rendah, menaikkan saiz fail)"
243
+Basic.Settings.Output.VideoBitrate="Nilai Bit Video"
244
+Basic.Settings.Output.AudioBitrate="Nilai Bit Audio"
245
Basic.Settings.Output.Reconnect="Sambung semula secara automatik"
246
Basic.Settings.Output.RetryDelay="Kelewatan Percubaan (saat)"
247
Basic.Settings.Output.MaxRetries="Cubaan Maksimum"
248
249
+Basic.Settings.Output.Adv.AudioTrack="Trek Audio"
250
+Basic.Settings.Output.Adv.Streaming="'Streaming'"
251
+Basic.Settings.Output.Adv.Audio.Track1="Trek 1"
252
+Basic.Settings.Output.Adv.Audio.Track2="Trek 2"
253
+Basic.Settings.Output.Adv.Audio.Track3="Trek 3"
254
+Basic.Settings.Output.Adv.Audio.Track4="Trek 4"
255
256
Basic.Settings.Output.Adv.Recording="Rakaman"
257
Basic.Settings.Output.Adv.Recording.Type="Jenis"
258
+Basic.Settings.Output.Adv.Recording.Type.Standard="Bias"
259
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Gantikan jika fail wujud"
260
Basic.Settings.Output.Adv.FFmpeg.Type="Jenis Output FFmpeg"
261
+Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Semua Fail"
262
+Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Laluan fail atau URL"
263
+Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Audio"
264
+Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Video"
265
+Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Format Asal"
266
267
268
269
270
271
+Basic.Settings.Audio.EnablePushToMute="Benarkan Tekan-untuk-senyap"
272
+Basic.Settings.Audio.PushToMuteDelay="Kelewatan Tekan-untuk-senyap"
273
+Basic.Settings.Audio.EnablePushToTalk="Benarkan Tekan-untuk-cakap"
274
+Basic.Settings.Audio.PushToTalkDelay="Kelewatan Tekan-untuk-cakap"
275
+Basic.Settings.Audio.UnknownAudioDevice="[Peranti tidak disambung atau tiada]"
276
277
+Basic.Settings.Advanced="Lanjutan"
278
+Basic.Settings.Advanced.General.ProcessPriority="Keutamaan Proses"
279
+Basic.Settings.Advanced.General.ProcessPriority.High="Tinggi"
280
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Atas Normal"
281
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
282
Basic.Settings.Advanced.FormatWarning="Amaran:Format warna selain daripada 'NV12' lebih digunakan untuk rakaman,dan tidak disyorkan apabila 'streaming'.'Streaming' mungkin menyebabkan peningkatan penggunaan CPU disebabkan oleh penukaran format warna."
283
-
284
-
285
-
286
-
287
-
288
-
289
+Basic.Settings.Advanced.Video.ColorFormat="Format Warna"
290
+Basic.Settings.Advanced.Video.ColorRange.Partial="Sebahagian"
291
+Basic.Settings.Advanced.Video.ColorRange.Full="Penuh"
292
+Basic.Settings.Advanced.StreamDelay="Kelewatan 'Stream'"
293
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Anggaran Penggunaan Memori: %1 MB"
294
+Basic.Settings.Advanced.Network="Rangkaian"
295
+
296
+Basic.AdvAudio.Name="Nama"
297
+Basic.AdvAudio.AudioTracks="Trek-trek"
298
+
299
+Basic.Settings.Hotkeys="Kekunci Pantas"
300
+
301
+Basic.Hotkeys.StartStreaming="Mula 'Streaming'"
302
+Basic.Hotkeys.StartRecording="Mula Rakaman"
303
+Basic.Hotkeys.StopRecording="Hentikan Rakaman"
304
+
305
+Basic.SystemTray.Show="Papar"
306
+Basic.SystemTray.Hide="Sembunyi"
307
+
308
+Basic.SystemTray.Message.Reconnecting="Terputus. Menyambung semula..."
309
+
310
+Hotkeys.Insert="Insert"
311
+Hotkeys.Delete="Delete"
312
+Hotkeys.Home="Home"
313
+Hotkeys.End="End"
314
+Hotkeys.PageUp="Page Up"
315
+Hotkeys.PageDown="Page Down"
316
+Hotkeys.NumLock="Num Lock"
317
+Hotkeys.ScrollLock="Scroll Lock"
318
+Hotkeys.CapsLock="Caps Lock"
319
+Hotkeys.Backspace="Backspace"
320
+Hotkeys.Tab="Tab"
321
+Hotkeys.Print="Print"
322
+Hotkeys.Pause="Pause"
323
+Hotkeys.Left="Left"
324
+Hotkeys.Right="Right"
325
+Hotkeys.Up="Up"
326
+Hotkeys.Down="Down"
327
+Hotkeys.Windows="Windows"
328
Hotkeys.NumpadDecimal="Perpuluhan Numpad"
329
330
+Mute="Senyap"
331
+Push-to-mute="Tekan-untuk-senyap"
332
+Push-to-talk="Tekan-untuk-cakap"
333
334
335
336
obs-studio-0.16.2.tar.xz/UI/data/locale/pl-PL.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/pl-PL.ini
Changed
11
1
2
Top="Od góry"
3
Bottom="Od dołu"
4
Reset="Reset"
5
+Hours="Godziny"
6
+Minutes="Minuty"
7
+Seconds="Sekundy"
8
9
QuickTransitions.SwapScenes="Zamień podgląd/wyjście scen po przejściu"
10
QuickTransitions.SwapScenesTT="Zamienia podgląd i wyjście scen po przejściu (jeżeli wyjście oryginalnej sceny istnieje).\nNie przywraca to zmian jakie zostały dokonane w oryginalnej scenie."
11
obs-studio-0.16.2.tar.xz/UI/data/locale/pt-BR.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/pt-BR.ini
Changed
12
1
2
Right="Direita"
3
Top="Topo"
4
Bottom="Baixo"
5
+Reset="Repor"
6
+Hours="Horas"
7
+Minutes="Minutos"
8
+Seconds="Segundos"
9
10
QuickTransitions.SwapScenes="Trocar Cenas de Prévia/Saída após a Transição"
11
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."
12
obs-studio-0.16.2.tar.xz/UI/data/locale/pt-PT.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/pt-PT.ini
Changed
107
1
2
Right="Direita"
3
Top="Cima"
4
Bottom="Baixo"
5
+Reset="Repor"
6
+Hours="Horas"
7
+Minutes="Minutos"
8
+Seconds="Segundos"
9
10
QuickTransitions.SwapScenes="Trocar pré-visualização/saída de cenas Depois de uma Transição"
11
QuickTransitions.DuplicateScene="Duplicar cena"
12
13
14
ConfirmRemove.Title="Comfirmar Remover"
15
ConfirmRemove.Text="Tem a certeza que quer remover '$1'?"
16
+ConfirmRemove.TextMultiple="Tem a certeza de que pretende remover %1 itens?"
17
18
Output.ConnectFail.Title="Falha ao ligar"
19
Output.ConnectFail.BadPath="Caminho ou endereço de ligação inválido. Por favor, verifique as suas definições para confirmar que são válidas."
20
21
Basic.PropertiesWindow.Confirm="Há alterações não guardadas. Pretende mantê-las?"
22
Basic.PropertiesWindow.NoProperties="Sem propriedades disponíveis"
23
Basic.PropertiesWindow.AddFiles="Adicionar ficheiros"
24
+Basic.PropertiesWindow.AddDir="Adicionar diretório"
25
Basic.PropertiesWindow.AddURL="Adicionar caminho ou endereço"
26
+Basic.PropertiesWindow.AddEditableListDir="Adicionar diretório a '%1'"
27
Basic.PropertiesWindow.AddEditableListFiles="Adicionar ficheiros a '%1'"
28
Basic.PropertiesWindow.AddEditableListEntry="Adicionar entrada a '%1'"
29
Basic.PropertiesWindow.EditEditableListEntry="Editar entrada a '%1'"
30
31
Basic.Main.StartRecording="Começar Gravação"
32
Basic.Main.StartStreaming="Iniciar transmissão"
33
Basic.Main.StopRecording="Parar Gravação"
34
+Basic.Main.StoppingRecording="A parar gravação..."
35
Basic.Main.StopStreaming="Parar transmissão"
36
+Basic.Main.StoppingStreaming="A parar transmissão..."
37
Basic.Main.ForceStopStreaming="Parar transmissão (ignorar atraso)"
38
39
Basic.MainMenu.File="&Ficheiro"
40
41
Basic.MainMenu.Edit.Redo="&Refazer"
42
Basic.MainMenu.Edit.UndoAction="Desfazer $1"
43
Basic.MainMenu.Edit.RedoAction="&Refazer $1"
44
+Basic.MainMenu.Edit.LockPreview="B&loquear pré-visualização"
45
Basic.MainMenu.Edit.Transform="&Transformar"
46
Basic.MainMenu.Edit.Transform.EditTransform="&Editar Transformação..."
47
Basic.MainMenu.Edit.Transform.ResetTransform="&Reset Transform"
48
49
Basic.MainMenu.Edit.Order.MoveToBottom="Mover para o Fundo"
50
Basic.MainMenu.Edit.AdvAudio="Propriedades &avançadas de áudio"
51
52
+Basic.MainMenu.View="&Ver"
53
+Basic.MainMenu.View.Toolbars="Barras de ferramen&tas"
54
+Basic.MainMenu.View.SceneTransitions="Transições de &cenas"
55
+Basic.MainMenu.View.StatusBar="&Barra de estado"
56
57
Basic.MainMenu.SceneCollection="Coleção de cena"
58
Basic.MainMenu.Profile="&Perfil"
59
60
+Basic.MainMenu.Tools="&Ferramentas"
61
62
Basic.MainMenu.Help="&Ajuda"
63
Basic.MainMenu.Help.Website="Visitar &website"
64
65
Basic.Settings.General.WarnBeforeStoppingStream="Mostrar caixa de diálogo de confirmação ao parar transmissões"
66
Basic.Settings.General.Snapping="Alinhamentos com encaixe na Cena"
67
Basic.Settings.General.SnapDistance="Sensibilidade do Snap"
68
+Basic.Settings.General.RecordWhenStreaming="Gravar automaticamente quando estiver a transmitir"
69
+Basic.Settings.General.KeepRecordingWhenStreamStops="Continuar a gravar quando a transmissão parar"
70
+Basic.Settings.General.SysTrayEnabled="Ativar ícone da área de notificações"
71
+Basic.Settings.General.SysTrayWhenStarted="Minimizar para a área de notificações quando iniciado"
72
73
Basic.Settings.Stream="Transmissão"
74
Basic.Settings.Stream.StreamType="Tipo de transmissão"
75
76
Basic.Settings.Audio.UnknownAudioDevice="[Dispositivo não conectado ou não disponível]"
77
78
Basic.Settings.Advanced="Avançado"
79
+Basic.Settings.Advanced.General.ProcessPriority="Prioridade do precesso"
80
+Basic.Settings.Advanced.General.ProcessPriority.High="Alta"
81
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Acima do normal"
82
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal"
83
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Inativo"
84
Basic.Settings.Advanced.FormatWarning="Aviso: Formatos de cor diferentes de NV12 destinam-se principalmente a gravação e não são recomendados durante a transmissão. A transmissão pode incorrer numa maior utilização do processador devido à conversão do formato de cor."
85
Basic.Settings.Advanced.Audio.BufferingTime="Tempo de carregamento do áudio"
86
Basic.Settings.Advanced.Video.ColorFormat="Formato de cor"
87
88
Basic.Settings.Advanced.StreamDelay.Duration="Duração (segundos)"
89
Basic.Settings.Advanced.StreamDelay.Preserve="Preservar o ponto de corte (aumentar atraso) quando reconectar"
90
Basic.Settings.Advanced.StreamDelay.MemoryUsage="Utilização estimada de memória: %1 MB"
91
+Basic.Settings.Advanced.Network="Rede"
92
+Basic.Settings.Advanced.Network.BindToIP="Ligar pelo IP"
93
94
Basic.AdvAudio="Propriedades avançadas de áudio"
95
Basic.AdvAudio.Name="Nome"
96
97
Basic.Hotkeys.StopRecording="Parar gravação"
98
Basic.Hotkeys.SelectScene="Mudar para cena"
99
100
+Basic.SystemTray.Show="Mostrar"
101
+Basic.SystemTray.Hide="Ocultar"
102
103
+Basic.SystemTray.Message.Reconnecting="Desligado. A religar..."
104
105
Hotkeys.Insert="Insert"
106
Hotkeys.Delete="Delete"
107
obs-studio-0.16.2.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/ru-RU.ini
Changed
11
1
2
Top="Сверху"
3
Bottom="Снизу"
4
Reset="Сбросить"
5
+Hours="Часов"
6
+Minutes="Минут"
7
+Seconds="Секунд"
8
9
QuickTransitions.SwapScenes="Замена Просмотра/Вывода Сцены После Перехода"
10
QuickTransitions.SwapScenesTT="Замена просмотра и вывода сцены после перехода (если выходная оригинальная сцена до сих пор существует).\nЭто будет не отмена каких-либо изменений, что, возможно, было сделано в выходной оригинальной сцены."
11
obs-studio-0.16.2.tar.xz/UI/data/locale/sk-SK.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/sk-SK.ini
Changed
64
1
2
Close="Zatvoriť"
3
Save="Uložiť"
4
Discard="Zahodiť"
5
+Disable="Zakázané"
6
Yes="Áno"
7
No="Nie"
8
Add="Pridať"
9
10
MoveDown="Posunúť nižšie"
11
Settings="Nastavenia"
12
Display="Monitor"
13
+Name="Meno"
14
Exit="Ukončiť"
15
Mixer="Zmiešavač"
16
Browse="Prehľadávať"
17
18
New="Nový"
19
Duplicate="Duplikovať"
20
Enable="Povoliť"
21
+Left="Vľavo"
22
+Right="Vpravo"
23
+Reset="Vynulovať"
24
+Hours="Hodín"
25
+Minutes="Minúty"
26
+Seconds="Sekundy"
27
28
29
+Basic.TransitionDuration="Trvanie"
30
+Basic.TogglePreviewProgramMode="Štúdiový režim"
31
32
33
TitleBar.Profile="Profil"
34
35
NoNameEntered.Title="Prosím, zadajte platný názov"
36
NoNameEntered.Text="Nemôžete použiť prázdne názvy."
37
38
+ConfirmStart.Title="Spustiť stream?"
39
+ConfirmStart.Text="Naozaj chcete spustiť stream?"
40
41
+ConfirmStop.Title="Zastaviť stream?"
42
+ConfirmStop.Text="Naozaj chcete zastaviť stream?"
43
44
ConfirmExit.Title="Ukončiť OBS?"
45
ConfirmExit.Text="OBS je momentálne aktívny. Všetky prúdy údajov/záznamy sa ukončia. Naozaj pokračovať?"
46
47
Output.ConnectFail.BadPath="Neplatná cesta alebo URL. Prosím, skontrolujte, či sú vaše nastavenia správne."
48
Output.ConnectFail.ConnectFailed="Spojenie so serverom sa nepodarilo"
49
50
+Output.RecordFail.Title="Nepodarilo sa spustiť nahrávanie"
51
+Output.RecordNoSpace.Title="Nedostatok miesta na disku"
52
+Output.RecordError.Title="Chyba nahrávania"
53
54
Output.BadPath.Title="Nesprávna cesta k súboru"
55
56
57
58
Remux.SourceFile="OBS nahrávka"
59
Remux.TargetFile="Cieľový súbor"
60
+Remux.OBSRecording="OBS nahrávanie"
61
Remux.SelectRecording="Vybrať OBS nahrávku …"
62
Remux.SelectTarget="Vyberte cieľový súbor …"
63
Remux.FileExistsTitle="Cieľový súbor existuje"
64
obs-studio-0.16.2.tar.xz/UI/data/locale/sr-CS.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/sr-CS.ini
Changed
20
1
2
Right="Zdesna"
3
Top="Odozgo"
4
Bottom="Odozdo"
5
+Reset="Poništi"
6
+Hours="Sati"
7
+Minutes="Minuta"
8
+Seconds="Sekundi"
9
10
QuickTransitions.SwapScenes="Zameni scene pregleda/izlaza nakon prelaza"
11
QuickTransitions.SwapScenesTT="Zamenjuje scene pregleda i izlaza nakon prelaza (ako originalna scena izlaza još uvek postoji).\nOvo neće poništiti promene koje su načinjene nad originalnom scenom izlaza."
12
13
Basic.Settings.Output.Simple.Warn.MultipleQSV="Upozorenje: Ne možete koristi više odvojenih QSV enkodera kada emitujete i snimate u isto vreme. Ako želite da emitujete i snimate u isto vreme, molim promenite ili enkoder snimanja ili enkoder emitovanja."
14
Basic.Settings.Output.Simple.Encoder.Software="Softverski (x264)"
15
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Mašinski (QSV)"
16
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Mašinski (AMD)"
17
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Mašinski (NVENC)"
18
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Softverski (x264 niska upotreba procesora, povećava veličinu datoteke)"
19
Basic.Settings.Output.VideoBitrate="Protok videa"
20
obs-studio-0.16.2.tar.xz/UI/data/locale/sr-SP.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/sr-SP.ini
Changed
20
1
2
Right="Здесна"
3
Top="Одозго"
4
Bottom="Одоздо"
5
+Reset="Поништи"
6
+Hours="Сати"
7
+Minutes="Минута"
8
+Seconds="Секунди"
9
10
QuickTransitions.SwapScenes="Замени сцене прегледа/излаза након прелаза"
11
QuickTransitions.SwapScenesTT="Замењује сцене прегледа и излаза након прелаза (ако оригинална сцена још увек постоји).\nОво неће поништити промене које су начињене над оригиналном сценом излаза."
12
13
Basic.Settings.Output.Simple.Warn.MultipleQSV="Упозорење: Не можете користити више одвојених QSV енкодера када емитујете и снимате у исто време. Ако желите да емитујете и снимате у исто време, молим промените или енкодер снимања или енкодер емитовања."
14
Basic.Settings.Output.Simple.Encoder.Software="Софтверски (x264)"
15
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Машински (QSV)"
16
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Машински (AMD)"
17
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Машински (NVENC)"
18
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Софтверски (x264 ниска употреба процесора, повећава величину датотеке)"
19
Basic.Settings.Output.VideoBitrate="Проток видеа"
20
obs-studio-0.16.2.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/sv-SE.ini
Changed
17
1
2
Basic.Settings.Output.Simple.Warn.MultipleQSV="Varning: Du kan inte använda flera separata QSV-kodare när du streamar och spelar in samtidigt. Om du vill streama och spela in samtidigt, vänligen ändra inspelnings-kodek eller streaming-kodek."
3
Basic.Settings.Output.Simple.Encoder.Software="Programvara (x264)"
4
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hårdvara (QSV)"
5
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hårdvara (AMD)"
6
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hårdvara (NVENC)"
7
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Mjukvaru-kodek (x264-förinställning för lågt CPU-användning, ökar filstorleken)"
8
Basic.Settings.Output.VideoBitrate="Bithastighet för video"
9
10
Basic.AdvAudio.AudioTracks="Spår"
11
12
Basic.Settings.Hotkeys="Kortkommandon"
13
+Basic.Settings.Hotkeys.Pair="Tangentkombinationer som delas med \"%1\" fungerar som strömbrytare"
14
15
Basic.Hotkeys.StartStreaming="Börja strömma"
16
Basic.Hotkeys.StopStreaming="Sluta strömma"
17
obs-studio-0.16.2.tar.xz/UI/data/locale/uk-UA.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/uk-UA.ini
Changed
19
1
2
Top="Зверху"
3
Bottom="Знизу"
4
Reset="Скинути"
5
+Hours="Годин"
6
+Minutes="Хвилин"
7
+Seconds="Секунд"
8
9
QuickTransitions.SwapScenes="Поміняти місцями сцени Перегляд/Вивід після Відео-переходу"
10
QuickTransitions.SwapScenesTT="Міняє місцями сцени Перегляд та Вивід після закінчення Відео-переходу (якщо сцена Вивід ще існує).\nЗміни внесені до обох сцен залишаються."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="Попередження: Не можна використовувати кілька окремих енкодерів QSV одночасно для запису і трансляції. Якщо ви хочете транслювати і записувати одночасно, будь ласка, змінить або енкодер запису, або енкодер трансляції на інший."
13
Basic.Settings.Output.Simple.Encoder.Software="Програмний (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Апаратний (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Апаратний (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Апаратний (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Програмний (x264, шаблон з низьким завантаженням ЦП, збільшує файл)"
18
Basic.Settings.Output.VideoBitrate="Відео бітрейт"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/vi-VN.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/vi-VN.ini
Changed
263
1
2
Name="Tên"
3
Exit="Thoát"
4
Mixer="Bộ trộn"
5
-Browse="trình duyệt"
6
+Browse="Chọn đường dẫn"
7
Mono="Âm thanh đơn"
8
Stereo="Âm thanh nổi"
9
DroppedFrames="Khung rớt %1 (%2%)"
10
11
Enable="Kích hoạt"
12
DisableOSXVSync="Tắt OSX V-Sync"
13
ResetOSXVSyncOnExit="Đặt lại OSX V-Sync khi Thoát"
14
-Transition="Chuyển tiếp"
15
+HighResourceUsage="Encoder quá tải! Hãy xem xét giảm chất lượng video hoặc sử dụng 1 encoder nhanh hơn."
16
+Transition="Chuyển cảnh"
17
QuickTransitions="C. cảnh nhanh"
18
Left="Trái"
19
Right="Phải"
20
Top="Trên"
21
Bottom="Dưới"
22
+Reset="Thiết lập lại"
23
+Hours="Giờ"
24
+Minutes="Phút"
25
+Seconds="Giây"
26
27
QuickTransitions.SwapScenes="Hoán đổi cảnh Xem trước/Đầu ra sau khi Chuyển cảnh"
28
QuickTransitions.SwapScenesTT="Hoán đổi cảnh xem trước và cảnh đầu ra sau khi chuyển cảnh (nếu cảnh đầu ra gốc vẫn tồn tại).\nMọi thay đổi với cảnh đầu ra gốc sẽ không hoàn tác."
29
QuickTransitions.DuplicateScene="Tạo bản sao cảnh"
30
+QuickTransitions.HotkeyName="C. cảnh nhanh: %1"
31
32
+Basic.AddTransition="Thêm cấu hình chuyển cảnh"
33
+Basic.RemoveTransition="Xóa cấu hình chuyển cảnh"
34
+Basic.TransitionDuration="Thời gian"
35
+Basic.TogglePreviewProgramMode="Chế độ Studio"
36
37
+TransitionNameDlg.Text="Vui lòng nhập tên của cảnh"
38
+TransitionNameDlg.Title="Tên chuyển cảnh"
39
40
TitleBar.Profile="Cấu hình"
41
TitleBar.Scenes="Cảnh"
42
43
NoNameEntered.Title="Vui lòng nhập tên hợp lệ"
44
NoNameEntered.Text="Bạn không thể sử dụng tên có sản phẩm nào."
45
46
+ConfirmStart.Title="Bắt đầu Stream?"
47
+ConfirmStart.Text="Bạn có chắc muốn bắt đầu stream?"
48
49
+ConfirmStop.Title="Ngừng Stream?"
50
+ConfirmStop.Text="Bạn có chắc muốn dừng stream?"
51
52
ConfirmExit.Title="Thoát OBS?"
53
-ConfirmExit.Text="OBS là hiện đang hoạt động. Tất cả dòng/bản ghi sẽ được đóng cửa. Bạn có chắc bạn muốn thoát khỏi không?"
54
+ConfirmExit.Text="OBS hiện đang hoạt động. Tất cả các stream/quay video sẽ bị tắt. Bạn có chắc muốn thoát không?"
55
56
ConfirmRemove.Title="Xác nhận loại bỏ"
57
ConfirmRemove.Text="Bạn có chắc bạn muốn loại bỏ '$1' không?"
58
+ConfirmRemove.TextMultiple="Bạn có chắc bạn muốn xóa %1 nội dung không?"
59
60
Output.ConnectFail.Title="Không thể kết nối"
61
Output.ConnectFail.BadPath="URL không hợp lệ của đường dẫn hoặc kết nối. Xin vui lòng kiểm tra cài đặt của bạn để xác nhận rằng họ là hợp lệ."
62
Output.ConnectFail.ConnectFailed="Không thể kết nối tới hệ phục vụ"
63
-Output.ConnectFail.Error="Lỗi bất ngờ xảy ra khi thử kết nối tới hệ phục vụ. Biết thêm thông tin trong các tập tin log."
64
+Output.ConnectFail.InvalidStream="Không thể truy cập kênh chỉ định hoặc khóa stream, Vui lòng kiểm tra khóa stream của bạn. Nếu nó đúng, có thể có một vấn đề về kết nối với máy chủ."
65
+Output.ConnectFail.Error="1 lỗi bất ngờ xảy ra khi thử kết nối tới máy chủ. Thông tin thêm nằm trong log file."
66
Output.ConnectFail.Disconnected="Ngắt kết nối từ máy chủ."
67
68
Output.RecordFail.Title="Không thể bắt đầu ghi âm"
69
70
Remux.SourceFile="Ghi âm OBS"
71
Remux.TargetFile="Tệp đích"
72
Remux.Remux="Remux"
73
+Remux.OBSRecording="Ghi OBS"
74
Remux.FinishedTitle="Remuxing đã hoàn thành"
75
Remux.Finished="Ghi remuxed"
76
Remux.FinishedError="Ghi âm remuxed, nhưng các tập tin có thể không đầy đủ"
77
78
79
Basic.Main.PreviewConextMenu.Enable="Bật xem trước"
80
81
-
82
+ScaleFiltering="Scale Filtering"
83
+ScaleFiltering.Point="Point"
84
+ScaleFiltering.Bilinear="Bilinear"
85
+ScaleFiltering.Bicubic="Bicubic"
86
+ScaleFiltering.Lanczos="Lanczos"
87
+
88
+Deinterlacing="Deinterlacing"
89
+Deinterlacing.Discard="Discard"
90
+Deinterlacing.Retro="Retro"
91
+Deinterlacing.Blend="Blend"
92
+Deinterlacing.Blend2x="Blend 2x"
93
+Deinterlacing.Linear="Linear"
94
+Deinterlacing.Linear2x="Linear 2x"
95
+Deinterlacing.Yadif="Yadif"
96
+Deinterlacing.Yadif2x="Yadif 2x"
97
98
Basic.Main.AddSceneDlg.Title="Thêm cảnh"
99
Basic.Main.AddSceneDlg.Text="Vui lòng nhập tên của cảnh"
100
101
Basic.PropertiesWindow.Confirm="Có được lưu thay đổi. Bạn có muốn giữ họ?"
102
Basic.PropertiesWindow.NoProperties="Không có tài sản có sẵn"
103
Basic.PropertiesWindow.AddFiles="Thêm tập tin"
104
+Basic.PropertiesWindow.AddDir="Thêm thư mục"
105
Basic.PropertiesWindow.AddURL="Thêm đường dẫn/URL"
106
+Basic.PropertiesWindow.AddEditableListDir="Thêm thư mục vào '%1'"
107
Basic.PropertiesWindow.AddEditableListFiles="Thêm các tệp vào '%1'"
108
Basic.PropertiesWindow.AddEditableListEntry="Thêm mục nhập vào '%1'"
109
Basic.PropertiesWindow.EditEditableListEntry="Chỉnh sửa mục nhập từ '%1'"
110
111
Basic.TransformWindow.BoundsType="Các giáp ranh hộp loại"
112
Basic.TransformWindow.BoundsAlignment="Liên kết trong các giáp ranh hộp"
113
Basic.TransformWindow.Bounds="Các giáp ranh hộp kích thước"
114
+Basic.TransformWindow.Crop="Cắt"
115
116
Basic.TransformWindow.Alignment.TopLeft="Góc trên trái"
117
Basic.TransformWindow.Alignment.TopCenter="Đỉnh Trung tâm"
118
119
Basic.Main.StartRecording="Bắt đầu ghi âm"
120
Basic.Main.StartStreaming="Bắt đầu Streaming"
121
Basic.Main.StopRecording="Dừng ghi âm"
122
+Basic.Main.StoppingRecording="Dừng ghi video..."
123
Basic.Main.StopStreaming="Ngừng Streaming"
124
+Basic.Main.StoppingStreaming="Dừng stream..."
125
Basic.Main.ForceStopStreaming="Ngừng Streaming (huỷ chậm trễ)"
126
127
Basic.MainMenu.File="&Tập tin"
128
129
Basic.MainMenu.File.Settings="&Cài đặt"
130
Basic.MainMenu.File.ShowSettingsFolder="Hiển thị cài đặt thư mục"
131
Basic.MainMenu.File.ShowProfileFolder="Hiển thị thư mục hồ sơ"
132
+Basic.MainMenu.AlwaysOnTop="&Luôn trên đầu trang"
133
Basic.MainMenu.File.Exit="&Thoát"
134
135
Basic.MainMenu.Edit="& Chỉnh sửa"
136
137
Basic.MainMenu.Edit.Redo="& Làm lại"
138
Basic.MainMenu.Edit.UndoAction="& Hoàn tác $1"
139
Basic.MainMenu.Edit.RedoAction="& Làm lại $1"
140
+Basic.MainMenu.Edit.LockPreview="&Khóa xem trước"
141
Basic.MainMenu.Edit.Transform="Biến đổi"
142
Basic.MainMenu.Edit.Transform.EditTransform="& Chỉnh sửa biến đổi..."
143
Basic.MainMenu.Edit.Transform.ResetTransform="& Đặt lại biến đổi"
144
145
Basic.MainMenu.Edit.Order.MoveToBottom="Chuyển đến dưới cùng"
146
Basic.MainMenu.Edit.AdvAudio="Thuộc tính âm thanh nâng cao"
147
148
+Basic.MainMenu.View="&Hiển thị"
149
+Basic.MainMenu.View.Toolbars="&Thanh công cụ"
150
+Basic.MainMenu.View.Toolbars.Listboxes="&Listboxes"
151
+Basic.MainMenu.View.StatusBar="&Thanh trạng thái"
152
153
Basic.MainMenu.SceneCollection="& Cảnh bộ sưu tập"
154
Basic.MainMenu.Profile="& Hồ sơ"
155
156
+Basic.MainMenu.Tools="&Công cụ"
157
158
Basic.MainMenu.Help="&Trợ giúp"
159
Basic.MainMenu.Help.Website="Ghé thăm Website"
160
161
Basic.Settings.General="Chung"
162
Basic.Settings.General.Theme="Theme"
163
Basic.Settings.General.Language="Ngôn ngữ"
164
+Basic.Settings.General.HideProjectorCursor="Ẩn con trỏ chuột trên màn chiếu"
165
+Basic.Settings.General.ProjectorAlwaysOnTop="Làm cho màn chiếu luôn luôn trên đầu"
166
+Basic.Settings.General.SysTrayEnabled="Bật khay biểu tượng hệ thống"
167
168
Basic.Settings.Stream="Stream"
169
Basic.Settings.Stream.StreamType="Kiểu Stream"
170
171
Basic.Settings.Output.Simple.Warn.Lossless.Msg="Bạn có chắc bạn muốn sử dụng lossless chất lượng?"
172
Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless chất lượng cảnh báo!"
173
Basic.Settings.Output.Simple.Encoder.Software="Phần mềm (x 264)"
174
+Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Phần cứng (QSV)"
175
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Phần cứng (AMD)"
176
+Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Phần cứng (NVENC)"
177
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Phần mềm (x 264 sử dụng CPU thấp cài sẵn, tăng kích thước)"
178
Basic.Settings.Output.VideoBitrate="Video Bitrate"
179
Basic.Settings.Output.AudioBitrate="Âm thanh Bitrate"
180
181
Basic.Settings.Output.Adv.Recording.Type.Standard="Chuản"
182
Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Tùy chỉnh đầu ra (FFmpeg)"
183
Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Sử dụng dòng mã hóa)"
184
+Basic.Settings.Output.Adv.Recording.Filename="Định dạng tệp tin"
185
+Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Ghi đè nếu tập tin tồn tại"
186
Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg ra loại"
187
Basic.Settings.Output.Adv.FFmpeg.Type.URL="Sản lượng để URL"
188
Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Đầu ra vào tập tin"
189
190
Basic.Settings.Audio.SampleRate="Tỷ lệ mẫu"
191
Basic.Settings.Audio.Channels="Kênh Tivi"
192
Basic.Settings.Audio.DesktopDevice="Thiết bị âm thanh máy tính"
193
-Basic.Settings.Audio.DesktopDevice2="Thiết bị âm thanh máy tính"
194
-Basic.Settings.Audio.AuxDevice="Mic/liên minh thiết bị âm thanh"
195
-Basic.Settings.Audio.AuxDevice2="Mic/liên minh thiết bị âm thanh 2"
196
-Basic.Settings.Audio.AuxDevice3="Mic/liên minh thiết bị âm thanh 3"
197
+Basic.Settings.Audio.DesktopDevice2="Thiết bị âm thanh máy tính 2"
198
+Basic.Settings.Audio.AuxDevice="Thiết bị âm thanh mic/phụ trợ"
199
+Basic.Settings.Audio.AuxDevice2="Thiết bị âm thanh mic/phụ trợ 2"
200
+Basic.Settings.Audio.AuxDevice3="Thiết bị âm thanh mic/phụ trợ 3"
201
Basic.Settings.Audio.EnablePushToMute="Sử đẩy để tắt tiếng"
202
Basic.Settings.Audio.PushToMuteDelay="Sự chậm trễ đẩy để tắt tiếng"
203
Basic.Settings.Audio.EnablePushToTalk="Sử Push-to-talk"
204
-Basic.Settings.Audio.PushToTalkDelay="Push-to-talk chậm trễ"
205
+Basic.Settings.Audio.PushToTalkDelay="Bấm để nói trễ"
206
+Basic.Settings.Audio.UnknownAudioDevice="[Thiết bị không được kết nối hoặc không sẵn dùng]"
207
208
Basic.Settings.Advanced="Nâng cao"
209
-Basic.Settings.Advanced.FormatWarning="Cảnh báo: Định dạng màu sắc khác hơn so với NV12 chủ yếu dành cho ghi âm, và không được khuyến cáo khi streaming. Trực tuyến có thể phải tăng sử dụng CPU do chuyển đổi định dạng màu sắc."
210
+Basic.Settings.Advanced.General.ProcessPriority="Chương trình ưu tiên"
211
+Basic.Settings.Advanced.General.ProcessPriority.High="Cao"
212
+Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Trên bình thường"
213
+Basic.Settings.Advanced.General.ProcessPriority.Normal="Thường"
214
+Basic.Settings.Advanced.General.ProcessPriority.Idle="Rảnh"
215
+Basic.Settings.Advanced.FormatWarning="Cảnh báo: Định dạng màu sắc khác với NV12 chủ yếu dành cho ghi âm và không được khuyến cáo khi streaming. Stream có thể làm tăng sử dụng CPU do phải chuyển đổi định dạng màu sắc."
216
Basic.Settings.Advanced.Audio.BufferingTime="Âm thanh thời gian đệm"
217
Basic.Settings.Advanced.Video.ColorFormat="Định dạng màu sắc"
218
Basic.Settings.Advanced.Video.ColorSpace="Không gian màu YUV"
219
Basic.Settings.Advanced.Video.ColorRange="Phạm vi màu YUV"
220
Basic.Settings.Advanced.Video.ColorRange.Partial="Một phần"
221
Basic.Settings.Advanced.Video.ColorRange.Full="Đầy đủ"
222
-Basic.Settings.Advanced.StreamDelay="Sự chậm trễ Stream"
223
-Basic.Settings.Advanced.StreamDelay.Duration="Thời gian (phút)"
224
-Basic.Settings.Advanced.StreamDelay.Preserve="Bảo tồn cutoff điểm (tăng chậm trễ) khi kết nối lại"
225
-Basic.Settings.Advanced.StreamDelay.MemoryUsage="Sử dụng ước tính bộ nhớ: %1 MB"
226
+Basic.Settings.Advanced.StreamDelay="Stream trễ"
227
+Basic.Settings.Advanced.StreamDelay.Duration="Thời gian (giây)"
228
+Basic.Settings.Advanced.StreamDelay.Preserve="Giữ điểm cắt (tăng chậm trễ) khi kết nối lại"
229
+Basic.Settings.Advanced.StreamDelay.MemoryUsage="Ước tính bộ nhớ sử dụng: %1 MB"
230
+Basic.Settings.Advanced.Network="Mạng"
231
+Basic.Settings.Advanced.Network.BindToIP="Liên kết với IP"
232
233
Basic.AdvAudio="Thuộc tính âm thanh nâng cao"
234
Basic.AdvAudio.Name="Tên"
235
236
Basic.Hotkeys.StopRecording="Dừng ghi âm"
237
Basic.Hotkeys.SelectScene="Chuyển cảnh"
238
239
+Basic.SystemTray.Show="Hiện"
240
+Basic.SystemTray.Hide="Ẩn"
241
242
+Basic.SystemTray.Message.Reconnecting="Ngắt kết nối. Đang kết nối lại..."
243
244
Hotkeys.Insert="Chèn"
245
Hotkeys.Delete="Xoá"
246
247
248
Mute="Tắt Tiếng"
249
Unmute="Bật tiếng"
250
-Push-to-mute="Đẩy để tắt tiếng"
251
-Push-to-talk="Push-to-talk"
252
+Push-to-mute="Bấm để tắt tiếng"
253
+Push-to-talk="Bấm để nói"
254
255
SceneItemShow="Hiển thị '%1'"
256
SceneItemHide="Ẩn '%1'"
257
258
-OutputWarnings.NoTracksSelected="Bạn phải chọn ít nhất một ca khúc"
259
-OutputWarnings.MultiTrackRecording="Chú ý: Một số định dạng (chẳng hạn như FLV) không hỗ trợ nhiều bài hát cho một ghi âm"
260
+OutputWarnings.NoTracksSelected="Bạn phải chọn ít nhất một track"
261
+OutputWarnings.MultiTrackRecording="Chú ý: Một số định dạng (chẳng hạn như FLV) không hỗ trợ nhiều track cho mỗi video"
262
263
obs-studio-0.16.2.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/zh-CN.ini
Changed
19
1
2
Top="上"
3
Bottom="下"
4
Reset="重置"
5
+Hours="小时"
6
+Minutes="分钟"
7
+Seconds="秒"
8
9
QuickTransitions.SwapScenes="在过渡动画后交换预览/输出场景"
10
QuickTransitions.SwapScenesTT="在过渡后,交换预览和输出场景(如果输出的原始场景仍然存在). \n 这个不会撤消任何可能对输出的原始场景的更改."
11
12
Basic.Settings.Output.Simple.Warn.MultipleQSV="警告: 当同时推流和录像时, 你不能使用多个单独的 QSV 编码器. 如果你想要同时推流和录像, 请更改录像的编码器或者推流的编码器."
13
Basic.Settings.Output.Simple.Encoder.Software="软件 (x264)"
14
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="硬件 (QSV)"
15
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="硬件 (AMD)"
16
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="硬件 (NVENC)"
17
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="软件 (x 264 低 CPU 使用率预设,增加文件大小)"
18
Basic.Settings.Output.VideoBitrate="视频比特率"
19
obs-studio-0.16.2.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-0.16.4.tar.xz/UI/data/locale/zh-TW.ini
Changed
9
1
2
Basic.Settings.Output.Simple.Warn.MultipleQSV="警告︰同時串流和錄影時,不能使用多個不同的 QSV 編碼器。如果你想要在同一時間串流和錄影,請更改錄影編碼器或串流編碼器。"
3
Basic.Settings.Output.Simple.Encoder.Software="軟體編碼( x264 )"
4
Basic.Settings.Output.Simple.Encoder.Hardware.QSV="硬體編碼 (QSV)"
5
+Basic.Settings.Output.Simple.Encoder.Hardware.AMD="硬體 (AMD)"
6
Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="硬體編碼 (NVENC)"
7
Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="軟體編碼( x264 預設低 CPU 使用率,將增加檔案容量 )"
8
Basic.Settings.Output.VideoBitrate="影像位元率(kbit/s)"
9
obs-studio-0.16.2.tar.xz/UI/forms/OBSBasicTransform.ui -> obs-studio-0.16.4.tar.xz/UI/forms/OBSBasicTransform.ui
Changed
53
1
2
</item>
3
<item row="9" column="1">
4
<layout class="QGridLayout" name="gridLayout">
5
+ <item row="0" column="1">
6
+ <widget class="QSpinBox" name="cropLeft">
7
+ <property name="sizePolicy">
8
+ <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
9
+ <horstretch>0</horstretch>
10
+ <verstretch>0</verstretch>
11
+ </sizepolicy>
12
+ </property>
13
+ <property name="minimumSize">
14
+ <size>
15
+ <width>70</width>
16
+ <height>0</height>
17
+ </size>
18
+ </property>
19
+ <property name="maximum">
20
+ <number>100000</number>
21
+ </property>
22
+ </widget>
23
+ </item>
24
<item row="0" column="3">
25
<widget class="QSpinBox" name="cropRight">
26
<property name="sizePolicy">
27
28
</property>
29
</widget>
30
</item>
31
- <item row="0" column="1">
32
- <widget class="QSpinBox" name="cropLeft">
33
- <property name="sizePolicy">
34
- <sizepolicy hsizetype="Maximum" vsizetype="Fixed">
35
- <horstretch>0</horstretch>
36
- <verstretch>0</verstretch>
37
- </sizepolicy>
38
- </property>
39
- <property name="minimumSize">
40
- <size>
41
- <width>70</width>
42
- <height>0</height>
43
- </size>
44
- </property>
45
- <property name="maximum">
46
- <number>100000</number>
47
- </property>
48
- </widget>
49
- </item>
50
<item row="0" column="4">
51
<spacer name="horizontalSpacer">
52
<property name="orientation">
53
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/CMakeLists.txt
Changed
6
1
2
-if(WIN32 OR APPLE)
3
- add_subdirectory(frontend-tools)
4
-endif()
5
+add_subdirectory(frontend-tools)
6
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/CMakeLists.txt
Changed
35
1
2
include_directories(${COCOA})
3
endif()
4
5
+if(WIN32 OR APPLE)
6
+ set(frontend-tools_HEADERS
7
+ auto-scene-switcher.hpp
8
+ )
9
+ set(frontend-tools_SOURCES
10
+ auto-scene-switcher.cpp
11
+ )
12
+ set(frontend-tools_UI
13
+ forms/auto-scene-switcher.ui
14
+ )
15
+endif()
16
+
17
set(frontend-tools_HEADERS
18
- auto-scene-switcher.hpp
19
+ ${frontend-tools_HEADERS}
20
+ output-timer.hpp
21
)
22
set(frontend-tools_SOURCES
23
+ ${frontend-tools_SOURCES}
24
frontend-tools.c
25
- auto-scene-switcher.cpp
26
+ output-timer.cpp
27
)
28
set(frontend-tools_UI
29
- forms/auto-scene-switcher.ui
30
+ ${frontend-tools_UI}
31
+ forms/output-timer.ui
32
)
33
34
if(WIN32)
35
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/auto-scene-switcher.cpp -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/auto-scene-switcher.cpp
Changed
36
1
2
#include <obs.hpp>
3
#include <util/util.hpp>
4
#include <QMainWindow>
5
+#include <QMessageBox>
6
#include <QAction>
7
#include "auto-scene-switcher.hpp"
8
9
10
int idx = FindByData(windowName);
11
12
if (idx == -1) {
13
- QListWidgetItem *item = new QListWidgetItem(text,
14
- ui->switches);
15
- item->setData(Qt::UserRole, v);
16
-
17
- lock_guard<mutex> lock(switcher->m);
18
- switcher->switches.emplace_back(source,
19
- windowName.toUtf8().constData());
20
+ try {
21
+ lock_guard<mutex> lock(switcher->m);
22
+ switcher->switches.emplace_back(source,
23
+ windowName.toUtf8().constData());
24
+
25
+ QListWidgetItem *item = new QListWidgetItem(text,
26
+ ui->switches);
27
+ item->setData(Qt::UserRole, v);
28
+ } catch (const regex_error &) {
29
+ QMessageBox::warning(this,
30
+ obs_module_text("InvalidRegex.Title"),
31
+ obs_module_text("InvalidRegex.Text"));
32
+ }
33
} else {
34
QListWidgetItem *item = ui->switches->item(idx);
35
item->setText(text);
36
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ca-ES.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ca-ES.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Canvia a:"
3
SceneSwitcher.CheckInterval="Comprova el títol de la finestra activa cada:"
4
SceneSwitcher.ActiveOrNotActive="El canviador de escena està:"
5
+InvalidRegex.Title="Expressió regular no vàlida"
6
+InvalidRegex.Text="La expressió regular que heu introduït no es vàlida."
7
Active="Actiu"
8
Inactive="Inactiu"
9
Start="Inicia"
10
Stop="Atura"
11
12
+OutputTimer="Temporitzador de sortida"
13
+OutputTimer.Stream="Atura la transmissió després de:"
14
+OutputTimer.Record="Atura la gravació després de:"
15
+OutputTimer.Stream.StoppingIn="La transmissió s'aturarà en:"
16
+OutputTimer.Record.StoppingIn="La gravació s'aturarà en:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/cs-CZ.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/cs-CZ.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Přepnout na:"
3
SceneSwitcher.CheckInterval="Kontrolovat titulek aktivního okna každých:"
4
SceneSwitcher.ActiveOrNotActive="Přepínač scén je:"
5
+InvalidRegex.Title="Chybný regulární výraz"
6
+InvalidRegex.Text="Zadaný regulární výraz je chybný."
7
Active="Aktivní"
8
Inactive="Neaktivní"
9
Start="Spustit"
10
Stop="Zastavit"
11
12
+OutputTimer="Časovač"
13
+OutputTimer.Stream="Přestat vysílat po:"
14
+OutputTimer.Record="Přestat nahrávat po:"
15
+OutputTimer.Stream.StoppingIn="Vysílání se zastaví za:"
16
+OutputTimer.Record.StoppingIn="Nahrávání se zastaví za:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/da-DK.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/da-DK.ini
Changed
6
1
2
Start="Start"
3
Stop="Stop"
4
5
+
6
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/de-DE.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Wechseln zu:"
3
SceneSwitcher.CheckInterval="Titel des aktiven Fensters überprüfen alle:"
4
SceneSwitcher.ActiveOrNotActive="Szenenwechsler ist:"
5
+InvalidRegex.Title="Ungültiger regulärer Ausdruck"
6
+InvalidRegex.Text="Der reguläre Ausdruck, den Sie eingegeben haben, ist ungültig."
7
Active="Aktiv"
8
Inactive="Inaktiv"
9
Start="Start"
10
Stop="Stop"
11
12
+OutputTimer="Ausgabetimer"
13
+OutputTimer.Stream="Stoppe Stream nach:"
14
+OutputTimer.Record="Stoppe Aufnahme nach:"
15
+OutputTimer.Stream.StoppingIn="Stream stoppt in:"
16
+OutputTimer.Record.StoppingIn="Aufnahme stoppt in:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/en-US.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/en-US.ini
Changed
17
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Switch to:"
3
SceneSwitcher.CheckInterval="Check active window title every:"
4
SceneSwitcher.ActiveOrNotActive="Scene Switcher is:"
5
+InvalidRegex.Title="Invalid Regular Expression"
6
+InvalidRegex.Text="The regular expression that you entered is invalid."
7
Active="Active"
8
Inactive="Inactive"
9
Start="Start"
10
Stop="Stop"
11
+
12
+OutputTimer="Output Timer"
13
+OutputTimer.Stream="Stop streaming after:"
14
+OutputTimer.Record="Stop recording after:"
15
+OutputTimer.Stream.StoppingIn="Streaming stopping in:"
16
+OutputTimer.Record.StoppingIn="Recording stopping in:"
17
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/es-ES.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Cambiar a:"
3
SceneSwitcher.CheckInterval="Comprobar el título de la ventana activa cada:"
4
SceneSwitcher.ActiveOrNotActive="El cambiador de escena está:"
5
+InvalidRegex.Title="Expresión regular no válida"
6
+InvalidRegex.Text="La expresión regular que ha introducido no es válida."
7
Active="Activo"
8
Inactive="Inactivo"
9
Start="Iniciar"
10
Stop="Detener"
11
12
+OutputTimer="Temporizador de salida"
13
+OutputTimer.Stream="Detener la transmisión después de:"
14
+OutputTimer.Record="Detener la grabación después de:"
15
+OutputTimer.Stream.StoppingIn="Finalizando transmisión en:"
16
+OutputTimer.Record.StoppingIn="Finalizando grabación en:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/eu-ES.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Aldatu hona:"
3
SceneSwitcher.CheckInterval="Leiho aktiboaren titulua egiaztatzeko maiztasuna:"
4
SceneSwitcher.ActiveOrNotActive="Eszena aldatzailea dago:"
5
+InvalidRegex.Title="Adierazpen erregular baliogabea"
6
+InvalidRegex.Text="Sartu duzun adierazpen erregularra baliogabea da."
7
Active="Aktiboa"
8
Inactive="Inaktiboa"
9
Start="Hasi"
10
Stop="Gelditu"
11
12
+OutputTimer="Irteera tenporizadorea"
13
+OutputTimer.Stream="Gelditu transmisioa hau pasata:"
14
+OutputTimer.Record="Gelditu grabazioa hau pasata:"
15
+OutputTimer.Stream.StoppingIn="Transmisioa geldituko da: hau barru:"
16
+OutputTimer.Record.StoppingIn="Grabazioa geldituko da hau barru:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fi-FI.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fi-FI.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Vaihda:"
3
SceneSwitcher.CheckInterval="Tarkista aktiivisen ikkunan otsikko:"
4
SceneSwitcher.ActiveOrNotActive="Skenen vaihtaja:"
5
+InvalidRegex.Title="Invalid Regular Expression"
6
+InvalidRegex.Text="The regular expression that you entered is invalid."
7
Active="Aktiivinen"
8
Inactive="Ei käytössä"
9
Start="Käynnistä"
10
Stop="Pysäytä"
11
12
+OutputTimer="Ulostulo-ajastin"
13
+OutputTimer.Stream="Pysäyttää lähetyksen:"
14
+OutputTimer.Record="Pysäyttää tallennuksen:"
15
+OutputTimer.Stream.StoppingIn="Lähetys pysäytetään:"
16
+OutputTimer.Record.StoppingIn="Tallennus pysäytetään:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fr-FR.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fr-FR.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Basculer vers :"
3
SceneSwitcher.CheckInterval="Détecter le titre de la fenêtre active toutes les :"
4
SceneSwitcher.ActiveOrNotActive="Etat du sélecteur automatique :"
5
+InvalidRegex.Title="Expression invalide"
6
+InvalidRegex.Text="L'expression régulière saisie est invalide."
7
Active="Actif"
8
Inactive="Inactif"
9
Start="Démarrer"
10
Stop="Arrêter"
11
12
+OutputTimer="Minuterie des sorties"
13
+OutputTimer.Stream="Arrêter le streaming dans :"
14
+OutputTimer.Record="Arrêter l'enregistrement dans :"
15
+OutputTimer.Stream.StoppingIn="Arrêt du streaming dans :"
16
+OutputTimer.Record.StoppingIn="Arrêt de l'enregistrement dans :"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hr-HR.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hr-HR.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Promeni na:"
3
SceneSwitcher.CheckInterval="Proveravaj naziv aktivnog prozora svakih:"
4
SceneSwitcher.ActiveOrNotActive="Menjač scena je:"
5
+InvalidRegex.Title="Neispravan regularni izraz"
6
+InvalidRegex.Text="Regularni izraz koji ste uneli nije ispravan."
7
Active="Aktivan"
8
Inactive="Neaktivan"
9
Start="Pokreni"
10
Stop="Zaustavi"
11
12
+OutputTimer="Tempomat snimanja i emitovanja"
13
+OutputTimer.Stream="Zaustavi emitovanje nakon:"
14
+OutputTimer.Record="Zaustavi snimanje nakon:"
15
+OutputTimer.Stream.StoppingIn="Prekidanje emitovanja za:"
16
+OutputTimer.Record.StoppingIn="Prekidanje snimanja za:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hu-HU.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/hu-HU.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Váltson:"
3
SceneSwitcher.CheckInterval="Aktív ablak ellenőrzése ennyi időközönként:"
4
SceneSwitcher.ActiveOrNotActive="Jelenet váltó:"
5
+InvalidRegex.Title="Érvénytelen kifejezés"
6
+InvalidRegex.Text="A megadott kifejezés érvénytelen."
7
Active="Aktív"
8
Inactive="Inaktiv"
9
Start="Start"
10
Stop="Stop"
11
12
+OutputTimer="Kimeneti időzítő"
13
+OutputTimer.Stream="Stream leállítása:"
14
+OutputTimer.Record="Felvétel leállítása:"
15
+OutputTimer.Stream.StoppingIn="A stream leáll:"
16
+OutputTimer.Record.StoppingIn="Felvétel leáll:"
17
+
18
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/it-IT.ini
Added
21
1
2
+SceneSwitcher="Cambia scena automatico"
3
+SceneSwitcher.OnNoMatch="Quando nessuna scena coincide a:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Non passare"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Passa a:"
6
+SceneSwitcher.CheckInterval="Controlla il titolo della finestra attiva ogni:"
7
+SceneSwitcher.ActiveOrNotActive="Lo scene switcher è:"
8
+InvalidRegex.Title="Espressione regolare non valida"
9
+InvalidRegex.Text="L'espressione regolare che hai inserito non è valido."
10
+Active="Attivo"
11
+Inactive="Inattivo"
12
+Start="Inizio"
13
+Stop="Stop"
14
+
15
+OutputTimer="Timer Output"
16
+OutputTimer.Stream="Termina diretta dopo:"
17
+OutputTimer.Record="Termina registrazione dopo:"
18
+OutputTimer.Stream.StoppingIn="La diretta terminerà in:"
19
+OutputTimer.Record.StoppingIn="La registrazione terminerà in:"
20
+
21
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ja-JP.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ja-JP.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="切り替える:"
3
SceneSwitcher.CheckInterval="アクティブウィンドウタイトルを確認する間隔:"
4
SceneSwitcher.ActiveOrNotActive="シーンスイッチャーは:"
5
+InvalidRegex.Title="無効な正規表現"
6
+InvalidRegex.Text="入力した正規表現は有効ではありません。"
7
Active="アクティブ"
8
Inactive="非アクティブ"
9
Start="開始"
10
Stop="停止"
11
12
+OutputTimer="出力タイマー"
13
+OutputTimer.Stream="配信停止の時間設定:"
14
+OutputTimer.Record="録画停止の時間設定:"
15
+OutputTimer.Stream.StoppingIn="配信停止まで:"
16
+OutputTimer.Record.StoppingIn="録画停止まで:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ko-KR.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ko-KR.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="여기로 전환:"
3
SceneSwitcher.CheckInterval="활성화된 윈도우 제목을 확인:"
4
SceneSwitcher.ActiveOrNotActive="장면 전환기:"
5
+InvalidRegex.Title="유효하지 않은 정규 표현"
6
+InvalidRegex.Text="입력한 정규 표현이 유효하지 않습니다."
7
Active="활성화"
8
Inactive="비활성화"
9
Start="시작"
10
Stop="중단"
11
12
+OutputTimer="출력 시간 설정"
13
+OutputTimer.Stream="이 시간 이후 방송 중단:"
14
+OutputTimer.Record="이 시간 이후 녹화 중단:"
15
+OutputTimer.Stream.StoppingIn="방송 중지까지 남은 시간:"
16
+OutputTimer.Record.StoppingIn="녹화 중지까지 남은 시간:"
17
+
18
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ms-MY.ini
Added
12
1
2
+Active="Aktif"
3
+Inactive="Tidak Aktif"
4
+Start="Mula"
5
+Stop="Berhenti"
6
+
7
+OutputTimer.Stream="Berhenti 'streaming' selepas:"
8
+OutputTimer.Record="Berhenti merakam selepas:"
9
+OutputTimer.Stream.StoppingIn="'Streaming' dihentikan dalam:"
10
+OutputTimer.Record.StoppingIn="Rakaman dihentikan dalam:"
11
+
12
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini
Added
9
1
2
+SceneSwitcher.OnNoMatch.SwitchTo="Bytt til:"
3
+Active="Aktiv"
4
+Inactive="Inaktiv"
5
+Start="Start"
6
+Stop="Stopp"
7
+
8
+
9
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nl-NL.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nl-NL.ini
Changed
6
1
2
Start="Start"
3
Stop="Stop"
4
5
+
6
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pl-PL.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Przełącz na:"
3
SceneSwitcher.CheckInterval="Sprawdź tytuł aktywnego okna co:"
4
SceneSwitcher.ActiveOrNotActive="Przełączanie scen jest:"
5
+InvalidRegex.Title="Nieprawidłowe wyrażenie regularne"
6
+InvalidRegex.Text="Podane wyrażenie regularne jest nieprawidłowe."
7
Active="Aktywne"
8
Inactive="Nieaktywne"
9
Start="Start"
10
Stop="Stop"
11
12
+OutputTimer="Wyłącznik czasowy"
13
+OutputTimer.Stream="Zatrzymaj stream po:"
14
+OutputTimer.Record="Zatrzymaj nagrywanie po:"
15
+OutputTimer.Stream.StoppingIn="Zatrzymanie streamu za:"
16
+OutputTimer.Record.StoppingIn="Zatrzymanie nagrywania za:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-BR.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-BR.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Alternar para:"
3
SceneSwitcher.CheckInterval="Checar o título da janela ativa a cada:"
4
SceneSwitcher.ActiveOrNotActive="O alternador de cenas está:"
5
+InvalidRegex.Title="Expressão regular inválida"
6
+InvalidRegex.Text="A expressão regular que introduziu é inválida."
7
Active="Ligado"
8
Inactive="Desligado"
9
Start="Iniciar"
10
Stop="Parar"
11
12
+OutputTimer="Temporizador de saída"
13
+OutputTimer.Stream="Para a transmissão após:"
14
+OutputTimer.Record="Parar a gravação após:"
15
+OutputTimer.Stream.StoppingIn="A transmissão irá parar em:"
16
+OutputTimer.Record.StoppingIn="A gravação irá parar em:"
17
+
18
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/pt-PT.ini
Added
21
1
2
+SceneSwitcher="Troca automática de cenas"
3
+SceneSwitcher.OnNoMatch="Quando nenhuma janela corresponder:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Não trocar"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Trocar para:"
6
+SceneSwitcher.CheckInterval="Verificar o nome da janela ativa a cada:"
7
+SceneSwitcher.ActiveOrNotActive="A troca de cenas está:"
8
+InvalidRegex.Title="Expressão regular inválida"
9
+InvalidRegex.Text="A expressão regular que introduziu é inválida."
10
+Active="Ativa"
11
+Inactive="Inativa"
12
+Start="Iniciar"
13
+Stop="Parar"
14
+
15
+OutputTimer="Temporizador de saída"
16
+OutputTimer.Stream="Para a transmissão após:"
17
+OutputTimer.Record="Parar a gravação após:"
18
+OutputTimer.Stream.StoppingIn="A transmissão irá parar em:"
19
+OutputTimer.Record.StoppingIn="A gravação irá parar em:"
20
+
21
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Переключать на:"
3
SceneSwitcher.CheckInterval="Проверять имя активного окна каждые:"
4
SceneSwitcher.ActiveOrNotActive="Переключатель сцен:"
5
+InvalidRegex.Title="Недопустимое регулярное выражение"
6
+InvalidRegex.Text="Регулярное выражение, которое вы ввели, содержит ошибки."
7
Active="Активен"
8
Inactive="Неактивен"
9
Start="Запустить"
10
Stop="Остановить"
11
12
+OutputTimer="Таймер записи и стрима"
13
+OutputTimer.Stream="Завершить стрим через:"
14
+OutputTimer.Record="Завершить запись через:"
15
+OutputTimer.Stream.StoppingIn="Стрим будет завершён через:"
16
+OutputTimer.Record.StoppingIn="Запись будет завершена через:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sr-CS.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sr-CS.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Promeni na:"
3
SceneSwitcher.CheckInterval="Proveravaj naziv aktivnog prozora svakih:"
4
SceneSwitcher.ActiveOrNotActive="Menjač scena je:"
5
+InvalidRegex.Title="Neispravan regularni izraz"
6
+InvalidRegex.Text="Regularni izraz koji ste uneli nije ispravan."
7
Active="Aktivan"
8
Inactive="Neaktivan"
9
Start="Pokreni"
10
Stop="Zaustavi"
11
12
+OutputTimer="Tempomat snimanja i emitovanja"
13
+OutputTimer.Stream="Zaustavi emitovanje nakon:"
14
+OutputTimer.Record="Zaustavi snimanje nakon:"
15
+OutputTimer.Stream.StoppingIn="Prekidanje emitovanja za:"
16
+OutputTimer.Record.StoppingIn="Prekidanje snimanja za:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sr-SP.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sr-SP.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Промени на:"
3
SceneSwitcher.CheckInterval="Проверавај назив активног прозора сваких:"
4
SceneSwitcher.ActiveOrNotActive="Мењач сцена је:"
5
+InvalidRegex.Title="Неисправан регуларни израз"
6
+InvalidRegex.Text="Регуларни израз који сте унели није исправан."
7
Active="Активан"
8
Inactive="Неактиван"
9
Start="Покрени"
10
Stop="Заустави"
11
12
+OutputTimer="Темпомат снимања и емитовања"
13
+OutputTimer.Stream="Заустави емитовање након:"
14
+OutputTimer.Record="Заустави снимање након:"
15
+OutputTimer.Stream.StoppingIn="Прекидање емитовања за:"
16
+OutputTimer.Record.StoppingIn="Прекидање снимања за:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/sv-SE.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Byt till:"
3
SceneSwitcher.CheckInterval="Kontrollera aktiv fönstertitel varje:"
4
SceneSwitcher.ActiveOrNotActive="Scenbytaren är:"
5
+InvalidRegex.Title="Ogiltigt reguljärt uttryck"
6
+InvalidRegex.Text="Det reguljära uttrycket du angav är ogiltigt."
7
Active="Aktiv"
8
Inactive="Inaktiv"
9
Start="Starta"
10
Stop="Stoppa"
11
12
+OutputTimer="Utdatatimer"
13
+OutputTimer.Stream="Sluta streama efter:"
14
+OutputTimer.Record="Stoppa inspelningen efter:"
15
+OutputTimer.Stream.StoppingIn="Streamen stoppas om:"
16
+OutputTimer.Record.StoppingIn="Inspelningen stoppas om:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/uk-UA.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/uk-UA.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="Перейти до:"
3
SceneSwitcher.CheckInterval="Перевіряти заголовок активного вікна кожні:"
4
SceneSwitcher.ActiveOrNotActive="Автоматичний перехід між Сценами:"
5
+InvalidRegex.Title="Неприпустимий регулярний вираз"
6
+InvalidRegex.Text="Ви ввели неприпустимий регулярний вираз (шаблон)."
7
Active="Активний"
8
Inactive="Неактивний"
9
Start="Запустити"
10
Stop="Зупинити"
11
12
+OutputTimer="Таймер для Виводу"
13
+OutputTimer.Stream="Закінчити трансляцію за:"
14
+OutputTimer.Record="Зупинити запис за:"
15
+OutputTimer.Stream.StoppingIn="Трансляція припиниться за:"
16
+OutputTimer.Record.StoppingIn="Запис зупиниться за:"
17
+
18
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/vi-VN.ini
Added
18
1
2
+SceneSwitcher="Tự động chuyển cảnh"
3
+SceneSwitcher.OnNoMatch="Khi cửa sổ không khớp:"
4
+SceneSwitcher.OnNoMatch.DontSwitch="Không chuyển"
5
+SceneSwitcher.OnNoMatch.SwitchTo="Chuyển sang:"
6
+SceneSwitcher.CheckInterval="Kiểm tra tiêu đề cửa sổ mỗi:"
7
+SceneSwitcher.ActiveOrNotActive="Chuyển cảnh đang:"
8
+Active="Đang hoạt động"
9
+Inactive="Không hoạt động"
10
+Start="Bắt đầu"
11
+Stop="Dừng"
12
+
13
+OutputTimer.Stream="Dừng stream sau:"
14
+OutputTimer.Record="Dừng ghi video sau:"
15
+OutputTimer.Stream.StoppingIn="Stream sẽ dừng trong:"
16
+OutputTimer.Record.StoppingIn="Quay video sẽ dừng trong:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-CN.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="切换到:"
3
SceneSwitcher.CheckInterval="检查活动窗口的标题,每:"
4
SceneSwitcher.ActiveOrNotActive="场景切换器是:"
5
+InvalidRegex.Title="无效的正则表达式"
6
+InvalidRegex.Text="您输入的正则表达式是无效的。"
7
Active="已激活"
8
Inactive="未激活"
9
Start="开始"
10
Stop="停止"
11
12
+OutputTimer="输出计时器"
13
+OutputTimer.Stream="停止流处理后:"
14
+OutputTimer.Record="停止录制后:"
15
+OutputTimer.Stream.StoppingIn="串流停止在:"
16
+OutputTimer.Record.StoppingIn="录制停止在:"
17
+
18
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-TW.ini -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/zh-TW.ini
Changed
18
1
2
SceneSwitcher.OnNoMatch.SwitchTo="切換到︰"
3
SceneSwitcher.CheckInterval="檢查使用中視窗標題的頻率︰"
4
SceneSwitcher.ActiveOrNotActive="場景切換器︰"
5
+InvalidRegex.Title="無效的正規表達式"
6
+InvalidRegex.Text="您輸入的正則運算式不正確"
7
Active="啟動中"
8
Inactive="未啟動"
9
Start="開始"
10
Stop="停止"
11
12
+OutputTimer="輸出計時器"
13
+OutputTimer.Stream="在下面時間後停止串流:"
14
+OutputTimer.Record="在下面時間後停止錄影:"
15
+OutputTimer.Stream.StoppingIn="串流將在下面時間內停止"
16
+OutputTimer.Record.StoppingIn="錄影將在下面時間內停止"
17
+
18
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/forms/output-timer.ui
Added
196
1
2
+<?xml version="1.0" encoding="UTF-8"?>
3
+<ui version="4.0">
4
+ <class>OutputTimer</class>
5
+ <widget class="QDialog" name="OutputTimer">
6
+ <property name="geometry">
7
+ <rect>
8
+ <x>0</x>
9
+ <y>0</y>
10
+ <width>600</width>
11
+ <height>150</height>
12
+ </rect>
13
+ </property>
14
+ <property name="windowTitle">
15
+ <string>OutputTimer</string>
16
+ </property>
17
+ <layout class="QGridLayout" name="timerLayout">
18
+ <item row="0" column="1">
19
+ <widget class="QLabel" name="streamingLabel">
20
+ <property name="text">
21
+ <string>OutputTimer.Stream</string>
22
+ </property>
23
+ </widget>
24
+ </item>
25
+ <item row="0" column="2">
26
+ <widget class="QSpinBox" name="streamingTimerHours">
27
+ <property name="minimum">
28
+ <number>0</number>
29
+ </property>
30
+ <property name="maximum">
31
+ <number>24</number>
32
+ </property>
33
+ <property name="value">
34
+ <number>0</number>
35
+ </property>
36
+ </widget>
37
+ </item>
38
+ <item row="0" column="3">
39
+ <widget class="QLabel" name="hoursLabel">
40
+ <property name="text">
41
+ <string>Hours</string>
42
+ </property>
43
+ </widget>
44
+ </item>
45
+ <item row="0" column="4">
46
+ <widget class="QSpinBox" name="streamingTimerMinutes">
47
+ <property name="maximum">
48
+ <number>59</number>
49
+ </property>
50
+ <property name="value">
51
+ <number>0</number>
52
+ </property>
53
+ </widget>
54
+ </item>
55
+ <item row="0" column="5">
56
+ <widget class="QLabel" name="minutesLabel">
57
+ <property name="text">
58
+ <string>Minutes</string>
59
+ </property>
60
+ </widget>
61
+ </item>
62
+ <item row="0" column="6">
63
+ <widget class="QSpinBox" name="streamingTimerSeconds">
64
+ <property name="minimum">
65
+ <number>0</number>
66
+ </property>
67
+ <property name="maximum">
68
+ <number>59</number>
69
+ </property>
70
+ <property name="value">
71
+ <number>30</number>
72
+ </property>
73
+ </widget>
74
+ </item>
75
+ <item row="0" column="7">
76
+ <widget class="QLabel" name="secondsLabel">
77
+ <property name="text">
78
+ <string>Seconds</string>
79
+ </property>
80
+ </widget>
81
+ </item>
82
+ <item row="0" column="8">
83
+ <widget class="QPushButton" name="outputTimerStream">
84
+ <property name="text">
85
+ <string>Start</string>
86
+ </property>
87
+ </widget>
88
+ </item>
89
+ <item row="1" column="1">
90
+ <widget class="QLabel" name="streamStoppingIn">
91
+ <property name="text">
92
+ <string>OutputTimer.Stream.StoppingIn</string>
93
+ </property>
94
+ </widget>
95
+ </item>
96
+ <item row="1" column="2">
97
+ <widget class="QLabel" name="streamTime">
98
+ <property name="text">
99
+ <string>00:00:00</string>
100
+ </property>
101
+ </widget>
102
+ </item>
103
+ <item row="2" column="1">
104
+ <widget class="QLabel" name="recordingLabel">
105
+ <property name="text">
106
+ <string>OutputTimer.Record</string>
107
+ </property>
108
+ </widget>
109
+ </item>
110
+ <item row="2" column="2">
111
+ <widget class="QSpinBox" name="recordingTimerHours">
112
+ <property name="minimum">
113
+ <number>0</number>
114
+ </property>
115
+ <property name="maximum">
116
+ <number>24</number>
117
+ </property>
118
+ <property name="value">
119
+ <number>0</number>
120
+ </property>
121
+ </widget>
122
+ </item>
123
+ <item row="2" column="3">
124
+ <widget class="QLabel" name="hoursLabel_2">
125
+ <property name="text">
126
+ <string>Hours</string>
127
+ </property>
128
+ </widget>
129
+ </item>
130
+ <item row="2" column="4">
131
+ <widget class="QSpinBox" name="recordingTimerMinutes">
132
+ <property name="minimum">
133
+ <number>0</number>
134
+ </property>
135
+ <property name="maximum">
136
+ <number>59</number>
137
+ </property>
138
+ <property name="value">
139
+ <number>0</number>
140
+ </property>
141
+ </widget>
142
+ </item>
143
+ <item row="2" column="5">
144
+ <widget class="QLabel" name="minutesLabel_2">
145
+ <property name="text">
146
+ <string>Minutes</string>
147
+ </property>
148
+ </widget>
149
+ </item>
150
+ <item row="2" column="6">
151
+ <widget class="QSpinBox" name="recordingTimerSeconds">
152
+ <property name="minimum">
153
+ <number>0</number>
154
+ </property>
155
+ <property name="maximum">
156
+ <number>59</number>
157
+ </property>
158
+ <property name="value">
159
+ <number>30</number>
160
+ </property>
161
+ </widget>
162
+ </item>
163
+ <item row="2" column="7">
164
+ <widget class="QLabel" name="secondsLabel_2">
165
+ <property name="text">
166
+ <string>Seconds</string>
167
+ </property>
168
+ </widget>
169
+ </item>
170
+ <item row="2" column="8">
171
+ <widget class="QPushButton" name="outputTimerRecord">
172
+ <property name="text">
173
+ <string>Start</string>
174
+ </property>
175
+ </widget>
176
+ </item>
177
+ <item row="3" column="1">
178
+ <widget class="QLabel" name="recordStoppingIn">
179
+ <property name="text">
180
+ <string>OutputTimer.Record.StoppingIn</string>
181
+ </property>
182
+ </widget>
183
+ </item>
184
+ <item row="3" column="2">
185
+ <widget class="QLabel" name="recordTime">
186
+ <property name="text">
187
+ <string>00:00:00</string>
188
+ </property>
189
+ </widget>
190
+ </item>
191
+ </layout>
192
+ </widget>
193
+ <resources />
194
+ <connections />
195
+</ui>
196
obs-studio-0.16.2.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools.c -> obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/frontend-tools.c
Changed
28
1
2
OBS_DECLARE_MODULE()
3
OBS_MODULE_USE_DEFAULT_LOCALE("frontend-tools", "en-US")
4
5
+#if defined(_WIN32) || defined(__APPLE__)
6
void InitSceneSwitcher();
7
void FreeSceneSwitcher();
8
+#endif
9
+void InitOutputTimer();
10
+void FreeOutputTimer();
11
12
bool obs_module_load(void)
13
{
14
+#if defined(_WIN32) || defined(__APPLE__)
15
InitSceneSwitcher();
16
+#endif
17
+ InitOutputTimer();
18
return true;
19
}
20
21
void obs_module_unload(void)
22
{
23
+#if defined(_WIN32) || defined(__APPLE__)
24
FreeSceneSwitcher();
25
+#endif
26
+ FreeOutputTimer();
27
}
28
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/output-timer.cpp
Added
304
1
2
+#include <obs-frontend-api.h>
3
+#include <obs-module.h>
4
+#include <obs.hpp>
5
+#include <util/util.hpp>
6
+#include <QAction>
7
+#include <QMainWindow>
8
+#include <QTimer>
9
+#include <QObject>
10
+#include "output-timer.hpp"
11
+
12
+using namespace std;
13
+
14
+OutputTimer *ot;
15
+
16
+OutputTimer::OutputTimer(QWidget *parent)
17
+ : QDialog(parent),
18
+ ui(new Ui_OutputTimer)
19
+{
20
+ ui->setupUi(this);
21
+
22
+ QObject::connect(ui->outputTimerStream, SIGNAL(clicked()), this,
23
+ SLOT(StreamingTimerButton()));
24
+ QObject::connect(ui->outputTimerRecord, SIGNAL(clicked()), this,
25
+ SLOT(RecordingTimerButton()));
26
+
27
+ streamingTimer = new QTimer(this);
28
+ streamingTimerDisplay = new QTimer(this);
29
+
30
+ recordingTimer = new QTimer(this);
31
+ recordingTimerDisplay = new QTimer(this);
32
+}
33
+
34
+void OutputTimer::closeEvent(QCloseEvent*)
35
+{
36
+ obs_frontend_save();
37
+}
38
+
39
+void OutputTimer::StreamingTimerButton()
40
+{
41
+ if (!obs_frontend_streaming_active()) {
42
+ obs_frontend_streaming_start();
43
+ } else if (streamingAlreadyActive) {
44
+ StreamTimerStart();
45
+ streamingAlreadyActive = false;
46
+ } else if (obs_frontend_streaming_active()) {
47
+ obs_frontend_streaming_stop();
48
+ }
49
+}
50
+
51
+void OutputTimer::RecordingTimerButton()
52
+{
53
+ if (!obs_frontend_recording_active()) {
54
+ obs_frontend_recording_start();
55
+ } else if (recordingAlreadyActive) {
56
+ RecordTimerStart();
57
+ recordingAlreadyActive = false;
58
+ } else if (obs_frontend_recording_active()) {
59
+ obs_frontend_recording_stop();
60
+ }
61
+}
62
+
63
+void OutputTimer::StreamTimerStart()
64
+{
65
+ if (!isVisible()) {
66
+ streamingAlreadyActive = true;
67
+ return;
68
+ }
69
+
70
+ int hours = ui->streamingTimerHours->value();
71
+ int minutes = ui->streamingTimerMinutes->value();
72
+ int seconds = ui->streamingTimerSeconds->value();
73
+
74
+ int total = (((hours * 3600) +
75
+ (minutes * 60)) +
76
+ seconds) * 1000;
77
+
78
+ if (total == 0)
79
+ total = 1000;
80
+
81
+ streamingTimer->setInterval(total);
82
+ streamingTimer->setSingleShot(true);
83
+
84
+ QObject::connect(streamingTimer, SIGNAL(timeout()),
85
+ SLOT(EventStopStreaming()));
86
+
87
+ QObject::connect(streamingTimerDisplay, SIGNAL(timeout()), this,
88
+ SLOT(UpdateStreamTimerDisplay()));
89
+
90
+ streamingTimer->start();
91
+ streamingTimerDisplay->start(1000);
92
+ ui->outputTimerStream->setText(tr("Stop"));
93
+
94
+ UpdateStreamTimerDisplay();
95
+}
96
+
97
+void OutputTimer::RecordTimerStart()
98
+{
99
+ if (!isVisible()) {
100
+ recordingAlreadyActive = true;
101
+ return;
102
+ }
103
+
104
+ int hours = ui->recordingTimerHours->value();
105
+ int minutes = ui->recordingTimerMinutes->value();
106
+ int seconds = ui->recordingTimerSeconds->value();
107
+
108
+ int total = (((hours * 3600) +
109
+ (minutes * 60)) +
110
+ seconds) * 1000;
111
+
112
+ if (total == 0)
113
+ total = 1000;
114
+
115
+ recordingTimer->setInterval(total);
116
+ recordingTimer->setSingleShot(true);
117
+
118
+ QObject::connect(recordingTimer, SIGNAL(timeout()),
119
+ SLOT(EventStopRecording()));
120
+
121
+ QObject::connect(recordingTimerDisplay, SIGNAL(timeout()), this,
122
+ SLOT(UpdateRecordTimerDisplay()));
123
+
124
+ recordingTimer->start();
125
+ recordingTimerDisplay->start(1000);
126
+ ui->outputTimerRecord->setText(tr("Stop"));
127
+
128
+ UpdateRecordTimerDisplay();
129
+}
130
+
131
+void OutputTimer::StreamTimerStop()
132
+{
133
+ streamingAlreadyActive = false;
134
+
135
+ if (!isVisible() && streamingTimer->isActive() == false)
136
+ return;
137
+
138
+ if (streamingTimer->isActive())
139
+ streamingTimer->stop();
140
+
141
+ ui->outputTimerStream->setText(tr("Start"));
142
+
143
+ if (streamingTimerDisplay->isActive())
144
+ streamingTimerDisplay->stop();
145
+
146
+ ui->streamTime->setText("00:00:00");
147
+}
148
+
149
+void OutputTimer::RecordTimerStop()
150
+{
151
+ recordingAlreadyActive = false;
152
+
153
+ if (!isVisible() && recordingTimer->isActive() == false)
154
+ return;
155
+
156
+ if (recordingTimer->isActive())
157
+ recordingTimer->stop();
158
+
159
+ ui->outputTimerRecord->setText(tr("Start"));
160
+
161
+ if (recordingTimerDisplay->isActive())
162
+ recordingTimerDisplay->stop();
163
+
164
+ ui->recordTime->setText("00:00:00");
165
+}
166
+
167
+void OutputTimer::UpdateStreamTimerDisplay()
168
+{
169
+ int remainingTime = streamingTimer->remainingTime() / 1000;
170
+
171
+ int seconds = remainingTime % 60;
172
+ int minutes = (remainingTime % 3600) / 60;
173
+ int hours = remainingTime / 3600;
174
+
175
+ QString text;
176
+ text.sprintf("%02d:%02d:%02d", hours, minutes, seconds);
177
+ ui->streamTime->setText(text);
178
+}
179
+
180
+void OutputTimer::UpdateRecordTimerDisplay()
181
+{
182
+ int remainingTime = recordingTimer->remainingTime() / 1000;
183
+
184
+ int seconds = remainingTime % 60;
185
+ int minutes = (remainingTime % 3600) / 60;
186
+ int hours = remainingTime / 3600;
187
+
188
+ QString text;
189
+ text.sprintf("%02d:%02d:%02d", hours, minutes, seconds);
190
+ ui->recordTime->setText(text);
191
+}
192
+
193
+void OutputTimer::ShowHideDialog()
194
+{
195
+ if (!isVisible()) {
196
+ setVisible(true);
197
+ QTimer::singleShot(250, this, SLOT(show()));
198
+ } else {
199
+ setVisible(false);
200
+ QTimer::singleShot(250, this, SLOT(hide()));
201
+ }
202
+}
203
+
204
+void OutputTimer::EventStopStreaming()
205
+{
206
+ obs_frontend_streaming_stop();
207
+}
208
+
209
+void OutputTimer::EventStopRecording()
210
+{
211
+ obs_frontend_recording_stop();
212
+}
213
+
214
+static void SaveOutputTimer(obs_data_t *save_data, bool saving, void *)
215
+{
216
+ if (saving) {
217
+ obs_data_t *obj = obs_data_create();
218
+
219
+ obs_data_set_int(obj, "streamTimerHours",
220
+ ot->ui->streamingTimerHours->value());
221
+ obs_data_set_int(obj, "streamTimerMinutes",
222
+ ot->ui->streamingTimerMinutes->value());
223
+ obs_data_set_int(obj, "streamTimerSeconds",
224
+ ot->ui->streamingTimerSeconds->value());
225
+
226
+ obs_data_set_int(obj, "recordTimerHours",
227
+ ot->ui->recordingTimerHours->value());
228
+ obs_data_set_int(obj, "recordTimerMinutes",
229
+ ot->ui->recordingTimerMinutes->value());
230
+ obs_data_set_int(obj, "recordTimerSeconds",
231
+ ot->ui->recordingTimerSeconds->value());
232
+
233
+ obs_data_set_obj(save_data, "output-timer", obj);
234
+
235
+ obs_data_release(obj);
236
+ } else {
237
+ obs_data_t *obj = obs_data_get_obj(save_data,
238
+ "output-timer");
239
+
240
+ if (!obj)
241
+ obj = obs_data_create();
242
+
243
+ ot->ui->streamingTimerHours->setValue(
244
+ obs_data_get_int(obj, "streamTimerHours"));
245
+ ot->ui->streamingTimerMinutes->setValue(
246
+ obs_data_get_int(obj, "streamTimerMinutes"));
247
+ ot->ui->streamingTimerSeconds->setValue(
248
+ obs_data_get_int(obj, "streamTimerSeconds"));
249
+
250
+ ot->ui->recordingTimerHours->setValue(
251
+ obs_data_get_int(obj, "recordTimerHours"));
252
+ ot->ui->recordingTimerMinutes->setValue(
253
+ obs_data_get_int(obj, "recordTimerMinutes"));
254
+ ot->ui->recordingTimerSeconds->setValue(
255
+ obs_data_get_int(obj, "recordTimerSeconds"));
256
+
257
+ obs_data_release(obj);
258
+ }
259
+}
260
+
261
+extern "C" void FreeOutputTimer()
262
+{
263
+}
264
+
265
+static void OBSEvent(enum obs_frontend_event event, void *)
266
+{
267
+ if (event == OBS_FRONTEND_EVENT_EXIT) {
268
+ obs_frontend_save();
269
+ FreeOutputTimer();
270
+ } else if (event == OBS_FRONTEND_EVENT_STREAMING_STARTED) {
271
+ ot->StreamTimerStart();
272
+ } else if (event == OBS_FRONTEND_EVENT_STREAMING_STOPPING) {
273
+ ot->StreamTimerStop();
274
+ } else if (event == OBS_FRONTEND_EVENT_RECORDING_STARTED) {
275
+ ot->RecordTimerStart();
276
+ } else if (event == OBS_FRONTEND_EVENT_RECORDING_STOPPING) {
277
+ ot->RecordTimerStop();
278
+ }
279
+}
280
+
281
+extern "C" void InitOutputTimer()
282
+{
283
+ QAction *action = (QAction*)obs_frontend_add_tools_menu_qaction(
284
+ obs_module_text("OutputTimer"));
285
+
286
+ obs_frontend_push_ui_translation(obs_module_get_string);
287
+
288
+ QMainWindow *window = (QMainWindow*)obs_frontend_get_main_window();
289
+
290
+ ot = new OutputTimer(window);
291
+
292
+ auto cb = [] ()
293
+ {
294
+ ot->ShowHideDialog();
295
+ };
296
+
297
+ obs_frontend_pop_ui_translation();
298
+
299
+ obs_frontend_add_save_callback(SaveOutputTimer, nullptr);
300
+ obs_frontend_add_event_callback(OBSEvent, nullptr);
301
+
302
+ action->connect(action, &QAction::triggered, cb);
303
+}
304
obs-studio-0.16.4.tar.xz/UI/frontend-plugins/frontend-tools/output-timer.hpp
Added
42
1
2
+#pragma once
3
+
4
+#include <QDialog>
5
+#include <memory>
6
+
7
+#include "ui_output-timer.h"
8
+
9
+class QCloseEvent;
10
+
11
+class OutputTimer : public QDialog {
12
+ Q_OBJECT
13
+
14
+public:
15
+ std::unique_ptr<Ui_OutputTimer> ui;
16
+ OutputTimer(QWidget *parent);
17
+
18
+ void closeEvent(QCloseEvent *event) override;
19
+
20
+public slots:
21
+ void StreamingTimerButton();
22
+ void RecordingTimerButton();
23
+ void StreamTimerStart();
24
+ void RecordTimerStart();
25
+ void StreamTimerStop();
26
+ void RecordTimerStop();
27
+ void UpdateStreamTimerDisplay();
28
+ void UpdateRecordTimerDisplay();
29
+ void ShowHideDialog();
30
+ void EventStopStreaming();
31
+ void EventStopRecording();
32
+
33
+private:
34
+ bool streamingAlreadyActive = false;
35
+ bool recordingAlreadyActive = false;
36
+
37
+ QTimer *streamingTimer;
38
+ QTimer *recordingTimer;
39
+ QTimer *streamingTimerDisplay;
40
+ QTimer *recordingTimerDisplay;
41
+};
42
obs-studio-0.16.2.tar.xz/UI/obs-app.cpp -> obs-studio-0.16.4.tar.xz/UI/obs-app.cpp
Changed
65
1
2
#include <obs-config.h>
3
#include <obs.hpp>
4
5
+#include <QGuiApplication>
6
#include <QProxyStyle>
7
+#include <QScreen>
8
9
#include "qt-wrappers.hpp"
10
#include "obs-app.hpp"
11
12
if (GetConfigPath(path, sizeof(path), "obs-studio/basic/profiles") <= 0)
13
return outputPath;
14
15
- strcat(path, "/*.*");
16
+ strcat(path, "/*");
17
18
if (os_glob(path, 0, &glob) != 0)
19
return outputPath;
20
21
if (!StartupOBS(locale.c_str(), GetProfilerNameStore()))
22
return false;
23
24
+ blog(LOG_INFO, "Portable mode: %s",
25
+ portable_mode ? "true" : "false");
26
+
27
mainWindow = new OBSBasic();
28
29
mainWindow->setAttribute(Qt::WA_DeleteOnClose, true);
30
31
return ver.str();
32
}
33
34
+bool OBSApp::IsPortableMode()
35
+{
36
+ return portable_mode;
37
+}
38
+
39
#ifdef __APPLE__
40
#define INPUT_AUDIO_SOURCE "coreaudio_input_capture"
41
#define OUTPUT_AUDIO_SOURCE "coreaudio_output_capture"
42
43
44
bool WindowPositionValid(QRect rect)
45
{
46
- vector<MonitorInfo> monitors;
47
- GetMonitors(monitors);
48
-
49
- for (auto &monitor : monitors) {
50
- int left = int(monitor.x);
51
- int top = int(monitor.y);
52
- int right = left + int(monitor.cx);
53
- int bottom = top + int(monitor.cy);
54
-
55
- if ((rect.left() - right) < 0 && (left - rect.right()) < 0 &&
56
- (rect.top() - bottom) < 0 && (top - rect.bottom()) < 0)
57
+ for (QScreen* screen: QGuiApplication::screens()) {
58
+ if (screen->availableGeometry().intersects(rect))
59
return true;
60
}
61
-
62
return false;
63
}
64
65
obs-studio-0.16.2.tar.xz/UI/obs-app.hpp -> obs-studio-0.16.4.tar.xz/UI/obs-app.hpp
Changed
9
1
2
const char *GetCurrentLog() const;
3
4
std::string GetVersionString() const;
5
+ bool IsPortableMode();
6
7
const char *InputAudioSource() const;
8
const char *OutputAudioSource() const;
9
obs-studio-0.16.2.tar.xz/UI/obs-frontend-api/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/UI/obs-frontend-api/CMakeLists.txt
Changed
15
1
2
target_link_libraries(obs-frontend-api
3
libobs)
4
5
+if(UNIX AND NOT APPLE)
6
+ set_target_properties(obs-frontend-api
7
+ PROPERTIES
8
+ OUTPUT_NAME obs-frontend-api
9
+ VERSION 0.0
10
+ SOVERSION 0
11
+ )
12
+endif()
13
+
14
install_obs_core(obs-frontend-api)
15
obs-studio-0.16.2.tar.xz/UI/platform-osx.mm -> obs-studio-0.16.4.tar.xz/UI/platform-osx.mm
Changed
19
1
2
return !access(output.c_str(), R_OK);
3
}
4
5
-void GetMonitors(vector<MonitorInfo> &monitors)
6
-{
7
- monitors.clear();
8
- for(NSScreen *screen : [NSScreen screens])
9
- {
10
- NSRect frame = [screen convertRectToBacking:[screen frame]];
11
- monitors.emplace_back(frame.origin.x, frame.origin.y,
12
- frame.size.width, frame.size.height);
13
- }
14
-}
15
-
16
bool InitApplicationBundle()
17
{
18
#ifdef OBS_OSX_BUNDLE
19
obs-studio-0.16.2.tar.xz/UI/platform-windows.cpp -> obs-studio-0.16.4.tar.xz/UI/platform-windows.cpp
Changed
30
1
2
return check_path(data, OBS_DATA_PATH "/obs-studio/", output);
3
}
4
5
-static BOOL CALLBACK OBSMonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor,
6
- LPRECT rect, LPARAM param)
7
-{
8
- vector<MonitorInfo> &monitors = *(vector<MonitorInfo> *)param;
9
-
10
- monitors.emplace_back(
11
- rect->left,
12
- rect->top,
13
- rect->right - rect->left,
14
- rect->bottom - rect->top);
15
-
16
- UNUSED_PARAMETER(hMonitor);
17
- UNUSED_PARAMETER(hdcMonitor);
18
- return true;
19
-}
20
-
21
-void GetMonitors(vector<MonitorInfo> &monitors)
22
-{
23
- monitors.clear();
24
- EnumDisplayMonitors(NULL, NULL, OBSMonitorEnumProc, (LPARAM)&monitors);
25
-}
26
-
27
bool InitApplicationBundle()
28
{
29
return true;
30
obs-studio-0.16.2.tar.xz/UI/platform-x11.cpp -> obs-studio-0.16.4.tar.xz/UI/platform-x11.cpp
Changed
81
1
2
along with this program. If not, see <http://www.gnu.org/licenses/>.
3
******************************************************************************/
4
5
-/* Here we use xinerama to fetch data about monitor geometry
6
- * Even if there are not multiple monitors, this should still work.
7
- */
8
-
9
#include <obs-config.h>
10
#include "obs-app.hpp"
11
12
-#include <xcb/xcb.h>
13
-#include <xcb/xinerama.h>
14
-#include <xcb/randr.h>
15
+#include <QGuiApplication>
16
+#include <QScreen>
17
+
18
#include <unistd.h>
19
#include <sstream>
20
#include <locale.h>
21
22
return false;
23
}
24
25
-void GetMonitors(vector<MonitorInfo> &monitors)
26
-{
27
- xcb_connection_t* xcb_conn;
28
-
29
- monitors.clear();
30
- xcb_conn = xcb_connect(NULL, NULL);
31
-
32
- bool use_xinerama = false;
33
- if (xcb_get_extension_data(xcb_conn, &xcb_xinerama_id)->present) {
34
- xcb_xinerama_is_active_cookie_t xinerama_cookie;
35
- xcb_xinerama_is_active_reply_t* xinerama_reply = NULL;
36
-
37
- xinerama_cookie = xcb_xinerama_is_active(xcb_conn);
38
- xinerama_reply = xcb_xinerama_is_active_reply(xcb_conn,
39
- xinerama_cookie, NULL);
40
-
41
- if (xinerama_reply && xinerama_reply->state != 0)
42
- use_xinerama = true;
43
- free(xinerama_reply);
44
- }
45
-
46
- if (use_xinerama) {
47
- xcb_xinerama_query_screens_cookie_t screens_cookie;
48
- xcb_xinerama_query_screens_reply_t* screens_reply = NULL;
49
- xcb_xinerama_screen_info_iterator_t iter;
50
-
51
- screens_cookie = xcb_xinerama_query_screens(xcb_conn);
52
- screens_reply = xcb_xinerama_query_screens_reply(xcb_conn,
53
- screens_cookie, NULL);
54
- iter = xcb_xinerama_query_screens_screen_info_iterator(
55
- screens_reply);
56
-
57
- for(; iter.rem; xcb_xinerama_screen_info_next(&iter)) {
58
- monitors.emplace_back(iter.data->x_org,
59
- iter.data->y_org,
60
- iter.data->width,
61
- iter.data->height);
62
- }
63
- free(screens_reply);
64
- } else {
65
- // no xinerama so fall back to basic x11 calls
66
- xcb_screen_iterator_t iter;
67
-
68
- iter = xcb_setup_roots_iterator(xcb_get_setup(xcb_conn));
69
- for(; iter.rem; xcb_screen_next(&iter)) {
70
- monitors.emplace_back(0,0,iter.data->width_in_pixels,
71
- iter.data->height_in_pixels);
72
- }
73
- }
74
-
75
- xcb_disconnect(xcb_conn);
76
-}
77
-
78
bool InitApplicationBundle()
79
{
80
return true;
81
obs-studio-0.16.2.tar.xz/UI/platform.hpp -> obs-studio-0.16.4.tar.xz/UI/platform.hpp
Changed
21
1
2
3
class QWidget;
4
5
-struct MonitorInfo {
6
- int32_t x, y;
7
- uint32_t cx, cy;
8
-
9
- inline MonitorInfo() {}
10
- inline MonitorInfo(int32_t x, int32_t y, uint32_t cx, uint32_t cy)
11
- : x(x), y(y), cx(cx), cy(cy)
12
- {}
13
-};
14
-
15
/* Gets the path of obs-studio specific data files (such as locale) */
16
bool GetDataFilePath(const char *data, std::string &path);
17
-void GetMonitors(std::vector<MonitorInfo> &monitors);
18
19
/* Updates the working directory for OSX application bundles */
20
bool InitApplicationBundle();
21
obs-studio-0.16.2.tar.xz/UI/window-basic-main-dropfiles.cpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-main-dropfiles.cpp
Changed
98
1
2
3
using namespace std;
4
5
+static const char *textExtensions[] = {
6
+ "txt", "log", nullptr
7
+};
8
+
9
static const char *imageExtensions[] = {
10
"bmp", "tga", "png", "jpg", "jpeg", "gif", nullptr
11
};
12
13
}
14
}
15
16
-void OBSBasic::AddDropSource(const char *file, bool image)
17
+void OBSBasic::AddDropSource(const char *data, DropType image)
18
{
19
OBSBasic *main = reinterpret_cast<OBSBasic*>(App()->GetMainWindow());
20
obs_data_t *settings = obs_data_create();
21
obs_source_t *source = nullptr;
22
const char *type = nullptr;
23
24
- if (image) {
25
- obs_data_set_string(settings, "file", file);
26
+ switch (image) {
27
+ case DropType_RawText:
28
+ obs_data_set_string(settings, "text", data);
29
+ type = "text_gdiplus";
30
+ break;
31
+ case DropType_Text:
32
+ obs_data_set_bool(settings, "read_from_file", true);
33
+ obs_data_set_string(settings, "file", data);
34
+ type = "text_gdiplus";
35
+ break;
36
+ case DropType_Image:
37
+ obs_data_set_string(settings, "file", data);
38
type = "image_source";
39
- } else {
40
- obs_data_set_string(settings, "local_file", file);
41
+ break;
42
+ case DropType_Media:
43
+ obs_data_set_string(settings, "local_file", data);
44
type = "ffmpeg_source";
45
+ break;
46
}
47
48
const char *name = obs_source_get_display_name(type);
49
50
const char *suffix = suffixArray.constData();
51
bool found = false;
52
53
- const char **cmp = imageExtensions;
54
+ const char **cmp;
55
+
56
+ cmp = textExtensions;
57
+ while (*cmp) {
58
+ if (strcmp(*cmp, suffix) == 0) {
59
+ AddDropSource(QT_TO_UTF8(file),
60
+ DropType_Text);
61
+ found = true;
62
+ break;
63
+ }
64
+
65
+ cmp++;
66
+ }
67
+
68
+ if (found)
69
+ continue;
70
+
71
+ cmp = imageExtensions;
72
while (*cmp) {
73
if (strcmp(*cmp, suffix) == 0) {
74
- AddDropSource(QT_TO_UTF8(file), true);
75
+ AddDropSource(QT_TO_UTF8(file),
76
+ DropType_Image);
77
found = true;
78
break;
79
}
80
81
cmp = mediaExtensions;
82
while (*cmp) {
83
if (strcmp(*cmp, suffix) == 0) {
84
- AddDropSource(QT_TO_UTF8(file), false);
85
+ AddDropSource(QT_TO_UTF8(file),
86
+ DropType_Media);
87
break;
88
}
89
90
cmp++;
91
}
92
}
93
+ } else if (mimeData->hasText()) {
94
+ AddDropSource(QT_TO_UTF8(mimeData->text()), DropType_RawText);
95
}
96
}
97
98
obs-studio-0.16.2.tar.xz/UI/window-basic-main-outputs.cpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-main-outputs.cpp
Changed
73
1
2
void SimpleOutput::UpdateStreamingSettings_amd(obs_data_t *settings,
3
int bitrate)
4
{
5
- int bits = bitrate * 1000;
6
+ // Static Properties
7
obs_data_set_int(settings, "AMF.H264.Usage", 0);
8
- obs_data_set_int(settings, "AMF.H264.QualityPreset", 2);
9
- obs_data_set_int(settings, "AMF.H264.ProfileLevel", 51);
10
+ obs_data_set_int(settings, "AMF.H264.Profile", 100); // High
11
+ obs_data_set_string(settings, "profile", "high"); // High
12
+ obs_data_set_int(settings, "AMF.H264.ProfileLevel", 0); // Automatic
13
+
14
+ // Rate Control Properties
15
+ obs_data_set_int(settings, "AMF.H264.RateControlMethod", 1);
16
+ obs_data_set_string(settings, "rate_control", "CBR");
17
+ obs_data_set_int(settings, "AMF.H264.Bitrate.Target", bitrate);
18
+ obs_data_set_int(settings, "bitrate", bitrate);
19
obs_data_set_int(settings, "AMF.H264.FillerData", 1);
20
- obs_data_set_int(settings, "AMF.H264.FrameSkipping", -1);
21
- obs_data_set_int(settings, "AMF.H264.BPicture.Pattern", 2);
22
- obs_data_set_int(settings, "AMF.H264.BPicture.Reference", 1);
23
- obs_data_set_int(settings, "AMF.H264.Bitrate.Target", bits);
24
- obs_data_set_int(settings, "AMF.H264.Bitrate.Peak", bits);
25
- obs_data_set_int(settings, "AMF.H264Advanced.VBVBuffer.Size", bits);
26
- obs_data_set_string(settings, "profile", "high");
27
+ obs_data_set_int(settings, "AMF.H264.VBVBuffer", 0); // Automatic VBV Buffer
28
+ obs_data_set_double(settings, "AMF.H264.VBVBuffer.Strictness", 0.9);
29
+
30
+ // Picture Control Properties
31
+ obs_data_set_double(settings, "AMF.H264.KeyframeInterval", 2.0);
32
+ obs_data_set_int(settings, "keyint_sec", 2);
33
}
34
35
void SimpleOutput::UpdateRecordingSettings_amd_cqp(int cqp)
36
{
37
obs_data_t *settings = obs_data_create();
38
39
+ // Static Properties
40
obs_data_set_int(settings, "AMF.H264.Usage", 0);
41
- obs_data_set_int(settings, "AMF.H264.QualityPreset", 2);
42
- obs_data_set_int(settings, "AMF.H264.ProfileLevel", 51);
43
- obs_data_set_int(settings, "AMF.H264.FillerData", 0);
44
- obs_data_set_int(settings, "AMF.H264.FrameSkipping", 0);
45
- obs_data_set_int(settings, "AMF.H264.QP.Minimum", 0);
46
- obs_data_set_int(settings, "AMF.H264.QP.Maximum", 51);
47
+ obs_data_set_int(settings, "AMF.H264.Profile", 100); // High
48
+ obs_data_set_string(settings, "profile", "high"); // High
49
+ obs_data_set_int(settings, "AMF.H264.ProfileLevel", 0); // Automatic
50
+
51
+ // Rate Control Properties
52
+ obs_data_set_int(settings, "AMF.H264.RateControlMethod", 0);
53
+ obs_data_set_string(settings, "rate_control", "CQP");
54
obs_data_set_int(settings, "AMF.H264.QP.IFrame", cqp);
55
obs_data_set_int(settings, "AMF.H264.QP.PFrame", cqp);
56
obs_data_set_int(settings, "AMF.H264.QP.BFrame", cqp);
57
- obs_data_set_int(settings, "AMF.H264.BPicture.Pattern", 3);
58
- obs_data_set_int(settings, "AMF.H264.BPicture.Reference", 1);
59
- obs_data_set_int(settings, "keyint_sec", 1);
60
- obs_data_set_string(settings, "rate_control", "CQP");
61
- obs_data_set_string(settings, "profile", "high");
62
63
- obs_encoder_update(h264Recording, settings);
64
+ // Picture Control Properties
65
+ obs_data_set_double(settings, "AMF.H264.KeyframeInterval", 2.0);
66
+ obs_data_set_int(settings, "keyint_sec", 2);
67
68
+ // Update and release
69
+ obs_encoder_update(h264Recording, settings);
70
obs_data_release(settings);
71
}
72
73
obs-studio-0.16.2.tar.xz/UI/window-basic-main.cpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-main.cpp
Changed
301
1
2
3
#include <time.h>
4
#include <obs.hpp>
5
+#include <QGuiApplication>
6
#include <QMessageBox>
7
#include <QShowEvent>
8
#include <QDesktopServices>
9
#include <QFileDialog>
10
#include <QDesktopWidget>
11
+#include <QRect>
12
+#include <QScreen>
13
14
#include <util/dstr.h>
15
#include <util/util.hpp>
16
17
18
QRect windowGeometry = normalGeometry();
19
if (!WindowPositionValid(windowGeometry)) {
20
- QRect rect = App()->desktop()->availableGeometry();
21
+ QRect rect = App()->desktop()->geometry();
22
setGeometry(QStyle::alignedRect(
23
Qt::LeftToRight,
24
Qt::AlignCenter,
25
26
27
bool OBSBasic::InitBasicConfigDefaults()
28
{
29
- vector<MonitorInfo> monitors;
30
- GetMonitors(monitors);
31
+ QList<QScreen*> screens = QGuiApplication::screens();
32
33
- if (!monitors.size()) {
34
+ if (!screens.size()) {
35
OBSErrorBox(NULL, "There appears to be no monitors. Er, this "
36
"technically shouldn't be possible.");
37
return false;
38
}
39
40
- uint32_t cx = monitors[0].cx;
41
- uint32_t cy = monitors[0].cy;
42
+ QScreen *primaryScreen = QGuiApplication::primaryScreen();
43
+
44
+ uint32_t cx = primaryScreen->size().width();
45
+ uint32_t cy = primaryScreen->size().height();
46
47
/* ----------------------------------------------------- */
48
/* move over mixer values in advanced if older config */
49
50
const char *slot)
51
{
52
QAction *action;
53
- std::vector<MonitorInfo> monitors;
54
- GetMonitors(monitors);
55
-
56
- for (int i = 0; (size_t)i < monitors.size(); i++) {
57
- const MonitorInfo &monitor = monitors[i];
58
-
59
+ QList<QScreen*> screens = QGuiApplication::screens();
60
+ for (int i = 0; i < screens.size(); i++) {
61
+ QRect screenGeometry = screens[i]->geometry();
62
QString str = QString("%1 %2: %3x%4 @ %5,%6").
63
arg(QTStr("Display"),
64
QString::number(i),
65
- QString::number((int)monitor.cx),
66
- QString::number((int)monitor.cy),
67
- QString::number((int)monitor.x),
68
- QString::number((int)monitor.y));
69
+ QString::number((int)screenGeometry.width()),
70
+ QString::number((int)screenGeometry.height()),
71
+ QString::number((int)screenGeometry.x()),
72
+ QString::number((int)screenGeometry.y()));
73
74
action = parent->addAction(str, target, slot);
75
action->setProperty("monitor", i);
76
77
{
78
const char *type;
79
bool foundValues = false;
80
+ bool foundDeprecated = false;
81
size_t idx = 0;
82
83
QMenu *popup = new QMenu(QTStr("Add"), this);
84
+ QMenu *deprecated = new QMenu(QTStr("Deprecated"), popup);
85
86
auto getActionAfter = [] (QMenu *menu, const QString &name)
87
{
88
89
90
if ((caps & OBS_SOURCE_DEPRECATED) == 0) {
91
addSource(popup, type, name);
92
- foundValues = true;
93
+ } else {
94
+ addSource(deprecated, type, name);
95
+ foundDeprecated = true;
96
}
97
+ foundValues = true;
98
}
99
100
addSource(popup, "scene", Str("Basic.Scene"));
101
102
+ if (!foundDeprecated) {
103
+ delete deprecated;
104
+ deprecated = nullptr;
105
+ }
106
+
107
if (!foundValues) {
108
delete popup;
109
popup = nullptr;
110
+
111
+ } else if (foundDeprecated) {
112
+ popup->addMenu(deprecated);
113
}
114
115
return popup;
116
117
118
ui->streamButton->setEnabled(false);
119
ui->streamButton->setText(QTStr("Basic.Main.Connecting"));
120
- sysTrayStream->setEnabled(false);
121
- sysTrayStream->setText(ui->streamButton->text());
122
+
123
+ if (sysTrayStream) {
124
+ sysTrayStream->setEnabled(false);
125
+ sysTrayStream->setText(ui->streamButton->text());
126
+ }
127
128
if (!outputHandler->StartStreaming(service)) {
129
ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
130
ui->streamButton->setEnabled(true);
131
- sysTrayStream->setText(ui->streamButton->text());
132
- sysTrayStream->setEnabled(true);
133
+
134
+ if (sysTrayStream) {
135
+ sysTrayStream->setText(ui->streamButton->text());
136
+ sysTrayStream->setEnabled(true);
137
+ }
138
}
139
140
bool recordWhenStreaming = config_get_bool(GetGlobalConfig(),
141
142
App()->IncrementSleepInhibition();
143
UpdateProcessPriority();
144
145
- trayIcon->setIcon(QIcon(":/res/images/tray_active.png"));
146
+ if (trayIcon)
147
+ trayIcon->setIcon(QIcon(":/res/images/tray_active.png"));
148
}
149
}
150
151
152
App()->DecrementSleepInhibition();
153
ClearProcessPriority();
154
155
- trayIcon->setIcon(QIcon(":/res/images/obs.png"));
156
+ if (trayIcon)
157
+ trayIcon->setIcon(QIcon(":/res/images/obs.png"));
158
}
159
}
160
161
162
{
163
ui->streamButton->setText(QTStr("Basic.Main.StopStreaming"));
164
ui->streamButton->setEnabled(true);
165
- sysTrayStream->setText(ui->streamButton->text());
166
- sysTrayStream->setEnabled(true);
167
+
168
+ if (sysTrayStream) {
169
+ sysTrayStream->setText(ui->streamButton->text());
170
+ sysTrayStream->setEnabled(true);
171
+ }
172
173
if (!startStreamMenu.isNull())
174
startStreamMenu->deleteLater();
175
176
{
177
ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
178
ui->streamButton->setEnabled(true);
179
- sysTrayStream->setText(ui->streamButton->text());
180
- sysTrayStream->setEnabled(true);
181
+
182
+ if (sysTrayStream) {
183
+ sysTrayStream->setText(ui->streamButton->text());
184
+ sysTrayStream->setEnabled(true);
185
+ }
186
187
if (!startStreamMenu.isNull())
188
startStreamMenu->deleteLater();
189
190
ui->streamButton->setText(QTStr("Basic.Main.StopStreaming"));
191
ui->streamButton->setEnabled(true);
192
ui->statusbar->StreamStarted(outputHandler->streamOutput);
193
- sysTrayStream->setText(ui->streamButton->text());
194
- sysTrayStream->setEnabled(true);
195
+
196
+ if (sysTrayStream) {
197
+ sysTrayStream->setText(ui->streamButton->text());
198
+ sysTrayStream->setEnabled(true);
199
+ }
200
201
if (api)
202
api->on_event(OBS_FRONTEND_EVENT_STREAMING_STARTED);
203
204
void OBSBasic::StreamStopping()
205
{
206
ui->streamButton->setText(QTStr("Basic.Main.StoppingStreaming"));
207
- sysTrayStream->setText(ui->streamButton->text());
208
+
209
+ if (sysTrayStream)
210
+ sysTrayStream->setText(ui->streamButton->text());
211
212
streamingStopping = true;
213
if (api)
214
215
216
ui->streamButton->setText(QTStr("Basic.Main.StartStreaming"));
217
ui->streamButton->setEnabled(true);
218
- sysTrayStream->setText(ui->streamButton->text());
219
- sysTrayStream->setEnabled(true);
220
+
221
+ if (sysTrayStream) {
222
+ sysTrayStream->setText(ui->streamButton->text());
223
+ sysTrayStream->setEnabled(true);
224
+ }
225
226
streamingStopping = false;
227
if (api)
228
229
void OBSBasic::RecordStopping()
230
{
231
ui->recordButton->setText(QTStr("Basic.Main.StoppingRecording"));
232
- sysTrayRecord->setText(ui->recordButton->text());
233
+
234
+ if (sysTrayRecord)
235
+ sysTrayRecord->setText(ui->recordButton->text());
236
237
recordingStopping = true;
238
if (api)
239
240
{
241
ui->statusbar->RecordingStarted(outputHandler->fileOutput);
242
ui->recordButton->setText(QTStr("Basic.Main.StopRecording"));
243
- sysTrayRecord->setText(ui->recordButton->text());
244
+
245
+ if (sysTrayRecord)
246
+ sysTrayRecord->setText(ui->recordButton->text());
247
248
recordingStopping = false;
249
if (api)
250
251
{
252
ui->statusbar->RecordingStopped();
253
ui->recordButton->setText(QTStr("Basic.Main.StartRecording"));
254
- sysTrayRecord->setText(ui->recordButton->text());
255
+
256
+ if (sysTrayRecord)
257
+ sysTrayRecord->setText(ui->recordButton->text());
258
blog(LOG_INFO, RECORDING_STOP);
259
260
if (code == OBS_OUTPUT_UNSUPPORTED && isVisible()) {
261
262
name << "Studio ";
263
264
name << App()->GetVersionString();
265
+ if (App()->IsPortableMode())
266
+ name << " - Portable Mode";
267
+
268
name << " - " << Str("TitleBar.Profile") << ": " << profile;
269
name << " - " << Str("TitleBar.Scenes") << ": " << sceneCollection;
270
271
272
"BasicWindow", "geometry",
273
saveGeometry().toBase64().constData());
274
275
- showHide->setText(QTStr("Basic.SystemTray.Show"));
276
+ if (showHide)
277
+ showHide->setText(QTStr("Basic.SystemTray.Show"));
278
QTimer::singleShot(250, this, SLOT(hide()));
279
280
if (previewEnabled)
281
282
setVisible(false);
283
284
} else if (showing && !isVisible()) {
285
- showHide->setText(QTStr("Basic.SystemTray.Hide"));
286
+ if (showHide)
287
+ showHide->setText(QTStr("Basic.SystemTray.Hide"));
288
QTimer::singleShot(250, this, SLOT(show()));
289
290
if (previewEnabled)
291
292
}
293
}
294
295
-void OBSBasic::SystemTrayInit() {
296
+void OBSBasic::SystemTrayInit()
297
+{
298
trayIcon = new QSystemTrayIcon(QIcon(":/res/images/obs.png"),
299
this);
300
trayIcon->setToolTip("OBS Studio");
301
obs-studio-0.16.2.tar.xz/UI/window-basic-main.hpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-main.hpp
Changed
44
1
2
Right
3
};
4
5
+ enum DropType {
6
+ DropType_RawText,
7
+ DropType_Text,
8
+ DropType_Image,
9
+ DropType_Media
10
+ };
11
+
12
private:
13
obs_frontend_callbacks *api = nullptr;
14
15
16
17
QPointer<QMenu> startStreamMenu;
18
19
- QSystemTrayIcon *trayIcon;
20
- QMenu *trayMenu;
21
- QAction *sysTrayStream;
22
- QAction *sysTrayRecord;
23
- QAction *showHide;
24
- QAction *showPreview;
25
- QAction *exit;
26
+ QPointer<QSystemTrayIcon> trayIcon;
27
+ QPointer<QAction> sysTrayStream;
28
+ QPointer<QAction> sysTrayRecord;
29
+ QPointer<QAction> showHide;
30
+ QPointer<QAction> exit;
31
+ QPointer<QMenu> trayMenu;
32
bool disableHiding = false;
33
34
void DrawBackdrop(float cx, float cy);
35
36
inline void OnActivate();
37
inline void OnDeactivate();
38
39
- void AddDropSource(const char *file, bool image);
40
+ void AddDropSource(const char *file, DropType image);
41
void dragEnterEvent(QDragEnterEvent *event) override;
42
void dragLeaveEvent(QDragLeaveEvent *event) override;
43
void dragMoveEvent(QDragMoveEvent *event) override;
44
obs-studio-0.16.2.tar.xz/UI/window-basic-properties.cpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-properties.cpp
Changed
36
1
2
view = new OBSPropertiesView(settings, source,
3
(PropertiesReloadCallback)obs_source_properties,
4
(PropertiesUpdateCallback)obs_source_update);
5
+ view->setMinimumHeight(150);
6
7
- preview->setMinimumSize(20, 20);
8
+ preview->setMinimumSize(20, 150);
9
preview->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,
10
QSizePolicy::Expanding));
11
12
+ // Create a QSplitter to keep a unified workflow here.
13
+ windowSplitter = new QSplitter(Qt::Orientation::Vertical, this);
14
+ windowSplitter->addWidget(preview);
15
+ windowSplitter->addWidget(view);
16
+ windowSplitter->setChildrenCollapsible(false);
17
+ //windowSplitter->setSizes(QList<int>({ 16777216, 150 }));
18
+ windowSplitter->setStretchFactor(0, 3);
19
+ windowSplitter->setStretchFactor(1, 1);
20
+
21
setLayout(new QVBoxLayout(this));
22
- layout()->addWidget(preview);
23
- layout()->addWidget(view);
24
+ layout()->addWidget(windowSplitter);
25
layout()->addWidget(buttonBox);
26
layout()->setAlignment(buttonBox, Qt::AlignRight | Qt::AlignBottom);
27
- layout()->setAlignment(view, Qt::AlignBottom);
28
- view->setMaximumHeight(250);
29
- view->setMinimumHeight(150);
30
- view->show();
31
32
+ view->show();
33
installEventFilter(CreateShortcutFilter());
34
35
const char *name = obs_source_get_name(source);
36
obs-studio-0.16.2.tar.xz/UI/window-basic-properties.hpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-properties.hpp
Changed
17
1
2
#include <QDialog>
3
#include <QDialogButtonBox>
4
#include <QPointer>
5
+#include <QSplitter>
6
#include "qt-display.hpp"
7
#include <obs.hpp>
8
9
10
OBSData oldSettings;
11
OBSPropertiesView *view;
12
QDialogButtonBox *buttonBox;
13
+ QSplitter *windowSplitter;
14
15
static void SourceRemoved(void *data, calldata_t *params);
16
static void SourceRenamed(void *data, calldata_t *params);
17
obs-studio-0.16.2.tar.xz/UI/window-basic-settings.cpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-settings.cpp
Changed
59
1
2
#include <initializer_list>
3
#include <sstream>
4
#include <QCompleter>
5
+#include <QGuiApplication>
6
#include <QLineEdit>
7
#include <QMessageBox>
8
#include <QCloseEvent>
9
10
#include <QDirIterator>
11
#include <QVariant>
12
#include <QTreeView>
13
+#include <QScreen>
14
#include <QStandardItemModel>
15
#include <QSpacerItem>
16
17
18
#endif
19
}
20
21
-Q_DECLARE_METATYPE(MonitorInfo);
22
-
23
static string ResString(uint32_t cx, uint32_t cy)
24
{
25
stringstream res;
26
27
uint32_t cy = config_get_uint(main->Config(), "Video", "BaseCY");
28
uint32_t out_cx = config_get_uint(main->Config(), "Video", "OutputCX");
29
uint32_t out_cy = config_get_uint(main->Config(), "Video", "OutputCY");
30
- vector<MonitorInfo> monitors;
31
32
ui->baseResolution->clear();
33
34
- GetMonitors(monitors);
35
-
36
- for (MonitorInfo &monitor : monitors) {
37
- string res = ResString(monitor.cx, monitor.cy);
38
+ for (QScreen* screen: QGuiApplication::screens()) {
39
+ QSize as = screen->size();
40
+ string res = ResString(as.width(), as.height());
41
ui->baseResolution->addItem(res.c_str());
42
}
43
44
45
preset = curNVENCPreset;
46
47
} else if (encoder == SIMPLE_ENCODER_AMD) {
48
- /* none */
49
- defaultPreset = "";
50
+ ui->simpleOutPreset->addItem("Speed", "speed");
51
+ ui->simpleOutPreset->addItem("Balanced", "balanced");
52
+ ui->simpleOutPreset->addItem("Quality", "quality");
53
54
+ defaultPreset = "balanced";
55
+ preset = curAMDPreset;
56
} else {
57
ui->simpleOutPreset->addItem("ultrafast", "ultrafast");
58
ui->simpleOutPreset->addItem("superfast", "superfast");
59
obs-studio-0.16.2.tar.xz/UI/window-basic-settings.hpp -> obs-studio-0.16.4.tar.xz/UI/window-basic-settings.hpp
Changed
9
1
2
QString curPreset;
3
QString curQSVPreset;
4
QString curNVENCPreset;
5
+ QString curAMDPreset;
6
7
QString curAdvStreamEncoder;
8
QString curAdvRecordEncoder;
9
obs-studio-0.16.2.tar.xz/UI/window-projector.cpp -> obs-studio-0.16.4.tar.xz/UI/window-projector.cpp
Changed
24
1
2
#include <QAction>
3
+#include <QGuiApplication>
4
#include <QMouseEvent>
5
#include <QMenu>
6
+#include <QScreen>
7
#include "window-projector.hpp"
8
#include "display-helpers.hpp"
9
#include "qt-wrappers.hpp"
10
11
12
void OBSProjector::Init(int monitor)
13
{
14
- std::vector<MonitorInfo> monitors;
15
- GetMonitors(monitors);
16
- MonitorInfo &mi = monitors[monitor];
17
-
18
- setGeometry(mi.x, mi.y, mi.cx, mi.cy);
19
+ QScreen *screen = QGuiApplication::screens()[monitor];
20
+ setGeometry(screen->geometry());
21
22
bool alwaysOnTop = config_get_bool(GetGlobalConfig(),
23
"BasicWindow", "ProjectorAlwaysOnTop");
24
obs-studio-0.16.2.tar.xz/cmake/Modules/FindFFmpeg.cmake -> obs-studio-0.16.4.tar.xz/cmake/Modules/FindFFmpeg.cmake
Changed
19
1
2
${DepsPath${_lib_suffix}}
3
${DepsPath}
4
${PC_FFMPEG_${component}_INCLUDE_DIRS}
5
+ PATHS
6
+ /usr/include /usr/local/include /opt/local/include /sw/include
7
PATH_SUFFIXES ffmpeg libav include)
8
9
find_library(FFMPEG_${component}_LIBRARY
10
11
${DepsPath${_lib_suffix}}
12
${DepsPath}
13
${PC_FFMPEG_${component}_LIBRARY_DIRS}
14
+ PATHS
15
+ /usr/lib /usr/local/lib /opt/local/lib /sw/lib
16
PATH_SUFFIXES
17
lib${_lib_suffix} lib
18
libs${_lib_suffix} libs
19
obs-studio-0.16.2.tar.xz/cmake/Modules/ObsCpack.cmake -> obs-studio-0.16.4.tar.xz/cmake/Modules/ObsCpack.cmake
Changed
9
1
2
set(CPACK_PACKAGE_NAME "OBS")
3
set(CPACK_PACKAGE_VENDOR "obsproject.com")
4
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "OBS - Live video and audio streaming and recording software")
5
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/UI/data/license/gplv2.txt")
6
7
set(CPACK_PACKAGE_VERSION_MAJOR "0")
8
set(CPACK_PACKAGE_VERSION_MINOR "0")
9
obs-studio-0.16.2.tar.xz/cmake/winrc/obs-studio.ico -> obs-studio-0.16.4.tar.xz/cmake/winrc/obs-studio.ico
Changed
obs-studio-0.16.2.tar.xz/libobs-d3d11/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/libobs-d3d11/CMakeLists.txt
Changed
9
1
2
d3d11-texture2d.cpp
3
d3d11-vertexbuffer.cpp
4
d3d11-duplicator.cpp
5
+ d3d11-rebuild.cpp
6
d3d11-zstencilbuffer.cpp)
7
8
set(libobs-d3d11_HEADERS
9
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-duplicator.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-duplicator.cpp
Changed
55
1
2
static inline bool get_monitor(gs_device_t *device, int monitor_idx,
3
IDXGIOutput **dxgiOutput)
4
{
5
- ComPtr<IDXGIAdapter> dxgiAdapter;
6
- ComPtr<IDXGIDevice> dxgiDevice;
7
HRESULT hr;
8
9
- hr = device->device->QueryInterface(__uuidof(IDXGIDevice),
10
- (void**)dxgiDevice.Assign());
11
- if (FAILED(hr))
12
- throw HRError("Failed to query IDXGIDevice", hr);
13
-
14
- hr = dxgiDevice->GetAdapter(dxgiAdapter.Assign());
15
- if (FAILED(hr))
16
- throw HRError("Failed to get adapter", hr);
17
-
18
- hr = dxgiAdapter->EnumOutputs(monitor_idx, dxgiOutput);
19
+ hr = device->adapter->EnumOutputs(monitor_idx, dxgiOutput);
20
if (FAILED(hr)) {
21
if (hr == DXGI_ERROR_NOT_FOUND)
22
return false;
23
24
return true;
25
}
26
27
-gs_duplicator::gs_duplicator(gs_device_t *device_, int monitor_idx)
28
- : texture(nullptr), device(device_)
29
+void gs_duplicator::Start()
30
{
31
ComPtr<IDXGIOutput1> output1;
32
ComPtr<IDXGIOutput> output;
33
HRESULT hr;
34
35
- if (!get_monitor(device, monitor_idx, output.Assign()))
36
+ if (!get_monitor(device, idx, output.Assign()))
37
throw "Invalid monitor index";
38
39
hr = output->QueryInterface(__uuidof(IDXGIOutput1),
40
41
throw HRError("Failed to duplicate output", hr);
42
}
43
44
+gs_duplicator::gs_duplicator(gs_device_t *device_, int monitor_idx)
45
+ : gs_obj (device_, gs_type::gs_duplicator),
46
+ texture (nullptr),
47
+ idx (monitor_idx)
48
+{
49
+ Start();
50
+}
51
+
52
gs_duplicator::~gs_duplicator()
53
{
54
delete texture;
55
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-indexbuffer.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-indexbuffer.cpp
Changed
19
1
2
3
void gs_index_buffer::InitBuffer()
4
{
5
- D3D11_BUFFER_DESC bd;
6
- D3D11_SUBRESOURCE_DATA srd;
7
HRESULT hr;
8
9
memset(&bd, 0, sizeof(bd));
10
11
12
gs_index_buffer::gs_index_buffer(gs_device_t *device, enum gs_index_type type,
13
void *indices, size_t num, uint32_t flags)
14
- : device (device),
15
+ : gs_obj (device, gs_type::gs_index_buffer),
16
dynamic ((flags & GS_DYNAMIC) != 0),
17
type (type),
18
num (num),
19
obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-rebuild.cpp
Added
315
1
2
+/******************************************************************************
3
+ Copyright (C) 2016 by Hugh Bailey <obs.jim@gmail.com>
4
+
5
+ This program is free software: you can redistribute it and/or modify
6
+ it under the terms of the GNU General Public License as published by
7
+ the Free Software Foundation, either version 2 of the License, or
8
+ (at your option) any later version.
9
+
10
+ This program is distributed in the hope that it will be useful,
11
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License
16
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
17
+******************************************************************************/
18
+
19
+#include "d3d11-subsystem.hpp"
20
+
21
+inline void gs_vertex_buffer::Rebuild()
22
+{
23
+ uvBuffers.clear();
24
+ uvSizes.clear();
25
+ BuildBuffers();
26
+}
27
+
28
+inline void gs_index_buffer::Rebuild(ID3D11Device *dev)
29
+{
30
+ HRESULT hr = dev->CreateBuffer(&bd, &srd, &indexBuffer);
31
+ if (FAILED(hr))
32
+ throw HRError("Failed to create buffer", hr);
33
+}
34
+
35
+inline void gs_texture_2d::Rebuild(ID3D11Device *dev)
36
+{
37
+ HRESULT hr;
38
+ if (isShared) {
39
+ hr = dev->OpenSharedResource((HANDLE)(uintptr_t)sharedHandle,
40
+ __uuidof(ID3D11Texture2D), (void**)&texture);
41
+ if (FAILED(hr))
42
+ throw HRError("Failed to open shared 2D texture", hr);
43
+ } else {
44
+ hr = dev->CreateTexture2D(&td,
45
+ data.size() ? srd.data() : nullptr,
46
+ &texture);
47
+ if (FAILED(hr))
48
+ throw HRError("Failed to create 2D texture", hr);
49
+ }
50
+
51
+ hr = dev->CreateShaderResourceView(texture, &resourceDesc, &shaderRes);
52
+ if (FAILED(hr))
53
+ throw HRError("Failed to create resource view", hr);
54
+
55
+ if (isRenderTarget)
56
+ InitRenderTargets();
57
+}
58
+
59
+inline void gs_zstencil_buffer::Rebuild(ID3D11Device *dev)
60
+{
61
+ HRESULT hr;
62
+ hr = dev->CreateTexture2D(&td, nullptr, &texture);
63
+ if (FAILED(hr))
64
+ throw HRError("Failed to create depth stencil texture", hr);
65
+
66
+ hr = dev->CreateDepthStencilView(texture, &dsvd, &view);
67
+ if (FAILED(hr))
68
+ throw HRError("Failed to create depth stencil view", hr);
69
+}
70
+
71
+inline void gs_stage_surface::Rebuild(ID3D11Device *dev)
72
+{
73
+ HRESULT hr = dev->CreateTexture2D(&td, nullptr, &texture);
74
+ if (FAILED(hr))
75
+ throw HRError("Failed to create staging surface", hr);
76
+}
77
+
78
+inline void gs_sampler_state::Rebuild(ID3D11Device *dev)
79
+{
80
+ HRESULT hr = dev->CreateSamplerState(&sd, state.Assign());
81
+ if (FAILED(hr))
82
+ throw HRError("Failed to create sampler state", hr);
83
+}
84
+
85
+inline void gs_vertex_shader::Rebuild(ID3D11Device *dev)
86
+{
87
+ HRESULT hr;
88
+ hr = dev->CreateVertexShader(data.data(), data.size(), nullptr, &shader);
89
+ if (FAILED(hr))
90
+ throw HRError("Failed to create vertex shader", hr);
91
+
92
+ hr = dev->CreateInputLayout(layoutData.data(), (UINT)layoutData.size(),
93
+ data.data(), data.size(), &layout);
94
+ if (FAILED(hr))
95
+ throw HRError("Failed to create input layout", hr);
96
+
97
+ if (constantSize) {
98
+ hr = dev->CreateBuffer(&bd, NULL, &constants);
99
+ if (FAILED(hr))
100
+ throw HRError("Failed to create constant buffer", hr);
101
+ }
102
+
103
+ for (gs_shader_param ¶m : params) {
104
+ param.nextSampler = nullptr;
105
+ param.curValue.clear();
106
+ gs_shader_set_default(¶m);
107
+ }
108
+}
109
+
110
+inline void gs_pixel_shader::Rebuild(ID3D11Device *dev)
111
+{
112
+ HRESULT hr;
113
+
114
+ hr = dev->CreatePixelShader(data.data(), data.size(), nullptr,
115
+ &shader);
116
+ if (FAILED(hr))
117
+ throw HRError("Failed to create pixel shader", hr);
118
+
119
+ if (constantSize) {
120
+ hr = dev->CreateBuffer(&bd, NULL, &constants);
121
+ if (FAILED(hr))
122
+ throw HRError("Failed to create constant buffer", hr);
123
+ }
124
+
125
+ for (gs_shader_param ¶m : params) {
126
+ param.nextSampler = nullptr;
127
+ param.curValue.clear();
128
+ gs_shader_set_default(¶m);
129
+ }
130
+}
131
+
132
+inline void gs_swap_chain::Rebuild(ID3D11Device *dev)
133
+{
134
+ HRESULT hr = device->factory->CreateSwapChain(dev, &swapDesc, &swap);
135
+ if (FAILED(hr))
136
+ throw HRError("Failed to create swap chain", hr);
137
+ Init();
138
+}
139
+
140
+inline void SavedBlendState::Rebuild(ID3D11Device *dev)
141
+{
142
+ HRESULT hr = dev->CreateBlendState(&bd, &state);
143
+ if (FAILED(hr))
144
+ throw HRError("Failed to create blend state", hr);
145
+}
146
+
147
+inline void SavedZStencilState::Rebuild(ID3D11Device *dev)
148
+{
149
+ HRESULT hr = dev->CreateDepthStencilState(&dsd, &state);
150
+ if (FAILED(hr))
151
+ throw HRError("Failed to create depth stencil state", hr);
152
+}
153
+
154
+inline void SavedRasterState::Rebuild(ID3D11Device *dev)
155
+{
156
+ HRESULT hr = dev->CreateRasterizerState(&rd, &state);
157
+ if (FAILED(hr))
158
+ throw HRError("Failed to create rasterizer state", hr);
159
+}
160
+
161
+const static D3D_FEATURE_LEVEL featureLevels[] =
162
+{
163
+ D3D_FEATURE_LEVEL_11_0,
164
+ D3D_FEATURE_LEVEL_10_1,
165
+ D3D_FEATURE_LEVEL_10_0,
166
+ D3D_FEATURE_LEVEL_9_3,
167
+};
168
+
169
+void gs_device::RebuildDevice()
170
+try {
171
+ ID3D11Device *dev = nullptr;
172
+ HRESULT hr;
173
+
174
+ blog(LOG_WARNING, "Device Remove/Reset! Rebuilding all assets...");
175
+
176
+ /* ----------------------------------------------------------------- */
177
+
178
+ gs_obj *obj = first_obj;
179
+
180
+ while (obj) {
181
+ switch (obj->obj_type) {
182
+ case gs_type::gs_vertex_buffer:
183
+ ((gs_vertex_buffer*)obj)->Release();
184
+ break;
185
+ case gs_type::gs_index_buffer:
186
+ ((gs_index_buffer*)obj)->Release();
187
+ break;
188
+ case gs_type::gs_texture_2d:
189
+ ((gs_texture_2d*)obj)->Release();
190
+ break;
191
+ case gs_type::gs_zstencil_buffer:
192
+ ((gs_zstencil_buffer*)obj)->Release();
193
+ break;
194
+ case gs_type::gs_stage_surface:
195
+ ((gs_stage_surface*)obj)->Release();
196
+ break;
197
+ case gs_type::gs_sampler_state:
198
+ ((gs_sampler_state*)obj)->Release();
199
+ break;
200
+ case gs_type::gs_vertex_shader:
201
+ ((gs_vertex_shader*)obj)->Release();
202
+ break;
203
+ case gs_type::gs_pixel_shader:
204
+ ((gs_pixel_shader*)obj)->Release();
205
+ break;
206
+ case gs_type::gs_duplicator:
207
+ ((gs_duplicator*)obj)->Release();
208
+ break;
209
+ case gs_type::gs_swap_chain:
210
+ ((gs_swap_chain*)obj)->Release();
211
+ break;
212
+ }
213
+
214
+ obj = obj->next;
215
+ }
216
+
217
+ for (auto &state : zstencilStates)
218
+ state.Release();
219
+ for (auto &state : rasterStates)
220
+ state.Release();
221
+ for (auto &state : blendStates)
222
+ state.Release();
223
+
224
+ context->ClearState();
225
+
226
+ context.Release();
227
+ device.Release();
228
+ adapter.Release();
229
+ factory.Release();
230
+
231
+ /* ----------------------------------------------------------------- */
232
+
233
+ InitFactory(adpIdx);
234
+
235
+ uint32_t createFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
236
+ hr = D3D11CreateDevice(adapter, D3D_DRIVER_TYPE_UNKNOWN,
237
+ nullptr, createFlags, featureLevels,
238
+ sizeof(featureLevels) / sizeof(D3D_FEATURE_LEVEL),
239
+ D3D11_SDK_VERSION, &device, nullptr, &context);
240
+ if (FAILED(hr))
241
+ throw HRError("Failed to create device", hr);
242
+
243
+ dev = device;
244
+
245
+ obj = first_obj;
246
+ while (obj) {
247
+ switch (obj->obj_type) {
248
+ case gs_type::gs_vertex_buffer:
249
+ ((gs_vertex_buffer*)obj)->Rebuild();
250
+ break;
251
+ case gs_type::gs_index_buffer:
252
+ ((gs_index_buffer*)obj)->Rebuild(dev);
253
+ break;
254
+ case gs_type::gs_texture_2d:
255
+ ((gs_texture_2d*)obj)->Rebuild(dev);
256
+ break;
257
+ case gs_type::gs_zstencil_buffer:
258
+ ((gs_zstencil_buffer*)obj)->Rebuild(dev);
259
+ break;
260
+ case gs_type::gs_stage_surface:
261
+ ((gs_stage_surface*)obj)->Rebuild(dev);
262
+ break;
263
+ case gs_type::gs_sampler_state:
264
+ ((gs_sampler_state*)obj)->Rebuild(dev);
265
+ break;
266
+ case gs_type::gs_vertex_shader:
267
+ ((gs_vertex_shader*)obj)->Rebuild(dev);
268
+ break;
269
+ case gs_type::gs_pixel_shader:
270
+ ((gs_pixel_shader*)obj)->Rebuild(dev);
271
+ break;
272
+ case gs_type::gs_duplicator:
273
+ ((gs_duplicator*)obj)->Start();
274
+ break;
275
+ case gs_type::gs_swap_chain:
276
+ ((gs_swap_chain*)obj)->Rebuild(dev);
277
+ break;
278
+ }
279
+
280
+ obj = obj->next;
281
+ }
282
+
283
+ curRenderTarget = nullptr;
284
+ curZStencilBuffer = nullptr;
285
+ curRenderSide = 0;
286
+ memset(&curTextures, 0, sizeof(curTextures));
287
+ memset(&curSamplers, 0, sizeof(curSamplers));
288
+ curVertexBuffer = nullptr;
289
+ curIndexBuffer = nullptr;
290
+ curVertexShader = nullptr;
291
+ curPixelShader = nullptr;
292
+ curSwapChain = nullptr;
293
+ zstencilStateChanged = true;
294
+ rasterStateChanged = true;
295
+ blendStateChanged = true;
296
+ curDepthStencilState = nullptr;
297
+ curRasterState = nullptr;
298
+ curBlendState = nullptr;
299
+ curToplogy = D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED;
300
+
301
+ for (auto &state : zstencilStates)
302
+ state.Rebuild(dev);
303
+ for (auto &state : rasterStates)
304
+ state.Rebuild(dev);
305
+ for (auto &state : blendStates)
306
+ state.Rebuild(dev);
307
+
308
+} catch (const char *error) {
309
+ bcrash("Failed to recreate D3D11: %s", error);
310
+
311
+} catch (HRError error) {
312
+ bcrash("Failed to recreate D3D11: %s (%08lX)",
313
+ error.str, error.hr);
314
+}
315
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-samplerstate.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-samplerstate.cpp
Changed
13
1
2
3
gs_sampler_state::gs_sampler_state(gs_device_t *device,
4
const gs_sampler_info *info)
5
- : device (device),
6
+ : gs_obj (device, gs_type::gs_sampler_state),
7
info (*info)
8
{
9
- D3D11_SAMPLER_DESC sd;
10
HRESULT hr;
11
vec4 v4;
12
13
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-shader.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-shader.cpp
Changed
87
1
2
3
gs_vertex_shader::gs_vertex_shader(gs_device_t *device, const char *file,
4
const char *shaderString)
5
- : gs_shader (device, GS_SHADER_VERTEX),
6
+ : gs_shader (device, gs_type::gs_vertex_shader, GS_SHADER_VERTEX),
7
hasNormals (false),
8
hasColors (false),
9
hasTangents (false),
10
nTexUnits (0)
11
{
12
- vector<D3D11_INPUT_ELEMENT_DESC> inputs;
13
ShaderProcessor processor(device);
14
ComPtr<ID3D10Blob> shaderBlob;
15
string outputString;
16
17
processor.Process(shaderString, file);
18
processor.BuildString(outputString);
19
processor.BuildParams(params);
20
- processor.BuildInputLayout(inputs);
21
- GetBuffersExpected(inputs);
22
+ processor.BuildInputLayout(layoutData);
23
+ GetBuffersExpected(layoutData);
24
BuildConstantBuffer();
25
26
Compile(outputString.c_str(), file, "vs_4_0", shaderBlob.Assign());
27
28
- hr = device->device->CreateVertexShader(shaderBlob->GetBufferPointer(),
29
- shaderBlob->GetBufferSize(), NULL, shader.Assign());
30
+ data.resize(shaderBlob->GetBufferSize());
31
+ memcpy(&data[0], shaderBlob->GetBufferPointer(), data.size());
32
+
33
+ hr = device->device->CreateVertexShader(data.data(), data.size(),
34
+ NULL, shader.Assign());
35
if (FAILED(hr))
36
throw HRError("Failed to create vertex shader", hr);
37
38
- hr = device->device->CreateInputLayout(inputs.data(),
39
- (UINT)inputs.size(), shaderBlob->GetBufferPointer(),
40
- shaderBlob->GetBufferSize(), layout.Assign());
41
+ hr = device->device->CreateInputLayout(layoutData.data(),
42
+ (UINT)layoutData.size(),
43
+ data.data(), data.size(), layout.Assign());
44
if (FAILED(hr))
45
throw HRError("Failed to create input layout", hr);
46
47
48
49
gs_pixel_shader::gs_pixel_shader(gs_device_t *device, const char *file,
50
const char *shaderString)
51
- : gs_shader(device, GS_SHADER_PIXEL)
52
+ : gs_shader(device, gs_type::gs_pixel_shader, GS_SHADER_PIXEL)
53
{
54
ShaderProcessor processor(device);
55
ComPtr<ID3D10Blob> shaderBlob;
56
57
58
Compile(outputString.c_str(), file, "ps_4_0", shaderBlob.Assign());
59
60
- hr = device->device->CreatePixelShader(shaderBlob->GetBufferPointer(),
61
- shaderBlob->GetBufferSize(), NULL, shader.Assign());
62
+ data.resize(shaderBlob->GetBufferSize());
63
+ memcpy(&data[0], shaderBlob->GetBufferPointer(), data.size());
64
+
65
+ hr = device->device->CreatePixelShader(data.data(), data.size(),
66
+ NULL, shader.Assign());
67
if (FAILED(hr))
68
- throw HRError("Failed to create vertex shader", hr);
69
+ throw HRError("Failed to create pixel shader", hr);
70
}
71
72
/*
73
74
constantSize += size;
75
}
76
77
+ memset(&bd, 0, sizeof(bd));
78
+
79
if (constantSize) {
80
- D3D11_BUFFER_DESC bd;
81
HRESULT hr;
82
83
- memset(&bd, 0, sizeof(bd));
84
bd.ByteWidth = (constantSize+15)&0xFFFFFFF0; /* align */
85
bd.Usage = D3D11_USAGE_DYNAMIC;
86
bd.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
87
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-shaderprocessor.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-shaderprocessor.cpp
Changed
19
1
2
}
3
4
static inline void AddSampler(gs_device_t *device, shader_sampler &sampler,
5
- vector<ShaderSampler> &samplers)
6
+ vector<unique_ptr<ShaderSampler>> &samplers)
7
{
8
gs_sampler_info si;
9
shader_sampler_convert(&sampler, &si);
10
- samplers.push_back(ShaderSampler(sampler.name, device, &si));
11
+ samplers.emplace_back(new ShaderSampler(sampler.name, device, &si));
12
}
13
14
-void ShaderProcessor::BuildSamplers(vector<ShaderSampler> &samplers)
15
+void ShaderProcessor::BuildSamplers(vector<unique_ptr<ShaderSampler>> &samplers)
16
{
17
for (size_t i = 0; i < parser.samplers.num; i++)
18
AddSampler(device, parser.samplers.array[i], samplers);
19
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-shaderprocessor.hpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-shaderprocessor.hpp
Changed
10
1
2
3
void BuildInputLayout(vector<D3D11_INPUT_ELEMENT_DESC> &inputs);
4
void BuildParams(vector<gs_shader_param> ¶ms);
5
- void BuildSamplers(vector<ShaderSampler> &samplers);
6
+ void BuildSamplers(vector<unique_ptr<ShaderSampler>> &samplers);
7
void BuildString(string &outputString);
8
void Process(const char *shader_string, const char *file);
9
10
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-stagesurf.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-stagesurf.cpp
Changed
23
1
2
3
gs_stage_surface::gs_stage_surface(gs_device_t *device, uint32_t width,
4
uint32_t height, gs_color_format colorFormat)
5
- : device (device),
6
+ : gs_obj (device, gs_type::gs_stage_surface),
7
width (width),
8
height (height),
9
format (colorFormat),
10
dxgiFormat (ConvertGSTextureFormat(colorFormat))
11
{
12
- D3D11_TEXTURE2D_DESC td;
13
HRESULT hr;
14
15
memset(&td, 0, sizeof(td));
16
17
18
hr = device->device->CreateTexture2D(&td, NULL, texture.Assign());
19
if (FAILED(hr))
20
- throw HRError("Failed to create 2D texture", hr);
21
+ throw HRError("Failed to create staging surface", hr);
22
}
23
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-subsystem.cpp
Changed
341
1
2
#pragma warning (disable : 4316)
3
#endif
4
5
+static inline void LogD3D11ErrorDetails(HRError error, gs_device_t *device)
6
+{
7
+ if (error.hr == DXGI_ERROR_DEVICE_REMOVED) {
8
+ HRESULT DeviceRemovedReason =
9
+ device->device->GetDeviceRemovedReason();
10
+ blog(LOG_ERROR, " Device Removed Reason: %08lX",
11
+ DeviceRemovedReason);
12
+ }
13
+}
14
+
15
static const IID dxgiFactory2 =
16
{0x50c83a1c, 0xe072, 0x4c48, {0x87, 0xb0, 0x36, 0x30, 0xfa, 0x36, 0xa6, 0xd0}};
17
18
+
19
+gs_obj::gs_obj(gs_device_t *device_, gs_type type) :
20
+ device (device_),
21
+ obj_type (type)
22
+{
23
+ prev_next = &device->first_obj;
24
+ next = device->first_obj;
25
+ device->first_obj = this;
26
+ if (next)
27
+ next->prev_next = &next;
28
+}
29
+
30
+gs_obj::~gs_obj()
31
+{
32
+ if (prev_next)
33
+ *prev_next = next;
34
+ if (next)
35
+ next->prev_next = prev_next;
36
+}
37
+
38
static inline void make_swap_desc(DXGI_SWAP_CHAIN_DESC &desc,
39
const gs_init_data *data)
40
{
41
42
zs.texture.Clear();
43
zs.view.Clear();
44
45
+ initData.cx = cx;
46
+ initData.cy = cy;
47
+
48
if (cx == 0 || cy == 0) {
49
GetClientRect(hwnd, &clientRect);
50
if (cx == 0) cx = clientRect.right;
51
52
InitZStencilBuffer(cx, cy);
53
}
54
55
-void gs_swap_chain::Init(const gs_init_data *data)
56
+void gs_swap_chain::Init()
57
{
58
target.device = device;
59
target.isRenderTarget = true;
60
- target.format = data->format;
61
- target.dxgiFormat = ConvertGSTextureFormat(data->format);
62
- InitTarget(data->cx, data->cy);
63
+ target.format = initData.format;
64
+ target.dxgiFormat = ConvertGSTextureFormat(initData.format);
65
+ InitTarget(initData.cx, initData.cy);
66
67
zs.device = device;
68
- zs.format = data->zsformat;
69
- zs.dxgiFormat = ConvertGSZStencilFormat(data->zsformat);
70
- InitZStencilBuffer(data->cx, data->cy);
71
+ zs.format = initData.zsformat;
72
+ zs.dxgiFormat = ConvertGSZStencilFormat(initData.zsformat);
73
+ InitZStencilBuffer(initData.cx, initData.cy);
74
}
75
76
gs_swap_chain::gs_swap_chain(gs_device *device, const gs_init_data *data)
77
- : device (device),
78
+ : gs_obj (device, gs_type::gs_swap_chain),
79
numBuffers (data->num_backbuffers),
80
- hwnd ((HWND)data->window.hwnd)
81
+ hwnd ((HWND)data->window.hwnd),
82
+ initData (*data)
83
{
84
HRESULT hr;
85
- DXGI_SWAP_CHAIN_DESC swapDesc;
86
87
make_swap_desc(swapDesc, data);
88
hr = device->factory->CreateSwapChain(device->device, &swapDesc,
89
90
if (FAILED(hr))
91
throw HRError("Failed to create swap chain", hr);
92
93
- Init(data);
94
+ Init();
95
}
96
97
void gs_device::InitCompiler()
98
99
throw "Could not find any D3DCompiler libraries";
100
}
101
102
-void gs_device::InitFactory(uint32_t adapterIdx, IDXGIAdapter1 **padapter)
103
+void gs_device::InitFactory(uint32_t adapterIdx)
104
{
105
HRESULT hr;
106
IID factoryIID = (GetWinVer() >= 0x602) ? dxgiFactory2 :
107
108
if (FAILED(hr))
109
throw UnsupportedHWError("Failed to create DXGIFactory", hr);
110
111
- hr = factory->EnumAdapters1(adapterIdx, padapter);
112
+ hr = factory->EnumAdapters1(adapterIdx, &adapter);
113
if (FAILED(hr))
114
throw UnsupportedHWError("Failed to enumerate DXGIAdapter", hr);
115
}
116
117
D3D_FEATURE_LEVEL_9_3,
118
};
119
120
-void gs_device::InitDevice(uint32_t adapterIdx, IDXGIAdapter *adapter)
121
+void gs_device::InitDevice(uint32_t adapterIdx)
122
{
123
wstring adapterName;
124
DXGI_ADAPTER_DESC desc;
125
D3D_FEATURE_LEVEL levelUsed = D3D_FEATURE_LEVEL_9_3;
126
HRESULT hr = 0;
127
128
+ adpIdx = adapterIdx;
129
+
130
uint32_t createFlags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
131
#ifdef _DEBUG
132
//createFlags |= D3D11_CREATE_DEVICE_DEBUG;
133
134
{
135
HRESULT hr;
136
D3D11_DEPTH_STENCIL_DESC dsd;
137
- SavedZStencilState savedState(zstencilState);
138
ID3D11DepthStencilState *state;
139
140
dsd.DepthEnable = zstencilState.depthEnabled;
141
142
ConvertStencilSide(dsd.FrontFace, zstencilState.stencilFront);
143
ConvertStencilSide(dsd.BackFace, zstencilState.stencilBack);
144
145
+ SavedZStencilState savedState(zstencilState, dsd);
146
hr = device->CreateDepthStencilState(&dsd, savedState.state.Assign());
147
if (FAILED(hr))
148
throw HRError("Failed to create depth stencil state", hr);
149
150
{
151
HRESULT hr;
152
D3D11_RASTERIZER_DESC rd;
153
- SavedRasterState savedState(rasterState);
154
ID3D11RasterizerState *state;
155
156
memset(&rd, 0, sizeof(rd));
157
158
rd.DepthClipEnable = true;
159
rd.ScissorEnable = rasterState.scissorEnabled;
160
161
+ SavedRasterState savedState(rasterState, rd);
162
hr = device->CreateRasterizerState(&rd, savedState.state.Assign());
163
if (FAILED(hr))
164
throw HRError("Failed to create rasterizer state", hr);
165
166
{
167
HRESULT hr;
168
D3D11_BLEND_DESC bd;
169
- SavedBlendState savedState(blendState);
170
ID3D11BlendState *state;
171
172
memset(&bd, 0, sizeof(bd));
173
174
D3D11_COLOR_WRITE_ENABLE_ALL;
175
}
176
177
+ SavedBlendState savedState(blendState, bd);
178
hr = device->CreateBlendState(&bd, savedState.state.Assign());
179
if (FAILED(hr))
180
- throw HRError("Failed to create disabled blend state", hr);
181
+ throw HRError("Failed to create blend state", hr);
182
183
state = savedState.state;
184
blendStates.push_back(savedState);
185
186
gs_device::gs_device(uint32_t adapterIdx)
187
: curToplogy (D3D11_PRIMITIVE_TOPOLOGY_UNDEFINED)
188
{
189
- ComPtr<IDXGIAdapter1> adapter;
190
-
191
matrix4_identity(&curProjMatrix);
192
matrix4_identity(&curViewMatrix);
193
matrix4_identity(&curViewProjMatrix);
194
195
}
196
197
InitCompiler();
198
- InitFactory(adapterIdx, adapter.Assign());
199
- InitDevice(adapterIdx, adapter);
200
+ InitFactory(adapterIdx);
201
+ InitDevice(adapterIdx);
202
device_set_render_target(this, NULL, NULL);
203
}
204
205
+gs_device::~gs_device()
206
+{
207
+ context->ClearState();
208
+}
209
+
210
const char *device_get_name(void)
211
{
212
return "Direct3D 11";
213
214
} catch (HRError error) {
215
blog(LOG_ERROR, "device_swapchain_create (D3D11): %s (%08lX)",
216
error.str, error.hr);
217
+ LogD3D11ErrorDetails(error, device);
218
}
219
220
return swap;
221
222
} catch (HRError error) {
223
blog(LOG_ERROR, "device_resize (D3D11): %s (%08lX)",
224
error.str, error.hr);
225
+ LogD3D11ErrorDetails(error, device);
226
}
227
}
228
229
230
} catch (HRError error) {
231
blog(LOG_ERROR, "device_texture_create (D3D11): %s (%08lX)",
232
error.str, error.hr);
233
+ LogD3D11ErrorDetails(error, device);
234
} catch (const char *error) {
235
blog(LOG_ERROR, "device_texture_create (D3D11): %s", error);
236
}
237
238
blog(LOG_ERROR, "device_cubetexture_create (D3D11): %s "
239
"(%08lX)",
240
error.str, error.hr);
241
+ LogD3D11ErrorDetails(error, device);
242
} catch (const char *error) {
243
blog(LOG_ERROR, "device_cubetexture_create (D3D11): %s",
244
error);
245
246
} catch (HRError error) {
247
blog(LOG_ERROR, "device_zstencil_create (D3D11): %s (%08lX)",
248
error.str, error.hr);
249
+ LogD3D11ErrorDetails(error, device);
250
}
251
252
return zstencil;
253
254
blog(LOG_ERROR, "device_stagesurface_create (D3D11): %s "
255
"(%08lX)",
256
error.str, error.hr);
257
+ LogD3D11ErrorDetails(error, device);
258
}
259
260
return surf;
261
262
blog(LOG_ERROR, "device_samplerstate_create (D3D11): %s "
263
"(%08lX)",
264
error.str, error.hr);
265
+ LogD3D11ErrorDetails(error, device);
266
}
267
268
return ss;
269
270
blog(LOG_ERROR, "device_vertexshader_create (D3D11): %s "
271
"(%08lX)",
272
error.str, error.hr);
273
+ LogD3D11ErrorDetails(error, device);
274
275
} catch (ShaderError error) {
276
const char *buf = (const char*)error.errors->GetBufferPointer();
277
278
blog(LOG_ERROR, "device_pixelshader_create (D3D11): %s "
279
"(%08lX)",
280
error.str, error.hr);
281
+ LogD3D11ErrorDetails(error, device);
282
283
} catch (ShaderError error) {
284
const char *buf = (const char*)error.errors->GetBufferPointer();
285
286
blog(LOG_ERROR, "device_vertexbuffer_create (D3D11): %s "
287
"(%08lX)",
288
error.str, error.hr);
289
+ LogD3D11ErrorDetails(error, device);
290
} catch (const char *error) {
291
blog(LOG_ERROR, "device_vertexbuffer_create (D3D11): %s",
292
error);
293
294
} catch (HRError error) {
295
blog(LOG_ERROR, "device_indexbuffer_create (D3D11): %s (%08lX)",
296
error.str, error.hr);
297
+ LogD3D11ErrorDetails(error, device);
298
}
299
300
return buffer;
301
302
} catch (HRError error) {
303
blog(LOG_ERROR, "device_draw (D3D11): %s (%08lX)", error.str,
304
error.hr);
305
+ LogD3D11ErrorDetails(error, device);
306
return;
307
}
308
309
310
311
void device_present(gs_device_t *device)
312
{
313
+ HRESULT hr;
314
+
315
if (device->curSwapChain) {
316
- device->curSwapChain->swap->Present(0, 0);
317
+ hr = device->curSwapChain->swap->Present(0, 0);
318
+ if (hr == DXGI_ERROR_DEVICE_REMOVED ||
319
+ hr == DXGI_ERROR_DEVICE_RESET) {
320
+ device->RebuildDevice();
321
+ }
322
} else {
323
blog(LOG_WARNING, "device_present (D3D11): No active swap");
324
}
325
326
} catch (HRError error) {
327
blog(LOG_ERROR, "device_texture_create_gdi (D3D11): %s (%08lX)",
328
error.str, error.hr);
329
+ LogD3D11ErrorDetails(error, device);
330
} catch (const char *error) {
331
blog(LOG_ERROR, "device_texture_create_gdi (D3D11): %s", error);
332
}
333
334
} catch (HRError error) {
335
blog(LOG_ERROR, "gs_texture_open_shared (D3D11): %s (%08lX)",
336
error.str, error.hr);
337
+ LogD3D11ErrorDetails(error, device);
338
} catch (const char *error) {
339
blog(LOG_ERROR, "gs_texture_open_shared (D3D11): %s", error);
340
}
341
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-subsystem.hpp
Changed
490
1
2
3
#include <vector>
4
#include <string>
5
+#include <memory>
6
7
#include <windows.h>
8
#include <dxgi.h>
9
10
struct VBDataPtr {
11
gs_vb_data *data;
12
13
- inline void Clear() {gs_vbdata_destroy(data); data = nullptr;}
14
-
15
inline VBDataPtr(gs_vb_data *data) : data(data) {}
16
inline ~VBDataPtr() {gs_vbdata_destroy(data);}
17
};
18
19
-struct gs_vertex_buffer {
20
+enum class gs_type {
21
+ gs_vertex_buffer,
22
+ gs_index_buffer,
23
+ gs_texture_2d,
24
+ gs_zstencil_buffer,
25
+ gs_stage_surface,
26
+ gs_sampler_state,
27
+ gs_vertex_shader,
28
+ gs_pixel_shader,
29
+ gs_duplicator,
30
+ gs_swap_chain,
31
+};
32
+
33
+struct gs_obj {
34
+ gs_device_t *device;
35
+ gs_type obj_type;
36
+ gs_obj *next;
37
+ gs_obj **prev_next;
38
+
39
+ inline gs_obj() :
40
+ device(nullptr),
41
+ next(nullptr),
42
+ prev_next(nullptr)
43
+ {}
44
+
45
+ gs_obj(gs_device_t *device, gs_type type);
46
+ virtual ~gs_obj();
47
+};
48
+
49
+struct gs_vertex_buffer : gs_obj {
50
ComPtr<ID3D11Buffer> vertexBuffer;
51
ComPtr<ID3D11Buffer> normalBuffer;
52
ComPtr<ID3D11Buffer> colorBuffer;
53
ComPtr<ID3D11Buffer> tangentBuffer;
54
vector<ComPtr<ID3D11Buffer>> uvBuffers;
55
56
- gs_device_t *device;
57
bool dynamic;
58
VBDataPtr vbd;
59
size_t numVerts;
60
61
vector<ID3D11Buffer*> &buffers,
62
vector<uint32_t> &strides);
63
64
- inline void InitBuffer(const size_t elementSize,
65
+ void InitBuffer(const size_t elementSize,
66
const size_t numVerts, void *array,
67
ID3D11Buffer **buffer);
68
69
+ void BuildBuffers();
70
+
71
+ inline void Release()
72
+ {
73
+ vertexBuffer.Release();
74
+ normalBuffer.Release();
75
+ colorBuffer.Release();
76
+ tangentBuffer.Release();
77
+ uvBuffers.clear();
78
+ }
79
+
80
+ inline void Rebuild();
81
+
82
gs_vertex_buffer(gs_device_t *device, struct gs_vb_data *data,
83
uint32_t flags);
84
};
85
86
inline ~DataPtr() {bfree(data);}
87
};
88
89
-struct gs_index_buffer {
90
+struct gs_index_buffer : gs_obj {
91
ComPtr<ID3D11Buffer> indexBuffer;
92
- gs_device_t *device;
93
bool dynamic;
94
gs_index_type type;
95
size_t indexSize;
96
size_t num;
97
DataPtr indices;
98
99
+ D3D11_BUFFER_DESC bd = {};
100
+ D3D11_SUBRESOURCE_DATA srd = {};
101
+
102
void InitBuffer();
103
104
+ inline void Rebuild(ID3D11Device *dev);
105
+
106
+ inline void Release() {indexBuffer.Release();}
107
+
108
gs_index_buffer(gs_device_t *device, enum gs_index_type type,
109
void *indices, size_t num, uint32_t flags);
110
};
111
112
-struct gs_texture {
113
+struct gs_texture : gs_obj {
114
gs_texture_type type;
115
- gs_device *device;
116
uint32_t levels;
117
gs_color_format format;
118
119
ComPtr<ID3D11ShaderResourceView> shaderRes;
120
+ D3D11_SHADER_RESOURCE_VIEW_DESC resourceDesc = {};
121
122
- inline gs_texture() {}
123
+ inline void Rebuild(ID3D11Device *dev);
124
125
- inline gs_texture(gs_device *device, gs_texture_type type,
126
- uint32_t levels, gs_color_format format)
127
+ inline gs_texture(gs_texture_type type, uint32_t levels,
128
+ gs_color_format format)
129
: type (type),
130
- device (device),
131
levels (levels),
132
format (format)
133
{
134
}
135
136
- virtual ~gs_texture() {}
137
+ inline gs_texture(gs_device *device, gs_type obj_type,
138
+ gs_texture_type type)
139
+ : gs_obj (device, obj_type),
140
+ type (type)
141
+ {
142
+ }
143
+
144
+ inline gs_texture(gs_device *device, gs_type obj_type,
145
+ gs_texture_type type,
146
+ uint32_t levels, gs_color_format format)
147
+ : gs_obj (device, obj_type),
148
+ type (type),
149
+ levels (levels),
150
+ format (format)
151
+ {
152
+ }
153
};
154
155
struct gs_texture_2d : gs_texture {
156
157
bool genMipmaps = false;
158
uint32_t sharedHandle = 0;
159
160
- void InitSRD(vector<D3D11_SUBRESOURCE_DATA> &srd, const uint8_t **data);
161
+ vector<vector<uint8_t>> data;
162
+ vector<D3D11_SUBRESOURCE_DATA> srd;
163
+ D3D11_TEXTURE2D_DESC td = {};
164
+
165
+ void InitSRD(vector<D3D11_SUBRESOURCE_DATA> &srd);
166
void InitTexture(const uint8_t **data);
167
void InitResourceView();
168
void InitRenderTargets();
169
+ void BackupTexture(const uint8_t **data);
170
+
171
+ inline void Rebuild(ID3D11Device *dev);
172
+
173
+ inline void Release()
174
+ {
175
+ texture.Release();
176
+ for (auto &rt : renderTarget)
177
+ rt.Release();
178
+ gdiSurface.Release();
179
+ shaderRes.Release();
180
+ }
181
182
inline gs_texture_2d()
183
- : gs_texture (NULL, GS_TEXTURE_2D, 0, GS_UNKNOWN)
184
+ : gs_texture (GS_TEXTURE_2D, 0, GS_UNKNOWN)
185
{
186
}
187
188
189
gs_texture_2d(gs_device_t *device, uint32_t handle);
190
};
191
192
-struct gs_zstencil_buffer {
193
+struct gs_zstencil_buffer : gs_obj {
194
ComPtr<ID3D11Texture2D> texture;
195
ComPtr<ID3D11DepthStencilView> view;
196
197
- gs_device *device;
198
uint32_t width, height;
199
gs_zstencil_format format;
200
DXGI_FORMAT dxgiFormat;
201
202
+ D3D11_TEXTURE2D_DESC td = {};
203
+ D3D11_DEPTH_STENCIL_VIEW_DESC dsvd = {};
204
+
205
void InitBuffer();
206
207
+ inline void Rebuild(ID3D11Device *dev);
208
+
209
+ inline void Release()
210
+ {
211
+ texture.Release();
212
+ view.Release();
213
+ }
214
+
215
inline gs_zstencil_buffer()
216
- : device (NULL),
217
- width (0),
218
+ : width (0),
219
height (0),
220
dxgiFormat (DXGI_FORMAT_UNKNOWN)
221
{
222
223
gs_zstencil_format format);
224
};
225
226
-struct gs_stage_surface {
227
+struct gs_stage_surface : gs_obj {
228
ComPtr<ID3D11Texture2D> texture;
229
+ D3D11_TEXTURE2D_DESC td = {};
230
231
- gs_device *device;
232
uint32_t width, height;
233
gs_color_format format;
234
DXGI_FORMAT dxgiFormat;
235
236
+ inline void Rebuild(ID3D11Device *dev);
237
+
238
+ inline void Release()
239
+ {
240
+ texture.Release();
241
+ }
242
+
243
gs_stage_surface(gs_device_t *device, uint32_t width, uint32_t height,
244
gs_color_format colorFormat);
245
};
246
247
-struct gs_sampler_state {
248
+struct gs_sampler_state : gs_obj {
249
ComPtr<ID3D11SamplerState> state;
250
- gs_device_t *device;
251
+ D3D11_SAMPLER_DESC sd = {};
252
gs_sampler_info info;
253
254
+ inline void Rebuild(ID3D11Device *dev);
255
+
256
+ inline void Release() {state.Release();}
257
+
258
gs_sampler_state(gs_device_t *device, const gs_sampler_info *info);
259
};
260
261
262
}
263
};
264
265
-struct gs_shader {
266
- gs_device_t *device;
267
+struct gs_shader : gs_obj {
268
gs_shader_type type;
269
vector<gs_shader_param> params;
270
ComPtr<ID3D11Buffer> constants;
271
size_t constantSize;
272
273
+ D3D11_BUFFER_DESC bd = {};
274
+ vector<uint8_t> data;
275
+
276
inline void UpdateParam(vector<uint8_t> &constData,
277
gs_shader_param ¶m, bool &upload);
278
void UploadParams();
279
280
void Compile(const char *shaderStr, const char *file,
281
const char *target, ID3D10Blob **shader);
282
283
- inline gs_shader(gs_device_t *device, gs_shader_type type)
284
- : device (device),
285
+ inline gs_shader(gs_device_t *device, gs_type obj_type,
286
+ gs_shader_type type)
287
+ : gs_obj (device, obj_type),
288
type (type),
289
constantSize (0)
290
{
291
292
293
gs_shader_param *world, *viewProj;
294
295
+ vector<D3D11_INPUT_ELEMENT_DESC> layoutData;
296
+
297
bool hasNormals;
298
bool hasColors;
299
bool hasTangents;
300
uint32_t nTexUnits;
301
302
+ inline void Rebuild(ID3D11Device *dev);
303
+
304
+ inline void Release()
305
+ {
306
+ shader.Release();
307
+ layout.Release();
308
+ constants.Release();
309
+ }
310
+
311
inline uint32_t NumBuffersExpected() const
312
{
313
uint32_t count = nTexUnits+1;
314
315
const char *shaderString);
316
};
317
318
-struct gs_duplicator {
319
+struct gs_duplicator : gs_obj {
320
ComPtr<IDXGIOutputDuplication> duplicator;
321
gs_texture_2d *texture;
322
- gs_device_t *device;
323
+ int idx;
324
+
325
+ void Start();
326
+
327
+ inline void Release()
328
+ {
329
+ duplicator.Release();
330
+ }
331
332
gs_duplicator(gs_device_t *device, int monitor_idx);
333
~gs_duplicator();
334
335
336
struct gs_pixel_shader : gs_shader {
337
ComPtr<ID3D11PixelShader> shader;
338
- vector<ShaderSampler> samplers;
339
+ vector<unique_ptr<ShaderSampler>> samplers;
340
+
341
+ inline void Rebuild(ID3D11Device *dev);
342
+
343
+ inline void Release()
344
+ {
345
+ shader.Release();
346
+ constants.Release();
347
+ }
348
349
inline void GetSamplerStates(ID3D11SamplerState **states)
350
{
351
size_t i;
352
for (i = 0; i < samplers.size(); i++)
353
- states[i] = samplers[i].sampler.state;
354
+ states[i] = samplers[i]->sampler.state;
355
for (; i < GS_MAX_TEXTURES; i++)
356
states[i] = NULL;
357
}
358
359
const char *shaderString);
360
};
361
362
-struct gs_swap_chain {
363
- gs_device *device;
364
+struct gs_swap_chain : gs_obj {
365
uint32_t numBuffers;
366
HWND hwnd;
367
+ gs_init_data initData;
368
+ DXGI_SWAP_CHAIN_DESC swapDesc = {};
369
370
gs_texture_2d target;
371
gs_zstencil_buffer zs;
372
373
void InitTarget(uint32_t cx, uint32_t cy);
374
void InitZStencilBuffer(uint32_t cx, uint32_t cy);
375
void Resize(uint32_t cx, uint32_t cy);
376
- void Init(const gs_init_data *data);
377
+ void Init();
378
+
379
+ inline void Rebuild(ID3D11Device *dev);
380
381
- inline gs_swap_chain()
382
- : device (NULL),
383
- numBuffers (0),
384
- hwnd (NULL)
385
+ inline void Release()
386
{
387
+ target.Release();
388
+ zs.Release();
389
+ swap.Release();
390
}
391
392
gs_swap_chain(gs_device *device, const gs_init_data *data);
393
394
395
struct SavedBlendState : BlendState {
396
ComPtr<ID3D11BlendState> state;
397
+ D3D11_BLEND_DESC bd;
398
399
- inline SavedBlendState(const BlendState &val) : BlendState(val)
400
+ inline void Rebuild(ID3D11Device *dev);
401
+
402
+ inline void Release()
403
+ {
404
+ state.Release();
405
+ }
406
+
407
+ inline SavedBlendState(const BlendState &val, D3D11_BLEND_DESC &desc)
408
+ : BlendState(val), bd(desc)
409
{
410
}
411
};
412
413
414
struct SavedZStencilState : ZStencilState {
415
ComPtr<ID3D11DepthStencilState> state;
416
+ D3D11_DEPTH_STENCIL_DESC dsd;
417
418
- inline SavedZStencilState(const ZStencilState &val)
419
- : ZStencilState (val)
420
+ inline void Rebuild(ID3D11Device *dev);
421
+
422
+ inline void Release()
423
+ {
424
+ state.Release();
425
+ }
426
+
427
+ inline SavedZStencilState(const ZStencilState &val,
428
+ D3D11_DEPTH_STENCIL_DESC desc)
429
+ : ZStencilState (val),
430
+ dsd (desc)
431
{
432
}
433
};
434
435
436
struct SavedRasterState : RasterState {
437
ComPtr<ID3D11RasterizerState> state;
438
+ D3D11_RASTERIZER_DESC rd;
439
+
440
+ inline void Rebuild(ID3D11Device *dev);
441
+
442
+ inline void Release()
443
+ {
444
+ state.Release();
445
+ }
446
447
- inline SavedRasterState(const RasterState &val)
448
- : RasterState (val)
449
+ inline SavedRasterState(const RasterState &val,
450
+ D3D11_RASTERIZER_DESC &desc)
451
+ : RasterState (val),
452
+ rd (desc)
453
{
454
}
455
};
456
457
458
struct gs_device {
459
ComPtr<IDXGIFactory1> factory;
460
+ ComPtr<IDXGIAdapter1> adapter;
461
ComPtr<ID3D11Device> device;
462
ComPtr<ID3D11DeviceContext> context;
463
+ uint32_t adpIdx = 0;
464
465
gs_texture_2d *curRenderTarget = nullptr;
466
gs_zstencil_buffer *curZStencilBuffer = nullptr;
467
468
matrix4 curViewMatrix;
469
matrix4 curViewProjMatrix;
470
471
+ gs_obj *first_obj = nullptr;
472
+
473
void InitCompiler();
474
- void InitFactory(uint32_t adapterIdx, IDXGIAdapter1 **adapter);
475
- void InitDevice(uint32_t adapterIdx, IDXGIAdapter *adapter);
476
+ void InitFactory(uint32_t adapterIdx);
477
+ void InitDevice(uint32_t adapterIdx);
478
479
ID3D11DepthStencilState *AddZStencilState();
480
ID3D11RasterizerState *AddRasterState();
481
482
483
void UpdateViewProjMatrix();
484
485
+ void RebuildDevice();
486
+
487
gs_device(uint32_t adapterIdx);
488
+ ~gs_device();
489
};
490
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-texture2d.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-texture2d.cpp
Changed
136
1
2
#include <util/base.h>
3
#include "d3d11-subsystem.hpp"
4
5
-void gs_texture_2d::InitSRD(vector<D3D11_SUBRESOURCE_DATA> &srd,
6
- const uint8_t **data)
7
+void gs_texture_2d::InitSRD(vector<D3D11_SUBRESOURCE_DATA> &srd)
8
{
9
uint32_t rowSizeBytes = width * gs_get_format_bpp(format);
10
uint32_t texSizeBytes = height * rowSizeBytes / 8;
11
size_t textures = type == GS_TEXTURE_2D ? 1 : 6;
12
uint32_t actual_levels = levels;
13
+ size_t curTex = 0;
14
15
if (!actual_levels)
16
actual_levels = gs_get_total_levels(width, height);
17
18
19
for (uint32_t j = 0; j < actual_levels; j++) {
20
D3D11_SUBRESOURCE_DATA newSRD;
21
- newSRD.pSysMem = *data;
22
+ newSRD.pSysMem = data[curTex++].data();
23
newSRD.SysMemPitch = newRowSize;
24
newSRD.SysMemSlicePitch = newTexSize;
25
srd.push_back(newSRD);
26
27
newRowSize /= 2;
28
newTexSize /= 4;
29
- data++;
30
}
31
}
32
}
33
34
+void gs_texture_2d::BackupTexture(const uint8_t **data)
35
+{
36
+ this->data.resize(levels);
37
+
38
+ uint32_t w = width;
39
+ uint32_t h = height;
40
+ uint32_t bbp = gs_get_format_bpp(format);
41
+
42
+ for (uint32_t i = 0; i < levels; i++) {
43
+ if (!data[i])
44
+ break;
45
+
46
+ uint32_t texSize = bbp * w * h / 8;
47
+ this->data[i].resize(texSize);
48
+
49
+ vector<uint8_t> &subData = this->data[i];
50
+ memcpy(&subData[0], data[i], texSize);
51
+
52
+ w /= 2;
53
+ h /= 2;
54
+ }
55
+}
56
+
57
void gs_texture_2d::InitTexture(const uint8_t **data)
58
{
59
- vector<D3D11_SUBRESOURCE_DATA> srd;
60
- D3D11_TEXTURE2D_DESC td;
61
HRESULT hr;
62
63
memset(&td, 0, sizeof(td));
64
65
if (isGDICompatible)
66
td.MiscFlags |= D3D11_RESOURCE_MISC_GDI_COMPATIBLE;
67
68
- if (data)
69
- InitSRD(srd, data);
70
+ if (data) {
71
+ BackupTexture(data);
72
+ InitSRD(srd);
73
+ }
74
75
hr = device->device->CreateTexture2D(&td, data ? srd.data() : NULL,
76
texture.Assign());
77
78
79
void gs_texture_2d::InitResourceView()
80
{
81
- D3D11_SHADER_RESOURCE_VIEW_DESC resourceDesc;
82
HRESULT hr;
83
84
memset(&resourceDesc, 0, sizeof(resourceDesc));
85
86
uint32_t height, gs_color_format colorFormat, uint32_t levels,
87
const uint8_t **data, uint32_t flags, gs_texture_type type,
88
bool gdiCompatible, bool shared)
89
- : gs_texture (device, type, levels, colorFormat),
90
+ : gs_texture (device, gs_type::gs_texture_2d, type, levels,
91
+ colorFormat),
92
width (width),
93
height (height),
94
dxgiFormat (ConvertGSTextureFormat(format)),
95
96
}
97
98
gs_texture_2d::gs_texture_2d(gs_device_t *device, uint32_t handle)
99
- : isShared (true),
100
+ : gs_texture (device, gs_type::gs_texture_2d,
101
+ GS_TEXTURE_2D),
102
+ isShared (true),
103
sharedHandle (handle)
104
{
105
HRESULT hr;
106
hr = device->device->OpenSharedResource((HANDLE)(uintptr_t)handle,
107
__uuidof(ID3D11Texture2D), (void**)texture.Assign());
108
if (FAILED(hr))
109
- throw HRError("Failed to open resource", hr);
110
+ throw HRError("Failed to open shared 2D texture", hr);
111
112
- D3D11_TEXTURE2D_DESC desc;
113
- texture->GetDesc(&desc);
114
+ texture->GetDesc(&td);
115
116
this->type = GS_TEXTURE_2D;
117
- this->format = ConvertDXGITextureFormat(desc.Format);
118
+ this->format = ConvertDXGITextureFormat(td.Format);
119
this->levels = 1;
120
this->device = device;
121
122
- this->width = desc.Width;
123
- this->height = desc.Height;
124
- this->dxgiFormat = desc.Format;
125
+ this->width = td.Width;
126
+ this->height = td.Height;
127
+ this->dxgiFormat = td.Format;
128
129
- D3D11_SHADER_RESOURCE_VIEW_DESC resourceDesc = {};
130
- resourceDesc.Format = desc.Format;
131
+ memset(&resourceDesc, 0, sizeof(resourceDesc));
132
+ resourceDesc.Format = td.Format;
133
resourceDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
134
resourceDesc.Texture2D.MipLevels = 1;
135
136
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-vertexbuffer.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-vertexbuffer.cpp
Changed
90
1
2
}
3
}
4
5
-inline void gs_vertex_buffer::InitBuffer(const size_t elementSize,
6
+void gs_vertex_buffer::InitBuffer(const size_t elementSize,
7
const size_t numVerts, void *array, ID3D11Buffer **buffer)
8
{
9
D3D11_BUFFER_DESC bd;
10
11
throw HRError("Failed to create buffer", hr);
12
}
13
14
-gs_vertex_buffer::gs_vertex_buffer(gs_device_t *device, struct gs_vb_data *data,
15
- uint32_t flags)
16
- : device (device),
17
- dynamic ((flags & GS_DYNAMIC) != 0),
18
- vbd (data),
19
- numVerts (data->num)
20
+void gs_vertex_buffer::BuildBuffers()
21
{
22
- if (!data->num)
23
- throw "Cannot initialize vertex buffer with 0 vertices";
24
- if (!data->points)
25
- throw "No points specified for vertex buffer";
26
+ InitBuffer(sizeof(vec3), vbd.data->num, vbd.data->points,
27
+ &vertexBuffer);
28
29
- InitBuffer(sizeof(vec3), data->num, data->points,
30
- vertexBuffer.Assign());
31
+ if (vbd.data->normals)
32
+ InitBuffer(sizeof(vec3), vbd.data->num, vbd.data->normals,
33
+ &normalBuffer);
34
35
- if (data->normals)
36
- InitBuffer(sizeof(vec3), data->num, data->normals,
37
- normalBuffer.Assign());
38
+ if (vbd.data->tangents)
39
+ InitBuffer(sizeof(vec3), vbd.data->num, vbd.data->tangents,
40
+ &tangentBuffer);
41
42
- if (data->tangents)
43
- InitBuffer(sizeof(vec3), data->num, data->tangents,
44
- tangentBuffer.Assign());
45
+ if (vbd.data->colors)
46
+ InitBuffer(sizeof(uint32_t), vbd.data->num, vbd.data->colors,
47
+ &colorBuffer);
48
49
- if (data->colors)
50
- InitBuffer(sizeof(uint32_t), data->num, data->colors,
51
- colorBuffer.Assign());
52
-
53
- for (size_t i = 0; i < data->num_tex; i++) {
54
- struct gs_tvertarray *tverts = data->tvarray+i;
55
+ for (size_t i = 0; i < vbd.data->num_tex; i++) {
56
+ struct gs_tvertarray *tverts = vbd.data->tvarray+i;
57
58
if (tverts->width != 2 && tverts->width != 4)
59
throw "Invalid texture vertex size specified";
60
61
throw "No texture vertices specified";
62
63
ComPtr<ID3D11Buffer> buffer;
64
- InitBuffer(tverts->width * sizeof(float), data->num,
65
- tverts->array, buffer.Assign());
66
+ InitBuffer(tverts->width * sizeof(float), vbd.data->num,
67
+ tverts->array, &buffer);
68
69
uvBuffers.push_back(buffer);
70
uvSizes.push_back(tverts->width * sizeof(float));
71
}
72
+}
73
+
74
+gs_vertex_buffer::gs_vertex_buffer(gs_device_t *device, struct gs_vb_data *data,
75
+ uint32_t flags)
76
+ : gs_obj (device, gs_type::gs_vertex_buffer),
77
+ dynamic ((flags & GS_DYNAMIC) != 0),
78
+ vbd (data),
79
+ numVerts (data->num)
80
+{
81
+ if (!data->num)
82
+ throw "Cannot initialize vertex buffer with 0 vertices";
83
+ if (!data->points)
84
+ throw "No points specified for vertex buffer";
85
86
- if (!dynamic)
87
- vbd.Clear();
88
+ BuildBuffers();
89
}
90
obs-studio-0.16.2.tar.xz/libobs-d3d11/d3d11-zstencilbuffer.cpp -> obs-studio-0.16.4.tar.xz/libobs-d3d11/d3d11-zstencilbuffer.cpp
Changed
19
1
2
3
void gs_zstencil_buffer::InitBuffer()
4
{
5
- D3D11_TEXTURE2D_DESC td;
6
- D3D11_DEPTH_STENCIL_VIEW_DESC dsvd;
7
HRESULT hr;
8
9
memset(&td, 0, sizeof(td));
10
11
gs_zstencil_buffer::gs_zstencil_buffer(gs_device_t *device,
12
uint32_t width, uint32_t height,
13
gs_zstencil_format format)
14
- : device (device),
15
+ : gs_obj (device, gs_type::gs_zstencil_buffer),
16
width (width),
17
height (height),
18
format (format),
19
obs-studio-0.16.2.tar.xz/libobs/obs-config.h -> obs-studio-0.16.4.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 2
6
+#define LIBOBS_API_PATCH_VER 4
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
((major << 24) | \
10
obs-studio-0.16.2.tar.xz/libobs/obs-encoder.c -> obs-studio-0.16.4.tar.xz/libobs/obs-encoder.c
Changed
18
1
2
full_stop(encoder);
3
blog(LOG_ERROR, "Error encoding with encoder '%s'",
4
encoder->context.name);
5
- return;
6
+ goto error;
7
}
8
9
if (received) {
10
11
pthread_mutex_unlock(&encoder->callbacks_mutex);
12
}
13
14
+error:
15
profile_end(do_encode_name);
16
}
17
18
obs-studio-0.16.2.tar.xz/libobs/obs-win-crash-handler.c -> obs-studio-0.16.4.tar.xz/libobs/obs-win-crash-handler.c
Changed
30
1
2
******************************************************************************/
3
4
#include <windows.h>
5
+#include <time.h>
6
#include <dbghelp.h>
7
#include <shellapi.h>
8
#include <tlhelp32.h>
9
10
11
static inline void write_header(struct exception_handler_data *data)
12
{
13
+ char date_time[80];
14
+ time_t now = time(0);
15
+ struct tm ts;
16
+ ts = *localtime(&now);
17
+ strftime(date_time, sizeof(date_time), "%Y-%m-%d, %X", &ts);
18
+
19
dstr_catf(&data->str, "Unhandled exception: %x\r\n"
20
+ "Date/Time: %s\r\n"
21
"Fault address: %"PRIX64" (%s)\r\n"
22
"libobs version: "OBS_VERSION"\r\n"
23
"Windows version: %d.%d build %d (revision %d)\r\n"
24
"CPU: %s\r\n\r\n",
25
data->exception->ExceptionRecord->ExceptionCode,
26
+ date_time,
27
data->main_trace.instruction_ptr,
28
data->module_name.array,
29
data->win_version.major, data->win_version.minor,
30
obs-studio-0.16.2.tar.xz/libobs/util/platform-windows.c -> obs-studio-0.16.4.tar.xz/libobs/util/platform-windows.c
Changed
36
1
2
BOOL success;
3
LPVOID data;
4
DWORD size;
5
+ char utf8_lib[512];
6
7
if (!ver_initialized && !initialize_version_functions())
8
return false;
9
if (!ver_initialize_success)
10
return false;
11
12
+ os_wcs_to_utf8(lib, 0, utf8_lib, sizeof(utf8_lib));
13
+
14
size = get_file_version_info_size(lib, NULL);
15
if (!size) {
16
- blog(LOG_ERROR, "Failed to get windows version info size");
17
+ blog(LOG_ERROR, "Failed to get %s version info size", utf8_lib);
18
return false;
19
}
20
21
data = bmalloc(size);
22
if (!get_file_version_info(lib, 0, size, data)) {
23
- blog(LOG_ERROR, "Failed to get windows version info");
24
+ blog(LOG_ERROR, "Failed to get %s version info", utf8_lib);
25
bfree(data);
26
return false;
27
}
28
29
success = ver_query_value(data, L"\\", (LPVOID*)&info, &len);
30
if (!success || !info || !len) {
31
- blog(LOG_ERROR, "Failed to get windows version info value");
32
+ blog(LOG_ERROR, "Failed to get %s version info value", utf8_lib);
33
bfree(data);
34
return false;
35
}
36
obs-studio-0.16.2.tar.xz/libobs/util/windows/CoTaskMemPtr.hpp -> obs-studio-0.16.4.tar.xz/libobs/util/windows/CoTaskMemPtr.hpp
Changed
10
1
2
inline operator T*() const {return ptr;}
3
inline T *operator->() const {return ptr;}
4
5
+ inline const T *Get() const {return ptr;}
6
+
7
inline CoTaskMemPtr& operator=(T* val)
8
{
9
Clear();
10
obs-studio-0.16.4.tar.xz/plugins/coreaudio-encoder/data/locale/ms-MY.ini
Added
5
1
2
+Bitrate="Nilai Bit"
3
+AllowHEAAC="Benarkan HE-AAC"
4
+
5
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI.h
Changed
477
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ {0x20,0xAA,0x52,0x25,0x19,0x58,0x47,0xCB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE};
11
BMD_CONST REFIID IID_IDeckLinkInputCallback = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ {0xDD,0x04,0xE5,0xEC,0x74,0x15,0x42,0xAB,0xAE,0x4A,0xE8,0x0C,0x4D,0xFC,0x04,0x4A};
12
+BMD_CONST REFIID IID_IDeckLinkEncoderInputCallback = /* ACF13E61-F4A0-4974-A6A7-59AFF6268B31 */ {0xAC,0xF1,0x3E,0x61,0xF4,0xA0,0x49,0x74,0xA6,0xA7,0x59,0xAF,0xF6,0x26,0x8B,0x31};
13
BMD_CONST REFIID IID_IDeckLinkMemoryAllocator = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ {0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8};
14
BMD_CONST REFIID IID_IDeckLinkAudioOutputCallback = /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ {0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6};
15
BMD_CONST REFIID IID_IDeckLinkIterator = /* 50FB36CD-3063-4B73-BDBB-958087F2D8BA */ {0x50,0xFB,0x36,0xCD,0x30,0x63,0x4B,0x73,0xBD,0xBB,0x95,0x80,0x87,0xF2,0xD8,0xBA};
16
BMD_CONST REFIID IID_IDeckLinkAPIInformation = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
17
BMD_CONST REFIID IID_IDeckLinkOutput = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
18
BMD_CONST REFIID IID_IDeckLinkInput = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
19
+BMD_CONST REFIID IID_IDeckLinkEncoderInput = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
20
BMD_CONST REFIID IID_IDeckLinkVideoFrame = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
21
BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
22
BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
23
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
24
BMD_CONST REFIID IID_IDeckLinkVideoInputFrame = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
25
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
26
+BMD_CONST REFIID IID_IDeckLinkEncoderPacket = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
27
+BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
28
+BMD_CONST REFIID IID_IDeckLinkEncoderAudioPacket = /* 49E8EDC8-693B-4E14-8EF6-12C658F5A07A */ {0x49,0xE8,0xED,0xC8,0x69,0x3B,0x4E,0x14,0x8E,0xF6,0x12,0xC6,0x58,0xF5,0xA0,0x7A};
29
+BMD_CONST REFIID IID_IDeckLinkH265NALPacket = /* 639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7 */ {0x63,0x9C,0x8E,0x0B,0x68,0xD5,0x4B,0xDE,0xA6,0xD4,0x95,0xF3,0xAE,0xAF,0xF2,0xE7};
30
BMD_CONST REFIID IID_IDeckLinkAudioInputPacket = /* E43D5870-2894-11DE-8C30-0800200C9A66 */ {0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66};
31
BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ {0xB1,0xD3,0xF4,0x9A,0x85,0xFE,0x4C,0x5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38};
32
BMD_CONST REFIID IID_IDeckLinkGLScreenPreviewHelper = /* 504E2209-CAC7-4C1A-9FB4-C5BB6274D22F */ {0x50,0x4E,0x22,0x09,0xCA,0xC7,0x4C,0x1A,0x9F,0xB4,0xC5,0xBB,0x62,0x74,0xD2,0x2F};
33
BMD_CONST REFIID IID_IDeckLinkNotificationCallback = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ {0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D};
34
BMD_CONST REFIID IID_IDeckLinkNotification = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
35
BMD_CONST REFIID IID_IDeckLinkAttributes = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
36
+BMD_CONST REFIID IID_IDeckLinkStatus = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ {0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46};
37
BMD_CONST REFIID IID_IDeckLinkKeyer = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ {0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3};
38
BMD_CONST REFIID IID_IDeckLinkVideoConversion = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ {0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A};
39
BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ {0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F};
40
41
bmdVideoOutputDualStream3D = 1 << 4
42
};
43
44
+/* Enum BMDPacketType - Type of packet */
45
+
46
+typedef uint32_t BMDPacketType;
47
+enum _BMDPacketType {
48
+ bmdPacketTypeStreamInterruptedMarker = /* 'sint' */ 0x73696E74, // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable
49
+ bmdPacketTypeStreamData = /* 'sdat' */ 0x73646174 // Regular stream data
50
+};
51
+
52
/* Enum BMDFrameFlags - Frame flags */
53
54
typedef uint32_t BMDFrameFlags;
55
enum _BMDFrameFlags {
56
bmdFrameFlagDefault = 0,
57
bmdFrameFlagFlipVertical = 1 << 0,
58
+ bmdFrameContainsHDRMetadata = 1 << 1,
59
60
/* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
61
62
63
64
typedef uint32_t BMDDeckLinkCapturePassthroughMode;
65
enum _BMDDeckLinkCapturePassthroughMode {
66
+ bmdDeckLinkCapturePassthroughModeDisabled = /* 'pdis' */ 0x70646973,
67
bmdDeckLinkCapturePassthroughModeDirect = /* 'pdir' */ 0x70646972,
68
bmdDeckLinkCapturePassthroughModeCleanSwitch = /* 'pcln' */ 0x70636C6E
69
};
70
71
bmdReferenceLocked = 1 << 1
72
};
73
74
+/* Enum BMDAudioFormat - Audio Format */
75
+
76
+typedef uint32_t BMDAudioFormat;
77
+enum _BMDAudioFormat {
78
+ bmdAudioFormatPCM = /* 'lpcm' */ 0x6C70636D // Linear signed PCM samples
79
+};
80
+
81
/* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
82
83
typedef uint32_t BMDAudioSampleRate;
84
85
typedef uint32_t BMDIdleVideoOutputOperation;
86
enum _BMDIdleVideoOutputOperation {
87
bmdIdleVideoOutputBlack = /* 'blac' */ 0x626C6163,
88
- bmdIdleVideoOutputLastFrame = /* 'lafa' */ 0x6C616661,
89
- bmdIdleVideoOutputDesktop = /* 'desk' */ 0x6465736B
90
+ bmdIdleVideoOutputLastFrame = /* 'lafa' */ 0x6C616661
91
+};
92
+
93
+/* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */
94
+
95
+typedef uint32_t BMDVideoEncoderFrameCodingMode;
96
+enum _BMDVideoEncoderFrameCodingMode {
97
+ bmdVideoEncoderFrameCodingModeInter = /* 'inte' */ 0x696E7465,
98
+ bmdVideoEncoderFrameCodingModeIntra = /* 'intr' */ 0x696E7472
99
+};
100
+
101
+/* Enum BMDDNxHRLevel - DNxHR Levels */
102
+
103
+typedef uint32_t BMDDNxHRLevel;
104
+enum _BMDDNxHRLevel {
105
+ bmdDNxHRLevelSQ = /* 'dnsq' */ 0x646E7371,
106
+ bmdDNxHRLevelLB = /* 'dnlb' */ 0x646E6C62,
107
+ bmdDNxHRLevelHQ = /* 'dnhq' */ 0x646E6871,
108
+ bmdDNxHRLevelHQX = /* 'dhqx' */ 0x64687178,
109
+ bmdDNxHRLevel444 = /* 'd444' */ 0x64343434
110
+};
111
+
112
+/* Enum BMDLinkConfiguration - Video link configuration */
113
+
114
+typedef uint32_t BMDLinkConfiguration;
115
+enum _BMDLinkConfiguration {
116
+ bmdLinkConfigurationSingleLink = /* 'lcsl' */ 0x6C63736C,
117
+ bmdLinkConfigurationDualLink = /* 'lcdl' */ 0x6C63646C,
118
+ bmdLinkConfigurationQuadLink = /* 'lcql' */ 0x6C63716C
119
+};
120
+
121
+/* Enum BMDDeviceInterface - Device interface type */
122
+
123
+typedef uint32_t BMDDeviceInterface;
124
+enum _BMDDeviceInterface {
125
+ bmdDeviceInterfacePCI = /* 'pci ' */ 0x70636920,
126
+ bmdDeviceInterfaceUSB = /* 'usb ' */ 0x75736220,
127
+ bmdDeviceInterfaceThunderbolt = /* 'thun' */ 0x7468756E
128
+};
129
+
130
+/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
131
+
132
+typedef uint32_t BMDDeckLinkFrameMetadataID;
133
+enum _BMDDeckLinkFrameMetadataID {
134
+ bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = /* 'eotf' */ 0x656F7466, // EOTF in range 0-7 as per CEA 861.3
135
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = /* 'hdrx' */ 0x68647278, // Red display primaries in range 0.0 - 1.0
136
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = /* 'hdry' */ 0x68647279, // Red display primaries in range 0.0 - 1.0
137
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = /* 'hdgx' */ 0x68646778, // Green display primaries in range 0.0 - 1.0
138
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenY = /* 'hdgy' */ 0x68646779, // Green display primaries in range 0.0 - 1.0
139
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueX = /* 'hdbx' */ 0x68646278, // Blue display primaries in range 0.0 - 1.0
140
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueY = /* 'hdby' */ 0x68646279, // Blue display primaries in range 0.0 - 1.0
141
+ bmdDeckLinkFrameMetadataHDRWhitePointX = /* 'hdwx' */ 0x68647778, // White point in range 0.0 - 1.0
142
+ bmdDeckLinkFrameMetadataHDRWhitePointY = /* 'hdwy' */ 0x68647779, // White point in range 0.0 - 1.0
143
+ bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = /* 'hdml' */ 0x68646D6C, // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
144
+ bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = /* 'hmil' */ 0x686D696C, // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
145
+ bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = /* 'mcll' */ 0x6D636C6C, // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
146
+ bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = /* 'fall' */ 0x66616C6C // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
147
+};
148
+
149
+/* Enum BMDDuplexMode - Duplex for configurable ports */
150
+
151
+typedef uint32_t BMDDuplexMode;
152
+enum _BMDDuplexMode {
153
+ bmdDuplexModeFull = /* 'fdup' */ 0x66647570,
154
+ bmdDuplexModeHalf = /* 'hdup' */ 0x68647570
155
};
156
157
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
158
159
BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain = /* 'ovog' */ 0x6F766F67,
160
BMDDeckLinkHasVideoInputAntiAliasingFilter = /* 'aafl' */ 0x6161666C,
161
BMDDeckLinkHasBypass = /* 'byps' */ 0x62797073,
162
- BMDDeckLinkSupportsDesktopDisplay = /* 'extd' */ 0x65787464,
163
BMDDeckLinkSupportsClockTimingAdjustment = /* 'ctad' */ 0x63746164,
164
BMDDeckLinkSupportsFullDuplex = /* 'fdup' */ 0x66647570,
165
BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset = /* 'frin' */ 0x6672696E,
166
+ BMDDeckLinkSupportsSMPTELevelAOutput = /* 'lvla' */ 0x6C766C61,
167
+ BMDDeckLinkSupportsDualLinkSDI = /* 'sdls' */ 0x73646C73,
168
+ BMDDeckLinkSupportsQuadLinkSDI = /* 'sqls' */ 0x73716C73,
169
+ BMDDeckLinkSupportsIdleOutput = /* 'idou' */ 0x69646F75,
170
+ BMDDeckLinkHasLTCTimecodeInput = /* 'hltc' */ 0x686C7463,
171
+ BMDDeckLinkSupportsDuplexModeConfiguration = /* 'dupx' */ 0x64757078,
172
+ BMDDeckLinkSupportsHDRMetadata = /* 'hdrm' */ 0x6864726D,
173
174
/* Integers */
175
176
177
BMDDeckLinkNumberOfSubDevices = /* 'nsbd' */ 0x6E736264,
178
BMDDeckLinkSubDeviceIndex = /* 'subi' */ 0x73756269,
179
BMDDeckLinkPersistentID = /* 'peid' */ 0x70656964,
180
+ BMDDeckLinkDeviceGroupID = /* 'dgid' */ 0x64676964,
181
BMDDeckLinkTopologicalID = /* 'toid' */ 0x746F6964,
182
BMDDeckLinkVideoOutputConnections = /* 'vocn' */ 0x766F636E,
183
BMDDeckLinkVideoInputConnections = /* 'vicn' */ 0x7669636E,
184
BMDDeckLinkAudioOutputConnections = /* 'aocn' */ 0x616F636E,
185
BMDDeckLinkAudioInputConnections = /* 'aicn' */ 0x6169636E,
186
- BMDDeckLinkDeviceBusyState = /* 'dbst' */ 0x64627374,
187
BMDDeckLinkVideoIOSupport = /* 'vios' */ 0x76696F73, // Returns a BMDVideoIOSupport bit field
188
+ BMDDeckLinkDeckControlConnections = /* 'dccn' */ 0x6463636E,
189
+ BMDDeckLinkDeviceInterface = /* 'dbus' */ 0x64627573, // Returns a BMDDeviceInterface
190
+ BMDDeckLinkAudioInputRCAChannelCount = /* 'airc' */ 0x61697263,
191
+ BMDDeckLinkAudioInputXLRChannelCount = /* 'aixc' */ 0x61697863,
192
+ BMDDeckLinkAudioOutputRCAChannelCount = /* 'aorc' */ 0x616F7263,
193
+ BMDDeckLinkAudioOutputXLRChannelCount = /* 'aoxc' */ 0x616F7863,
194
+ BMDDeckLinkPairedDevicePersistentID = /* 'ppid' */ 0x70706964,
195
196
/* Floats */
197
198
199
BMDDeckLinkVideoInputGainMaximum = /* 'vigx' */ 0x76696778,
200
BMDDeckLinkVideoOutputGainMinimum = /* 'vogm' */ 0x766F676D,
201
BMDDeckLinkVideoOutputGainMaximum = /* 'vogx' */ 0x766F6778,
202
+ BMDDeckLinkMicrophoneInputGainMinimum = /* 'migm' */ 0x6D69676D,
203
+ BMDDeckLinkMicrophoneInputGainMaximum = /* 'migx' */ 0x6D696778,
204
205
/* Strings */
206
207
- BMDDeckLinkSerialPortDeviceName = /* 'slpn' */ 0x736C706E
208
+ BMDDeckLinkSerialPortDeviceName = /* 'slpn' */ 0x736C706E,
209
+ BMDDeckLinkVendorName = /* 'vndr' */ 0x766E6472,
210
+ BMDDeckLinkDisplayName = /* 'dspn' */ 0x6473706E,
211
+ BMDDeckLinkModelName = /* 'mdln' */ 0x6D646C6E,
212
+ BMDDeckLinkDeviceHandle = /* 'devh' */ 0x64657668
213
};
214
215
/* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
216
217
BMDDeckLinkAPIVersion = /* 'vers' */ 0x76657273
218
};
219
220
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
221
+
222
+typedef uint32_t BMDDeckLinkStatusID;
223
+enum _BMDDeckLinkStatusID {
224
+
225
+ /* Integers */
226
+
227
+ bmdDeckLinkStatusDetectedVideoInputMode = /* 'dvim' */ 0x6476696D,
228
+ bmdDeckLinkStatusDetectedVideoInputFlags = /* 'dvif' */ 0x64766966,
229
+ bmdDeckLinkStatusCurrentVideoInputMode = /* 'cvim' */ 0x6376696D,
230
+ bmdDeckLinkStatusCurrentVideoInputPixelFormat = /* 'cvip' */ 0x63766970,
231
+ bmdDeckLinkStatusCurrentVideoInputFlags = /* 'cvif' */ 0x63766966,
232
+ bmdDeckLinkStatusCurrentVideoOutputMode = /* 'cvom' */ 0x63766F6D,
233
+ bmdDeckLinkStatusCurrentVideoOutputFlags = /* 'cvof' */ 0x63766F66,
234
+ bmdDeckLinkStatusPCIExpressLinkWidth = /* 'pwid' */ 0x70776964,
235
+ bmdDeckLinkStatusPCIExpressLinkSpeed = /* 'plnk' */ 0x706C6E6B,
236
+ bmdDeckLinkStatusLastVideoOutputPixelFormat = /* 'opix' */ 0x6F706978,
237
+ bmdDeckLinkStatusReferenceSignalMode = /* 'refm' */ 0x7265666D,
238
+ bmdDeckLinkStatusReferenceSignalFlags = /* 'reff' */ 0x72656666,
239
+ bmdDeckLinkStatusDuplexMode = /* 'dupx' */ 0x64757078,
240
+ bmdDeckLinkStatusBusy = /* 'busy' */ 0x62757379,
241
+
242
+ /* Flags */
243
+
244
+ bmdDeckLinkStatusVideoInputSignalLocked = /* 'visl' */ 0x7669736C,
245
+ bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C
246
+};
247
+
248
+/* Enum BMDDeckLinkVideoStatusFlags - */
249
+
250
+typedef uint32_t BMDDeckLinkVideoStatusFlags;
251
+enum _BMDDeckLinkVideoStatusFlags {
252
+ bmdDeckLinkVideoStatusPsF = 1 << 0,
253
+ bmdDeckLinkVideoStatusDualStream3D = 1 << 1
254
+};
255
+
256
+/* Enum BMDDuplexStatus - Duplex status of the device */
257
+
258
+typedef uint32_t BMDDuplexStatus;
259
+enum _BMDDuplexStatus {
260
+ bmdDuplexStatusFullDuplex = /* 'fdup' */ 0x66647570,
261
+ bmdDuplexStatusHalfDuplex = /* 'hdup' */ 0x68647570,
262
+ bmdDuplexStatusSimplex = /* 'splx' */ 0x73706C78,
263
+ bmdDuplexStatusInactive = /* 'inac' */ 0x696E6163
264
+};
265
+
266
/* Enum BMDDeviceBusyState - Current device busy state */
267
268
typedef uint32_t BMDDeviceBusyState;
269
270
271
typedef uint32_t BMDNotifications;
272
enum _BMDNotifications {
273
- bmdPreferencesChanged = /* 'pref' */ 0x70726566
274
+ bmdPreferencesChanged = /* 'pref' */ 0x70726566,
275
+ bmdStatusChanged = /* 'stat' */ 0x73746174
276
};
277
278
#if defined(__cplusplus)
279
280
281
class IDeckLinkVideoOutputCallback;
282
class IDeckLinkInputCallback;
283
+class IDeckLinkEncoderInputCallback;
284
class IDeckLinkMemoryAllocator;
285
class IDeckLinkAudioOutputCallback;
286
class IDeckLinkIterator;
287
class IDeckLinkAPIInformation;
288
class IDeckLinkOutput;
289
class IDeckLinkInput;
290
+class IDeckLinkEncoderInput;
291
class IDeckLinkVideoFrame;
292
class IDeckLinkMutableVideoFrame;
293
class IDeckLinkVideoFrame3DExtensions;
294
+class IDeckLinkVideoFrameMetadataExtensions;
295
class IDeckLinkVideoInputFrame;
296
class IDeckLinkVideoFrameAncillary;
297
+class IDeckLinkEncoderPacket;
298
+class IDeckLinkEncoderVideoPacket;
299
+class IDeckLinkEncoderAudioPacket;
300
+class IDeckLinkH265NALPacket;
301
class IDeckLinkAudioInputPacket;
302
class IDeckLinkScreenPreviewCallback;
303
class IDeckLinkGLScreenPreviewHelper;
304
class IDeckLinkNotificationCallback;
305
class IDeckLinkNotification;
306
class IDeckLinkAttributes;
307
+class IDeckLinkStatus;
308
class IDeckLinkKeyer;
309
class IDeckLinkVideoConversion;
310
class IDeckLinkDeviceNotificationCallback;
311
312
virtual ~IDeckLinkInputCallback () {} // call Release method to drop reference count
313
};
314
315
+/* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
316
+
317
+class IDeckLinkEncoderInputCallback : public IUnknown
318
+{
319
+public:
320
+ virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
321
+ virtual HRESULT VideoPacketArrived (/* in */ IDeckLinkEncoderVideoPacket* videoPacket) = 0;
322
+ virtual HRESULT AudioPacketArrived (/* in */ IDeckLinkEncoderAudioPacket* audioPacket) = 0;
323
+
324
+protected:
325
+ virtual ~IDeckLinkEncoderInputCallback () {} // call Release method to drop reference count
326
+};
327
+
328
/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
329
330
class IDeckLinkMemoryAllocator : public IUnknown
331
332
virtual ~IDeckLinkInput () {} // call Release method to drop reference count
333
};
334
335
+/* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
336
+
337
+class IDeckLinkEncoderInput : public IUnknown
338
+{
339
+public:
340
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
341
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
342
+
343
+ /* Video Input */
344
+
345
+ virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
346
+ virtual HRESULT DisableVideoInput (void) = 0;
347
+ virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
348
+ virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
349
+
350
+ /* Audio Input */
351
+
352
+ virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
353
+ virtual HRESULT DisableAudioInput (void) = 0;
354
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
355
+
356
+ /* Input Control */
357
+
358
+ virtual HRESULT StartStreams (void) = 0;
359
+ virtual HRESULT StopStreams (void) = 0;
360
+ virtual HRESULT PauseStreams (void) = 0;
361
+ virtual HRESULT FlushStreams (void) = 0;
362
+ virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
363
+
364
+ /* Hardware Timing */
365
+
366
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
367
+
368
+protected:
369
+ virtual ~IDeckLinkEncoderInput () {} // call Release method to drop reference count
370
+};
371
+
372
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
373
374
class IDeckLinkVideoFrame : public IUnknown
375
376
virtual ~IDeckLinkVideoFrame3DExtensions () {} // call Release method to drop reference count
377
};
378
379
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
380
+
381
+class IDeckLinkVideoFrameMetadataExtensions : public IUnknown
382
+{
383
+public:
384
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
385
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double *value) = 0;
386
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ bool* value) = 0;
387
+ virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ const char **value) = 0;
388
+
389
+protected:
390
+ virtual ~IDeckLinkVideoFrameMetadataExtensions () {} // call Release method to drop reference count
391
+};
392
+
393
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
394
395
class IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
396
397
virtual ~IDeckLinkVideoFrameAncillary () {} // call Release method to drop reference count
398
};
399
400
+/* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
401
+
402
+class IDeckLinkEncoderPacket : public IUnknown
403
+{
404
+public:
405
+ virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
406
+ virtual long GetSize (void) = 0;
407
+ virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* in */ BMDTimeScale timeScale) = 0;
408
+ virtual BMDPacketType GetPacketType (void) = 0;
409
+
410
+protected:
411
+ virtual ~IDeckLinkEncoderPacket () {} // call Release method to drop reference count
412
+};
413
+
414
+/* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
415
+
416
+class IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
417
+{
418
+public:
419
+ virtual BMDPixelFormat GetPixelFormat (void) = 0;
420
+ virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
421
+
422
+ virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
423
+
424
+protected:
425
+ virtual ~IDeckLinkEncoderVideoPacket () {} // call Release method to drop reference count
426
+};
427
+
428
+/* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
429
+
430
+class IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
431
+{
432
+public:
433
+ virtual BMDAudioFormat GetAudioFormat (void) = 0;
434
+
435
+protected:
436
+ virtual ~IDeckLinkEncoderAudioPacket () {} // call Release method to drop reference count
437
+};
438
+
439
+/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
440
+
441
+class IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
442
+{
443
+public:
444
+ virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
445
+ virtual HRESULT GetBytesNoPrefix (/* out */ void **buffer) = 0;
446
+ virtual long GetSizeNoPrefix (void) = 0;
447
+
448
+protected:
449
+ virtual ~IDeckLinkH265NALPacket () {} // call Release method to drop reference count
450
+};
451
+
452
/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
453
454
class IDeckLinkAudioInputPacket : public IUnknown
455
456
virtual ~IDeckLinkAttributes () {} // call Release method to drop reference count
457
};
458
459
+/* Interface IDeckLinkStatus - DeckLink Status interface */
460
+
461
+class IDeckLinkStatus : public IUnknown
462
+{
463
+public:
464
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
465
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t *value) = 0;
466
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double *value) = 0;
467
+ virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ const char **value) = 0;
468
+ virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void *buffer, /* in, out */ uint32_t *bufferSize) = 0;
469
+
470
+protected:
471
+ virtual ~IDeckLinkStatus () {} // call Release method to drop reference count
472
+};
473
+
474
/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
475
476
class IDeckLinkKeyer : public IUnknown
477
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration.h
Changed
156
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
// Interface ID Declarations
11
12
-BMD_CONST REFIID IID_IDeckLinkConfiguration = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
13
+BMD_CONST REFIID IID_IDeckLinkConfiguration = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
14
+BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ {0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E};
15
16
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
17
18
19
bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066,
20
bmdDeckLinkConfigBypass = /* 'byps' */ 0x62797073,
21
bmdDeckLinkConfigClockTimingAdjustment = /* 'ctad' */ 0x63746164,
22
+ bmdDeckLinkConfigDuplexMode = /* 'dupx' */ 0x64757078,
23
24
/* Audio Input/Output Flags */
25
26
27
bmdDeckLinkConfigFieldFlickerRemoval = /* 'fdfr' */ 0x66646672,
28
bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion = /* 'to59' */ 0x746F3539,
29
bmdDeckLinkConfig444SDIVideoOutput = /* '444o' */ 0x3434346F,
30
- bmdDeckLinkConfigSingleLinkVideoOutput = /* 'sglo' */ 0x73676C6F,
31
bmdDeckLinkConfigBlackVideoOutputDuringCapture = /* 'bvoc' */ 0x62766F63,
32
bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F,
33
+ bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F,
34
+ bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461,
35
36
/* Video Output Integers */
37
38
39
bmdDeckLinkConfigVideoOutputIdleOperation = /* 'voio' */ 0x766F696F,
40
bmdDeckLinkConfigDefaultVideoOutputMode = /* 'dvom' */ 0x64766F6D,
41
bmdDeckLinkConfigDefaultVideoOutputModeFlags = /* 'dvof' */ 0x64766F66,
42
+ bmdDeckLinkConfigSDIOutputLinkConfiguration = /* 'solc' */ 0x736F6C63,
43
44
/* Video Output Floats */
45
46
47
48
bmdDeckLinkConfigVideoInputScanning = /* 'visc' */ 0x76697363, // Applicable to H264 Pro Recorder only
49
bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream
50
+ bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473,
51
52
/* Video Input Integers */
53
54
55
bmdDeckLinkConfigVideoInputSVideoLumaGain = /* 'islg' */ 0x69736C67,
56
bmdDeckLinkConfigVideoInputSVideoChromaGain = /* 'iscg' */ 0x69736367,
57
58
+ /* Audio Input Flags */
59
+
60
+ bmdDeckLinkConfigMicrophonePhantomPower = /* 'mphp' */ 0x6D706870,
61
+
62
/* Audio Input Integers */
63
64
bmdDeckLinkConfigAudioInputConnection = /* 'aicn' */ 0x6169636E,
65
66
bmdDeckLinkConfigAnalogAudioInputScaleChannel3 = /* 'ais3' */ 0x61697333,
67
bmdDeckLinkConfigAnalogAudioInputScaleChannel4 = /* 'ais4' */ 0x61697334,
68
bmdDeckLinkConfigDigitalAudioInputScale = /* 'dais' */ 0x64616973,
69
+ bmdDeckLinkConfigMicrophoneInputGain = /* 'micg' */ 0x6D696367,
70
71
/* Audio Output Integers */
72
73
74
bmdDeckLinkConfigAnalogAudioOutputScaleChannel2 = /* 'aos2' */ 0x616F7332,
75
bmdDeckLinkConfigAnalogAudioOutputScaleChannel3 = /* 'aos3' */ 0x616F7333,
76
bmdDeckLinkConfigAnalogAudioOutputScaleChannel4 = /* 'aos4' */ 0x616F7334,
77
- bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73
78
+ bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73,
79
+ bmdDeckLinkConfigHeadphoneVolume = /* 'hvol' */ 0x68766F6C,
80
+
81
+ /* Device Information Strings */
82
+
83
+ bmdDeckLinkConfigDeviceInformationLabel = /* 'dila' */ 0x64696C61,
84
+ bmdDeckLinkConfigDeviceInformationSerialNumber = /* 'disn' */ 0x6469736E,
85
+ bmdDeckLinkConfigDeviceInformationCompany = /* 'dico' */ 0x6469636F,
86
+ bmdDeckLinkConfigDeviceInformationPhone = /* 'diph' */ 0x64697068,
87
+ bmdDeckLinkConfigDeviceInformationEmail = /* 'diem' */ 0x6469656D,
88
+ bmdDeckLinkConfigDeviceInformationDate = /* 'dida' */ 0x64696461,
89
+
90
+ /* Deck Control Integers */
91
+
92
+ bmdDeckLinkConfigDeckControlConnection = /* 'dcco' */ 0x6463636F
93
+};
94
+
95
+/* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
96
+
97
+typedef uint32_t BMDDeckLinkEncoderConfigurationID;
98
+enum _BMDDeckLinkEncoderConfigurationID {
99
+
100
+ /* Video Encoder Integers */
101
+
102
+ bmdDeckLinkEncoderConfigPreferredBitDepth = /* 'epbr' */ 0x65706272,
103
+ bmdDeckLinkEncoderConfigFrameCodingMode = /* 'efcm' */ 0x6566636D,
104
+
105
+ /* HEVC/H.265 Encoder Integers */
106
+
107
+ bmdDeckLinkEncoderConfigH265TargetBitrate = /* 'htbr' */ 0x68746272,
108
+
109
+ /* DNxHR/DNxHD Compression ID */
110
+
111
+ bmdDeckLinkEncoderConfigDNxHRCompressionID = /* 'dcid' */ 0x64636964,
112
+
113
+ /* DNxHR/DNxHD Level */
114
+
115
+ bmdDeckLinkEncoderConfigDNxHRLevel = /* 'dlev' */ 0x646C6576,
116
+
117
+ /* Encoded Sample Decriptions */
118
+
119
+ bmdDeckLinkEncoderConfigMPEG4SampleDescription = /* 'stsE' */ 0x73747345, // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
120
+ bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
121
};
122
123
// Forward Declarations
124
125
class IDeckLinkConfiguration;
126
+class IDeckLinkEncoderConfiguration;
127
128
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
129
130
131
virtual ~IDeckLinkConfiguration () {} // call Release method to drop reference count
132
};
133
134
+/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
135
+
136
+class IDeckLinkEncoderConfiguration : public IUnknown
137
+{
138
+public:
139
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
140
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
141
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
142
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
143
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
144
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
145
+ virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char *value) = 0;
146
+ virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char **value) = 0;
147
+ virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void *buffer /* optional */, /* in, out */ uint32_t *bufferSize) = 0;
148
+
149
+protected:
150
+ virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
151
+};
152
+
153
/* Functions */
154
155
extern "C" {
156
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration_v10_2.h
Added
62
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2014 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_2_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_2_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_2 = /* C679A35B-610C-4D09-B748-1D0478100FC0 */ {0xC6,0x79,0xA3,0x5B,0x61,0x0C,0x4D,0x09,0xB7,0x48,0x1D,0x04,0x78,0x10,0x0F,0xC0};
37
+
38
+// Forward Declarations
39
+
40
+class IDeckLinkConfiguration_v10_2;
41
+
42
+/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
43
+
44
+class IDeckLinkConfiguration_v10_2 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
48
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
49
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
50
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
51
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
52
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
53
+ virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
54
+ virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
55
+ virtual HRESULT WriteConfigurationToPreferences (void) = 0;
56
+
57
+protected:
58
+ virtual ~IDeckLinkConfiguration_v10_2 () {} // call Release method to drop reference count
59
+};
60
+
61
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_2_H) */
62
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration_v10_4.h
Added
65
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_4_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_4_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_4 = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
37
+
38
+
39
+//
40
+// Forward Declarations
41
+
42
+class IDeckLinkConfiguration_v10_4;
43
+
44
+/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
45
+
46
+class IDeckLinkConfiguration_v10_4 : public IUnknown
47
+{
48
+public:
49
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
50
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
51
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
52
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
53
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
54
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
55
+ virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ const char *value) = 0;
56
+ virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ const char **value) = 0;
57
+ virtual HRESULT WriteConfigurationToPreferences (void) = 0;
58
+
59
+protected:
60
+ virtual ~IDeckLinkConfiguration_v10_4 () {} // call Release method to drop reference count
61
+};
62
+
63
+
64
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_4_H) */
65
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIConfiguration_v10_5.h
Added
62
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_5_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_5_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration_v10_5 = /* 67455668-0848-45DF-8D8E-350A77C9A028 */ {0x67,0x45,0x56,0x68,0x08,0x48,0x45,0xDF,0x8D,0x8E,0x35,0x0A,0x77,0xC9,0xA0,0x28};
37
+
38
+// Forward Declarations
39
+
40
+class IDeckLinkEncoderConfiguration_v10_5;
41
+
42
+/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
43
+
44
+class IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
48
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
49
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
50
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
51
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
52
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
53
+ virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ const char *value) = 0;
54
+ virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ const char **value) = 0;
55
+ virtual HRESULT GetDecoderConfigurationInfo (/* out */ void *buffer, /* in */ long bufferSize, /* out */ long *returnedSize) = 0;
56
+
57
+protected:
58
+ virtual ~IDeckLinkEncoderConfiguration_v10_5 () {} // call Release method to drop reference count
59
+};
60
+
61
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_5_H) */
62
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDeckControl.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDeckControl.h
Changed
8
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDiscovery.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDiscovery.h
Changed
8
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDispatch_v7_6.cpp
Added
111
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+**/
28
+
29
+#include <stdio.h>
30
+#include <pthread.h>
31
+#include <dlfcn.h>
32
+
33
+#include "DeckLinkAPI_v7_6.h"
34
+
35
+#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
36
+#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
37
+
38
+typedef IDeckLinkIterator* (*CreateIteratorFunc_v7_6)(void);
39
+typedef IDeckLinkGLScreenPreviewHelper_v7_6* (*CreateOpenGLScreenPreviewHelperFunc_v7_6)(void);
40
+typedef IDeckLinkVideoConversion_v7_6* (*CreateVideoConversionInstanceFunc_v7_6)(void);
41
+
42
+static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
43
+static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
44
+
45
+static CreateIteratorFunc_v7_6 gCreateIteratorFunc = NULL;
46
+static CreateOpenGLScreenPreviewHelperFunc_v7_6 gCreateOpenGLPreviewFunc = NULL;
47
+static CreateVideoConversionInstanceFunc_v7_6 gCreateVideoConversionFunc = NULL;
48
+
49
+void InitDeckLinkAPI_v7_6 (void)
50
+{
51
+ void *libraryHandle;
52
+
53
+ libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
54
+ if (!libraryHandle)
55
+ {
56
+ fprintf(stderr, "%s\n", dlerror());
57
+ return;
58
+ }
59
+
60
+ gCreateIteratorFunc = (CreateIteratorFunc_v7_6)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance");
61
+ if (!gCreateIteratorFunc)
62
+ fprintf(stderr, "%s\n", dlerror());
63
+ gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc_v7_6)dlsym(libraryHandle, "CreateVideoConversionInstance");
64
+ if (!gCreateVideoConversionFunc)
65
+ fprintf(stderr, "%s\n", dlerror());
66
+}
67
+
68
+void InitDeckLinkPreviewAPI_v7_6 (void)
69
+{
70
+ void *libraryHandle;
71
+
72
+ libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
73
+ if (!libraryHandle)
74
+ {
75
+ fprintf(stderr, "%s\n", dlerror());
76
+ return;
77
+ }
78
+ gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc_v7_6)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper");
79
+ if (!gCreateOpenGLPreviewFunc)
80
+ fprintf(stderr, "%s\n", dlerror());
81
+}
82
+
83
+IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void)
84
+{
85
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
86
+
87
+ if (gCreateIteratorFunc == NULL)
88
+ return NULL;
89
+ return gCreateIteratorFunc();
90
+}
91
+
92
+IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void)
93
+{
94
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
95
+ pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI_v7_6);
96
+
97
+ if (gCreateOpenGLPreviewFunc == NULL)
98
+ return NULL;
99
+ return gCreateOpenGLPreviewFunc();
100
+}
101
+
102
+IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void)
103
+{
104
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
105
+
106
+ if (gCreateVideoConversionFunc == NULL)
107
+ return NULL;
108
+ return gCreateVideoConversionFunc();
109
+}
110
+
111
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIDispatch_v8_0.cpp
Added
135
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2011 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+**/
28
+
29
+#include <stdio.h>
30
+#include <pthread.h>
31
+#include <dlfcn.h>
32
+
33
+#include "DeckLinkAPI_v8_0.h"
34
+
35
+#define kDeckLinkAPI_Name "libDeckLinkAPI.so"
36
+#define KDeckLinkPreviewAPI_Name "libDeckLinkPreviewAPI.so"
37
+
38
+typedef IDeckLinkIterator_v8_0* (*CreateIteratorFunc)(void);
39
+typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
40
+typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
41
+typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
42
+
43
+static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
44
+static pthread_once_t gPreviewOnceControl = PTHREAD_ONCE_INIT;
45
+
46
+static bool gLoadedDeckLinkAPI = false;
47
+
48
+static CreateIteratorFunc gCreateIteratorFunc = NULL;
49
+static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
50
+static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
51
+static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
52
+
53
+void InitDeckLinkAPI (void)
54
+{
55
+ void *libraryHandle;
56
+
57
+ libraryHandle = dlopen(kDeckLinkAPI_Name, RTLD_NOW|RTLD_GLOBAL);
58
+ if (!libraryHandle)
59
+ {
60
+ fprintf(stderr, "%s\n", dlerror());
61
+ return;
62
+ }
63
+
64
+ gLoadedDeckLinkAPI = true;
65
+
66
+ gCreateIteratorFunc = (CreateIteratorFunc)dlsym(libraryHandle, "CreateDeckLinkIteratorInstance_0001");
67
+ if (!gCreateIteratorFunc)
68
+ fprintf(stderr, "%s\n", dlerror());
69
+ gCreateAPIInformationFunc = (CreateAPIInformationFunc)dlsym(libraryHandle, "CreateDeckLinkAPIInformationInstance_0001");
70
+ if (!gCreateAPIInformationFunc)
71
+ fprintf(stderr, "%s\n", dlerror());
72
+ gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)dlsym(libraryHandle, "CreateVideoConversionInstance_0001");
73
+ if (!gCreateVideoConversionFunc)
74
+ fprintf(stderr, "%s\n", dlerror());
75
+}
76
+
77
+void InitDeckLinkPreviewAPI (void)
78
+{
79
+ void *libraryHandle;
80
+
81
+ libraryHandle = dlopen(KDeckLinkPreviewAPI_Name, RTLD_NOW|RTLD_GLOBAL);
82
+ if (!libraryHandle)
83
+ {
84
+ fprintf(stderr, "%s\n", dlerror());
85
+ return;
86
+ }
87
+ gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)dlsym(libraryHandle, "CreateOpenGLScreenPreviewHelper_0001");
88
+ if (!gCreateOpenGLPreviewFunc)
89
+ fprintf(stderr, "%s\n", dlerror());
90
+}
91
+
92
+bool IsDeckLinkAPIPresent (void)
93
+{
94
+ // If the DeckLink API dynamic library was successfully loaded, return this knowledge to the caller
95
+ return gLoadedDeckLinkAPI;
96
+}
97
+
98
+IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance (void)
99
+{
100
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
101
+
102
+ if (gCreateIteratorFunc == NULL)
103
+ return NULL;
104
+ return gCreateIteratorFunc();
105
+}
106
+
107
+IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
108
+{
109
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
110
+
111
+ if (gCreateAPIInformationFunc == NULL)
112
+ return NULL;
113
+ return gCreateAPIInformationFunc();
114
+}
115
+
116
+IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
117
+{
118
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
119
+ pthread_once(&gPreviewOnceControl, InitDeckLinkPreviewAPI);
120
+
121
+ if (gCreateOpenGLPreviewFunc == NULL)
122
+ return NULL;
123
+ return gCreateOpenGLPreviewFunc();
124
+}
125
+
126
+IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
127
+{
128
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
129
+
130
+ if (gCreateVideoConversionFunc == NULL)
131
+ return NULL;
132
+ return gCreateVideoConversionFunc();
133
+}
134
+
135
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIModes.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIModes.h
Changed
22
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
bmdFormat12BitRGB = /* 'R12B' */ 0x52313242, // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
10
bmdFormat12BitRGBLE = /* 'R12L' */ 0x5231324C, // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
11
bmdFormat10BitRGBXLE = /* 'R10l' */ 0x5231306C, // Little-endian 10-bit RGB with SMPTE video levels (64-940)
12
- bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062 // Big-endian 10-bit RGB with SMPTE video levels (64-940)
13
+ bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062, // Big-endian 10-bit RGB with SMPTE video levels (64-940)
14
+ bmdFormatH265 = /* 'hev1' */ 0x68657631, // High Efficiency Video Coding (HEVC/h.265)
15
+
16
+ /* AVID DNxHR */
17
+
18
+ bmdFormatDNxHR = /* 'AVdh' */ 0x41566468
19
};
20
21
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
22
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPITypes.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPITypes.h
Changed
27
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
bmdAudioConnectionAESEBU = 1 << 1,
10
bmdAudioConnectionAnalog = 1 << 2,
11
bmdAudioConnectionAnalogXLR = 1 << 3,
12
- bmdAudioConnectionAnalogRCA = 1 << 4
13
+ bmdAudioConnectionAnalogRCA = 1 << 4,
14
+ bmdAudioConnectionMicrophone = 1 << 5,
15
+ bmdAudioConnectionHeadphones = 1 << 6
16
+};
17
+
18
+/* Enum BMDDeckControlConnection - Deck control connections */
19
+
20
+typedef uint32_t BMDDeckControlConnection;
21
+enum _BMDDeckControlConnection {
22
+ bmdDeckControlConnectionRS422Remote1 = 1 << 0,
23
+ bmdDeckControlConnectionRS422Remote2 = 1 << 1
24
};
25
26
// Forward Declarations
27
obs-studio-0.16.2.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVersion.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPIVersion.h
Changed
12
1
2
#ifndef __DeckLink_API_Version_h__
3
#define __DeckLink_API_Version_h__
4
5
-#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a030100
6
-#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.3.1"
7
+#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000
8
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8"
9
10
#endif // __DeckLink_API_Version_h__
11
+
12
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_2.h
Added
57
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2014 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_2_H
30
+#define BMD_DECKLINKAPI_v10_2_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
37
+
38
+typedef uint32_t BMDDeckLinkConfigurationID_v10_2;
39
+enum _BMDDeckLinkConfigurationID_v10_2 {
40
+ /* Video output flags */
41
+
42
+ bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = '3gbs',
43
+};
44
+
45
+/* Enum BMDAudioConnection_v10_2 - Audio connection types */
46
+
47
+typedef uint32_t BMDAudioConnection_v10_2;
48
+enum _BMDAudioConnection_v10_2 {
49
+ bmdAudioConnectionEmbedded_v10_2 = /* 'embd' */ 0x656D6264,
50
+ bmdAudioConnectionAESEBU_v10_2 = /* 'aes ' */ 0x61657320,
51
+ bmdAudioConnectionAnalog_v10_2 = /* 'anlg' */ 0x616E6C67,
52
+ bmdAudioConnectionAnalogXLR_v10_2 = /* 'axlr' */ 0x61786C72,
53
+ bmdAudioConnectionAnalogRCA_v10_2 = /* 'arca' */ 0x61726361
54
+};
55
+
56
+#endif /* defined(BMD_DECKLINKAPI_v10_2_H) */
57
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_4.h
Added
47
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_4_H
30
+#define BMD_DECKLINKAPI_v10_4_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
37
+
38
+typedef uint32_t BMDDeckLinkConfigurationID_v10_4;
39
+enum _BMDDeckLinkConfigurationID_v10_4 {
40
+
41
+ /* Video output flags */
42
+
43
+ bmdDeckLinkConfigSingleLinkVideoOutput_v10_4 = /* 'sglo' */ 0x73676C6F,
44
+};
45
+
46
+#endif /* defined(BMD_DECKLINKAPI_v10_4_H) */
47
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_5.h
Added
48
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_5_H
30
+#define BMD_DECKLINKAPI_v10_5_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
37
+
38
+typedef uint32_t BMDDeckLinkAttributeID_v10_5;
39
+enum _BMDDeckLinkAttributeID_v10_5 {
40
+
41
+ /* Integers */
42
+
43
+ BMDDeckLinkDeviceBusyState_v10_5 = /* 'dbst' */ 0x64627374,
44
+};
45
+
46
+#endif /* defined(BMD_DECKLINKAPI_v10_5_H) */
47
+
48
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v10_6.h
Added
52
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2016 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_6_H
30
+#define BMD_DECKLINKAPI_v10_6_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
37
+
38
+typedef uint32_t BMDDeckLinkAttributeID_c10_6;
39
+enum _BMDDeckLinkAttributeID_v10_6 {
40
+
41
+ /* Flags */
42
+
43
+ BMDDeckLinkSupportsDesktopDisplay_v10_6 = /* 'extd' */ 0x65787464,
44
+};
45
+
46
+typedef uint32_t BMDIdleVideoOutputOperation_v10_6;
47
+enum _BMDIdleVideoOutputOperation_v10_6 {
48
+ bmdIdleVideoOutputDesktop_v10_6 = /* 'desk' */ 0x6465736B
49
+};
50
+
51
+#endif /* defined(BMD_DECKLINKAPI_v10_6_H) */
52
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_1.h
Added
200
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v7_1.h */
29
+
30
+#ifndef __DeckLink_API_v7_1_h__
31
+#define __DeckLink_API_v7_1_h__
32
+
33
+#include "DeckLinkAPI.h"
34
+
35
+// "B28131B6-59AC-4857-B5AC-CD75D5883E2F"
36
+#define IID_IDeckLinkDisplayModeIterator_v7_1 (REFIID){0xB2,0x81,0x31,0xB6,0x59,0xAC,0x48,0x57,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F}
37
+
38
+// "AF0CD6D5-8376-435E-8433-54F9DD530AC3"
39
+#define IID_IDeckLinkDisplayMode_v7_1 (REFIID){0xAF,0x0C,0xD6,0xD5,0x83,0x76,0x43,0x5E,0x84,0x33,0x54,0xF9,0xDD,0x53,0x0A,0xC3}
40
+
41
+// "EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9"
42
+#define IID_IDeckLinkVideoOutputCallback_v7_1 (REFIID){0xEB,0xD0,0x1A,0xFA,0xE4,0xB0,0x49,0xC6,0xA0,0x1D,0xED,0xB9,0xD1,0xB5,0x5F,0xD9}
43
+
44
+// "7F94F328-5ED4-4E9F-9729-76A86BDC99CC"
45
+#define IID_IDeckLinkInputCallback_v7_1 (REFIID){0x7F,0x94,0xF3,0x28,0x5E,0xD4,0x4E,0x9F,0x97,0x29,0x76,0xA8,0x6B,0xDC,0x99,0xCC}
46
+
47
+// "AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5"
48
+#define IID_IDeckLinkOutput_v7_1 (REFIID){0xAE,0x5B,0x3E,0x9B,0x4E,0x1E,0x45,0x35,0xB6,0xE8,0x48,0x0F,0xF5,0x2F,0x6C,0xE5}
49
+
50
+// "2B54EDEF-5B32-429F-BA11-BB990596EACD"
51
+#define IID_IDeckLinkInput_v7_1 (REFIID){0x2B,0x54,0xED,0xEF,0x5B,0x32,0x42,0x9F,0xBA,0x11,0xBB,0x99,0x05,0x96,0xEA,0xCD}
52
+
53
+// "333F3A10-8C2D-43CF-B79D-46560FEEA1CE"
54
+#define IID_IDeckLinkVideoFrame_v7_1 (REFIID){0x33,0x3F,0x3A,0x10,0x8C,0x2D,0x43,0xCF,0xB7,0x9D,0x46,0x56,0x0F,0xEE,0xA1,0xCE}
55
+
56
+// "C8B41D95-8848-40EE-9B37-6E3417FB114B"
57
+#define IID_IDeckLinkVideoInputFrame_v7_1 (REFIID){0xC8,0xB4,0x1D,0x95,0x88,0x48,0x40,0xEE,0x9B,0x37,0x6E,0x34,0x17,0xFB,0x11,0x4B}
58
+
59
+// "C86DE4F6-A29F-42E3-AB3A-1363E29F0788"
60
+#define IID_IDeckLinkAudioInputPacket_v7_1 (REFIID){0xC8,0x6D,0xE4,0xF6,0xA2,0x9F,0x42,0xE3,0xAB,0x3A,0x13,0x63,0xE2,0x9F,0x07,0x88}
61
+
62
+#if defined(__cplusplus)
63
+
64
+class IDeckLinkDisplayModeIterator_v7_1;
65
+class IDeckLinkDisplayMode_v7_1;
66
+class IDeckLinkVideoFrame_v7_1;
67
+class IDeckLinkVideoInputFrame_v7_1;
68
+class IDeckLinkAudioInputPacket_v7_1;
69
+
70
+class IDeckLinkDisplayModeIterator_v7_1 : public IUnknown
71
+{
72
+public:
73
+ virtual HRESULT STDMETHODCALLTYPE Next (IDeckLinkDisplayMode_v7_1* *deckLinkDisplayMode) = 0;
74
+};
75
+
76
+
77
+class IDeckLinkDisplayMode_v7_1 : public IUnknown
78
+{
79
+public:
80
+ virtual HRESULT STDMETHODCALLTYPE GetName (const char **name) = 0;
81
+ virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode () = 0;
82
+ virtual long STDMETHODCALLTYPE GetWidth () = 0;
83
+ virtual long STDMETHODCALLTYPE GetHeight () = 0;
84
+ virtual HRESULT STDMETHODCALLTYPE GetFrameRate (BMDTimeValue *frameDuration, BMDTimeScale *timeScale) = 0;
85
+};
86
+
87
+class IDeckLinkVideoOutputCallback_v7_1 : public IUnknown
88
+{
89
+public:
90
+ virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted (IDeckLinkVideoFrame_v7_1* completedFrame, BMDOutputFrameCompletionResult result) = 0;
91
+};
92
+
93
+class IDeckLinkInputCallback_v7_1 : public IUnknown
94
+{
95
+public:
96
+ virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived (IDeckLinkVideoInputFrame_v7_1* videoFrame, IDeckLinkAudioInputPacket_v7_1* audioPacket) = 0;
97
+};
98
+
99
+// IDeckLinkOutput_v7_1. Created by QueryInterface from IDeckLink.
100
+class IDeckLinkOutput_v7_1 : public IUnknown
101
+{
102
+public:
103
+ // Display mode predicates
104
+ virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
105
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1* *iterator) = 0;
106
+
107
+
108
+ // Video output
109
+ virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput (BMDDisplayMode displayMode) = 0;
110
+ virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput () = 0;
111
+
112
+ virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator (IDeckLinkMemoryAllocator* theAllocator) = 0;
113
+ virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
114
+ virtual HRESULT STDMETHODCALLTYPE CreateVideoFrameFromBuffer (void* buffer, int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
115
+
116
+ virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync (IDeckLinkVideoFrame_v7_1* theFrame) = 0;
117
+ virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame (IDeckLinkVideoFrame_v7_1* theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
118
+ virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback (IDeckLinkVideoOutputCallback_v7_1* theCallback) = 0;
119
+
120
+
121
+ // Audio output
122
+ virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
123
+ virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput () = 0;
124
+
125
+ virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesWritten) = 0;
126
+
127
+ virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll () = 0;
128
+ virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll () = 0;
129
+ virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples (void* buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, uint32_t *sampleFramesWritten) = 0;
130
+
131
+ virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
132
+ virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples () = 0;
133
+
134
+ virtual HRESULT STDMETHODCALLTYPE SetAudioCallback (IDeckLinkAudioOutputCallback* theCallback) = 0;
135
+
136
+
137
+ // Output control
138
+ virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
139
+ virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
140
+ virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
141
+};
142
+
143
+// IDeckLinkInput_v7_1. Created by QueryInterface from IDeckLink.
144
+class IDeckLinkInput_v7_1 : public IUnknown
145
+{
146
+public:
147
+ virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
148
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;
149
+
150
+ // Video input
151
+ virtual HRESULT STDMETHODCALLTYPE EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
152
+ virtual HRESULT STDMETHODCALLTYPE DisableVideoInput () = 0;
153
+
154
+ // Audio input
155
+ virtual HRESULT STDMETHODCALLTYPE EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
156
+ virtual HRESULT STDMETHODCALLTYPE DisableAudioInput () = 0;
157
+ virtual HRESULT STDMETHODCALLTYPE ReadAudioSamples (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesRead, BMDTimeValue *audioPacketTime, BMDTimeScale timeScale) = 0;
158
+ virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
159
+
160
+ // Input control
161
+ virtual HRESULT STDMETHODCALLTYPE StartStreams () = 0;
162
+ virtual HRESULT STDMETHODCALLTYPE StopStreams () = 0;
163
+ virtual HRESULT STDMETHODCALLTYPE PauseStreams () = 0;
164
+ virtual HRESULT STDMETHODCALLTYPE SetCallback (IDeckLinkInputCallback_v7_1* theCallback) = 0;
165
+};
166
+
167
+// IDeckLinkVideoFrame_v7_1. Created by IDeckLinkOutput::CreateVideoFrame.
168
+class IDeckLinkVideoFrame_v7_1 : public IUnknown
169
+{
170
+public:
171
+ virtual long STDMETHODCALLTYPE GetWidth () = 0;
172
+ virtual long STDMETHODCALLTYPE GetHeight () = 0;
173
+ virtual long STDMETHODCALLTYPE GetRowBytes () = 0;
174
+ virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat () = 0;
175
+ virtual BMDFrameFlags STDMETHODCALLTYPE GetFlags () = 0;
176
+ virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
177
+};
178
+
179
+// IDeckLinkVideoInputFrame_v7_1. Provided by the IDeckLinkInput_v7_1 frame arrival callback.
180
+class IDeckLinkVideoInputFrame_v7_1 : public IDeckLinkVideoFrame_v7_1
181
+{
182
+public:
183
+ virtual HRESULT STDMETHODCALLTYPE GetFrameTime (BMDTimeValue *frameTime, BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
184
+};
185
+
186
+// IDeckLinkAudioInputPacket_v7_1. Provided by the IDeckLinkInput_v7_1 callback.
187
+class IDeckLinkAudioInputPacket_v7_1 : public IUnknown
188
+{
189
+public:
190
+ virtual long STDMETHODCALLTYPE GetSampleCount () = 0;
191
+ virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
192
+
193
+ virtual HRESULT STDMETHODCALLTYPE GetAudioPacketTime (BMDTimeValue *packetTime, BMDTimeScale timeScale) = 0;
194
+};
195
+
196
+#endif // defined(__cplusplus)
197
+
198
+#endif // __DeckLink_API_v7_1_h__
199
+
200
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_3.h
Added
175
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v7_3.h */
30
+
31
+#ifndef __DeckLink_API_v7_3_h__
32
+#define __DeckLink_API_v7_3_h__
33
+
34
+#include "DeckLinkAPI.h"
35
+#include "DeckLinkAPI_v7_6.h"
36
+
37
+/* Interface ID Declarations */
38
+
39
+#define IID_IDeckLinkInputCallback_v7_3 /* FD6F311D-4D00-444B-9ED4-1F25B5730AD0 */ (REFIID){0xFD,0x6F,0x31,0x1D,0x4D,0x00,0x44,0x4B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0}
40
+#define IID_IDeckLinkOutput_v7_3 /* 271C65E3-C323-4344-A30F-D908BCB20AA3 */ (REFIID){0x27,0x1C,0x65,0xE3,0xC3,0x23,0x43,0x44,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3}
41
+#define IID_IDeckLinkInput_v7_3 /* 4973F012-9925-458C-871C-18774CDBBECB */ (REFIID){0x49,0x73,0xF0,0x12,0x99,0x25,0x45,0x8C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB}
42
+#define IID_IDeckLinkVideoInputFrame_v7_3 /* CF317790-2894-11DE-8C30-0800200C9A66 */ (REFIID){0xCF,0x31,0x77,0x90,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66}
43
+
44
+/* End Interface ID Declarations */
45
+
46
+#if defined(__cplusplus)
47
+
48
+/* Forward Declarations */
49
+
50
+class IDeckLinkVideoInputFrame_v7_3;
51
+
52
+/* End Forward Declarations */
53
+
54
+
55
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
56
+
57
+class IDeckLinkOutput_v7_3 : public IUnknown
58
+{
59
+public:
60
+ virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
61
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
62
+
63
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
64
+
65
+ /* Video Output */
66
+
67
+ virtual HRESULT EnableVideoOutput (BMDDisplayMode displayMode, BMDVideoOutputFlags flags) = 0;
68
+ virtual HRESULT DisableVideoOutput (void) = 0;
69
+
70
+ virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
71
+ virtual HRESULT CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
72
+ virtual HRESULT CreateAncillaryData (BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
73
+
74
+ virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
75
+ virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
76
+ virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
77
+ virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
78
+
79
+ /* Audio Output */
80
+
81
+ virtual HRESULT EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount, BMDAudioOutputStreamType streamType) = 0;
82
+ virtual HRESULT DisableAudioOutput (void) = 0;
83
+
84
+ virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
85
+
86
+ virtual HRESULT BeginAudioPreroll (void) = 0;
87
+ virtual HRESULT EndAudioPreroll (void) = 0;
88
+ virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
89
+
90
+ virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
91
+ virtual HRESULT FlushBufferedAudioSamples (void) = 0;
92
+
93
+ virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
94
+
95
+ /* Output Control */
96
+
97
+ virtual HRESULT StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
98
+ virtual HRESULT StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
99
+ virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
100
+ virtual HRESULT GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
101
+
102
+protected:
103
+ virtual ~IDeckLinkOutput_v7_3 () {}; // call Release method to drop reference count
104
+};
105
+
106
+/* End Interface IDeckLinkOutput */
107
+
108
+
109
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
110
+
111
+class IDeckLinkInputCallback_v7_3 : public IUnknown
112
+{
113
+public:
114
+ virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
115
+ virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_3 *videoFrame, /* in */ IDeckLinkAudioInputPacket *audioPacket) = 0;
116
+
117
+protected:
118
+ virtual ~IDeckLinkInputCallback_v7_3 () {}; // call Release method to drop reference count
119
+};
120
+
121
+/* End Interface IDeckLinkInputCallback */
122
+
123
+
124
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
125
+
126
+class IDeckLinkInput_v7_3 : public IUnknown
127
+{
128
+public:
129
+ virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
130
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
131
+
132
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
133
+
134
+ /* Video Input */
135
+
136
+ virtual HRESULT EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
137
+ virtual HRESULT DisableVideoInput (void) = 0;
138
+ virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
139
+
140
+ /* Audio Input */
141
+
142
+ virtual HRESULT EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
143
+ virtual HRESULT DisableAudioInput (void) = 0;
144
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
145
+
146
+ /* Input Control */
147
+
148
+ virtual HRESULT StartStreams (void) = 0;
149
+ virtual HRESULT StopStreams (void) = 0;
150
+ virtual HRESULT PauseStreams (void) = 0;
151
+ virtual HRESULT FlushStreams (void) = 0;
152
+ virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_3 *theCallback) = 0;
153
+
154
+protected:
155
+ virtual ~IDeckLinkInput_v7_3 () {}; // call Release method to drop reference count
156
+};
157
+
158
+/* End Interface IDeckLinkInput */
159
+
160
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
161
+
162
+class IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame_v7_6
163
+{
164
+public:
165
+ virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
166
+
167
+protected:
168
+ virtual ~IDeckLinkVideoInputFrame_v7_3 () {}; // call Release method to drop reference count
169
+};
170
+
171
+/* End Interface IDeckLinkVideoInputFrame */
172
+
173
+#endif // defined(__cplusplus)
174
+#endif // __DeckLink_API_v7_3_h__
175
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_6.h
Added
406
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v7_6.h */
30
+
31
+#ifndef __DeckLink_API_v7_6_h__
32
+#define __DeckLink_API_v7_6_h__
33
+
34
+#include "DeckLinkAPI.h"
35
+
36
+// Interface ID Declarations
37
+
38
+#define IID_IDeckLinkVideoOutputCallback_v7_6 /* E763A626-4A3C-49D1-BF13-E7AD3692AE52 */ (REFIID){0xE7,0x63,0xA6,0x26,0x4A,0x3C,0x49,0xD1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52}
39
+#define IID_IDeckLinkInputCallback_v7_6 /* 31D28EE7-88B6-4CB1-897A-CDBF79A26414 */ (REFIID){0x31,0xD2,0x8E,0xE7,0x88,0xB6,0x4C,0xB1,0x89,0x7A,0xCD,0xBF,0x79,0xA2,0x64,0x14}
40
+#define IID_IDeckLinkDisplayModeIterator_v7_6 /* 455D741F-1779-4800-86F5-0B5D13D79751 */ (REFIID){0x45,0x5D,0x74,0x1F,0x17,0x79,0x48,0x00,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51}
41
+#define IID_IDeckLinkDisplayMode_v7_6 /* 87451E84-2B7E-439E-A629-4393EA4A8550 */ (REFIID){0x87,0x45,0x1E,0x84,0x2B,0x7E,0x43,0x9E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50}
42
+#define IID_IDeckLinkOutput_v7_6 /* 29228142-EB8C-4141-A621-F74026450955 */ (REFIID){0x29,0x22,0x81,0x42,0xEB,0x8C,0x41,0x41,0xA6,0x21,0xF7,0x40,0x26,0x45,0x09,0x55}
43
+#define IID_IDeckLinkInput_v7_6 /* 300C135A-9F43-48E2-9906-6D7911D93CF1 */ (REFIID){0x30,0x0C,0x13,0x5A,0x9F,0x43,0x48,0xE2,0x99,0x06,0x6D,0x79,0x11,0xD9,0x3C,0xF1}
44
+#define IID_IDeckLinkTimecode_v7_6 /* EFB9BCA6-A521-44F7-BD69-2332F24D9EE6 */ (REFIID){0xEF,0xB9,0xBC,0xA6,0xA5,0x21,0x44,0xF7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6}
45
+#define IID_IDeckLinkVideoFrame_v7_6 /* A8D8238E-6B18-4196-99E1-5AF717B83D32 */ (REFIID){0xA8,0xD8,0x23,0x8E,0x6B,0x18,0x41,0x96,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32}
46
+#define IID_IDeckLinkMutableVideoFrame_v7_6 /* 46FCEE00-B4E6-43D0-91C0-023A7FCEB34F */ (REFIID){0x46,0xFC,0xEE,0x00,0xB4,0xE6,0x43,0xD0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F}
47
+#define IID_IDeckLinkVideoInputFrame_v7_6 /* 9A74FA41-AE9F-47AC-8CF4-01F42DD59965 */ (REFIID){0x9A,0x74,0xFA,0x41,0xAE,0x9F,0x47,0xAC,0x8C,0xF4,0x01,0xF4,0x2D,0xD5,0x99,0x65}
48
+#define IID_IDeckLinkScreenPreviewCallback_v7_6 /* 373F499D-4B4D-4518-AD22-6354E5A5825E */ (REFIID){0x37,0x3F,0x49,0x9D,0x4B,0x4D,0x45,0x18,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E}
49
+#define IID_IDeckLinkGLScreenPreviewHelper_v7_6 /* BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA */ (REFIID){0xBA,0x57,0x5C,0xD9,0xA1,0x5E,0x49,0x7B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA}
50
+#define IID_IDeckLinkVideoConversion_v7_6 /* 3EB504C9-F97D-40FE-A158-D407D48CB53B */ (REFIID){0x3E,0xB5,0x04,0xC9,0xF9,0x7D,0x40,0xFE,0xA1,0x58,0xD4,0x07,0xD4,0x8C,0xB5,0x3B}
51
+#define IID_IDeckLinkConfiguration_v7_6 /* B8EAD569-B764-47F0-A73F-AE40DF6CBF10 */ (REFIID){0xB8,0xEA,0xD5,0x69,0xB7,0x64,0x47,0xF0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10}
52
+
53
+
54
+#if defined(__cplusplus)
55
+
56
+/* Enum BMDVideoConnection - Video connection types */
57
+
58
+typedef uint32_t BMDVideoConnection_v7_6;
59
+enum _BMDVideoConnection_v7_6 {
60
+ bmdVideoConnectionSDI_v7_6 = 'sdi ',
61
+ bmdVideoConnectionHDMI_v7_6 = 'hdmi',
62
+ bmdVideoConnectionOpticalSDI_v7_6 = 'opti',
63
+ bmdVideoConnectionComponent_v7_6 = 'cpnt',
64
+ bmdVideoConnectionComposite_v7_6 = 'cmst',
65
+ bmdVideoConnectionSVideo_v7_6 = 'svid'
66
+};
67
+
68
+// Forward Declarations
69
+
70
+class IDeckLinkVideoOutputCallback_v7_6;
71
+class IDeckLinkInputCallback_v7_6;
72
+class IDeckLinkDisplayModeIterator_v7_6;
73
+class IDeckLinkDisplayMode_v7_6;
74
+class IDeckLinkOutput_v7_6;
75
+class IDeckLinkInput_v7_6;
76
+class IDeckLinkTimecode_v7_6;
77
+class IDeckLinkVideoFrame_v7_6;
78
+class IDeckLinkMutableVideoFrame_v7_6;
79
+class IDeckLinkVideoInputFrame_v7_6;
80
+class IDeckLinkScreenPreviewCallback_v7_6;
81
+class IDeckLinkGLScreenPreviewHelper_v7_6;
82
+class IDeckLinkVideoConversion_v7_6;
83
+
84
+
85
+/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
86
+
87
+class IDeckLinkVideoOutputCallback_v7_6 : public IUnknown
88
+{
89
+public:
90
+ virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame_v7_6 *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
91
+ virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
92
+
93
+protected:
94
+ virtual ~IDeckLinkVideoOutputCallback_v7_6 () {}; // call Release method to drop reference count
95
+};
96
+
97
+
98
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
99
+
100
+class IDeckLinkInputCallback_v7_6 : public IUnknown
101
+{
102
+public:
103
+ virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
104
+ virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_6* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
105
+
106
+protected:
107
+ virtual ~IDeckLinkInputCallback_v7_6 () {}; // call Release method to drop reference count
108
+};
109
+
110
+
111
+/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
112
+
113
+class IDeckLinkDisplayModeIterator_v7_6 : public IUnknown
114
+{
115
+public:
116
+ virtual HRESULT Next (/* out */ IDeckLinkDisplayMode_v7_6 **deckLinkDisplayMode) = 0;
117
+
118
+protected:
119
+ virtual ~IDeckLinkDisplayModeIterator_v7_6 () {}; // call Release method to drop reference count
120
+};
121
+
122
+
123
+/* Interface IDeckLinkDisplayMode - represents a display mode */
124
+
125
+class IDeckLinkDisplayMode_v7_6 : public IUnknown
126
+{
127
+public:
128
+ virtual HRESULT GetName (/* out */ const char **name) = 0;
129
+ virtual BMDDisplayMode GetDisplayMode (void) = 0;
130
+ virtual long GetWidth (void) = 0;
131
+ virtual long GetHeight (void) = 0;
132
+ virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
133
+ virtual BMDFieldDominance GetFieldDominance (void) = 0;
134
+
135
+protected:
136
+ virtual ~IDeckLinkDisplayMode_v7_6 () {}; // call Release method to drop reference count
137
+};
138
+
139
+
140
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
141
+
142
+class IDeckLinkOutput_v7_6 : public IUnknown
143
+{
144
+public:
145
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
146
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
147
+
148
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
149
+
150
+ /* Video Output */
151
+
152
+ virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
153
+ virtual HRESULT DisableVideoOutput (void) = 0;
154
+
155
+ virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
156
+ virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
157
+ virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
158
+
159
+ virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
160
+ virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
161
+ virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v7_6 *theCallback) = 0;
162
+ virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
163
+
164
+ /* Audio Output */
165
+
166
+ virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
167
+ virtual HRESULT DisableAudioOutput (void) = 0;
168
+
169
+ virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
170
+
171
+ virtual HRESULT BeginAudioPreroll (void) = 0;
172
+ virtual HRESULT EndAudioPreroll (void) = 0;
173
+ virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
174
+
175
+ virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
176
+ virtual HRESULT FlushBufferedAudioSamples (void) = 0;
177
+
178
+ virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
179
+
180
+ /* Output Control */
181
+
182
+ virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
183
+ virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
184
+ virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
185
+ virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
186
+
187
+ /* Hardware Timing */
188
+
189
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
190
+
191
+protected:
192
+ virtual ~IDeckLinkOutput_v7_6 () {}; // call Release method to drop reference count
193
+};
194
+
195
+
196
+/* Interface IDeckLinkInput_v7_6 - Created by QueryInterface from IDeckLink. */
197
+
198
+class IDeckLinkInput_v7_6 : public IUnknown
199
+{
200
+public:
201
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
202
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
203
+
204
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
205
+
206
+ /* Video Input */
207
+
208
+ virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
209
+ virtual HRESULT DisableVideoInput (void) = 0;
210
+ virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
211
+
212
+ /* Audio Input */
213
+
214
+ virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
215
+ virtual HRESULT DisableAudioInput (void) = 0;
216
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
217
+
218
+ /* Input Control */
219
+
220
+ virtual HRESULT StartStreams (void) = 0;
221
+ virtual HRESULT StopStreams (void) = 0;
222
+ virtual HRESULT PauseStreams (void) = 0;
223
+ virtual HRESULT FlushStreams (void) = 0;
224
+ virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_6 *theCallback) = 0;
225
+
226
+ /* Hardware Timing */
227
+
228
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
229
+
230
+protected:
231
+ virtual ~IDeckLinkInput_v7_6 () {}; // call Release method to drop reference count
232
+};
233
+
234
+
235
+/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
236
+
237
+class IDeckLinkTimecode_v7_6 : public IUnknown
238
+{
239
+public:
240
+ virtual BMDTimecodeBCD GetBCD (void) = 0;
241
+ virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
242
+ virtual HRESULT GetString (/* out */ const char **timecode) = 0;
243
+ virtual BMDTimecodeFlags GetFlags (void) = 0;
244
+
245
+protected:
246
+ virtual ~IDeckLinkTimecode_v7_6 () {}; // call Release method to drop reference count
247
+};
248
+
249
+
250
+/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
251
+
252
+class IDeckLinkVideoFrame_v7_6 : public IUnknown
253
+{
254
+public:
255
+ virtual long GetWidth (void) = 0;
256
+ virtual long GetHeight (void) = 0;
257
+ virtual long GetRowBytes (void) = 0;
258
+ virtual BMDPixelFormat GetPixelFormat (void) = 0;
259
+ virtual BMDFrameFlags GetFlags (void) = 0;
260
+ virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
261
+
262
+ virtual HRESULT GetTimecode (BMDTimecodeFormat format, /* out */ IDeckLinkTimecode_v7_6 **timecode) = 0;
263
+ virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
264
+
265
+protected:
266
+ virtual ~IDeckLinkVideoFrame_v7_6 () {}; // call Release method to drop reference count
267
+};
268
+
269
+
270
+/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
271
+
272
+class IDeckLinkMutableVideoFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
273
+{
274
+public:
275
+ virtual HRESULT SetFlags (BMDFrameFlags newFlags) = 0;
276
+
277
+ virtual HRESULT SetTimecode (BMDTimecodeFormat format, /* in */ IDeckLinkTimecode_v7_6 *timecode) = 0;
278
+ virtual HRESULT SetTimecodeFromComponents (BMDTimecodeFormat format, uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t frames, BMDTimecodeFlags flags) = 0;
279
+ virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
280
+
281
+protected:
282
+ virtual ~IDeckLinkMutableVideoFrame_v7_6 () {}; // call Release method to drop reference count
283
+};
284
+
285
+
286
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
287
+
288
+class IDeckLinkVideoInputFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
289
+{
290
+public:
291
+ virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
292
+ virtual HRESULT GetHardwareReferenceTimestamp (BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
293
+
294
+protected:
295
+ virtual ~IDeckLinkVideoInputFrame_v7_6 () {}; // call Release method to drop reference count
296
+};
297
+
298
+
299
+/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
300
+
301
+class IDeckLinkScreenPreviewCallback_v7_6 : public IUnknown
302
+{
303
+public:
304
+ virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
305
+
306
+protected:
307
+ virtual ~IDeckLinkScreenPreviewCallback_v7_6 () {}; // call Release method to drop reference count
308
+};
309
+
310
+
311
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
312
+
313
+class IDeckLinkGLScreenPreviewHelper_v7_6 : public IUnknown
314
+{
315
+public:
316
+
317
+ /* Methods must be called with OpenGL context set */
318
+
319
+ virtual HRESULT InitializeGL (void) = 0;
320
+ virtual HRESULT PaintGL (void) = 0;
321
+ virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
322
+
323
+protected:
324
+ virtual ~IDeckLinkGLScreenPreviewHelper_v7_6 () {}; // call Release method to drop reference count
325
+};
326
+
327
+
328
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
329
+
330
+class IDeckLinkVideoConversion_v7_6 : public IUnknown
331
+{
332
+public:
333
+ virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame_v7_6* srcFrame, /* in */ IDeckLinkVideoFrame_v7_6* dstFrame) = 0;
334
+
335
+protected:
336
+ virtual ~IDeckLinkVideoConversion_v7_6 () {}; // call Release method to drop reference count
337
+};
338
+
339
+/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */
340
+
341
+class IDeckLinkConfiguration_v7_6 : public IUnknown
342
+{
343
+public:
344
+ virtual HRESULT GetConfigurationValidator (/* out */ IDeckLinkConfiguration_v7_6 **configObject) = 0;
345
+ virtual HRESULT WriteConfigurationToPreferences (void) = 0;
346
+
347
+ /* Video Output Configuration */
348
+
349
+ virtual HRESULT SetVideoOutputFormat (/* in */ BMDVideoConnection_v7_6 videoOutputConnection) = 0;
350
+ virtual HRESULT IsVideoOutputActive (/* in */ BMDVideoConnection_v7_6 videoOutputConnection, /* out */ bool *active) = 0;
351
+
352
+ virtual HRESULT SetAnalogVideoOutputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
353
+ virtual HRESULT GetAnalogVideoOutputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
354
+
355
+ virtual HRESULT EnableFieldFlickerRemovalWhenPaused (/* in */ bool enable) = 0;
356
+ virtual HRESULT IsEnabledFieldFlickerRemovalWhenPaused (/* out */ bool *enabled) = 0;
357
+
358
+ virtual HRESULT Set444And3GBpsVideoOutput (/* in */ bool enable444VideoOutput, /* in */ bool enable3GbsOutput) = 0;
359
+ virtual HRESULT Get444And3GBpsVideoOutput (/* out */ bool *is444VideoOutputEnabled, /* out */ bool *threeGbsOutputEnabled) = 0;
360
+
361
+ virtual HRESULT SetVideoOutputConversionMode (/* in */ BMDVideoOutputConversionMode conversionMode) = 0;
362
+ virtual HRESULT GetVideoOutputConversionMode (/* out */ BMDVideoOutputConversionMode *conversionMode) = 0;
363
+
364
+ virtual HRESULT Set_HD1080p24_to_HD1080i5994_Conversion (/* in */ bool enable) = 0;
365
+ virtual HRESULT Get_HD1080p24_to_HD1080i5994_Conversion (/* out */ bool *enabled) = 0;
366
+
367
+ /* Video Input Configuration */
368
+
369
+ virtual HRESULT SetVideoInputFormat (/* in */ BMDVideoConnection_v7_6 videoInputFormat) = 0;
370
+ virtual HRESULT GetVideoInputFormat (/* out */ BMDVideoConnection_v7_6 *videoInputFormat) = 0;
371
+
372
+ virtual HRESULT SetAnalogVideoInputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
373
+ virtual HRESULT GetAnalogVideoInputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
374
+
375
+ virtual HRESULT SetVideoInputConversionMode (/* in */ BMDVideoInputConversionMode conversionMode) = 0;
376
+ virtual HRESULT GetVideoInputConversionMode (/* out */ BMDVideoInputConversionMode *conversionMode) = 0;
377
+
378
+ virtual HRESULT SetBlackVideoOutputDuringCapture (/* in */ bool blackOutInCapture) = 0;
379
+ virtual HRESULT GetBlackVideoOutputDuringCapture (/* out */ bool *blackOutInCapture) = 0;
380
+
381
+ virtual HRESULT Set32PulldownSequenceInitialTimecodeFrame (/* in */ uint32_t aFrameTimecode) = 0;
382
+ virtual HRESULT Get32PulldownSequenceInitialTimecodeFrame (/* out */ uint32_t *aFrameTimecode) = 0;
383
+
384
+ virtual HRESULT SetVancSourceLineMapping (/* in */ uint32_t activeLine1VANCsource, /* in */ uint32_t activeLine2VANCsource, /* in */ uint32_t activeLine3VANCsource) = 0;
385
+ virtual HRESULT GetVancSourceLineMapping (/* out */ uint32_t *activeLine1VANCsource, /* out */ uint32_t *activeLine2VANCsource, /* out */ uint32_t *activeLine3VANCsource) = 0;
386
+
387
+ /* Audio Input Configuration */
388
+
389
+ virtual HRESULT SetAudioInputFormat (/* in */ BMDAudioConnection audioInputFormat) = 0;
390
+ virtual HRESULT GetAudioInputFormat (/* out */ BMDAudioConnection *audioInputFormat) = 0;
391
+};
392
+
393
+/* Functions */
394
+
395
+extern "C" {
396
+
397
+ IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void);
398
+ IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void);
399
+ IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void);
400
+
401
+};
402
+
403
+
404
+#endif // defined(__cplusplus)
405
+#endif // __DeckLink_API_v7_6_h__
406
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v7_9.h
Added
90
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2010 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v7_9.h */
30
+
31
+#ifndef __DeckLink_API_v7_9_h__
32
+#define __DeckLink_API_v7_9_h__
33
+
34
+#include "DeckLinkAPI.h"
35
+
36
+// Interface ID Declarations
37
+#define IID_IDeckLinkDeckControl_v7_9 /* A4D81043-0619-42B7-8ED6-602D29041DF7 */ (REFIID){0xA4,0xD8,0x10,0x43,0x06,0x19,0x42,0xB7,0x8E,0xD6,0x60,0x2D,0x29,0x04,0x1D,0xF7}
38
+
39
+#if defined(__cplusplus)
40
+
41
+
42
+// Forward Declarations
43
+class IDeckLinkDeckControl_v7_9;
44
+
45
+/* Interface IDeckLinkDeckControl_v7_9 - Deck Control main interface */
46
+class IDeckLinkDeckControl_v7_9 : public IUnknown
47
+{
48
+public:
49
+ virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
50
+ virtual HRESULT Close (/* in */ bool standbyOn) = 0;
51
+ virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
52
+ virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
53
+ virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
54
+ virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
55
+ virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
56
+ virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
57
+ virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
58
+ virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
59
+ virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
60
+ virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
61
+ virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
62
+ virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
63
+ virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
64
+ virtual HRESULT GetTimecodeString (/* out */ const char **currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
65
+ virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
66
+ virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
67
+ virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
68
+ virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
69
+ virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
70
+ virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
71
+ virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
72
+ virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
73
+ virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
74
+ virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
75
+ virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
76
+ virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
77
+ virtual HRESULT Abort (void) = 0;
78
+ virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
79
+ virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
80
+ virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback *callback) = 0;
81
+
82
+protected:
83
+ virtual ~IDeckLinkDeckControl_v7_9 () {}; // call Release method to drop reference count
84
+};
85
+
86
+
87
+
88
+#endif // defined(__cplusplus)
89
+#endif // __DeckLink_API_v7_9_h__
90
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v8_0.h
Added
65
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2011 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v8_0_H
30
+#define BMD_DECKLINKAPI_v8_0_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Interface ID Declarations
35
+
36
+#define IID_IDeckLink_v8_0 /* 62BFF75D-6569-4E55-8D4D-66AA03829ABC */ (REFIID){0x62,0xBF,0xF7,0x5D,0x65,0x69,0x4E,0x55,0x8D,0x4D,0x66,0xAA,0x03,0x82,0x9A,0xBC}
37
+#define IID_IDeckLinkIterator_v8_0 /* 74E936FC-CC28-4A67-81A0-1E94E52D4E69 */ (REFIID){0x74,0xE9,0x36,0xFC,0xCC,0x28,0x4A,0x67,0x81,0xA0,0x1E,0x94,0xE5,0x2D,0x4E,0x69}
38
+
39
+#if defined (__cplusplus)
40
+
41
+/* Interface IDeckLink_v8_0 - represents a DeckLink device */
42
+
43
+class IDeckLink_v8_0 : public IUnknown
44
+{
45
+public:
46
+ virtual HRESULT GetModelName (/* out */ const char **modelName) = 0;
47
+};
48
+
49
+/* Interface IDeckLinkIterator_v8_0 - enumerates installed DeckLink hardware */
50
+
51
+class IDeckLinkIterator_v8_0 : public IUnknown
52
+{
53
+public:
54
+ virtual HRESULT Next (/* out */ IDeckLink_v8_0 **deckLinkInstance) = 0;
55
+};
56
+
57
+extern "C" {
58
+ IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance_v8_0 (void);
59
+};
60
+
61
+#endif // defined __cplusplus
62
+
63
+#endif /* defined(BMD_DECKLINKAPI_v8_0_H) */
64
+
65
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v8_1.h
Added
113
1
2
+/* -LICENSE-START-
3
+ ** Copyright (c) 2011 Blackmagic Design
4
+ **
5
+ ** Permission is hereby granted, free of charge, to any person or organization
6
+ ** obtaining a copy of the software and accompanying documentation covered by
7
+ ** this license (the "Software") to use, reproduce, display, distribute,
8
+ ** execute, and transmit the Software, and to prepare derivative works of the
9
+ ** Software, and to permit third-parties to whom the Software is furnished to
10
+ ** do so, all subject to the following:
11
+ **
12
+ ** The copyright notices in the Software and this entire statement, including
13
+ ** the above license grant, this restriction and the following disclaimer,
14
+ ** must be included in all copies of the Software, in whole or in part, and
15
+ ** all derivative works of the Software, unless such copies or derivative
16
+ ** works are solely in the form of machine-executable object code generated by
17
+ ** a source language processor.
18
+ **
19
+ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+ ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+ ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+ ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+ ** DEALINGS IN THE SOFTWARE.
26
+ ** -LICENSE-END-
27
+ */
28
+
29
+#ifndef BMD_DECKLINKAPI_v8_1_H
30
+#define BMD_DECKLINKAPI_v8_1_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+
35
+// Interface ID Declarations
36
+
37
+#define IID_IDeckLinkDeckControlStatusCallback_v8_1 /* E5F693C1-4283-4716-B18F-C1431521955B */ (REFIID){0xE5,0xF6,0x93,0xC1,0x42,0x83,0x47,0x16,0xB1,0x8F,0xC1,0x43,0x15,0x21,0x95,0x5B}
38
+#define IID_IDeckLinkDeckControl_v8_1 /* 522A9E39-0F3C-4742-94EE-D80DE335DA1D */ (REFIID){0x52,0x2A,0x9E,0x39,0x0F,0x3C,0x47,0x42,0x94,0xEE,0xD8,0x0D,0xE3,0x35,0xDA,0x1D}
39
+
40
+
41
+/* Enum BMDDeckControlVTRControlState_v8_1 - VTR Control state */
42
+
43
+typedef uint32_t BMDDeckControlVTRControlState_v8_1;
44
+enum _BMDDeckControlVTRControlState_v8_1 {
45
+ bmdDeckControlNotInVTRControlMode_v8_1 = 'nvcm',
46
+ bmdDeckControlVTRControlPlaying_v8_1 = 'vtrp',
47
+ bmdDeckControlVTRControlRecording_v8_1 = 'vtrr',
48
+ bmdDeckControlVTRControlStill_v8_1 = 'vtra',
49
+ bmdDeckControlVTRControlSeeking_v8_1 = 'vtrs',
50
+ bmdDeckControlVTRControlStopped_v8_1 = 'vtro'
51
+};
52
+
53
+
54
+/* Interface IDeckLinkDeckControlStatusCallback_v8_1 - Deck control state change callback. */
55
+
56
+class IDeckLinkDeckControlStatusCallback_v8_1 : public IUnknown
57
+{
58
+public:
59
+ virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
60
+ virtual HRESULT VTRControlStateChanged (/* in */ BMDDeckControlVTRControlState_v8_1 newState, /* in */ BMDDeckControlError error) = 0;
61
+ virtual HRESULT DeckControlEventReceived (/* in */ BMDDeckControlEvent event, /* in */ BMDDeckControlError error) = 0;
62
+ virtual HRESULT DeckControlStatusChanged (/* in */ BMDDeckControlStatusFlags flags, /* in */ uint32_t mask) = 0;
63
+
64
+protected:
65
+ virtual ~IDeckLinkDeckControlStatusCallback_v8_1 () {}; // call Release method to drop reference count
66
+};
67
+
68
+/* Interface IDeckLinkDeckControl_v8_1 - Deck Control main interface */
69
+
70
+class IDeckLinkDeckControl_v8_1 : public IUnknown
71
+{
72
+public:
73
+ virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
74
+ virtual HRESULT Close (/* in */ bool standbyOn) = 0;
75
+ virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState_v8_1 *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
76
+ virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
77
+ virtual HRESULT SendCommand (/* in */ uint8_t *inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t *outBuffer, /* out */ uint32_t *outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError *error) = 0;
78
+ virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
79
+ virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
80
+ virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
81
+ virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
82
+ virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
83
+ virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
84
+ virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
85
+ virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
86
+ virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
87
+ virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
88
+ virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
89
+ virtual HRESULT GetTimecodeString (/* out */ const char **currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
90
+ virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
91
+ virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
92
+ virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
93
+ virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
94
+ virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
95
+ virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
96
+ virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
97
+ virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
98
+ virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
99
+ virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
100
+ virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
101
+ virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
102
+ virtual HRESULT Abort (void) = 0;
103
+ virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
104
+ virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
105
+ virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback_v8_1 *callback) = 0;
106
+
107
+protected:
108
+ virtual ~IDeckLinkDeckControl_v8_1 () {}; // call Release method to drop reference count
109
+};
110
+
111
+
112
+#endif // BMD_DECKLINKAPI_v8_1_H
113
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v9_2.h
Added
83
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2012 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v9_2_H
30
+#define BMD_DECKLINKAPI_v9_2_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+
35
+// Interface ID Declarations
36
+
37
+#define IID_IDeckLinkInput_v9_2 /* 6D40EF78-28B9-4E21-990D-95BB7750A04F */ (REFIID){0x6D,0x40,0xEF,0x78,0x28,0xB9,0x4E,0x21,0x99,0x0D,0x95,0xBB,0x77,0x50,0xA0,0x4F}
38
+
39
+
40
+#if defined(__cplusplus)
41
+
42
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
43
+
44
+class IDeckLinkInput_v9_2 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
48
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
49
+
50
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
51
+
52
+ /* Video Input */
53
+
54
+ virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
55
+ virtual HRESULT DisableVideoInput (void) = 0;
56
+ virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
57
+
58
+ /* Audio Input */
59
+
60
+ virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
61
+ virtual HRESULT DisableAudioInput (void) = 0;
62
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
63
+
64
+ /* Input Control */
65
+
66
+ virtual HRESULT StartStreams (void) = 0;
67
+ virtual HRESULT StopStreams (void) = 0;
68
+ virtual HRESULT PauseStreams (void) = 0;
69
+ virtual HRESULT FlushStreams (void) = 0;
70
+ virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
71
+
72
+ /* Hardware Timing */
73
+
74
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
75
+
76
+protected:
77
+ virtual ~IDeckLinkInput_v9_2 () {}; // call Release method to drop reference count
78
+};
79
+
80
+
81
+#endif // defined(__cplusplus)
82
+#endif // BMD_DECKLINKAPI_v9_2_H
83
obs-studio-0.16.4.tar.xz/plugins/decklink/linux/decklink-sdk/DeckLinkAPI_v9_9.h
Added
100
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2013 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v9_9_H
30
+#define BMD_DECKLINKAPI_v9_9_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+
35
+// Interface ID Declarations
36
+
37
+#define IID_IDeckLinkOutput_v9_9 /* A3EF0963-0862-44ED-92A9-EE89ABF431C7 */ (REFIID){0xA3,0xEF,0x09,0x63,0x08,0x62,0x44,0xED,0x92,0xA9,0xEE,0x89,0xAB,0xF4,0x31,0xC7}
38
+
39
+
40
+#if defined(__cplusplus)
41
+
42
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
43
+
44
+class IDeckLinkOutput_v9_9 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
48
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
49
+
50
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
51
+
52
+ /* Video Output */
53
+
54
+ virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
55
+ virtual HRESULT DisableVideoOutput (void) = 0;
56
+
57
+ virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
58
+ virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
59
+ virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
60
+
61
+ virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
62
+ virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
63
+ virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
64
+ virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
65
+
66
+ /* Audio Output */
67
+
68
+ virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
69
+ virtual HRESULT DisableAudioOutput (void) = 0;
70
+
71
+ virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
72
+
73
+ virtual HRESULT BeginAudioPreroll (void) = 0;
74
+ virtual HRESULT EndAudioPreroll (void) = 0;
75
+ virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
76
+
77
+ virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
78
+ virtual HRESULT FlushBufferedAudioSamples (void) = 0;
79
+
80
+ virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
81
+
82
+ /* Output Control */
83
+
84
+ virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
85
+ virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
86
+ virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
87
+ virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
88
+ virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
89
+
90
+ /* Hardware Timing */
91
+
92
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
93
+
94
+protected:
95
+ virtual ~IDeckLinkOutput_v9_9 () {}; // call Release method to drop reference count
96
+};
97
+
98
+#endif // defined(__cplusplus)
99
+#endif // BMD_DECKLINKAPI_v9_9_H
100
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI.h
Changed
479
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
BMD_CONST REFIID IID_IDeckLinkVideoOutputCallback = /* 20AA5225-1958-47CB-820B-80A8D521A6EE */ {0x20,0xAA,0x52,0x25,0x19,0x58,0x47,0xCB,0x82,0x0B,0x80,0xA8,0xD5,0x21,0xA6,0xEE};
11
BMD_CONST REFIID IID_IDeckLinkInputCallback = /* DD04E5EC-7415-42AB-AE4A-E80C4DFC044A */ {0xDD,0x04,0xE5,0xEC,0x74,0x15,0x42,0xAB,0xAE,0x4A,0xE8,0x0C,0x4D,0xFC,0x04,0x4A};
12
+BMD_CONST REFIID IID_IDeckLinkEncoderInputCallback = /* ACF13E61-F4A0-4974-A6A7-59AFF6268B31 */ {0xAC,0xF1,0x3E,0x61,0xF4,0xA0,0x49,0x74,0xA6,0xA7,0x59,0xAF,0xF6,0x26,0x8B,0x31};
13
BMD_CONST REFIID IID_IDeckLinkMemoryAllocator = /* B36EB6E7-9D29-4AA8-92EF-843B87A289E8 */ {0xB3,0x6E,0xB6,0xE7,0x9D,0x29,0x4A,0xA8,0x92,0xEF,0x84,0x3B,0x87,0xA2,0x89,0xE8};
14
BMD_CONST REFIID IID_IDeckLinkAudioOutputCallback = /* 403C681B-7F46-4A12-B993-2BB127084EE6 */ {0x40,0x3C,0x68,0x1B,0x7F,0x46,0x4A,0x12,0xB9,0x93,0x2B,0xB1,0x27,0x08,0x4E,0xE6};
15
BMD_CONST REFIID IID_IDeckLinkIterator = /* 50FB36CD-3063-4B73-BDBB-958087F2D8BA */ {0x50,0xFB,0x36,0xCD,0x30,0x63,0x4B,0x73,0xBD,0xBB,0x95,0x80,0x87,0xF2,0xD8,0xBA};
16
BMD_CONST REFIID IID_IDeckLinkAPIInformation = /* 7BEA3C68-730D-4322-AF34-8A7152B532A4 */ {0x7B,0xEA,0x3C,0x68,0x73,0x0D,0x43,0x22,0xAF,0x34,0x8A,0x71,0x52,0xB5,0x32,0xA4};
17
BMD_CONST REFIID IID_IDeckLinkOutput = /* CC5C8A6E-3F2F-4B3A-87EA-FD78AF300564 */ {0xCC,0x5C,0x8A,0x6E,0x3F,0x2F,0x4B,0x3A,0x87,0xEA,0xFD,0x78,0xAF,0x30,0x05,0x64};
18
BMD_CONST REFIID IID_IDeckLinkInput = /* AF22762B-DFAC-4846-AA79-FA8883560995 */ {0xAF,0x22,0x76,0x2B,0xDF,0xAC,0x48,0x46,0xAA,0x79,0xFA,0x88,0x83,0x56,0x09,0x95};
19
+BMD_CONST REFIID IID_IDeckLinkEncoderInput = /* 270587DA-6B7D-42E7-A1F0-6D853F581185 */ {0x27,0x05,0x87,0xDA,0x6B,0x7D,0x42,0xE7,0xA1,0xF0,0x6D,0x85,0x3F,0x58,0x11,0x85};
20
BMD_CONST REFIID IID_IDeckLinkVideoFrame = /* 3F716FE0-F023-4111-BE5D-EF4414C05B17 */ {0x3F,0x71,0x6F,0xE0,0xF0,0x23,0x41,0x11,0xBE,0x5D,0xEF,0x44,0x14,0xC0,0x5B,0x17};
21
BMD_CONST REFIID IID_IDeckLinkMutableVideoFrame = /* 69E2639F-40DA-4E19-B6F2-20ACE815C390 */ {0x69,0xE2,0x63,0x9F,0x40,0xDA,0x4E,0x19,0xB6,0xF2,0x20,0xAC,0xE8,0x15,0xC3,0x90};
22
BMD_CONST REFIID IID_IDeckLinkVideoFrame3DExtensions = /* DA0F7E4A-EDC7-48A8-9CDD-2DB51C729CD7 */ {0xDA,0x0F,0x7E,0x4A,0xED,0xC7,0x48,0xA8,0x9C,0xDD,0x2D,0xB5,0x1C,0x72,0x9C,0xD7};
23
+BMD_CONST REFIID IID_IDeckLinkVideoFrameMetadataExtensions = /* D5973DC9-6432-46D0-8F0B-2496F8A1238F */ {0xD5,0x97,0x3D,0xC9,0x64,0x32,0x46,0xD0,0x8F,0x0B,0x24,0x96,0xF8,0xA1,0x23,0x8F};
24
BMD_CONST REFIID IID_IDeckLinkVideoInputFrame = /* 05CFE374-537C-4094-9A57-680525118F44 */ {0x05,0xCF,0xE3,0x74,0x53,0x7C,0x40,0x94,0x9A,0x57,0x68,0x05,0x25,0x11,0x8F,0x44};
25
BMD_CONST REFIID IID_IDeckLinkVideoFrameAncillary = /* 732E723C-D1A4-4E29-9E8E-4A88797A0004 */ {0x73,0x2E,0x72,0x3C,0xD1,0xA4,0x4E,0x29,0x9E,0x8E,0x4A,0x88,0x79,0x7A,0x00,0x04};
26
+BMD_CONST REFIID IID_IDeckLinkEncoderPacket = /* B693F36C-316E-4AF1-B6C2-F389A4BCA620 */ {0xB6,0x93,0xF3,0x6C,0x31,0x6E,0x4A,0xF1,0xB6,0xC2,0xF3,0x89,0xA4,0xBC,0xA6,0x20};
27
+BMD_CONST REFIID IID_IDeckLinkEncoderVideoPacket = /* 4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0 */ {0x4E,0x7F,0xD9,0x44,0xE8,0xC7,0x4E,0xAC,0xB8,0xC0,0x7B,0x77,0xF8,0x0F,0x5A,0xE0};
28
+BMD_CONST REFIID IID_IDeckLinkEncoderAudioPacket = /* 49E8EDC8-693B-4E14-8EF6-12C658F5A07A */ {0x49,0xE8,0xED,0xC8,0x69,0x3B,0x4E,0x14,0x8E,0xF6,0x12,0xC6,0x58,0xF5,0xA0,0x7A};
29
+BMD_CONST REFIID IID_IDeckLinkH265NALPacket = /* 639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7 */ {0x63,0x9C,0x8E,0x0B,0x68,0xD5,0x4B,0xDE,0xA6,0xD4,0x95,0xF3,0xAE,0xAF,0xF2,0xE7};
30
BMD_CONST REFIID IID_IDeckLinkAudioInputPacket = /* E43D5870-2894-11DE-8C30-0800200C9A66 */ {0xE4,0x3D,0x58,0x70,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66};
31
BMD_CONST REFIID IID_IDeckLinkScreenPreviewCallback = /* B1D3F49A-85FE-4C5D-95C8-0B5D5DCCD438 */ {0xB1,0xD3,0xF4,0x9A,0x85,0xFE,0x4C,0x5D,0x95,0xC8,0x0B,0x5D,0x5D,0xCC,0xD4,0x38};
32
BMD_CONST REFIID IID_IDeckLinkCocoaScreenPreviewCallback = /* D174152F-8F96-4C07-83A5-DD5F5AF0A2AA */ {0xD1,0x74,0x15,0x2F,0x8F,0x96,0x4C,0x07,0x83,0xA5,0xDD,0x5F,0x5A,0xF0,0xA2,0xAA};
33
34
BMD_CONST REFIID IID_IDeckLinkNotificationCallback = /* B002A1EC-070D-4288-8289-BD5D36E5FF0D */ {0xB0,0x02,0xA1,0xEC,0x07,0x0D,0x42,0x88,0x82,0x89,0xBD,0x5D,0x36,0xE5,0xFF,0x0D};
35
BMD_CONST REFIID IID_IDeckLinkNotification = /* 0A1FB207-E215-441B-9B19-6FA1575946C5 */ {0x0A,0x1F,0xB2,0x07,0xE2,0x15,0x44,0x1B,0x9B,0x19,0x6F,0xA1,0x57,0x59,0x46,0xC5};
36
BMD_CONST REFIID IID_IDeckLinkAttributes = /* ABC11843-D966-44CB-96E2-A1CB5D3135C4 */ {0xAB,0xC1,0x18,0x43,0xD9,0x66,0x44,0xCB,0x96,0xE2,0xA1,0xCB,0x5D,0x31,0x35,0xC4};
37
+BMD_CONST REFIID IID_IDeckLinkStatus = /* 5F558200-4028-49BC-BEAC-DB3FA4A96E46 */ {0x5F,0x55,0x82,0x00,0x40,0x28,0x49,0xBC,0xBE,0xAC,0xDB,0x3F,0xA4,0xA9,0x6E,0x46};
38
BMD_CONST REFIID IID_IDeckLinkKeyer = /* 89AFCAF5-65F8-421E-98F7-96FE5F5BFBA3 */ {0x89,0xAF,0xCA,0xF5,0x65,0xF8,0x42,0x1E,0x98,0xF7,0x96,0xFE,0x5F,0x5B,0xFB,0xA3};
39
BMD_CONST REFIID IID_IDeckLinkVideoConversion = /* 3BBCB8A2-DA2C-42D9-B5D8-88083644E99A */ {0x3B,0xBC,0xB8,0xA2,0xDA,0x2C,0x42,0xD9,0xB5,0xD8,0x88,0x08,0x36,0x44,0xE9,0x9A};
40
BMD_CONST REFIID IID_IDeckLinkDeviceNotificationCallback = /* 4997053B-0ADF-4CC8-AC70-7A50C4BE728F */ {0x49,0x97,0x05,0x3B,0x0A,0xDF,0x4C,0xC8,0xAC,0x70,0x7A,0x50,0xC4,0xBE,0x72,0x8F};
41
42
bmdVideoOutputDualStream3D = 1 << 4
43
};
44
45
+/* Enum BMDPacketType - Type of packet */
46
+
47
+typedef uint32_t BMDPacketType;
48
+enum _BMDPacketType {
49
+ bmdPacketTypeStreamInterruptedMarker = 'sint', // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable
50
+ bmdPacketTypeStreamData = 'sdat' // Regular stream data
51
+};
52
+
53
/* Enum BMDFrameFlags - Frame flags */
54
55
typedef uint32_t BMDFrameFlags;
56
enum _BMDFrameFlags {
57
bmdFrameFlagDefault = 0,
58
bmdFrameFlagFlipVertical = 1 << 0,
59
+ bmdFrameContainsHDRMetadata = 1 << 1,
60
61
/* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
62
63
64
65
typedef uint32_t BMDDeckLinkCapturePassthroughMode;
66
enum _BMDDeckLinkCapturePassthroughMode {
67
+ bmdDeckLinkCapturePassthroughModeDisabled = 'pdis',
68
bmdDeckLinkCapturePassthroughModeDirect = 'pdir',
69
bmdDeckLinkCapturePassthroughModeCleanSwitch = 'pcln'
70
};
71
72
bmdReferenceLocked = 1 << 1
73
};
74
75
+/* Enum BMDAudioFormat - Audio Format */
76
+
77
+typedef uint32_t BMDAudioFormat;
78
+enum _BMDAudioFormat {
79
+ bmdAudioFormatPCM = 'lpcm' // Linear signed PCM samples
80
+};
81
+
82
/* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
83
84
typedef uint32_t BMDAudioSampleRate;
85
86
typedef uint32_t BMDIdleVideoOutputOperation;
87
enum _BMDIdleVideoOutputOperation {
88
bmdIdleVideoOutputBlack = 'blac',
89
- bmdIdleVideoOutputLastFrame = 'lafa',
90
- bmdIdleVideoOutputDesktop = 'desk'
91
+ bmdIdleVideoOutputLastFrame = 'lafa'
92
+};
93
+
94
+/* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */
95
+
96
+typedef uint32_t BMDVideoEncoderFrameCodingMode;
97
+enum _BMDVideoEncoderFrameCodingMode {
98
+ bmdVideoEncoderFrameCodingModeInter = 'inte',
99
+ bmdVideoEncoderFrameCodingModeIntra = 'intr'
100
+};
101
+
102
+/* Enum BMDDNxHRLevel - DNxHR Levels */
103
+
104
+typedef uint32_t BMDDNxHRLevel;
105
+enum _BMDDNxHRLevel {
106
+ bmdDNxHRLevelSQ = 'dnsq',
107
+ bmdDNxHRLevelLB = 'dnlb',
108
+ bmdDNxHRLevelHQ = 'dnhq',
109
+ bmdDNxHRLevelHQX = 'dhqx',
110
+ bmdDNxHRLevel444 = 'd444'
111
+};
112
+
113
+/* Enum BMDLinkConfiguration - Video link configuration */
114
+
115
+typedef uint32_t BMDLinkConfiguration;
116
+enum _BMDLinkConfiguration {
117
+ bmdLinkConfigurationSingleLink = 'lcsl',
118
+ bmdLinkConfigurationDualLink = 'lcdl',
119
+ bmdLinkConfigurationQuadLink = 'lcql'
120
+};
121
+
122
+/* Enum BMDDeviceInterface - Device interface type */
123
+
124
+typedef uint32_t BMDDeviceInterface;
125
+enum _BMDDeviceInterface {
126
+ bmdDeviceInterfacePCI = 'pci ',
127
+ bmdDeviceInterfaceUSB = 'usb ',
128
+ bmdDeviceInterfaceThunderbolt = 'thun'
129
+};
130
+
131
+/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
132
+
133
+typedef uint32_t BMDDeckLinkFrameMetadataID;
134
+enum _BMDDeckLinkFrameMetadataID {
135
+ bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = 'eotf', // EOTF in range 0-7 as per CEA 861.3
136
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = 'hdrx', // Red display primaries in range 0.0 - 1.0
137
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = 'hdry', // Red display primaries in range 0.0 - 1.0
138
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = 'hdgx', // Green display primaries in range 0.0 - 1.0
139
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenY = 'hdgy', // Green display primaries in range 0.0 - 1.0
140
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueX = 'hdbx', // Blue display primaries in range 0.0 - 1.0
141
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueY = 'hdby', // Blue display primaries in range 0.0 - 1.0
142
+ bmdDeckLinkFrameMetadataHDRWhitePointX = 'hdwx', // White point in range 0.0 - 1.0
143
+ bmdDeckLinkFrameMetadataHDRWhitePointY = 'hdwy', // White point in range 0.0 - 1.0
144
+ bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = 'hdml', // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
145
+ bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = 'hmil', // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
146
+ bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = 'mcll', // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
147
+ bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = 'fall' // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
148
+};
149
+
150
+/* Enum BMDDuplexMode - Duplex for configurable ports */
151
+
152
+typedef uint32_t BMDDuplexMode;
153
+enum _BMDDuplexMode {
154
+ bmdDuplexModeFull = 'fdup',
155
+ bmdDuplexModeHalf = 'hdup'
156
};
157
158
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
159
160
BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain = 'ovog',
161
BMDDeckLinkHasVideoInputAntiAliasingFilter = 'aafl',
162
BMDDeckLinkHasBypass = 'byps',
163
- BMDDeckLinkSupportsDesktopDisplay = 'extd',
164
BMDDeckLinkSupportsClockTimingAdjustment = 'ctad',
165
BMDDeckLinkSupportsFullDuplex = 'fdup',
166
BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset = 'frin',
167
+ BMDDeckLinkSupportsSMPTELevelAOutput = 'lvla',
168
+ BMDDeckLinkSupportsDualLinkSDI = 'sdls',
169
+ BMDDeckLinkSupportsQuadLinkSDI = 'sqls',
170
+ BMDDeckLinkSupportsIdleOutput = 'idou',
171
+ BMDDeckLinkHasLTCTimecodeInput = 'hltc',
172
+ BMDDeckLinkSupportsDuplexModeConfiguration = 'dupx',
173
+ BMDDeckLinkSupportsHDRMetadata = 'hdrm',
174
175
/* Integers */
176
177
178
BMDDeckLinkNumberOfSubDevices = 'nsbd',
179
BMDDeckLinkSubDeviceIndex = 'subi',
180
BMDDeckLinkPersistentID = 'peid',
181
+ BMDDeckLinkDeviceGroupID = 'dgid',
182
BMDDeckLinkTopologicalID = 'toid',
183
BMDDeckLinkVideoOutputConnections = 'vocn',
184
BMDDeckLinkVideoInputConnections = 'vicn',
185
BMDDeckLinkAudioOutputConnections = 'aocn',
186
BMDDeckLinkAudioInputConnections = 'aicn',
187
- BMDDeckLinkDeviceBusyState = 'dbst',
188
BMDDeckLinkVideoIOSupport = 'vios', // Returns a BMDVideoIOSupport bit field
189
+ BMDDeckLinkDeckControlConnections = 'dccn',
190
+ BMDDeckLinkDeviceInterface = 'dbus', // Returns a BMDDeviceInterface
191
+ BMDDeckLinkAudioInputRCAChannelCount = 'airc',
192
+ BMDDeckLinkAudioInputXLRChannelCount = 'aixc',
193
+ BMDDeckLinkAudioOutputRCAChannelCount = 'aorc',
194
+ BMDDeckLinkAudioOutputXLRChannelCount = 'aoxc',
195
+ BMDDeckLinkPairedDevicePersistentID = 'ppid',
196
197
/* Floats */
198
199
200
BMDDeckLinkVideoInputGainMaximum = 'vigx',
201
BMDDeckLinkVideoOutputGainMinimum = 'vogm',
202
BMDDeckLinkVideoOutputGainMaximum = 'vogx',
203
+ BMDDeckLinkMicrophoneInputGainMinimum = 'migm',
204
+ BMDDeckLinkMicrophoneInputGainMaximum = 'migx',
205
206
/* Strings */
207
208
- BMDDeckLinkSerialPortDeviceName = 'slpn'
209
+ BMDDeckLinkSerialPortDeviceName = 'slpn',
210
+ BMDDeckLinkVendorName = 'vndr',
211
+ BMDDeckLinkDisplayName = 'dspn',
212
+ BMDDeckLinkModelName = 'mdln',
213
+ BMDDeckLinkDeviceHandle = 'devh'
214
};
215
216
/* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
217
218
BMDDeckLinkAPIVersion = 'vers'
219
};
220
221
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
222
+
223
+typedef uint32_t BMDDeckLinkStatusID;
224
+enum _BMDDeckLinkStatusID {
225
+
226
+ /* Integers */
227
+
228
+ bmdDeckLinkStatusDetectedVideoInputMode = 'dvim',
229
+ bmdDeckLinkStatusDetectedVideoInputFlags = 'dvif',
230
+ bmdDeckLinkStatusCurrentVideoInputMode = 'cvim',
231
+ bmdDeckLinkStatusCurrentVideoInputPixelFormat = 'cvip',
232
+ bmdDeckLinkStatusCurrentVideoInputFlags = 'cvif',
233
+ bmdDeckLinkStatusCurrentVideoOutputMode = 'cvom',
234
+ bmdDeckLinkStatusCurrentVideoOutputFlags = 'cvof',
235
+ bmdDeckLinkStatusPCIExpressLinkWidth = 'pwid',
236
+ bmdDeckLinkStatusPCIExpressLinkSpeed = 'plnk',
237
+ bmdDeckLinkStatusLastVideoOutputPixelFormat = 'opix',
238
+ bmdDeckLinkStatusReferenceSignalMode = 'refm',
239
+ bmdDeckLinkStatusReferenceSignalFlags = 'reff',
240
+ bmdDeckLinkStatusDuplexMode = 'dupx',
241
+ bmdDeckLinkStatusBusy = 'busy',
242
+
243
+ /* Flags */
244
+
245
+ bmdDeckLinkStatusVideoInputSignalLocked = 'visl',
246
+ bmdDeckLinkStatusReferenceSignalLocked = 'refl'
247
+};
248
+
249
+/* Enum BMDDeckLinkVideoStatusFlags - */
250
+
251
+typedef uint32_t BMDDeckLinkVideoStatusFlags;
252
+enum _BMDDeckLinkVideoStatusFlags {
253
+ bmdDeckLinkVideoStatusPsF = 1 << 0,
254
+ bmdDeckLinkVideoStatusDualStream3D = 1 << 1
255
+};
256
+
257
+/* Enum BMDDuplexStatus - Duplex status of the device */
258
+
259
+typedef uint32_t BMDDuplexStatus;
260
+enum _BMDDuplexStatus {
261
+ bmdDuplexStatusFullDuplex = 'fdup',
262
+ bmdDuplexStatusHalfDuplex = 'hdup',
263
+ bmdDuplexStatusSimplex = 'splx',
264
+ bmdDuplexStatusInactive = 'inac'
265
+};
266
+
267
/* Enum BMDDeviceBusyState - Current device busy state */
268
269
typedef uint32_t BMDDeviceBusyState;
270
271
272
typedef uint32_t BMDNotifications;
273
enum _BMDNotifications {
274
- bmdPreferencesChanged = 'pref'
275
+ bmdPreferencesChanged = 'pref',
276
+ bmdStatusChanged = 'stat'
277
};
278
279
#if defined(__cplusplus)
280
281
282
class IDeckLinkVideoOutputCallback;
283
class IDeckLinkInputCallback;
284
+class IDeckLinkEncoderInputCallback;
285
class IDeckLinkMemoryAllocator;
286
class IDeckLinkAudioOutputCallback;
287
class IDeckLinkIterator;
288
class IDeckLinkAPIInformation;
289
class IDeckLinkOutput;
290
class IDeckLinkInput;
291
+class IDeckLinkEncoderInput;
292
class IDeckLinkVideoFrame;
293
class IDeckLinkMutableVideoFrame;
294
class IDeckLinkVideoFrame3DExtensions;
295
+class IDeckLinkVideoFrameMetadataExtensions;
296
class IDeckLinkVideoInputFrame;
297
class IDeckLinkVideoFrameAncillary;
298
+class IDeckLinkEncoderPacket;
299
+class IDeckLinkEncoderVideoPacket;
300
+class IDeckLinkEncoderAudioPacket;
301
+class IDeckLinkH265NALPacket;
302
class IDeckLinkAudioInputPacket;
303
class IDeckLinkScreenPreviewCallback;
304
class IDeckLinkCocoaScreenPreviewCallback;
305
306
class IDeckLinkNotificationCallback;
307
class IDeckLinkNotification;
308
class IDeckLinkAttributes;
309
+class IDeckLinkStatus;
310
class IDeckLinkKeyer;
311
class IDeckLinkVideoConversion;
312
class IDeckLinkDeviceNotificationCallback;
313
314
virtual ~IDeckLinkInputCallback () {} // call Release method to drop reference count
315
};
316
317
+/* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
318
+
319
+class IDeckLinkEncoderInputCallback : public IUnknown
320
+{
321
+public:
322
+ virtual HRESULT VideoInputSignalChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
323
+ virtual HRESULT VideoPacketArrived (/* in */ IDeckLinkEncoderVideoPacket* videoPacket) = 0;
324
+ virtual HRESULT AudioPacketArrived (/* in */ IDeckLinkEncoderAudioPacket* audioPacket) = 0;
325
+
326
+protected:
327
+ virtual ~IDeckLinkEncoderInputCallback () {} // call Release method to drop reference count
328
+};
329
+
330
/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
331
332
class IDeckLinkMemoryAllocator : public IUnknown
333
334
virtual ~IDeckLinkInput () {} // call Release method to drop reference count
335
};
336
337
+/* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
338
+
339
+class IDeckLinkEncoderInput : public IUnknown
340
+{
341
+public:
342
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
343
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
344
+
345
+ /* Video Input */
346
+
347
+ virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
348
+ virtual HRESULT DisableVideoInput (void) = 0;
349
+ virtual HRESULT GetAvailablePacketsCount (/* out */ uint32_t *availablePacketsCount) = 0;
350
+ virtual HRESULT SetMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
351
+
352
+ /* Audio Input */
353
+
354
+ virtual HRESULT EnableAudioInput (/* in */ BMDAudioFormat audioFormat, /* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
355
+ virtual HRESULT DisableAudioInput (void) = 0;
356
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
357
+
358
+ /* Input Control */
359
+
360
+ virtual HRESULT StartStreams (void) = 0;
361
+ virtual HRESULT StopStreams (void) = 0;
362
+ virtual HRESULT PauseStreams (void) = 0;
363
+ virtual HRESULT FlushStreams (void) = 0;
364
+ virtual HRESULT SetCallback (/* in */ IDeckLinkEncoderInputCallback *theCallback) = 0;
365
+
366
+ /* Hardware Timing */
367
+
368
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
369
+
370
+protected:
371
+ virtual ~IDeckLinkEncoderInput () {} // call Release method to drop reference count
372
+};
373
+
374
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
375
376
class IDeckLinkVideoFrame : public IUnknown
377
378
virtual ~IDeckLinkVideoFrame3DExtensions () {} // call Release method to drop reference count
379
};
380
381
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
382
+
383
+class IDeckLinkVideoFrameMetadataExtensions : public IUnknown
384
+{
385
+public:
386
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ int64_t *value) = 0;
387
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ double *value) = 0;
388
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ bool* value) = 0;
389
+ virtual HRESULT GetString (/* in */ BMDDeckLinkFrameMetadataID metadataID, /* out */ CFStringRef *value) = 0;
390
+
391
+protected:
392
+ virtual ~IDeckLinkVideoFrameMetadataExtensions () {} // call Release method to drop reference count
393
+};
394
+
395
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
396
397
class IDeckLinkVideoInputFrame : public IDeckLinkVideoFrame
398
399
virtual ~IDeckLinkVideoFrameAncillary () {} // call Release method to drop reference count
400
};
401
402
+/* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
403
+
404
+class IDeckLinkEncoderPacket : public IUnknown
405
+{
406
+public:
407
+ virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
408
+ virtual long GetSize (void) = 0;
409
+ virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* in */ BMDTimeScale timeScale) = 0;
410
+ virtual BMDPacketType GetPacketType (void) = 0;
411
+
412
+protected:
413
+ virtual ~IDeckLinkEncoderPacket () {} // call Release method to drop reference count
414
+};
415
+
416
+/* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
417
+
418
+class IDeckLinkEncoderVideoPacket : public IDeckLinkEncoderPacket
419
+{
420
+public:
421
+ virtual BMDPixelFormat GetPixelFormat (void) = 0;
422
+ virtual HRESULT GetHardwareReferenceTimestamp (/* in */ BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
423
+
424
+ virtual HRESULT GetTimecode (/* in */ BMDTimecodeFormat format, /* out */ IDeckLinkTimecode **timecode) = 0;
425
+
426
+protected:
427
+ virtual ~IDeckLinkEncoderVideoPacket () {} // call Release method to drop reference count
428
+};
429
+
430
+/* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
431
+
432
+class IDeckLinkEncoderAudioPacket : public IDeckLinkEncoderPacket
433
+{
434
+public:
435
+ virtual BMDAudioFormat GetAudioFormat (void) = 0;
436
+
437
+protected:
438
+ virtual ~IDeckLinkEncoderAudioPacket () {} // call Release method to drop reference count
439
+};
440
+
441
+/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
442
+
443
+class IDeckLinkH265NALPacket : public IDeckLinkEncoderVideoPacket
444
+{
445
+public:
446
+ virtual HRESULT GetUnitType (/* out */ uint8_t *unitType) = 0;
447
+ virtual HRESULT GetBytesNoPrefix (/* out */ void **buffer) = 0;
448
+ virtual long GetSizeNoPrefix (void) = 0;
449
+
450
+protected:
451
+ virtual ~IDeckLinkH265NALPacket () {} // call Release method to drop reference count
452
+};
453
+
454
/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
455
456
class IDeckLinkAudioInputPacket : public IUnknown
457
458
virtual ~IDeckLinkAttributes () {} // call Release method to drop reference count
459
};
460
461
+/* Interface IDeckLinkStatus - DeckLink Status interface */
462
+
463
+class IDeckLinkStatus : public IUnknown
464
+{
465
+public:
466
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkStatusID statusID, /* out */ bool *value) = 0;
467
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkStatusID statusID, /* out */ int64_t *value) = 0;
468
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkStatusID statusID, /* out */ double *value) = 0;
469
+ virtual HRESULT GetString (/* in */ BMDDeckLinkStatusID statusID, /* out */ CFStringRef *value) = 0;
470
+ virtual HRESULT GetBytes (/* in */ BMDDeckLinkStatusID statusID, /* out */ void *buffer, /* in, out */ uint32_t *bufferSize) = 0;
471
+
472
+protected:
473
+ virtual ~IDeckLinkStatus () {} // call Release method to drop reference count
474
+};
475
+
476
/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
477
478
class IDeckLinkKeyer : public IUnknown
479
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration.h
Changed
156
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
// Interface ID Declarations
11
12
-BMD_CONST REFIID IID_IDeckLinkConfiguration = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
13
+BMD_CONST REFIID IID_IDeckLinkConfiguration = /* CB71734A-FE37-4E8D-8E13-802133A1C3F2 */ {0xCB,0x71,0x73,0x4A,0xFE,0x37,0x4E,0x8D,0x8E,0x13,0x80,0x21,0x33,0xA1,0xC3,0xF2};
14
+BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration = /* 138050E5-C60A-4552-BF3F-0F358049327E */ {0x13,0x80,0x50,0xE5,0xC6,0x0A,0x45,0x52,0xBF,0x3F,0x0F,0x35,0x80,0x49,0x32,0x7E};
15
16
/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
17
18
19
bmdDeckLinkConfigHDMI3DPackingFormat = '3dpf',
20
bmdDeckLinkConfigBypass = 'byps',
21
bmdDeckLinkConfigClockTimingAdjustment = 'ctad',
22
+ bmdDeckLinkConfigDuplexMode = 'dupx',
23
24
/* Audio Input/Output Flags */
25
26
27
bmdDeckLinkConfigFieldFlickerRemoval = 'fdfr',
28
bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion = 'to59',
29
bmdDeckLinkConfig444SDIVideoOutput = '444o',
30
- bmdDeckLinkConfigSingleLinkVideoOutput = 'sglo',
31
bmdDeckLinkConfigBlackVideoOutputDuringCapture = 'bvoc',
32
bmdDeckLinkConfigLowLatencyVideoOutput = 'llvo',
33
+ bmdDeckLinkConfigDownConversionOnAllAnalogOutput = 'caao',
34
+ bmdDeckLinkConfigSMPTELevelAOutput = 'smta',
35
36
/* Video Output Integers */
37
38
39
bmdDeckLinkConfigVideoOutputIdleOperation = 'voio',
40
bmdDeckLinkConfigDefaultVideoOutputMode = 'dvom',
41
bmdDeckLinkConfigDefaultVideoOutputModeFlags = 'dvof',
42
+ bmdDeckLinkConfigSDIOutputLinkConfiguration = 'solc',
43
44
/* Video Output Floats */
45
46
47
48
bmdDeckLinkConfigVideoInputScanning = 'visc', // Applicable to H264 Pro Recorder only
49
bmdDeckLinkConfigUseDedicatedLTCInput = 'dltc', // Use timecode from LTC input instead of SDI stream
50
+ bmdDeckLinkConfigSDIInput3DPayloadOverride = '3dds',
51
52
/* Video Input Integers */
53
54
55
bmdDeckLinkConfigVideoInputSVideoLumaGain = 'islg',
56
bmdDeckLinkConfigVideoInputSVideoChromaGain = 'iscg',
57
58
+ /* Audio Input Flags */
59
+
60
+ bmdDeckLinkConfigMicrophonePhantomPower = 'mphp',
61
+
62
/* Audio Input Integers */
63
64
bmdDeckLinkConfigAudioInputConnection = 'aicn',
65
66
bmdDeckLinkConfigAnalogAudioInputScaleChannel3 = 'ais3',
67
bmdDeckLinkConfigAnalogAudioInputScaleChannel4 = 'ais4',
68
bmdDeckLinkConfigDigitalAudioInputScale = 'dais',
69
+ bmdDeckLinkConfigMicrophoneInputGain = 'micg',
70
71
/* Audio Output Integers */
72
73
74
bmdDeckLinkConfigAnalogAudioOutputScaleChannel2 = 'aos2',
75
bmdDeckLinkConfigAnalogAudioOutputScaleChannel3 = 'aos3',
76
bmdDeckLinkConfigAnalogAudioOutputScaleChannel4 = 'aos4',
77
- bmdDeckLinkConfigDigitalAudioOutputScale = 'daos'
78
+ bmdDeckLinkConfigDigitalAudioOutputScale = 'daos',
79
+ bmdDeckLinkConfigHeadphoneVolume = 'hvol',
80
+
81
+ /* Device Information Strings */
82
+
83
+ bmdDeckLinkConfigDeviceInformationLabel = 'dila',
84
+ bmdDeckLinkConfigDeviceInformationSerialNumber = 'disn',
85
+ bmdDeckLinkConfigDeviceInformationCompany = 'dico',
86
+ bmdDeckLinkConfigDeviceInformationPhone = 'diph',
87
+ bmdDeckLinkConfigDeviceInformationEmail = 'diem',
88
+ bmdDeckLinkConfigDeviceInformationDate = 'dida',
89
+
90
+ /* Deck Control Integers */
91
+
92
+ bmdDeckLinkConfigDeckControlConnection = 'dcco'
93
+};
94
+
95
+/* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
96
+
97
+typedef uint32_t BMDDeckLinkEncoderConfigurationID;
98
+enum _BMDDeckLinkEncoderConfigurationID {
99
+
100
+ /* Video Encoder Integers */
101
+
102
+ bmdDeckLinkEncoderConfigPreferredBitDepth = 'epbr',
103
+ bmdDeckLinkEncoderConfigFrameCodingMode = 'efcm',
104
+
105
+ /* HEVC/H.265 Encoder Integers */
106
+
107
+ bmdDeckLinkEncoderConfigH265TargetBitrate = 'htbr',
108
+
109
+ /* DNxHR/DNxHD Compression ID */
110
+
111
+ bmdDeckLinkEncoderConfigDNxHRCompressionID = 'dcid',
112
+
113
+ /* DNxHR/DNxHD Level */
114
+
115
+ bmdDeckLinkEncoderConfigDNxHRLevel = 'dlev',
116
+
117
+ /* Encoded Sample Decriptions */
118
+
119
+ bmdDeckLinkEncoderConfigMPEG4SampleDescription = 'stsE', // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
120
+ bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc = 'esds' // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
121
};
122
123
// Forward Declarations
124
125
class IDeckLinkConfiguration;
126
+class IDeckLinkEncoderConfiguration;
127
128
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
129
130
131
virtual ~IDeckLinkConfiguration () {} // call Release method to drop reference count
132
};
133
134
+/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
135
+
136
+class IDeckLinkEncoderConfiguration : public IUnknown
137
+{
138
+public:
139
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
140
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
141
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
142
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
143
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
144
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
145
+ virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ CFStringRef value) = 0;
146
+ virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
147
+ virtual HRESULT GetBytes (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ void *buffer /* optional */, /* in, out */ uint32_t *bufferSize) = 0;
148
+
149
+protected:
150
+ virtual ~IDeckLinkEncoderConfiguration () {} // call Release method to drop reference count
151
+};
152
+
153
/* Functions */
154
155
extern "C" {
156
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration_v10_2.h
Added
62
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2014 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_2_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_2_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_2 = /* C679A35B-610C-4D09-B748-1D0478100FC0 */ {0xC6,0x79,0xA3,0x5B,0x61,0x0C,0x4D,0x09,0xB7,0x48,0x1D,0x04,0x78,0x10,0x0F,0xC0};
37
+
38
+// Forward Declarations
39
+
40
+class IDeckLinkConfiguration_v10_2;
41
+
42
+/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
43
+
44
+class IDeckLinkConfiguration_v10_2 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
48
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
49
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
50
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
51
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
52
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
53
+ virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
54
+ virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
55
+ virtual HRESULT WriteConfigurationToPreferences (void) = 0;
56
+
57
+protected:
58
+ virtual ~IDeckLinkConfiguration_v10_2 () {} // call Release method to drop reference count
59
+};
60
+
61
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_2_H) */
62
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration_v10_4.h
Added
64
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_4_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_4_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkConfiguration_v10_4 = /* 1E69FCF6-4203-4936-8076-2A9F4CFD50CB */ {0x1E,0x69,0xFC,0xF6,0x42,0x03,0x49,0x36,0x80,0x76,0x2A,0x9F,0x4C,0xFD,0x50,0xCB};
37
+
38
+//
39
+// Forward Declarations
40
+
41
+class IDeckLinkConfiguration_v10_4;
42
+
43
+/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
44
+
45
+class IDeckLinkConfiguration_v10_4 : public IUnknown
46
+{
47
+public:
48
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ bool value) = 0;
49
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ bool *value) = 0;
50
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ int64_t value) = 0;
51
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ int64_t *value) = 0;
52
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ double value) = 0;
53
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ double *value) = 0;
54
+ virtual HRESULT SetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* in */ CFStringRef value) = 0;
55
+ virtual HRESULT GetString (/* in */ BMDDeckLinkConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
56
+ virtual HRESULT WriteConfigurationToPreferences (void) = 0;
57
+
58
+protected:
59
+ virtual ~IDeckLinkConfiguration_v10_4 () {} // call Release method to drop reference count
60
+};
61
+
62
+
63
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_4_H) */
64
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIConfiguration_v10_5.h
Added
62
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPICONFIGURATION_v10_5_H
30
+#define BMD_DECKLINKAPICONFIGURATION_v10_5_H
31
+
32
+#include "DeckLinkAPIConfiguration.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkEncoderConfiguration_v10_5 = /* 67455668-0848-45DF-8D8E-350A77C9A028 */ {0x67,0x45,0x56,0x68,0x08,0x48,0x45,0xDF,0x8D,0x8E,0x35,0x0A,0x77,0xC9,0xA0,0x28};
37
+
38
+// Forward Declarations
39
+
40
+class IDeckLinkConfiguration_v10_5;
41
+
42
+/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
43
+
44
+class IDeckLinkEncoderConfiguration_v10_5 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT SetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ bool value) = 0;
48
+ virtual HRESULT GetFlag (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ bool *value) = 0;
49
+ virtual HRESULT SetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ int64_t value) = 0;
50
+ virtual HRESULT GetInt (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ int64_t *value) = 0;
51
+ virtual HRESULT SetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ double value) = 0;
52
+ virtual HRESULT GetFloat (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ double *value) = 0;
53
+ virtual HRESULT SetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* in */ CFStringRef value) = 0;
54
+ virtual HRESULT GetString (/* in */ BMDDeckLinkEncoderConfigurationID cfgID, /* out */ CFStringRef *value) = 0;
55
+ virtual HRESULT GetDecoderConfigurationInfo (/* out */ void *buffer, /* in */ long bufferSize, /* out */ long *returnedSize) = 0;
56
+
57
+protected:
58
+ virtual ~IDeckLinkEncoderConfiguration_v10_5 () {} // call Release method to drop reference count
59
+};
60
+
61
+#endif /* defined(BMD_DECKLINKAPICONFIGURATION_v10_5_H) */
62
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDeckControl.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDeckControl.h
Changed
8
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDiscovery.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDiscovery.h
Changed
8
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch_v7_6.cpp
Added
107
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPIDispatch_v7_6.cpp */
29
+
30
+#include "DeckLinkAPI_v7_6.h"
31
+#include <pthread.h>
32
+
33
+#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
34
+
35
+typedef IDeckLinkIterator* (*CreateIteratorFunc_v7_6)(void);
36
+typedef IDeckLinkGLScreenPreviewHelper_v7_6* (*CreateOpenGLScreenPreviewHelperFunc_v7_6)(void);
37
+typedef IDeckLinkCocoaScreenPreviewCallback_v7_6* (*CreateCocoaScreenPreviewFunc_v7_6)(void*);
38
+typedef IDeckLinkVideoConversion_v7_6* (*CreateVideoConversionInstanceFunc_v7_6)(void);
39
+
40
+static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
41
+static CFBundleRef gBundleRef = NULL;
42
+static CreateIteratorFunc_v7_6 gCreateIteratorFunc = NULL;
43
+static CreateOpenGLScreenPreviewHelperFunc_v7_6 gCreateOpenGLPreviewFunc = NULL;
44
+static CreateCocoaScreenPreviewFunc_v7_6 gCreateCocoaPreviewFunc = NULL;
45
+static CreateVideoConversionInstanceFunc_v7_6 gCreateVideoConversionFunc = NULL;
46
+
47
+
48
+void InitDeckLinkAPI_v7_6 (void)
49
+{
50
+ CFURLRef bundleURL;
51
+
52
+ bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
53
+ if (bundleURL != NULL)
54
+ {
55
+ gBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
56
+ if (gBundleRef != NULL)
57
+ {
58
+ gCreateIteratorFunc = (CreateIteratorFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateDeckLinkIteratorInstance"));
59
+ gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper"));
60
+ gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateCocoaScreenPreview"));
61
+ gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc_v7_6)CFBundleGetFunctionPointerForName(gBundleRef, CFSTR("CreateVideoConversionInstance"));
62
+ }
63
+ CFRelease(bundleURL);
64
+ }
65
+}
66
+
67
+IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void)
68
+{
69
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
70
+
71
+ if (gCreateIteratorFunc == NULL)
72
+ return NULL;
73
+
74
+ return gCreateIteratorFunc();
75
+}
76
+
77
+IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void)
78
+{
79
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
80
+
81
+ if (gCreateOpenGLPreviewFunc == NULL)
82
+ return NULL;
83
+
84
+ return gCreateOpenGLPreviewFunc();
85
+}
86
+
87
+IDeckLinkCocoaScreenPreviewCallback_v7_6* CreateCocoaScreenPreview_v7_6 (void* parentView)
88
+{
89
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
90
+
91
+ if (gCreateCocoaPreviewFunc == NULL)
92
+ return NULL;
93
+
94
+ return gCreateCocoaPreviewFunc(parentView);
95
+}
96
+
97
+IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void)
98
+{
99
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI_v7_6);
100
+
101
+ if (gCreateVideoConversionFunc == NULL)
102
+ return NULL;
103
+
104
+ return gCreateVideoConversionFunc();
105
+}
106
+
107
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIDispatch_v8_0.cpp
Added
133
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2011 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPIDispatch.cpp */
29
+
30
+#include "DeckLinkAPI_v8_0.h"
31
+#include <pthread.h>
32
+
33
+#if BLACKMAGIC_DECKLINK_API_MAGIC != 1
34
+ #error The DeckLink API version of DeckLinkAPIDispatch.cpp is not the same version as DeckLinkAPI.h
35
+#endif
36
+
37
+#define kDeckLinkAPI_BundlePath "/Library/Frameworks/DeckLinkAPI.framework"
38
+
39
+typedef IDeckLinkIterator_v8_0* (*CreateIteratorFunc)(void);
40
+typedef IDeckLinkAPIInformation* (*CreateAPIInformationFunc)(void);
41
+typedef IDeckLinkGLScreenPreviewHelper* (*CreateOpenGLScreenPreviewHelperFunc)(void);
42
+typedef IDeckLinkCocoaScreenPreviewCallback* (*CreateCocoaScreenPreviewFunc)(void*);
43
+typedef IDeckLinkVideoConversion* (*CreateVideoConversionInstanceFunc)(void);
44
+
45
+static pthread_once_t gDeckLinkOnceControl = PTHREAD_ONCE_INIT;
46
+static CFBundleRef gDeckLinkAPIBundleRef = NULL;
47
+static CreateIteratorFunc gCreateIteratorFunc = NULL;
48
+static CreateAPIInformationFunc gCreateAPIInformationFunc = NULL;
49
+static CreateOpenGLScreenPreviewHelperFunc gCreateOpenGLPreviewFunc = NULL;
50
+static CreateCocoaScreenPreviewFunc gCreateCocoaPreviewFunc = NULL;
51
+static CreateVideoConversionInstanceFunc gCreateVideoConversionFunc = NULL;
52
+
53
+
54
+void InitDeckLinkAPI (void)
55
+{
56
+ CFURLRef bundleURL;
57
+
58
+ bundleURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, CFSTR(kDeckLinkAPI_BundlePath), kCFURLPOSIXPathStyle, true);
59
+ if (bundleURL != NULL)
60
+ {
61
+ gDeckLinkAPIBundleRef = CFBundleCreate(kCFAllocatorDefault, bundleURL);
62
+ if (gDeckLinkAPIBundleRef != NULL)
63
+ {
64
+ gCreateIteratorFunc = (CreateIteratorFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkIteratorInstance_0001"));
65
+ gCreateAPIInformationFunc = (CreateAPIInformationFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateDeckLinkAPIInformationInstance_0001"));
66
+ gCreateOpenGLPreviewFunc = (CreateOpenGLScreenPreviewHelperFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateOpenGLScreenPreviewHelper_0001"));
67
+ gCreateCocoaPreviewFunc = (CreateCocoaScreenPreviewFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateCocoaScreenPreview_0001"));
68
+ gCreateVideoConversionFunc = (CreateVideoConversionInstanceFunc)CFBundleGetFunctionPointerForName(gDeckLinkAPIBundleRef, CFSTR("CreateVideoConversionInstance_0001"));
69
+ }
70
+ CFRelease(bundleURL);
71
+ }
72
+}
73
+
74
+bool IsDeckLinkAPIPresent (void)
75
+{
76
+ // If the DeckLink API bundle was successfully loaded, return this knowledge to the caller
77
+ if (gDeckLinkAPIBundleRef != NULL)
78
+ return true;
79
+
80
+ return false;
81
+}
82
+
83
+IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance (void)
84
+{
85
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
86
+
87
+ if (gCreateIteratorFunc == NULL)
88
+ return NULL;
89
+
90
+ return gCreateIteratorFunc();
91
+}
92
+
93
+IDeckLinkAPIInformation* CreateDeckLinkAPIInformationInstance (void)
94
+{
95
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
96
+
97
+ if (gCreateAPIInformationFunc == NULL)
98
+ return NULL;
99
+
100
+ return gCreateAPIInformationFunc();
101
+}
102
+
103
+IDeckLinkGLScreenPreviewHelper* CreateOpenGLScreenPreviewHelper (void)
104
+{
105
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
106
+
107
+ if (gCreateOpenGLPreviewFunc == NULL)
108
+ return NULL;
109
+
110
+ return gCreateOpenGLPreviewFunc();
111
+}
112
+
113
+IDeckLinkCocoaScreenPreviewCallback* CreateCocoaScreenPreview (void* parentView)
114
+{
115
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
116
+
117
+ if (gCreateCocoaPreviewFunc == NULL)
118
+ return NULL;
119
+
120
+ return gCreateCocoaPreviewFunc(parentView);
121
+}
122
+
123
+IDeckLinkVideoConversion* CreateVideoConversionInstance (void)
124
+{
125
+ pthread_once(&gDeckLinkOnceControl, InitDeckLinkAPI);
126
+
127
+ if (gCreateVideoConversionFunc == NULL)
128
+ return NULL;
129
+
130
+ return gCreateVideoConversionFunc();
131
+}
132
+
133
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIModes.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIModes.h
Changed
22
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
bmdFormat12BitRGB = 'R12B', // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
10
bmdFormat12BitRGBLE = 'R12L', // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
11
bmdFormat10BitRGBXLE = 'R10l', // Little-endian 10-bit RGB with SMPTE video levels (64-940)
12
- bmdFormat10BitRGBX = 'R10b' // Big-endian 10-bit RGB with SMPTE video levels (64-940)
13
+ bmdFormat10BitRGBX = 'R10b', // Big-endian 10-bit RGB with SMPTE video levels (64-940)
14
+ bmdFormatH265 = 'hev1', // High Efficiency Video Coding (HEVC/h.265)
15
+
16
+ /* AVID DNxHR */
17
+
18
+ bmdFormatDNxHR = 'AVdh'
19
};
20
21
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
22
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIStreaming.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIStreaming.h
Changed
8
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPITypes.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPITypes.h
Changed
27
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
bmdAudioConnectionAESEBU = 1 << 1,
10
bmdAudioConnectionAnalog = 1 << 2,
11
bmdAudioConnectionAnalogXLR = 1 << 3,
12
- bmdAudioConnectionAnalogRCA = 1 << 4
13
+ bmdAudioConnectionAnalogRCA = 1 << 4,
14
+ bmdAudioConnectionMicrophone = 1 << 5,
15
+ bmdAudioConnectionHeadphones = 1 << 6
16
+};
17
+
18
+/* Enum BMDDeckControlConnection - Deck control connections */
19
+
20
+typedef uint32_t BMDDeckControlConnection;
21
+enum _BMDDeckControlConnection {
22
+ bmdDeckControlConnectionRS422Remote1 = 1 << 0,
23
+ bmdDeckControlConnectionRS422Remote2 = 1 << 1
24
};
25
26
// Forward Declarations
27
obs-studio-0.16.2.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVersion.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPIVersion.h
Changed
11
1
2
#ifndef __DeckLink_API_Version_h__
3
#define __DeckLink_API_Version_h__
4
5
-#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a030100
6
-#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.3.1"
7
+#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000
8
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8"
9
10
#endif // __DeckLink_API_Version_h__
11
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v10_2.h
Added
57
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2014 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_2_H
30
+#define BMD_DECKLINKAPI_v10_2_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
37
+
38
+typedef uint32_t BMDDeckLinkConfigurationID_v10_2;
39
+enum _BMDDeckLinkConfigurationID_v10_2 {
40
+ /* Video output flags */
41
+
42
+ bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = '3gbs',
43
+};
44
+
45
+/* Enum BMDAudioConnection_v10_2 - Audio connection types */
46
+
47
+typedef uint32_t BMDAudioConnection_v10_2;
48
+enum _BMDAudioConnection_v10_2 {
49
+ bmdAudioConnectionEmbedded_v10_2 = 'embd',
50
+ bmdAudioConnectionAESEBU_v10_2 = 'aes ',
51
+ bmdAudioConnectionAnalog_v10_2 = 'anlg',
52
+ bmdAudioConnectionAnalogXLR_v10_2 = 'axlr',
53
+ bmdAudioConnectionAnalogRCA_v10_2 = 'arca'
54
+};
55
+
56
+#endif /* defined(BMD_DECKLINKAPI_v10_2_H) */
57
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v10_4.h
Added
47
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_4_H
30
+#define BMD_DECKLINKAPI_v10_4_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
37
+
38
+typedef uint32_t BMDDeckLinkConfigurationID_v10_4;
39
+enum _BMDDeckLinkConfigurationID_v10_4 {
40
+
41
+ /* Video output flags */
42
+
43
+ bmdDeckLinkConfigSingleLinkVideoOutput_v10_4 = /* 'sglo' */ 0x73676C6F,
44
+};
45
+
46
+#endif /* defined(BMD_DECKLINKAPI_v10_4_H) */
47
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v10_5.h
Added
48
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_5_H
30
+#define BMD_DECKLINKAPI_v10_5_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
37
+
38
+typedef uint32_t BMDDeckLinkAttributeID_v10_5;
39
+enum _BMDDeckLinkAttributeID_v10_5 {
40
+
41
+ /* Integers */
42
+
43
+ BMDDeckLinkDeviceBusyState_v10_5 = /* 'dbst' */ 0x64627374,
44
+};
45
+
46
+#endif /* defined(BMD_DECKLINKAPI_v10_5_H) */
47
+
48
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v10_6.h
Added
53
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2016 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v10_6_H
30
+#define BMD_DECKLINKAPI_v10_6_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Type Declarations
35
+
36
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
37
+
38
+typedef uint32_t BMDDeckLinkAttributeID_c10_6;
39
+enum _BMDDeckLinkAttributeID_v10_6 {
40
+
41
+ /* Flags */
42
+
43
+ BMDDeckLinkSupportsDesktopDisplay_v10_6 = 'extd',
44
+};
45
+
46
+typedef uint32_t BMDIdleVideoOutputOperation_v10_6;
47
+enum _BMDIdleVideoOutputOperation_v10_6 {
48
+ bmdIdleVideoOutputDesktop_v10_6 = 'desk'
49
+};
50
+
51
+
52
+#endif /* defined(BMD_DECKLINKAPI_v10_6_H) */
53
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_1.h
Added
200
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v7_1.h */
29
+
30
+#ifndef __DeckLink_API_v7_1_h__
31
+#define __DeckLink_API_v7_1_h__
32
+
33
+#include "DeckLinkAPI.h"
34
+
35
+// "B28131B6-59AC-4857-B5AC-CD75D5883E2F"
36
+#define IID_IDeckLinkDisplayModeIterator_v7_1 (REFIID){0xB2,0x81,0x31,0xB6,0x59,0xAC,0x48,0x57,0xB5,0xAC,0xCD,0x75,0xD5,0x88,0x3E,0x2F}
37
+
38
+// "AF0CD6D5-8376-435E-8433-54F9DD530AC3"
39
+#define IID_IDeckLinkDisplayMode_v7_1 (REFIID){0xAF,0x0C,0xD6,0xD5,0x83,0x76,0x43,0x5E,0x84,0x33,0x54,0xF9,0xDD,0x53,0x0A,0xC3}
40
+
41
+// "EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9"
42
+#define IID_IDeckLinkVideoOutputCallback_v7_1 (REFIID){0xEB,0xD0,0x1A,0xFA,0xE4,0xB0,0x49,0xC6,0xA0,0x1D,0xED,0xB9,0xD1,0xB5,0x5F,0xD9}
43
+
44
+// "7F94F328-5ED4-4E9F-9729-76A86BDC99CC"
45
+#define IID_IDeckLinkInputCallback_v7_1 (REFIID){0x7F,0x94,0xF3,0x28,0x5E,0xD4,0x4E,0x9F,0x97,0x29,0x76,0xA8,0x6B,0xDC,0x99,0xCC}
46
+
47
+// "AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5"
48
+#define IID_IDeckLinkOutput_v7_1 (REFIID){0xAE,0x5B,0x3E,0x9B,0x4E,0x1E,0x45,0x35,0xB6,0xE8,0x48,0x0F,0xF5,0x2F,0x6C,0xE5}
49
+
50
+// "2B54EDEF-5B32-429F-BA11-BB990596EACD"
51
+#define IID_IDeckLinkInput_v7_1 (REFIID){0x2B,0x54,0xED,0xEF,0x5B,0x32,0x42,0x9F,0xBA,0x11,0xBB,0x99,0x05,0x96,0xEA,0xCD}
52
+
53
+// "333F3A10-8C2D-43CF-B79D-46560FEEA1CE"
54
+#define IID_IDeckLinkVideoFrame_v7_1 (REFIID){0x33,0x3F,0x3A,0x10,0x8C,0x2D,0x43,0xCF,0xB7,0x9D,0x46,0x56,0x0F,0xEE,0xA1,0xCE}
55
+
56
+// "C8B41D95-8848-40EE-9B37-6E3417FB114B"
57
+#define IID_IDeckLinkVideoInputFrame_v7_1 (REFIID){0xC8,0xB4,0x1D,0x95,0x88,0x48,0x40,0xEE,0x9B,0x37,0x6E,0x34,0x17,0xFB,0x11,0x4B}
58
+
59
+// "C86DE4F6-A29F-42E3-AB3A-1363E29F0788"
60
+#define IID_IDeckLinkAudioInputPacket_v7_1 (REFIID){0xC8,0x6D,0xE4,0xF6,0xA2,0x9F,0x42,0xE3,0xAB,0x3A,0x13,0x63,0xE2,0x9F,0x07,0x88}
61
+
62
+#if defined(__cplusplus)
63
+
64
+class IDeckLinkVideoFrame_v7_1;
65
+class IDeckLinkDisplayModeIterator_v7_1;
66
+class IDeckLinkDisplayMode_v7_1;
67
+class IDeckLinkVideoInputFrame_v7_1;
68
+class IDeckLinkAudioInputPacket_v7_1;
69
+
70
+class IDeckLinkDisplayModeIterator_v7_1 : public IUnknown
71
+{
72
+public:
73
+ virtual HRESULT STDMETHODCALLTYPE Next (IDeckLinkDisplayMode_v7_1* *deckLinkDisplayMode) = 0;
74
+};
75
+
76
+
77
+class IDeckLinkDisplayMode_v7_1 : public IUnknown
78
+{
79
+public:
80
+ virtual HRESULT STDMETHODCALLTYPE GetName (CFStringRef* name) = 0;
81
+ virtual BMDDisplayMode STDMETHODCALLTYPE GetDisplayMode () = 0;
82
+ virtual long STDMETHODCALLTYPE GetWidth () = 0;
83
+ virtual long STDMETHODCALLTYPE GetHeight () = 0;
84
+ virtual HRESULT STDMETHODCALLTYPE GetFrameRate (BMDTimeValue *frameDuration, BMDTimeScale *timeScale) = 0;
85
+};
86
+
87
+class IDeckLinkVideoOutputCallback_v7_1 : public IUnknown
88
+{
89
+public:
90
+ virtual HRESULT STDMETHODCALLTYPE ScheduledFrameCompleted (IDeckLinkVideoFrame_v7_1* completedFrame, BMDOutputFrameCompletionResult result) = 0;
91
+};
92
+
93
+class IDeckLinkInputCallback_v7_1 : public IUnknown
94
+{
95
+public:
96
+ virtual HRESULT STDMETHODCALLTYPE VideoInputFrameArrived (IDeckLinkVideoInputFrame_v7_1* videoFrame, IDeckLinkAudioInputPacket_v7_1* audioPacket) = 0;
97
+};
98
+
99
+// IDeckLinkOutput_v7_1. Created by QueryInterface from IDeckLink.
100
+class IDeckLinkOutput_v7_1 : public IUnknown
101
+{
102
+public:
103
+ // Display mode predicates
104
+ virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
105
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1* *iterator) = 0;
106
+
107
+
108
+ // Video output
109
+ virtual HRESULT STDMETHODCALLTYPE EnableVideoOutput (BMDDisplayMode displayMode) = 0;
110
+ virtual HRESULT STDMETHODCALLTYPE DisableVideoOutput () = 0;
111
+
112
+ virtual HRESULT STDMETHODCALLTYPE SetVideoOutputFrameMemoryAllocator (IDeckLinkMemoryAllocator* theAllocator) = 0;
113
+ virtual HRESULT STDMETHODCALLTYPE CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
114
+ virtual HRESULT STDMETHODCALLTYPE CreateVideoFrameFromBuffer (void* buffer, int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1* *outFrame) = 0;
115
+
116
+ virtual HRESULT STDMETHODCALLTYPE DisplayVideoFrameSync (IDeckLinkVideoFrame_v7_1* theFrame) = 0;
117
+ virtual HRESULT STDMETHODCALLTYPE ScheduleVideoFrame (IDeckLinkVideoFrame_v7_1* theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
118
+ virtual HRESULT STDMETHODCALLTYPE SetScheduledFrameCompletionCallback (IDeckLinkVideoOutputCallback_v7_1* theCallback) = 0;
119
+
120
+
121
+ // Audio output
122
+ virtual HRESULT STDMETHODCALLTYPE EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
123
+ virtual HRESULT STDMETHODCALLTYPE DisableAudioOutput () = 0;
124
+
125
+ virtual HRESULT STDMETHODCALLTYPE WriteAudioSamplesSync (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesWritten) = 0;
126
+
127
+ virtual HRESULT STDMETHODCALLTYPE BeginAudioPreroll () = 0;
128
+ virtual HRESULT STDMETHODCALLTYPE EndAudioPreroll () = 0;
129
+ virtual HRESULT STDMETHODCALLTYPE ScheduleAudioSamples (void* buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, uint32_t *sampleFramesWritten) = 0;
130
+
131
+ virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
132
+ virtual HRESULT STDMETHODCALLTYPE FlushBufferedAudioSamples () = 0;
133
+
134
+ virtual HRESULT STDMETHODCALLTYPE SetAudioCallback (IDeckLinkAudioOutputCallback* theCallback) = 0;
135
+
136
+
137
+ // Output control
138
+ virtual HRESULT STDMETHODCALLTYPE StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
139
+ virtual HRESULT STDMETHODCALLTYPE StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
140
+ virtual HRESULT STDMETHODCALLTYPE GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
141
+};
142
+
143
+// IDeckLinkInput_v7_1. Created by QueryInterface from IDeckLink.
144
+class IDeckLinkInput_v7_1 : public IUnknown
145
+{
146
+public:
147
+ virtual HRESULT STDMETHODCALLTYPE DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDDisplayModeSupport *result) = 0;
148
+ virtual HRESULT STDMETHODCALLTYPE GetDisplayModeIterator (IDeckLinkDisplayModeIterator_v7_1 **iterator) = 0;
149
+
150
+ // Video input
151
+ virtual HRESULT STDMETHODCALLTYPE EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
152
+ virtual HRESULT STDMETHODCALLTYPE DisableVideoInput () = 0;
153
+
154
+ // Audio input
155
+ virtual HRESULT STDMETHODCALLTYPE EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
156
+ virtual HRESULT STDMETHODCALLTYPE DisableAudioInput () = 0;
157
+ virtual HRESULT STDMETHODCALLTYPE ReadAudioSamples (void* buffer, uint32_t sampleFrameCount, uint32_t *sampleFramesRead, BMDTimeValue *audioPacketTime, BMDTimeScale timeScale) = 0;
158
+ virtual HRESULT STDMETHODCALLTYPE GetBufferedAudioSampleFrameCount (uint32_t *bufferedSampleCount) = 0;
159
+
160
+ // Input control
161
+ virtual HRESULT STDMETHODCALLTYPE StartStreams () = 0;
162
+ virtual HRESULT STDMETHODCALLTYPE StopStreams () = 0;
163
+ virtual HRESULT STDMETHODCALLTYPE PauseStreams () = 0;
164
+ virtual HRESULT STDMETHODCALLTYPE SetCallback (IDeckLinkInputCallback_v7_1* theCallback) = 0;
165
+};
166
+
167
+// IDeckLinkVideoFrame_v7_1. Created by IDeckLinkOutput::CreateVideoFrame.
168
+class IDeckLinkVideoFrame_v7_1 : public IUnknown
169
+{
170
+public:
171
+ virtual long STDMETHODCALLTYPE GetWidth () = 0;
172
+ virtual long STDMETHODCALLTYPE GetHeight () = 0;
173
+ virtual long STDMETHODCALLTYPE GetRowBytes () = 0;
174
+ virtual BMDPixelFormat STDMETHODCALLTYPE GetPixelFormat () = 0;
175
+ virtual BMDFrameFlags STDMETHODCALLTYPE GetFlags () = 0;
176
+ virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
177
+};
178
+
179
+// IDeckLinkVideoInputFrame_v7_1. Provided by the IDeckLinkInput_v7_1 frame arrival callback.
180
+class IDeckLinkVideoInputFrame_v7_1 : public IDeckLinkVideoFrame_v7_1
181
+{
182
+public:
183
+ virtual HRESULT STDMETHODCALLTYPE GetFrameTime (BMDTimeValue *frameTime, BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
184
+};
185
+
186
+// IDeckLinkAudioInputPacket_v7_1. Provided by the IDeckLinkInput_v7_1 callback.
187
+class IDeckLinkAudioInputPacket_v7_1 : public IUnknown
188
+{
189
+public:
190
+ virtual long STDMETHODCALLTYPE GetSampleCount () = 0;
191
+ virtual HRESULT STDMETHODCALLTYPE GetBytes (void* *buffer) = 0;
192
+
193
+ virtual HRESULT STDMETHODCALLTYPE GetAudioPacketTime (BMDTimeValue *packetTime, BMDTimeScale timeScale) = 0;
194
+};
195
+
196
+#endif // defined(__cplusplus)
197
+
198
+#endif // __DeckLink_API_v7_1_h__
199
+
200
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_3.h
Added
175
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v7_3.h */
30
+
31
+#ifndef __DeckLink_API_v7_3_h__
32
+#define __DeckLink_API_v7_3_h__
33
+
34
+#include "DeckLinkAPI.h"
35
+#include "DeckLinkAPI_v7_6.h"
36
+
37
+/* Interface ID Declarations */
38
+
39
+#define IID_IDeckLinkInputCallback_v7_3 /* FD6F311D-4D00-444B-9ED4-1F25B5730AD0 */ (REFIID){0xFD,0x6F,0x31,0x1D,0x4D,0x00,0x44,0x4B,0x9E,0xD4,0x1F,0x25,0xB5,0x73,0x0A,0xD0}
40
+#define IID_IDeckLinkOutput_v7_3 /* 271C65E3-C323-4344-A30F-D908BCB20AA3 */ (REFIID){0x27,0x1C,0x65,0xE3,0xC3,0x23,0x43,0x44,0xA3,0x0F,0xD9,0x08,0xBC,0xB2,0x0A,0xA3}
41
+#define IID_IDeckLinkInput_v7_3 /* 4973F012-9925-458C-871C-18774CDBBECB */ (REFIID){0x49,0x73,0xF0,0x12,0x99,0x25,0x45,0x8C,0x87,0x1C,0x18,0x77,0x4C,0xDB,0xBE,0xCB}
42
+#define IID_IDeckLinkVideoInputFrame_v7_3 /* CF317790-2894-11DE-8C30-0800200C9A66 */ (REFIID){0xCF,0x31,0x77,0x90,0x28,0x94,0x11,0xDE,0x8C,0x30,0x08,0x00,0x20,0x0C,0x9A,0x66}
43
+
44
+/* End Interface ID Declarations */
45
+
46
+#if defined(__cplusplus)
47
+
48
+/* Forward Declarations */
49
+
50
+class IDeckLinkVideoInputFrame_v7_3;
51
+
52
+/* End Forward Declarations */
53
+
54
+
55
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
56
+
57
+class IDeckLinkOutput_v7_3 : public IUnknown
58
+{
59
+public:
60
+ virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
61
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
62
+
63
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
64
+
65
+ /* Video Output */
66
+
67
+ virtual HRESULT EnableVideoOutput (BMDDisplayMode displayMode, BMDVideoOutputFlags flags) = 0;
68
+ virtual HRESULT DisableVideoOutput (void) = 0;
69
+
70
+ virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
71
+ virtual HRESULT CreateVideoFrame (int32_t width, int32_t height, int32_t rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
72
+ virtual HRESULT CreateAncillaryData (BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
73
+
74
+ virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
75
+ virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale) = 0;
76
+ virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
77
+ virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
78
+
79
+ /* Audio Output */
80
+
81
+ virtual HRESULT EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount, BMDAudioOutputStreamType streamType) = 0;
82
+ virtual HRESULT DisableAudioOutput (void) = 0;
83
+
84
+ virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
85
+
86
+ virtual HRESULT BeginAudioPreroll (void) = 0;
87
+ virtual HRESULT EndAudioPreroll (void) = 0;
88
+ virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, uint32_t sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
89
+
90
+ virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
91
+ virtual HRESULT FlushBufferedAudioSamples (void) = 0;
92
+
93
+ virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
94
+
95
+ /* Output Control */
96
+
97
+ virtual HRESULT StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed) = 0;
98
+ virtual HRESULT StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, BMDTimeScale timeScale) = 0;
99
+ virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
100
+ virtual HRESULT GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *elapsedTimeSinceSchedulerBegan) = 0;
101
+
102
+protected:
103
+ virtual ~IDeckLinkOutput_v7_3 () {}; // call Release method to drop reference count
104
+};
105
+
106
+/* End Interface IDeckLinkOutput */
107
+
108
+
109
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
110
+
111
+class IDeckLinkInputCallback_v7_3 : public IUnknown
112
+{
113
+public:
114
+ virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
115
+ virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_3 *videoFrame, /* in */ IDeckLinkAudioInputPacket *audioPacket) = 0;
116
+
117
+protected:
118
+ virtual ~IDeckLinkInputCallback_v7_3 () {}; // call Release method to drop reference count
119
+};
120
+
121
+/* End Interface IDeckLinkInputCallback */
122
+
123
+
124
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
125
+
126
+class IDeckLinkInput_v7_3 : public IUnknown
127
+{
128
+public:
129
+ virtual HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
130
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
131
+
132
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
133
+
134
+ /* Video Input */
135
+
136
+ virtual HRESULT EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags) = 0;
137
+ virtual HRESULT DisableVideoInput (void) = 0;
138
+ virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
139
+
140
+ /* Audio Input */
141
+
142
+ virtual HRESULT EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, uint32_t channelCount) = 0;
143
+ virtual HRESULT DisableAudioInput (void) = 0;
144
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
145
+
146
+ /* Input Control */
147
+
148
+ virtual HRESULT StartStreams (void) = 0;
149
+ virtual HRESULT StopStreams (void) = 0;
150
+ virtual HRESULT PauseStreams (void) = 0;
151
+ virtual HRESULT FlushStreams (void) = 0;
152
+ virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_3 *theCallback) = 0;
153
+
154
+protected:
155
+ virtual ~IDeckLinkInput_v7_3 () {}; // call Release method to drop reference count
156
+};
157
+
158
+/* End Interface IDeckLinkInput */
159
+
160
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
161
+
162
+class IDeckLinkVideoInputFrame_v7_3 : public IDeckLinkVideoFrame_v7_6
163
+{
164
+public:
165
+ virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
166
+
167
+protected:
168
+ virtual ~IDeckLinkVideoInputFrame_v7_3 () {}; // call Release method to drop reference count
169
+};
170
+
171
+/* End Interface IDeckLinkVideoInputFrame */
172
+
173
+#endif // defined(__cplusplus)
174
+#endif // __DeckLink_API_v7_3_h__
175
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_6.h
Added
423
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v7_6.h */
30
+
31
+#ifndef __DeckLink_API_v7_6_h__
32
+#define __DeckLink_API_v7_6_h__
33
+
34
+#include "DeckLinkAPI.h"
35
+
36
+// Interface ID Declarations
37
+
38
+#define IID_IDeckLinkVideoOutputCallback_v7_6 /* E763A626-4A3C-49D1-BF13-E7AD3692AE52 */ (REFIID){0xE7,0x63,0xA6,0x26,0x4A,0x3C,0x49,0xD1,0xBF,0x13,0xE7,0xAD,0x36,0x92,0xAE,0x52}
39
+#define IID_IDeckLinkInputCallback_v7_6 /* 31D28EE7-88B6-4CB1-897A-CDBF79A26414 */ (REFIID){0x31,0xD2,0x8E,0xE7,0x88,0xB6,0x4C,0xB1,0x89,0x7A,0xCD,0xBF,0x79,0xA2,0x64,0x14}
40
+#define IID_IDeckLinkDisplayModeIterator_v7_6 /* 455D741F-1779-4800-86F5-0B5D13D79751 */ (REFIID){0x45,0x5D,0x74,0x1F,0x17,0x79,0x48,0x00,0x86,0xF5,0x0B,0x5D,0x13,0xD7,0x97,0x51}
41
+#define IID_IDeckLinkDisplayMode_v7_6 /* 87451E84-2B7E-439E-A629-4393EA4A8550 */ (REFIID){0x87,0x45,0x1E,0x84,0x2B,0x7E,0x43,0x9E,0xA6,0x29,0x43,0x93,0xEA,0x4A,0x85,0x50}
42
+#define IID_IDeckLinkOutput_v7_6 /* 29228142-EB8C-4141-A621-F74026450955 */ (REFIID){0x29,0x22,0x81,0x42,0xEB,0x8C,0x41,0x41,0xA6,0x21,0xF7,0x40,0x26,0x45,0x09,0x55}
43
+#define IID_IDeckLinkInput_v7_6 /* 300C135A-9F43-48E2-9906-6D7911D93CF1 */ (REFIID){0x30,0x0C,0x13,0x5A,0x9F,0x43,0x48,0xE2,0x99,0x06,0x6D,0x79,0x11,0xD9,0x3C,0xF1}
44
+#define IID_IDeckLinkTimecode_v7_6 /* EFB9BCA6-A521-44F7-BD69-2332F24D9EE6 */ (REFIID){0xEF,0xB9,0xBC,0xA6,0xA5,0x21,0x44,0xF7,0xBD,0x69,0x23,0x32,0xF2,0x4D,0x9E,0xE6}
45
+#define IID_IDeckLinkVideoFrame_v7_6 /* A8D8238E-6B18-4196-99E1-5AF717B83D32 */ (REFIID){0xA8,0xD8,0x23,0x8E,0x6B,0x18,0x41,0x96,0x99,0xE1,0x5A,0xF7,0x17,0xB8,0x3D,0x32}
46
+#define IID_IDeckLinkMutableVideoFrame_v7_6 /* 46FCEE00-B4E6-43D0-91C0-023A7FCEB34F */ (REFIID){0x46,0xFC,0xEE,0x00,0xB4,0xE6,0x43,0xD0,0x91,0xC0,0x02,0x3A,0x7F,0xCE,0xB3,0x4F}
47
+#define IID_IDeckLinkVideoInputFrame_v7_6 /* 9A74FA41-AE9F-47AC-8CF4-01F42DD59965 */ (REFIID){0x9A,0x74,0xFA,0x41,0xAE,0x9F,0x47,0xAC,0x8C,0xF4,0x01,0xF4,0x2D,0xD5,0x99,0x65}
48
+#define IID_IDeckLinkScreenPreviewCallback_v7_6 /* 373F499D-4B4D-4518-AD22-6354E5A5825E */ (REFIID){0x37,0x3F,0x49,0x9D,0x4B,0x4D,0x45,0x18,0xAD,0x22,0x63,0x54,0xE5,0xA5,0x82,0x5E}
49
+#define IID_IDeckLinkCocoaScreenPreviewCallback_v7_6 /* D174152F-8F96-4C07-83A5-DD5F5AF0A2AA */ (REFIID){0xD1,0x74,0x15,0x2F,0x8F,0x96,0x4C,0x07,0x83,0xA5,0xDD,0x5F,0x5A,0xF0,0xA2,0xAA}
50
+#define IID_IDeckLinkGLScreenPreviewHelper_v7_6 /* BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA */ (REFIID){0xBA,0x57,0x5C,0xD9,0xA1,0x5E,0x49,0x7B,0xB2,0xC2,0xF9,0xAF,0xE7,0xBE,0x4E,0xBA}
51
+#define IID_IDeckLinkVideoConversion_v7_6 /* 3EB504C9-F97D-40FE-A158-D407D48CB53B */ (REFIID){0x3E,0xB5,0x04,0xC9,0xF9,0x7D,0x40,0xFE,0xA1,0x58,0xD4,0x07,0xD4,0x8C,0xB5,0x3B}
52
+#define IID_IDeckLinkConfiguration_v7_6 /* B8EAD569-B764-47F0-A73F-AE40DF6CBF10 */ (REFIID){0xB8,0xEA,0xD5,0x69,0xB7,0x64,0x47,0xF0,0xA7,0x3F,0xAE,0x40,0xDF,0x6C,0xBF,0x10}
53
+
54
+
55
+#if defined(__cplusplus)
56
+
57
+/* Enum BMDVideoConnection - Video connection types */
58
+
59
+typedef uint32_t BMDVideoConnection_v7_6;
60
+enum _BMDVideoConnection_v7_6 {
61
+ bmdVideoConnectionSDI_v7_6 = 'sdi ',
62
+ bmdVideoConnectionHDMI_v7_6 = 'hdmi',
63
+ bmdVideoConnectionOpticalSDI_v7_6 = 'opti',
64
+ bmdVideoConnectionComponent_v7_6 = 'cpnt',
65
+ bmdVideoConnectionComposite_v7_6 = 'cmst',
66
+ bmdVideoConnectionSVideo_v7_6 = 'svid'
67
+};
68
+
69
+
70
+// Forward Declarations
71
+
72
+class IDeckLinkVideoOutputCallback_v7_6;
73
+class IDeckLinkInputCallback_v7_6;
74
+class IDeckLinkDisplayModeIterator_v7_6;
75
+class IDeckLinkDisplayMode_v7_6;
76
+class IDeckLinkOutput_v7_6;
77
+class IDeckLinkInput_v7_6;
78
+class IDeckLinkTimecode_v7_6;
79
+class IDeckLinkVideoFrame_v7_6;
80
+class IDeckLinkMutableVideoFrame_v7_6;
81
+class IDeckLinkVideoInputFrame_v7_6;
82
+class IDeckLinkScreenPreviewCallback_v7_6;
83
+class IDeckLinkCocoaScreenPreviewCallback_v7_6;
84
+class IDeckLinkGLScreenPreviewHelper_v7_6;
85
+class IDeckLinkVideoConversion_v7_6;
86
+
87
+
88
+/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
89
+
90
+class IDeckLinkVideoOutputCallback_v7_6 : public IUnknown
91
+{
92
+public:
93
+ virtual HRESULT ScheduledFrameCompleted (/* in */ IDeckLinkVideoFrame_v7_6 *completedFrame, /* in */ BMDOutputFrameCompletionResult result) = 0;
94
+ virtual HRESULT ScheduledPlaybackHasStopped (void) = 0;
95
+
96
+protected:
97
+ virtual ~IDeckLinkVideoOutputCallback_v7_6 () {}; // call Release method to drop reference count
98
+};
99
+
100
+
101
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
102
+
103
+class IDeckLinkInputCallback_v7_6 : public IUnknown
104
+{
105
+public:
106
+ virtual HRESULT VideoInputFormatChanged (/* in */ BMDVideoInputFormatChangedEvents notificationEvents, /* in */ IDeckLinkDisplayMode_v7_6 *newDisplayMode, /* in */ BMDDetectedVideoInputFormatFlags detectedSignalFlags) = 0;
107
+ virtual HRESULT VideoInputFrameArrived (/* in */ IDeckLinkVideoInputFrame_v7_6* videoFrame, /* in */ IDeckLinkAudioInputPacket* audioPacket) = 0;
108
+
109
+protected:
110
+ virtual ~IDeckLinkInputCallback_v7_6 () {}; // call Release method to drop reference count
111
+};
112
+
113
+
114
+/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
115
+
116
+class IDeckLinkDisplayModeIterator_v7_6 : public IUnknown
117
+{
118
+public:
119
+ virtual HRESULT Next (/* out */ IDeckLinkDisplayMode_v7_6 **deckLinkDisplayMode) = 0;
120
+
121
+protected:
122
+ virtual ~IDeckLinkDisplayModeIterator_v7_6 () {}; // call Release method to drop reference count
123
+};
124
+
125
+
126
+/* Interface IDeckLinkDisplayMode - represents a display mode */
127
+
128
+class IDeckLinkDisplayMode_v7_6 : public IUnknown
129
+{
130
+public:
131
+ virtual HRESULT GetName (/* out */ CFStringRef *name) = 0;
132
+ virtual BMDDisplayMode GetDisplayMode (void) = 0;
133
+ virtual long GetWidth (void) = 0;
134
+ virtual long GetHeight (void) = 0;
135
+ virtual HRESULT GetFrameRate (/* out */ BMDTimeValue *frameDuration, /* out */ BMDTimeScale *timeScale) = 0;
136
+ virtual BMDFieldDominance GetFieldDominance (void) = 0;
137
+
138
+protected:
139
+ virtual ~IDeckLinkDisplayMode_v7_6 () {}; // call Release method to drop reference count
140
+};
141
+
142
+
143
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
144
+
145
+class IDeckLinkOutput_v7_6 : public IUnknown
146
+{
147
+public:
148
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
149
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
150
+
151
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
152
+
153
+ /* Video Output */
154
+
155
+ virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
156
+ virtual HRESULT DisableVideoOutput (void) = 0;
157
+
158
+ virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
159
+ virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame_v7_6 **outFrame) = 0;
160
+ virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
161
+
162
+ virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
163
+ virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
164
+ virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback_v7_6 *theCallback) = 0;
165
+ virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
166
+
167
+ /* Audio Output */
168
+
169
+ virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
170
+ virtual HRESULT DisableAudioOutput (void) = 0;
171
+
172
+ virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
173
+
174
+ virtual HRESULT BeginAudioPreroll (void) = 0;
175
+ virtual HRESULT EndAudioPreroll (void) = 0;
176
+ virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
177
+
178
+ virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
179
+ virtual HRESULT FlushBufferedAudioSamples (void) = 0;
180
+
181
+ virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
182
+
183
+ /* Output Control */
184
+
185
+ virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
186
+ virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
187
+ virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
188
+ virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
189
+
190
+ /* Hardware Timing */
191
+
192
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
193
+
194
+protected:
195
+ virtual ~IDeckLinkOutput_v7_6 () {}; // call Release method to drop reference count
196
+};
197
+
198
+
199
+/* Interface IDeckLinkInput_v7_6 - Created by QueryInterface from IDeckLink. */
200
+
201
+class IDeckLinkInput_v7_6 : public IUnknown
202
+{
203
+public:
204
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* out */ BMDDisplayModeSupport *result) = 0;
205
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator_v7_6 **iterator) = 0;
206
+
207
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback_v7_6 *previewCallback) = 0;
208
+
209
+ /* Video Input */
210
+
211
+ virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
212
+ virtual HRESULT DisableVideoInput (void) = 0;
213
+ virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
214
+
215
+ /* Audio Input */
216
+
217
+ virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
218
+ virtual HRESULT DisableAudioInput (void) = 0;
219
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
220
+
221
+ /* Input Control */
222
+
223
+ virtual HRESULT StartStreams (void) = 0;
224
+ virtual HRESULT StopStreams (void) = 0;
225
+ virtual HRESULT PauseStreams (void) = 0;
226
+ virtual HRESULT FlushStreams (void) = 0;
227
+ virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback_v7_6 *theCallback) = 0;
228
+
229
+ /* Hardware Timing */
230
+
231
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
232
+
233
+protected:
234
+ virtual ~IDeckLinkInput_v7_6 () {}; // call Release method to drop reference count
235
+};
236
+
237
+
238
+/* Interface IDeckLinkTimecode - Used for video frame timecode representation. */
239
+
240
+class IDeckLinkTimecode_v7_6 : public IUnknown
241
+{
242
+public:
243
+ virtual BMDTimecodeBCD GetBCD (void) = 0;
244
+ virtual HRESULT GetComponents (/* out */ uint8_t *hours, /* out */ uint8_t *minutes, /* out */ uint8_t *seconds, /* out */ uint8_t *frames) = 0;
245
+ virtual HRESULT GetString (/* out */ CFStringRef *timecode) = 0;
246
+ virtual BMDTimecodeFlags GetFlags (void) = 0;
247
+
248
+protected:
249
+ virtual ~IDeckLinkTimecode_v7_6 () {}; // call Release method to drop reference count
250
+};
251
+
252
+
253
+/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
254
+
255
+class IDeckLinkVideoFrame_v7_6 : public IUnknown
256
+{
257
+public:
258
+ virtual long GetWidth (void) = 0;
259
+ virtual long GetHeight (void) = 0;
260
+ virtual long GetRowBytes (void) = 0;
261
+ virtual BMDPixelFormat GetPixelFormat (void) = 0;
262
+ virtual BMDFrameFlags GetFlags (void) = 0;
263
+ virtual HRESULT GetBytes (/* out */ void **buffer) = 0;
264
+
265
+ virtual HRESULT GetTimecode (BMDTimecodeFormat format, /* out */ IDeckLinkTimecode_v7_6 **timecode) = 0;
266
+ virtual HRESULT GetAncillaryData (/* out */ IDeckLinkVideoFrameAncillary **ancillary) = 0;
267
+
268
+protected:
269
+ virtual ~IDeckLinkVideoFrame_v7_6 () {}; // call Release method to drop reference count
270
+};
271
+
272
+
273
+/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
274
+
275
+class IDeckLinkMutableVideoFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
276
+{
277
+public:
278
+ virtual HRESULT SetFlags (BMDFrameFlags newFlags) = 0;
279
+
280
+ virtual HRESULT SetTimecode (BMDTimecodeFormat format, /* in */ IDeckLinkTimecode_v7_6 *timecode) = 0;
281
+ virtual HRESULT SetTimecodeFromComponents (BMDTimecodeFormat format, uint8_t hours, uint8_t minutes, uint8_t seconds, uint8_t frames, BMDTimecodeFlags flags) = 0;
282
+ virtual HRESULT SetAncillaryData (/* in */ IDeckLinkVideoFrameAncillary *ancillary) = 0;
283
+
284
+protected:
285
+ virtual ~IDeckLinkMutableVideoFrame_v7_6 () {}; // call Release method to drop reference count
286
+};
287
+
288
+
289
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
290
+
291
+class IDeckLinkVideoInputFrame_v7_6 : public IDeckLinkVideoFrame_v7_6
292
+{
293
+public:
294
+ virtual HRESULT GetStreamTime (/* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration, BMDTimeScale timeScale) = 0;
295
+ virtual HRESULT GetHardwareReferenceTimestamp (BMDTimeScale timeScale, /* out */ BMDTimeValue *frameTime, /* out */ BMDTimeValue *frameDuration) = 0;
296
+
297
+protected:
298
+ virtual ~IDeckLinkVideoInputFrame_v7_6 () {}; // call Release method to drop reference count
299
+};
300
+
301
+
302
+/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
303
+
304
+class IDeckLinkScreenPreviewCallback_v7_6 : public IUnknown
305
+{
306
+public:
307
+ virtual HRESULT DrawFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
308
+
309
+protected:
310
+ virtual ~IDeckLinkScreenPreviewCallback_v7_6 () {}; // call Release method to drop reference count
311
+};
312
+
313
+
314
+/* Interface IDeckLinkCocoaScreenPreviewCallback - Screen preview callback for Cocoa-based applications */
315
+
316
+class IDeckLinkCocoaScreenPreviewCallback_v7_6 : public IDeckLinkScreenPreviewCallback_v7_6
317
+{
318
+public:
319
+
320
+protected:
321
+ virtual ~IDeckLinkCocoaScreenPreviewCallback_v7_6 () {}; // call Release method to drop reference count
322
+};
323
+
324
+
325
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
326
+
327
+class IDeckLinkGLScreenPreviewHelper_v7_6 : public IUnknown
328
+{
329
+public:
330
+
331
+ /* Methods must be called with OpenGL context set */
332
+
333
+ virtual HRESULT InitializeGL (void) = 0;
334
+ virtual HRESULT PaintGL (void) = 0;
335
+ virtual HRESULT SetFrame (/* in */ IDeckLinkVideoFrame_v7_6 *theFrame) = 0;
336
+
337
+protected:
338
+ virtual ~IDeckLinkGLScreenPreviewHelper_v7_6 () {}; // call Release method to drop reference count
339
+};
340
+
341
+
342
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
343
+
344
+class IDeckLinkVideoConversion_v7_6 : public IUnknown
345
+{
346
+public:
347
+ virtual HRESULT ConvertFrame (/* in */ IDeckLinkVideoFrame_v7_6* srcFrame, /* in */ IDeckLinkVideoFrame_v7_6* dstFrame) = 0;
348
+
349
+protected:
350
+ virtual ~IDeckLinkVideoConversion_v7_6 () {}; // call Release method to drop reference count
351
+};
352
+
353
+/* Interface IDeckLinkConfiguration - Created by QueryInterface from IDeckLink. */
354
+
355
+class IDeckLinkConfiguration_v7_6 : public IUnknown
356
+{
357
+public:
358
+ virtual HRESULT GetConfigurationValidator (/* out */ IDeckLinkConfiguration_v7_6 **configObject) = 0;
359
+ virtual HRESULT WriteConfigurationToPreferences (void) = 0;
360
+
361
+ /* Video Output Configuration */
362
+
363
+ virtual HRESULT SetVideoOutputFormat (/* in */ BMDVideoConnection_v7_6 videoOutputConnection) = 0;
364
+ virtual HRESULT IsVideoOutputActive (/* in */ BMDVideoConnection_v7_6 videoOutputConnection, /* out */ bool *active) = 0;
365
+
366
+ virtual HRESULT SetAnalogVideoOutputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
367
+ virtual HRESULT GetAnalogVideoOutputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
368
+
369
+ virtual HRESULT EnableFieldFlickerRemovalWhenPaused (/* in */ bool enable) = 0;
370
+ virtual HRESULT IsEnabledFieldFlickerRemovalWhenPaused (/* out */ bool *enabled) = 0;
371
+
372
+ virtual HRESULT Set444And3GBpsVideoOutput (/* in */ bool enable444VideoOutput, /* in */ bool enable3GbsOutput) = 0;
373
+ virtual HRESULT Get444And3GBpsVideoOutput (/* out */ bool *is444VideoOutputEnabled, /* out */ bool *threeGbsOutputEnabled) = 0;
374
+
375
+ virtual HRESULT SetVideoOutputConversionMode (/* in */ BMDVideoOutputConversionMode conversionMode) = 0;
376
+ virtual HRESULT GetVideoOutputConversionMode (/* out */ BMDVideoOutputConversionMode *conversionMode) = 0;
377
+
378
+ virtual HRESULT Set_HD1080p24_to_HD1080i5994_Conversion (/* in */ bool enable) = 0;
379
+ virtual HRESULT Get_HD1080p24_to_HD1080i5994_Conversion (/* out */ bool *enabled) = 0;
380
+
381
+ /* Video Input Configuration */
382
+
383
+ virtual HRESULT SetVideoInputFormat (/* in */ BMDVideoConnection_v7_6 videoInputFormat) = 0;
384
+ virtual HRESULT GetVideoInputFormat (/* out */ BMDVideoConnection_v7_6 *videoInputFormat) = 0;
385
+
386
+ virtual HRESULT SetAnalogVideoInputFlags (/* in */ BMDAnalogVideoFlags analogVideoFlags) = 0;
387
+ virtual HRESULT GetAnalogVideoInputFlags (/* out */ BMDAnalogVideoFlags *analogVideoFlags) = 0;
388
+
389
+ virtual HRESULT SetVideoInputConversionMode (/* in */ BMDVideoInputConversionMode conversionMode) = 0;
390
+ virtual HRESULT GetVideoInputConversionMode (/* out */ BMDVideoInputConversionMode *conversionMode) = 0;
391
+
392
+ virtual HRESULT SetBlackVideoOutputDuringCapture (/* in */ bool blackOutInCapture) = 0;
393
+ virtual HRESULT GetBlackVideoOutputDuringCapture (/* out */ bool *blackOutInCapture) = 0;
394
+
395
+ virtual HRESULT Set32PulldownSequenceInitialTimecodeFrame (/* in */ uint32_t aFrameTimecode) = 0;
396
+ virtual HRESULT Get32PulldownSequenceInitialTimecodeFrame (/* out */ uint32_t *aFrameTimecode) = 0;
397
+
398
+ virtual HRESULT SetVancSourceLineMapping (/* in */ uint32_t activeLine1VANCsource, /* in */ uint32_t activeLine2VANCsource, /* in */ uint32_t activeLine3VANCsource) = 0;
399
+ virtual HRESULT GetVancSourceLineMapping (/* out */ uint32_t *activeLine1VANCsource, /* out */ uint32_t *activeLine2VANCsource, /* out */ uint32_t *activeLine3VANCsource) = 0;
400
+
401
+ /* Audio Input Configuration */
402
+
403
+ virtual HRESULT SetAudioInputFormat (/* in */ BMDAudioConnection audioInputFormat) = 0;
404
+ virtual HRESULT GetAudioInputFormat (/* out */ BMDAudioConnection *audioInputFormat) = 0;
405
+};
406
+
407
+
408
+
409
+/* Functions */
410
+
411
+extern "C" {
412
+
413
+ IDeckLinkIterator* CreateDeckLinkIteratorInstance_v7_6 (void);
414
+ IDeckLinkGLScreenPreviewHelper_v7_6* CreateOpenGLScreenPreviewHelper_v7_6 (void);
415
+ IDeckLinkCocoaScreenPreviewCallback_v7_6* CreateCocoaScreenPreview_v7_6 (void* /* (NSView*) */ parentView);
416
+ IDeckLinkVideoConversion_v7_6* CreateVideoConversionInstance_v7_6 (void);
417
+
418
+};
419
+
420
+
421
+#endif // defined(__cplusplus)
422
+#endif // __DeckLink_API_v7_6_h__
423
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v7_9.h
Added
93
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2010 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v7_9.h */
30
+
31
+#ifndef __DeckLink_API_v7_9_h__
32
+#define __DeckLink_API_v7_9_h__
33
+
34
+#include "DeckLinkAPI.h"
35
+
36
+// Interface ID Declarations
37
+
38
+#define IID_IDeckLinkDeckControl_v7_9 /* A4D81043-0619-42B7-8ED6-602D29041DF7 */ (REFIID){0xA4,0xD8,0x10,0x43,0x06,0x19,0x42,0xB7,0x8E,0xD6,0x60,0x2D,0x29,0x04,0x1D,0xF7}
39
+
40
+
41
+#if defined(__cplusplus)
42
+
43
+// Forward Declarations
44
+
45
+class IDeckLinkDeckControl_v7_9;
46
+
47
+
48
+/* Interface IDeckLinkDeckControl_v7_9 - Deck Control main interface */
49
+
50
+class IDeckLinkDeckControl_v7_9 : public IUnknown
51
+{
52
+public:
53
+ virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
54
+ virtual HRESULT Close (/* in */ bool standbyOn) = 0;
55
+ virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
56
+ virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
57
+ virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
58
+ virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
59
+ virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
60
+ virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
61
+ virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
62
+ virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
63
+ virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
64
+ virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
65
+ virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
66
+ virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
67
+ virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
68
+ virtual HRESULT GetTimecodeString (/* out */ BMDstring *currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
69
+ virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
70
+ virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
71
+ virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
72
+ virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
73
+ virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
74
+ virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
75
+ virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
76
+ virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
77
+ virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
78
+ virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
79
+ virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
80
+ virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
81
+ virtual HRESULT Abort (void) = 0;
82
+ virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
83
+ virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
84
+ virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback *callback) = 0;
85
+
86
+protected:
87
+ virtual ~IDeckLinkDeckControl_v7_9 () {}; // call Release method to drop reference count
88
+};
89
+
90
+
91
+#endif // defined(__cplusplus)
92
+#endif // __DeckLink_API_v7_9_h__
93
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v8_0.h
Added
65
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2011 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v8_0_H
30
+#define BMD_DECKLINKAPI_v8_0_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Interface ID Declarations
35
+
36
+#define IID_IDeckLink_v8_0 /* 62BFF75D-6569-4E55-8D4D-66AA03829ABC */ (REFIID){0x62,0xBF,0xF7,0x5D,0x65,0x69,0x4E,0x55,0x8D,0x4D,0x66,0xAA,0x03,0x82,0x9A,0xBC}
37
+#define IID_IDeckLinkIterator_v8_0 /* 74E936FC-CC28-4A67-81A0-1E94E52D4E69 */ (REFIID){0x74,0xE9,0x36,0xFC,0xCC,0x28,0x4A,0x67,0x81,0xA0,0x1E,0x94,0xE5,0x2D,0x4E,0x69}
38
+
39
+#if defined (__cplusplus)
40
+
41
+/* Interface IDeckLink_v8_0 - represents a DeckLink device */
42
+
43
+class IDeckLink_v8_0 : public IUnknown
44
+{
45
+public:
46
+ virtual HRESULT GetModelName (/* out */ CFStringRef *modelName) = 0;
47
+};
48
+
49
+/* Interface IDeckLinkIterator_v8_0 - enumerates installed DeckLink hardware */
50
+
51
+class IDeckLinkIterator_v8_0 : public IUnknown
52
+{
53
+public:
54
+ virtual HRESULT Next (/* out */ IDeckLink_v8_0 **deckLinkInstance) = 0;
55
+};
56
+
57
+extern "C" {
58
+ IDeckLinkIterator_v8_0* CreateDeckLinkIteratorInstance_v8_0 (void);
59
+};
60
+
61
+
62
+#endif // defined __cplusplus
63
+
64
+#endif /* defined(BMD_DECKLINKAPI_v8_0_H) */
65
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v8_1.h
Added
113
1
2
+/* -LICENSE-START-
3
+ ** Copyright (c) 2011 Blackmagic Design
4
+ **
5
+ ** Permission is hereby granted, free of charge, to any person or organization
6
+ ** obtaining a copy of the software and accompanying documentation covered by
7
+ ** this license (the "Software") to use, reproduce, display, distribute,
8
+ ** execute, and transmit the Software, and to prepare derivative works of the
9
+ ** Software, and to permit third-parties to whom the Software is furnished to
10
+ ** do so, all subject to the following:
11
+ **
12
+ ** The copyright notices in the Software and this entire statement, including
13
+ ** the above license grant, this restriction and the following disclaimer,
14
+ ** must be included in all copies of the Software, in whole or in part, and
15
+ ** all derivative works of the Software, unless such copies or derivative
16
+ ** works are solely in the form of machine-executable object code generated by
17
+ ** a source language processor.
18
+ **
19
+ ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ ** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ ** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+ ** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+ ** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+ ** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+ ** DEALINGS IN THE SOFTWARE.
26
+ ** -LICENSE-END-
27
+ */
28
+
29
+#ifndef BMD_DECKLINKAPI_v8_1_H
30
+#define BMD_DECKLINKAPI_v8_1_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+
35
+// Interface ID Declarations
36
+
37
+#define IID_IDeckLinkDeckControlStatusCallback_v8_1 /* E5F693C1-4283-4716-B18F-C1431521955B */ (REFIID){0xE5,0xF6,0x93,0xC1,0x42,0x83,0x47,0x16,0xB1,0x8F,0xC1,0x43,0x15,0x21,0x95,0x5B}
38
+#define IID_IDeckLinkDeckControl_v8_1 /* 522A9E39-0F3C-4742-94EE-D80DE335DA1D */ (REFIID){0x52,0x2A,0x9E,0x39,0x0F,0x3C,0x47,0x42,0x94,0xEE,0xD8,0x0D,0xE3,0x35,0xDA,0x1D}
39
+
40
+
41
+/* Enum BMDDeckControlVTRControlState_v8_1 - VTR Control state */
42
+
43
+typedef uint32_t BMDDeckControlVTRControlState_v8_1;
44
+enum _BMDDeckControlVTRControlState_v8_1 {
45
+ bmdDeckControlNotInVTRControlMode_v8_1 = 'nvcm',
46
+ bmdDeckControlVTRControlPlaying_v8_1 = 'vtrp',
47
+ bmdDeckControlVTRControlRecording_v8_1 = 'vtrr',
48
+ bmdDeckControlVTRControlStill_v8_1 = 'vtra',
49
+ bmdDeckControlVTRControlSeeking_v8_1 = 'vtrs',
50
+ bmdDeckControlVTRControlStopped_v8_1 = 'vtro'
51
+};
52
+
53
+
54
+/* Interface IDeckLinkDeckControlStatusCallback_v8_1 - Deck control state change callback. */
55
+
56
+class IDeckLinkDeckControlStatusCallback_v8_1 : public IUnknown
57
+{
58
+public:
59
+ virtual HRESULT TimecodeUpdate (/* in */ BMDTimecodeBCD currentTimecode) = 0;
60
+ virtual HRESULT VTRControlStateChanged (/* in */ BMDDeckControlVTRControlState_v8_1 newState, /* in */ BMDDeckControlError error) = 0;
61
+ virtual HRESULT DeckControlEventReceived (/* in */ BMDDeckControlEvent event, /* in */ BMDDeckControlError error) = 0;
62
+ virtual HRESULT DeckControlStatusChanged (/* in */ BMDDeckControlStatusFlags flags, /* in */ uint32_t mask) = 0;
63
+
64
+protected:
65
+ virtual ~IDeckLinkDeckControlStatusCallback_v8_1 () {}; // call Release method to drop reference count
66
+};
67
+
68
+/* Interface IDeckLinkDeckControl_v8_1 - Deck Control main interface */
69
+
70
+class IDeckLinkDeckControl_v8_1 : public IUnknown
71
+{
72
+public:
73
+ virtual HRESULT Open (/* in */ BMDTimeScale timeScale, /* in */ BMDTimeValue timeValue, /* in */ bool timecodeIsDropFrame, /* out */ BMDDeckControlError *error) = 0;
74
+ virtual HRESULT Close (/* in */ bool standbyOn) = 0;
75
+ virtual HRESULT GetCurrentState (/* out */ BMDDeckControlMode *mode, /* out */ BMDDeckControlVTRControlState_v8_1 *vtrControlState, /* out */ BMDDeckControlStatusFlags *flags) = 0;
76
+ virtual HRESULT SetStandby (/* in */ bool standbyOn) = 0;
77
+ virtual HRESULT SendCommand (/* in */ uint8_t *inBuffer, /* in */ uint32_t inBufferSize, /* out */ uint8_t *outBuffer, /* out */ uint32_t *outDataSize, /* in */ uint32_t outBufferSize, /* out */ BMDDeckControlError *error) = 0;
78
+ virtual HRESULT Play (/* out */ BMDDeckControlError *error) = 0;
79
+ virtual HRESULT Stop (/* out */ BMDDeckControlError *error) = 0;
80
+ virtual HRESULT TogglePlayStop (/* out */ BMDDeckControlError *error) = 0;
81
+ virtual HRESULT Eject (/* out */ BMDDeckControlError *error) = 0;
82
+ virtual HRESULT GoToTimecode (/* in */ BMDTimecodeBCD timecode, /* out */ BMDDeckControlError *error) = 0;
83
+ virtual HRESULT FastForward (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
84
+ virtual HRESULT Rewind (/* in */ bool viewTape, /* out */ BMDDeckControlError *error) = 0;
85
+ virtual HRESULT StepForward (/* out */ BMDDeckControlError *error) = 0;
86
+ virtual HRESULT StepBack (/* out */ BMDDeckControlError *error) = 0;
87
+ virtual HRESULT Jog (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
88
+ virtual HRESULT Shuttle (/* in */ double rate, /* out */ BMDDeckControlError *error) = 0;
89
+ virtual HRESULT GetTimecodeString (/* out */ CFStringRef *currentTimeCode, /* out */ BMDDeckControlError *error) = 0;
90
+ virtual HRESULT GetTimecode (/* out */ IDeckLinkTimecode **currentTimecode, /* out */ BMDDeckControlError *error) = 0;
91
+ virtual HRESULT GetTimecodeBCD (/* out */ BMDTimecodeBCD *currentTimecode, /* out */ BMDDeckControlError *error) = 0;
92
+ virtual HRESULT SetPreroll (/* in */ uint32_t prerollSeconds) = 0;
93
+ virtual HRESULT GetPreroll (/* out */ uint32_t *prerollSeconds) = 0;
94
+ virtual HRESULT SetExportOffset (/* in */ int32_t exportOffsetFields) = 0;
95
+ virtual HRESULT GetExportOffset (/* out */ int32_t *exportOffsetFields) = 0;
96
+ virtual HRESULT GetManualExportOffset (/* out */ int32_t *deckManualExportOffsetFields) = 0;
97
+ virtual HRESULT SetCaptureOffset (/* in */ int32_t captureOffsetFields) = 0;
98
+ virtual HRESULT GetCaptureOffset (/* out */ int32_t *captureOffsetFields) = 0;
99
+ virtual HRESULT StartExport (/* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* in */ BMDDeckControlExportModeOpsFlags exportModeOps, /* out */ BMDDeckControlError *error) = 0;
100
+ virtual HRESULT StartCapture (/* in */ bool useVITC, /* in */ BMDTimecodeBCD inTimecode, /* in */ BMDTimecodeBCD outTimecode, /* out */ BMDDeckControlError *error) = 0;
101
+ virtual HRESULT GetDeviceID (/* out */ uint16_t *deviceId, /* out */ BMDDeckControlError *error) = 0;
102
+ virtual HRESULT Abort (void) = 0;
103
+ virtual HRESULT CrashRecordStart (/* out */ BMDDeckControlError *error) = 0;
104
+ virtual HRESULT CrashRecordStop (/* out */ BMDDeckControlError *error) = 0;
105
+ virtual HRESULT SetCallback (/* in */ IDeckLinkDeckControlStatusCallback_v8_1 *callback) = 0;
106
+
107
+protected:
108
+ virtual ~IDeckLinkDeckControl_v8_1 () {}; // call Release method to drop reference count
109
+};
110
+
111
+
112
+#endif // BMD_DECKLINKAPI_v8_1_H
113
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v9_2.h
Added
83
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2012 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v9_2_H
30
+#define BMD_DECKLINKAPI_v9_2_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+
35
+// Interface ID Declarations
36
+
37
+#define IID_IDeckLinkInput_v9_2 /* 6D40EF78-28B9-4E21-990D-95BB7750A04F */ (REFIID){0x6D,0x40,0xEF,0x78,0x28,0xB9,0x4E,0x21,0x99,0x0D,0x95,0xBB,0x77,0x50,0xA0,0x4F}
38
+
39
+
40
+#if defined(__cplusplus)
41
+
42
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
43
+
44
+class IDeckLinkInput_v9_2 : public IUnknown
45
+{
46
+public:
47
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
48
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
49
+
50
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
51
+
52
+ /* Video Input */
53
+
54
+ virtual HRESULT EnableVideoInput (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoInputFlags flags) = 0;
55
+ virtual HRESULT DisableVideoInput (void) = 0;
56
+ virtual HRESULT GetAvailableVideoFrameCount (/* out */ uint32_t *availableFrameCount) = 0;
57
+
58
+ /* Audio Input */
59
+
60
+ virtual HRESULT EnableAudioInput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount) = 0;
61
+ virtual HRESULT DisableAudioInput (void) = 0;
62
+ virtual HRESULT GetAvailableAudioSampleFrameCount (/* out */ uint32_t *availableSampleFrameCount) = 0;
63
+
64
+ /* Input Control */
65
+
66
+ virtual HRESULT StartStreams (void) = 0;
67
+ virtual HRESULT StopStreams (void) = 0;
68
+ virtual HRESULT PauseStreams (void) = 0;
69
+ virtual HRESULT FlushStreams (void) = 0;
70
+ virtual HRESULT SetCallback (/* in */ IDeckLinkInputCallback *theCallback) = 0;
71
+
72
+ /* Hardware Timing */
73
+
74
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
75
+
76
+protected:
77
+ virtual ~IDeckLinkInput_v9_2 () {}; // call Release method to drop reference count
78
+};
79
+
80
+
81
+#endif // defined(__cplusplus)
82
+#endif // BMD_DECKLINKAPI_v9_2_H
83
obs-studio-0.16.4.tar.xz/plugins/decklink/mac/decklink-sdk/DeckLinkAPI_v9_9.h
Added
103
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2013 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+#ifndef BMD_DECKLINKAPI_v9_9_H
30
+#define BMD_DECKLINKAPI_v9_9_H
31
+
32
+#include "DeckLinkAPI.h"
33
+
34
+// Interface ID Declarations
35
+
36
+BMD_CONST REFIID IID_IDeckLinkOutput_v9_9 = /* A3EF0963-0862-44ED-92A9-EE89ABF431C7 */ {0xA3,0xEF,0x09,0x63,0x08,0x62,0x44,0xED,0x92,0xA9,0xEE,0x89,0xAB,0xF4,0x31,0xC7};
37
+
38
+
39
+#if defined(__cplusplus)
40
+
41
+// Forward Declarations
42
+class IDeckLinkOutput_v9_9;
43
+
44
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
45
+
46
+class IDeckLinkOutput_v9_9 : public IUnknown
47
+{
48
+public:
49
+ virtual HRESULT DoesSupportVideoMode (/* in */ BMDDisplayMode displayMode, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDVideoOutputFlags flags, /* out */ BMDDisplayModeSupport *result, /* out */ IDeckLinkDisplayMode **resultDisplayMode) = 0;
50
+ virtual HRESULT GetDisplayModeIterator (/* out */ IDeckLinkDisplayModeIterator **iterator) = 0;
51
+
52
+ virtual HRESULT SetScreenPreviewCallback (/* in */ IDeckLinkScreenPreviewCallback *previewCallback) = 0;
53
+
54
+ /* Video Output */
55
+
56
+ virtual HRESULT EnableVideoOutput (/* in */ BMDDisplayMode displayMode, /* in */ BMDVideoOutputFlags flags) = 0;
57
+ virtual HRESULT DisableVideoOutput (void) = 0;
58
+
59
+ virtual HRESULT SetVideoOutputFrameMemoryAllocator (/* in */ IDeckLinkMemoryAllocator *theAllocator) = 0;
60
+ virtual HRESULT CreateVideoFrame (/* in */ int32_t width, /* in */ int32_t height, /* in */ int32_t rowBytes, /* in */ BMDPixelFormat pixelFormat, /* in */ BMDFrameFlags flags, /* out */ IDeckLinkMutableVideoFrame **outFrame) = 0;
61
+ virtual HRESULT CreateAncillaryData (/* in */ BMDPixelFormat pixelFormat, /* out */ IDeckLinkVideoFrameAncillary **outBuffer) = 0;
62
+
63
+ virtual HRESULT DisplayVideoFrameSync (/* in */ IDeckLinkVideoFrame *theFrame) = 0;
64
+ virtual HRESULT ScheduleVideoFrame (/* in */ IDeckLinkVideoFrame *theFrame, /* in */ BMDTimeValue displayTime, /* in */ BMDTimeValue displayDuration, /* in */ BMDTimeScale timeScale) = 0;
65
+ virtual HRESULT SetScheduledFrameCompletionCallback (/* in */ IDeckLinkVideoOutputCallback *theCallback) = 0;
66
+ virtual HRESULT GetBufferedVideoFrameCount (/* out */ uint32_t *bufferedFrameCount) = 0;
67
+
68
+ /* Audio Output */
69
+
70
+ virtual HRESULT EnableAudioOutput (/* in */ BMDAudioSampleRate sampleRate, /* in */ BMDAudioSampleType sampleType, /* in */ uint32_t channelCount, /* in */ BMDAudioOutputStreamType streamType) = 0;
71
+ virtual HRESULT DisableAudioOutput (void) = 0;
72
+
73
+ virtual HRESULT WriteAudioSamplesSync (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* out */ uint32_t *sampleFramesWritten) = 0;
74
+
75
+ virtual HRESULT BeginAudioPreroll (void) = 0;
76
+ virtual HRESULT EndAudioPreroll (void) = 0;
77
+ virtual HRESULT ScheduleAudioSamples (/* in */ void *buffer, /* in */ uint32_t sampleFrameCount, /* in */ BMDTimeValue streamTime, /* in */ BMDTimeScale timeScale, /* out */ uint32_t *sampleFramesWritten) = 0;
78
+
79
+ virtual HRESULT GetBufferedAudioSampleFrameCount (/* out */ uint32_t *bufferedSampleFrameCount) = 0;
80
+ virtual HRESULT FlushBufferedAudioSamples (void) = 0;
81
+
82
+ virtual HRESULT SetAudioCallback (/* in */ IDeckLinkAudioOutputCallback *theCallback) = 0;
83
+
84
+ /* Output Control */
85
+
86
+ virtual HRESULT StartScheduledPlayback (/* in */ BMDTimeValue playbackStartTime, /* in */ BMDTimeScale timeScale, /* in */ double playbackSpeed) = 0;
87
+ virtual HRESULT StopScheduledPlayback (/* in */ BMDTimeValue stopPlaybackAtTime, /* out */ BMDTimeValue *actualStopTime, /* in */ BMDTimeScale timeScale) = 0;
88
+ virtual HRESULT IsScheduledPlaybackRunning (/* out */ bool *active) = 0;
89
+ virtual HRESULT GetScheduledStreamTime (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *streamTime, /* out */ double *playbackSpeed) = 0;
90
+ virtual HRESULT GetReferenceStatus (/* out */ BMDReferenceStatus *referenceStatus) = 0;
91
+
92
+ /* Hardware Timing */
93
+
94
+ virtual HRESULT GetHardwareReferenceClock (/* in */ BMDTimeScale desiredTimeScale, /* out */ BMDTimeValue *hardwareTime, /* out */ BMDTimeValue *timeInFrame, /* out */ BMDTimeValue *ticksPerFrame) = 0;
95
+
96
+protected:
97
+ virtual ~IDeckLinkOutput_v9_9 () {}; // call Release method to drop reference count
98
+};
99
+
100
+#endif // defined(__cplusplus)
101
+#endif /* defined(BMD_DECKLINKAPI_v9_9_H) */
102
+
103
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI.idl
Changed
567
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
// Enumeration Mapping
11
12
-cpp_quote("typedef unsigned long BMDFrameFlags;")
13
-cpp_quote("typedef unsigned long BMDVideoInputFlags;")
14
-cpp_quote("typedef unsigned long BMDVideoInputFormatChangedEvents;")
15
-cpp_quote("typedef unsigned long BMDDetectedVideoInputFormatFlags;")
16
-cpp_quote("typedef unsigned long BMDDeckLinkCapturePassthroughMode;")
17
-cpp_quote("typedef unsigned long BMDAnalogVideoFlags;")
18
-cpp_quote("typedef unsigned long BMDDeviceBusyState;")
19
+cpp_quote("typedef unsigned int BMDFrameFlags;")
20
+cpp_quote("typedef unsigned int BMDVideoInputFlags;")
21
+cpp_quote("typedef unsigned int BMDVideoInputFormatChangedEvents;")
22
+cpp_quote("typedef unsigned int BMDDetectedVideoInputFormatFlags;")
23
+cpp_quote("typedef unsigned int BMDDeckLinkCapturePassthroughMode;")
24
+cpp_quote("typedef unsigned int BMDAnalogVideoFlags;")
25
+cpp_quote("typedef unsigned int BMDDeviceBusyState;")
26
cpp_quote("#if 0")
27
typedef enum _BMDFrameFlags BMDFrameFlags;
28
typedef enum _BMDVideoInputFlags BMDVideoInputFlags;
29
30
bmdVideoOutputDualStream3D = 1 << 4
31
} BMDVideoOutputFlags;
32
33
+/* Enum BMDPacketType - Type of packet */
34
+
35
+typedef [v1_enum] enum _BMDPacketType {
36
+ bmdPacketTypeStreamInterruptedMarker = /* 'sint' */ 0x73696E74, // A packet of this type marks the time when a video stream was interrupted, for example by a disconnected cable
37
+ bmdPacketTypeStreamData = /* 'sdat' */ 0x73646174 // Regular stream data
38
+} BMDPacketType;
39
+
40
/* Enum BMDFrameFlags - Frame flags */
41
42
[v1_enum] enum _BMDFrameFlags {
43
bmdFrameFlagDefault = 0,
44
bmdFrameFlagFlipVertical = 1 << 0,
45
+ bmdFrameContainsHDRMetadata = 1 << 1,
46
47
/* Flags that are applicable only to instances of IDeckLinkVideoInputFrame */
48
49
50
/* Enum BMDDeckLinkCapturePassthroughMode - Enumerates whether the video output is electrically connected to the video input or if the clean switching mode is enabled */
51
52
[v1_enum] enum _BMDDeckLinkCapturePassthroughMode {
53
+ bmdDeckLinkCapturePassthroughModeDisabled = /* 'pdis' */ 0x70646973,
54
bmdDeckLinkCapturePassthroughModeDirect = /* 'pdir' */ 0x70646972,
55
bmdDeckLinkCapturePassthroughModeCleanSwitch = /* 'pcln' */ 0x70636C6E
56
};
57
58
bmdReferenceLocked = 1 << 1
59
} BMDReferenceStatus;
60
61
+/* Enum BMDAudioFormat - Audio Format */
62
+
63
+typedef [v1_enum] enum _BMDAudioFormat {
64
+ bmdAudioFormatPCM = /* 'lpcm' */ 0x6C70636D // Linear signed PCM samples
65
+} BMDAudioFormat;
66
+
67
/* Enum BMDAudioSampleRate - Audio sample rates supported for output/input */
68
69
typedef [v1_enum] enum _BMDAudioSampleRate {
70
71
72
typedef [v1_enum] enum _BMDIdleVideoOutputOperation {
73
bmdIdleVideoOutputBlack = /* 'blac' */ 0x626C6163,
74
- bmdIdleVideoOutputLastFrame = /* 'lafa' */ 0x6C616661,
75
- bmdIdleVideoOutputDesktop = /* 'desk' */ 0x6465736B
76
+ bmdIdleVideoOutputLastFrame = /* 'lafa' */ 0x6C616661
77
} BMDIdleVideoOutputOperation;
78
79
+/* Enum BMDVideoEncoderFrameCodingMode - Video frame coding mode */
80
+
81
+typedef [v1_enum] enum _BMDVideoEncoderFrameCodingMode {
82
+ bmdVideoEncoderFrameCodingModeInter = /* 'inte' */ 0x696E7465,
83
+ bmdVideoEncoderFrameCodingModeIntra = /* 'intr' */ 0x696E7472
84
+} BMDVideoEncoderFrameCodingMode;
85
+
86
+/* Enum BMDDNxHRLevel - DNxHR Levels */
87
+
88
+typedef [v1_enum] enum _BMDDNxHRLevel {
89
+ bmdDNxHRLevelSQ = /* 'dnsq' */ 0x646E7371,
90
+ bmdDNxHRLevelLB = /* 'dnlb' */ 0x646E6C62,
91
+ bmdDNxHRLevelHQ = /* 'dnhq' */ 0x646E6871,
92
+ bmdDNxHRLevelHQX = /* 'dhqx' */ 0x64687178,
93
+ bmdDNxHRLevel444 = /* 'd444' */ 0x64343434
94
+} BMDDNxHRLevel;
95
+
96
+/* Enum BMDLinkConfiguration - Video link configuration */
97
+
98
+typedef [v1_enum] enum _BMDLinkConfiguration {
99
+ bmdLinkConfigurationSingleLink = /* 'lcsl' */ 0x6C63736C,
100
+ bmdLinkConfigurationDualLink = /* 'lcdl' */ 0x6C63646C,
101
+ bmdLinkConfigurationQuadLink = /* 'lcql' */ 0x6C63716C
102
+} BMDLinkConfiguration;
103
+
104
+/* Enum BMDDeviceInterface - Device interface type */
105
+
106
+typedef [v1_enum] enum _BMDDeviceInterface {
107
+ bmdDeviceInterfacePCI = /* 'pci ' */ 0x70636920,
108
+ bmdDeviceInterfaceUSB = /* 'usb ' */ 0x75736220,
109
+ bmdDeviceInterfaceThunderbolt = /* 'thun' */ 0x7468756E
110
+} BMDDeviceInterface;
111
+
112
+/* Enum BMDDeckLinkFrameMetadataID - DeckLink Frame Metadata ID */
113
+
114
+typedef [v1_enum] enum _BMDDeckLinkFrameMetadataID {
115
+ bmdDeckLinkFrameMetadataHDRElectroOpticalTransferFunc = /* 'eotf' */ 0x656F7466, // EOTF in range 0-7 as per CEA 861.3
116
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedX = /* 'hdrx' */ 0x68647278, // Red display primaries in range 0.0 - 1.0
117
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesRedY = /* 'hdry' */ 0x68647279, // Red display primaries in range 0.0 - 1.0
118
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenX = /* 'hdgx' */ 0x68646778, // Green display primaries in range 0.0 - 1.0
119
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesGreenY = /* 'hdgy' */ 0x68646779, // Green display primaries in range 0.0 - 1.0
120
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueX = /* 'hdbx' */ 0x68646278, // Blue display primaries in range 0.0 - 1.0
121
+ bmdDeckLinkFrameMetadataHDRDisplayPrimariesBlueY = /* 'hdby' */ 0x68646279, // Blue display primaries in range 0.0 - 1.0
122
+ bmdDeckLinkFrameMetadataHDRWhitePointX = /* 'hdwx' */ 0x68647778, // White point in range 0.0 - 1.0
123
+ bmdDeckLinkFrameMetadataHDRWhitePointY = /* 'hdwy' */ 0x68647779, // White point in range 0.0 - 1.0
124
+ bmdDeckLinkFrameMetadataHDRMaxDisplayMasteringLuminance = /* 'hdml' */ 0x68646D6C, // Max display mastering luminance in range 1 cd/m2 - 65535 cd/m2
125
+ bmdDeckLinkFrameMetadataHDRMinDisplayMasteringLuminance = /* 'hmil' */ 0x686D696C, // Min display mastering luminance in range 0.0001 cd/m2 - 6.5535 cd/m2
126
+ bmdDeckLinkFrameMetadataHDRMaximumContentLightLevel = /* 'mcll' */ 0x6D636C6C, // Maximum Content Light Level in range 1 cd/m2 - 65535 cd/m2
127
+ bmdDeckLinkFrameMetadataHDRMaximumFrameAverageLightLevel = /* 'fall' */ 0x66616C6C // Maximum Frame Average Light Level in range 1 cd/m2 - 65535 cd/m2
128
+} BMDDeckLinkFrameMetadataID;
129
+
130
+/* Enum BMDDuplexMode - Duplex for configurable ports */
131
+
132
+typedef [v1_enum] enum _BMDDuplexMode {
133
+ bmdDuplexModeFull = /* 'fdup' */ 0x66647570,
134
+ bmdDuplexModeHalf = /* 'hdup' */ 0x68647570
135
+} BMDDuplexMode;
136
+
137
/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
138
139
typedef [v1_enum] enum _BMDDeckLinkAttributeID {
140
141
BMDDeckLinkCanOnlyAdjustOverallVideoOutputGain = /* 'ovog' */ 0x6F766F67,
142
BMDDeckLinkHasVideoInputAntiAliasingFilter = /* 'aafl' */ 0x6161666C,
143
BMDDeckLinkHasBypass = /* 'byps' */ 0x62797073,
144
- BMDDeckLinkSupportsDesktopDisplay = /* 'extd' */ 0x65787464,
145
BMDDeckLinkSupportsClockTimingAdjustment = /* 'ctad' */ 0x63746164,
146
BMDDeckLinkSupportsFullDuplex = /* 'fdup' */ 0x66647570,
147
BMDDeckLinkSupportsFullFrameReferenceInputTimingOffset = /* 'frin' */ 0x6672696E,
148
+ BMDDeckLinkSupportsSMPTELevelAOutput = /* 'lvla' */ 0x6C766C61,
149
+ BMDDeckLinkSupportsDualLinkSDI = /* 'sdls' */ 0x73646C73,
150
+ BMDDeckLinkSupportsQuadLinkSDI = /* 'sqls' */ 0x73716C73,
151
+ BMDDeckLinkSupportsIdleOutput = /* 'idou' */ 0x69646F75,
152
+ BMDDeckLinkHasLTCTimecodeInput = /* 'hltc' */ 0x686C7463,
153
+ BMDDeckLinkSupportsDuplexModeConfiguration = /* 'dupx' */ 0x64757078,
154
+ BMDDeckLinkSupportsHDRMetadata = /* 'hdrm' */ 0x6864726D,
155
156
/* Integers */
157
158
159
BMDDeckLinkNumberOfSubDevices = /* 'nsbd' */ 0x6E736264,
160
BMDDeckLinkSubDeviceIndex = /* 'subi' */ 0x73756269,
161
BMDDeckLinkPersistentID = /* 'peid' */ 0x70656964,
162
+ BMDDeckLinkDeviceGroupID = /* 'dgid' */ 0x64676964,
163
BMDDeckLinkTopologicalID = /* 'toid' */ 0x746F6964,
164
BMDDeckLinkVideoOutputConnections = /* 'vocn' */ 0x766F636E,
165
BMDDeckLinkVideoInputConnections = /* 'vicn' */ 0x7669636E,
166
BMDDeckLinkAudioOutputConnections = /* 'aocn' */ 0x616F636E,
167
BMDDeckLinkAudioInputConnections = /* 'aicn' */ 0x6169636E,
168
- BMDDeckLinkDeviceBusyState = /* 'dbst' */ 0x64627374,
169
BMDDeckLinkVideoIOSupport = /* 'vios' */ 0x76696F73, // Returns a BMDVideoIOSupport bit field
170
+ BMDDeckLinkDeckControlConnections = /* 'dccn' */ 0x6463636E,
171
+ BMDDeckLinkDeviceInterface = /* 'dbus' */ 0x64627573, // Returns a BMDDeviceInterface
172
+ BMDDeckLinkAudioInputRCAChannelCount = /* 'airc' */ 0x61697263,
173
+ BMDDeckLinkAudioInputXLRChannelCount = /* 'aixc' */ 0x61697863,
174
+ BMDDeckLinkAudioOutputRCAChannelCount = /* 'aorc' */ 0x616F7263,
175
+ BMDDeckLinkAudioOutputXLRChannelCount = /* 'aoxc' */ 0x616F7863,
176
+ BMDDeckLinkPairedDevicePersistentID = /* 'ppid' */ 0x70706964,
177
178
/* Floats */
179
180
181
BMDDeckLinkVideoInputGainMaximum = /* 'vigx' */ 0x76696778,
182
BMDDeckLinkVideoOutputGainMinimum = /* 'vogm' */ 0x766F676D,
183
BMDDeckLinkVideoOutputGainMaximum = /* 'vogx' */ 0x766F6778,
184
+ BMDDeckLinkMicrophoneInputGainMinimum = /* 'migm' */ 0x6D69676D,
185
+ BMDDeckLinkMicrophoneInputGainMaximum = /* 'migx' */ 0x6D696778,
186
187
/* Strings */
188
189
- BMDDeckLinkSerialPortDeviceName = /* 'slpn' */ 0x736C706E
190
+ BMDDeckLinkSerialPortDeviceName = /* 'slpn' */ 0x736C706E,
191
+ BMDDeckLinkVendorName = /* 'vndr' */ 0x766E6472,
192
+ BMDDeckLinkDisplayName = /* 'dspn' */ 0x6473706E,
193
+ BMDDeckLinkModelName = /* 'mdln' */ 0x6D646C6E,
194
+ BMDDeckLinkDeviceHandle = /* 'devh' */ 0x64657668
195
} BMDDeckLinkAttributeID;
196
197
/* Enum BMDDeckLinkAPIInformationID - DeckLinkAPI information ID */
198
199
BMDDeckLinkAPIVersion = /* 'vers' */ 0x76657273
200
} BMDDeckLinkAPIInformationID;
201
202
+/* Enum BMDDeckLinkStatusID - DeckLink Status ID */
203
+
204
+typedef [v1_enum] enum _BMDDeckLinkStatusID {
205
+
206
+ /* Integers */
207
+
208
+ bmdDeckLinkStatusDetectedVideoInputMode = /* 'dvim' */ 0x6476696D,
209
+ bmdDeckLinkStatusDetectedVideoInputFlags = /* 'dvif' */ 0x64766966,
210
+ bmdDeckLinkStatusCurrentVideoInputMode = /* 'cvim' */ 0x6376696D,
211
+ bmdDeckLinkStatusCurrentVideoInputPixelFormat = /* 'cvip' */ 0x63766970,
212
+ bmdDeckLinkStatusCurrentVideoInputFlags = /* 'cvif' */ 0x63766966,
213
+ bmdDeckLinkStatusCurrentVideoOutputMode = /* 'cvom' */ 0x63766F6D,
214
+ bmdDeckLinkStatusCurrentVideoOutputFlags = /* 'cvof' */ 0x63766F66,
215
+ bmdDeckLinkStatusPCIExpressLinkWidth = /* 'pwid' */ 0x70776964,
216
+ bmdDeckLinkStatusPCIExpressLinkSpeed = /* 'plnk' */ 0x706C6E6B,
217
+ bmdDeckLinkStatusLastVideoOutputPixelFormat = /* 'opix' */ 0x6F706978,
218
+ bmdDeckLinkStatusReferenceSignalMode = /* 'refm' */ 0x7265666D,
219
+ bmdDeckLinkStatusReferenceSignalFlags = /* 'reff' */ 0x72656666,
220
+ bmdDeckLinkStatusDuplexMode = /* 'dupx' */ 0x64757078,
221
+ bmdDeckLinkStatusBusy = /* 'busy' */ 0x62757379,
222
+
223
+ /* Flags */
224
+
225
+ bmdDeckLinkStatusVideoInputSignalLocked = /* 'visl' */ 0x7669736C,
226
+ bmdDeckLinkStatusReferenceSignalLocked = /* 'refl' */ 0x7265666C
227
+} BMDDeckLinkStatusID;
228
+
229
+/* Enum BMDDeckLinkVideoStatusFlags - */
230
+
231
+typedef [v1_enum] enum _BMDDeckLinkVideoStatusFlags {
232
+ bmdDeckLinkVideoStatusPsF = 1 << 0,
233
+ bmdDeckLinkVideoStatusDualStream3D = 1 << 1
234
+} BMDDeckLinkVideoStatusFlags;
235
+
236
+/* Enum BMDDuplexStatus - Duplex status of the device */
237
+
238
+typedef [v1_enum] enum _BMDDuplexStatus {
239
+ bmdDuplexStatusFullDuplex = /* 'fdup' */ 0x66647570,
240
+ bmdDuplexStatusHalfDuplex = /* 'hdup' */ 0x68647570,
241
+ bmdDuplexStatusSimplex = /* 'splx' */ 0x73706C78,
242
+ bmdDuplexStatusInactive = /* 'inac' */ 0x696E6163
243
+} BMDDuplexStatus;
244
+
245
/* Enum BMDDeviceBusyState - Current device busy state */
246
247
[v1_enum] enum _BMDDeviceBusyState {
248
249
/* Enum BMDNotifications - Events that can be subscribed through IDeckLinkNotification */
250
251
typedef [v1_enum] enum _BMDNotifications {
252
- bmdPreferencesChanged = /* 'pref' */ 0x70726566
253
+ bmdPreferencesChanged = /* 'pref' */ 0x70726566,
254
+ bmdStatusChanged = /* 'stat' */ 0x73746174
255
} BMDNotifications;
256
257
// Forward Declarations
258
259
interface IDeckLinkVideoOutputCallback;
260
interface IDeckLinkInputCallback;
261
+interface IDeckLinkEncoderInputCallback;
262
interface IDeckLinkMemoryAllocator;
263
interface IDeckLinkAudioOutputCallback;
264
interface IDeckLinkIterator;
265
interface IDeckLinkAPIInformation;
266
interface IDeckLinkOutput;
267
interface IDeckLinkInput;
268
+interface IDeckLinkEncoderInput;
269
interface IDeckLinkVideoFrame;
270
interface IDeckLinkMutableVideoFrame;
271
interface IDeckLinkVideoFrame3DExtensions;
272
+interface IDeckLinkVideoFrameMetadataExtensions;
273
interface IDeckLinkVideoInputFrame;
274
interface IDeckLinkVideoFrameAncillary;
275
+interface IDeckLinkEncoderPacket;
276
+interface IDeckLinkEncoderVideoPacket;
277
+interface IDeckLinkEncoderAudioPacket;
278
+interface IDeckLinkH265NALPacket;
279
interface IDeckLinkAudioInputPacket;
280
interface IDeckLinkScreenPreviewCallback;
281
interface IDeckLinkGLScreenPreviewHelper;
282
283
interface IDeckLinkNotificationCallback;
284
interface IDeckLinkNotification;
285
interface IDeckLinkAttributes;
286
+interface IDeckLinkStatus;
287
interface IDeckLinkKeyer;
288
interface IDeckLinkVideoConversion;
289
interface IDeckLinkDeviceNotificationCallback;
290
291
HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket);
292
};
293
294
+/* Interface IDeckLinkEncoderInputCallback - Frame arrival callback. */
295
+
296
+[
297
+ object,
298
+ uuid(ACF13E61-F4A0-4974-A6A7-59AFF6268B31),
299
+ helpstring("Frame arrival callback.")
300
+] interface IDeckLinkEncoderInputCallback : IUnknown
301
+{
302
+ HRESULT VideoInputSignalChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
303
+ HRESULT VideoPacketArrived([in] IDeckLinkEncoderVideoPacket* videoPacket);
304
+ HRESULT AudioPacketArrived([in] IDeckLinkEncoderAudioPacket* audioPacket);
305
+};
306
+
307
/* Interface IDeckLinkMemoryAllocator - Memory allocator for video frames. */
308
309
[
310
311
helpstring("Memory allocator for video frames.")
312
] interface IDeckLinkMemoryAllocator : IUnknown
313
{
314
- HRESULT AllocateBuffer([in] unsigned long bufferSize, [out] void **allocatedBuffer);
315
+ HRESULT AllocateBuffer([in] unsigned int bufferSize, [out] void **allocatedBuffer);
316
HRESULT ReleaseBuffer([in] void *buffer);
317
318
HRESULT Commit(void);
319
320
HRESULT DisableVideoOutput(void);
321
322
HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
323
- HRESULT CreateVideoFrame([in] long width, [in] long height, [in] long rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
324
+ HRESULT CreateVideoFrame([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
325
HRESULT CreateAncillaryData([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
326
327
HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);
328
HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
329
HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
330
- HRESULT GetBufferedVideoFrameCount([out] unsigned long *bufferedFrameCount);
331
+ HRESULT GetBufferedVideoFrameCount([out] unsigned int *bufferedFrameCount);
332
333
/* Audio Output */
334
335
- HRESULT EnableAudioOutput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned long channelCount, [in] BMDAudioOutputStreamType streamType);
336
+ HRESULT EnableAudioOutput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType);
337
HRESULT DisableAudioOutput(void);
338
339
- HRESULT WriteAudioSamplesSync([in] void *buffer, [in] unsigned long sampleFrameCount, [out] unsigned long *sampleFramesWritten);
340
+ HRESULT WriteAudioSamplesSync([in] void *buffer, [in] unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
341
342
HRESULT BeginAudioPreroll(void);
343
HRESULT EndAudioPreroll(void);
344
- HRESULT ScheduleAudioSamples([in] void *buffer, [in] unsigned long sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned long *sampleFramesWritten);
345
+ HRESULT ScheduleAudioSamples([in] void *buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
346
347
- HRESULT GetBufferedAudioSampleFrameCount([out] unsigned long *bufferedSampleFrameCount);
348
+ HRESULT GetBufferedAudioSampleFrameCount([out] unsigned int *bufferedSampleFrameCount);
349
HRESULT FlushBufferedAudioSamples(void);
350
351
HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
352
353
354
HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
355
HRESULT DisableVideoInput(void);
356
- HRESULT GetAvailableVideoFrameCount([out] unsigned long *availableFrameCount);
357
+ HRESULT GetAvailableVideoFrameCount([out] unsigned int *availableFrameCount);
358
HRESULT SetVideoInputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
359
360
/* Audio Input */
361
362
- HRESULT EnableAudioInput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned long channelCount);
363
+ HRESULT EnableAudioInput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
364
HRESULT DisableAudioInput(void);
365
- HRESULT GetAvailableAudioSampleFrameCount([out] unsigned long *availableSampleFrameCount);
366
+ HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
367
368
/* Input Control */
369
370
371
HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
372
};
373
374
+/* Interface IDeckLinkEncoderInput - Created by QueryInterface from IDeckLink. */
375
+
376
+[
377
+ object,
378
+ uuid(270587DA-6B7D-42E7-A1F0-6D853F581185),
379
+ helpstring("Created by QueryInterface from IDeckLink.")
380
+] interface IDeckLinkEncoderInput : IUnknown
381
+{
382
+ HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
383
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
384
+
385
+ /* Video Input */
386
+
387
+ HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
388
+ HRESULT DisableVideoInput(void);
389
+ HRESULT GetAvailablePacketsCount([out] unsigned int *availablePacketsCount);
390
+ HRESULT SetMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
391
+
392
+ /* Audio Input */
393
+
394
+ HRESULT EnableAudioInput([in] BMDAudioFormat audioFormat, [in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
395
+ HRESULT DisableAudioInput(void);
396
+ HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
397
+
398
+ /* Input Control */
399
+
400
+ HRESULT StartStreams(void);
401
+ HRESULT StopStreams(void);
402
+ HRESULT PauseStreams(void);
403
+ HRESULT FlushStreams(void);
404
+ HRESULT SetCallback([in] IDeckLinkEncoderInputCallback *theCallback);
405
+
406
+ /* Hardware Timing */
407
+
408
+ HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
409
+};
410
+
411
/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
412
413
[
414
415
HRESULT GetFrameForRightEye([out] IDeckLinkVideoFrame* *rightEyeFrame);
416
};
417
418
+/* Interface IDeckLinkVideoFrameMetadataExtensions - Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information */
419
+
420
+[
421
+ object,
422
+ uuid(D5973DC9-6432-46D0-8F0B-2496F8A1238F),
423
+ local,
424
+ helpstring("Optional interface implemented on IDeckLinkVideoFrame to support frame metadata such as HDMI HDR information")
425
+] interface IDeckLinkVideoFrameMetadataExtensions : IUnknown
426
+{
427
+ HRESULT GetInt([in] BMDDeckLinkFrameMetadataID metadataID, [out] LONGLONG *value);
428
+ HRESULT GetFloat([in] BMDDeckLinkFrameMetadataID metadataID, [out] double *value);
429
+ HRESULT GetFlag([in] BMDDeckLinkFrameMetadataID metadataID, [out] BOOL* value);
430
+ HRESULT GetString([in] BMDDeckLinkFrameMetadataID metadataID, [out] BSTR *value);
431
+};
432
+
433
/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
434
435
[
436
437
] interface IDeckLinkVideoFrameAncillary : IUnknown
438
{
439
440
- HRESULT GetBufferForVerticalBlankingLine([in] unsigned long lineNumber, [out] void **buffer);
441
+ HRESULT GetBufferForVerticalBlankingLine([in] unsigned int lineNumber, [out] void **buffer);
442
BMDPixelFormat GetPixelFormat(void);
443
BMDDisplayMode GetDisplayMode(void);
444
};
445
446
+/* Interface IDeckLinkEncoderPacket - Interface to encapsulate an encoded packet. */
447
+
448
+[
449
+ object,
450
+ uuid(B693F36C-316E-4AF1-B6C2-F389A4BCA620),
451
+ local,
452
+ helpstring("Interface to encapsulate an encoded packet.")
453
+] interface IDeckLinkEncoderPacket : IUnknown
454
+{
455
+ HRESULT GetBytes([out] void **buffer);
456
+ long GetSize(void);
457
+ HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [in] BMDTimeScale timeScale);
458
+ BMDPacketType GetPacketType(void);
459
+};
460
+
461
+/* Interface IDeckLinkEncoderVideoPacket - Provided by the IDeckLinkEncoderInput video packet arrival callback. */
462
+
463
+[
464
+ object,
465
+ uuid(4E7FD944-E8C7-4EAC-B8C0-7B77F80F5AE0),
466
+ local,
467
+ helpstring("Provided by the IDeckLinkEncoderInput video packet arrival callback.")
468
+] interface IDeckLinkEncoderVideoPacket : IDeckLinkEncoderPacket
469
+{
470
+ BMDPixelFormat GetPixelFormat(void);
471
+ HRESULT GetHardwareReferenceTimestamp([in] BMDTimeScale timeScale, [out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration);
472
+
473
+ HRESULT GetTimecode([in] BMDTimecodeFormat format, [out] IDeckLinkTimecode **timecode);
474
+};
475
+
476
+/* Interface IDeckLinkEncoderAudioPacket - Provided by the IDeckLinkEncoderInput audio packet arrival callback. */
477
+
478
+[
479
+ object,
480
+ uuid(49E8EDC8-693B-4E14-8EF6-12C658F5A07A),
481
+ local,
482
+ helpstring("Provided by the IDeckLinkEncoderInput audio packet arrival callback.")
483
+] interface IDeckLinkEncoderAudioPacket : IDeckLinkEncoderPacket
484
+{
485
+ BMDAudioFormat GetAudioFormat(void);
486
+};
487
+
488
+/* Interface IDeckLinkH265NALPacket - Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object */
489
+
490
+[
491
+ object,
492
+ uuid(639C8E0B-68D5-4BDE-A6D4-95F3AEAFF2E7),
493
+ local,
494
+ helpstring("Obtained through QueryInterface() on an IDeckLinkEncoderVideoPacket object")
495
+] interface IDeckLinkH265NALPacket : IDeckLinkEncoderVideoPacket
496
+{
497
+ HRESULT GetUnitType([out] unsigned char *unitType);
498
+ HRESULT GetBytesNoPrefix([out] void **buffer);
499
+ long GetSizeNoPrefix(void);
500
+};
501
+
502
/* Interface IDeckLinkAudioInputPacket - Provided by the IDeckLinkInput callback. */
503
504
[
505
506
HRESULT GetString([in] BMDDeckLinkAttributeID cfgID, [out] BSTR *value);
507
};
508
509
+/* Interface IDeckLinkStatus - DeckLink Status interface */
510
+
511
+[
512
+ object,
513
+ uuid(5F558200-4028-49BC-BEAC-DB3FA4A96E46),
514
+ local,
515
+ helpstring("DeckLink Status interface")
516
+] interface IDeckLinkStatus : IUnknown
517
+{
518
+ HRESULT GetFlag([in] BMDDeckLinkStatusID statusID, [out] BOOL *value);
519
+ HRESULT GetInt([in] BMDDeckLinkStatusID statusID, [out] LONGLONG *value);
520
+ HRESULT GetFloat([in] BMDDeckLinkStatusID statusID, [out] double *value);
521
+ HRESULT GetString([in] BMDDeckLinkStatusID statusID, [out] BSTR *value);
522
+ HRESULT GetBytes([in] BMDDeckLinkStatusID statusID, [out] void *buffer, [in, out] unsigned int *bufferSize);
523
+};
524
+
525
/* Interface IDeckLinkKeyer - DeckLink Keyer interface */
526
527
[
528
529
{
530
HRESULT Enable([in] BOOL isExternal);
531
HRESULT SetLevel([in] unsigned char level);
532
- HRESULT RampUp([in] unsigned long numberOfFrames);
533
- HRESULT RampDown([in] unsigned long numberOfFrames);
534
+ HRESULT RampUp([in] unsigned int numberOfFrames);
535
+ HRESULT RampDown([in] unsigned int numberOfFrames);
536
HRESULT Disable(void);
537
};
538
539
540
541
/* Coclasses */
542
543
+importlib("stdole2.tlb");
544
+
545
[
546
uuid(1F2E109A-8F4F-49E4-9203-135595CB6FA5),
547
helpstring("CDeckLinkIterator Class")
548
549
[default] interface IDeckLinkDiscovery;
550
};
551
552
+
553
+// import deprecated interfaces
554
+#include "DeckLinkAPI_v10_6.idl"
555
+#include "DeckLinkAPI_v10_5.idl"
556
+#include "DeckLinkAPI_v10_4.idl"
557
+#include "DeckLinkAPI_v10_2.idl"
558
+#include "DeckLinkAPI_v9_9.idl"
559
+#include "DeckLinkAPI_v9_2.idl"
560
+#include "DeckLinkAPI_v8_1.idl"
561
+#include "DeckLinkAPI_v8_0.idl"
562
+#include "DeckLinkAPI_v7_9.idl"
563
+#include "DeckLinkAPI_v7_6.idl"
564
+#include "DeckLinkAPI_v7_3.idl"
565
+#include "DeckLinkAPI_v7_1.idl"
566
};
567
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIConfiguration.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIConfiguration.idl
Changed
155
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
bmdDeckLinkConfigHDMI3DPackingFormat = /* '3dpf' */ 0x33647066,
10
bmdDeckLinkConfigBypass = /* 'byps' */ 0x62797073,
11
bmdDeckLinkConfigClockTimingAdjustment = /* 'ctad' */ 0x63746164,
12
+ bmdDeckLinkConfigDuplexMode = /* 'dupx' */ 0x64757078,
13
14
/* Audio Input/Output Flags */
15
16
17
bmdDeckLinkConfigFieldFlickerRemoval = /* 'fdfr' */ 0x66646672,
18
bmdDeckLinkConfigHD1080p24ToHD1080i5994Conversion = /* 'to59' */ 0x746F3539,
19
bmdDeckLinkConfig444SDIVideoOutput = /* '444o' */ 0x3434346F,
20
- bmdDeckLinkConfigSingleLinkVideoOutput = /* 'sglo' */ 0x73676C6F,
21
bmdDeckLinkConfigBlackVideoOutputDuringCapture = /* 'bvoc' */ 0x62766F63,
22
bmdDeckLinkConfigLowLatencyVideoOutput = /* 'llvo' */ 0x6C6C766F,
23
+ bmdDeckLinkConfigDownConversionOnAllAnalogOutput = /* 'caao' */ 0x6361616F,
24
+ bmdDeckLinkConfigSMPTELevelAOutput = /* 'smta' */ 0x736D7461,
25
26
/* Video Output Integers */
27
28
29
bmdDeckLinkConfigVideoOutputIdleOperation = /* 'voio' */ 0x766F696F,
30
bmdDeckLinkConfigDefaultVideoOutputMode = /* 'dvom' */ 0x64766F6D,
31
bmdDeckLinkConfigDefaultVideoOutputModeFlags = /* 'dvof' */ 0x64766F66,
32
+ bmdDeckLinkConfigSDIOutputLinkConfiguration = /* 'solc' */ 0x736F6C63,
33
34
/* Video Output Floats */
35
36
37
38
bmdDeckLinkConfigVideoInputScanning = /* 'visc' */ 0x76697363, // Applicable to H264 Pro Recorder only
39
bmdDeckLinkConfigUseDedicatedLTCInput = /* 'dltc' */ 0x646C7463, // Use timecode from LTC input instead of SDI stream
40
+ bmdDeckLinkConfigSDIInput3DPayloadOverride = /* '3dds' */ 0x33646473,
41
42
/* Video Input Integers */
43
44
45
bmdDeckLinkConfigVideoInputSVideoLumaGain = /* 'islg' */ 0x69736C67,
46
bmdDeckLinkConfigVideoInputSVideoChromaGain = /* 'iscg' */ 0x69736367,
47
48
+ /* Audio Input Flags */
49
+
50
+ bmdDeckLinkConfigMicrophonePhantomPower = /* 'mphp' */ 0x6D706870,
51
+
52
/* Audio Input Integers */
53
54
bmdDeckLinkConfigAudioInputConnection = /* 'aicn' */ 0x6169636E,
55
56
bmdDeckLinkConfigAnalogAudioInputScaleChannel3 = /* 'ais3' */ 0x61697333,
57
bmdDeckLinkConfigAnalogAudioInputScaleChannel4 = /* 'ais4' */ 0x61697334,
58
bmdDeckLinkConfigDigitalAudioInputScale = /* 'dais' */ 0x64616973,
59
+ bmdDeckLinkConfigMicrophoneInputGain = /* 'micg' */ 0x6D696367,
60
61
/* Audio Output Integers */
62
63
64
bmdDeckLinkConfigAnalogAudioOutputScaleChannel2 = /* 'aos2' */ 0x616F7332,
65
bmdDeckLinkConfigAnalogAudioOutputScaleChannel3 = /* 'aos3' */ 0x616F7333,
66
bmdDeckLinkConfigAnalogAudioOutputScaleChannel4 = /* 'aos4' */ 0x616F7334,
67
- bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73
68
+ bmdDeckLinkConfigDigitalAudioOutputScale = /* 'daos' */ 0x64616F73,
69
+ bmdDeckLinkConfigHeadphoneVolume = /* 'hvol' */ 0x68766F6C,
70
+
71
+ /* Device Information Strings */
72
+
73
+ bmdDeckLinkConfigDeviceInformationLabel = /* 'dila' */ 0x64696C61,
74
+ bmdDeckLinkConfigDeviceInformationSerialNumber = /* 'disn' */ 0x6469736E,
75
+ bmdDeckLinkConfigDeviceInformationCompany = /* 'dico' */ 0x6469636F,
76
+ bmdDeckLinkConfigDeviceInformationPhone = /* 'diph' */ 0x64697068,
77
+ bmdDeckLinkConfigDeviceInformationEmail = /* 'diem' */ 0x6469656D,
78
+ bmdDeckLinkConfigDeviceInformationDate = /* 'dida' */ 0x64696461,
79
+
80
+ /* Deck Control Integers */
81
+
82
+ bmdDeckLinkConfigDeckControlConnection = /* 'dcco' */ 0x6463636F
83
} BMDDeckLinkConfigurationID;
84
85
+/* Enum BMDDeckLinkEncoderConfigurationID - DeckLink Encoder Configuration ID */
86
+
87
+typedef [v1_enum] enum _BMDDeckLinkEncoderConfigurationID {
88
+
89
+ /* Video Encoder Integers */
90
+
91
+ bmdDeckLinkEncoderConfigPreferredBitDepth = /* 'epbr' */ 0x65706272,
92
+ bmdDeckLinkEncoderConfigFrameCodingMode = /* 'efcm' */ 0x6566636D,
93
+
94
+ /* HEVC/H.265 Encoder Integers */
95
+
96
+ bmdDeckLinkEncoderConfigH265TargetBitrate = /* 'htbr' */ 0x68746272,
97
+
98
+ /* DNxHR/DNxHD Compression ID */
99
+
100
+ bmdDeckLinkEncoderConfigDNxHRCompressionID = /* 'dcid' */ 0x64636964,
101
+
102
+ /* DNxHR/DNxHD Level */
103
+
104
+ bmdDeckLinkEncoderConfigDNxHRLevel = /* 'dlev' */ 0x646C6576,
105
+
106
+ /* Encoded Sample Decriptions */
107
+
108
+ bmdDeckLinkEncoderConfigMPEG4SampleDescription = /* 'stsE' */ 0x73747345, // Full MPEG4 sample description (aka SampleEntry of an 'stsd' atom-box). Useful for MediaFoundation, QuickTime, MKV and more
109
+ bmdDeckLinkEncoderConfigMPEG4CodecSpecificDesc = /* 'esds' */ 0x65736473 // Sample description extensions only (atom stream, each with size and fourCC header). Useful for AVFoundation, VideoToolbox, MKV and more
110
+} BMDDeckLinkEncoderConfigurationID;
111
+
112
// Forward Declarations
113
114
interface IDeckLinkConfiguration;
115
+interface IDeckLinkEncoderConfiguration;
116
117
/* Interface IDeckLinkConfiguration - DeckLink Configuration interface */
118
119
[
120
object,
121
- uuid(1E69FCF6-4203-4936-8076-2A9F4CFD50CB),
122
+ uuid(CB71734A-FE37-4E8D-8E13-802133A1C3F2),
123
local,
124
helpstring("DeckLink Configuration interface")
125
] interface IDeckLinkConfiguration : IUnknown
126
127
HRESULT WriteConfigurationToPreferences(void);
128
};
129
130
+/* Interface IDeckLinkEncoderConfiguration - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
131
+
132
+[
133
+ object,
134
+ uuid(138050E5-C60A-4552-BF3F-0F358049327E),
135
+ local,
136
+ helpstring("DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput")
137
+] interface IDeckLinkEncoderConfiguration : IUnknown
138
+{
139
+ HRESULT SetFlag([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BOOL value);
140
+ HRESULT GetFlag([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BOOL *value);
141
+ HRESULT SetInt([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] LONGLONG value);
142
+ HRESULT GetInt([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] LONGLONG *value);
143
+ HRESULT SetFloat([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] double value);
144
+ HRESULT GetFloat([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] double *value);
145
+ HRESULT SetString([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BSTR value);
146
+ HRESULT GetString([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BSTR *value);
147
+ HRESULT GetBytes([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] void *buffer /* optional */, [in, out] unsigned int *bufferSize);
148
+};
149
+
150
/* Coclasses */
151
+
152
+importlib("stdole2.tlb");
153
+
154
+
155
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDeckControl.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDeckControl.idl
Changed
66
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
// Enumeration Mapping
11
12
-cpp_quote("typedef unsigned long BMDDeckControlStatusFlags;")
13
-cpp_quote("typedef unsigned long BMDDeckControlExportModeOpsFlags;")
14
+cpp_quote("typedef unsigned int BMDDeckControlStatusFlags;")
15
+cpp_quote("typedef unsigned int BMDDeckControlExportModeOpsFlags;")
16
cpp_quote("#if 0")
17
typedef enum _BMDDeckControlStatusFlags BMDDeckControlStatusFlags;
18
typedef enum _BMDDeckControlExportModeOpsFlags BMDDeckControlExportModeOpsFlags;
19
20
HRESULT TimecodeUpdate([in] BMDTimecodeBCD currentTimecode);
21
HRESULT VTRControlStateChanged([in] BMDDeckControlVTRControlState newState, [in] BMDDeckControlError error);
22
HRESULT DeckControlEventReceived([in] BMDDeckControlEvent event, [in] BMDDeckControlError error);
23
- HRESULT DeckControlStatusChanged([in] BMDDeckControlStatusFlags flags, [in] unsigned long mask);
24
+ HRESULT DeckControlStatusChanged([in] BMDDeckControlStatusFlags flags, [in] unsigned int mask);
25
};
26
27
/* Interface IDeckLinkDeckControl - Deck Control main interface */
28
29
HRESULT Close([in] BOOL standbyOn);
30
HRESULT GetCurrentState([out] BMDDeckControlMode *mode, [out] BMDDeckControlVTRControlState *vtrControlState, [out] BMDDeckControlStatusFlags *flags);
31
HRESULT SetStandby([in] BOOL standbyOn);
32
- HRESULT SendCommand([in] unsigned char *inBuffer, [in] unsigned long inBufferSize, [out] unsigned char *outBuffer, [out] unsigned long *outDataSize, [in] unsigned long outBufferSize, [out] BMDDeckControlError *error);
33
+ HRESULT SendCommand([in] unsigned char *inBuffer, [in] unsigned int inBufferSize, [out] unsigned char *outBuffer, [out] unsigned int *outDataSize, [in] unsigned int outBufferSize, [out] BMDDeckControlError *error);
34
HRESULT Play([out] BMDDeckControlError *error);
35
HRESULT Stop([out] BMDDeckControlError *error);
36
HRESULT TogglePlayStop([out] BMDDeckControlError *error);
37
38
HRESULT GetTimecodeString([out] BSTR *currentTimeCode, [out] BMDDeckControlError *error);
39
HRESULT GetTimecode([out] IDeckLinkTimecode **currentTimecode, [out] BMDDeckControlError *error);
40
HRESULT GetTimecodeBCD([out] BMDTimecodeBCD *currentTimecode, [out] BMDDeckControlError *error);
41
- HRESULT SetPreroll([in] unsigned long prerollSeconds);
42
- HRESULT GetPreroll([out] unsigned long *prerollSeconds);
43
- HRESULT SetExportOffset([in] long exportOffsetFields);
44
- HRESULT GetExportOffset([out] long *exportOffsetFields);
45
- HRESULT GetManualExportOffset([out] long *deckManualExportOffsetFields);
46
- HRESULT SetCaptureOffset([in] long captureOffsetFields);
47
- HRESULT GetCaptureOffset([out] long *captureOffsetFields);
48
+ HRESULT SetPreroll([in] unsigned int prerollSeconds);
49
+ HRESULT GetPreroll([out] unsigned int *prerollSeconds);
50
+ HRESULT SetExportOffset([in] int exportOffsetFields);
51
+ HRESULT GetExportOffset([out] int *exportOffsetFields);
52
+ HRESULT GetManualExportOffset([out] int *deckManualExportOffsetFields);
53
+ HRESULT SetCaptureOffset([in] int captureOffsetFields);
54
+ HRESULT GetCaptureOffset([out] int *captureOffsetFields);
55
HRESULT StartExport([in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [in] BMDDeckControlExportModeOpsFlags exportModeOps, [out] BMDDeckControlError *error);
56
HRESULT StartCapture([in] BOOL useVITC, [in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [out] BMDDeckControlError *error);
57
HRESULT GetDeviceID([out] unsigned short *deviceId, [out] BMDDeckControlError *error);
58
59
};
60
61
/* Coclasses */
62
+
63
+importlib("stdole2.tlb");
64
+
65
+
66
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDiscovery.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIDiscovery.idl
Changed
16
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
};
10
11
/* Coclasses */
12
+
13
+importlib("stdole2.tlb");
14
+
15
+
16
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIModes.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIModes.idl
Changed
39
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
// Enumeration Mapping
11
12
-cpp_quote("typedef unsigned long BMDDisplayModeFlags;")
13
+cpp_quote("typedef unsigned int BMDDisplayModeFlags;")
14
cpp_quote("#if 0")
15
typedef enum _BMDDisplayModeFlags BMDDisplayModeFlags;
16
cpp_quote("#endif")
17
18
bmdFormat12BitRGB = /* 'R12B' */ 0x52313242, // Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
19
bmdFormat12BitRGBLE = /* 'R12L' */ 0x5231324C, // Little-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component
20
bmdFormat10BitRGBXLE = /* 'R10l' */ 0x5231306C, // Little-endian 10-bit RGB with SMPTE video levels (64-940)
21
- bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062 // Big-endian 10-bit RGB with SMPTE video levels (64-940)
22
+ bmdFormat10BitRGBX = /* 'R10b' */ 0x52313062, // Big-endian 10-bit RGB with SMPTE video levels (64-940)
23
+ bmdFormatH265 = /* 'hev1' */ 0x68657631, // High Efficiency Video Coding (HEVC/h.265)
24
+
25
+ /* AVID DNxHR */
26
+
27
+ bmdFormatDNxHR = /* 'AVdh' */ 0x41566468
28
} BMDPixelFormat;
29
30
/* Enum BMDDisplayModeFlags - Flags to describe the characteristics of an IDeckLinkDisplayMode. */
31
32
};
33
34
/* Coclasses */
35
+
36
+importlib("stdole2.tlb");
37
+
38
+
39
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIStreaming.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIStreaming.idl
Changed
58
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
helpstring("Represents a mutable encoded video mode.")
10
] interface IBMDStreamingMutableVideoEncodingMode : IBMDStreamingVideoEncodingMode
11
{
12
- HRESULT SetSourceRect([in] unsigned long posX, [in] unsigned long posY, [in] unsigned long width, [in] unsigned long height);
13
- HRESULT SetDestSize([in] unsigned long width, [in] unsigned long height);
14
+ HRESULT SetSourceRect([in] unsigned int posX, [in] unsigned int posY, [in] unsigned int width, [in] unsigned int height);
15
+ HRESULT SetDestSize([in] unsigned int width, [in] unsigned int height);
16
HRESULT SetFlag([in] BMDStreamingEncodingModePropertyID cfgID, [in] BOOL value);
17
HRESULT SetInt([in] BMDStreamingEncodingModePropertyID cfgID, [in] LONGLONG value);
18
HRESULT SetFloat([in] BMDStreamingEncodingModePropertyID cfgID, [in] double value);
19
20
HRESULT GetBytes([out] void** buffer);
21
HRESULT GetBytesWithSizePrefix([out] void** buffer); // Contains a 32-bit unsigned big endian size prefix
22
HRESULT GetDisplayTime([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* displayTime);
23
- HRESULT GetPacketIndex([out] unsigned long* packetIndex); // Deprecated
24
+ HRESULT GetPacketIndex([out] unsigned int* packetIndex); // Deprecated
25
};
26
27
/* Interface IBMDStreamingAudioPacket - Represents a chunk of audio data */
28
29
long GetPayloadSize(void);
30
HRESULT GetBytes([out] void** buffer);
31
HRESULT GetPlayTime([in] ULONGLONG requestedTimeScale, [out] ULONGLONG* playTime);
32
- HRESULT GetPacketIndex([out] unsigned long* packetIndex); // Deprecated
33
+ HRESULT GetPacketIndex([out] unsigned int* packetIndex); // Deprecated
34
};
35
36
/* Interface IBMDStreamingMPEG2TSPacket - Represent an MPEG2 Transport Stream packet */
37
38
{
39
HRESULT IsNALSequenceParameterSet([in] IBMDStreamingH264NALPacket* nal);
40
HRESULT IsNALPictureParameterSet([in] IBMDStreamingH264NALPacket* nal);
41
- HRESULT GetProfileAndLevelFromSPS([in] IBMDStreamingH264NALPacket* nal, [out] unsigned long* profileIdc, [out] unsigned long* profileCompatability, [out] unsigned long* levelIdc);
42
+ HRESULT GetProfileAndLevelFromSPS([in] IBMDStreamingH264NALPacket* nal, [out] unsigned int* profileIdc, [out] unsigned int* profileCompatability, [out] unsigned int* levelIdc);
43
};
44
45
/* Coclasses */
46
47
+importlib("stdole2.tlb");
48
+
49
[
50
uuid(0CAA31F6-8A26-40B0-86A4-BF58DCCA710C),
51
helpstring("CBMDStreamingDiscovery Class")
52
53
{
54
[default] interface IBMDStreamingH264NALParser;
55
};
56
+
57
+
58
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPITypes.idl -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPITypes.idl
Changed
52
1
2
/* -LICENSE-START-
3
-** Copyright (c) 2014 Blackmagic Design
4
+** Copyright (c) 2016 Blackmagic Design
5
**
6
** Permission is hereby granted, free of charge, to any person or organization
7
** obtaining a copy of the software and accompanying documentation covered by
8
9
10
typedef LONGLONG BMDTimeValue;
11
typedef LONGLONG BMDTimeScale;
12
-typedef unsigned long BMDTimecodeBCD;
13
-typedef unsigned long BMDTimecodeUserBits;
14
+typedef unsigned int BMDTimecodeBCD;
15
+typedef unsigned int BMDTimecodeUserBits;
16
17
// Enumeration Mapping
18
19
-cpp_quote("typedef unsigned long BMDTimecodeFlags;")
20
+cpp_quote("typedef unsigned int BMDTimecodeFlags;")
21
cpp_quote("#if 0")
22
typedef enum _BMDTimecodeFlags BMDTimecodeFlags;
23
cpp_quote("#endif")
24
25
bmdAudioConnectionAESEBU = 1 << 1,
26
bmdAudioConnectionAnalog = 1 << 2,
27
bmdAudioConnectionAnalogXLR = 1 << 3,
28
- bmdAudioConnectionAnalogRCA = 1 << 4
29
+ bmdAudioConnectionAnalogRCA = 1 << 4,
30
+ bmdAudioConnectionMicrophone = 1 << 5,
31
+ bmdAudioConnectionHeadphones = 1 << 6
32
} BMDAudioConnection;
33
34
+/* Enum BMDDeckControlConnection - Deck control connections */
35
+
36
+typedef [v1_enum] enum _BMDDeckControlConnection {
37
+ bmdDeckControlConnectionRS422Remote1 = 1 << 0,
38
+ bmdDeckControlConnectionRS422Remote2 = 1 << 1
39
+} BMDDeckControlConnection;
40
+
41
// Forward Declarations
42
43
interface IDeckLinkTimecode;
44
45
};
46
47
/* Coclasses */
48
+
49
+importlib("stdole2.tlb");
50
+
51
+
52
obs-studio-0.16.2.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIVersion.h -> obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPIVersion.h
Changed
12
1
2
#ifndef __DeckLink_API_Version_h__
3
#define __DeckLink_API_Version_h__
4
5
-#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a030100
6
-#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.3.1"
7
+#define BLACKMAGIC_DECKLINK_API_VERSION 0x0a080000
8
+#define BLACKMAGIC_DECKLINK_API_VERSION_STRING "10.8"
9
10
#endif // __DeckLink_API_Version_h__
11
+
12
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v10_2.idl
Added
75
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2014 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v10_2.idl */
29
+
30
+// Enumeration Mapping
31
+
32
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
33
+
34
+typedef [v1_enum] enum _BMDDeckLinkConfigurationID_v10_2 {
35
+
36
+ /* Video output flags */
37
+
38
+ bmdDeckLinkConfig3GBpsVideoOutput_v10_2 = /* '3gbs' */ 0x33676273
39
+
40
+} BMDDeckLinkConfigurationID_v10_2;
41
+
42
+/* Enum BMDAudioConnection_v10_2 - Audio connection types */
43
+
44
+typedef [v1_enum] enum _BMDAudioConnection_v10_2 {
45
+ bmdAudioConnectionEmbedded_v10_2 = /* 'embd' */ 0x656D6264,
46
+ bmdAudioConnectionAESEBU_v10_2 = /* 'aes ' */ 0x61657320,
47
+ bmdAudioConnectionAnalog_v10_2 = /* 'anlg' */ 0x616E6C67,
48
+ bmdAudioConnectionAnalogXLR_v10_2 = /* 'axlr' */ 0x61786C72,
49
+ bmdAudioConnectionAnalogRCA_v10_2 = /* 'arca' */ 0x61726361
50
+} BMDAudioConnection_v10_2;
51
+
52
+// Forward Declarations
53
+
54
+interface IDeckLinkConfiguration_v10_2;
55
+
56
+/* Interface IDeckLinkConfiguration_v10_2 - DeckLink Configuration interface */
57
+
58
+[
59
+ object,
60
+ uuid(C679A35B-610C-4D09-B748-1D0478100FC0),
61
+ local,
62
+ helpstring("DeckLink Configuration interface")
63
+] interface IDeckLinkConfiguration_v10_2 : IUnknown
64
+{
65
+ HRESULT SetFlag([in] BMDDeckLinkConfigurationID cfgID, [in] BOOL value);
66
+ HRESULT GetFlag([in] BMDDeckLinkConfigurationID cfgID, [out] BOOL *value);
67
+ HRESULT SetInt([in] BMDDeckLinkConfigurationID cfgID, [in] LONGLONG value);
68
+ HRESULT GetInt([in] BMDDeckLinkConfigurationID cfgID, [out] LONGLONG *value);
69
+ HRESULT SetFloat([in] BMDDeckLinkConfigurationID cfgID, [in] double value);
70
+ HRESULT GetFloat([in] BMDDeckLinkConfigurationID cfgID, [out] double *value);
71
+ HRESULT SetString([in] BMDDeckLinkConfigurationID cfgID, [in] BSTR value);
72
+ HRESULT GetString([in] BMDDeckLinkConfigurationID cfgID, [out] BSTR *value);
73
+ HRESULT WriteConfigurationToPreferences(void);
74
+};
75
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v10_4.idl
Added
63
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v10_4.idl */
29
+
30
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
31
+
32
+typedef [v1_enum] enum _BMDDeckLinkConfigurationID_v10_4 {
33
+
34
+ /* Video output flags */
35
+
36
+ bmdDeckLinkConfigSingleLinkVideoOutput_v10_4 = /* 'sglo' */ 0x73676C6F,
37
+
38
+} BMDDeckLinkConfigurationID_v10_4;
39
+
40
+// Forward Declarations
41
+
42
+interface IDeckLinkConfiguration_v10_4;
43
+
44
+/* Interface IDeckLinkConfiguration_v10_4 - DeckLink Configuration interface */
45
+
46
+[
47
+ object,
48
+ uuid(1E69FCF6-4203-4936-8076-2A9F4CFD50CB),
49
+ local,
50
+ helpstring("DeckLink Configuration interface")
51
+] interface IDeckLinkConfiguration_v10_4 : IUnknown
52
+{
53
+ HRESULT SetFlag([in] BMDDeckLinkConfigurationID cfgID, [in] BOOL value);
54
+ HRESULT GetFlag([in] BMDDeckLinkConfigurationID cfgID, [out] BOOL *value);
55
+ HRESULT SetInt([in] BMDDeckLinkConfigurationID cfgID, [in] LONGLONG value);
56
+ HRESULT GetInt([in] BMDDeckLinkConfigurationID cfgID, [out] LONGLONG *value);
57
+ HRESULT SetFloat([in] BMDDeckLinkConfigurationID cfgID, [in] double value);
58
+ HRESULT GetFloat([in] BMDDeckLinkConfigurationID cfgID, [out] double *value);
59
+ HRESULT SetString([in] BMDDeckLinkConfigurationID cfgID, [in] BSTR value);
60
+ HRESULT GetString([in] BMDDeckLinkConfigurationID cfgID, [out] BSTR *value);
61
+ HRESULT WriteConfigurationToPreferences(void);
62
+};
63
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v10_5.idl
Added
63
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2015 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v10_5.idl */
29
+
30
+/* Enum BMDDeckLinkConfigurationID - DeckLink Configuration ID */
31
+
32
+typedef [v1_enum] enum _BMDDeckLinkAttributeID_v10_5 {
33
+
34
+ /* Integers */
35
+
36
+ BMDDeckLinkDeviceBusyState_v10_5 = /* 'dbst' */ 0x64627374,
37
+
38
+} BMDDeckLinkAttributeID_v10_5;
39
+
40
+// Forward Declarations
41
+
42
+interface IDeckLinkEncoderConfiguration_v10_5;
43
+
44
+/* Interface IDeckLinkEncoderConfiguration_v10_5 - DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput */
45
+
46
+[
47
+ object,
48
+ uuid(67455668-0848-45DF-8D8E-350A77C9A028),
49
+ local,
50
+ helpstring("DeckLink Encoder Configuration interface. Obtained from IDeckLinkEncoderInput")
51
+] interface IDeckLinkEncoderConfiguration_v10_5 : IUnknown
52
+{
53
+ HRESULT SetFlag([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BOOL value);
54
+ HRESULT GetFlag([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BOOL *value);
55
+ HRESULT SetInt([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] LONGLONG value);
56
+ HRESULT GetInt([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] LONGLONG *value);
57
+ HRESULT SetFloat([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] double value);
58
+ HRESULT GetFloat([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] double *value);
59
+ HRESULT SetString([in] BMDDeckLinkEncoderConfigurationID cfgID, [in] BSTR value);
60
+ HRESULT GetString([in] BMDDeckLinkEncoderConfigurationID cfgID, [out] BSTR *value);
61
+ HRESULT GetDecoderConfigurationInfo([out] void *buffer, [in] long bufferSize, [out] long *returnedSize);
62
+};
63
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v10_6.idl
Added
43
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2016 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v10_6.idl */
29
+
30
+/* Enum BMDDeckLinkAttributeID - DeckLink Attribute ID */
31
+
32
+typedef [v1_enum] enum _BMDDeckLinkAttributeID_v10_6 {
33
+
34
+ /* Flags */
35
+
36
+ BMDDeckLinkSupportsDesktopDisplay_v10_6 = /* 'extd' */ 0x65787464,
37
+
38
+} BMDDeckLinkAttributeID_v10_6;
39
+
40
+typedef [v1_enum] enum _BMDIdleVideoOutputOperation_v10_6 {
41
+ bmdIdleVideoOutputDesktop_v10_6 = /* 'desk' */ 0x6465736B
42
+} BMDIdleVideoOutputOperation_v10_6;
43
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_1.idl
Added
162
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v7_1.idl */
29
+
30
+ interface IDeckLinkDisplayModeIterator_v7_1;
31
+ interface IDeckLinkDisplayMode_v7_1;
32
+ interface IDeckLinkVideoFrame_v7_1;
33
+ interface IDeckLinkVideoInputFrame_v7_1;
34
+ interface IDeckLinkAudioInputPacket_v7_1;
35
+
36
+ [object, uuid(B28131B6-59AC-4857-B5AC-CD75D5883E2F),
37
+ helpstring("IDeckLinkDisplayModeIterator_v7_1 enumerates over supported input/output display modes.")]
38
+ interface IDeckLinkDisplayModeIterator_v7_1 : IUnknown
39
+ {
40
+ HRESULT Next ([out] IDeckLinkDisplayMode_v7_1** deckLinkDisplayMode);
41
+ };
42
+
43
+
44
+ [object, uuid(AF0CD6D5-8376-435E-8433-54F9DD530AC3),
45
+ helpstring("IDeckLinkDisplayMode_v7_1 represents a display mode")]
46
+ interface IDeckLinkDisplayMode_v7_1 : IUnknown
47
+ {
48
+ HRESULT GetName ([out] BSTR* name);
49
+ BMDDisplayMode GetDisplayMode ();
50
+ long GetWidth ();
51
+ long GetHeight ();
52
+ HRESULT GetFrameRate ([out] BMDTimeValue *frameDuration, [out] BMDTimeScale *timeScale);
53
+ };
54
+
55
+ [object, uuid(EBD01AFA-E4B0-49C6-A01D-EDB9D1B55FD9),
56
+ helpstring("IDeckLinkVideoOutputCallback. Frame completion callback.")]
57
+ interface IDeckLinkVideoOutputCallback_v7_1 : IUnknown
58
+ {
59
+ HRESULT ScheduledFrameCompleted ([in] IDeckLinkVideoFrame_v7_1* completedFrame, [in] BMDOutputFrameCompletionResult result);
60
+ };
61
+
62
+ [object, uuid(7F94F328-5ED4-4E9F-9729-76A86BDC99CC),
63
+ helpstring("IDeckLinkInputCallback_v7_1. Frame arrival callback.")]
64
+ interface IDeckLinkInputCallback_v7_1 : IUnknown
65
+ {
66
+ HRESULT VideoInputFrameArrived ([in] IDeckLinkVideoInputFrame_v7_1* videoFrame, [in] IDeckLinkAudioInputPacket_v7_1* audioPacket);
67
+ };
68
+
69
+
70
+ [object, uuid(AE5B3E9B-4E1E-4535-B6E8-480FF52F6CE5), local,
71
+ helpstring("IDeckLinkOutput_v7_1. Created by QueryInterface from IDeckLink.")]
72
+ interface IDeckLinkOutput_v7_1 : IUnknown
73
+ {
74
+ HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
75
+ HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator_v7_1 **iterator);
76
+
77
+ // Video output
78
+ HRESULT EnableVideoOutput (BMDDisplayMode displayMode);
79
+ HRESULT DisableVideoOutput ();
80
+
81
+ HRESULT SetVideoOutputFrameMemoryAllocator ([in] IDeckLinkMemoryAllocator* theAllocator);
82
+ HRESULT CreateVideoFrame (int width, int height, int rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1** outFrame);
83
+ HRESULT CreateVideoFrameFromBuffer (void* buffer, int width, int height, int rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, IDeckLinkVideoFrame_v7_1** outFrame);
84
+
85
+ HRESULT DisplayVideoFrameSync (IDeckLinkVideoFrame_v7_1* theFrame);
86
+ HRESULT ScheduleVideoFrame (IDeckLinkVideoFrame_v7_1* theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale);
87
+ HRESULT SetScheduledFrameCompletionCallback ([in] IDeckLinkVideoOutputCallback_v7_1* theCallback);
88
+
89
+ // Audio output
90
+ HRESULT EnableAudioOutput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned int channelCount);
91
+ HRESULT DisableAudioOutput ();
92
+
93
+ HRESULT WriteAudioSamplesSync (void* buffer, unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
94
+
95
+ HRESULT BeginAudioPreroll ();
96
+ HRESULT EndAudioPreroll ();
97
+ HRESULT ScheduleAudioSamples (void* buffer, unsigned int sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
98
+
99
+ HRESULT GetBufferedAudioSampleFrameCount ( [out] unsigned int *bufferedSampleCount);
100
+ HRESULT FlushBufferedAudioSamples ();
101
+
102
+ HRESULT SetAudioCallback ( [in] IDeckLinkAudioOutputCallback* theCallback);
103
+
104
+ // Output control
105
+ HRESULT StartScheduledPlayback (BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed);
106
+ HRESULT StopScheduledPlayback (BMDTimeValue stopPlaybackAtTime, BMDTimeValue *actualStopTime, BMDTimeScale timeScale);
107
+ HRESULT GetHardwareReferenceClock (BMDTimeScale desiredTimeScale, BMDTimeValue *elapsedTimeSinceSchedulerBegan);
108
+ };
109
+
110
+ [object, uuid(2B54EDEF-5B32-429F-BA11-BB990596EACD),
111
+ helpstring("IDeckLinkInput_v7_1. Created by QueryInterface from IDeckLink.")]
112
+ interface IDeckLinkInput_v7_1 : IUnknown
113
+ {
114
+ HRESULT DoesSupportVideoMode (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
115
+ HRESULT GetDisplayModeIterator ([out] IDeckLinkDisplayModeIterator_v7_1 **iterator);
116
+
117
+ // Video input
118
+ HRESULT EnableVideoInput (BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags);
119
+ HRESULT DisableVideoInput ();
120
+
121
+ // Audio input
122
+ HRESULT EnableAudioInput (BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned int channelCount);
123
+ HRESULT DisableAudioInput ();
124
+ HRESULT ReadAudioSamples (void* buffer, unsigned int sampleFrameCount, [out] unsigned int *sampleFramesRead, [out] BMDTimeValue *audioPacketTime, BMDTimeScale timeScale);
125
+ HRESULT GetBufferedAudioSampleFrameCount ( [out] unsigned int *bufferedSampleCount);
126
+
127
+ // Input control
128
+ HRESULT StartStreams ();
129
+ HRESULT StopStreams ();
130
+ HRESULT PauseStreams ();
131
+ HRESULT SetCallback ([in] IDeckLinkInputCallback_v7_1* theCallback);
132
+ };
133
+
134
+ [object, uuid(333F3A10-8C2D-43CF-B79D-46560FEEA1CE), local,
135
+ helpstring("IDeckLinkVideoFrame_v7_1. Created by IDeckLinkVideoOutput::CreateVideoFrame.")]
136
+ interface IDeckLinkVideoFrame_v7_1 : IUnknown
137
+ {
138
+ long GetWidth ();
139
+ long GetHeight ();
140
+ long GetRowBytes ();
141
+ BMDPixelFormat GetPixelFormat ();
142
+ BMDFrameFlags GetFlags ();
143
+ HRESULT GetBytes (void* *buffer);
144
+ };
145
+
146
+ [object, uuid(C8B41D95-8848-40EE-9B37-6E3417FB114B), local,
147
+ helpstring("IDeckLinkVideoInputFrame_v7_1. Provided by the IDeckLinkVideoInput frame arrival callback.")]
148
+ interface IDeckLinkVideoInputFrame_v7_1 : IDeckLinkVideoFrame_v7_1
149
+ {
150
+ HRESULT GetFrameTime (BMDTimeValue *frameTime, BMDTimeValue *frameDuration, BMDTimeScale timeScale);
151
+ };
152
+
153
+ [object, uuid(C86DE4F6-A29F-42E3-AB3A-1363E29F0788), local,
154
+ helpstring("IDeckLinkAudioInputPacket_v7_1. Provided by the IDeckLinkInput callback.")]
155
+ interface IDeckLinkAudioInputPacket_v7_1 : IUnknown
156
+ {
157
+ long GetSampleCount ();
158
+ HRESULT GetBytes (void* *buffer);
159
+ HRESULT GetAudioPacketTime (BMDTimeValue *packetTime, BMDTimeScale timeScale);
160
+ };
161
+
162
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_3.idl
Added
159
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* Forward Declarations */
30
+
31
+interface IDeckLinkInputCallback_v7_3;
32
+interface IDeckLinkOutput_v7_3;
33
+interface IDeckLinkInput_v7_3;
34
+interface IDeckLinkVideoInputFrame_v7_3;
35
+
36
+/* End Forward Declarations */
37
+
38
+
39
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
40
+
41
+[
42
+ object,
43
+ uuid(FD6F311D-4D00-444B-9ED4-1F25B5730AD0),
44
+ helpstring("Frame arrival callback.")
45
+] interface IDeckLinkInputCallback_v7_3 : IUnknown
46
+{
47
+ HRESULT VideoInputFormatChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode_v7_6 *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
48
+ HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame_v7_3 *videoFrame, [in] IDeckLinkAudioInputPacket *audioPacket);
49
+};
50
+
51
+/* End Interface IDeckLinkInputCallback */
52
+
53
+
54
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
55
+
56
+[
57
+ object,
58
+ uuid(271C65E3-C323-4344-A30F-D908BCB20AA3),
59
+ local,
60
+ helpstring("Created by QueryInterface from IDeckLink.")
61
+] interface IDeckLinkOutput_v7_3 : IUnknown
62
+{
63
+ HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
64
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
65
+
66
+ HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
67
+
68
+ /* Video Output */
69
+
70
+ HRESULT EnableVideoOutput(BMDDisplayMode displayMode, BMDVideoOutputFlags flags);
71
+ HRESULT DisableVideoOutput(void);
72
+
73
+ HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
74
+ HRESULT CreateVideoFrame(int width, int height, int rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame_v7_6 **outFrame);
75
+ HRESULT CreateAncillaryData(BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
76
+
77
+ HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame_v7_6 *theFrame);
78
+ HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame_v7_6 *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale);
79
+ HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
80
+ HRESULT GetBufferedVideoFrameCount([out] unsigned int *bufferedFrameCount);
81
+
82
+ /* Audio Output */
83
+
84
+ HRESULT EnableAudioOutput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned int channelCount, BMDAudioOutputStreamType streamType);
85
+ HRESULT DisableAudioOutput(void);
86
+
87
+ HRESULT WriteAudioSamplesSync([in] void *buffer, unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
88
+
89
+ HRESULT BeginAudioPreroll(void);
90
+ HRESULT EndAudioPreroll(void);
91
+ HRESULT ScheduleAudioSamples([in] void *buffer, unsigned int sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
92
+
93
+ HRESULT GetBufferedAudioSampleFrameCount([out] unsigned int *bufferedSampleFrameCount);
94
+ HRESULT FlushBufferedAudioSamples(void);
95
+
96
+ HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
97
+
98
+ /* Output Control */
99
+
100
+ HRESULT StartScheduledPlayback(BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed);
101
+ HRESULT StopScheduledPlayback(BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, BMDTimeScale timeScale);
102
+ HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
103
+ HRESULT GetHardwareReferenceClock(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *elapsedTimeSinceSchedulerBegan);
104
+};
105
+
106
+/* End Interface IDeckLinkOutput */
107
+
108
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
109
+
110
+[
111
+ object,
112
+ uuid(4973F012-9925-458C-871C-18774CDBBECB),
113
+ helpstring("Created by QueryInterface from IDeckLink.")
114
+] interface IDeckLinkInput_v7_3 : IUnknown
115
+{
116
+ HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
117
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
118
+
119
+ HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
120
+
121
+ /* Video Input */
122
+
123
+ HRESULT EnableVideoInput(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags);
124
+ HRESULT DisableVideoInput(void);
125
+ HRESULT GetAvailableVideoFrameCount([out] unsigned int *availableFrameCount);
126
+
127
+ /* Audio Input */
128
+
129
+ HRESULT EnableAudioInput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned int channelCount);
130
+ HRESULT DisableAudioInput(void);
131
+ HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
132
+
133
+ /* Input Control */
134
+
135
+ HRESULT StartStreams(void);
136
+ HRESULT StopStreams(void);
137
+ HRESULT PauseStreams(void);
138
+ HRESULT FlushStreams(void);
139
+ HRESULT SetCallback([in] IDeckLinkInputCallback_v7_3 *theCallback);
140
+};
141
+
142
+/* End Interface IDeckLinkInput */
143
+
144
+
145
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
146
+
147
+[
148
+ object,
149
+ uuid(CF317790-2894-11DE-8C30-0800200C9A66),
150
+ local,
151
+ helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.")
152
+] interface IDeckLinkVideoInputFrame_v7_3 : IDeckLinkVideoFrame_v7_6
153
+{
154
+ HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration, BMDTimeScale timeScale);
155
+};
156
+
157
+/* End Interface IDeckLinkVideoInputFrame */
158
+
159
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_6.idl
Added
398
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2009 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* Enum BMDVideoConnection - Video connection types */
30
+
31
+typedef [v1_enum] enum _BMDVideoConnection_v7_6 {
32
+ bmdVideoConnectionSDI_v7_6 = /* 'sdi ' */ 0x73646920,
33
+ bmdVideoConnectionHDMI_v7_6 = /* 'hdmi' */ 0x68646D69,
34
+ bmdVideoConnectionOpticalSDI_v7_6 = /* 'opti' */ 0x6F707469,
35
+ bmdVideoConnectionComponent_v7_6 = /* 'cpnt' */ 0x63706E74,
36
+ bmdVideoConnectionComposite_v7_6 = /* 'cmst' */ 0x636D7374,
37
+ bmdVideoConnectionSVideo_v7_6 = /* 'svid' */ 0x73766964
38
+} BMDVideoConnection_v7_6;
39
+
40
+
41
+
42
+/* Forward Declarations */
43
+
44
+interface IDeckLinkDisplayModeIterator_v7_6;
45
+interface IDeckLinkDisplayMode_v7_6;
46
+interface IDeckLinkOutput_v7_6;
47
+interface IDeckLinkInput_v7_6;
48
+interface IDeckLinkTimecode_v7_6;
49
+interface IDeckLinkVideoFrame_v7_6;
50
+interface IDeckLinkMutableVideoFrame_v7_6;
51
+interface IDeckLinkVideoInputFrame_v7_6;
52
+interface IDeckLinkScreenPreviewCallback_v7_6;
53
+interface IDeckLinkGLScreenPreviewHelper_v7_6;
54
+interface IDeckLinkVideoConversion_v7_6;
55
+interface IDeckLinkConfiguration_v7_6;
56
+
57
+
58
+/* Interface IDeckLinkVideoOutputCallback - Frame completion callback. */
59
+
60
+[
61
+ object,
62
+ uuid(E763A626-4A3C-49D1-BF13-E7AD3692AE52),
63
+ helpstring("Frame completion callback.")
64
+] interface IDeckLinkVideoOutputCallback_v7_6 : IUnknown
65
+{
66
+ HRESULT ScheduledFrameCompleted([in] IDeckLinkVideoFrame_v7_6 *completedFrame, [in] BMDOutputFrameCompletionResult result);
67
+ HRESULT ScheduledPlaybackHasStopped(void);
68
+};
69
+
70
+
71
+/* Interface IDeckLinkInputCallback - Frame arrival callback. */
72
+
73
+[
74
+ object,
75
+ uuid(31D28EE7-88B6-4CB1-897A-CDBF79A26414),
76
+ helpstring("Frame arrival callback.")
77
+] interface IDeckLinkInputCallback_v7_6 : IUnknown
78
+{
79
+ HRESULT VideoInputFormatChanged([in] BMDVideoInputFormatChangedEvents notificationEvents, [in] IDeckLinkDisplayMode_v7_6 *newDisplayMode, [in] BMDDetectedVideoInputFormatFlags detectedSignalFlags);
80
+ HRESULT VideoInputFrameArrived([in] IDeckLinkVideoInputFrame_v7_6* videoFrame, [in] IDeckLinkAudioInputPacket* audioPacket);
81
+};
82
+
83
+
84
+/* Interface IDeckLinkDisplayModeIterator - enumerates over supported input/output display modes. */
85
+
86
+[
87
+ object,
88
+ uuid(455D741F-1779-4800-86F5-0B5D13D79751),
89
+ helpstring("enumerates over supported input/output display modes.")
90
+] interface IDeckLinkDisplayModeIterator_v7_6 : IUnknown
91
+{
92
+ HRESULT Next([out] IDeckLinkDisplayMode_v7_6 **deckLinkDisplayMode);
93
+};
94
+
95
+
96
+/* Interface IDeckLinkDisplayMode - represents a display mode */
97
+
98
+[
99
+ object,
100
+ uuid(87451E84-2B7E-439E-A629-4393EA4A8550),
101
+ helpstring("represents a display mode")
102
+] interface IDeckLinkDisplayMode_v7_6 : IUnknown
103
+{
104
+ HRESULT GetName([out] BSTR *name);
105
+ BMDDisplayMode GetDisplayMode(void);
106
+ long GetWidth(void);
107
+ long GetHeight(void);
108
+ HRESULT GetFrameRate([out] BMDTimeValue *frameDuration, [out] BMDTimeScale *timeScale);
109
+ BMDFieldDominance GetFieldDominance(void);
110
+};
111
+
112
+
113
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
114
+
115
+[
116
+ object,
117
+ uuid(29228142-EB8C-4141-A621-F74026450955),
118
+ local,
119
+ helpstring("Created by QueryInterface from IDeckLink.")
120
+] interface IDeckLinkOutput_v7_6 : IUnknown
121
+{
122
+ HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
123
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
124
+
125
+ HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback_v7_6 *previewCallback);
126
+
127
+ /* Video Output */
128
+
129
+ HRESULT EnableVideoOutput(BMDDisplayMode displayMode, BMDVideoOutputFlags flags);
130
+ HRESULT DisableVideoOutput(void);
131
+
132
+ HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
133
+ HRESULT CreateVideoFrame(int width, int height, int rowBytes, BMDPixelFormat pixelFormat, BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame_v7_6 **outFrame);
134
+ HRESULT CreateAncillaryData(BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
135
+
136
+ HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame_v7_6 *theFrame);
137
+ HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame_v7_6 *theFrame, BMDTimeValue displayTime, BMDTimeValue displayDuration, BMDTimeScale timeScale);
138
+ HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback_v7_6 *theCallback);
139
+ HRESULT GetBufferedVideoFrameCount([out] unsigned int *bufferedFrameCount);
140
+
141
+ /* Audio Output */
142
+
143
+ HRESULT EnableAudioOutput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned int channelCount, BMDAudioOutputStreamType streamType);
144
+ HRESULT DisableAudioOutput(void);
145
+
146
+ HRESULT WriteAudioSamplesSync([in] void *buffer, unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
147
+
148
+ HRESULT BeginAudioPreroll(void);
149
+ HRESULT EndAudioPreroll(void);
150
+ HRESULT ScheduleAudioSamples([in] void *buffer, unsigned int sampleFrameCount, BMDTimeValue streamTime, BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
151
+
152
+ HRESULT GetBufferedAudioSampleFrameCount([out] unsigned int *bufferedSampleFrameCount);
153
+ HRESULT FlushBufferedAudioSamples(void);
154
+
155
+ HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
156
+
157
+ /* Output Control */
158
+
159
+ HRESULT StartScheduledPlayback(BMDTimeValue playbackStartTime, BMDTimeScale timeScale, double playbackSpeed);
160
+ HRESULT StopScheduledPlayback(BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, BMDTimeScale timeScale);
161
+ HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
162
+ HRESULT GetScheduledStreamTime(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *streamTime, [out] double *playbackSpeed);
163
+
164
+ /* Hardware Timing */
165
+
166
+ HRESULT GetHardwareReferenceClock(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
167
+};
168
+
169
+
170
+/* Interface IDeckLinkInput - Created by QueryInterface from IDeckLink. */
171
+
172
+[
173
+ object,
174
+ uuid(300C135A-9F43-48E2-9906-6D7911D93CF1),
175
+ helpstring("Created by QueryInterface from IDeckLink.")
176
+] interface IDeckLinkInput_v7_6 : IUnknown
177
+{
178
+ HRESULT DoesSupportVideoMode(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, [out] BMDDisplayModeSupport *result);
179
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator_v7_6 **iterator);
180
+
181
+ HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback_v7_6 *previewCallback);
182
+
183
+ /* Video Input */
184
+
185
+ HRESULT EnableVideoInput(BMDDisplayMode displayMode, BMDPixelFormat pixelFormat, BMDVideoInputFlags flags);
186
+ HRESULT DisableVideoInput(void);
187
+ HRESULT GetAvailableVideoFrameCount([out] unsigned int *availableFrameCount);
188
+
189
+ /* Audio Input */
190
+
191
+ HRESULT EnableAudioInput(BMDAudioSampleRate sampleRate, BMDAudioSampleType sampleType, unsigned int channelCount);
192
+ HRESULT DisableAudioInput(void);
193
+ HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
194
+
195
+ /* Input Control */
196
+
197
+ HRESULT StartStreams(void);
198
+ HRESULT StopStreams(void);
199
+ HRESULT PauseStreams(void);
200
+ HRESULT FlushStreams(void);
201
+ HRESULT SetCallback([in] IDeckLinkInputCallback_v7_6 *theCallback);
202
+
203
+ /* Hardware Timing */
204
+
205
+ HRESULT GetHardwareReferenceClock(BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
206
+};
207
+
208
+
209
+/* Interface IDeckLinkTimecode_v7_6 - Used for video frame timecode representation. */
210
+
211
+[
212
+ object,
213
+ uuid(EFB9BCA6-A521-44F7-BD69-2332F24D9EE6),
214
+ helpstring("Used for video frame timecode representation.")
215
+] interface IDeckLinkTimecode_v7_6 : IUnknown
216
+{
217
+ BMDTimecodeBCD GetBCD(void);
218
+ HRESULT GetComponents([out] unsigned char *hours, [out] unsigned char *minutes, [out] unsigned char *seconds, [out] unsigned char *frames);
219
+ HRESULT GetString([out] BSTR *timecode);
220
+ BMDTimecodeFlags GetFlags(void);
221
+};
222
+
223
+
224
+/* Interface IDeckLinkVideoFrame - Interface to encapsulate a video frame; can be caller-implemented. */
225
+
226
+[
227
+ object,
228
+ uuid(A8D8238E-6B18-4196-99E1-5AF717B83D32),
229
+ local,
230
+ helpstring("Interface to encapsulate a video frame; can be caller-implemented.")
231
+] interface IDeckLinkVideoFrame_v7_6 : IUnknown
232
+{
233
+ long GetWidth(void);
234
+ long GetHeight(void);
235
+ long GetRowBytes(void);
236
+ BMDPixelFormat GetPixelFormat(void);
237
+ BMDFrameFlags GetFlags(void);
238
+ HRESULT GetBytes([out] void **buffer);
239
+
240
+ HRESULT GetTimecode(BMDTimecodeFormat format, [out] IDeckLinkTimecode_v7_6 **timecode);
241
+ HRESULT GetAncillaryData([out] IDeckLinkVideoFrameAncillary **ancillary);
242
+};
243
+
244
+
245
+/* Interface IDeckLinkMutableVideoFrame - Created by IDeckLinkOutput::CreateVideoFrame. */
246
+
247
+[
248
+ object,
249
+ uuid(46FCEE00-B4E6-43D0-91C0-023A7FCEB34F),
250
+ local,
251
+ helpstring("Created by IDeckLinkOutput::CreateVideoFrame.")
252
+] interface IDeckLinkMutableVideoFrame_v7_6 : IDeckLinkVideoFrame_v7_6
253
+{
254
+ HRESULT SetFlags(BMDFrameFlags newFlags);
255
+
256
+ HRESULT SetTimecode(BMDTimecodeFormat format, [in] IDeckLinkTimecode_v7_6 *timecode);
257
+ HRESULT SetTimecodeFromComponents(BMDTimecodeFormat format, unsigned char hours, unsigned char minutes, unsigned char seconds, unsigned char frames, BMDTimecodeFlags flags);
258
+ HRESULT SetAncillaryData([in] IDeckLinkVideoFrameAncillary *ancillary);
259
+};
260
+
261
+
262
+/* Interface IDeckLinkVideoInputFrame - Provided by the IDeckLinkVideoInput frame arrival callback. */
263
+
264
+[
265
+ object,
266
+ uuid(9A74FA41-AE9F-47AC-8CF4-01F42DD59965),
267
+ local,
268
+ helpstring("Provided by the IDeckLinkVideoInput frame arrival callback.")
269
+] interface IDeckLinkVideoInputFrame_v7_6 : IDeckLinkVideoFrame_v7_6
270
+{
271
+ HRESULT GetStreamTime([out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration, BMDTimeScale timeScale);
272
+ HRESULT GetHardwareReferenceTimestamp(BMDTimeScale timeScale, [out] BMDTimeValue *frameTime, [out] BMDTimeValue *frameDuration);
273
+};
274
+
275
+
276
+/* Interface IDeckLinkScreenPreviewCallback - Screen preview callback */
277
+
278
+[
279
+ object,
280
+ uuid(373F499D-4B4D-4518-AD22-6354E5A5825E),
281
+ local,
282
+ helpstring("Screen preview callback")
283
+] interface IDeckLinkScreenPreviewCallback_v7_6 : IUnknown
284
+{
285
+ HRESULT DrawFrame([in] IDeckLinkVideoFrame_v7_6 *theFrame);
286
+};
287
+
288
+
289
+/* Interface IDeckLinkGLScreenPreviewHelper - Created with CoCreateInstance(). */
290
+
291
+[
292
+ object,
293
+ uuid(BA575CD9-A15E-497B-B2C2-F9AFE7BE4EBA),
294
+ local,
295
+ helpstring("Created with CoCreateInstance().")
296
+] interface IDeckLinkGLScreenPreviewHelper_v7_6 : IUnknown
297
+{
298
+
299
+ /* Methods must be called with OpenGL context set */
300
+
301
+ HRESULT InitializeGL(void);
302
+ HRESULT PaintGL(void);
303
+ HRESULT SetFrame([in] IDeckLinkVideoFrame_v7_6 *theFrame);
304
+};
305
+
306
+
307
+/* Interface IDeckLinkVideoConversion - Created with CoCreateInstance(). */
308
+
309
+[
310
+ object,
311
+ uuid(3EB504C9-F97D-40FE-A158-D407D48CB53B),
312
+ local,
313
+ helpstring("Created with CoCreateInstance().")
314
+] interface IDeckLinkVideoConversion_v7_6 : IUnknown
315
+{
316
+ HRESULT ConvertFrame([in] IDeckLinkVideoFrame_v7_6* srcFrame, [in] IDeckLinkVideoFrame_v7_6* dstFrame);
317
+};
318
+
319
+/* Interface IDeckLinkConfiguration_v7_6 - Created by QueryInterface from IDeckLink. */
320
+
321
+[
322
+ object,
323
+ uuid(B8EAD569-B764-47F0-A73F-AE40DF6CBF10),
324
+ helpstring("Created by QueryInterface from IDeckLink.")
325
+] interface IDeckLinkConfiguration_v7_6 : IUnknown
326
+{
327
+ HRESULT GetConfigurationValidator([out] IDeckLinkConfiguration_v7_6 **configObject);
328
+ HRESULT WriteConfigurationToPreferences(void);
329
+
330
+ /* Video Output Configuration */
331
+
332
+ HRESULT SetVideoOutputFormat([in] BMDVideoConnection_v7_6 videoOutputConnection);
333
+ HRESULT IsVideoOutputActive([in] BMDVideoConnection_v7_6 videoOutputConnection, [out] BOOL *active);
334
+
335
+ HRESULT SetAnalogVideoOutputFlags([in] BMDAnalogVideoFlags analogVideoFlags);
336
+ HRESULT GetAnalogVideoOutputFlags([out] BMDAnalogVideoFlags *analogVideoFlags);
337
+
338
+ HRESULT EnableFieldFlickerRemovalWhenPaused([in] BOOL enable);
339
+ HRESULT IsEnabledFieldFlickerRemovalWhenPaused([out] BOOL *enabled);
340
+
341
+ HRESULT Set444And3GBpsVideoOutput([in] BOOL enable444VideoOutput, [in] BOOL enable3GbsOutput);
342
+ HRESULT Get444And3GBpsVideoOutput([out] BOOL *is444VideoOutputEnabled, [out] BOOL *threeGbsOutputEnabled);
343
+
344
+ HRESULT SetVideoOutputConversionMode([in] BMDVideoOutputConversionMode conversionMode);
345
+ HRESULT GetVideoOutputConversionMode([out] BMDVideoOutputConversionMode *conversionMode);
346
+
347
+ HRESULT Set_HD1080p24_to_HD1080i5994_Conversion([in] BOOL enable);
348
+ HRESULT Get_HD1080p24_to_HD1080i5994_Conversion([out] BOOL *enabled);
349
+
350
+ /* Video Input Configuration */
351
+
352
+ HRESULT SetVideoInputFormat([in] BMDVideoConnection_v7_6 videoInputFormat);
353
+ HRESULT GetVideoInputFormat([out] BMDVideoConnection_v7_6 *videoInputFormat);
354
+
355
+ HRESULT SetAnalogVideoInputFlags([in] BMDAnalogVideoFlags analogVideoFlags);
356
+ HRESULT GetAnalogVideoInputFlags([out] BMDAnalogVideoFlags *analogVideoFlags);
357
+
358
+ HRESULT SetVideoInputConversionMode([in] BMDVideoInputConversionMode conversionMode);
359
+ HRESULT GetVideoInputConversionMode([out] BMDVideoInputConversionMode *conversionMode);
360
+
361
+ HRESULT SetBlackVideoOutputDuringCapture([in] BOOL blackOutInCapture);
362
+ HRESULT GetBlackVideoOutputDuringCapture([out] BOOL *blackOutInCapture);
363
+
364
+ HRESULT Set32PulldownSequenceInitialTimecodeFrame([in] unsigned int aFrameTimecode);
365
+ HRESULT Get32PulldownSequenceInitialTimecodeFrame([out] unsigned int *aFrameTimecode);
366
+
367
+ HRESULT SetVancSourceLineMapping([in] unsigned int activeLine1VANCsource, [in] unsigned int activeLine2VANCsource, [in] unsigned int activeLine3VANCsource);
368
+ HRESULT GetVancSourceLineMapping([out] unsigned int *activeLine1VANCsource, [out] unsigned int *activeLine2VANCsource, [out] unsigned int *activeLine3VANCsource);
369
+
370
+ /* Audio Input Configuration */
371
+
372
+ HRESULT SetAudioInputFormat([in] BMDAudioConnection_v10_2 audioInputFormat);
373
+ HRESULT GetAudioInputFormat([out] BMDAudioConnection_v10_2 *audioInputFormat);
374
+};
375
+
376
+
377
+
378
+/* Coclasses */
379
+
380
+importlib("stdole2.tlb");
381
+
382
+[
383
+ uuid(D398CEE7-4434-4CA3-9BA6-5AE34556B905),
384
+ helpstring("CDeckLinkGLScreenPreviewHelper Class (DeckLink API v7.6)")
385
+] coclass CDeckLinkGLScreenPreviewHelper_v7_6
386
+{
387
+ [default] interface IDeckLinkGLScreenPreviewHelper_v7_6;
388
+};
389
+
390
+[
391
+ uuid(FFA84F77-73BE-4FB7-B03E-B5E44B9F759B),
392
+ helpstring("CDeckLinkVideoConversion Class (DeckLink API v7.6)")
393
+] coclass CDeckLinkVideoConversion_v7_6
394
+{
395
+ [default] interface IDeckLinkVideoConversion_v7_6;
396
+};
397
+
398
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v7_9.idl
Added
71
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2010 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v7_9.idl */
29
+
30
+/* Interface IDeckLinkDeckControl_v7_9 - Deck Control main interface */
31
+
32
+[
33
+ object,
34
+ uuid(A4D81043-0619-42B7-8ED6-602D29041DF7),
35
+ helpstring("Deck Control main interface")
36
+] interface IDeckLinkDeckControl_v7_9 : IUnknown
37
+{
38
+ HRESULT Open([in] BMDTimeScale timeScale, [in] BMDTimeValue timeValue, [in] BOOL timecodeIsDropFrame, [out] BMDDeckControlError *error);
39
+ HRESULT Close([in] BOOL standbyOn);
40
+ HRESULT GetCurrentState([out] BMDDeckControlMode *mode, [out] BMDDeckControlVTRControlState *vtrControlState, [out] BMDDeckControlStatusFlags *flags);
41
+ HRESULT SetStandby([in] BOOL standbyOn);
42
+ HRESULT Play([out] BMDDeckControlError *error);
43
+ HRESULT Stop([out] BMDDeckControlError *error);
44
+ HRESULT TogglePlayStop([out] BMDDeckControlError *error);
45
+ HRESULT Eject([out] BMDDeckControlError *error);
46
+ HRESULT GoToTimecode([in] BMDTimecodeBCD timecode, [out] BMDDeckControlError *error);
47
+ HRESULT FastForward([in] BOOL viewTape, [out] BMDDeckControlError *error);
48
+ HRESULT Rewind([in] BOOL viewTape, [out] BMDDeckControlError *error);
49
+ HRESULT StepForward([out] BMDDeckControlError *error);
50
+ HRESULT StepBack([out] BMDDeckControlError *error);
51
+ HRESULT Jog([in] double rate, [out] BMDDeckControlError *error);
52
+ HRESULT Shuttle([in] double rate, [out] BMDDeckControlError *error);
53
+ HRESULT GetTimecodeString([out] BSTR *currentTimeCode, [out] BMDDeckControlError *error);
54
+ HRESULT GetTimecode([out] IDeckLinkTimecode **currentTimecode, [out] BMDDeckControlError *error);
55
+ HRESULT GetTimecodeBCD([out] BMDTimecodeBCD *currentTimecode, [out] BMDDeckControlError *error);
56
+ HRESULT SetPreroll([in] unsigned int prerollSeconds);
57
+ HRESULT GetPreroll([out] unsigned int *prerollSeconds);
58
+ HRESULT SetExportOffset([in] int exportOffsetFields);
59
+ HRESULT GetExportOffset([out] int *exportOffsetFields);
60
+ HRESULT GetManualExportOffset([out] int *deckManualExportOffsetFields);
61
+ HRESULT SetCaptureOffset([in] int captureOffsetFields);
62
+ HRESULT GetCaptureOffset([out] int *captureOffsetFields);
63
+ HRESULT StartExport([in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [in] BMDDeckControlExportModeOpsFlags exportModeOps, [out] BMDDeckControlError *error);
64
+ HRESULT StartCapture([in] BOOL useVITC, [in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [out] BMDDeckControlError *error);
65
+ HRESULT GetDeviceID([out] unsigned short *deviceId, [out] BMDDeckControlError *error);
66
+ HRESULT Abort(void);
67
+ HRESULT CrashRecordStart([out] BMDDeckControlError *error);
68
+ HRESULT CrashRecordStop([out] BMDDeckControlError *error);
69
+ HRESULT SetCallback([in] IDeckLinkDeckControlStatusCallback *callback);
70
+};
71
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v8_0.idl
Added
64
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2011 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v8_0.idl */
29
+
30
+/* Interface IDeckLink_v8_0 - represents a DeckLink device */
31
+
32
+[
33
+ object,
34
+ uuid(62BFF75D-6569-4E55-8D4D-66AA03829ABC),
35
+ helpstring("represents a DeckLink device")
36
+] interface IDeckLink_v8_0 : IUnknown
37
+{
38
+ HRESULT GetModelName([out] BSTR *modelName);
39
+};
40
+
41
+/* Interface IDeckLinkIterator_v8_0 - enumerates installed DeckLink hardware */
42
+
43
+[
44
+ object,
45
+ uuid(74E936FC-CC28-4A67-81A0-1E94E52D4E69),
46
+ helpstring("enumerates installed DeckLink hardware")
47
+] interface IDeckLinkIterator_v8_0 : IUnknown
48
+{
49
+ HRESULT Next([out] IDeckLink_v8_0 **deckLinkInstance);
50
+};
51
+
52
+
53
+/* Coclasses */
54
+
55
+importlib("stdole2.tlb");
56
+
57
+[
58
+ uuid(D9EDA3B3-2887-41FA-B724-017CF1EB1D37),
59
+ helpstring("CDeckLinkIterator Class (DeckLink API v8.0)")
60
+] coclass CDeckLinkIterator_v8_0
61
+{
62
+ [default] interface IDeckLinkIterator_v8_0;
63
+};
64
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v8_1.idl
Added
103
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2011 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+/* DeckLinkAPI_v8_1.idl */
29
+
30
+/* Enum BMDDeckControlVTRControlState_v8_1 - VTR Control state */
31
+
32
+typedef [v1_enum] enum _BMDDeckControlVTRControlState_v8_1 {
33
+ bmdDeckControlNotInVTRControlMode_v8_1 = /* 'nvcm' */ 0x6E76636D,
34
+ bmdDeckControlVTRControlPlaying_v8_1 = /* 'vtrp' */ 0x76747270,
35
+ bmdDeckControlVTRControlRecording_v8_1 = /* 'vtrr' */ 0x76747272,
36
+ bmdDeckControlVTRControlStill_v8_1 = /* 'vtra' */ 0x76747261,
37
+ bmdDeckControlVTRControlSeeking_v8_1 = /* 'vtrs' */ 0x76747273,
38
+ bmdDeckControlVTRControlStopped_v8_1 = /* 'vtro' */ 0x7674726F
39
+} BMDDeckControlVTRControlState_v8_1;
40
+
41
+
42
+interface IDeckLinkDeckControlStatusCallback;
43
+interface IDeckLinkDeckControl;
44
+
45
+/* Interface IDeckLinkDeckControlStatusCallback_v8_1 - Deck control state change callback. */
46
+
47
+[
48
+ object,
49
+ uuid(E5F693C1-4283-4716-B18F-C1431521955B),
50
+ helpstring("Deck control state change callback.")
51
+] interface IDeckLinkDeckControlStatusCallback_v8_1 : IUnknown
52
+{
53
+ HRESULT TimecodeUpdate([in] BMDTimecodeBCD currentTimecode);
54
+ HRESULT VTRControlStateChanged([in] BMDDeckControlVTRControlState_v8_1 newState, [in] BMDDeckControlError error);
55
+ HRESULT DeckControlEventReceived([in] BMDDeckControlEvent event, [in] BMDDeckControlError error);
56
+ HRESULT DeckControlStatusChanged([in] BMDDeckControlStatusFlags flags, [in] unsigned int mask);
57
+};
58
+
59
+/* Interface IDeckLinkDeckControl - Deck Control main interface */
60
+
61
+[
62
+ object,
63
+ uuid(522A9E39-0F3C-4742-94EE-D80DE335DA1D),
64
+ helpstring("Deck Control main interface")
65
+] interface IDeckLinkDeckControl_v8_1 : IUnknown
66
+{
67
+ HRESULT Open([in] BMDTimeScale timeScale, [in] BMDTimeValue timeValue, [in] BOOL timecodeIsDropFrame, [out] BMDDeckControlError *error);
68
+ HRESULT Close([in] BOOL standbyOn);
69
+ HRESULT GetCurrentState([out] BMDDeckControlMode *mode, [out] BMDDeckControlVTRControlState_v8_1 *vtrControlState, [out] BMDDeckControlStatusFlags *flags);
70
+ HRESULT SetStandby([in] BOOL standbyOn);
71
+ HRESULT SendCommand([in] unsigned char *inBuffer, [in] unsigned int inBufferSize, [out] unsigned char *outBuffer, [out] unsigned int *outDataSize, [in] unsigned int outBufferSize, [out] BMDDeckControlError *error);
72
+ HRESULT Play([out] BMDDeckControlError *error);
73
+ HRESULT Stop([out] BMDDeckControlError *error);
74
+ HRESULT TogglePlayStop([out] BMDDeckControlError *error);
75
+ HRESULT Eject([out] BMDDeckControlError *error);
76
+ HRESULT GoToTimecode([in] BMDTimecodeBCD timecode, [out] BMDDeckControlError *error);
77
+ HRESULT FastForward([in] BOOL viewTape, [out] BMDDeckControlError *error);
78
+ HRESULT Rewind([in] BOOL viewTape, [out] BMDDeckControlError *error);
79
+ HRESULT StepForward([out] BMDDeckControlError *error);
80
+ HRESULT StepBack([out] BMDDeckControlError *error);
81
+ HRESULT Jog([in] double rate, [out] BMDDeckControlError *error);
82
+ HRESULT Shuttle([in] double rate, [out] BMDDeckControlError *error);
83
+ HRESULT GetTimecodeString([out] BSTR *currentTimeCode, [out] BMDDeckControlError *error);
84
+ HRESULT GetTimecode([out] IDeckLinkTimecode **currentTimecode, [out] BMDDeckControlError *error);
85
+ HRESULT GetTimecodeBCD([out] BMDTimecodeBCD *currentTimecode, [out] BMDDeckControlError *error);
86
+ HRESULT SetPreroll([in] unsigned int prerollSeconds);
87
+ HRESULT GetPreroll([out] unsigned int *prerollSeconds);
88
+ HRESULT SetExportOffset([in] int exportOffsetFields);
89
+ HRESULT GetExportOffset([out] int *exportOffsetFields);
90
+ HRESULT GetManualExportOffset([out] int *deckManualExportOffsetFields);
91
+ HRESULT SetCaptureOffset([in] int captureOffsetFields);
92
+ HRESULT GetCaptureOffset([out] int *captureOffsetFields);
93
+ HRESULT StartExport([in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [in] BMDDeckControlExportModeOpsFlags exportModeOps, [out] BMDDeckControlError *error);
94
+ HRESULT StartCapture([in] BOOL useVITC, [in] BMDTimecodeBCD inTimecode, [in] BMDTimecodeBCD outTimecode, [out] BMDDeckControlError *error);
95
+ HRESULT GetDeviceID([out] unsigned short *deviceId, [out] BMDDeckControlError *error);
96
+ HRESULT Abort(void);
97
+ HRESULT CrashRecordStart([out] BMDDeckControlError *error);
98
+ HRESULT CrashRecordStop([out] BMDDeckControlError *error);
99
+ HRESULT SetCallback([in] IDeckLinkDeckControlStatusCallback_v8_1 *callback);
100
+};
101
+
102
+
103
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v9_2.idl
Added
70
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2012 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v9_2.idl */
30
+
31
+
32
+/* Interface IDeckLinkInput_v9_2 - Created by QueryInterface from IDeckLink. */
33
+
34
+[
35
+ object,
36
+ uuid(6D40EF78-28B9-4E21-990D-95BB7750A04F),
37
+ helpstring("Created by QueryInterface from IDeckLink.")
38
+] interface IDeckLinkInput_v9_2 : IUnknown
39
+{
40
+ HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
41
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
42
+
43
+ HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
44
+
45
+ /* Video Input */
46
+
47
+ HRESULT EnableVideoInput([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoInputFlags flags);
48
+ HRESULT DisableVideoInput(void);
49
+ HRESULT GetAvailableVideoFrameCount([out] unsigned int *availableFrameCount);
50
+
51
+ /* Audio Input */
52
+
53
+ HRESULT EnableAudioInput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount);
54
+ HRESULT DisableAudioInput(void);
55
+ HRESULT GetAvailableAudioSampleFrameCount([out] unsigned int *availableSampleFrameCount);
56
+
57
+ /* Input Control */
58
+
59
+ HRESULT StartStreams(void);
60
+ HRESULT StopStreams(void);
61
+ HRESULT PauseStreams(void);
62
+ HRESULT FlushStreams(void);
63
+ HRESULT SetCallback([in] IDeckLinkInputCallback *theCallback);
64
+
65
+ /* Hardware Timing */
66
+
67
+ HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
68
+};
69
+
70
obs-studio-0.16.4.tar.xz/plugins/decklink/win/decklink-sdk/DeckLinkAPI_v9_9.idl
Added
89
1
2
+/* -LICENSE-START-
3
+** Copyright (c) 2012 Blackmagic Design
4
+**
5
+** Permission is hereby granted, free of charge, to any person or organization
6
+** obtaining a copy of the software and accompanying documentation covered by
7
+** this license (the "Software") to use, reproduce, display, distribute,
8
+** execute, and transmit the Software, and to prepare derivative works of the
9
+** Software, and to permit third-parties to whom the Software is furnished to
10
+** do so, all subject to the following:
11
+**
12
+** The copyright notices in the Software and this entire statement, including
13
+** the above license grant, this restriction and the following disclaimer,
14
+** must be included in all copies of the Software, in whole or in part, and
15
+** all derivative works of the Software, unless such copies or derivative
16
+** works are solely in the form of machine-executable object code generated by
17
+** a source language processor.
18
+**
19
+** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+** FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22
+** SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23
+** FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24
+** ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+** DEALINGS IN THE SOFTWARE.
26
+** -LICENSE-END-
27
+*/
28
+
29
+/* DeckLinkAPI_v9_9.idl */
30
+
31
+
32
+/* Interface IDeckLinkOutput - Created by QueryInterface from IDeckLink. */
33
+
34
+[
35
+ object,
36
+ uuid(A3EF0963-0862-44ED-92A9-EE89ABF431C7),
37
+ local,
38
+ helpstring("Created by QueryInterface from IDeckLink.")
39
+] interface IDeckLinkOutput_v9_9 : IUnknown
40
+{
41
+ HRESULT DoesSupportVideoMode([in] BMDDisplayMode displayMode, [in] BMDPixelFormat pixelFormat, [in] BMDVideoOutputFlags flags, [out] BMDDisplayModeSupport *result, [out] IDeckLinkDisplayMode **resultDisplayMode);
42
+ HRESULT GetDisplayModeIterator([out] IDeckLinkDisplayModeIterator **iterator);
43
+
44
+ HRESULT SetScreenPreviewCallback([in] IDeckLinkScreenPreviewCallback *previewCallback);
45
+
46
+ /* Video Output */
47
+
48
+ HRESULT EnableVideoOutput([in] BMDDisplayMode displayMode, [in] BMDVideoOutputFlags flags);
49
+ HRESULT DisableVideoOutput(void);
50
+
51
+ HRESULT SetVideoOutputFrameMemoryAllocator([in] IDeckLinkMemoryAllocator *theAllocator);
52
+ HRESULT CreateVideoFrame([in] int width, [in] int height, [in] int rowBytes, [in] BMDPixelFormat pixelFormat, [in] BMDFrameFlags flags, [out] IDeckLinkMutableVideoFrame **outFrame);
53
+ HRESULT CreateAncillaryData([in] BMDPixelFormat pixelFormat, [out] IDeckLinkVideoFrameAncillary **outBuffer);
54
+
55
+ HRESULT DisplayVideoFrameSync([in] IDeckLinkVideoFrame *theFrame);
56
+ HRESULT ScheduleVideoFrame([in] IDeckLinkVideoFrame *theFrame, [in] BMDTimeValue displayTime, [in] BMDTimeValue displayDuration, [in] BMDTimeScale timeScale);
57
+ HRESULT SetScheduledFrameCompletionCallback([in] IDeckLinkVideoOutputCallback *theCallback);
58
+ HRESULT GetBufferedVideoFrameCount([out] unsigned int *bufferedFrameCount);
59
+
60
+ /* Audio Output */
61
+
62
+ HRESULT EnableAudioOutput([in] BMDAudioSampleRate sampleRate, [in] BMDAudioSampleType sampleType, [in] unsigned int channelCount, [in] BMDAudioOutputStreamType streamType);
63
+ HRESULT DisableAudioOutput(void);
64
+
65
+ HRESULT WriteAudioSamplesSync([in] void *buffer, [in] unsigned int sampleFrameCount, [out] unsigned int *sampleFramesWritten);
66
+
67
+ HRESULT BeginAudioPreroll(void);
68
+ HRESULT EndAudioPreroll(void);
69
+ HRESULT ScheduleAudioSamples([in] void *buffer, [in] unsigned int sampleFrameCount, [in] BMDTimeValue streamTime, [in] BMDTimeScale timeScale, [out] unsigned int *sampleFramesWritten);
70
+
71
+ HRESULT GetBufferedAudioSampleFrameCount([out] unsigned int *bufferedSampleFrameCount);
72
+ HRESULT FlushBufferedAudioSamples(void);
73
+
74
+ HRESULT SetAudioCallback([in] IDeckLinkAudioOutputCallback *theCallback);
75
+
76
+ /* Output Control */
77
+
78
+ HRESULT StartScheduledPlayback([in] BMDTimeValue playbackStartTime, [in] BMDTimeScale timeScale, [in] double playbackSpeed);
79
+ HRESULT StopScheduledPlayback([in] BMDTimeValue stopPlaybackAtTime, [out] BMDTimeValue *actualStopTime, [in] BMDTimeScale timeScale);
80
+ HRESULT IsScheduledPlaybackRunning([out] BOOL *active);
81
+ HRESULT GetScheduledStreamTime([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *streamTime, [out] double *playbackSpeed);
82
+ HRESULT GetReferenceStatus([out] BMDReferenceStatus *referenceStatus);
83
+
84
+ /* Hardware Timing */
85
+
86
+ HRESULT GetHardwareReferenceClock([in] BMDTimeScale desiredTimeScale, [out] BMDTimeValue *hardwareTime, [out] BMDTimeValue *timeInFrame, [out] BMDTimeValue *ticksPerFrame);
87
+};
88
+
89
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/HiddenParameters.md -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/#Resources/HiddenParameters.md
Changed
153
1
2
-AMD hides certain parameters from us, but i think some of them should be accessible. Might need some in depth IDA work first.
3
+For an unknown reason, there are hidden parameters in the Runtime that can be set.
4
5
-# Sorted Discoveries
6
-
7
-## Encoder Types
8
-* AMFVideoEncoderVCE_AVC
9
-* AMFVideoEncoderVCE_SVC
10
-* AMFVideoEncoderHW_AVC
11
-* AMFVideoEncoderHW_HEVC (AMFEncoderHEVC Component)
12
-
13
-## Parameters
14
-
15
-### Capabilities
16
-* MaxNumRefFrames
17
-* EncoderMaxInstances
18
-* MaxNumOfTemporalLayers
19
-
20
-### Encoder
21
-* Tier
22
-* ProfileLevel
23
+## AVC Properties
24
+### Static
25
+* FrameSize
26
+* FrameRate
27
+* ExtraData (Read-Only)
28
+* Usage
29
+* Profile<br/>Two new profiles are in the runtime, Constrained Base and Constrained High.
30
+* Profile Level
31
* MaxOfLTRFrames
32
+* ScanType
33
+* QualityPreset
34
+
35
+### Dynamic
36
+* RateControlMethod
37
* TargetBitrate
38
* PeakBitrate
39
-* RateControlMethod
40
-* QP_I
41
-* QP_P
42
+* RateControlSkipFrameEnable
43
+* MinQP
44
+* MaxQP
45
+* QPI
46
+* QPP
47
+* QPB
48
* VBVBufferSize
49
-* InitialVBVBufferFullness
50
+* VBVBufferFullness
51
+* EnforceHRD
52
* MaxAUSize
53
+* FillerDataEnable
54
+* BPicturesDeltaQP
55
+* ReferenceBPicturesDeltaQP
56
* HeaderInsertionSpacing
57
* IDRPeriod
58
* DeBlockingFilter
59
+* IntraRefreshMBsNumberPerSlot
60
* SlicesPerFrame
61
* BPicturesPattern
62
* BReferenceEnable
63
-* ScanType
64
* HalfPixel
65
* QuarterPixel
66
-* NumOfTemporalLayers
67
-* **MinQP_I**
68
-* **MaxQP_I**
69
-* **MinQP_P**
70
-* **MaxQP_P**
71
-* **QPCBOFFSET**
72
-* **QPCROFFSET**
73
-* **GOPType**
74
-* **GOPPerIDR**
75
-* **GOPSize**
76
-* **GOPSizeMin**
77
-* **GOPSizeMax**
78
+
79
+### Unknown / New
80
+
81
+* **QualityEnhancementMode**<br/>So far always 0.
82
+* **MaxNumRefFrames**<br/>Shouldn't this be a Capability instead? Could perhaps be used to control B-Pictures more.
83
+* **MaxMBPerSec**<br/>Unknown value.
84
+* **InstanceID**
85
+* **EnableVBAQ**<br/>Unknown meaning.
86
+* **RateControlPreanalysisEnable**<br/>Is this Two-Pass encoding?
87
+* **GOPSize**<br/>Technically ignored, but still there in code.
88
* **AspectRatio**
89
* **NominalRange**
90
-* **IntraRefreshMode**
91
+* **IntraRefreshNumOfStripes**<br/>New, was not here before.
92
+* **SliceMode**<br/>New, was not here before.
93
+* **MaxSliceSize**<br/>New, was not here before.
94
* **LowLatencyInternal**
95
* **CommonLowLatencyInternal**
96
-* **EnableGOPAlignment**
97
* **SliceControlMode**
98
* **SliceControlSize**
99
-* **CABACEnable**
100
+* **CABACEnable**<br/>Not yet publicly available, but 16.10.3 always uses it anyway.
101
* **UniqueInstance**
102
+* **EncoderMaxInstances**
103
* **MultiInstanceMode**
104
* **MultiInstanceCurrentQueue**
105
+* **WaitForTask**
106
107
-### Per Submission
108
-* EndOfSequence = AMF_VIDEO_ENCODER_END_OF_SEQUENCE
109
-* EndOfStream = AMF_VIDEO_ENCODER_END_OF_STREAM
110
-* ForcePictureType = AMF_VIDEO_ENCODER_FORCE_PICTURE_TYPE
111
-* InsertAUD = AMF_VIDEO_ENCODER_INSERT_AUD
112
-* InsertSPS = AMF_VIDEO_ENCODER_INSERT_SPS
113
-* InsertPPS = AMF_VIDEO_ENCODER_INSERT_PPS
114
-* MarkCurrentWithLTRIndex = AMF_VIDEO_ENCODER_MARK_CURRENT_WITH_LTR_INDEX
115
-* ForceLTRReferenceBitfield = AMF_VIDEO_ENCODER_FORCE_LTR_REFERENCE_BITFIELD
116
-* **IntraRefreshFrameNum**
117
-* **TemporalLayerSelect** (Per Frame?)
118
-
119
-### Per Output
120
-
121
-### Unknown
122
-
123
-## Values
124
-
125
-### Constants found
126
-* AHEVC_PARAMETER_NAME__TEMPORAL_LAYER_SELECT
127
-* AHEVC_PARAMETER_NAME__NUM_TEMPORAL_LAYERS
128
-* AHEVC_PARAMETER_NAME__MAX_NUM_TEMPORAL_LAYE
129
-* AHEVC_PARAMETER_NAME__TIER
130
-* and some more.
131
-
132
-### Other Strings in the same list:
133
-* GOP_ALIGNED
134
-* IDR_ALIGNED
135
-* Cabac
136
-* Calv
137
-* Undefined
138
-* XVBA
139
-* AHEVCEncode
140
-* AHEHVCApplySpeedQualityPreset is bypassed, because it is not implemented
141
-
142
-### Profile Levels
143
-Libraries support as high as 6.2, which is most likely for HEVC. Full List:
144
-1.0 2.0 2.1 3.0 3.1 4.0 4.1 5.0 5.1 5.2 6.0 6.1 6.2
145
-
146
-# Other Discoveries
147
-
148
-## SubmitInput, QueryOutput
149
-There are references to deque, which is something in std::queue. Or BufferQueue.
150
151
-## Typos
152
-* CheckRes**oul**tion
153
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/Installer.iss -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/#Resources/Installer.iss
Changed
19
1
2
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3
4
#define MyAppName "AMD AMF Plugin for OBS Studio"
5
-#define MyAppVersion "1.3.0"
6
+#define MyAppVersion "1.4.1.0"
7
#define MyAppPublisher "Xaymars Technology Workshop"
8
#define MyAppURL "http://www.xaymar.com/portfolio/plugin-amd-vce-plugin-for-obs-studio/"
9
10
11
DefaultDirName={code:GetDirName}
12
DefaultGroupName={#MyAppName}
13
AllowNoIcons=yes
14
-LicenseFile=.\InstallerLicense.txt
15
+LicenseFile=..\LICENSE
16
OutputDir=.\Output
17
OutputBaseFilename=OBS-AMD-AMF-Plugin-Installer
18
Compression=lzma
19
obs-studio-0.16.2.tar.xz/plugins/enc-amf/#Resources/PatchNotes.txt -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/#Resources/PatchNotes.txt
Changed
178
1
2
-# 1.3.0 - The AMF SDK Path
3
+# The Oversight Fix
4
5
-It has been a long time since we've seen a version without any attachments to the number, hasn't it? But now is finally the time! We've come a long way since 1.1.2, going through two rewrites, one to make it easier for me and one to update to a new SDK - and it was worth it. Now we have arrived at a plugin for OBS Studio that manages solid 4K at 60 fps while still being light on the CPU side.
6
+Sometimes your changes seem fine and then users happen. Have you ever had users happen? They break things in ways that you didn't think was possible before! It's insane!
7
8
-### Notes
9
+This update aims to fix some of the reported issues in addition to making the user interface even simpler to use.
10
11
-Before installing this Version, please uninstall any previous versions. If you used the installer, it is as simple as using the Uninstaller entry it created. If you extracted it, you will need to manually remove the extracted files.
12
+## Notes
13
14
-### Changelog
15
+Due to the nature of changes in this update, your previous settings may end up lost or incorrect. Make sure to revalidate them before attempting to record or stream.
16
17
-*1.3.0pre1*
18
+## Changelog
19
20
-* Changed: Loading of required libraries was changed to match AMF documentation.
21
-* Changed: Shared Encoder is now using new Library linking class and was rewritten from the ground up.
22
-* Changed: Advanced Encoder is temporarily unavailable.
23
-
24
-*1.3.0pre2*
25
-
26
-* Added: In depth AMF tracing to the OBS log files, allowing me to spot bugs much faster than before.
27
-
28
-*1.3.0pre3*
29
-
30
-* Added: Preset selection (Simple Interface).
31
-* Added: Profile Level selection (Simple Interface).
32
-* Added: Further capability logging to startup.
33
-* Fixed: SetRateControlSkipFrameEnabled (Option: Frame Skipping) will no longer override the Rate Control Method.
34
-* Fixed: Fixes for the threading model, higher framerates/resolutions should now be possible.
35
-* Fixed: Advanced Interface is available again.
36
-
37
-*1.3.0pre5*
38
-
39
-* Skipped pre4 due to major issues.
40
-* Added: Checkbox to enable in depth tracing, to be used when reporting errors and crashes.
41
-* Changed: Default AMF Trace level is now ERROR instead of TEST.
42
-* Changed: Profile Level now goes to 6.2 if a GPU ever supports it (matches AMF values).
43
-* Changed: Simple Interface will calculate the best Buffer Size for your stream based on your settings.
44
-* Changed: Simple Interface will automatically set B-Pictures Pattern to 0 for best Quality.
45
-* Updated: Languages en-US, vi-VN and es-ES have been updated.
46
-* Fixed: Max LTR Frames slider only goes up to 2.
47
-* Fixed: Log Spam due to getting stuck on AMF_REPEAT or AMF_INPUT_FULL.
48
-* Fixed: Crash in SetProfile and GetProfile internal functions.
49
-* Fixed: Crash when clicking Update Values from AMF.
50
-* Fixed: Crash when clicking Apply in Advanced Interface.
51
-* Fixed: Constant QP will now apply the correct values.
52
-
53
-*1.3.0pre6*
54
-
55
-* Added: B-Picture settings for Simple Interface (only shown if supported).
56
-* Added: De-Blocking Filter setting for Simple Interface.
57
-* Added: Enforce HRD Compatibility setting for Simple Interface.
58
-* Changed: Language files have been massively simplified.
59
-* Changed: Timer Resolution is now half the expected frametime (1000 / framerate / 2) to reduce CPU usage and Power draw.
60
-* Updated: Languages en-US, vi-VN, ru-RU and es-ES.
61
-* Updated: Presets in Simpler Interface will now also set up advanced properties (if supported).
62
-* Fixed: Log messages from encoder will not come from an impossible source/class.
63
-* Fixed: 32-Bit now shows the correct Version number.
64
-
65
-*1.3.0pre7*
66
-
67
-* Fixed: Incorrect Packet order in Streams and Recordings.
68
-* Fixed: Crushed Colors in Streams and Recordings by forcing a specific set of color settings.
69
-* Fixed: High CPU usage due to increasing timer resolution too early.
70
-* Fixed: Slowness due to repeated Library loading, caused by lost references.
71
-* Fixed: Advanced Interface now applies properties in the same order as the Simple Interface.
72
-* Fixed: Crash in Simple Interface on Cards that don't support B-Pictures.
73
-* Updated: Languages en-US (American English), de-DE (German), Vi-VN (Vietnamese).
74
-
75
-*1.3.0pre8*
76
-
77
-* Fixed: Fixed some values not being applied in 32-Bit.
78
-* Fixed: "Enforce streaming service encoder settings" is now properly used, thanks to Jim.
79
-* Fixed: Simple Interface will now correctly update when a setting is modified.
80
-* Fixed: Decode and Presentation Timestamps are now correct, thanks to Jim.
81
-* Changed: Reduced log output length for readability.
82
-* Changed: Threads are now forcefully terminating if they are stuck instead of freezing OBS.
83
-* Added: Fail-Safe so that Stop Streaming/Recording still works even when GetOutput fails.
84
-* Added: Experimental capability logging for future HEVC implementation.
85
-
86
-*1.3.0rc1*
87
-
88
-* Updated: Languages en-US (American English), vi-VN (Vietnamese), de-DE (German).
89
-* Changed: Internally using 64-Bit Integers instead of Doubles to improve timestamp precision.
90
-* Fixed: Emergency Quit will now use a timestamp in the future so that OBS exits properly.
91
-* Fixed: Audio/Video desynchronization due to modifying presentation instead of decode timestamp.
92
-* Added: Options for CABAC and GOP Size, thanks to a bit of RE-work.
93
-
94
-*1.3.0rc2*
95
-
96
-* Updated: Languages vi-VN (Vietnamese), es-ES (Spanish).
97
-* Changed: Advanced Interface applies Parameters slightly differently now.
98
-* Added: 'Default' for Enforce HRD Compatibility, Deblocking Filter and CABAC.
99
-
100
-*1.3.0rc3*
101
-
102
-* Changed: Shared Encoder now initializes DirectX and OpenCL devices internally.
103
-* Changed: Always force NV12 color format for now, since other color formats are too slow.
104
-* Changed: Encoder will now drop frames instead of closing if the input queue grows too large.
105
-* Updated: Simple Interface Presets for Recording and Streaming.
106
-* Updated: Languages en-US (American English).
107
-* Fixed: Plugin should no longer crash on shut down due to requesting to join a terminated thread.
108
-* Fixed: Memory Leak when stopping streaming and/or recording.
109
-* Fixed: 'Enforce Streaming Service Settings' no longer applies permanently.
110
-
111
-*1.3.0rc4*
112
-
113
-* Changed: Now using OpenCL to copy the frame from RAM to VRAM to speed up submission.
114
-* Changed: Increased queue delta needed to reduce log spam.
115
-* Changed: Threads will internally wake up each other if a specific event happened.
116
-* Updated: Presets in Simple Interface will always attempt to use Quality encoding.
117
-
118
-*1.3.0rc4hf1*
119
-
120
-* Changed: Minimum requirement for DirectX11 backend is now Windows 8.
121
-
122
-*1.3.0rc5*
123
-
124
-* Fixed: Localization should now fall back to en-US instead of showing untranslated strings.
125
-* Fixed: Debug Tracing code in Advanced interface now matches Simple interface.
126
-* Fixed: Bitrate shown in FLV files should now match Target Bitrate.
127
-* Changed: Internally now using a Single-Threaded approach.
128
-* Changed: Some parameters have been moved to the expert category in the Simple interface.
129
-* Changed: Presentation and Decode Timestamp are now the same again (fixes ffmpeg muxing issue).
130
-* Updated: Languages en-US (American English), de-De (German) and es-ES (Spanish).
131
-* Added: Ability to select Backend (Memory and Compute Type).
132
-
133
-*1.3.0rc6*
134
-
135
-* Added: Ability to override Surface Format.
136
-* Changed: Presentation Timestamps are now properly calculated again to be standard compliant.
137
-
138
-*1.3.0*
139
-
140
-* Added: 'High Quality', 'Indistinguishable' and 'Lossless' preset to Simple interface.
141
-* Removed: DirectCompute Compute Type since it was a misunderstanding on my part.
142
-* Changed: DirectX 9 is now Windows XP or greater only, DirectX 11 is Windows 8 or greater only.
143
-* Changed: Internal Log logic to reduce disk-related encoding slowdown.
144
-* Changed: 'Twitch' Preset in Simple interface now uses 'High' Profile.
145
-* Changed: Translations have been updated from CrowdIn.
146
-* Fixed: Memory Type 'Host' should now work properly.
147
-
148
-*1.3.0.1*
149
-
150
-* Removed: Translation string for Profiles (untranslateable).
151
-* Changed: Some internal changes to match remaining code.
152
-
153
-*1.3.0.2*
154
-
155
-* Changed: Internally restructured memory layout for fast access on low cache CPUs.
156
-* Changed: Added additional error checking code that should catch all errors instead of crashing OBS.
157
-
158
-*1.3.0.3*
159
-
160
-* Changed: Translations have been updated from CrowdIn.
161
-
162
-*1.3.1.0*
163
-
164
-* Fixed: Simple Interface will now permanently apply Presets.
165
-* Fixed: 'Indistinguishable' had Maximum QP at 21.
166
-* Changed: 'Recording' preset enables 'Frame Skipping' by default.
167
-* Changed: 'High Quality' Preset now uses CQP 16/19/21.
168
-* Changed: 'Indistinguishable' Preset now uses CQP 11/14/16.
169
+* Fixed: Crash with default settings being used.
170
+* Fixed: Properties should now show the correct tooltip when hovered over.
171
+* Fixed: Frame Rate should now be applied properly again.
172
+* Fixed: Compatibility issues with Windows 7 and older.
173
+* Changed: Default value for LTR Frames is now 0 for better compatibility.
174
+* Changed: Profile is now a Basic property.
175
+* Changed: Profile Level is now an Expert property to avoid user errors.
176
+* Changed: Min/Max QP is now considered an Advanced property to avoid user errors.
177
\ No newline at end of file
178
obs-studio-0.16.2.tar.xz/plugins/enc-amf/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/CMakeLists.txt
Changed
33
1
2
"enc-amf/Include/amd-amf.h"
3
"enc-amf/Include/amd-amf-vce.h"
4
"enc-amf/Include/amd-amf-vce-capabilities.h"
5
+ "enc-amf/Include/api-base.h"
6
+ "enc-amf/Include/api-d3d9.h"
7
+ "enc-amf/Include/api-d3d11.h"
8
"enc-amf/Include/enc-h264.h"
9
- "enc-amf/Include/enc-h264-simple.h"
10
"enc-amf/Include/plugin.h"
11
)
12
13
14
"enc-amf/Source/amd-amf.cpp"
15
"enc-amf/Source/amd-amf-vce.cpp"
16
"enc-amf/Source/amd-amf-vce-capabilities.cpp"
17
+ "enc-amf/Source/api-base.cpp"
18
+ "enc-amf/Source/api-d3d9.cpp"
19
+ "enc-amf/Source/api-d3d11.cpp"
20
"enc-amf/Source/enc-h264.cpp"
21
- "enc-amf/Source/enc-h264-simple.cpp"
22
"enc-amf/Source/plugin.cpp"
23
)
24
25
26
)
27
target_link_libraries(enc-amf
28
libobs
29
+ version
30
winmm
31
)
32
33
obs-studio-0.16.4.tar.xz/plugins/enc-amf/CONTRIBUTING.md
Added
93
1
2
+# Reporting Issues
3
+
4
+Before you report an issue, please read the [Troubleshooting Guide](https://github.com/Xaymar/obs-studio_amf-encoder-plugin/wiki/Troubleshooting-Guide).
5
+It contains a step-by-step guide on how to solve your issue and even includes a FAQ for you to read through.
6
+
7
+# Git and the Project
8
+
9
+## Committing Changes
10
+
11
+Read [this wiki page for information](https://github.com/Xaymar/obs-studio_amf-encoder-plugin/wiki/Contributing) and please follow it. Rebasing a bunch of pushed commits is terrible for anyone involved.
12
+
13
+## Pull Requests
14
+
15
+Pull Request titles should follow the guidelines for committing changes and also have a short description of what the change does.
16
+
17
+# Building
18
+
19
+## Getting Started
20
+This plugin is included in the Open Broadcaster Studio project itself.
21
+This is only necessary if you wish to verify functionality with a standalone build.
22
+
23
+## Pre-Requisites
24
+* [Visual Studio® 2013 or Visual Studio® 2015 (Community or better)](http://visualstudio.com/)
25
+* Windows 10 SDK (Version 10586 or better, bundled with Visual Studio)
26
+* [OBS Studio](https://github.com/jp9000/obs-studio)
27
+* [AMF SDK](https://github.com/GPUOpen-LibrariesAndSDKs/AMF)
28
+* [InnoSetup](http://www.jrsoftware.org/isinfo.php)
29
+
30
+### Step 1: Third Party Headers
31
+
32
+#### Open Broadcaster Studio
33
+1. Clone the [Open Broadcaster Studio Source Code](https://github.com/jp9000/obs-studio).
34
+2. Build both x86 and x64 with the same Visual Studio version you indent to use for the plugin.
35
+3. Create a *Soft Link* (Directory Junction) in /#ThirdParty/ to the cloned repository, call it 'OBS-Studio'.<br>
36
+Ex (Windows): mklink /J ./#ThirdParty/OBS-Studio C:/Src/OBS/
37
+4. Verify that it works by visiting the ./#ThirdParty/OBS-Studio directory.
38
+
39
+#### AMD Advanced Media Framework SDK (AMF SDK)
40
+1. Clone the [AMF SDK](https://github.com/GPUOpen-LibrariesAndSDKs/AMF).
41
+2. Create a *Soft Link* (Directory Junction) in /#ThirdParty/ to the cloned repository, call it 'AMD-AMF-SDK'.<br>
42
+Ex (Windows): mklink /J ./#ThirdParty/AMD-AMF-SDK C:/Src/AMF/
43
+3. Verify that it works by visiting the ./#ThirdParty/AMD-AMF-SDK directory.
44
+
45
+### Step 2: Build the Project
46
+
47
+1. Open the Visual Studio Solution file.
48
+2. Build for both x86 and x64 (Normal or Batch Build).
49
+3. Binaries should be located in /#Build/$(Configuration)/
50
+4. (Optional) Create Archives and an Installer with the package.bat in /#Resources/.
51
+
52
+If any errors during building or creating the archives and installer, start again from Step 1.
53
+
54
+### Step 3: Verify Functionality
55
+
56
+*[You can only do this with an AMD APU or GPU installed](https://github.com/Xaymar/obs-studio_amf-encoder-plugin/wiki/Hardware,-GCN-and-VCE-Limits)*.
57
+Install the plugin into your OBS Studio installation or test environment and select it in either Simple Output Mode or Advanced Output Mode. It should encode fine without crashing at any point.
58
+
59
+# Coding Standard
60
+
61
+The entire Project is written in C++ and as such follows common C++ writing practices.
62
+
63
+## Namespaces
64
+
65
+Namespaces should be named in *Pascal Case*. You may create a nested namespace that is 3 levels deep, not more.
66
+
67
+## Enumerations
68
+
69
+Enumerations should be named in *Pascal Case* and be inside a namespace or class.
70
+Enumeration Constants should always be prefixed by the enumeration name so no ambiguity exists.
71
+
72
+## Functions
73
+
74
+Functions should be named in *Pascal Case* and should always be inside a namespace or class.
75
+Ideally your function should be either inlinable or have parameters passed by reference for optimization.
76
+
77
+## Classes
78
+
79
+Classes should be named in *Pascal Case* and should always be inside a namespace - a class not in a namespace must be really important to everything.
80
+
81
+### Methods (Class-specific Functions)
82
+
83
+Methods should be named in *Pascal Case* and always reside in the class it belongs to.
84
+
85
+### Members (Class-specific Variables)
86
+
87
+Members should be prefixed by 'm_' and then use a *Pascal Case* name. There is no special prefix per-type, per-usage or per-source.
88
+
89
+## Variables
90
+
91
+Variables should be named in *camel Case*
92
+
93
obs-studio-0.16.2.tar.xz/plugins/enc-amf/CONTRIBUTORS.md -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/CONTRIBUTORS.md
Changed
61
1
2
| [niteforce](https://github.com/niteforce) | Provided hu-HU language files (Hungarian) |
3
| [nwgat](https://github.com/nwgat) | Provided nb-NO language files (Norwegian) |
4
| [wazerstar](https://github.com/wazerstar) | Provided da-DK language files (Danish) |
5
+| [Jim](https://github.com/jp9000) | General OBS Support for development questions. |
6
+| GolDAce | CrowdIn integration stuff. |
7
8
# The Amazing Supporters
9
10
And these great people have decided to support the project by one or another means.
11
12
+## September 2016
13
+### Marcos Vidal
14
+Spanish translator.
15
+[Website](https://markitos.ovh), [Steam](http://steamcommunity.com/id/markitos22/)
16
+
17
+### nwgat.ninja
18
+nwgat.ninja is proud to support Xaymars Technology Projects.
19
+[Website](https://nwgat.ninja)
20
+
21
+### AJ
22
+Este espacio para el alquiler.
23
+
24
+### Jeremy "razorlikes" Nieth
25
+I like to support this project becuase it gives me a way to stream without having to sacrifice immense amounts of cpu resources for encoding.
26
+[Twitch](https://twitch.tv/razorlikes), [GitHub](https://github.com/razorlikes)
27
+
28
+### Kristian Kirkes(ae)ther
29
+Kristian has not been able to provide a comment in time.
30
+
31
+### Markus Wiegand
32
+Earth has not been able to find Markus and make him respond in time.
33
+[Twitter](https://twitter.com/Morphy2k/), [GitHub](https://github.com/Morphy2k)
34
+
35
+### SneakyJoe
36
+Russian streamer and stream teacher, AMD fanboy. Wants to make AMD great again.
37
+[Website](http://sneakyjoe.ru/), [YouTube](https://www.youtube.com/channel/UCUmRv5GwQcsnxXRzuPCGr-Q)
38
+
39
+### vektorDex
40
+Well, he's my big brother. Could at least have responded. ;_; (just kidding)
41
+[Website](http://blog-of-dex.de/), [Twitter](https://twitter.com/vektordex), [Studio](http://digitaldawnstudios.com)
42
+
43
+### Daniel Bagge
44
+Kini nga luna alang sa abang.
45
+
46
+### John Difool
47
+John Difool der alte Sack
48
+[YouTube](https://www.youtube.com/channel/UC5FPsFLQh4ah0-vz-eoZlOA)
49
+
50
+### Nucu
51
+Thanks AMD and Xaymar to make hardware encoding possible.
52
+
53
+### DaOrgest
54
+Currently studying computer and I do YouTube for a hobby
55
+
56
+[Website](http://daorgest.me), [YouTube](http://youtube.com/daorgest)
57
+
58
## August 2016
59
### Jeremy Nieth
60
Jeremy has decided to not specify what he wanted to be written here. So this will have to do for now.
61
obs-studio-0.16.2.tar.xz/plugins/enc-amf/README.md -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/README.md
Changed
33
1
2
-This Plugin adds support for AMDs Hardware Encoder for H264 and HEVC. It is based on the MIT licensed AMF SDK.
3
+This is a plugin for OBS Studio that enables almost fully native hardware encoding instead of passing things off to Media Foundation Transform which is known to have issues with some certain settings. The plugin is based on the new AMF SDK and thus will work with any future driver releases.
4
5
-# Contributing
6
+[Read More on the Wiki](https://github.com/Xaymar/obs-studio_amf-encoder-plugin/wiki)
7
8
-## Pre-requisites
9
-* AMD Radeon Software Crimson Edition 16.7.3 (16.30.2311) or newer
10
-* Windows® 7 (SP1 with the Platform Update), Windows® 8.1, or Windows® 10
11
-* Visual Studio® 2013 or Visual Studio® 2015 (Community or better)
12
-* Windows 10 SDK (Version 10586 or better)
13
-* [OBS Studio](https://github.com/jp9000/obs-studio)
14
-* [AMF SDK](https://github.com/GPUOpen-LibrariesAndSDKs/AMF)
15
+## Contributing
16
17
-## Getting Started
18
-1. Clone the Project to your Disk
19
-2. Set up any #ThirdParty directory junctions, see the README.md inside the folder for more info.
20
-3. Open the Solution
21
-4. Build the Solution (or Batch Build)
22
-5. Binaries should be located in /#Build/$(Configuration)/
23
-
24
-## Committing Changes
25
-
26
-Read [this wiki page for information](https://github.com/Xaymar/OBS-AMD-Advanced-Media-Framework/wiki/Contributing) and please follow it. Rebasing a bunch of pushed commits is not good.
27
-
28
-# License
29
+Read [CONTRIBUTING.md](https://github.com/Xaymar/obs-studio_amf-encoder-plugin/blob/master/CONTRIBUTING.md) for a guide on how to start.
30
31
## MIT License
32
33
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Include/amd-amf-vce.h -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Include/amd-amf-vce.h
Changed
434
1
2
// Plugin
3
#include "plugin.h"
4
#include "amd-amf.h"
5
+#include "api-base.h"
6
7
//////////////////////////////////////////////////////////////////////////
8
// Code
9
10
VCEMemoryType_DirectX11, // DirectX11
11
VCEMemoryType_OpenGL, // OpenGL
12
13
- VCEMemoryType_Auto = -1, // Autodetect without OpenCL
14
- };
15
- enum VCEComputeType {
16
- VCEComputeType_None, // Default
17
- VCEComputeType_OpenCL, // OpenCL
18
+ VCEMemoryType_Auto = -1, // Auto-Detect
19
};
20
enum VCESurfaceFormat {
21
// 4:2:0 Formats
22
23
VCEProfile_Unknown = -1,
24
};
25
enum VCEProfileLevel {
26
+ VCEProfileLevel_Automatic = 0,
27
VCEProfileLevel_10 = 10,
28
VCEProfileLevel_11,
29
VCEProfileLevel_12,
30
31
VCEProfileLevel_50 = 50,
32
VCEProfileLevel_51,
33
VCEProfileLevel_52,
34
- VCEProfileLevel_60 = 60,
35
- VCEProfileLevel_61,
36
- VCEProfileLevel_62,
37
-
38
VCEProfileLevel_Unknown = -1,
39
};
40
enum VCERateControlMethod {
41
42
#pragma region Initializer & Finalizer
43
//////////////////////////////////////////////////////////////////////////
44
public:
45
- VCEEncoder(VCEEncoderType p_Type, VCESurfaceFormat p_SurfaceFormat = VCESurfaceFormat_NV12, VCEMemoryType p_MemoryType = VCEMemoryType_Auto, VCEComputeType p_ComputeType = VCEComputeType_None);
46
+ VCEEncoder(VCEEncoderType p_Type,
47
+ VCESurfaceFormat p_SurfaceFormat = VCESurfaceFormat_NV12,
48
+ VCEMemoryType p_MemoryType = VCEMemoryType_Auto,
49
+ bool p_UseOpenCL = false,
50
+ std::string p_DeviceUniqueId = "");
51
~VCEEncoder();
52
#pragma endregion Initializer & Finalizer
53
54
55
//////////////////////////////////////////////////////////////////////////
56
public:
57
void Start();
58
+ void Restart();
59
void Stop();
60
bool SendInput(struct encoder_frame* frame);
61
void GetOutput(struct encoder_packet* packet, bool* received_packet);
62
63
// Utility
64
inline amf::AMFSurfacePtr CreateSurfaceFromFrame(struct encoder_frame*& frame);
65
66
- #pragma region AMF Properties
67
public:
68
void LogProperties();
69
+
70
+ /************************************************************************/
71
+ /* Static Properties */
72
+ /************************************************************************/
73
74
/* Usage Type
75
- * Sets up the entire encoder to a specific set of properties.
76
- * Must be called first if you want to override properties. */
77
+ * Sets up the entire encoder to a specific set of properties.
78
+ * Must be called first if you want to override properties. */
79
void SetUsage(VCEUsage usage);
80
VCEUsage GetUsage();
81
-
82
- /* Quality Preset */
83
- void SetQualityPreset(VCEQualityPreset preset);
84
- VCEQualityPreset GetQualityPreset();
85
-
86
+
87
/* H.264 Profile */
88
void SetProfile(VCEProfile profile);
89
VCEProfile GetProfile();
90
91
void SetMaximumLongTermReferenceFrames(uint32_t maximumLTRFrames); // Long-Term Reference Frames. If 0, Encoder decides, if non-0 B-Pictures and Intra-Refresh are not supported.
92
uint32_t GetMaximumLongTermReferenceFrames();
93
94
+ /************************************************************************/
95
+ /* Resolution Properties */
96
+ /************************************************************************/
97
+
98
/* Output Resolution */
99
void SetFrameSize(uint32_t width, uint32_t height);
100
std::pair<uint32_t, uint32_t> GetFrameSize();
101
102
- /// Encoder Rate Control
103
+ /* Sets the Frame Rate numerator and denumerator */
104
+ void SetFrameRate(uint32_t num, uint32_t den);
105
+ std::pair<uint32_t, uint32_t> GetFrameRate();
106
+
107
+ /************************************************************************/
108
+ /* Rate Control Properties */
109
+ /************************************************************************/
110
+
111
/* Selects the rate control method:
112
- * - CQP - Constrained QP,
113
- * - CBR - Constant Bitrate,
114
- * - VBR - Peak Constrained VBR,
115
- * - VBR_LAT - Latency Constrained VBR
116
- *
117
- * Remarks:
118
- * - When SVC encoding is enabled, all Rate-control parameters (with some restrictions) can be configured differently for a particular SVC-layer. An SVC-layer is denoted by an index pair [SVC-Temporal Layer index][SVC-Quality Layer index]. E.g. The bitrate may be configured differently for SVC-layers [0][0] and [1][0].
119
- * - We restrict all SVC layers to have the same Rate Control method. Some RC parameters are not enabled with SVC encoding (e.g. all parameters related to B-pictures).
120
- **/
121
+ * - CQP - Constrained QP,
122
+ * - CBR - Constant Bitrate,
123
+ * - VBR - Peak Constrained VBR,
124
+ * - VBR_LAT - Latency Constrained VBR
125
+ *
126
+ * Remarks:
127
+ * - When SVC encoding is enabled, all Rate-control parameters (with some restrictions) can be configured differently for a particular SVC-layer. An SVC-layer is denoted by an index pair [SVC-Temporal Layer index][SVC-Quality Layer index]. E.g. The bitrate may be configured differently for SVC-layers [0][0] and [1][0].
128
+ * - We restrict all SVC layers to have the same Rate Control method. Some RC parameters are not enabled with SVC encoding (e.g. all parameters related to B-pictures).
129
+ **/
130
void SetRateControlMethod(VCERateControlMethod method);
131
VCERateControlMethod GetRateControlMethod();
132
- /* Enables skip frame for rate control */
133
- void SetRateControlSkipFrameEnabled(bool enabled);
134
- bool IsRateControlSkipFrameEnabled();
135
- /* Sets the minimum QP */
136
- void SetMinimumQP(uint8_t qp);
137
- uint8_t GetMinimumQP();
138
- /* Sets the maximum QP */
139
- void SetMaximumQP(uint8_t qp);
140
- uint8_t GetMaximumQP();
141
+
142
/* Sets the target bitrate */
143
void SetTargetBitrate(uint32_t bitrate);
144
uint32_t GetTargetBitrate();
145
+
146
/* Sets the peak bitrate */
147
void SetPeakBitrate(uint32_t bitrate);
148
uint32_t GetPeakBitrate();
149
+
150
+ /* Sets the minimum QP */
151
+ void SetMinimumQP(uint8_t qp);
152
+ uint8_t GetMinimumQP();
153
+
154
+ /* Sets the maximum QP */
155
+ void SetMaximumQP(uint8_t qp);
156
+ uint8_t GetMaximumQP();
157
+
158
/* Sets the Constant QP for I-Pictures.
159
- *
160
- * Remarks:
161
- * - Only available for CQP rate control method.
162
- **/
163
+ *
164
+ * Remarks:
165
+ * - Only available for CQP rate control method.
166
+ **/
167
void SetIFrameQP(uint8_t qp);
168
uint8_t GetIFrameQP();
169
+
170
/* Sets the Constant QP for P-Pictures.
171
*
172
* Remarks:
173
174
**/
175
void SetPFrameQP(uint8_t qp);
176
uint8_t GetPFrameQP();
177
+
178
/* Sets the Constant QP for B-Pictures.
179
*
180
* Remarks:
181
182
**/
183
void SetBFrameQP(uint8_t qp);
184
uint8_t GetBFrameQP();
185
- /* Sets the Frame Rate numerator and denumerator */
186
- void SetFrameRate(uint32_t num, uint32_t den);
187
- std::pair<uint32_t, uint32_t> GetFrameRate();
188
+
189
+ /* Selects the delta QP of non-reference B-Pictures with respect to I pictures */
190
+ void SetBPictureDeltaQP(int8_t qp);
191
+ int8_t GetBPictureDeltaQP();
192
+
193
+ /* Selects delta QP of reference B-Pictures with respect to I pictures */
194
+ void SetReferenceBPictureDeltaQP(int8_t qp);
195
+ int8_t GetReferenceBPictureDeltaQP();
196
+
197
/* Sets the VBV Buffer Size in bits */
198
void SetVBVBufferSize(uint32_t size);
199
+ void SetVBVBufferAutomatic(double_t strictness);
200
uint32_t GetVBVBufferSize();
201
+
202
/* Sets the initial VBV Buffer Fullness */
203
void SetInitialVBVBufferFullness(double_t fullness);
204
double_t GetInitialVBVBufferFullness();
205
- /* Enables/Disables constraints on QP variation within a picture to meet HRD requirement(s) */
206
- void SetEnforceHRDRestrictionsEnabled(bool enforce);
207
- bool IsEnforceHRDRestrictionsEnabled();
208
- /* Enables/Disables filler data */
209
- void SetFillerDataEnabled(bool enabled);
210
- bool IsFillerDataEnabled();
211
+
212
/* Sets Maximum AU Size in bits */
213
void SetMaximumAccessUnitSize(uint32_t size);
214
uint32_t GetMaximumAccessUnitSize();
215
- /* Selects the delta QP of non-reference B pictures with respect to I pictures */
216
- void SetBPictureDeltaQP(int8_t qp);
217
- int8_t GetBPictureDeltaQP();
218
- /* Selects delta QP of reference B pictures with respect to I pictures */
219
- void SetReferenceBPictureDeltaQP(int8_t qp);
220
- int8_t GetReferenceBPictureDeltaQP();
221
- /// Encoder Picture Control Parameters
222
- /* Sets the headers insertion spacing */
223
- void SetHeaderInsertionSpacing(uint32_t spacing); // Similar to IDR Period, spacing (in frames) between headers.
224
- uint32_t GetHeaderInsertionSpacing();
225
+
226
+ /* Enables/Disables filler data */
227
+ void SetFillerDataEnabled(bool enabled);
228
+ bool IsFillerDataEnabled();
229
+
230
+ /* Enables skip frame for rate control */
231
+ void SetFrameSkippingEnabled(bool enabled);
232
+ bool IsFrameSkippingEnabled();
233
+
234
+ /* Enables/Disables constraints on QP variation within a picture to meet HRD requirement(s) */
235
+ void SetEnforceHRDRestrictionsEnabled(bool enforce);
236
+ bool IsEnforceHRDRestrictionsEnabled();
237
+
238
+ /************************************************************************/
239
+ /* Picture Control Properties */
240
+ /************************************************************************/
241
+
242
/* Sets IDR period. IDRPeriod= 0 turns IDR off */
243
void SetIDRPeriod(uint32_t period);
244
uint32_t GetIDRPeriod();
245
- /* Turns on/off the de-blocking filter */
246
- void SetDeBlockingFilterEnabled(bool enabled);
247
- bool IsDeBlockingFilterEnabled();
248
- /* Sets the number of intra-refresh macro-blocks per slot */
249
- void SetIntraRefreshMBsNumberPerSlot(uint32_t mbs);
250
- uint32_t GetIntraRefreshMBsNumberPerSlot();
251
- /* Sets the number of slices per frame */
252
- void SetSlicesPerFrame(uint32_t slices);
253
- uint32_t GetSlicesPerFrame();
254
+
255
+ /* Sets the headers insertion spacing */
256
+ void SetHeaderInsertionSpacing(uint32_t spacing); // Similar to IDR Period, spacing (in frames) between headers.
257
+ uint32_t GetHeaderInsertionSpacing();
258
+
259
/* Sets the number of consecutive B-pictures in a GOP. BPicturesPattern = 0 indicates that B-pictures are not used */
260
void SetBPicturePattern(VCEBPicturePattern pattern);
261
VCEBPicturePattern GetBPicturePattern();
262
+
263
/* Enables or disables using B-pictures as references */
264
void SetBPictureReferenceEnabled(bool enabled);
265
bool IsBPictureReferenceEnabled();
266
- /// Encoder Miscellaneous Parameters
267
- /* Selects progressive or interlaced scan */
268
+
269
+ /* Turns on/off the Deblocking Filter */
270
+ void SetDeblockingFilterEnabled(bool enabled);
271
+ bool IsDeblockingFilterEnabled();
272
+
273
+ /* Sets the number of slices per frame */
274
+ void SetSlicesPerFrame(uint32_t slices);
275
+ uint32_t GetSlicesPerFrame();
276
+
277
+ /* Sets the number of intra-refresh macro-blocks per slot */
278
+ void SetIntraRefreshMBsNumberPerSlot(uint32_t mbs);
279
+ uint32_t GetIntraRefreshMBsNumberPerSlot();
280
+
281
+ /************************************************************************/
282
+ /* Miscellaneous Control Properties */
283
+ /************************************************************************/
284
+
285
+ /** Quality Preset
286
+ * Static Property, changes cause a restart. */
287
+ void SetQualityPreset(VCEQualityPreset preset);
288
+ VCEQualityPreset GetQualityPreset();
289
+
290
+ /* Selects progressive or interlaced scan
291
+ * Static Property, changes cause a restart. */
292
void SetScanType(VCEScanType scanType);
293
VCEScanType GetScanType();
294
- /// Encoder Motion Estimation Parameters
295
- /* Turns on/off half-pixel motion estimation */
296
+
297
+ /* Turns on/off half-pixel motion estimation */
298
void SetHalfPixelMotionEstimationEnabled(bool enabled);
299
bool IsHalfPixelMotionEstimationEnabled();
300
- /* Turns on/off quarter-pixel motion estimation */
301
+
302
+ /* Turns on/off quarter-pixel motion estimation */
303
void SetQuarterPixelMotionEstimationEnabled(bool enabled);
304
bool IsQuarterPixelMotionEstimationEnabled();
305
- /// Encoder SVC Parameters (Only Webcam Usage)
306
- /* Change the number of temporal enhancement layers. The maximum number allowed is set by the corresponding create parameter.
307
- *
308
- * Remarks:
309
- * - Actual modification of the number of temporal enhancement layers will be delayed until the start of the next temporal GOP.
310
- * - B-pictures and Intra-refresh features are not supported with SVC.
311
- **/
312
- void SetNumberOfTemporalEnhancementLayers(uint32_t layers);
313
- uint32_t GetNumberOfTemporalEnhancementLayers();
314
- /* Set the currently modified SVC Temporal Layer */
315
- void SetCurrentTemporalLayer(uint32_t layer);
316
- uint32_t GetCurrentTemporalLayer();
317
- /* Set the currently modified SVC Temporal Quality Layer
318
- *
319
- * Remarks:
320
- * - Quality layers are not supported on VCE 1.0. QL0 must be used for quality layers.
321
- **/
322
- void SetCurrentTemporalQualityLayer(uint32_t layer);
323
- uint32_t GetCurrentTemporalQualityLayer();
324
325
- /// Hidden Parameters
326
+ /** Enable CABAC entropy coding instead of CALV.
327
+ * CABAC is a more efficient way of compressing data and on
328
+ * average 5% extra data to be stored in the same bitrate.
329
+ * Static Property, changes cause a restart. */
330
+ void SetCABACEnabled(bool enabled);
331
+ bool IsCABACEnabled();
332
+
333
+ /************************************************************************/
334
+ /* Hidden Properties */
335
+ /************************************************************************/
336
+ void SetGOPSize(uint32_t gopSize);
337
+ uint32_t GetGOPSize();
338
+
339
void SetNominalRange(bool enabled);
340
bool GetNominalRange();
341
+
342
void SetWaitForTask(bool enabled);
343
bool GetWaitForTask();
344
- void SetGOPSize(uint32_t size);
345
- uint32_t GetGOPSize();
346
+
347
void SetAspectRatio(uint32_t x, uint32_t y);
348
std::pair<uint32_t, uint32_t> GetAspectRatio();
349
- void SetCABACEnabled(bool enabled);
350
- bool IsCABACEnabled();
351
- //void SetQualityEnhancementMode(uint32_t qualityEnhancementMode);
352
- //uint32_t GetQualityEnhancementMode();
353
354
- // VCE Parameters
355
+ void SetQualityEnhancementMode(uint32_t qualityEnhancementMode);
356
+ uint32_t GetQualityEnhancementMode();
357
+
358
+ void SetMaximumNumberOfReferenceFrames(uint32_t frameCount);
359
+ uint32_t GetMaximumNumberOfReferenceFrames();
360
+
361
+ void SetMaxMBPerSec(uint32_t maxMBPerSec);
362
+ uint32_t GetMaxMBPerSec();
363
+
364
+ void SetInstanceID(uint32_t instanceId);
365
+ uint32_t GetInstanceID();
366
+
367
+ void SetVBAQEnabled(bool enabled);
368
+ bool IsVBAQEnabled();
369
+
370
+ void SetRateControlPreanalysisEnabled(bool enabled);
371
+ bool IsRateControlPreanalysisEnabled();
372
+
373
+ void SetIntraRefreshNumberOfStripes(uint32_t stripes);
374
+ uint32_t GetIntraRefreshNumberOfStripes();
375
+
376
+ void SetSliceMode(uint32_t mode);
377
+ uint32_t GetSliceMode();
378
+
379
+ void SetMaximumSliceSize(uint32_t size);
380
+ uint32_t GetMaximumSliceSize();
381
+
382
// - SliceControlMode: AMF_VIDEO_ENCODER_SLICE_CTRL_MODE_MB_ROW, AMF_VIDEO_ENCODER_SLICE_CTRL_MODE_MB
383
+ void SetSliceControlMode(uint32_t mode);
384
+ uint32_t GetSliceControlMode();
385
+
386
+ void SetSliceControlSize(uint32_t size);
387
+ uint32_t GetSliceControlSize();
388
389
// HEVC Parameters
390
// - MinQP_I, MaxQP_I
391
392
// - GOPSizeMin, GOPSizeMax
393
// - EnableGOPAlignment
394
395
- #pragma endregion AMF Properties
396
-
397
#pragma endregion Methods
398
//////////////////////////////////////////////////////////////////////////
399
400
401
amf::AMFComponentPtr m_AMFEncoder;
402
amf::AMFComputePtr m_AMFCompute;
403
404
+ // API References
405
+ Plugin::API::BaseAPI m_APIDevice = Plugin::API::BaseAPI(Plugin::API::Device());
406
+
407
// Static Buffers
408
std::vector<uint8_t> m_PacketDataBuffer;
409
std::vector<uint8_t> m_ExtraDataBuffer;
410
411
// Internal Properties
412
VCEEncoderType m_EncoderType;
413
VCEMemoryType m_MemoryType;
414
- VCEComputeType m_ComputeType;
415
+ bool m_UseOpenCL;
416
VCESurfaceFormat m_SurfaceFormat;
417
bool m_Flag_IsStarted,
418
- m_Flag_EmergencyQuit,
419
m_Flag_Threading;
420
- std::pair<uint32_t, uint32_t> m_FrameSize, m_FrameRate;
421
- double_t m_FrameRateDivisor, m_FrameRateReverseDivisor;
422
+ std::pair<uint32_t, uint32_t> m_FrameSize,
423
+ m_FrameRate;
424
+ double_t m_FrameRateDivisor,
425
+ m_FrameRateReverseDivisor;
426
size_t m_InputQueueLimit,
427
m_InputQueueLastSize;
428
uint32_t m_TimerPeriod;
429
-
430
+
431
#pragma endregion Members
432
//////////////////////////////////////////////////////////////////////////
433
};
434
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Include/api-base.h
Added
63
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#pragma once
27
+//////////////////////////////////////////////////////////////////////////
28
+// Includes
29
+//////////////////////////////////////////////////////////////////////////
30
+#include "plugin.h"
31
+#include <vector>
32
+
33
+//////////////////////////////////////////////////////////////////////////
34
+// Code
35
+//////////////////////////////////////////////////////////////////////////
36
+namespace Plugin {
37
+ namespace API {
38
+ struct Device {
39
+ std::string Name;
40
+ std::string UniqueId;
41
+
42
+ Device();
43
+ Device(std::string Name, std::string UniqueId);
44
+ ~Device();
45
+ };
46
+
47
+ class BaseAPI {
48
+ public:
49
+ static std::vector<Plugin::API::Device> EnumerateDevices();
50
+
51
+ BaseAPI(Device device);
52
+ virtual ~BaseAPI();
53
+
54
+ virtual void* GetContext();
55
+ Plugin::API::Device GetDevice();
56
+
57
+ private:
58
+ Plugin::API::Device myDevice;
59
+ };
60
+ }
61
+}
62
\ No newline at end of file
63
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Include/api-d3d11.h
Added
57
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#pragma once
27
+#ifdef _WIN32
28
+//////////////////////////////////////////////////////////////////////////
29
+// Includes
30
+//////////////////////////////////////////////////////////////////////////
31
+#include "api-base.h"
32
+
33
+#include <d3d11.h>
34
+
35
+//////////////////////////////////////////////////////////////////////////
36
+// Code
37
+//////////////////////////////////////////////////////////////////////////
38
+namespace Plugin {
39
+ namespace API {
40
+ class Direct3D11 : public Plugin::API::BaseAPI {
41
+ public:
42
+ static std::vector<Plugin::API::Device> EnumerateDevices();
43
+ static Plugin::API::Device GetDeviceForUniqueId(std::string uniqueId);
44
+
45
+ Direct3D11(Device device);
46
+ ~Direct3D11();
47
+
48
+ void* GetContext();
49
+
50
+ private:
51
+ ID3D11Device* pDevice;
52
+ ID3D11DeviceContext* pDeviceContext;
53
+ };
54
+ }
55
+}
56
+#endif
57
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Include/api-d3d9.h
Added
59
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#pragma once
27
+#ifdef _WIN32
28
+//////////////////////////////////////////////////////////////////////////
29
+// Includes
30
+//////////////////////////////////////////////////////////////////////////
31
+#include "api-base.h"
32
+
33
+#define D3D_DEBUG_INFO
34
+#include <d3d9.h>
35
+#pragma comment(lib, "d3d9.lib")
36
+
37
+//////////////////////////////////////////////////////////////////////////
38
+// Code
39
+//////////////////////////////////////////////////////////////////////////
40
+namespace Plugin {
41
+ namespace API {
42
+ class Direct3D9 : public Plugin::API::BaseAPI {
43
+ public:
44
+ static std::vector<Plugin::API::Device> EnumerateDevices();
45
+ static Plugin::API::Device GetDeviceForUniqueId(std::string uniqueId);
46
+
47
+ Direct3D9(Device device);
48
+ ~Direct3D9();
49
+
50
+ void* GetContext();
51
+
52
+ private:
53
+ IDirect3D9* pDirect3D;
54
+ IDirect3DDevice9* pDirect3DDevice;
55
+ };
56
+ }
57
+}
58
+#endif
59
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Include/enc-h264.h -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Include/enc-h264.h
Changed
29
1
2
public:
3
static void encoder_register();
4
static const char* get_name(void* type_data);
5
+ static const char* get_name_simple(void* type_data);
6
static void get_defaults(obs_data_t *settings);
7
static obs_properties_t* get_properties(void* data);
8
- static bool reset_callback(obs_properties_t *props, obs_property_t *property, obs_data_t *settings);
9
- static bool update_from_amf(obs_properties_t *props, obs_property_t *property, obs_data_t *settings);
10
+
11
+ static bool preset_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data);
12
+ static bool maximum_ltr_frames_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data);
13
+ static bool rate_control_method_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data);
14
+ static bool bpictures_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data);
15
+ static bool view_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data);
16
+ static bool unlock_properties_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data);
17
18
static void* create(obs_data_t* settings, obs_encoder_t* encoder);
19
static void destroy(void* data);
20
21
void get_video_info(struct video_scale_info* info);
22
bool get_extra_data(uint8_t** extra_data, size_t* size);
23
24
- bool update_properties(obs_data_t* settings);
25
-
26
//////////////////////////////////////////////////////////////////////////
27
// Storage
28
//////////////////////////////////////////////////////////////////////////
29
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Include/plugin.h -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Include/plugin.h
Changed
176
1
2
#include <exception>
3
#include <stdexcept>
4
#include <thread>
5
+#include <memory>
6
7
// Open Broadcaster Software
8
#pragma warning( disable: 4201 )
9
10
#define dstr(s) #s
11
12
#define PLUGIN_VERSION_MAJOR 1
13
-#define PLUGIN_VERSION_MINOR 3
14
+#define PLUGIN_VERSION_MINOR 4
15
#define PLUGIN_VERSION_PATCH 1
16
#define PLUGIN_VERSION_BUILD 0
17
#define PLUGIN_VERSION_FULL (((uint64_t)PLUGIN_VERSION_MAJOR << 48ull) | ((uint64_t)PLUGIN_VERSION_MINOR << 32ull) | ((uint64_t)PLUGIN_VERSION_PATCH) | ((uint64_t)PLUGIN_VERSION_BUILD))
18
#define PLUGIN_VERSION_TEXT vstr(PLUGIN_VERSION_MAJOR) "." vstr(PLUGIN_VERSION_MINOR) "." vstr(PLUGIN_VERSION_PATCH) "." vstr(PLUGIN_VERSION_BUILD) "-" vstr(AMF_VERSION_MAJOR) "." vstr(AMF_VERSION_MINOR) "." vstr(AMF_VERSION_RELEASE) "." vstr(AMF_VERSION_BUILD_NUM)
19
20
#define AMF_LOG(level, format, ...) blog(level, "[AMF Encoder] " format, ##__VA_ARGS__);
21
-
22
#define AMF_LOG_ERROR(format, ...) AMF_LOG(LOG_ERROR, format, ##__VA_ARGS__)
23
#define AMF_LOG_WARNING(format, ...) AMF_LOG(LOG_WARNING, format, ##__VA_ARGS__)
24
#define AMF_LOG_INFO(format, ...) AMF_LOG(LOG_INFO, format, ##__VA_ARGS__)
25
26
std::vector<char> _throwexceptionwithamferror_buf(8192);\
27
sprintf_s(_throwexceptionwithamferror_buf.data(), _throwexceptionwithamferror_buf.size(), format, ##__VA_ARGS__, Plugin::AMD::AMF::GetInstance()->GetTrace()->GetResultText(res), res);\
28
AMF_LOG_ERROR("%s", _throwexceptionwithamferror_buf.data()); \
29
- throw new std::exception(_throwexceptionwithamferror_buf.data(), res); \
30
+ throw std::exception(_throwexceptionwithamferror_buf.data()); \
31
}
32
33
//////////////////////////////////////////////////////////////////////////
34
// Defines - Translation Strings
35
//////////////////////////////////////////////////////////////////////////
36
37
-// Shared
38
+// Presets
39
+#define AMF_H264_PRESET TEXT_AMF_H264("Preset")
40
+#define AMF_H264_PRESET_RECORDING TEXT_AMF_H264("Preset.Recording")
41
+#define AMF_H264_PRESET_HIGHQUALITY TEXT_AMF_H264("Preset.HighQuality")
42
+#define AMF_H264_PRESET_INDISTINGUISHABLE TEXT_AMF_H264("Preset.Indistinguishable")
43
+#define AMF_H264_PRESET_LOSSLESS TEXT_AMF_H264("Preset.Lossless")
44
+#define AMF_H264_PRESET_TWITCH TEXT_AMF_H264("Preset.Twitch")
45
+#define AMF_H264_PRESET_YOUTUBE TEXT_AMF_H264("Preset.YouTube")
46
+
47
+// Static Properties
48
#define AMF_H264_USAGE TEXT_AMF_H264("Usage")
49
+#define AMF_H264_USAGE_DESCRIPTION TEXT_AMF_H264("Usage.Description")
50
#define AMF_H264_USAGE_TRANSCODING TEXT_AMF_H264("Usage.Transcoding")
51
#define AMF_H264_USAGE_ULTRALOWLATENCY TEXT_AMF_H264("Usage.UltraLowLatency")
52
#define AMF_H264_USAGE_LOWLATENCY TEXT_AMF_H264("Usage.LowLatency")
53
#define AMF_H264_USAGE_WEBCAM TEXT_AMF_H264("Usage.Webcam")
54
-#define AMF_H264_QUALITY_PRESET TEXT_AMF_H264("QualityPreset")
55
-#define AMF_H264_QUALITY_PRESET_SPEED TEXT_AMF_H264("QualityPreset.Speed")
56
-#define AMF_H264_QUALITY_PRESET_BALANCED TEXT_AMF_H264("QualityPreset.Balanced")
57
-#define AMF_H264_QUALITY_PRESET_QUALITY TEXT_AMF_H264("QualityPreset.Quality")
58
#define AMF_H264_PROFILE TEXT_AMF_H264("Profile")
59
+#define AMF_H264_PROFILE_DESCRIPTION TEXT_AMF_H264("Profile.Description")
60
#define AMF_H264_PROFILELEVEL TEXT_AMF_H264("ProfileLevel")
61
+#define AMF_H264_PROFILELEVEL_DESCRIPTION TEXT_AMF_H264("ProfileLevel.Description")
62
+#define AMF_H264_MAXIMUMLTRFRAMES TEXT_AMF_H264("MaximumLTRFrames")
63
+#define AMF_H264_MAXIMUMLTRFRAMES_DESCRIPTION TEXT_AMF_H264("MaximumLTRFrames.Description")
64
+
65
+// Rate Control Properties
66
#define AMF_H264_RATECONTROLMETHOD TEXT_AMF_H264("RateControlMethod")
67
+#define AMF_H264_RATECONTROLMETHOD_DESCRIPTION TEXT_AMF_H264("RateControlMethod.Description")
68
#define AMF_H264_RATECONTROLMETHOD_CQP TEXT_AMF_H264("RateControlMethod.CQP")
69
#define AMF_H264_RATECONTROLMETHOD_CBR TEXT_AMF_H264("RateControlMethod.CBR")
70
#define AMF_H264_RATECONTROLMETHOD_VBR TEXT_AMF_H264("RateControlMethod.VBR.Peak")
71
#define AMF_H264_RATECONTROLMETHOD_VBR_LAT TEXT_AMF_H264("RateControlMethod.VBR.Latency")
72
#define AMF_H264_BITRATE_TARGET TEXT_AMF_H264("Bitrate.Target")
73
+#define AMF_H264_BITRATE_TARGET_DESCRIPTION TEXT_AMF_H264("Bitrate.Target.Description")
74
#define AMF_H264_BITRATE_PEAK TEXT_AMF_H264("Bitrate.Peak")
75
+#define AMF_H264_BITRATE_PEAK_DESCRIPTION TEXT_AMF_H264("Bitrate.Peak.Description")
76
#define AMF_H264_QP_MINIMUM TEXT_AMF_H264("QP.Minimum")
77
+#define AMF_H264_QP_MINIMUM_DESCRIPTION TEXT_AMF_H264("QP.Minimum.Description")
78
#define AMF_H264_QP_MAXIMUM TEXT_AMF_H264("QP.Maximum")
79
+#define AMF_H264_QP_MAXIMUM_DESCRIPTION TEXT_AMF_H264("QP.Maximum.Description")
80
#define AMF_H264_QP_IFRAME TEXT_AMF_H264("QP.IFrame")
81
+#define AMF_H264_QP_IFRAME_DESCRIPTION TEXT_AMF_H264("QP.IFrame.Description")
82
#define AMF_H264_QP_PFRAME TEXT_AMF_H264("QP.PFrame")
83
+#define AMF_H264_QP_PFRAME_DESCRIPTION TEXT_AMF_H264("QP.PFrame.Description")
84
#define AMF_H264_QP_BFRAME TEXT_AMF_H264("QP.BFrame")
85
+#define AMF_H264_QP_BFRAME_DESCRIPTION TEXT_AMF_H264("QP.BFrame.Description")
86
#define AMF_H264_QP_BPICTURE_DELTA TEXT_AMF_H264("QP.BPictureDelta")
87
+#define AMF_H264_QP_BPICTURE_DELTA_DESCRIPTION TEXT_AMF_H264("QP.BPictureDelta.Description")
88
#define AMF_H264_QP_REFERENCE_BPICTURE_DELTA TEXT_AMF_H264("QP.ReferenceBPictureDelta")
89
+#define AMF_H264_QP_REFERENCE_BPICTURE_DELTA_DESCRIPTION TEXT_AMF_H264("QP.ReferenceBPictureDelta.Description")
90
+#define AMF_H264_VBVBUFFER TEXT_AMF_H264("VBVBuffer")
91
+#define AMF_H264_VBVBUFFER_DESCRIPTION TEXT_AMF_H264("VBVBuffer.Description")
92
+#define AMF_H264_VBVBUFFER_STRICTNESS TEXT_AMF_H264("VBVBuffer.Strictness")
93
+#define AMF_H264_VBVBUFFER_STRICTNESS_DESCRIPTION TEXT_AMF_H264("VBVBuffer.Strictness.Description")
94
+#define AMF_H264_VBVBUFFER_SIZE TEXT_AMF_H264("VBVBuffer.Size")
95
+#define AMF_H264_VBVBUFFER_SIZE_DESCRIPTION TEXT_AMF_H264("VBVBuffer.Size.Description")
96
+#define AMF_H264_VBVBUFFER_FULLNESS TEXT_AMF_H264("VBVBuffer.Fullness")
97
+#define AMF_H264_VBVBUFFER_FULLNESS_DESCRIPTION TEXT_AMF_H264("VBVBuffer.Fullness.Description")
98
#define AMF_H264_FILLERDATA TEXT_AMF_H264("FillerData")
99
+#define AMF_H264_FILLERDATA_DESCRIPTION TEXT_AMF_H264("FillerData.Description")
100
#define AMF_H264_FRAMESKIPPING TEXT_AMF_H264("FrameSkipping")
101
+#define AMF_H264_FRAMESKIPPING_DESCRIPTION TEXT_AMF_H264("FrameSkipping.Description")
102
#define AMF_H264_ENFORCEHRDCOMPATIBILITY TEXT_AMF_H264("EnforceHRDCompatibility")
103
+#define AMF_H264_ENFORCEHRDCOMPATIBILITY_DESCRIPTION TEXT_AMF_H264("EnforceHRDCompatibility.Description")
104
+#define AMF_H264_MAXIMUMACCESSUNITSIZE TEXT_AMF_H264("MaximumAccessUnitSize")
105
+#define AMF_H264_MAXIMUMACCESSUNITSIZE_DESCRIPTION TEXT_AMF_H264("MaximumAccessUnitSize.Description")
106
+
107
+// Picture Control Properties
108
+#define AMF_H264_KEYFRAME_INTERVAL TEXT_AMF_H264("KeyframeInterval")
109
+#define AMF_H264_KEYFRAME_INTERVAL_DESCRIPTION TEXT_AMF_H264("KeyframeInterval.Description")
110
+#define AMF_H264_IDR_PERIOD TEXT_AMF_H264("IDRPeriod")
111
+#define AMF_H264_IDR_PERIOD_DESCRIPTION TEXT_AMF_H264("IDRPeriod.Description")
112
+#define AMF_H264_HEADER_INSERTION_SPACING TEXT_AMF_H264("HeaderInsertionSpacing")
113
+#define AMF_H264_HEADER_INSERTION_SPACING_DESCRIPTION TEXT_AMF_H264("HeaderInsertionSpacing.Description")
114
+#define AMF_H264_BPICTURE_PATTERN TEXT_AMF_H264("BPicture.Pattern")
115
+#define AMF_H264_BPICTURE_PATTERN_DESCRIPTION TEXT_AMF_H264("BPicture.Pattern.Description")
116
+#define AMF_H264_BPICTURE_REFERENCE TEXT_AMF_H264("BPicture.Reference")
117
+#define AMF_H264_BPICTURE_REFERENCE_DESCRIPTION TEXT_AMF_H264("BPicture.Reference.Description")
118
#define AMF_H264_DEBLOCKINGFILTER TEXT_AMF_H264("DeblockingFilter")
119
+#define AMF_H264_DEBLOCKINGFILTER_DESCRIPTION TEXT_AMF_H264("DeblockingFilter.Description")
120
+#define AMF_H264_SLICESPERFRAME TEXT_AMF_H264("SlicesPerFrame")
121
+#define AMF_H264_SLICESPERFRAME_DESCRIPTION TEXT_AMF_H264("SlicesPerFrame.Description")
122
+#define AMF_H264_INTRAREFRESHNUMMBSPERSLOT TEXT_AMF_H264("IntraRefreshNumMBsPerSlot")
123
+#define AMF_H264_INTRAREFRESHNUMMBSPERSLOT_DESCRIPTION TEXT_AMF_H264("IntraRefreshNumMBsPerSlot.Description")
124
+
125
+// Miscellaneous Properties
126
+#define AMF_H264_QUALITY_PRESET TEXT_AMF_H264("QualityPreset")
127
+#define AMF_H264_QUALITY_PRESET_DESCRIPTION TEXT_AMF_H264("QualityPreset.Description")
128
+#define AMF_H264_QUALITY_PRESET_SPEED TEXT_AMF_H264("QualityPreset.Speed")
129
+#define AMF_H264_QUALITY_PRESET_BALANCED TEXT_AMF_H264("QualityPreset.Balanced")
130
+#define AMF_H264_QUALITY_PRESET_QUALITY TEXT_AMF_H264("QualityPreset.Quality")
131
#define AMF_H264_SCANTYPE TEXT_AMF_H264("ScanType")
132
+#define AMF_H264_SCANTYPE_DESCRIPTION TEXT_AMF_H264("ScanType.Description")
133
#define AMF_H264_SCANTYPE_PROGRESSIVE TEXT_AMF_H264("ScanType.Progressive")
134
#define AMF_H264_SCANTYPE_INTERLACED TEXT_AMF_H264("ScanType.Interlaced")
135
-#define AMF_H264_BPICTURE_PATTERN TEXT_AMF_H264("BPicture.Pattern")
136
-#define AMF_H264_BPICTURE_REFERENCE TEXT_AMF_H264("BPicture.Reference")
137
-#define AMF_H264_GOP_SIZE TEXT_AMF_H264("GOPSize")
138
+#define AMF_H264_MOTIONESTIMATION TEXT_AMF_H264("MotionEstimation")
139
+#define AMF_H264_MOTIONESTIMATION_DESCRIPTION TEXT_AMF_H264("MotionEstimation.Description")
140
+#define AMF_H264_MOTIONESTIMATION_NONE TEXT_AMF_H264("MotionEstimation.None")
141
+#define AMF_H264_MOTIONESTIMATION_HALF TEXT_AMF_H264("MotionEstimation.Half")
142
+#define AMF_H264_MOTIONESTIMATION_QUARTER TEXT_AMF_H264("MotionEstimation.Quarter")
143
+#define AMF_H264_MOTIONESTIMATION_BOTH TEXT_AMF_H264("MotionEstimation.Both")
144
#define AMF_H264_CABAC TEXT_AMF_H264("CABAC")
145
-#define AMF_H264_DEBUGTRACING TEXT_AMF_H264("DebugTracing")
146
+#define AMF_H264_CABAC_DESCRIPTION TEXT_AMF_H264("CABAC.Description")
147
+
148
+// System Properties
149
#define AMF_H264_MEMORYTYPE TEXT_AMF_H264("MemoryType")
150
-#define AMF_H264_COMPUTETYPE TEXT_AMF_H264("ComputeType")
151
+#define AMF_H264_MEMORYTYPE_DESCRIPTION TEXT_AMF_H264("MemoryType.Description")
152
+#define AMF_H264_DEVICE TEXT_AMF_H264("Device")
153
+#define AMF_H264_DEVICE_DESCRIPTION TEXT_AMF_H264("Device.Description")
154
+#define AMF_H264_USE_OPENCL TEXT_AMF_H264("UseOpenCL")
155
+#define AMF_H264_USE_OPENCL_DESCRIPTION TEXT_AMF_H264("UseOpenCL.Description")
156
#define AMF_H264_SURFACEFORMAT TEXT_AMF_H264("SurfaceFormat")
157
+#define AMF_H264_SURFACEFORMAT_DESCRIPTION TEXT_AMF_H264("SurfaceFormat.Description")
158
+#define AMF_H264_VIEW TEXT_AMF_H264("View")
159
+#define AMF_H264_VIEW_DESCRIPTION TEXT_AMF_H264("View.Description")
160
+#define AMF_H264_VIEW_BASIC TEXT_AMF_H264("View.Basic")
161
+#define AMF_H264_VIEW_ADVANCED TEXT_AMF_H264("View.Advanced")
162
+#define AMF_H264_VIEW_EXPERT TEXT_AMF_H264("View.Expert")
163
+#define AMF_H264_VIEW_MASTER TEXT_AMF_H264("View.Master")
164
+#define AMF_H264_UNLOCK_PROPERTIES TEXT_AMF_H264("UnlockProperties")
165
+#define AMF_H264_UNLOCK_PROPERTIES_DESCRIPTION TEXT_AMF_H264("UnlockProperties.Description")
166
+#define AMF_H264_DEBUG TEXT_AMF_H264("Debug")
167
+#define AMF_H264_DEBUG_DESCRIPTION TEXT_AMF_H264("Debug.Description")
168
169
// Utility
170
#define AMF_UTIL_DEFAULT TEXT_AMF_UTIL("Default")
171
#define AMF_UTIL_AUTOMATIC TEXT_AMF_UTIL("Automatic")
172
+#define AMF_UTIL_MANUAL TEXT_AMF_UTIL("Manual")
173
#define AMF_UTIL_TOGGLE_DISABLED TEXT_AMF_UTIL("Toggle.Disabled")
174
#define AMF_UTIL_TOGGLE_ENABLED TEXT_AMF_UTIL("Toggle.Enabled")
175
176
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/bg-BG.ini
Added
7
1
2
+AMF.H264.Profile="Профил"
3
+AMF.H264.View.Advanced="Разширения"
4
+AMF.H264.Debug="Дебъг"
5
+AMF.Util.Default="По подразбиране"
6
+AMF.Util.Manual="Ръчно"
7
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ca-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ca-ES.ini
Changed
81
1
2
-AMF.H264.Usage="Tipus d'ús"
3
AMF.H264.Usage.Transcoding="Transcodificació"
4
AMF.H264.Usage.UltraLowLatency="Latència ultra baixa"
5
AMF.H264.Usage.LowLatency="Latència baixa"
6
-AMF.H264.Usage.Webcam="Webcam"
7
-AMF.H264.QualityPreset="Qualitat del perfil"
8
-AMF.H264.QualityPreset.Speed="Velocitat"
9
-AMF.H264.QualityPreset.Balanced="Equilibrat"
10
-AMF.H264.QualityPreset.Quality="Qualitat"
11
AMF.H264.Profile="Perfil"
12
AMF.H264.ProfileLevel="Nivell de perfil"
13
+AMF.H264.MaximumLTRFrames="Fotogrames màxims LTR"
14
AMF.H264.RateControlMethod="Mètode de control del flux"
15
AMF.H264.RateControlMethod.CQP="QP constant (CQP)"
16
AMF.H264.RateControlMethod.CBR="Flux constant (CBR)"
17
18
AMF.H264.QP.PFrame="P-Frame QP"
19
AMF.H264.QP.BFrame="B-Frame QP"
20
AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
21
-AMF.H264.QP.ReferenceBPictureDelta="Referència B-Picture Delta QP"
22
+AMF.H264.QP.ReferenceBPictureDelta="QP Delta en B-Pictures de referencia"
23
AMF.H264.FillerData="Dades a omplir"
24
AMF.H264.FrameSkipping="Omissió de fotogrames"
25
AMF.H264.EnforceHRDCompatibility="Força la compatibilitat amb HRD"
26
-AMF.H264.DeblockingFilter="Filtre de desbloqueig"
27
+AMF.H264.BPicture.Pattern="Patró B-Picture"
28
+AMF.H264.BPicture.Reference="Referència B-Picture"
29
+AMF.H264.DeblockingFilter="Filtre d'eliminació de blocs"
30
AMF.H264.ScanType="Tipus d'exploració"
31
AMF.H264.ScanType.Progressive="Progressiu"
32
AMF.H264.ScanType.Interlaced="Entrellaçat"
33
-AMF.H264.BPicture.Pattern="Patró B-Picture"
34
-AMF.H264.BPicture.Reference="Referència B-Picture"
35
-AMF.H264.GOPSize="Mida del GOP"
36
+AMF.H264.QualityPreset="Qualitat del perfil"
37
+AMF.H264.QualityPreset.Speed="Velocitat"
38
+AMF.H264.QualityPreset.Balanced="Equilibrat"
39
+AMF.H264.QualityPreset.Quality="Qualitat"
40
AMF.H264.CABAC="Codificació adaptativa segons el context binari aritmètic (CABAC)"
41
-AMF.H264.DebugTracing="Seguiment de la depuració"
42
AMF.H264.MemoryType="Tipus de memòria"
43
-AMF.H264.ComputeType="Tipus de computació"
44
-
45
-AMF.H264Advanced.Name="H264 Encoder [Advanced] (AMD Advanced Media Framework)"
46
-AMF.H264Advanced.Reset="Restaura els valors predeterminats"
47
-AMF.H264Advanced.Update="Actualitza els valors d'AMF (si per defecte/-1)"
48
-AMF.H264Advanced.MaxLTRFrames="Fotogrames màxims LTR"
49
-AMF.H264Advanced.VBVBuffer.Size="Mida de buffer VBV (bits)"
50
-AMF.H264Advanced.VBVBuffer.Fullness="Amplitud del buffer VBV"
51
-AMF.H264Advanced.MaxAUSize="Mida màxima d'AU (bits)"
52
-AMF.H264Advanced.HeaderInsertionSpacing="Capçalera d'inserció espaiat (fotogrames)"
53
-AMF.H264Advanced.IDRPeriod="Període de fotogrames clau (fotogrames)"
54
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Memòria intra-refresh per ranura en macroblocs (en MB)"
55
-AMF.H264Advanced.SlicesPerFrame="Llesques per fotograma"
56
-AMF.H264Advanced.MotionEstimation="Estimació de moviment"
57
-AMF.H264Advanced.MotionEstimation.None="Cap"
58
-AMF.H264Advanced.MotionEstimation.Half="Només mig pixel"
59
-AMF.H264Advanced.MotionEstimation.Quarter="Només un quart de pixel"
60
-AMF.H264Advanced.MotionEstimation.Both="Ambdós"
61
-
62
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
63
-AMF.H264Simple.Preset="Configuració preestablerta"
64
-AMF.H264Simple.Preset.Recording="S'està enregistrant"
65
-AMF.H264Simple.Preset.Twitch="Twitch"
66
-AMF.H264Simple.Preset.YouTube="YouTube"
67
-AMF.H264Simple.KeyframeInterval="Interval de fotogrames clau (segons)"
68
-AMF.H264Simple.UseCustomBufferSize="Utilitza mida de buffer personalitzat"
69
-AMF.H264Simple.CustomBufferSize="Mida del buffer (kbit/s)"
70
-AMF.H264Simple.CustomBufferFullness="Amplitud del buffer inicial"
71
-AMF.H264Simple.UseCustomGOPSize="Utilitza una mida GOP personalitzada"
72
-AMF.H264Simple.ShowAdvancedParameters="Mostra els paràmetres avançats"
73
-AMF.H264Simple.ShowExpertParameters="Mostra paràmetres per a experts"
74
-
75
+AMF.H264.SurfaceFormat="Format de la superfície"
76
AMF.Util.Default="Per defecte"
77
AMF.Util.Automatic="Automàtic"
78
AMF.Util.Toggle.Disabled="Desactivat"
79
AMF.Util.Toggle.Enabled="Activat"
80
-
81
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/cs-CZ.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/cs-CZ.ini
Changed
75
1
2
-AMF.H264.Usage="Typ použití"
3
+AMF.H264.Preset="Profil"
4
+AMF.H264.Preset.Recording="Nahrávání"
5
+AMF.H264.Preset.HighQuality="Vysoká kvalita"
6
+AMF.H264.Preset.Indistinguishable="Nerozeznatelné"
7
+AMF.H264.Preset.Lossless="Lossless"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Využití"
11
AMF.H264.Usage.Transcoding="Kódování"
12
AMF.H264.Usage.UltraLowLatency="Ultra nízká odezva"
13
AMF.H264.Usage.LowLatency="Nízká odezva"
14
-AMF.H264.Usage.Webcam="Webkamera"
15
-AMF.H264.QualityPreset="Profil kvality"
16
-AMF.H264.QualityPreset.Speed="Rychlost"
17
-AMF.H264.QualityPreset.Balanced="Vyváženo"
18
-AMF.H264.QualityPreset.Quality="Kvalita"
19
AMF.H264.Profile="Profil"
20
AMF.H264.ProfileLevel="Úroveň profilu"
21
AMF.H264.RateControlMethod="Metoda řízení"
22
23
AMF.H264.FillerData="Filtrovat data"
24
AMF.H264.FrameSkipping="Přeskakování snímků"
25
AMF.H264.EnforceHRDCompatibility="Vynutit kompatibilitu s HRD"
26
+AMF.H264.KeyframeInterval="Interval klíčový snímků"
27
+AMF.H264.KeyframeInterval.Description="Kolik vteřin by mělo být mezi ne-zahazovatelnými snímky.\nTaké ovládá velikost sekvence(GOP)."
28
+AMF.H264.IDRPeriod.Description="Kolik snímků by mělo být mezi ne-zahazovatelnými snímky.\nTaké ovládá velikost sekvence(GOP)."
29
AMF.H264.ScanType="Typ skenování"
30
+AMF.H264.ScanType.Description="Určuje použitou metodu skenování, vždy ponechejte na 'Progresivní'."
31
AMF.H264.ScanType.Progressive="Progresivní"
32
AMF.H264.ScanType.Interlaced="Prokládané"
33
-AMF.H264.GOPSize="Velikost GOP"
34
-
35
-AMF.H264Advanced.Name="H264 [Rozšířené] (AMD Advanced Media Framework)"
36
-AMF.H264Advanced.Reset="Obnovit výchozí"
37
-AMF.H264Advanced.MotionEstimation.Both="Obojí"
38
-
39
-AMF.H264Simple.Name="H264 (AMD Advanced Media Framework)"
40
-AMF.H264Simple.Preset="Předvolba"
41
-AMF.H264Simple.Preset.Recording="Nahrávka"
42
-AMF.H264Simple.Preset.Twitch="Twitch"
43
-AMF.H264Simple.Preset.YouTube="YouTube"
44
-AMF.H264Simple.ShowAdvancedParameters="Zobrazit rozšířené nastavení"
45
-
46
+AMF.H264.QualityPreset="Profil kvality"
47
+AMF.H264.QualityPreset.Speed="Rychlost"
48
+AMF.H264.QualityPreset.Balanced="Vyváženo"
49
+AMF.H264.QualityPreset.Quality="Kvalita"
50
+AMF.H264.MotionEstimation="Odhad pohybu"
51
+AMF.H264.MotionEstimation.Description="Odhad pohybu umožňuje enkodéru snížit požadovaný bitrate předpovídáním, kam se určitý pixel posunul."
52
+AMF.H264.MotionEstimation.None="Žádný"
53
+AMF.H264.MotionEstimation.Half="Polovina pixelu"
54
+AMF.H264.MotionEstimation.Quarter="Čtvrtina pixelu"
55
+AMF.H264.MotionEstimation.Both="Polovina & čtvrtina pixelu"
56
+AMF.H264.CABAC="CABAC"
57
+AMF.H264.MemoryType="Typ paměti"
58
+AMF.H264.SurfaceFormat="Formát povrchu"
59
+AMF.H264.View="Režim zobrazení"
60
+AMF.H264.View.Description="Které možnosti mají být zobrazeny. Nezískáte žádnou pomoc při použití módu 'Expert' či 'Master'."
61
+AMF.H264.View.Basic="Základní"
62
+AMF.H264.View.Advanced="Pokročilý"
63
+AMF.H264.View.Expert="Expert"
64
+AMF.H264.View.Master="Master"
65
+AMF.H264.UnlockProperties="Odblokovat vlastnosti"
66
+AMF.H264.UnlockProperties.Description="Odblokuje určité vlastnosti do jejich plného rozsahu místo omezování do určitého."
67
+AMF.H264.Debug="Ladění"
68
+AMF.H264.Debug.Description="Zapne rozšířené protokolování, mělo by být zapnuto, pokud pořebujete pomoci s tmto enkodérem."
69
AMF.Util.Default="Výchozí"
70
+AMF.Util.Automatic="Automatické"
71
+AMF.Util.Manual="Manuální"
72
AMF.Util.Toggle.Disabled="Zakázáno"
73
AMF.Util.Toggle.Enabled="Povoleno"
74
-
75
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/da-DK.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/da-DK.ini
Changed
63
1
2
-AMF.H264.Usage="Forbrugs Type"
3
AMF.H264.Usage.Transcoding="Transcoding"
4
AMF.H264.Usage.UltraLowLatency="Ekstrem Lav Ventetid"
5
AMF.H264.Usage.LowLatency="Lav Ventetid"
6
-AMF.H264.Usage.Webcam="Webkamera"
7
-AMF.H264.QualityPreset="Kvalitets profiler"
8
-AMF.H264.QualityPreset.Speed="Hastighed (Dårligste kvalitet)"
9
-AMF.H264.QualityPreset.Balanced="Balanceret (Mellem Kvalitet)"
10
-AMF.H264.QualityPreset.Quality="Kvalitet (Bedste Kvalitet)"
11
AMF.H264.Profile="Profil"
12
AMF.H264.ProfileLevel="Profil Niveau"
13
AMF.H264.RateControlMethod="Rate Control Method"
14
15
AMF.H264.FillerData="Filler Data"
16
AMF.H264.FrameSkipping="Billede skip"
17
AMF.H264.EnforceHRDCompatibility="Tving HRD Kompatibilitet"
18
+AMF.H264.BPicture.Pattern="B-Picture Pattern"
19
+AMF.H264.BPicture.Reference="B-Picture Reference"
20
AMF.H264.DeblockingFilter="Deblocking Filter"
21
AMF.H264.ScanType="Scan Type"
22
AMF.H264.ScanType.Progressive="Progressive"
23
AMF.H264.ScanType.Interlaced="Interlaced"
24
-AMF.H264.BPicture.Pattern="B-Picture Pattern"
25
-AMF.H264.BPicture.Reference="B-Picture Reference"
26
-AMF.H264.DebugTracing="Debug Tracing"
27
-
28
-AMF.H264Advanced.Name="H264 Encoder [Advanced] (AMD Advanced Media Framework)"
29
-AMF.H264Advanced.Reset="Gendan indstillinger"
30
-AMF.H264Advanced.Update="Hent værdierne fra AMF (hvis værdierne er sat til standard eller -1)"
31
-AMF.H264Advanced.MaxLTRFrames="Maksimum LTR Frames"
32
-AMF.H264Advanced.VBVBuffer.Size="VBV Buffer størrelse (i Bits)"
33
-AMF.H264Advanced.VBVBuffer.Fullness="Initial VBV Buffer Fullness"
34
-AMF.H264Advanced.MaxAUSize="Maksimum AU størrelse (i Bits)"
35
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
36
-AMF.H264Advanced.IDRPeriod="Keyframe Period (Frames)"
37
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory Per Slot In Macroblocks (in MB)"
38
-AMF.H264Advanced.SlicesPerFrame="Slices Per Frame"
39
-AMF.H264Advanced.MotionEstimation="Motion Estimation"
40
-AMF.H264Advanced.MotionEstimation.None="Intet"
41
-AMF.H264Advanced.MotionEstimation.Half="Halv"
42
-AMF.H264Advanced.MotionEstimation.Quarter="Kvart"
43
-AMF.H264Advanced.MotionEstimation.Both="Begge"
44
-
45
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
46
-AMF.H264Simple.Preset="Preset"
47
-AMF.H264Simple.Preset.Recording="Optagelse"
48
-AMF.H264Simple.Preset.Twitch="Twitch"
49
-AMF.H264Simple.Preset.YouTube="YouTube"
50
-AMF.H264Simple.KeyframeInterval="Keyframe Interval (Sekunder)"
51
-AMF.H264Simple.UseCustomBufferSize="Brug brugerdefinerede Buffer størrelse"
52
-AMF.H264Simple.CustomBufferSize="Buffer størrelse (i kbit/s)"
53
-AMF.H264Simple.ShowAdvancedParameters="Show Advanced Parameters"
54
-
55
+AMF.H264.QualityPreset="Kvalitets profiler"
56
+AMF.H264.QualityPreset.Speed="Hastighed (Dårligste kvalitet)"
57
+AMF.H264.QualityPreset.Balanced="Balanceret (Mellem Kvalitet)"
58
+AMF.H264.QualityPreset.Quality="Kvalitet (Bedste Kvalitet)"
59
AMF.Util.Default="Standard"
60
AMF.Util.Toggle.Disabled="Deaktiveret"
61
AMF.Util.Toggle.Enabled="Aktiveret"
62
-
63
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/de-DE.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/de-DE.ini
Changed
167
1
2
-AMF.H264.Usage="Verwendungstyp"
3
+AMF.H264.Preset="Voreinstellungen"
4
+AMF.H264.Preset.Recording="Aufnahme"
5
+AMF.H264.Preset.HighQuality="Hohe Qualität"
6
+AMF.H264.Preset.Indistinguishable="Ununterscheidbar"
7
+AMF.H264.Preset.Lossless="Verlustfrei"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Nutzungsart"
11
+AMF.H264.Usage.Description="Auf welche Nutzungsart AMF eingestellt werden soll:\n- 'Umwandeln' für generelle umwandlung (empfohlen),\n- 'Sehr Niedrige Latenz' für codierung mit sehr niedriger latenz,\n- 'Niedrige Latenz' ist ähnlich dem oberen mit leicht erhöhter latenz.\nNur 'Umwandeln' wird für das streamen unterstützt, alle anderen können für aufnahmen verwendet werden."
12
AMF.H264.Usage.Transcoding="Umwandeln"
13
AMF.H264.Usage.UltraLowLatency="Sehr Niedrige Latenz"
14
AMF.H264.Usage.LowLatency="Niedrige Latenz"
15
-AMF.H264.Usage.Webcam="Webcam"
16
-AMF.H264.QualityPreset="Qualitätsvoreinstellung"
17
-AMF.H264.QualityPreset.Speed="Geschwindigkeit"
18
-AMF.H264.QualityPreset.Balanced="Ausgeglichen"
19
-AMF.H264.QualityPreset.Quality="Qualität"
20
AMF.H264.Profile="Profil"
21
+AMF.H264.Profile.Description="Welches H.264 Profil für das Codieren verwendet werden soll:\n- 'Baseline' hat die größte Unterstützung,\n- 'Main' wird von ca 95% an Geräten unterstützt (empfohlen),\n- 'High' wird nur von Hoch-Performance Geräten unterstützt."
22
AMF.H264.ProfileLevel="Profillevel"
23
+AMF.H264.ProfileLevel.Description="Welches H.264 Profil Level für das verarbeiten verwendet werden soll:\n- 'Automatisch' errechnet das beste Profil Level für die gegeben Frame Rate und Frame Größe,\n- '4.1' unterstützt 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' unterstützt 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' unterstützt 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' unterstützt 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' unterstützt 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
24
+AMF.H264.MaximumLTRFrames="Maximale Langzeitreferenz-Bilder"
25
+AMF.H264.MaximumLTRFrames.Description="Langzeitreferenz (LTR) Bilder ist ein feature das dem Codierer erlaubt, einige Bilder innerhalb einer Sequenz als referenzierbar zu markieren.\nDies kann einen positiven Effekt auf die Qualität haben sofern B-Bilder nicht unterstützt oder gewollt sind.\nLTR Bilder können nicht zusammen mit B-Bildern verwendet werden und der encoder wird B-Bilder deaktivieren sofern diese verwendet werden."
26
AMF.H264.RateControlMethod="Ratenkontrollmethode"
27
+AMF.H264.RateControlMethod.Description="Welche Ratenkontrollmethode verwendet werden soll:\n- CQP setzt feste QP (Quantifizierungsparameter) werte für I-/P-/B- Bilder,\n- CBR bleibt auf der Zielbitrate (mithilfe von Füllungsdaten) (empfohlen für das Streamen),\n- VBR bleibt unter der Höchstbitrate,\n- VBR_LAT bleibt nahe der Zielbitrate sofern GPU-Latenz und GPU-Benutzung dies erlauben, ansonsten wird eine höhere Bitrate verwendet (empfohlen für Aufnamen).\nAlle Methoden bis auf CQP nutzen die Minimum und Maximum QP (Quantifizierungsparameter) Begrenzungen."
28
AMF.H264.RateControlMethod.CQP="Konstante QP (CQP)"
29
AMF.H264.RateControlMethod.CBR="Konstante Bitrate (CBR)"
30
AMF.H264.RateControlMethod.VBR.Peak="Variable Bitrate (Eingeschränkt via Spitzenbitrate) (VBR)"
31
AMF.H264.RateControlMethod.VBR.Latency="Variable Bitrate (Eingeschränkt via Latenz) (VBR_LAT)"
32
AMF.H264.Bitrate.Target="Zielbitrate"
33
+AMF.H264.Bitrate.Target.Description="Bitrate die versucht werden soll zu erreichen in einer Sequenz.\nWird von CBR und VBR_LAT verwendet."
34
AMF.H264.Bitrate.Peak="Spitzenbitrate"
35
+AMF.H264.Bitrate.Peak.Description="Maximale Bitrate in einer Sequenz.\nWird von VBR und VBR_LAT verwendet."
36
AMF.H264.QP.Minimum="Minimale QP"
37
+AMF.H264.QP.Minimum.Description="Niedrigster QP wert der in einem Bild verwendet werden darf.\nWird von CBR, VBR und VBR_LAT verwendet."
38
AMF.H264.QP.Maximum="Maximale QP"
39
+AMF.H264.QP.Maximum.Description="Größter QP wert der in einem Bild verwendet werden darf.\nWird von CBR, VBR und VBR_LAT verwendet."
40
AMF.H264.QP.IFrame="I-Einzelbild QP"
41
+AMF.H264.QP.IFrame.Description="Festgelegter QP wert der für I-Bilder verwendet wird.\nNiedriger = größere Datei, bessere Qualität. Höher = Kleinere Datei, schlechtere Qualität.\nDer QP wert für I-Bilder sollte gleich oder höher als der für P- und B-Bilder sein.\nWird von CQP verwendet."
42
AMF.H264.QP.PFrame="P-Einzelbild QP"
43
+AMF.H264.QP.PFrame.Description="Festgelegter QP wert der für P-Bilder verwendet wird.\nNiedriger = größere Datei, bessere Qualität. Höher = Kleinere Datei, schlechtere Qualität.\nDer QP wert für P-Bilder sollte gleich oder höher als der für B-Bilder sein.\nWird von CQP verwendet."
44
AMF.H264.QP.BFrame="B-Einzelbild QP"
45
+AMF.H264.QP.BFrame.Description="Festgelegter QP wert der für B-Bilder verwendet wird.\nNiedriger = größere Datei, bessere Qualität. Höher = Kleinere Datei, schlechtere Qualität.\nWird von CQP verwendet."
46
AMF.H264.QP.BPictureDelta="B-Bild Delta QP"
47
+AMF.H264.QP.BPictureDelta.Description="Delta QP wert zum letzten nicht-Referenz B-Bild."
48
AMF.H264.QP.ReferenceBPictureDelta="Referenz B-Bild Delta QP"
49
+AMF.H264.QP.ReferenceBPictureDelta.Description="Delta QP wert zum letzten Referenz B-Bild."
50
+AMF.H264.VBVBuffer="VBV Buffer"
51
+AMF.H264.VBVBuffer.Description="Welche methode genutzt werden soll um die VBV-Puffergröße zu bestimmen:\n- 'Automatisch' errechnet diese mithilfe einer Strengeneinschränkung,\n- 'Manuell' erlaubt es dem Nutzer die Größe zu kontrollieren.\n
52
+VBV (Videopufferungsverifizierer) Puffer wird von verschiedenen Ratenkontrollmethoden genutzt um die gesamte Bitrate innerhalb der Begrenzungen zu halten."
53
+AMF.H264.VBVBuffer.Strictness="VBV Buffer Genauigkeit"
54
+AMF.H264.VBVBuffer.Strictness.Description="Wie streng der VBV Buffer sein soll, wobei 100% fast exakt die Zielbitrate und 0% komplett unbeschränkt ist."
55
+AMF.H264.VBVBuffer.Size="VBV Buffer Größe"
56
+AMF.H264.VBVBuffer.Size.Description="Die Größe des VBV Buffers der für die Bitratenkontrollen in einer Sequenz verwendet wird.\nEine kleine Größe ergibt eine fast perfekte Übereinstimmung mit der Bitrate aber hat einen größeren Performanzeinfluss.\nDie ideale (100% streng) VBV Buffer Größe ist Bitrate/Framerate."
57
+AMF.H264.VBVBuffer.Fullness="VBV Buffer Füllung"
58
+AMF.H264.VBVBuffer.Fullness.Description="Wie voll der VBV Buffer anfangs ist, hat nur einen Effekt auf die erste Sequenz beim codieren."
59
AMF.H264.FillerData="Füllungsdaten"
60
+AMF.H264.FillerData.Description="Füllungsdaten sind leere/invalide Daten die der Decodierer ignoriert.\nWenn aktiv und CBR verwendet wird, dann wird der Codierer den verbleibenden Platz in einer Sequenz mit diesen Daten füllen."
61
AMF.H264.FrameSkipping="Einzelbildüberspringung"
62
+AMF.H264.FrameSkipping.Description="Einzelbildüberspringung erlaubt es dem Codierer selektiv Bilder auszulassen sollten diese zu ähnlich sein oder zu lange zum codieren brauchen.\nSofern dies aktiv ist nutzt die Ausgabe Variable Frameraten, was die meiste Bearbeitungssoftware nicht unterstützt."
63
AMF.H264.EnforceHRDCompatibility="Erzwinge HRD Kompatiblität"
64
-AMF.H264.DeblockingFilter="Entblockungsfilter"
65
-AMF.H264.ScanType="Abtasttyp"
66
-AMF.H264.ScanType.Progressive="Progressiv"
67
-AMF.H264.ScanType.Interlaced="Interlaced"
68
+AMF.H264.EnforceHRDCompatibility.Description="Erzwinge Hypothetischer-Referenz-Decodierer Limitierungen welches die maximale Änderung des QP werts innerhalb eines Bildes begrenzt.\nNicht empfohlen für Aufname oder Streamen und sollte nur verwendet werden sofern das Ziel sehr alte Geräte mit einem Softwarereferenz Decodierer sind."
69
+AMF.H264.MaximumAccessUnitSize="Maximale Zugriffseinheitsgröße"
70
+AMF.H264.MaximumAccessUnitSize.Description="Größte Größe einer Zugriffseinheit für einen NAL. Ein Wert von 0 erlaubt es dem Codierer die beste Größte zu wählen."
71
+AMF.H264.KeyframeInterval="Schlüsselbilderintervall"
72
+AMF.H264.KeyframeInterval.Description="Wie viele Sekunden sollen zwischen nicht-auslassbaren Bildern sein.\nKontrolliert auf die Größe einer Sequenz (GOP)."
73
+AMF.H264.IDRPeriod="IDR Zeitraum"
74
+AMF.H264.IDRPeriod.Description="Wie viele Bilder sollen zwischen nicht-auslassbaren Bildern sein.\nKontrolliert auf die Größe einer Sequenz (GOP)."
75
+AMF.H264.HeaderInsertionSpacing="Dateikopfeinfügungsabstand"
76
+AMF.H264.HeaderInsertionSpacing.Description="Wie viele Bilder zwischen NAL-kopfzeilen sein sollen. Es wird nicht empfohlen dies von 0 (automatisch) zu ändern."
77
AMF.H264.BPicture.Pattern="B-Bild Muster"
78
+AMF.H264.BPicture.Pattern.Description="Wie viele B-Bilder sollen erlaubt sein für das codieren. Dies hat einen positiven Einfluss auf Qualität und einen negativen Einfluss auf Performanz.\nWird nur von der 2. und 3. Generation an VCE-Karten unterstützt."
79
AMF.H264.BPicture.Reference="B-Bild Referenz"
80
-AMF.H264.GOPSize="GOP Größe"
81
+AMF.H264.BPicture.Reference.Description="Erlaube B-Bilder andere B-Bilder zu verwenden.\nSehr großer Einfluss auf Performanz, wenig Einfluss auf Qualität."
82
+AMF.H264.DeblockingFilter="Entblockungsfilter"
83
+AMF.H264.DeblockingFilter.Description="Setze die Markierung dass der Decodierer einen Entblockungsfilter verwenden darf."
84
+AMF.H264.SlicesPerFrame="Slices pro Frame"
85
+AMF.H264.SlicesPerFrame.Description="Benutze eine feste anzahl an Schnitten anstatt einer dynamischen für das codieren.\nKann mit größeren Auflösungen und Frameraten helfen da dies dem Codierer erlaubt mehr Daten mit dem selben Profil-level zu speichern, hat aber oft einen negativen Effekt auf die Qualität."
86
+AMF.H264.IntraRefreshNumMBsPerSlot="Intra-Refresh Anzahl der Makroblöcke pro Slot"
87
+AMF.H264.IntraRefreshNumMBsPerSlot.Description="Wie viele Makroblöcke sollen pro Slot in der Intra-Refresh-Kodierung erlaubt sein?\nIntra-Refresh-Kodierung erlaubt schnelleres Durchsuchen und decodieren auf Kosten einer höheren Bitrate, da zusätzliche Daten gespeichert werden.\nBeim Streamen auf der Standardeinstellung lassen."
88
+AMF.H264.ScanType="Abtastverfahren"
89
+AMF.H264.ScanType.Description="Welches Abtastverfahren verwendet werden soll. Sollte immer 'Progressiv' sein."
90
+AMF.H264.ScanType.Progressive="Progressiv"
91
+AMF.H264.ScanType.Interlaced="Zeilensprung"
92
+AMF.H264.QualityPreset="Qualitätsvoreinstellung"
93
+AMF.H264.QualityPreset.Description="Welche Qualitätsvoreinstellungen AMF versuchen soll zu verwenden:\n- 'Geschwindigkeit' ist der schnellste aber hat die schlechteste Qualität,\n- 'Balanciert' ist zwischen 'Geschwindigkeit' und 'Qualität' und ergibt eine großartige balance zwischen beiden,\n- 'Qualität' gibt die beste Qualität für eine gegebene bitrate."
94
+AMF.H264.QualityPreset.Speed="Geschwindigkeit"
95
+AMF.H264.QualityPreset.Balanced="Ausgeglichen"
96
+AMF.H264.QualityPreset.Quality="Qualität"
97
+AMF.H264.MotionEstimation="Bewegungsschätzung"
98
+AMF.H264.MotionEstimation.Description="Bewegungsschätzung erlaubt des dem Codierer die gebrauchte Bitrate zu reduzieren durch das herausfinden wo ein Pixel hinbewegt wurde."
99
+AMF.H264.MotionEstimation.None="Keine"
100
+AMF.H264.MotionEstimation.Half="Halb-Pixel"
101
+AMF.H264.MotionEstimation.Quarter="Viertel-Pixel"
102
+AMF.H264.MotionEstimation.Both="Halb- & Viertel-Pixel"
103
AMF.H264.CABAC="Kontextbasierende adaptive Binäre Arithmetische Kodierung (CABAC)"
104
-AMF.H264.DebugTracing="Debug Tracing"
105
+AMF.H264.CABAC.Description="Benutze CABAC (Kontextbasierende Adaptive Binäre Arithmetische Kodierung) anstatt von CALV.\nKein Einfluss auf Qualität aber hilft bei der Kompression. Im Durschnitt ist eine Verbesserung von 5% zu erwarten."
106
AMF.H264.MemoryType="Speichertyp"
107
-AMF.H264.ComputeType="Compute Typ"
108
+AMF.H264.MemoryType.Description="Wie sollen Bilder bevor der Übertragung zum Codierer gespeichert werden:\n- 'Automatisch' wählt die beste verfügbare Speicher-methode aus,\n- Host verwendet Ram,\n- DirectX 9 verwendet DirectX Texturflächen,\n- DirectX 11 verwendet DirectX Texturflächen,\n- OpenGL verwendet OpenGL Texturflächen.\n\nHost ist gut genug für die meisten Systeme, aber DirectX kann gelegentlich bei hoher Last helfen."
109
+AMF.H264.Device="Gerät"
110
+AMF.H264.Device.Description="Welches Gerät für das codieren verwendet werden soll.\nBenötigt einen anderen Speichertyp als 'Host'."
111
+AMF.H264.UseOpenCL="Benutze OpenCL"
112
+AMF.H264.UseOpenCL.Description="Soll OpenCL verwendet werden um Einzelbilder zum Codierer zu senden?"
113
AMF.H264.SurfaceFormat="Oberflächenformat"
114
-
115
-AMF.H264Advanced.Name="H264 Encoder [Erweitert] (AMD Advanced Media Framework)"
116
-AMF.H264Advanced.Reset="Zurücksetzen auf Standard"
117
-AMF.H264Advanced.Update="Werte aus AMF lesen (Sofern diese auf Standard/-1 sind)"
118
-AMF.H264Advanced.MaxLTRFrames="Maximale LTR Bilder"
119
-AMF.H264Advanced.VBVBuffer.Size="VBV Puffergröße (bits)"
120
-AMF.H264Advanced.VBVBuffer.Fullness="Anfängliche VBV Pufferfüllung"
121
-AMF.H264Advanced.MaxAUSize="Maximale AU Größe (bits)"
122
-AMF.H264Advanced.HeaderInsertionSpacing="Kopfzeileneinfügungsabstand (Bilder)"
123
-AMF.H264Advanced.IDRPeriod="Schlüsselbild Periode (Bilder)"
124
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory Per Slot In Macroblocks (in MB)"
125
-AMF.H264Advanced.SlicesPerFrame="Slices pro Frame"
126
-AMF.H264Advanced.MotionEstimation="Bewegungsschätzung"
127
-AMF.H264Advanced.MotionEstimation.None="Keine"
128
-AMF.H264Advanced.MotionEstimation.Half="Nur Halb-Pixel"
129
-AMF.H264Advanced.MotionEstimation.Quarter="Nur Viertel-Pixel"
130
-AMF.H264Advanced.MotionEstimation.Both="Beide"
131
-
132
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
133
-AMF.H264Simple.Preset="Preset"
134
-AMF.H264Simple.Preset.Recording="Aufnahme"
135
-AMF.H264Simple.Preset.Twitch="Twitch"
136
-AMF.H264Simple.Preset.YouTube="YouTube"
137
-AMF.H264Simple.Preset.HighQuality="Hohe Qualität"
138
-AMF.H264Simple.Preset.Indistinguishable="Ununterscheidbar"
139
-AMF.H264Simple.Preset.Lossless="Verlustfrei"
140
-AMF.H264Simple.KeyframeInterval="Keyframe Periode (Sekunden)"
141
-AMF.H264Simple.UseCustomBufferSize="Verwende benutzerdefinierte Puffergröße"
142
-AMF.H264Simple.CustomBufferSize="Puffergröße (kbit/s)"
143
-AMF.H264Simple.CustomBufferFullness="Anfängliche Pufferfüllung"
144
-AMF.H264Simple.UseCustomGOPSize="Benutzerdefinierte GOP Größe"
145
-AMF.H264Simple.ShowAdvancedParameters="Zeige Erweiterte Parameter"
146
-AMF.H264Simple.ShowExpertParameters="Expertenparameter anzeigen"
147
-
148
+AMF.H264.SurfaceFormat.Description="Welches Oberflächenformat für das Codieren verwendet werden soll.\nNur NV12 wird nativ unterstützt, alle anderen müssen konvertiert werden."
149
+AMF.H264.View="Ansichtsmodus"
150
+AMF.H264.View.Description="Welche Einstellungen sichtbar sein sollen. Hilfe mit Einstellungen wird abgelehnt sofern 'Experte' oder 'Meister' als Ansichtsmodus verwendet wird."
151
+AMF.H264.View.Basic="Grundlegend"
152
+AMF.H264.View.Advanced="Erweitert"
153
+AMF.H264.View.Expert="Experte"
154
+AMF.H264.View.Master="Meister"
155
+AMF.H264.UnlockProperties="Entsperre Einstellungen"
156
+AMF.H264.UnlockProperties.Description="Entsperre einige Einstellungen so dass diese die volle Reichweite haben anstatt nur eine begrenzte."
157
+AMF.H264.Debug="Debug"
158
+AMF.H264.Debug.Description="Aktiviere erweiterte debug nachrichten, sollte aktiv sein wenn man Hilfe erwartet mit diesem encoder."
159
AMF.Util.Default="Standard"
160
AMF.Util.Automatic="Automatisch"
161
-AMF.Util.Toggle.Disabled="Aus"
162
-AMF.Util.Toggle.Enabled="An"
163
-
164
+AMF.Util.Manual="Manuell"
165
+AMF.Util.Toggle.Disabled="Deaktiviert"
166
+AMF.Util.Toggle.Enabled="Aktiviert"
167
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/el-GR.ini
Added
3
1
2
+AMF.H264.Profile="Προφίλ"
3
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/en-US.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/en-US.ini
Changed
173
1
2
-# Shared
3
-AMF.H264.Usage="Usage Type"
4
+# Presets
5
+AMF.H264.Preset="Preset"
6
+AMF.H264.Preset.Recording="Recording"
7
+AMF.H264.Preset.HighQuality="High Quality"
8
+AMF.H264.Preset.Indistinguishable="Indistinguishable"
9
+AMF.H264.Preset.Lossless="Lossless"
10
+AMF.H264.Preset.Twitch="Twitch"
11
+AMF.H264.Preset.YouTube="YouTube"
12
+# Static Properties
13
+AMF.H264.Usage="Usage"
14
+AMF.H264.Usage.Description="What usage AMF should be tuned for:\n- 'Transcoding' is general purpose transcoding (recommended),\n- 'Ultra Low Latency' is for really low latency encoding,\n- 'Low Latency' is similar to above with a slightly higher latency.\nStreaming only supports 'Transcoding', all other values can be used for recording."
15
AMF.H264.Usage.Transcoding="Transcoding"
16
AMF.H264.Usage.UltraLowLatency="Ultra Low Latency"
17
AMF.H264.Usage.LowLatency="Low Latency"
18
-AMF.H264.Usage.Webcam="Webcam"
19
-AMF.H264.QualityPreset="Quality Preset"
20
-AMF.H264.QualityPreset.Speed="Speed"
21
-AMF.H264.QualityPreset.Balanced="Balanced"
22
-AMF.H264.QualityPreset.Quality="Quality"
23
AMF.H264.Profile="Profile"
24
+AMF.H264.Profile.Description="Which H.264 Profile to use for encoding:\n- 'Baseline' has the widest support,\n- 'Main' is supported by 95% of devices (recommended),\n- 'High' is only supported by high-end devices."
25
AMF.H264.ProfileLevel="Profile Level"
26
+AMF.H264.ProfileLevel.Description="Which H.264 Profile Level to use for encoding:\n- 'Automatic' calculates the best profile level for the given Frame Rate and Frame Size,\n- '4.1' supports 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' supports 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' supports 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' supports 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' supports 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
27
+AMF.H264.MaximumLTRFrames="Maximum LTR Frames"
28
+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.\nThis can have a positive effect on quality when B-Pictures are not support or wanted.\nLTR Frames can't be used with B-Pictures and the encoder will disable B-Pictures if these are used."
29
+# Rate Control Properties
30
AMF.H264.RateControlMethod="Rate Control Method"
31
+AMF.H264.RateControlMethod.Description="What rate control method should be used:\n- CQP assigns fixed I-/P-/B-Frame QP (Quantization Parameter) values,\n- CBR stays at the given Target Bitrate (using Filler Data) (recommended for streaming),\n- VBR stays below the given Peak Bitrate,\n- VBR_LAT stays close to the Target Bitrate if GPU latency and load allow for it, otherwise will use higher bitrate (recommended for recording).\nAll Methods but CQP use Minimum and Maximum QP (Quantization Parameter) constraints."
32
AMF.H264.RateControlMethod.CQP="Constant QP (CQP)"
33
AMF.H264.RateControlMethod.CBR="Constant Bitrate (CBR)"
34
AMF.H264.RateControlMethod.VBR.Peak="Variable Bitrate (Peak Constrained) (VBR)"
35
AMF.H264.RateControlMethod.VBR.Latency="Variable Bitrate (Latency Constrained) (VBR_LAT)"
36
AMF.H264.Bitrate.Target="Target Bitrate"
37
+AMF.H264.Bitrate.Target.Description="Bitrate to attempt to achieve in the overall sequence.\nUsed by CBR and VBR_LAT."
38
AMF.H264.Bitrate.Peak="Peak Bitrate"
39
+AMF.H264.Bitrate.Peak.Description="Bitrate to attempt to maximally peak to in the overall sequence.\nUsed by VBR and VBR_LAT."
40
AMF.H264.QP.Minimum="Minimum QP"
41
+AMF.H264.QP.Minimum.Description="Lowest QP (Quantization Parameter) value to use in a frame.\nUsed by CBR, VBR and VBR_LAT."
42
AMF.H264.QP.Maximum="Maximum QP"
43
+AMF.H264.QP.Maximum.Description="Highest QP (Quantization Parameter) value to use in a frame.\nUsed by CBR, VBR and VBR_LAT."
44
AMF.H264.QP.IFrame="I-Frame QP"
45
+AMF.H264.QP.IFrame.Description="Fixed QP (Quantization Parameter) value to use for I-Frames.\nLower = Bigger File, Better Quality. Higher = Smaller File, Worse Quality.\nI-Frame QP should be at or higher than P- and B-Frame QP.\nUsed by CQP."
46
AMF.H264.QP.PFrame="P-Frame QP"
47
+AMF.H264.QP.PFrame.Description="Fixed QP (Quantization Parameter) value to use for P-Frames.\nLower = Bigger File, Better Quality. Higher = Smaller File, Worse Quality.\nP-Frame QP should be at or higher than B-Frame QP.\nUsed by CQP."
48
AMF.H264.QP.BFrame="B-Frame QP"
49
+AMF.H264.QP.BFrame.Description="Fixed QP (Quantization Parameter) value to use for B-Frames.\nLower = Bigger File, Better Quality. Higher = Smaller File, Worse Quality.\nUsed by CQP."
50
AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
51
+AMF.H264.QP.BPictureDelta.Description="Delta QP (Quantization Parameter) value to the last non-reference B-Picture."
52
AMF.H264.QP.ReferenceBPictureDelta="Reference B-Picture Delta QP"
53
+AMF.H264.QP.ReferenceBPictureDelta.Description="Delta QP (Quantization Parameter) value to the last reference B-Picture."
54
+AMF.H264.VBVBuffer="VBV Buffer"
55
+AMF.H264.VBVBuffer.Description="What method should be used to determine the VBV Buffer Size:\n- 'Automatic' calculates the size using a strictness constraint,\n- 'Manual' allows the user to control the size.\nVBV (Video Buffering Verifier) Buffer is used by certain Rate Control Methods to keep the overall bitrate within the given constraints."
56
+AMF.H264.VBVBuffer.Strictness="VBV Buffer Strictness"
57
+AMF.H264.VBVBuffer.Strictness.Description="How strict the VBV Buffer is, with 100% being almost exactly the targetted Bitrate and 0% being unrestricted."
58
+AMF.H264.VBVBuffer.Size="VBV Buffer Size"
59
+AMF.H264.VBVBuffer.Size.Description="The size of the VBV Buffer which is used for Bitrate control in a sequence.\nA small size results in an almost perfect bitrate match but has a larger performance impact.\nThe ideal (100% strict) VBV Buffer size is Bitrate/Framerate."
60
+AMF.H264.VBVBuffer.Fullness="VBV Buffer Fullness"
61
+AMF.H264.VBVBuffer.Fullness.Description="How full the VBV Buffer initially is, will only affect the initial sequence of encoding."
62
AMF.H264.FillerData="Filler Data"
63
+AMF.H264.FillerData.Description="Filler Data is empty/invalid data that the decoder ignores.\nIf enabled and using CBR the encoder will fill up the remaining space in a sequence up with this data."
64
AMF.H264.FrameSkipping="Frame Skipping"
65
+AMF.H264.FrameSkipping.Description="Frame Skipping allows the encoder to selectively skip over frames if they are very similar or would take too long to encode.\nEnabling this will make the output file be in variable framerate, which most editing software does not support."
66
AMF.H264.EnforceHRDCompatibility="Enforce HRD Compatibility"
67
+AMF.H264.EnforceHRDCompatibility.Description="Enforce Hypothetical Reference Decoder restrictions which limit the maximum QP value change within a frame.\nNot recommended for recording or streaming and should only be used for targeting very old devices that only have reference software decoders."
68
+AMF.H264.MaximumAccessUnitSize="Maximum Access Unit Size"
69
+AMF.H264.MaximumAccessUnitSize.Description="Largest Size of an Access Unit for a NAL. A value of 0 allows the encoder to pick the best one."
70
+# Picture Control Properties
71
+AMF.H264.KeyframeInterval="Keyframe Interval"
72
+AMF.H264.KeyframeInterval.Description="How many seconds should be between non-droppable Frames.\nAlso controls sequence(GOP) size."
73
+AMF.H264.IDRPeriod="IDR Period"
74
+AMF.H264.IDRPeriod.Description="How many frames should be between non-droppable Frames.\nAlso controls sequence(GOP) size."
75
+AMF.H264.HeaderInsertionSpacing="Header Insertion Spacing"
76
+AMF.H264.HeaderInsertionSpacing.Description="How many frames should be between NAL headers. It is not recommended to change this from 0 (automatic)."
77
+AMF.H264.BPicture.Pattern="B-Picture Pattern"
78
+AMF.H264.BPicture.Pattern.Description="How many B-Pictures should be allowed for encoding, has a positive impact on quality and negative impact on performance.\nSupported by 2nd and 3rd Generation VCE cards."
79
+AMF.H264.BPicture.Reference="B-Picture Reference"
80
+AMF.H264.BPicture.Reference.Description="Allow B-Pictures to reference other B-Pictures additionally to P- and I-Frames.\nHuge performance impact, low quality improvement."
81
AMF.H264.DeblockingFilter="Deblocking Filter"
82
+AMF.H264.DeblockingFilter.Description="Sets the flag that the decoder is allowed to use a Deblocking Filter for the encoded stream."
83
+AMF.H264.SlicesPerFrame="Slices Per Frame"
84
+AMF.H264.SlicesPerFrame.Description="Use fixed slice encoding instead of dynamic slice encoding.\nCan help with large resolutions and framerates as it allows for more data to be stored in the same profile level but will have a negative effect on quality most of the time."
85
+AMF.H264.IntraRefreshNumMBsPerSlot="Intra-Refresh Number of Macroblocks Per Slot"
86
+AMF.H264.IntraRefreshNumMBsPerSlot.Description="How many Macroblocks should be allowed per slot in Intra-Refresh encoding.\nIntra-Refresh encoding allows faster seeking and decoding at the cost of a higher bitrate due to additional data being stored.\nLeave at default for streaming."
87
+# Miscellaneous Properties
88
AMF.H264.ScanType="Scan Type"
89
+AMF.H264.ScanType.Description="Which scanning method to use, always leave this on 'Progressive'."
90
AMF.H264.ScanType.Progressive="Progressive"
91
AMF.H264.ScanType.Interlaced="Interlaced"
92
-AMF.H264.BPicture.Pattern="B-Picture Pattern"
93
-AMF.H264.BPicture.Reference="B-Picture Reference"
94
-AMF.H264.GOPSize="GOP Size"
95
-AMF.H264.CABAC="Context Adaptive Binary Arithmetic Coding (CABAC)"
96
-AMF.H264.DebugTracing="Debug Tracing"
97
+AMF.H264.QualityPreset="Quality Preset"
98
+AMF.H264.QualityPreset.Description="What Quality Preset AMF should attempt to target:\n- 'Speed' is the fastest but has the worst quality,\n- 'Balanced' is between 'Speed' and 'Quality' and offers a great balance between both,\n- 'Quality' gives the best quality for a given bitrate."
99
+AMF.H264.QualityPreset.Speed="Speed"
100
+AMF.H264.QualityPreset.Balanced="Balanced"
101
+AMF.H264.QualityPreset.Quality="Quality"
102
+AMF.H264.MotionEstimation="Motion Estimation"
103
+AMF.H264.MotionEstimation.Description="Motion Estimation allows the encoder to reduce needed bitrate by estimating where a pixel went."
104
+AMF.H264.MotionEstimation.None="None"
105
+AMF.H264.MotionEstimation.Half="Half-Pixel"
106
+AMF.H264.MotionEstimation.Quarter="Quarter-Pixel"
107
+AMF.H264.MotionEstimation.Both="Half- & Quarter-Pixel"
108
+AMF.H264.CABAC="CABAC"
109
+AMF.H264.CABAC.Description="Use CABAC (Context Adaptive Binary Arithmetic Coding) instead of CALV.\nNo impact on Quality but helps with compression. On average, 5% better compression can be expected."
110
+# System Properties
111
AMF.H264.MemoryType="Memory Type"
112
-AMF.H264.ComputeType="Compute Type"
113
+AMF.H264.MemoryType.Description="How Frames should be stored before submission to the encoder:\n- 'Automatic' picks the best available memory backend type available,\n- Host uses system memory,\n- DirectX 9 uses DirectX surfaces for submission,\n- DirectX 11 uses DirectX surfaces for submission,\n- OpenGL uses OpenGL surfaces for submission.\n\n'Host' is good enough for most systems but DirectX can occasionally help with high load situations."
114
+AMF.H264.Device="Device"
115
+AMF.H264.Device.Description="Which Device to use for encoding.\nRequires Memory Type to not be set to 'Host'."
116
+AMF.H264.UseOpenCL="Use OpenCL"
117
+AMF.H264.UseOpenCL.Description="Should the Encoder use OpenCL to submit the individual frames?"
118
AMF.H264.SurfaceFormat="Surface Format"
119
-
120
-# Advanced Interface
121
-AMF.H264Advanced.Name="H264 Encoder [Advanced] (AMD Advanced Media Framework)"
122
-AMF.H264Advanced.Reset="Reset to Defaults"
123
-AMF.H264Advanced.Update="Update Values from AMF (if at default/-1)"
124
-AMF.H264Advanced.MaxLTRFrames="Maximum LTR Frames"
125
-AMF.H264Advanced.VBVBuffer.Size="VBV Buffer Size (bits)"
126
-AMF.H264Advanced.VBVBuffer.Fullness="Initial VBV Buffer Fullness"
127
-AMF.H264Advanced.MaxAUSize="Maximum AU Size (bits)"
128
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
129
-AMF.H264Advanced.IDRPeriod="Keyframe Period (Frames)"
130
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory Per Slot In Macroblocks (in MB)"
131
-AMF.H264Advanced.SlicesPerFrame="Slices Per Frame"
132
-AMF.H264Advanced.MotionEstimation="Motion Estimation"
133
-AMF.H264Advanced.MotionEstimation.None="None"
134
-AMF.H264Advanced.MotionEstimation.Half="Only Half-Pixel"
135
-AMF.H264Advanced.MotionEstimation.Quarter="Only Quarter-Pixel"
136
-AMF.H264Advanced.MotionEstimation.Both="Both"
137
-
138
-# Simple Interface
139
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
140
-AMF.H264Simple.Preset="Preset"
141
-AMF.H264Simple.Preset.Recording="Recording"
142
-AMF.H264Simple.Preset.Twitch="Twitch"
143
-AMF.H264Simple.Preset.YouTube="YouTube"
144
-AMF.H264Simple.Preset.HighQuality="High Quality"
145
-AMF.H264Simple.Preset.Indistinguishable="Indistinguishable"
146
-AMF.H264Simple.Preset.Lossless="Lossless"
147
-AMF.H264Simple.KeyframeInterval="Keyframe Interval (Seconds)"
148
-AMF.H264Simple.UseCustomBufferSize="Use Custom Buffer Size"
149
-AMF.H264Simple.CustomBufferSize="Buffer Size (kbit/s)"
150
-AMF.H264Simple.CustomBufferFullness="Initial Buffer Fullness"
151
-AMF.H264Simple.UseCustomGOPSize="Use Custom GOP Size"
152
-AMF.H264Simple.ShowAdvancedParameters="Show Advanced Parameters"
153
-AMF.H264Simple.ShowExpertParameters="Show Expert Parameters"
154
-
155
+AMF.H264.SurfaceFormat.Description="What Surface Format to use for encoding.\nOnly NV12 is natively supported, other types require conversion."
156
+AMF.H264.View="View Mode"
157
+AMF.H264.View.Description="What properties should be visible. You will receive no support when using 'Expert' or 'Master' view mode."
158
+AMF.H264.View.Basic="Basic"
159
+AMF.H264.View.Advanced="Advanced"
160
+AMF.H264.View.Expert="Expert"
161
+AMF.H264.View.Master="Master"
162
+AMF.H264.UnlockProperties="Unlock Properties"
163
+AMF.H264.UnlockProperties.Description="Unlock certain properties to their full range instead of limiting them to a partial range."
164
+AMF.H264.Debug="Debug"
165
+AMF.H264.Debug.Description="Enable additional Debug logging, should be active whenever you need support with this encoder."
166
# Utility
167
AMF.Util.Default="Default"
168
AMF.Util.Automatic="Automatic"
169
+AMF.Util.Manual="Manual"
170
AMF.Util.Toggle.Disabled="Disabled"
171
AMF.Util.Toggle.Enabled="Enabled"
172
\ No newline at end of file
173
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/es-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/es-ES.ini
Changed
128
1
2
-AMF.H264.Usage="Tipo de uso"
3
+AMF.H264.Preset="Preajuste"
4
+AMF.H264.Preset.Recording="Grabación"
5
+AMF.H264.Preset.HighQuality="Alta Calidad"
6
+AMF.H264.Preset.Indistinguishable="Indistinguible"
7
+AMF.H264.Preset.Lossless="Sin pérdidas"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Uso"
11
AMF.H264.Usage.Transcoding="Codificación"
12
AMF.H264.Usage.UltraLowLatency="Latencia ultra baja"
13
AMF.H264.Usage.LowLatency="Latencia baja"
14
-AMF.H264.Usage.Webcam="Webcam"
15
-AMF.H264.QualityPreset="Calidad del perfil"
16
-AMF.H264.QualityPreset.Speed="Velocidad"
17
-AMF.H264.QualityPreset.Balanced="Equilibrado"
18
-AMF.H264.QualityPreset.Quality="Calidad"
19
AMF.H264.Profile="Perfil del Códec"
20
AMF.H264.ProfileLevel="Nivel del Perfil"
21
+AMF.H264.ProfileLevel.Description="Nivel de perfil H.264 a utilizar para la codificación:\n- 'Automático' calcula el mejor nivel de perfil para cierta velocidad y tamaño de fotogramas,\n- '4.1' soporta 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' soporta 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' soporta 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' soporta 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' soporta 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
22
+AMF.H264.MaximumLTRFrames="Fotogramas LTR máximos"
23
AMF.H264.RateControlMethod="Método de control del flujo"
24
AMF.H264.RateControlMethod.CQP="QP constante (CQP)"
25
AMF.H264.RateControlMethod.CBR="Flujo constante (CBR)"
26
-AMF.H264.RateControlMethod.VBR.Peak="Flujo variable (pico restringido)(VBR)"
27
+AMF.H264.RateControlMethod.VBR.Peak="Flujo variable (pico restringido) (VBR)"
28
AMF.H264.RateControlMethod.VBR.Latency="Flujo variable (latencia restringida) (VBR_LAT)"
29
AMF.H264.Bitrate.Target="Tasa de bits deseada"
30
AMF.H264.Bitrate.Peak="Pico de tasa de bits"
31
32
AMF.H264.QP.PFrame="P-Frame QP"
33
AMF.H264.QP.BFrame="B-Frame QP"
34
AMF.H264.QP.BPictureDelta="QP Delta en B-Pictures"
35
-AMF.H264.QP.ReferenceBPictureDelta="Referencia B-Picture Delta QP"
36
+AMF.H264.QP.BPictureDelta.Description="QP Delta del último B-Picture que no es de referencia."
37
+AMF.H264.QP.ReferenceBPictureDelta="QP Delta en B-Pictures de referencia"
38
+AMF.H264.QP.ReferenceBPictureDelta.Description="QP Delta del último B-Picture de referencia."
39
+AMF.H264.VBVBuffer="Buffer VBV"
40
+AMF.H264.VBVBuffer.Strictness="Estricticidad del Buffer VBV"
41
+AMF.H264.VBVBuffer.Size="Tamaño de buffer VBV"
42
+AMF.H264.VBVBuffer.Fullness="Amplitud del Buffer VBV"
43
AMF.H264.FillerData="Datos de relleno"
44
AMF.H264.FrameSkipping="Omisión de fotogramas"
45
AMF.H264.EnforceHRDCompatibility="Forzar compatibilidad con HRD"
46
-AMF.H264.DeblockingFilter="Filtro de desbloqueo"
47
+AMF.H264.MaximumAccessUnitSize="Tamaño máximo de la unidad de acceso"
48
+AMF.H264.KeyframeInterval="Intervalo de fotogramas clave"
49
+AMF.H264.IDRPeriod="Periodo IDR"
50
+AMF.H264.HeaderInsertionSpacing="Espaciado de inserción de cabeceras (Frames)"
51
+AMF.H264.BPicture.Pattern="Patron de B-Pictures"
52
+AMF.H264.BPicture.Reference="B-Pictures de referencia"
53
+AMF.H264.DeblockingFilter="Filtro de eliminación de bloques"
54
+AMF.H264.SlicesPerFrame="Porciones por fotograma"
55
+AMF.H264.IntraRefreshNumMBsPerSlot="Numero de macrobloques intra-refresh por Slot"
56
AMF.H264.ScanType="Tipo de escaneo"
57
AMF.H264.ScanType.Progressive="Progresivo"
58
AMF.H264.ScanType.Interlaced="Entrelazado"
59
-AMF.H264.BPicture.Pattern="Patron de B-Pictures"
60
-AMF.H264.BPicture.Reference="Referencia de B-Pictures"
61
-AMF.H264.GOPSize="Tamaño del GOP"
62
+AMF.H264.QualityPreset="Calidad del perfil"
63
+AMF.H264.QualityPreset.Speed="Velocidad"
64
+AMF.H264.QualityPreset.Balanced="Equilibrado"
65
+AMF.H264.QualityPreset.Quality="Calidad"
66
+AMF.H264.MotionEstimation="Estimación de movimiento"
67
+AMF.H264.MotionEstimation.Description="Estimación de movimiento permite al codificador reducir el flujo de datos necesario estimando de donde vienen los pixeles."
68
+AMF.H264.MotionEstimation.None="Ninguno"
69
+AMF.H264.MotionEstimation.Half="Mitad de Pixel"
70
+AMF.H264.MotionEstimation.Quarter="Cuarto de Pixel"
71
+AMF.H264.MotionEstimation.Both="Mitad y cuarto de Pixel"
72
AMF.H264.CABAC="Codificación adaptativa según el contexto binario aritmético (CABAC)"
73
-AMF.H264.DebugTracing="Seguimiento de depuración"
74
+AMF.H264.CABAC.Description="Usar CABAC (Codificación aritmética binaria adaptable al contexto) en vez de CALV.\nNo afecta a la calidad pero ayuda en la compresión. De media, podemos esperar un 5% mejor compersión."
75
AMF.H264.MemoryType="Tipo de memoria"
76
-AMF.H264.ComputeType="Tipo de computación"
77
AMF.H264.SurfaceFormat="Formato de la superficie"
78
-
79
-AMF.H264Advanced.Name="H264 Encoder [Avanzado] (AMD Advanced Media Framework)"
80
-AMF.H264Advanced.Reset="Restablecer por defecto"
81
-AMF.H264Advanced.Update="Actualizar valores desde AMF (si por defecto/-1)"
82
-AMF.H264Advanced.MaxLTRFrames="Fotogramas máximos LTR"
83
-AMF.H264Advanced.VBVBuffer.Size="Tamaño del buffer VBV (bits)"
84
-AMF.H264Advanced.VBVBuffer.Fullness="Amplitud del Buffer VBV"
85
-AMF.H264Advanced.MaxAUSize="Tamaño máximo de AU (bits)"
86
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
87
-AMF.H264Advanced.IDRPeriod="Periodo IDR de fotogramas clave (en Frames)"
88
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Tamaño de Memoria Intra-Refresh en Macrobloques (en MB)"
89
-AMF.H264Advanced.SlicesPerFrame="Porciones por Frame"
90
-AMF.H264Advanced.MotionEstimation="Estimación de movimiento"
91
-AMF.H264Advanced.MotionEstimation.None="Ninguno"
92
-AMF.H264Advanced.MotionEstimation.Half="Solo la mitad"
93
-AMF.H264Advanced.MotionEstimation.Quarter="Solo un cuarto"
94
-AMF.H264Advanced.MotionEstimation.Both="Ambos"
95
-
96
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
97
-AMF.H264Simple.Preset="Ajustes Preestablecidos"
98
-AMF.H264Simple.Preset.Recording="Grabación"
99
-AMF.H264Simple.Preset.Twitch="Twitch"
100
-AMF.H264Simple.Preset.YouTube="YouTube"
101
-AMF.H264Simple.Preset.HighQuality="Alta Calidad"
102
-AMF.H264Simple.Preset.Indistinguishable="Indistinguible"
103
-AMF.H264Simple.Preset.Lossless="Sin pérdidas"
104
-AMF.H264Simple.KeyframeInterval="Intervalo de Fotogramas Clave (Segundos)"
105
-AMF.H264Simple.UseCustomBufferSize="Usar tamaño de buffer personalizado"
106
-AMF.H264Simple.CustomBufferSize="Tamaño del buffer (kbit/s)"
107
-AMF.H264Simple.CustomBufferFullness="Amplitud del Buffer inicial"
108
-AMF.H264Simple.UseCustomGOPSize="Usar tamaño del GOP personalizado"
109
-AMF.H264Simple.ShowAdvancedParameters="Mostrar parámetros avanzados"
110
-AMF.H264Simple.ShowExpertParameters="Mostrar Parametros para Expertos"
111
-
112
+AMF.H264.View="Modo de Vista"
113
+AMF.H264.View.Description="Que propiedades deben ser visibles. No recibirás soporte si usas el modo de vista 'Experto' o 'Maestro'."
114
+AMF.H264.View.Basic="Básico"
115
+AMF.H264.View.Advanced="Avanzado"
116
+AMF.H264.View.Expert="Experto"
117
+AMF.H264.View.Master="Maestro"
118
+AMF.H264.UnlockProperties="Desbloquear propiedades"
119
+AMF.H264.UnlockProperties.Description="Desbloquea ciertas propiedades a su maxima capacidad en lugar de limitarlas de forma parcial."
120
+AMF.H264.Debug="Depurar"
121
+AMF.H264.Debug.Description="Habilita el registro de información de depuración adicional, debe ser activado cuando necesites ayuda con este codificador."
122
AMF.Util.Default="Por defecto"
123
AMF.Util.Automatic="Automático"
124
+AMF.Util.Manual="Manual"
125
AMF.Util.Toggle.Disabled="Deshabilitado"
126
AMF.Util.Toggle.Enabled="Habilitado"
127
-
128
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/eu-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/eu-ES.ini
Changed
113
1
2
-AMF.H264.Usage="Erabilera"
3
+AMF.H264.Preset="Aurrezarrita"
4
+AMF.H264.Preset.Recording="Grabatzen"
5
+AMF.H264.Preset.HighQuality="Kalitate handia"
6
+AMF.H264.Preset.Indistinguishable="Sumaezina"
7
+AMF.H264.Preset.Lossless="Galerarik gabe"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Erabilpena"
11
+AMF.H264.Usage.Description="AMFrentzat zer erabilerak aukeratu behar dira:\n- 'Transcoding' oro har proposatzen da transmisiorako (gomendatua),\n- 'Ultra Low Latency' latentzia oso baxuko kodetzerako,\n- 'Low Latency' aurrekoaren antzekoa da latentzia apur bat handiagoarekin.\nStreaming bakarrik onartzen du 'Transcoding', gainerako balio guztiak erabili daitezke grabaziorako."
12
AMF.H264.Usage.Transcoding="Kodeketa"
13
AMF.H264.Usage.UltraLowLatency="Latentzia oso txikia"
14
AMF.H264.Usage.LowLatency="Latentzia txikia"
15
-AMF.H264.Usage.Webcam="Web-kamera"
16
-AMF.H264.QualityPreset="Aurrezarritako kalitatea"
17
-AMF.H264.QualityPreset.Speed="Abiadura"
18
-AMF.H264.QualityPreset.Balanced="Orekatua"
19
-AMF.H264.QualityPreset.Quality="Kalitatea"
20
AMF.H264.Profile="Profila"
21
+AMF.H264.Profile.Description="Zein H.264 profila erabili kodetzeko:\n- 'Baseline' dauka soporterik zabalena,\n- 'Main' gailuen %95ak onartzen du (gomendatua),\n- 'High' bakarrik gama handiko gailuek onartzen dute."
22
AMF.H264.ProfileLevel="Profilaren maila"
23
+AMF.H264.ProfileLevel.Description="H.264 profilaren zein maila erabili behar da kodetzeko:\n- 'Automatic' automatikoki kalkulatzen du emandako abiadura eta fotogramen tamainarako egokiena,\n- '4.1'-ek onartzen du 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2'-k onartzen du 1920x1080 60FPS, 1280x720 120FPS\n- '5.0'-k onartzen du 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1'-k onartzen du 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2'-k onartzen du 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
24
+AMF.H264.MaximumLTRFrames="Gehienezko LTR fotogramak"
25
+AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) Fotogramak aukera ematen dio kodegailuari sekuentzia baten hainbat fotograma erreferente moduan markatzeko.\nHonek kalitatean eragin positiboa izan dezake B-Pictures onartzen ez direnean.\nLTR Fotogramak ezin dira B-Pictures-ekin erabili eta kodegailuak B-Pictures-ak desgaituko ditu hauek erabiltzean."
26
AMF.H264.RateControlMethod="Emaria kontrolatzeko metodoa"
27
AMF.H264.RateControlMethod.CQP="Konstantea QP (CQP)"
28
AMF.H264.RateControlMethod.CBR="Bit emari konstantea (CBR)"
29
30
AMF.H264.QP.BFrame="B-Frame QP"
31
AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
32
AMF.H264.QP.ReferenceBPictureDelta="B-Picture Delta QP erreferentzia"
33
+AMF.H264.VBVBuffer="VBV bufferra"
34
+AMF.H264.VBVBuffer.Strictness="VBV bufferraren zorroztasuna"
35
+AMF.H264.VBVBuffer.Size="VBV bufferraren tamaina"
36
+AMF.H264.VBVBuffer.Fullness="VBV bufferraren betetasuna"
37
AMF.H264.FillerData="Datu betegarria"
38
AMF.H264.FrameSkipping="Fotogramen saltoa"
39
AMF.H264.EnforceHRDCompatibility="Behartu HRD bateragarritasuna"
40
+AMF.H264.MaximumAccessUnitSize="Sarbide unitatearen gehienezko tamaina"
41
+AMF.H264.KeyframeInterval="Gako fotogramen tartea"
42
+AMF.H264.IDRPeriod="IDR periodoa"
43
+AMF.H264.HeaderInsertionSpacing="Goiburuak txertatzeko tartea"
44
+AMF.H264.BPicture.Pattern="B-Picture eredua"
45
+AMF.H264.BPicture.Reference="B-Picture erreferentzia"
46
AMF.H264.DeblockingFilter="Desblokeoko iragazkia"
47
+AMF.H264.SlicesPerFrame="Zatiak fotogramako"
48
+AMF.H264.IntraRefreshNumMBsPerSlot="Makroblokeen barne freskatze kopura erreteneko"
49
AMF.H264.ScanType="Eskaneatze mota"
50
AMF.H264.ScanType.Progressive="Progresiboa"
51
AMF.H264.ScanType.Interlaced="Gurutzelarkatua"
52
-AMF.H264.BPicture.Pattern="B-Picture eredua"
53
-AMF.H264.BPicture.Reference="B-Picture erreferentzia"
54
-AMF.H264.GOPSize="GOP tamaina"
55
+AMF.H264.QualityPreset="Aurrezarritako kalitatea"
56
+AMF.H264.QualityPreset.Speed="Abiadura"
57
+AMF.H264.QualityPreset.Balanced="Orekatua"
58
+AMF.H264.QualityPreset.Quality="Kalitatea"
59
+AMF.H264.MotionEstimation="Mugimenduaren estimazioa"
60
+AMF.H264.MotionEstimation.None="Ezer ez"
61
+AMF.H264.MotionEstimation.Half="Pixel erdia"
62
+AMF.H264.MotionEstimation.Quarter="Pixel laurdena"
63
+AMF.H264.MotionEstimation.Both="Pixel erdia eta laurdena"
64
AMF.H264.CABAC="Testuinguru moldakorreko kodeketa bitar aritmetikoa (CABAC)"
65
-AMF.H264.DebugTracing="Arazketaren segimendua"
66
AMF.H264.MemoryType="Memoria mota"
67
-AMF.H264.ComputeType="Kalkulu mota"
68
-
69
-AMF.H264Advanced.Name="H264 kodetzailea [Advanced] (AMD Advanced Media Framework)"
70
-AMF.H264Advanced.Reset="Berrezarri balio lehenetsiak"
71
-AMF.H264Advanced.Update="Eguneratu balioak AMFtik (baldin eta lehenetsia/-1)"
72
-AMF.H264Advanced.MaxLTRFrames="Gehienezko LTR fotogramak"
73
-AMF.H264Advanced.VBVBuffer.Size="VBV bufferraren tamaina (bits)"
74
-AMF.H264Advanced.VBVBuffer.Fullness="Hasierako VBV bufferraren osotasuna"
75
-AMF.H264Advanced.MaxAUSize="AUren gehienezko tamaina (bits)"
76
-AMF.H264Advanced.HeaderInsertionSpacing="Goiburuaren txertaketa espazioa (fotogramak)"
77
-AMF.H264Advanced.IDRPeriod="Gako fotogramen periodoa (fotogramak)"
78
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Erretenen arteko Intra-Refresh memoria makrobloketan (MBak)"
79
-AMF.H264Advanced.SlicesPerFrame="Zatiak fotogramako"
80
-AMF.H264Advanced.MotionEstimation="Mugimenduaren estimazioa"
81
-AMF.H264Advanced.MotionEstimation.None="Ezer ez"
82
-AMF.H264Advanced.MotionEstimation.Half="Pixel erdia bakarrik"
83
-AMF.H264Advanced.MotionEstimation.Quarter="Pixel laurdena bakarrik"
84
-AMF.H264Advanced.MotionEstimation.Both="Biak"
85
-
86
-AMF.H264Simple.Name="H264 kodetzailea (AMD Advanced Media Framework)"
87
-AMF.H264Simple.Preset="Aurrezarrita"
88
-AMF.H264Simple.Preset.Recording="Grabatzen"
89
-AMF.H264Simple.Preset.Twitch="Twitch"
90
-AMF.H264Simple.Preset.YouTube="YouTube"
91
-AMF.H264Simple.KeyframeInterval="Fotogramen tartea (segundoak)"
92
-AMF.H264Simple.UseCustomBufferSize="Erabili buffer tamaina pertsonalizatua"
93
-AMF.H264Simple.CustomBufferSize="Buffer tamaina (kbit/s)"
94
-AMF.H264Simple.CustomBufferFullness="Hasierako bufferraren osotasuna"
95
-AMF.H264Simple.UseCustomGOPSize="Erabili GOP tamaina pertsonalizatua"
96
-AMF.H264Simple.ShowAdvancedParameters="Erakutsi parametro aurreratuak"
97
-AMF.H264Simple.ShowExpertParameters="Erakutsi adituentzako parametroak"
98
-
99
+AMF.H264.SurfaceFormat="Gainazalaren formatua"
100
+AMF.H264.View="Ikuspegia"
101
+AMF.H264.View.Basic="Oinarrizkoa"
102
+AMF.H264.View.Advanced="Aurreratua"
103
+AMF.H264.View.Expert="Aditu"
104
+AMF.H264.View.Master="Maixu"
105
+AMF.H264.UnlockProperties="Desblokeatu propietateak"
106
+AMF.H264.Debug="Garbiketa"
107
AMF.Util.Default="Lehenetsia"
108
AMF.Util.Automatic="Automatikoa"
109
+AMF.Util.Manual="Eskuz"
110
AMF.Util.Toggle.Disabled="Ezgaituta"
111
AMF.Util.Toggle.Enabled="Gaituta"
112
-
113
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/fi-FI.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/fi-FI.ini
Changed
95
1
2
-AMF.H264.Usage="Käyttötyyppi"
3
+AMF.H264.Preset="Esiasetus"
4
+AMF.H264.Preset.Recording="Tallennus"
5
+AMF.H264.Preset.HighQuality="Korkea laatu"
6
+AMF.H264.Preset.Indistinguishable="Erottamaton"
7
+AMF.H264.Preset.Lossless="Häviötön"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Käyttö"
11
AMF.H264.Usage.Transcoding="Transkoodaus"
12
AMF.H264.Usage.UltraLowLatency="Erittäin alhainen latenssi"
13
AMF.H264.Usage.LowLatency="Alhainen latenssi"
14
-AMF.H264.Usage.Webcam="Web-kamera"
15
-AMF.H264.QualityPreset="Laatuasetus"
16
-AMF.H264.QualityPreset.Speed="Nopeus"
17
-AMF.H264.QualityPreset.Balanced="Tasapainotettu"
18
-AMF.H264.QualityPreset.Quality="Laatu"
19
AMF.H264.Profile="Profiili"
20
AMF.H264.ProfileLevel="Profiilin taso"
21
AMF.H264.RateControlMethod="Rate Control -tapa"
22
23
AMF.H264.QP.BFrame="B-Frame QP"
24
AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
25
AMF.H264.QP.ReferenceBPictureDelta="Reference B-Picture Delta QP"
26
+AMF.H264.VBVBuffer="VBV-puskuri"
27
+AMF.H264.VBVBuffer.Size="VBV-puskurin koko"
28
AMF.H264.FillerData="Täyttödata"
29
AMF.H264.FrameSkipping="Ruudun ohitus"
30
AMF.H264.EnforceHRDCompatibility="Pakota HRD-yhteensopivuus"
31
+AMF.H264.BPicture.Pattern="B-Picture Pattern"
32
+AMF.H264.BPicture.Reference="B-Picture Reference"
33
AMF.H264.DeblockingFilter="Deblocking filtteri"
34
AMF.H264.ScanType="Skannaustyyppi"
35
AMF.H264.ScanType.Progressive="Progressiivinen"
36
AMF.H264.ScanType.Interlaced="Lomitettu"
37
-AMF.H264.BPicture.Pattern="B-Picture Pattern"
38
-AMF.H264.BPicture.Reference="B-Picture Reference"
39
-AMF.H264.GOPSize="GOP-koko"
40
+AMF.H264.QualityPreset="Laatuasetus"
41
+AMF.H264.QualityPreset.Speed="Nopeus"
42
+AMF.H264.QualityPreset.Balanced="Tasapainotettu"
43
+AMF.H264.QualityPreset.Quality="Laatu"
44
+AMF.H264.MotionEstimation="Liikkeen ennakointi"
45
+AMF.H264.MotionEstimation.None="Ei mitään"
46
AMF.H264.CABAC="Context Adaptive Binary Arithmetic Coding (CABAC)"
47
-AMF.H264.DebugTracing="Debug Tracing"
48
AMF.H264.MemoryType="Memory Type"
49
-AMF.H264.ComputeType="Compute Type"
50
-
51
-AMF.H264Advanced.Name="H264 Encoder [Advanced] (AMD Advanced Media Framework)"
52
-AMF.H264Advanced.Reset="Palauta oletukset"
53
-AMF.H264Advanced.Update="Päivitä arvot AMF:stä (jos oletuksena/-1)"
54
-AMF.H264Advanced.MaxLTRFrames="Maksimi LTR framet"
55
-AMF.H264Advanced.VBVBuffer.Size="VBV puskurin koko (bitteinä)"
56
-AMF.H264Advanced.VBVBuffer.Fullness="Initial VBV Buffer Fullness"
57
-AMF.H264Advanced.MaxAUSize="Maksimi AU koko (bitteinä)"
58
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
59
-AMF.H264Advanced.IDRPeriod="Keyframe Period (Frames)"
60
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory Per Slot In Macroblocks (in MB)"
61
-AMF.H264Advanced.SlicesPerFrame="Slices Per Frame"
62
-AMF.H264Advanced.MotionEstimation="Liikkeen ennakointi"
63
-AMF.H264Advanced.MotionEstimation.None="Ei mitään"
64
-AMF.H264Advanced.MotionEstimation.Half="Vain puoli-pikseli"
65
-AMF.H264Advanced.MotionEstimation.Quarter="Vain neljännes-pikseli"
66
-AMF.H264Advanced.MotionEstimation.Both="Molemmat"
67
-
68
-AMF.H264Simple.Name="H264-enkooderi (AMD Advanced Media Framework)"
69
-AMF.H264Simple.Preset="Esiasetus"
70
-AMF.H264Simple.Preset.Recording="Tallennus"
71
-AMF.H264Simple.Preset.Twitch="Twitch"
72
-AMF.H264Simple.Preset.YouTube="YouTube"
73
-AMF.H264Simple.KeyframeInterval="Keyframe-väli (sekunteina)"
74
-AMF.H264Simple.UseCustomBufferSize="Käytä mukautettua puskurin kokoa"
75
-AMF.H264Simple.CustomBufferSize="Puskurin koko (kbit/s)"
76
-AMF.H264Simple.CustomBufferFullness="Initial Buffer Fullness"
77
-AMF.H264Simple.UseCustomGOPSize="Käytä mukautettua GOP-kokoa"
78
-AMF.H264Simple.ShowAdvancedParameters="Näytä edistyneet parametrit"
79
-AMF.H264Simple.ShowExpertParameters="Show Expert Parameters"
80
-
81
+AMF.H264.SurfaceFormat="Surface Format"
82
+AMF.H264.View="Näyttötila"
83
+AMF.H264.View.Basic="Yksinkertainen"
84
+AMF.H264.View.Advanced="Kehittynyt"
85
+AMF.H264.View.Expert="Expertti"
86
+AMF.H264.View.Master="Jumalallinen"
87
+AMF.H264.UnlockProperties="Avaa ominaisuudet"
88
+AMF.H264.Debug="Debug"
89
AMF.Util.Default="Oletusarvo"
90
AMF.Util.Automatic="Automaattinen"
91
+AMF.Util.Manual="Manuaalinen"
92
AMF.Util.Toggle.Disabled="Pois käytöstä"
93
AMF.Util.Toggle.Enabled="Käytössä"
94
-
95
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/fr-FR.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/fr-FR.ini
Changed
97
1
2
-AMF.H264.Usage="Type d’utilisation"
3
AMF.H264.Usage.Transcoding="Transcodage"
4
AMF.H264.Usage.UltraLowLatency="Très faible latence"
5
AMF.H264.Usage.LowLatency="Faible latence"
6
-AMF.H264.Usage.Webcam="Webcam"
7
-AMF.H264.QualityPreset="Préréglages de qualité"
8
-AMF.H264.QualityPreset.Speed="Vitesse"
9
-AMF.H264.QualityPreset.Balanced="Equilibré"
10
-AMF.H264.QualityPreset.Quality="Qualité"
11
AMF.H264.Profile="Profil"
12
AMF.H264.ProfileLevel="Niveau de profil"
13
+AMF.H264.ProfileLevel.Description="Quel niveau de profil H.264 utiliser pour l'encodage :\n- \"Automatique\" laisse l'encodeur déterminer le meilleur profil en fonction de la résolution d'image et du nombre d'images par seconde.\n- \"4.1\" supporte les formats suivants : 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- \"4.2\" supporte les formats suivants : 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- \"5.0\" supporte les formats suivants : 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- \"5.1\" supporte les formats suivants : 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- \"5.2\" supporte les formats suivants : 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
14
+AMF.H264.MaximumLTRFrames="Maximum de trames LTR"
15
AMF.H264.RateControlMethod="Méthode de contrôle du débit"
16
AMF.H264.RateControlMethod.CQP="QP constant (CQP)"
17
AMF.H264.RateControlMethod.CBR="Débit constant (CBR)"
18
19
AMF.H264.QP.PFrame="QP P-Frame"
20
AMF.H264.QP.BFrame="QP B-Frame"
21
AMF.H264.QP.BPictureDelta="QP B-Image Delta"
22
+AMF.H264.QP.ReferenceBPictureDelta="Delta QP de l'image B de référence"
23
+AMF.H264.VBVBuffer="Tampon VBV"
24
+AMF.H264.VBVBuffer.Strictness="Respect du tampon VBV"
25
+AMF.H264.VBVBuffer.Size="Taille du tampon VBV"
26
+AMF.H264.VBVBuffer.Fullness="Remplissage du tampon VBV"
27
AMF.H264.FillerData="Données de remplissage"
28
AMF.H264.FrameSkipping="Saut d'images"
29
AMF.H264.EnforceHRDCompatibility="Appliquer la compatibilité avec l'HRD"
30
+AMF.H264.MaximumAccessUnitSize="Taille max. d'une Access Unit"
31
+AMF.H264.KeyframeInterval="Intervalle d'images-clé"
32
+AMF.H264.IDRPeriod="Périodicité des trames IDR"
33
+AMF.H264.HeaderInsertionSpacing="Intervalle d'insertion de l'en-tête de stream"
34
+AMF.H264.BPicture.Pattern="Modèle d'image B"
35
+AMF.H264.BPicture.Reference="Référence d'image B"
36
AMF.H264.DeblockingFilter="Filtre de dégroupage"
37
+AMF.H264.SlicesPerFrame="Tranches par image"
38
AMF.H264.ScanType="Balayage"
39
AMF.H264.ScanType.Progressive="Progressif"
40
AMF.H264.ScanType.Interlaced="Entrelacé"
41
+AMF.H264.QualityPreset="Préréglages de qualité"
42
+AMF.H264.QualityPreset.Speed="Vitesse"
43
+AMF.H264.QualityPreset.Balanced="Equilibré"
44
+AMF.H264.QualityPreset.Quality="Qualité"
45
+AMF.H264.MotionEstimation="Estimation de mouvement"
46
+AMF.H264.MotionEstimation.None="Aucun"
47
+AMF.H264.MotionEstimation.Half="Demi-pixel"
48
+AMF.H264.MotionEstimation.Quarter="Quart de pixel"
49
+AMF.H264.MotionEstimation.Both="Demi-pixel & quart de pixel"
50
AMF.H264.CABAC="Codage adaptif (CABAC)"
51
-AMF.H264.DebugTracing="Traçage de débogage"
52
-
53
-AMF.H264Advanced.Name="EncodeurH264 [Avancé] (AMD Advanced Media Framework)"
54
-AMF.H264Advanced.Reset="Valeurs par défaut"
55
-AMF.H264Advanced.VBVBuffer.Size="Taille de mémoire tampon VBV (bits)"
56
-AMF.H264Advanced.MaxAUSize="Taille AU maximale (bits)"
57
-AMF.H264Advanced.HeaderInsertionSpacing="Intervalle d'insertion de l'en-tête (en Images)"
58
-AMF.H264Advanced.IDRPeriod="Période d'images clés (cadres)"
59
-AMF.H264Advanced.SlicesPerFrame="Tranches par image"
60
-AMF.H264Advanced.MotionEstimation="Estimation de mouvement"
61
-AMF.H264Advanced.MotionEstimation.None="Aucun"
62
-AMF.H264Advanced.MotionEstimation.Half="Seulement une moitié de pixel"
63
-AMF.H264Advanced.MotionEstimation.Quarter="Seulement un quart de pixel"
64
-AMF.H264Advanced.MotionEstimation.Both="Les deux"
65
-
66
-AMF.H264Simple.Name="Encodeur H264 (AMD Advanced Media Framework)"
67
-AMF.H264Simple.Preset="Préréglage"
68
-AMF.H264Simple.Preset.Recording="Enregistrement"
69
-AMF.H264Simple.Preset.Twitch="Twitch"
70
-AMF.H264Simple.Preset.YouTube="YouTube"
71
-AMF.H264Simple.Preset.HighQuality="Haute qualité"
72
-AMF.H264Simple.Preset.Indistinguishable="Indiscernable"
73
-AMF.H264Simple.Preset.Lossless="Sans perte"
74
-AMF.H264Simple.KeyframeInterval="Intervalle des images clés (Secondes)"
75
-AMF.H264Simple.UseCustomBufferSize="Utiliser une taille de tampon personnalisée"
76
-AMF.H264Simple.CustomBufferSize="Taille du Buffer (kbit)"
77
-AMF.H264Simple.CustomBufferFullness="Remplissage initial du tampon"
78
-AMF.H264Simple.UseCustomGOPSize="Utiliser une taille GOP personnalisée"
79
-AMF.H264Simple.ShowAdvancedParameters="Afficher les paramètres avancés"
80
-AMF.H264Simple.ShowExpertParameters="Afficher les paramètres d'expert"
81
-
82
+AMF.H264.MemoryType="Type de mémoire"
83
+AMF.H264.SurfaceFormat="Format de la surface"
84
+AMF.H264.View="Mode de visualisation"
85
+AMF.H264.View.Basic="Basique"
86
+AMF.H264.View.Advanced="Avancé"
87
+AMF.H264.View.Expert="Expert"
88
+AMF.H264.View.Master="Maître"
89
+AMF.H264.UnlockProperties="Débloquer les propriétés"
90
+AMF.H264.Debug="Débogage"
91
AMF.Util.Default="Défaut"
92
AMF.Util.Automatic="Automatique"
93
+AMF.Util.Manual="Manuel"
94
AMF.Util.Toggle.Disabled="Désactivé"
95
AMF.Util.Toggle.Enabled="Activé"
96
-
97
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/hr-HR.ini
Added
41
1
2
+AMF.H264.Usage.Transcoding="Transkodiranje"
3
+AMF.H264.Usage.UltraLowLatency="Ultra nisko kašnjenje"
4
+AMF.H264.Usage.LowLatency="Nisko kašnjenje"
5
+AMF.H264.Profile="Profil"
6
+AMF.H264.ProfileLevel="Nivo profila"
7
+AMF.H264.RateControlMethod="Metoda kontrole protoka"
8
+AMF.H264.RateControlMethod.CQP="Konstantan kvalitet (CQP)"
9
+AMF.H264.RateControlMethod.CBR="Konstantan protok (CBR)"
10
+AMF.H264.RateControlMethod.VBR.Peak="Promenjivi protok (sa gornjom granicom) (VBR)"
11
+AMF.H264.RateControlMethod.VBR.Latency="Promenjivi protok (sa granicom kašnjenja) (VBR_LAT)"
12
+AMF.H264.Bitrate.Target="Ciljani protok"
13
+AMF.H264.Bitrate.Peak="Granica protoka"
14
+AMF.H264.QP.Minimum="Minimalni QP"
15
+AMF.H264.QP.Maximum="Maksimalni QP"
16
+AMF.H264.QP.IFrame="I-Frejm QP"
17
+AMF.H264.QP.PFrame="P-Frejm QP"
18
+AMF.H264.QP.BFrame="B-Frejm QP"
19
+AMF.H264.QP.BPictureDelta="B-Promena slike QP"
20
+AMF.H264.QP.ReferenceBPictureDelta="Referenca B-Promena slike QP"
21
+AMF.H264.FillerData="Data za popunjavanje"
22
+AMF.H264.FrameSkipping="Preskakanje frejmova"
23
+AMF.H264.EnforceHRDCompatibility="Prisilna HRD kompatibilnost"
24
+AMF.H264.BPicture.Pattern="B-Šablonska slika"
25
+AMF.H264.BPicture.Reference="B-Referentna slika"
26
+AMF.H264.DeblockingFilter="Odblokirajući filter"
27
+AMF.H264.ScanType="Vrsta skeniranja"
28
+AMF.H264.ScanType.Progressive="Progresivno"
29
+AMF.H264.ScanType.Interlaced="Isprekidano"
30
+AMF.H264.QualityPreset="Šablon kvaliteta"
31
+AMF.H264.QualityPreset.Speed="Brzina"
32
+AMF.H264.QualityPreset.Balanced="Izbalansirano"
33
+AMF.H264.QualityPreset.Quality="Kvalitet"
34
+AMF.H264.CABAC="Binarno aritmetičko kodiranje prilagodljivo sadržaju (CABAC)"
35
+AMF.H264.MemoryType="Vrsta memorije"
36
+AMF.H264.SurfaceFormat="Format površine"
37
+AMF.Util.Default="Podrazumevano"
38
+AMF.Util.Automatic="Automatski"
39
+AMF.Util.Toggle.Disabled="Onemogućeno"
40
+AMF.Util.Toggle.Enabled="Omogućeno"
41
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/hu-HU.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/hu-HU.ini
Changed
108
1
2
-AMF.H264.Usage="Használat módja"
3
+AMF.H264.Preset="Készlet"
4
+AMF.H264.Preset.Recording="Felvétel"
5
+AMF.H264.Preset.HighQuality="Kiváló minőség"
6
+AMF.H264.Preset.Indistinguishable="Megkülönböztethetetlen"
7
+AMF.H264.Preset.Lossless="Veszteségmentes"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Használat"
11
AMF.H264.Usage.Transcoding="Transzkódolás"
12
AMF.H264.Usage.UltraLowLatency="Nagyon alacsony késleltesésű"
13
AMF.H264.Usage.LowLatency="Alacsony késleltetésű"
14
-AMF.H264.Usage.Webcam="Webkamera"
15
-AMF.H264.QualityPreset="Minőségi profil"
16
-AMF.H264.QualityPreset.Speed="Gyors"
17
-AMF.H264.QualityPreset.Balanced="Kiegyenlített"
18
-AMF.H264.QualityPreset.Quality="Minőségi"
19
AMF.H264.Profile="Enkóder profil"
20
AMF.H264.ProfileLevel="Profil szint"
21
+AMF.H264.MaximumLTRFrames="Maximális LTR képkocka"
22
AMF.H264.RateControlMethod="Bitráta vezérlés"
23
AMF.H264.RateControlMethod.CQP="Erőltetett QP (CQP)"
24
AMF.H264.RateControlMethod.CBR="Konstans bitráta (CBR)"
25
26
AMF.H264.QP.BFrame="B-Képkocka QP"
27
AMF.H264.QP.BPictureDelta="B-Képkocka Delta QP"
28
AMF.H264.QP.ReferenceBPictureDelta="Referencia B-képkocka Delta QP"
29
+AMF.H264.VBVBuffer="VBV puffer"
30
+AMF.H264.VBVBuffer.Strictness="VBV Puffer kötöttség"
31
+AMF.H264.VBVBuffer.Size="VBV pufferméret"
32
+AMF.H264.VBVBuffer.Fullness="VBV puffer telítettség"
33
AMF.H264.FillerData="Filler adat"
34
AMF.H264.FrameSkipping="Képkocka kihagyás"
35
AMF.H264.EnforceHRDCompatibility="HRD Kompatibilitás kényszerítése"
36
+AMF.H264.KeyframeInterval="Kulcsképkocka időköze"
37
+AMF.H264.IDRPeriod="IDR időköz"
38
+AMF.H264.BPicture.Pattern="B-képkockák száma"
39
+AMF.H264.BPicture.Reference="B-képkocka referencia"
40
AMF.H264.DeblockingFilter="Deblocking Filter"
41
+AMF.H264.SlicesPerFrame="Szeletelés képkockánként"
42
AMF.H264.ScanType="Rögzítés módja"
43
AMF.H264.ScanType.Progressive="Progreszív"
44
AMF.H264.ScanType.Interlaced="Interlaced (Kísérleti)"
45
-AMF.H264.BPicture.Pattern="B-képkockák száma"
46
-AMF.H264.BPicture.Reference="B-képkocka referencia"
47
-AMF.H264.GOPSize="GOP méret"
48
+AMF.H264.QualityPreset="Minőségi profil"
49
+AMF.H264.QualityPreset.Speed="Gyors"
50
+AMF.H264.QualityPreset.Balanced="Kiegyenlített"
51
+AMF.H264.QualityPreset.Quality="Minőségi"
52
+AMF.H264.MotionEstimation="Mozgásbecslés"
53
+AMF.H264.MotionEstimation.None="Semmi"
54
+AMF.H264.MotionEstimation.Half="Fél-pixel"
55
+AMF.H264.MotionEstimation.Quarter="Negyed-pixel"
56
+AMF.H264.MotionEstimation.Both="Fél-&negyed-pixel"
57
AMF.H264.CABAC="Kontextus adaptív bináris aritmetikus kódolás (CABAC)"
58
-AMF.H264.DebugTracing="Debug Tracing"
59
AMF.H264.MemoryType="Memória típus"
60
-AMF.H264.ComputeType="Számítás típus"
61
AMF.H264.SurfaceFormat="Felület formátum"
62
-
63
-AMF.H264Advanced.Name="H264 Encoder [Advanced] (AMD Advanced Media Framework)"
64
-AMF.H264Advanced.Reset="Alapértelmezett értékek"
65
-AMF.H264Advanced.Update="Adatok frissítése AMF-ből (ha alapértelmezett/-1)"
66
-AMF.H264Advanced.MaxLTRFrames="Maximális LTR Képkockák"
67
-AMF.H264Advanced.VBVBuffer.Size="VBV Buffer méret (Bitben)"
68
-AMF.H264Advanced.VBVBuffer.Fullness="Kezdeti VBV Buffer telítettség"
69
-AMF.H264Advanced.MaxAUSize="Maximum AU méret (Bitben)"
70
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
71
-AMF.H264Advanced.IDRPeriod="IDR (Kulcsképkocka) Időköz (Képkockában)"
72
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory Per Slot In Macroblocks (in MB)"
73
-AMF.H264Advanced.SlicesPerFrame="Szeletek képkockánként"
74
-AMF.H264Advanced.MotionEstimation="Mozgás becslése"
75
-AMF.H264Advanced.MotionEstimation.None="Nincs"
76
-AMF.H264Advanced.MotionEstimation.Half="Fél pixeles"
77
-AMF.H264Advanced.MotionEstimation.Quarter="Negyed pixeles"
78
-AMF.H264Advanced.MotionEstimation.Both="Mindkettő"
79
-
80
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
81
-AMF.H264Simple.Preset="Preset"
82
-AMF.H264Simple.Preset.Recording="Recording"
83
-AMF.H264Simple.Preset.Twitch="Twitch"
84
-AMF.H264Simple.Preset.YouTube="YouTube"
85
-AMF.H264Simple.Preset.HighQuality="Kiváló minőség"
86
-AMF.H264Simple.Preset.Indistinguishable="Megkülönböztethetetlen"
87
-AMF.H264Simple.Preset.Lossless="Veszteségmentes"
88
-AMF.H264Simple.KeyframeInterval="Keyframe Interval (Seconds)"
89
-AMF.H264Simple.UseCustomBufferSize="Use Custom Buffer Size"
90
-AMF.H264Simple.CustomBufferSize="Buffer Size (kbit/s)"
91
-AMF.H264Simple.CustomBufferFullness="Kezdeti puffer telítettség"
92
-AMF.H264Simple.UseCustomGOPSize="Egyéni GOP méret"
93
-AMF.H264Simple.ShowAdvancedParameters="Show Advanced Parameters"
94
-AMF.H264Simple.ShowExpertParameters="Haladó paraméterek mutatása"
95
-
96
+AMF.H264.View="Nézet mód"
97
+AMF.H264.View.Basic="Alap"
98
+AMF.H264.View.Advanced="Haladó"
99
+AMF.H264.View.Expert="Szakértő"
100
+AMF.H264.View.Master="Mester"
101
+AMF.H264.Debug="Hibakeresés"
102
AMF.Util.Default="Alapértelmezett"
103
AMF.Util.Automatic="Automatikus"
104
+AMF.Util.Manual="Manuális"
105
AMF.Util.Toggle.Disabled="Letiltva"
106
AMF.Util.Toggle.Enabled="Engedélyezve"
107
-
108
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/it-IT.ini
Added
66
1
2
+AMF.H264.Usage.Transcoding="Transcodifica"
3
+AMF.H264.Usage.UltraLowLatency="Latenza ultra bassa"
4
+AMF.H264.Usage.LowLatency="Bassa latenza"
5
+AMF.H264.Profile="Profilo"
6
+AMF.H264.ProfileLevel="Livello profilo"
7
+AMF.H264.ProfileLevel.Description="Quale livello di profilo H.264 usare per l'encoding:\n- 'Automatico' calcola il miglior livello per il dato Frame Rate e Frame Size,\n- '4.1' supporta 1920x1080 30FPS, 1280x720 60FPS, 960x540 90FPS\n- '4.2' supporta 1920x1080 60FPS, 1280x720 120FPS, 960x540 172FPS\n- '5.0' supporta 1920x1080 60FPS, 1280x720 144FPS, 960x540 172FPS\n- '5.1' supporta 3840x2160 30FPS, 1920x1080 120FPS, 1280x720 172FPS, 960x540 172FPS\n- '5.2' supporta 3840x2160 60FPS, 1920x1080 172FPS, 1280x720 172FPS, 960x540 172FPS"
8
+AMF.H264.MaximumLTRFrames="Fotogrammi LTR Massimi"
9
+AMF.H264.RateControlMethod="Metodo di controllo della frequenza"
10
+AMF.H264.RateControlMethod.CQP="QP Costante (QPC)"
11
+AMF.H264.RateControlMethod.CBR="Bitrate costante (CBR)"
12
+AMF.H264.RateControlMethod.VBR.Peak="Bitrate Variabile (Peak Constrained) (VBR)"
13
+AMF.H264.RateControlMethod.VBR.Latency="Bitrate variabile (latenza vincolata) (VBR_LAT)"
14
+AMF.H264.Bitrate.Target="Bitrate di destinazione"
15
+AMF.H264.Bitrate.Peak="Picco Bitrate"
16
+AMF.H264.QP.Minimum="QP Minimo"
17
+AMF.H264.QP.Maximum="QP Massimo"
18
+AMF.H264.QP.IFrame="I-Frame QP"
19
+AMF.H264.QP.PFrame="P-Frame QP"
20
+AMF.H264.QP.BFrame="B-Frame QP"
21
+AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
22
+AMF.H264.QP.ReferenceBPictureDelta="Riferimento B-Picture Delta QP"
23
+AMF.H264.VBVBuffer="Buffer VBV"
24
+AMF.H264.VBVBuffer.Strictness="Strettezza Buffer VBV"
25
+AMF.H264.VBVBuffer.Size="Dimensione Buffer VBV"
26
+AMF.H264.VBVBuffer.Fullness="Larghezza Buffer VBV"
27
+AMF.H264.FillerData="Dati di riempimento"
28
+AMF.H264.FrameSkipping="Frame Skipping"
29
+AMF.H264.EnforceHRDCompatibility="Forza compatibilità HRD"
30
+AMF.H264.MaximumAccessUnitSize="Massima dimensione di unità d'accesso"
31
+AMF.H264.KeyframeInterval="Intervallo Keyframe"
32
+AMF.H264.IDRPeriod="Periodo IDR"
33
+AMF.H264.HeaderInsertionSpacing="Spaziatura di inserimento di intestazione"
34
+AMF.H264.BPicture.Pattern="Modello B-Picture"
35
+AMF.H264.BPicture.Reference="Riferimento B-Picture"
36
+AMF.H264.DeblockingFilter="Filtro di deblock"
37
+AMF.H264.SlicesPerFrame="Slices Per Frame"
38
+AMF.H264.IntraRefreshNumMBsPerSlot="Intra-Refresh Number of Macroblocks Per Slot"
39
+AMF.H264.ScanType="Tipo di scansione"
40
+AMF.H264.ScanType.Progressive="Progressivo"
41
+AMF.H264.ScanType.Interlaced="Interlacciato"
42
+AMF.H264.QualityPreset="Qualità Preset"
43
+AMF.H264.QualityPreset.Speed="Velocità"
44
+AMF.H264.QualityPreset.Balanced="Bilanciato"
45
+AMF.H264.QualityPreset.Quality="Qualità"
46
+AMF.H264.MotionEstimation="Stima Movimento"
47
+AMF.H264.MotionEstimation.None="Nessuno"
48
+AMF.H264.MotionEstimation.Half="Metà-Pixel"
49
+AMF.H264.MotionEstimation.Quarter="Quarto-Pixel"
50
+AMF.H264.MotionEstimation.Both="Meta- & Quarto-Pixel"
51
+AMF.H264.CABAC="CABAC"
52
+AMF.H264.MemoryType="Tipo Memoria"
53
+AMF.H264.SurfaceFormat="Formato di superficie"
54
+AMF.H264.View="Modalità di visualizzazione"
55
+AMF.H264.View.Basic="Basico"
56
+AMF.H264.View.Advanced="Avanzate"
57
+AMF.H264.View.Expert="Esperto"
58
+AMF.H264.View.Master="Master"
59
+AMF.H264.UnlockProperties="Sblocca proprietà"
60
+AMF.H264.Debug="Debug"
61
+AMF.Util.Default="Predefinito"
62
+AMF.Util.Automatic="Automatico"
63
+AMF.Util.Manual="Manuale"
64
+AMF.Util.Toggle.Disabled="Disabilitato"
65
+AMF.Util.Toggle.Enabled="Attivo"
66
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ja-JP.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ja-JP.ini
Changed
137
1
2
-AMF.H264.Usage="使用タイプ"
3
+AMF.H264.Preset="プリセット"
4
+AMF.H264.Preset.Recording="録画中"
5
+AMF.H264.Preset.HighQuality="高品質"
6
+AMF.H264.Preset.Indistinguishable="区別不能品質"
7
+AMF.H264.Preset.Lossless="無損失品質"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="用途"
11
AMF.H264.Usage.Transcoding="変換"
12
AMF.H264.Usage.UltraLowLatency="超低遅延"
13
AMF.H264.Usage.LowLatency="低遅延"
14
-AMF.H264.Usage.Webcam="ウェブカメラ"
15
-AMF.H264.QualityPreset="品質プリセット"
16
-AMF.H264.QualityPreset.Speed="速度"
17
-AMF.H264.QualityPreset.Balanced="バランス"
18
-AMF.H264.QualityPreset.Quality="品質"
19
AMF.H264.Profile="プロファイル"
20
+AMF.H264.Profile.Description="エンコードに使用する H.264 プロファイル:\n- 'Baseline' は最も広くサポートされており、\n- 'Main' は95%のデバイスでサポートされており (推奨)、\n- 'High' は高性能デバイスのみでサポートされている。"
21
AMF.H264.ProfileLevel="プロファイルレベル"
22
+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、1920 x 1080 172FPS, 1280 x 720 172FPS, 960 x 540 172FPS をサポートします。"
23
+AMF.H264.MaximumLTRFrames="最大 LTR フレーム"
24
AMF.H264.RateControlMethod="レート制御方式"
25
AMF.H264.RateControlMethod.CQP="固定QP (CQP)"
26
AMF.H264.RateControlMethod.CBR="固定ビットレート (CBR)"
27
AMF.H264.RateControlMethod.VBR.Peak="可変ビットレート (ピーク制約) (VBR)"
28
AMF.H264.RateControlMethod.VBR.Latency="可変ビットレート (遅延制約) (VBR_LAT)"
29
AMF.H264.Bitrate.Target="目標ビットレート"
30
+AMF.H264.Bitrate.Target.Description="全体的なシーケンスで達成しようとするビットレート。\nCBR と VBR_LAT で使用されます。"
31
AMF.H264.Bitrate.Peak="最大ビットレート"
32
+AMF.H264.Bitrate.Peak.Description="全体的なシーケンスでピークを最大にしようとするビットレート。\nVBR と VBR_LAT で使用されます。"
33
AMF.H264.QP.Minimum="最小QP"
34
+AMF.H264.QP.Minimum.Description="フレームで使用する最小QP値。\nCBR, VBR および VBR_LAT で使用される。"
35
AMF.H264.QP.Maximum="最大QP"
36
+AMF.H264.QP.Maximum.Description="フレームで使用する最大QP値。\nCBR, VBR および VBR_LAT で使用される。"
37
AMF.H264.QP.IFrame="I-フレーム QP"
38
AMF.H264.QP.PFrame="P-フレーム QP"
39
AMF.H264.QP.BFrame="B-フレーム QP"
40
AMF.H264.QP.BPictureDelta="B-画像デルタ QP"
41
+AMF.H264.QP.BPictureDelta.Description="最後の非参照B-画像のデルタQPです。"
42
AMF.H264.QP.ReferenceBPictureDelta="B-画像参照のデルタQP"
43
+AMF.H264.QP.ReferenceBPictureDelta.Description="最後の参照B-画像のデルタQPです。"
44
+AMF.H264.VBVBuffer="VBV バッファ"
45
+AMF.H264.VBVBuffer.Strictness="VBV バッファ厳密性"
46
+AMF.H264.VBVBuffer.Size="VBV バッファサイズ"
47
+AMF.H264.VBVBuffer.Fullness="VBV バッファ充満"
48
AMF.H264.FillerData="フィラーデータ"
49
AMF.H264.FrameSkipping="フレームスキップ"
50
AMF.H264.EnforceHRDCompatibility="HRD 互換性を強制"
51
-AMF.H264.DeblockingFilter="デブロック フィルター"
52
+AMF.H264.MaximumAccessUnitSize="最大アクセスユニットサイズ"
53
+AMF.H264.KeyframeInterval="キーフレーム間隔"
54
+AMF.H264.KeyframeInterval.Description="ドロップ不可能なフレーム間の秒数。\nGOPのサイズも制御します。"
55
+AMF.H264.IDRPeriod="IDR 周期"
56
+AMF.H264.IDRPeriod.Description="ドロップ不可能なフレーム間のフレーム数。\nGOPのサイズも制御します。"
57
+AMF.H264.HeaderInsertionSpacing="ヘッダー挿入間隔"
58
+AMF.H264.BPicture.Pattern="B-画像パターン"
59
+AMF.H264.BPicture.Reference="B-画像参照"
60
+AMF.H264.DeblockingFilter="デブロックフィルタ"
61
+AMF.H264.DeblockingFilter.Description="デコーダがエンコードされたストリームに対してデブロックフィルタの使用を許可されているかのフラグを設定します。"
62
+AMF.H264.SlicesPerFrame="フレームあたりのスライス"
63
+AMF.H264.IntraRefreshNumMBsPerSlot="スロットごとのマクロブロックのイントラリフレッシュ数"
64
AMF.H264.ScanType="スキャンの種類"
65
+AMF.H264.ScanType.Description="どのスキャン方法が使用されるか、'プログレッシブ'を常にこのままにしておきます。"
66
AMF.H264.ScanType.Progressive="プログレッシブ"
67
AMF.H264.ScanType.Interlaced="インターレース"
68
-AMF.H264.BPicture.Pattern="B-画像パターン"
69
-AMF.H264.BPicture.Reference="B-画像参照"
70
-AMF.H264.GOPSize="GOP サイズ"
71
+AMF.H264.QualityPreset="品質プリセット"
72
+AMF.H264.QualityPreset.Speed="速度"
73
+AMF.H264.QualityPreset.Balanced="バランス"
74
+AMF.H264.QualityPreset.Quality="品質"
75
+AMF.H264.MotionEstimation="動き推定"
76
+AMF.H264.MotionEstimation.Description="動き推定はピクセルがどこに移動したかを推定することによってエンコーダが必要とするビットレートを削減します。"
77
+AMF.H264.MotionEstimation.None="未設定"
78
+AMF.H264.MotionEstimation.Half="1/2ピクセル"
79
+AMF.H264.MotionEstimation.Quarter="1/4ピクセル"
80
+AMF.H264.MotionEstimation.Both="ハーフ & クォーターピクセル"
81
AMF.H264.CABAC="コンテキスト適応型のバイナリ演算コーディング (CABAC)"
82
-AMF.H264.DebugTracing="デバッグトレース"
83
AMF.H264.MemoryType="メモリの種類"
84
-AMF.H264.ComputeType="計算の種類"
85
+AMF.H264.Device="デバイス"
86
+AMF.H264.UseOpenCL="OpenCL を使用する"
87
AMF.H264.SurfaceFormat="カラーフォーマット"
88
-
89
-AMF.H264Advanced.Name="H264 エンコーダー [Advanced] (AMD Advanced Media Framework)"
90
-AMF.H264Advanced.Reset="既定値に戻す"
91
-AMF.H264Advanced.Update="AMF から値を更新 (デフォルトであれば/-1)"
92
-AMF.H264Advanced.MaxLTRFrames="最大 LTR フレーム"
93
-AMF.H264Advanced.VBVBuffer.Size="VBV バッファーサイズ (ビット)"
94
-AMF.H264Advanced.VBVBuffer.Fullness="初期 VBV バッファー充満"
95
-AMF.H264Advanced.MaxAUSize="AU の最大サイズ (ビット)"
96
-AMF.H264Advanced.HeaderInsertionSpacing="ヘッダー挿入間隔 (フレーム)"
97
-AMF.H264Advanced.IDRPeriod="キーフレーム間隔 (フレーム)"
98
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="マクロブロック中のスロットあたりのイントラリフレッシュメモリ (MB)"
99
-AMF.H264Advanced.SlicesPerFrame="フレームあたりのスライス"
100
-AMF.H264Advanced.MotionEstimation="動き推定"
101
-AMF.H264Advanced.MotionEstimation.None="未設定"
102
-AMF.H264Advanced.MotionEstimation.Half="1/2ピクセルのみ"
103
-AMF.H264Advanced.MotionEstimation.Quarter="1/4ピクセルのみ"
104
-AMF.H264Advanced.MotionEstimation.Both="両方"
105
-
106
-AMF.H264Simple.Name="H264 エンコーダー (AMD Advanced Media Framework)"
107
-AMF.H264Simple.Preset="プリセット"
108
-AMF.H264Simple.Preset.Recording="録画中"
109
-AMF.H264Simple.Preset.Twitch="Twitch"
110
-AMF.H264Simple.Preset.YouTube="YouTube"
111
-AMF.H264Simple.Preset.HighQuality="高品質"
112
-AMF.H264Simple.Preset.Indistinguishable="区別不能品質"
113
-AMF.H264Simple.Preset.Lossless="無損失品質"
114
-AMF.H264Simple.KeyframeInterval="キーフレーム間隔 (秒)"
115
-AMF.H264Simple.UseCustomBufferSize="特定バッファサイズを使用"
116
-AMF.H264Simple.CustomBufferSize="バッファーサイズ (kbit/s)"
117
-AMF.H264Simple.CustomBufferFullness="初期バッファー充満"
118
-AMF.H264Simple.UseCustomGOPSize="特定GOPサイズを使用"
119
-AMF.H264Simple.ShowAdvancedParameters="高度なパラメーターを表示"
120
-AMF.H264Simple.ShowExpertParameters="専門的なパラメーターを表示"
121
-
122
+AMF.H264.View="表示モード"
123
+AMF.H264.View.Description="どのプロパティが表示されるか。 'エキスパート' または 'マスター' の表示モードを使用する場合はサポートを受けられません。"
124
+AMF.H264.View.Basic="基本"
125
+AMF.H264.View.Advanced="詳細設定"
126
+AMF.H264.View.Expert="エキスパート"
127
+AMF.H264.View.Master="マスター"
128
+AMF.H264.UnlockProperties="プロパティのロック解除"
129
+AMF.H264.Debug="デバッグ"
130
+AMF.H264.Debug.Description="追加のデバッグログ出力を有効にし、これはこのエンコーダでサポートが必要なときにアクティブにする必要があります。"
131
AMF.Util.Default="既定値"
132
AMF.Util.Automatic="自動"
133
+AMF.Util.Manual="手動"
134
AMF.Util.Toggle.Disabled="無効"
135
AMF.Util.Toggle.Enabled="有効"
136
-
137
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ko-KR.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ko-KR.ini
Changed
152
1
2
-AMF.H264.Usage="사용 종류"
3
+AMF.H264.Preset="사전 설정"
4
+AMF.H264.Preset.Recording="녹화"
5
+AMF.H264.Preset.HighQuality="우수한 품질"
6
+AMF.H264.Preset.Indistinguishable="무손실과 거의 구분 불가"
7
+AMF.H264.Preset.Lossless="무손실"
8
+AMF.H264.Preset.Twitch="트위치"
9
+AMF.H264.Preset.YouTube="유튜브"
10
+AMF.H264.Usage="용도"
11
+AMF.H264.Usage.Description="용도에 따라 AMF을 조율합니다:\n- '트랜스코딩'은 일반적인 용도에 적합한 설정입니다(추천).\n- '매우 낮은 지연시간'은 아주 낮은 인코딩 레이턴시를 의미합니다.\n- '낮은 지연시간'은 그 수준이 조금 더 높습니다.\n방송 목적으로는 '트랜스코딩'만 지원됩니다. 모든 다른 설정값은 녹화 용도에만 사용됩니다."
12
AMF.H264.Usage.Transcoding="트랜스코딩"
13
AMF.H264.Usage.UltraLowLatency="매우 낮은 지연 시간"
14
AMF.H264.Usage.LowLatency="낮은 지연 시간"
15
-AMF.H264.Usage.Webcam="웹캠"
16
-AMF.H264.QualityPreset="품질 사전 설정"
17
-AMF.H264.QualityPreset.Speed="속도"
18
-AMF.H264.QualityPreset.Balanced="균형"
19
-AMF.H264.QualityPreset.Quality="품질"
20
AMF.H264.Profile="사전설정"
21
+AMF.H264.Profile.Description="인코딩에 사용하는 H.264프로파일을 설정합니다.\n- 'Baseline'은 가장 많은 환경 및 기기에서 지원가능한 수준입니다.\n- 'Main'은 시장에서 95%의 기기가 지원합니다(추천).\n- 'High'는 고급 기기에만 지원되는 설정입니다."
22
AMF.H264.ProfileLevel="프로필 수준"
23
+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을 지원합니다."
24
+AMF.H264.MaximumLTRFrames="최대 장기참조 프레임"
25
+AMF.H264.MaximumLTRFrames.Description="장기참조 프레임(LTR)은 인코더가 특정 프레임을 참조 가능하게 만들어 줍니다.\n이 설정은 B-화면 기능이 지원되지 않거나 필요한 경우 품질을 올리는데 도움이 될 수 있습니다.\n장기참조 프레임은 B-화면과 동시에 사용할 수 없습니다."
26
AMF.H264.RateControlMethod="속도 제어 방식"
27
AMF.H264.RateControlMethod.CQP="고정 QP (CQP)"
28
AMF.H264.RateControlMethod.CBR="고정 비트레이트 (CBR)"
29
AMF.H264.RateControlMethod.VBR.Peak="가변 비트레이트 (최대 비트레이트 제약) (VBR)"
30
AMF.H264.RateControlMethod.VBR.Latency="가변 비트레이트(지연율 제약) (VBR_LAT)"
31
AMF.H264.Bitrate.Target="목표 비트레이트"
32
+AMF.H264.Bitrate.Target.Description="전반적인 영상 장면을 구성하기 위한 비트레이트.\nCBR과 VBR_LAT에 사용됨."
33
AMF.H264.Bitrate.Peak="최대 비트레이트"
34
+AMF.H264.Bitrate.Peak.Description="전반적인 영상 장면을 구성할 때 최대로 사용할 수 있는 비트레이트.\nVBR과 VBR_LAT에 사용."
35
AMF.H264.QP.Minimum="최소 QP"
36
+AMF.H264.QP.Minimum.Description="프레임 하나에 사용하는 최저 QP 값.\n CBR, VBR 그리고 VBR_LAT에 사용됨."
37
AMF.H264.QP.Maximum="최대 QP"
38
+AMF.H264.QP.Maximum.Description="프레임 하나에 사용하는 최대 QP 값.\n CBR, VBR 그리고 VBR_LAT에 사용됨."
39
AMF.H264.QP.IFrame="I-프레임 QP"
40
+AMF.H264.QP.IFrame.Description="I-화면에 사용하는 고정 QP 값.\n 낮음= 더 큰 파일, 더 좋은 품질. 높음 = 더 작은 파일, 더 나쁜 품질.\nI-화면 QP는 P-,B-화면 QP값 수치보다 높아야함.\nCQP에서 사용."
41
AMF.H264.QP.PFrame="P-프레임 QP"
42
+AMF.H264.QP.PFrame.Description="P-화면에 사용하는 고정 QP 값.\n 낮음= 더 큰 파일, 더 좋은 품질. 높음 = 더 작은 파일, 더 나쁜 품질.\nP-화면 QP는 B-화면 QP값 수치보다 같거나 높아야함.\nCQP에서 사용."
43
AMF.H264.QP.BFrame="BP-프레임 QP"
44
+AMF.H264.QP.BFrame.Description="B-화면에 사용하는 고정 QP 값.\n 낮음= 더 큰 파일, 더 좋은 품질. 높음 = 더 작은 파일, 더 나쁜 품질.\nCQP에서 사용."
45
AMF.H264.QP.BPictureDelta="B-화면 델타 QP"
46
+AMF.H264.QP.BPictureDelta.Description="마지막 비참조 B-화면의 델타 QP."
47
AMF.H264.QP.ReferenceBPictureDelta="참조 B-화면 델타 QP"
48
+AMF.H264.QP.ReferenceBPictureDelta.Description="마지막 참조 B-화면의 델타 QP."
49
+AMF.H264.VBVBuffer="VBV 버퍼"
50
+AMF.H264.VBVBuffer.Strictness="VBV 버퍼 엄격도"
51
+AMF.H264.VBVBuffer.Strictness.Description="VBV 버퍼가 어떤 수준으로 제어될지 결정합니다. 100%에는 목표로 정한 비트레이트와 거의 일치하도록 조절하며 0%에서는 제약이 사라집니다."
52
+AMF.H264.VBVBuffer.Size="VBV 버퍼 크기"
53
+AMF.H264.VBVBuffer.Size.Description="한 장면의 비트레이트 제어에 사용하는 VBV 버퍼 크기를 의미합니다.\n작은 크기는 지정한 비트레이트 값과 일치하는 결과를 가져오지만 작업에 더 많은 자원을 요구합니다.\n이상적인 (100% 엄격) VBV버퍼 크기는 비트레이트/프레임율입니다."
54
+AMF.H264.VBVBuffer.Fullness="VBV 버퍼 충만도"
55
+AMF.H264.VBVBuffer.Fullness.Description="초기 VBV버퍼가 얼마나 충만한지는 오로지 인코딩의 초반에만 영향을 미칩니다."
56
AMF.H264.FillerData="채우기 정보"
57
+AMF.H264.FillerData.Description="채우기 정보는 디코더가 무시하는 빈 혹은 잘못된 데이터입니다.\n만약 이 설정이 활성화되어있고 CBR을 사용할 경우 인코더가 남은 공간을 이 것으로 채워둡니다."
58
AMF.H264.FrameSkipping="프레임 생략"
59
+AMF.H264.FrameSkipping.Description="프레임 생략은 프레임이 아주 유사하거나 작업이 너무 오래 소요할 경우, 인코더가 선택적으로 그것을 생략할 수 있게 합니다.\n이 설정을 활성화하면 파일은 가변 프레임율로 출력이 되며 대다수 편집 소프트웨어는 지원하지 않습니다."
60
AMF.H264.EnforceHRDCompatibility="HDR 호환모드 적용"
61
+AMF.H264.EnforceHRDCompatibility.Description="이론적 기본 디코더 강제는 프레임 하나의 최대 QP값 변화를 제한하는 설정입니다.\n녹화나 방송에는 적합하지 않고 기본 소프트웨어 디코더만 사용 가능한 매우 낡은 장치에서 영상을 재생할 때 사용합니다."
62
+AMF.H264.MaximumAccessUnitSize="최대 접근 유닛 크기"
63
+AMF.H264.MaximumAccessUnitSize.Description="NAL 장치에서 단일 접근 유닛의 가장 큰 크기를 결정합니다. 0 값은 인코더가 최적화된 수치를 결정하도록 허용합니다."
64
+AMF.H264.KeyframeInterval="키프레임 간격"
65
+AMF.H264.KeyframeInterval.Description="손실이 불가능한 프레임 사이에 얼마나 많은 시간(초)이 필요한지 설정합니다.\n또한 영상(GOP) 크기도 제어합니다."
66
+AMF.H264.IDRPeriod="IDR 주기"
67
+AMF.H264.IDRPeriod.Description="손실이 불가능한 프레임 사이에 얼마나 많은 프레임이 필요한지 설정합니다.\n또한 영상(GOP) 크기도 제어합니다."
68
+AMF.H264.HeaderInsertionSpacing="헤더 삽입 간격"
69
+AMF.H264.HeaderInsertionSpacing.Description="NAL 헤더 사이에 얼마나 많은 프레임이 필요한지 설정합니다. 0(자동)에서 바꾸는 것은 추천하지 않습니다."
70
+AMF.H264.BPicture.Pattern="B-화면 양식"
71
+AMF.H264.BPicture.Reference="B-화면 참조"
72
+AMF.H264.BPicture.Reference.Description="다른 B-화면뿐만 아니라 P-/I-화면에도 B-화면을 참조할 수 있도록 허용합니다.\n높은 성능이 요구되지만 품질 개선에는 그리 큰 효과가 없습니다."
73
AMF.H264.DeblockingFilter="디블록 필터"
74
+AMF.H264.DeblockingFilter.Description="디코더가 인코딩된 작업에 디블록 필터를 사용할 수 있도록 허용합니다."
75
+AMF.H264.SlicesPerFrame="조각 당 프레임"
76
+AMF.H264.SlicesPerFrame.Description="동적 대신 고정식 분할 인코딩을 사용합니다.\n높은 해상도와 초당 프레임 환경에서 도움이 될 수 있습니다. 이 설정으로 동일한 프로파일 수준을 유지하면서 더 많은 데이터를 저장할 수 있습니다. 하지만 품질에 부정적인 영향을 미칠 수 있습니다."
77
+AMF.H264.IntraRefreshNumMBsPerSlot="슬롯 당 매크로블록의 인트라-리프레시 수"
78
+AMF.H264.IntraRefreshNumMBsPerSlot.Description="인트라-리프레시 인코딩에서 슬롯마다 얼마나 많은 수의 매크로블록이 필요한지 설정합니다.\n인트라-리프레시 인코딩은 높은 비트레이트를 기반으로 추가 정보를 저장하여 빠른 탐색과 디코딩을 허용합니다.\n방송할 때는 기본으로 두십시오."
79
AMF.H264.ScanType="스캔 형식"
80
+AMF.H264.ScanType.Description="주사 방식을 설정합니다. 항상 '프로그레시브'로 두십시오."
81
AMF.H264.ScanType.Progressive="프로그레시브"
82
AMF.H264.ScanType.Interlaced="인터레이스"
83
-AMF.H264.BPicture.Pattern="B-화면 양식"
84
-AMF.H264.BPicture.Reference="B-화면 참조"
85
-AMF.H264.GOPSize="GOP 크기"
86
+AMF.H264.QualityPreset="품질 사전 설정"
87
+AMF.H264.QualityPreset.Description="AMF 품질을 결정할 때 어떤 수준을 목표로 할지 결정합니다:\n-'속도'는 가장 빠르지만, 품질이 가장 나쁘며,\n- '균형'은 '속도'와 '품질' 사이의 수준을 제공합니다.\n- '품질'은 주어진 비트레이트 내에서 가장 뛰어난 품질을 제공합니다."
88
+AMF.H264.QualityPreset.Speed="속도"
89
+AMF.H264.QualityPreset.Balanced="균형"
90
+AMF.H264.QualityPreset.Quality="품질"
91
+AMF.H264.MotionEstimation="동작 예측"
92
+AMF.H264.MotionEstimation.Description="동작 추정은 픽셀의 움직임을 추정하여 필요한 비트레이트를 줄일 수 있게 합니다."
93
+AMF.H264.MotionEstimation.None="없음"
94
+AMF.H264.MotionEstimation.Half="1/2 화소"
95
+AMF.H264.MotionEstimation.Quarter="1/4 화소"
96
+AMF.H264.MotionEstimation.Both="1/2 & 1/4 화소"
97
AMF.H264.CABAC="Context Adaptive Binary Arithmetic Coding (CABAC)"
98
-AMF.H264.DebugTracing="디버그 추적"
99
+AMF.H264.CABAC.Description="CALV대신 CABAC (Context Adaptive Binary Arithmetic Coding)을 사용합니다.\n품질엔 영향을 주지 않지만 압축에 도움이 됩니다. 평균적으로 5% 정도 더 나은 압축률을 보여줍니다."
100
AMF.H264.MemoryType="메모리 유형"
101
-AMF.H264.ComputeType="계산 유형"
102
-
103
-AMF.H264Advanced.Name="H264 인코더 [Advanced] (AMD Advanced Media Framework)"
104
-AMF.H264Advanced.Reset="기본값으로 설정"
105
-AMF.H264Advanced.Update="AMF에서 값을 갱신(기본 수치라면/-1)"
106
-AMF.H264Advanced.MaxLTRFrames="최대 LTR 프레임"
107
-AMF.H264Advanced.VBVBuffer.Size="VBV 버퍼 크기 (bits)"
108
-AMF.H264Advanced.VBVBuffer.Fullness="초기 VBV 버퍼 충만도"
109
-AMF.H264Advanced.MaxAUSize="최대 AU 크기 (bits)"
110
-AMF.H264Advanced.HeaderInsertionSpacing="헤더 삽입 간격 (프레임)"
111
-AMF.H264Advanced.IDRPeriod="키프레임 간격 (프레임)"
112
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="매크로블록 내 슬롯 당 Intra-Refresh 메모리 (MB)"
113
-AMF.H264Advanced.SlicesPerFrame="조각 당 프레임"
114
-AMF.H264Advanced.MotionEstimation="움직임 예측"
115
-AMF.H264Advanced.MotionEstimation.None="없음"
116
-AMF.H264Advanced.MotionEstimation.Half="화소 절반만 처리"
117
-AMF.H264Advanced.MotionEstimation.Quarter="화소 1/4만 처리"
118
-AMF.H264Advanced.MotionEstimation.Both="모두"
119
-
120
-AMF.H264Simple.Name="H264 인코더 (AMD Advanced Media Framework)"
121
-AMF.H264Simple.Preset="사전 설정"
122
-AMF.H264Simple.Preset.Recording="녹화"
123
-AMF.H264Simple.Preset.Twitch="트위치"
124
-AMF.H264Simple.Preset.YouTube="유튜브"
125
-AMF.H264Simple.KeyframeInterval="키프레임 간격 (초 단위)"
126
-AMF.H264Simple.UseCustomBufferSize="사용자 임의 버퍼 크기 설정"
127
-AMF.H264Simple.CustomBufferSize="버퍼 크기 (kbit/s)"
128
-AMF.H264Simple.CustomBufferFullness="초기 버퍼 충만도"
129
-AMF.H264Simple.UseCustomGOPSize="사용자 임의 GOP 버퍼 크기 설정"
130
-AMF.H264Simple.ShowAdvancedParameters="고급설정 표시"
131
-AMF.H264Simple.ShowExpertParameters="고급 사용자용 매개 변수 표시"
132
-
133
+AMF.H264.MemoryType.Description="인코더에 제출하기 전에 얼마나 많은 프레임을 저장할지 설정합니다:\n- '자동'은 후위처리 형식 내에 기억장치가 가용할 수 있는 최댓값을 선택합니다.\n- Host는 시스템 메모리를 사용합니다,\n- DirectX 9은 DirectX 표면을 제출에 사용합니다,\n- DirectX 11은 DirectX 표면을 제출에 사용합니다,\n- OpenGL은 OpenGL 표면을 제출에 사용합니다,\n\n'Host''는 대다수 시스템에서 충분하지만, DirectX는 종종 높은 부하가 일어날 때 도움이 될 수 있습니다."
134
+AMF.H264.SurfaceFormat="표면 형식"
135
+AMF.H264.SurfaceFormat.Description="인코딩에 사용할 표면 형식을 설정합니다.\n오로지 NV12만 기본적으로 지원이 되며 다른 형식은 전환 작업이 필요합니다."
136
+AMF.H264.View="보기 모드"
137
+AMF.H264.View.Description="어떤 설정을 표시할지 결정합니다. '숙련' 혹은 '달인' 표시 모드에서는 지원을 받을 수 없습니다."
138
+AMF.H264.View.Basic="기본"
139
+AMF.H264.View.Advanced="고급"
140
+AMF.H264.View.Expert="숙련"
141
+AMF.H264.View.Master="달인"
142
+AMF.H264.UnlockProperties="속성 잠금해제"
143
+AMF.H264.UnlockProperties.Description="특정 설정을 부분적이 아닌 전체 범위를 다룰 수 있도록 잠금을 해제합니다."
144
+AMF.H264.Debug="디버그"
145
+AMF.H264.Debug.Description="추가적인 디버그 기록을 활성화하여 이 인코더에 대한 지원이 필요할 때 제출하십시오."
146
AMF.Util.Default="기본값"
147
AMF.Util.Automatic="자동"
148
+AMF.Util.Manual="수동"
149
AMF.Util.Toggle.Disabled="비활성화"
150
AMF.Util.Toggle.Enabled="활성화"
151
-
152
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/nb-NO.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/nb-NO.ini
Changed
43
1
2
-AMF.H264.Usage="Bruk Type"
3
AMF.H264.Usage.Transcoding="Transkoding"
4
AMF.H264.Usage.UltraLowLatency="Ultra-lav latens"
5
AMF.H264.Usage.LowLatency="Lav latens"
6
-AMF.H264.Usage.Webcam="Webkamera"
7
-AMF.H264.QualityPreset="Kvalitet forhåndsinnstilling"
8
-AMF.H264.QualityPreset.Speed="Hastighet"
9
-AMF.H264.QualityPreset.Balanced="Balansert"
10
-AMF.H264.QualityPreset.Quality="Kvalitet"
11
AMF.H264.Profile="Profil"
12
AMF.H264.ProfileLevel="Profilnivå"
13
AMF.H264.Bitrate.Target="Mål Bitrate"
14
15
AMF.H264.QP.Maximum="Maksimal QP"
16
AMF.H264.EnforceHRDCompatibility="Håndheve HRD kompatibilitet"
17
AMF.H264.ScanType="Skanne Type"
18
-AMF.H264.GOPSize="GOP størrelse"
19
-
20
-AMF.H264Advanced.Reset="Tilbakestill innstillinger"
21
-AMF.H264Advanced.Update="Oppdatere verdier fra AMF (hvis med standard /-1)"
22
-AMF.H264Advanced.MaxLTRFrames="Maksimal LTR rammer"
23
-AMF.H264Advanced.VBVBuffer.Size="VBV bufferstørrelsen (biter)"
24
-AMF.H264Advanced.MaxAUSize="AU maksimumsstørrelsen (biter)"
25
-AMF.H264Advanced.MotionEstimation.None="Ingen"
26
-AMF.H264Advanced.MotionEstimation.Both="Begge"
27
-
28
-AMF.H264Simple.Preset="Forhåndsinnstilling"
29
-AMF.H264Simple.Preset.Recording="Opptak"
30
-AMF.H264Simple.Preset.Twitch="Twitch"
31
-AMF.H264Simple.Preset.YouTube="YouTube"
32
-AMF.H264Simple.ShowAdvancedParameters="Vis avanserte parametere"
33
-
34
+AMF.H264.QualityPreset="Kvalitet forhåndsinnstilling"
35
+AMF.H264.QualityPreset.Speed="Hastighet"
36
+AMF.H264.QualityPreset.Balanced="Balansert"
37
+AMF.H264.QualityPreset.Quality="Kvalitet"
38
AMF.Util.Default="Standard"
39
+AMF.Util.Automatic="Automatisk"
40
AMF.Util.Toggle.Disabled="Deaktivert"
41
AMF.Util.Toggle.Enabled="Aktivert"
42
-
43
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/nl-NL.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/nl-NL.ini
Changed
67
1
2
-AMF.H264.Usage="Gebruikstype"
3
AMF.H264.Usage.Transcoding="Transcoding"
4
AMF.H264.Usage.UltraLowLatency="Ultra Low Latency"
5
AMF.H264.Usage.LowLatency="Low Latency"
6
-AMF.H264.Usage.Webcam="Webcam"
7
-AMF.H264.QualityPreset="Kwaliteitsinstelling"
8
-AMF.H264.QualityPreset.Speed="Snelheid"
9
-AMF.H264.QualityPreset.Balanced="Gebalanceerd"
10
-AMF.H264.QualityPreset.Quality="Kwaliteit"
11
AMF.H264.Profile="Profiel"
12
AMF.H264.ProfileLevel="Profielniveau"
13
AMF.H264.RateControlMethod="Rate control methode"
14
15
AMF.H264.FillerData="Opvuldata"
16
AMF.H264.FrameSkipping="Frames overslaan"
17
AMF.H264.EnforceHRDCompatibility="Forceer HDR compatibiliteit"
18
+AMF.H264.BPicture.Pattern="B-Picture patroon"
19
+AMF.H264.BPicture.Reference="B-Picture referentie"
20
AMF.H264.DeblockingFilter="Deblocking Filter"
21
AMF.H264.ScanType="Scantype"
22
AMF.H264.ScanType.Progressive="Progressive"
23
AMF.H264.ScanType.Interlaced="Interlaced"
24
-AMF.H264.BPicture.Pattern="B-Picture patroon"
25
-AMF.H264.BPicture.Reference="B-Picture referentie"
26
-AMF.H264.GOPSize="GOP grootte"
27
+AMF.H264.QualityPreset="Kwaliteitsinstelling"
28
+AMF.H264.QualityPreset.Speed="Snelheid"
29
+AMF.H264.QualityPreset.Balanced="Gebalanceerd"
30
+AMF.H264.QualityPreset.Quality="Kwaliteit"
31
AMF.H264.CABAC="Context Adaptive Binary Arithmetic Coding (CABAC)"
32
-AMF.H264.DebugTracing="Debug Tracing"
33
-
34
-AMF.H264Advanced.Name="H264 Encoder [Geavanceerd] (AMD Advanced Media Framework)"
35
-AMF.H264Advanced.Reset="Standaardinstellingen herstellen"
36
-AMF.H264Advanced.Update="Waardes updaten van AMF (bij standaard/-1)"
37
-AMF.H264Advanced.MaxLTRFrames="Maximale LTR Frames"
38
-AMF.H264Advanced.VBVBuffer.Size="VBV buffergrootte (bits)"
39
-AMF.H264Advanced.VBVBuffer.Fullness="Initiële VBV buffervulling"
40
-AMF.H264Advanced.MaxAUSize="Maximale AU grootte (bits)"
41
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
42
-AMF.H264Advanced.IDRPeriod="Keyframe periode (frames)"
43
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh geheugen per slot in macroblocks (in MB)"
44
-AMF.H264Advanced.SlicesPerFrame="Segmenten Per Frame"
45
-AMF.H264Advanced.MotionEstimation="Bewegingsinschatting"
46
-AMF.H264Advanced.MotionEstimation.None="Geen"
47
-AMF.H264Advanced.MotionEstimation.Half="Alleen halve pixel"
48
-AMF.H264Advanced.MotionEstimation.Quarter="Alleen kwart pixel"
49
-AMF.H264Advanced.MotionEstimation.Both="Beide"
50
-
51
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
52
-AMF.H264Simple.Preset="Voorkeursinstelling"
53
-AMF.H264Simple.Preset.Recording="Opnemen"
54
-AMF.H264Simple.Preset.Twitch="Twitch"
55
-AMF.H264Simple.Preset.YouTube="YouTube"
56
-AMF.H264Simple.KeyframeInterval="Tijd tussen keyframes (seconden)"
57
-AMF.H264Simple.UseCustomBufferSize="Aangepaste buffergrootte gebruiken"
58
-AMF.H264Simple.CustomBufferSize="Buffergrootte (kbit/s)"
59
-AMF.H264Simple.CustomBufferFullness="Initiële buffervulling"
60
-AMF.H264Simple.UseCustomGOPSize="Aangepaste GOP-grootte gebruiken"
61
-AMF.H264Simple.ShowAdvancedParameters="Geavanceerde Instellingen tonen"
62
-
63
AMF.Util.Default="Standaard"
64
AMF.Util.Toggle.Disabled="Uitgeschakeld"
65
AMF.Util.Toggle.Enabled="Ingeschakeld"
66
-
67
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/pl-PL.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/pl-PL.ini
Changed
83
1
2
-AMF.H264.Usage="Tryb działania"
3
+AMF.H264.Preset="Profil"
4
+AMF.H264.Preset.Recording="Nagrywanie"
5
+AMF.H264.Preset.HighQuality="Wysoka jakość"
6
+AMF.H264.Preset.Indistinguishable="Nie do odróżnienia"
7
+AMF.H264.Preset.Lossless="Bezstratny"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Sposób użycia"
11
AMF.H264.Usage.Transcoding="Konwersja"
12
AMF.H264.Usage.UltraLowLatency="Bardzo niskie opóźnienie"
13
AMF.H264.Usage.LowLatency="Niskie opóźnienie"
14
-AMF.H264.Usage.Webcam="Kamerka internetowa"
15
-AMF.H264.QualityPreset="Ustawienie jakości"
16
-AMF.H264.QualityPreset.Speed="Szybkość"
17
-AMF.H264.QualityPreset.Balanced="Zrównoważone"
18
-AMF.H264.QualityPreset.Quality="Jakość"
19
AMF.H264.Profile="Profil"
20
AMF.H264.ProfileLevel="Profil"
21
AMF.H264.RateControlMethod="Metoda kontroli przepływności"
22
23
AMF.H264.FillerData="Filler Data"
24
AMF.H264.FrameSkipping="Pomijanie klatek"
25
AMF.H264.EnforceHRDCompatibility="Wymuszanie zgodności HRD"
26
+AMF.H264.BPicture.Pattern="Schemat B-Picture"
27
+AMF.H264.BPicture.Reference="Referencyjny B-Picture"
28
AMF.H264.DeblockingFilter="Filtr niwelujacy bloki obrazu"
29
AMF.H264.ScanType="Metoda skanowania"
30
AMF.H264.ScanType.Progressive="Progresywne"
31
AMF.H264.ScanType.Interlaced="Z przeplotem"
32
-AMF.H264.BPicture.Pattern="Schemat B-Picture"
33
-AMF.H264.BPicture.Reference="Referencyjny B-Picture"
34
-AMF.H264.GOPSize="Rozmiar GOP"
35
+AMF.H264.QualityPreset="Ustawienie jakości"
36
+AMF.H264.QualityPreset.Speed="Szybkość"
37
+AMF.H264.QualityPreset.Balanced="Zrównoważone"
38
+AMF.H264.QualityPreset.Quality="Jakość"
39
AMF.H264.CABAC="Kodowanie Context Adaptive Binary Arithmetic Coding (CABAC)"
40
-AMF.H264.DebugTracing="Debugowanie śladów"
41
AMF.H264.MemoryType="Typ pamięci"
42
-AMF.H264.ComputeType="Typ obliczeń"
43
AMF.H264.SurfaceFormat="Format powierzchni"
44
-
45
-AMF.H264Advanced.Name="Enkoder H264 [Advanced] (AMD Advanced Media Framework)"
46
-AMF.H264Advanced.Reset="Przywróć ustawienia domyślne"
47
-AMF.H264Advanced.Update="Aktualizacja wartości z AMF (dla domyślnych/-1)"
48
-AMF.H264Advanced.MaxLTRFrames="Maksimum ramek LTR"
49
-AMF.H264Advanced.VBVBuffer.Size="Rozmiar bufora VBV (w bitach)"
50
-AMF.H264Advanced.VBVBuffer.Fullness="Początkowe zapełnienie bufora VBV"
51
-AMF.H264Advanced.MaxAUSize="Maksymalny rozmiar AU (w bitach)"
52
-AMF.H264Advanced.HeaderInsertionSpacing="Rozmiar nagłówka (w klatkach)"
53
-AMF.H264Advanced.IDRPeriod="Odległość między klatkami kluczowymi (w klatkach)"
54
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Pamięć Intra-Refresh w makroblokach na jeden slot (w megabajtach)"
55
-AMF.H264Advanced.SlicesPerFrame="Liczba bloków w jednej klatce"
56
-AMF.H264Advanced.MotionEstimation="Przewidywanie ruchu"
57
-AMF.H264Advanced.MotionEstimation.None="Brak"
58
-AMF.H264Advanced.MotionEstimation.Half="Tylko pół piksela"
59
-AMF.H264Advanced.MotionEstimation.Quarter="Tylko 1/4 piksela"
60
-AMF.H264Advanced.MotionEstimation.Both="Obydwa"
61
-
62
-AMF.H264Simple.Name="Enkoder H264 (AMD Advanced Media Framework)"
63
-AMF.H264Simple.Preset="Profil ustawień"
64
-AMF.H264Simple.Preset.Recording="Nagrywanie"
65
-AMF.H264Simple.Preset.Twitch="Twitch"
66
-AMF.H264Simple.Preset.YouTube="YouTube"
67
-AMF.H264Simple.Preset.HighQuality="High Quality (wysoka jakość)"
68
-AMF.H264Simple.Preset.Indistinguishable="Indistinguishable (nie do odróżnienia)"
69
-AMF.H264Simple.Preset.Lossless="Lossless (bezstratny)"
70
-AMF.H264Simple.KeyframeInterval="Odstęp między klatkami kluczowymi (sekundy)"
71
-AMF.H264Simple.UseCustomBufferSize="Użyj własnego rozmiaru bufora"
72
-AMF.H264Simple.CustomBufferSize="Rozmiar bufora (kbit/s)"
73
-AMF.H264Simple.CustomBufferFullness="Początkowe zapełnienie bufora"
74
-AMF.H264Simple.UseCustomGOPSize="Użyj własnego rozmiaru GOP"
75
-AMF.H264Simple.ShowAdvancedParameters="Zaawansowane"
76
-AMF.H264Simple.ShowExpertParameters="Eksperckie"
77
-
78
AMF.Util.Default="Domyślne"
79
AMF.Util.Automatic="Automatycznie"
80
AMF.Util.Toggle.Disabled="Wyłączone"
81
AMF.Util.Toggle.Enabled="Włączone"
82
-
83
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ru-RU.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/ru-RU.ini
Changed
147
1
2
-AMF.H264.Usage="Тип использования"
3
+AMF.H264.Preset="Предустановка"
4
+AMF.H264.Preset.Recording="Запись"
5
+AMF.H264.Preset.HighQuality="Высокое качество"
6
+AMF.H264.Preset.Indistinguishable="Незаметные потери"
7
+AMF.H264.Preset.Lossless="Без потерь"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Назначение"
11
+AMF.H264.Usage.Description="На какой режим использования должен быть настроен AMF:\n- 'Перекодировка' — для перекодировки общего назначения (рекомендуется),\n- 'Очень низкая задержка' — для кодировки с очень низкой задержкой,\n- 'Низкая задержка' похожа на пункт выше, но с немного большей задержкой.\nТрансляции поддерживают только 'перекодировку', все остальные значения могут быть использованы для записи."
12
AMF.H264.Usage.Transcoding="Транскодирование"
13
AMF.H264.Usage.UltraLowLatency="Очень низкая задержка"
14
AMF.H264.Usage.LowLatency="Низкая задержка"
15
-AMF.H264.Usage.Webcam="Вебкамера"
16
-AMF.H264.QualityPreset="Предустановки качества"
17
-AMF.H264.QualityPreset.Speed="Скорость"
18
-AMF.H264.QualityPreset.Balanced="Баланс"
19
-AMF.H264.QualityPreset.Quality="Качество"
20
AMF.H264.Profile="Профиль кодирования"
21
+AMF.H264.Profile.Description="Какой профиль H.264 следует использовать для кодирования:\n- 'Базовый' поддерживается наибольшим количеством платформ,\n- 'Основной' поддерживается 95% устройств (рекомендуется),\n- 'Высокий' поддерживается только устройствами высокого класса."
22
AMF.H264.ProfileLevel="Уровень профиля"
23
+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"
24
+AMF.H264.MaximumLTRFrames="Максимум LTR-кадров"
25
+AMF.H264.MaximumLTRFrames.Description="Long Term Reference (LTR) Frames - функция позволяющая кодировщику помечать определенные кадры в последовательности как ссылаемые.\nЭта функция может поднять качество, если функция B-Pictrues не поддерживается или не желательна.\nФункция LTR Frames не может использоваться вместе с функцией B-Pictrues и кодировщик отключит функцию B-Pictrues если таковая используется."
26
AMF.H264.RateControlMethod="Метод кодирования"
27
AMF.H264.RateControlMethod.CQP="CQP: постоянное качество"
28
AMF.H264.RateControlMethod.CBR="CBR: постоянный битрейт"
29
AMF.H264.RateControlMethod.VBR.Peak="VBR: переменный битрейт (Ограничение пиков)"
30
AMF.H264.RateControlMethod.VBR.Latency="VBR: переменный битрейт (Ограничение задержки)"
31
AMF.H264.Bitrate.Target="Битрейт"
32
+AMF.H264.Bitrate.Target.Description="Желаемый для получения битрейт всего потока.\nИспользуется с CBR и VBR_LAT."
33
AMF.H264.Bitrate.Peak="Пиковый битрейт"
34
+AMF.H264.Bitrate.Peak.Description="Битрейт работает на максимально пике в общей последовательности.\nИспользуется VBR и VBR_LAT."
35
AMF.H264.QP.Minimum="Минимальное QP"
36
+AMF.H264.QP.Minimum.Description="Наименьшее значение QP для использования в кадре.\nИспользуется CBR, VBR и VBR_LAT."
37
AMF.H264.QP.Maximum="Максимальное QP"
38
+AMF.H264.QP.Maximum.Description="Наибольшее значение QP для использования в кадре.\nИспользуется CBR, VBR и VBR_LAT."
39
AMF.H264.QP.IFrame="I-кадр QP"
40
+AMF.H264.QP.IFrame.Description="Фиксированное значение QP для использования в I-кадрах.\nМеньше = больше файл, лучше качество. Выше = меньше файл, хуже качество.\nQP у I-кадров должно быть больше или равно QP у P- и B-кадров.\nИспользуется CQP."
41
AMF.H264.QP.PFrame="P-кадр QP"
42
+AMF.H264.QP.PFrame.Description="Фиксированное значение QP для использования в P-кадрах.\nМеньше = больше файл, лучше качество. Выше = меньше файл, хуже качество.\nQP у P-кадров должно быть больше или равно QP у B-кадров.\nИспользуется CQP."
43
AMF.H264.QP.BFrame="B-кадр QP"
44
+AMF.H264.QP.BFrame.Description="Фиксированное значение QP для использования в B-кадрах.\nМеньше = больше файл, лучше качество. Больше = меньше файл, хуже качество.\nИспользуется CQP."
45
AMF.H264.QP.BPictureDelta="B-кадры дельта QP"
46
+AMF.H264.QP.BPictureDelta.Description="Дельта QP до последнего не референсного B-кадра."
47
AMF.H264.QP.ReferenceBPictureDelta="Референсные B-кадры дельта QP"
48
-AMF.H264.FillerData="Фильтрация данных"
49
+AMF.H264.QP.ReferenceBPictureDelta.Description="Дельта QP до последнего референсного B-кадра."
50
+AMF.H264.VBVBuffer="Буфер VBV"
51
+AMF.H264.VBVBuffer.Strictness="Строгость буфера VBV"
52
+AMF.H264.VBVBuffer.Strictness.Description="Насколько строго должен быть ограничен буфер VBV: 100% — почти полное соответствие целевому битрейту, 0% — без ограничений."
53
+AMF.H264.VBVBuffer.Size="Размер буфера VBV"
54
+AMF.H264.VBVBuffer.Fullness="Заполнение буфера VBV"
55
+AMF.H264.FillerData="Данные наполнителя"
56
AMF.H264.FrameSkipping="Пропуск кадров"
57
AMF.H264.EnforceHRDCompatibility="Принудительная HRD совместимость"
58
+AMF.H264.MaximumAccessUnitSize="Максимальный Размер Блока Доступа"
59
+AMF.H264.KeyframeInterval="Интервал ключевых кадров"
60
+AMF.H264.KeyframeInterval.Description="Сколько секунд должен быть просадок кадров.\nТакже контролирует GOP Size."
61
+AMF.H264.IDRPeriod="Период IDR"
62
+AMF.H264.IDRPeriod.Description="Сколько кадров должно быть что-бы не было просадка кадров.\nТакже контролирует GOP Size."
63
+AMF.H264.HeaderInsertionSpacing="Расстояние вставки заголовка"
64
+AMF.H264.BPicture.Pattern="Патерн B-кадра"
65
+AMF.H264.BPicture.Reference="Референс B-кадра"
66
+AMF.H264.BPicture.Reference.Description="Разрешает B-Кадрам ссылаться на другие B-Кадры как и на P- и I-Кадры.\nОгромный урон производительности, исправление низкого качества."
67
AMF.H264.DeblockingFilter="Фильтр деблокинга"
68
+AMF.H264.DeblockingFilter.Description="Устанавливает флаг, что декодер может использовать фильтр удаления блочности для прямой трансляции."
69
+AMF.H264.SlicesPerFrame="Количество частей на кадр"
70
+AMF.H264.IntraRefreshNumMBsPerSlot="Интра-обновить Количество Макроблоков в слот"
71
AMF.H264.ScanType="Развертка"
72
+AMF.H264.ScanType.Description="Какой режим сканирования использовать; всегда оставляется этот параметр на 'прогрессивном'."
73
AMF.H264.ScanType.Progressive="Прогрессивная"
74
AMF.H264.ScanType.Interlaced="Чересстрочная"
75
-AMF.H264.BPicture.Pattern="Патерн B-кадра"
76
-AMF.H264.BPicture.Reference="Референс B-кадра"
77
-AMF.H264.GOPSize="Размер GOP"
78
+AMF.H264.QualityPreset="Предустановки качества"
79
+AMF.H264.QualityPreset.Description="К какому пресету качества AMF нужно стремиться:\n-'Speed' самый быстрый, но имеет самое низкое качество,\n-'Balanced' между 'Speed' и 'Quality', предоставляет хорошее соотношение между скоростью и качеством,\n-'Quality' предоставляет наилучшее качество для предоставленного битрейта."
80
+AMF.H264.QualityPreset.Speed="Скорость"
81
+AMF.H264.QualityPreset.Balanced="Баланс"
82
+AMF.H264.QualityPreset.Quality="Качество"
83
+AMF.H264.MotionEstimation="Оценка движения"
84
+AMF.H264.MotionEstimation.Description="Оценки движения позволяет кодировщику необходимость уменьшить Битрейт, оценивая, где пиксель прошел."
85
+AMF.H264.MotionEstimation.None="Нет"
86
+AMF.H264.MotionEstimation.Half="Пол-пиксельная"
87
+AMF.H264.MotionEstimation.Quarter="Четверть-пиксельная"
88
+AMF.H264.MotionEstimation.Both="Пол- & Четверть-пиксельная"
89
AMF.H264.CABAC="Контекстно-адаптивное двоичное арифметическое кодирование (CABAC)"
90
-AMF.H264.DebugTracing="Debug Tracing"
91
+AMF.H264.CABAC.Description="Использовать CABAC (Контекстно-адаптивное двоичное арифметическое кодирование) вместо CALV.\nНе влияет на качество, но помогает со сжатием. В среднем можно ожидать улучшение сжатия на 5%."
92
AMF.H264.MemoryType="Тип памяти"
93
-AMF.H264.ComputeType="Тип вычислений"
94
+AMF.H264.MemoryType.Description="Как кадры должны быть сохранены перед передачей кодировщику:\n-'Автоматически' выбирает наилучший доступный источник памяти,\n-Host использует системную память,\n-DirectX 9 использует DirectX для передачи,\n-DirectX 11 использует DirectX для передачи,\n-OpenGL использует OpenGL для передачи.\n\n'Host' хороший выбор для большинства систем, но порой DirectX может помочь в ситуациях высокой нагрузки."
95
AMF.H264.SurfaceFormat="Формат поверхности"
96
-
97
-AMF.H264Advanced.Name="Кодировщик H.264 [Расширенный] (AMD Advanced Media Framework)"
98
-AMF.H264Advanced.Reset="Сбрость настройки"
99
-AMF.H264Advanced.Update="Скопировать настройки из AMF (если стоят по умолчанию/-1)"
100
-AMF.H264Advanced.MaxLTRFrames="Максимум LTR кадров"
101
-AMF.H264Advanced.VBVBuffer.Size="VBV размер буфера (в Битах)"
102
-AMF.H264Advanced.VBVBuffer.Fullness="Первоначальное заполнение буфера VBV"
103
-AMF.H264Advanced.MaxAUSize="Максимальный размер AU (в Битах)"
104
-AMF.H264Advanced.HeaderInsertionSpacing="Расстояние вставки заголовка (в кадрах)"
105
-AMF.H264Advanced.IDRPeriod="IDR (Keyframe) период (в Кадрах)"
106
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory на слот в макроблоках (в MB)"
107
-AMF.H264Advanced.SlicesPerFrame="Количество частей (slices) на кадр"
108
-AMF.H264Advanced.MotionEstimation="Оценка движения"
109
-AMF.H264Advanced.MotionEstimation.None="Нет"
110
-AMF.H264Advanced.MotionEstimation.Half="Полу-пиксельная точность"
111
-AMF.H264Advanced.MotionEstimation.Quarter="Четверть-пиксельная точность"
112
-AMF.H264Advanced.MotionEstimation.Both="Оба"
113
-
114
-AMF.H264Simple.Name="Кодировщик H.264 (AMD Advanced Media Framework)"
115
-AMF.H264Simple.Preset="Предустановки"
116
-AMF.H264Simple.Preset.Recording="Локальная запись"
117
-AMF.H264Simple.Preset.Twitch="Twitch"
118
-AMF.H264Simple.Preset.YouTube="YouTube"
119
-AMF.H264Simple.Preset.HighQuality="Высокое качество"
120
-AMF.H264Simple.Preset.Indistinguishable="Незаметные потери"
121
-AMF.H264Simple.Preset.Lossless="Без потерь"
122
-AMF.H264Simple.KeyframeInterval="Интервал ключевых кадров (сек)"
123
-AMF.H264Simple.UseCustomBufferSize="Использовать пользовательский размер буфера"
124
-AMF.H264Simple.CustomBufferSize="Размер буфера (kbit/s)"
125
-AMF.H264Simple.CustomBufferFullness="Первоначальное заполнение буфера"
126
-AMF.H264Simple.UseCustomGOPSize="Использовать пользовательский размер GOP"
127
-AMF.H264Simple.ShowAdvancedParameters="Показать расширенные параметры"
128
-AMF.H264Simple.ShowExpertParameters="Показать дополнительные параметры"
129
-
130
+AMF.H264.SurfaceFormat.Description="Какой формат использоваться для кодирования.\nТолько NV12 изначально поддерживается, другие типы требуют преобразования."
131
+AMF.H264.View="Режим просмотра"
132
+AMF.H264.View.Description="Какие параметры должны быть видны. Вы не будете получать поддержку при использовании режимов 'Эксперт' и 'Мастер'."
133
+AMF.H264.View.Basic="Обычный"
134
+AMF.H264.View.Advanced="Расширенный"
135
+AMF.H264.View.Expert="Эксперт"
136
+AMF.H264.View.Master="Мастер"
137
+AMF.H264.UnlockProperties="Разблокировать параметры"
138
+AMF.H264.UnlockProperties.Description="Разблокировать определённые параметры до их полного, неограниченного диапазона."
139
+AMF.H264.Debug="Отладка"
140
+AMF.H264.Debug.Description="Включить дополнительные логи для отладки; следует включить, если вам нужна поддержка с этим кодировщиком."
141
AMF.Util.Default="По умолчанию"
142
AMF.Util.Automatic="Автоматически"
143
+AMF.Util.Manual="Руководство"
144
AMF.Util.Toggle.Disabled="Выключено"
145
AMF.Util.Toggle.Enabled="Включено"
146
-
147
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/sr-CS.ini
Added
41
1
2
+AMF.H264.Usage.Transcoding="Transkodiranje"
3
+AMF.H264.Usage.UltraLowLatency="Ultra nisko kašnjenje"
4
+AMF.H264.Usage.LowLatency="Nisko kašnjenje"
5
+AMF.H264.Profile="Profil"
6
+AMF.H264.ProfileLevel="Nivo profila"
7
+AMF.H264.RateControlMethod="Metoda kontrole protoka"
8
+AMF.H264.RateControlMethod.CQP="Konstantan kvalitet (CQP)"
9
+AMF.H264.RateControlMethod.CBR="Konstantan protok (CBR)"
10
+AMF.H264.RateControlMethod.VBR.Peak="Promenjivi protok (sa gornjom granicom) (VBR)"
11
+AMF.H264.RateControlMethod.VBR.Latency="Promenjivi protok (sa granicom kašnjenja) (VBR_LAT)"
12
+AMF.H264.Bitrate.Target="Ciljani protok"
13
+AMF.H264.Bitrate.Peak="Granica protoka"
14
+AMF.H264.QP.Minimum="Minimalni QP"
15
+AMF.H264.QP.Maximum="Maksimalni QP"
16
+AMF.H264.QP.IFrame="I-Frejm QP"
17
+AMF.H264.QP.PFrame="P-Frejm QP"
18
+AMF.H264.QP.BFrame="B-Frejm QP"
19
+AMF.H264.QP.BPictureDelta="B-Promena slike QP"
20
+AMF.H264.QP.ReferenceBPictureDelta="Referenca B-Promena slike QP"
21
+AMF.H264.FillerData="Podaci za popunjavanje"
22
+AMF.H264.FrameSkipping="Preskakanje frejmova"
23
+AMF.H264.EnforceHRDCompatibility="Prisilna HRD kompatibilnost"
24
+AMF.H264.BPicture.Pattern="B-Šablonska slika"
25
+AMF.H264.BPicture.Reference="B-Referentna slika"
26
+AMF.H264.DeblockingFilter="Odblokirajući filter"
27
+AMF.H264.ScanType="Vrsta skeniranja"
28
+AMF.H264.ScanType.Progressive="Progresivno"
29
+AMF.H264.ScanType.Interlaced="Isprekidano"
30
+AMF.H264.QualityPreset="Šablon kvaliteta"
31
+AMF.H264.QualityPreset.Speed="Brzina"
32
+AMF.H264.QualityPreset.Balanced="Izbalansirano"
33
+AMF.H264.QualityPreset.Quality="Kvalitet"
34
+AMF.H264.CABAC="Binarno aritmetičko kodiranje prilagodljivo sadržaju (CABAC)"
35
+AMF.H264.MemoryType="Vrsta memorije"
36
+AMF.H264.SurfaceFormat="Format površine"
37
+AMF.Util.Default="Podrazumevano"
38
+AMF.Util.Automatic="Automatski"
39
+AMF.Util.Toggle.Disabled="Onemogućeno"
40
+AMF.Util.Toggle.Enabled="Omogućeno"
41
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/sr-SP.ini
Added
41
1
2
+AMF.H264.Usage.Transcoding="Транскодирање"
3
+AMF.H264.Usage.UltraLowLatency="Ултра ниско кашњење"
4
+AMF.H264.Usage.LowLatency="Ниско кашњење"
5
+AMF.H264.Profile="Профил"
6
+AMF.H264.ProfileLevel="Ниво профила"
7
+AMF.H264.RateControlMethod="Метода контроле протока"
8
+AMF.H264.RateControlMethod.CQP="Константан квалитет (CQP)"
9
+AMF.H264.RateControlMethod.CBR="Константан проток (CBR)"
10
+AMF.H264.RateControlMethod.VBR.Peak="Промењиви проток (са горњом границом) (VBR)"
11
+AMF.H264.RateControlMethod.VBR.Latency="Промењиви проток (са границом кашњења) (VBR_LAT)"
12
+AMF.H264.Bitrate.Target="Циљани проток"
13
+AMF.H264.Bitrate.Peak="Граница протока"
14
+AMF.H264.QP.Minimum="Минимални QP"
15
+AMF.H264.QP.Maximum="Максимални QP"
16
+AMF.H264.QP.IFrame="I-Фрејм QP"
17
+AMF.H264.QP.PFrame="P-Фрејм QP"
18
+AMF.H264.QP.BFrame="B-Фрејм QP"
19
+AMF.H264.QP.BPictureDelta="B-Промена слике QP"
20
+AMF.H264.QP.ReferenceBPictureDelta="Референца B-Промена слике QP"
21
+AMF.H264.FillerData="Подаци за попуњавање"
22
+AMF.H264.FrameSkipping="Прескакање фрејмова"
23
+AMF.H264.EnforceHRDCompatibility="Присилна HRD компатибилност"
24
+AMF.H264.BPicture.Pattern="B-Шаблонска слика"
25
+AMF.H264.BPicture.Reference="B-Референтна слика"
26
+AMF.H264.DeblockingFilter="Одблокирајући филтер"
27
+AMF.H264.ScanType="Врста скенирања"
28
+AMF.H264.ScanType.Progressive="Прогресивно"
29
+AMF.H264.ScanType.Interlaced="Испрекидано"
30
+AMF.H264.QualityPreset="Шаблон квалитета"
31
+AMF.H264.QualityPreset.Speed="Брзина"
32
+AMF.H264.QualityPreset.Balanced="Избалансирано"
33
+AMF.H264.QualityPreset.Quality="Квалитет"
34
+AMF.H264.CABAC="Бинарно аритметичко кодирање прилагодљиво садржају (CABAC)"
35
+AMF.H264.MemoryType="Врста меморије"
36
+AMF.H264.SurfaceFormat="Формат површине"
37
+AMF.Util.Default="Подразумевано"
38
+AMF.Util.Automatic="Аутоматски"
39
+AMF.Util.Toggle.Disabled="Онемогућено"
40
+AMF.Util.Toggle.Enabled="Омогућено"
41
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/sv-SE.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/sv-SE.ini
Changed
69
1
2
-AMF.H264.Usage="Användningstyp"
3
+AMF.H264.Preset="Förinställning"
4
+AMF.H264.Preset.HighQuality="Hög kvalitet"
5
+AMF.H264.Preset.Indistinguishable="Oskiljbar"
6
+AMF.H264.Preset.Lossless="Förlustfri"
7
+AMF.H264.Preset.Twitch="Twitch"
8
+AMF.H264.Preset.YouTube="YouTube"
9
+AMF.H264.Usage="Användning"
10
+AMF.H264.Usage.Transcoding="Omkodning"
11
AMF.H264.Usage.UltraLowLatency="Ultralåg latens"
12
AMF.H264.Usage.LowLatency="Låg latens"
13
-AMF.H264.Usage.Webcam="Webbkamera"
14
-AMF.H264.QualityPreset="Kvalitetsförinställning"
15
-AMF.H264.QualityPreset.Speed="Hastighet"
16
-AMF.H264.QualityPreset.Balanced="Balanserad"
17
-AMF.H264.QualityPreset.Quality="Kvalitet"
18
AMF.H264.Profile="Profil"
19
AMF.H264.ProfileLevel="Profilnivå"
20
AMF.H264.RateControlMethod.CQP="Konstant QP (CQP)"
21
AMF.H264.RateControlMethod.CBR="Konstant bithastighet (CBR)"
22
AMF.H264.Bitrate.Target="Målets bithastighet"
23
+AMF.H264.Bitrate.Peak="Maximal bithastighet"
24
AMF.H264.QP.Minimum="Minimal QP"
25
AMF.H264.QP.Maximum="Maximal QP"
26
+AMF.H264.FrameSkipping="Hoppa över bildrutor"
27
AMF.H264.EnforceHRDCompatibility="Tvinga HRD-kompatibilitet"
28
AMF.H264.DeblockingFilter="Avblockningsfilter"
29
AMF.H264.ScanType="Typ av skanning"
30
AMF.H264.ScanType.Progressive="Progressiv"
31
-AMF.H264.GOPSize="GOP-storlek"
32
+AMF.H264.ScanType.Interlaced="Sammanflätad"
33
+AMF.H264.QualityPreset="Kvalitetsförinställning"
34
+AMF.H264.QualityPreset.Speed="Hastighet"
35
+AMF.H264.QualityPreset.Balanced="Balanserad"
36
+AMF.H264.QualityPreset.Quality="Kvalitet"
37
+AMF.H264.MotionEstimation.None="Ingen"
38
AMF.H264.MemoryType="Minnestyp"
39
-
40
-AMF.H264Advanced.Name="H264-kodare [Avancerad] (AMD Advanced Media Framework)"
41
-AMF.H264Advanced.Reset="Grundinställningar"
42
-AMF.H264Advanced.MotionEstimation.None="Ingen"
43
-AMF.H264Advanced.MotionEstimation.Both="Båda"
44
-
45
-AMF.H264Simple.Name="H264-kodare (AMD Advanced Media Framework)"
46
-AMF.H264Simple.Preset="Förinställning"
47
-AMF.H264Simple.Preset.Recording="Inspelning"
48
-AMF.H264Simple.Preset.Twitch="Twitch"
49
-AMF.H264Simple.Preset.YouTube="YouTube"
50
-AMF.H264Simple.KeyframeInterval="Intervall för keyframes (sekunder)"
51
-AMF.H264Simple.UseCustomBufferSize="Använd anpassad buffertstorlek"
52
-AMF.H264Simple.CustomBufferSize="Buffertstorlek (kbit/s)"
53
-AMF.H264Simple.UseCustomGOPSize="Använd anpassad GOP-storlek"
54
-AMF.H264Simple.ShowAdvancedParameters="Visa avancerade parametrar"
55
-AMF.H264Simple.ShowExpertParameters="Visa expertparametrar"
56
-
57
+AMF.H264.View="Visningsläge"
58
+AMF.H264.View.Basic="Grundläggande"
59
+AMF.H264.View.Advanced="Avancerad"
60
+AMF.H264.View.Expert="Expert"
61
+AMF.H264.View.Master="Master"
62
+AMF.H264.Debug="Felsök"
63
AMF.Util.Default="Standard"
64
AMF.Util.Automatic="Automatisk"
65
+AMF.Util.Manual="Manuell"
66
AMF.Util.Toggle.Disabled="Inaktiverad"
67
AMF.Util.Toggle.Enabled="Aktiverad"
68
-
69
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/uk-UA.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/uk-UA.ini
Changed
115
1
2
-AMF.H264.Usage="Тип використання"
3
+AMF.H264.Preset="Шаблон"
4
+AMF.H264.Preset.Recording="Звичайний запис"
5
+AMF.H264.Preset.HighQuality="Висока якість"
6
+AMF.H264.Preset.Indistinguishable="Якість майже без втрат"
7
+AMF.H264.Preset.Lossless="Без втрат якості"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="Використання"
11
+AMF.H264.Usage.Description="Тип використання AMF або напрямок його використання, тобто:\n 'Для перекодування' - загальний тип налаштувань (рекомендований).\n 'З ультра-низькою затримкою' - тип лише для дійсно низької затримки під час кодування.\n 'З низькою затримкою' - схожий на зазначений вище, але з трохи більшою затримкою.\n\nТрансляції підтримують лише напрямок використання 'Для перекодування'."
12
AMF.H264.Usage.Transcoding="Для перекодування"
13
AMF.H264.Usage.UltraLowLatency="З ультра-низькою затримкою"
14
AMF.H264.Usage.LowLatency="З низькою затримкою"
15
-AMF.H264.Usage.Webcam="Для вебкамери"
16
-AMF.H264.QualityPreset="Шаблон якості"
17
-AMF.H264.QualityPreset.Speed="Швидкість"
18
-AMF.H264.QualityPreset.Balanced="Збалансований"
19
-AMF.H264.QualityPreset.Quality="Якість"
20
AMF.H264.Profile="Профіль"
21
AMF.H264.ProfileLevel="Рівень профілю"
22
-AMF.H264.RateControlMethod="Контроль потоку"
23
+AMF.H264.MaximumLTRFrames="Кількість LTR-кадрів контрольованих користувачем"
24
+AMF.H264.MaximumLTRFrames.Description="Long-Term Reference (LTR) кадри дозволяють при кодуванні маркувати декілька кадрів як опорні для інших.\nЦе може поліпшити якість у разі відсутності підтримки B-кадрів або небажаності їх використання.\nЯкщо 'Кількість LTR-кадрів контрольованих користувачем' вказано, то енкодер не підтримуватиме B-кадри у відео."
25
AMF.H264.RateControlMethod.CQP="Фіксований QP (CQP)"
26
AMF.H264.RateControlMethod.CBR="Постійний бітрейт (CBR)"
27
AMF.H264.RateControlMethod.VBR.Peak="Змінний бітрейт (максимальний бітрейт обмежено) (VBR)"
28
29
AMF.H264.QP.BFrame="QP для B-кадрів"
30
AMF.H264.QP.BPictureDelta="B-кадри, відхил QP"
31
AMF.H264.QP.ReferenceBPictureDelta="Опорні B-кадри, відхил QP"
32
+AMF.H264.VBVBuffer="Буфер VBV"
33
+AMF.H264.VBVBuffer.Size="Розмір VBV буфера"
34
+AMF.H264.VBVBuffer.Fullness="Початкова повнота буферу VBV"
35
+AMF.H264.VBVBuffer.Fullness.Description="Визначає початкову заповнюваність Буферу VBV, діє лише на початку кодування."
36
AMF.H264.FillerData="Заповнювати пустоти у бітрейту"
37
AMF.H264.FrameSkipping="Пропускати кадри"
38
AMF.H264.EnforceHRDCompatibility="Застосувати примусову сумісність з HRD"
39
+AMF.H264.MaximumAccessUnitSize="Максимальний розмір Access Unit"
40
+AMF.H264.KeyframeInterval="Інтервал ключових кадрів"
41
+AMF.H264.IDRPeriod="IDR, період (кадрів)"
42
+AMF.H264.HeaderInsertionSpacing="Заголовки потоку, період (кадрів)"
43
+AMF.H264.BPicture.Pattern="Послідовні B-кадри"
44
+AMF.H264.BPicture.Reference="B-кадри як опорні"
45
AMF.H264.DeblockingFilter="Деблокінг-фільтр"
46
+AMF.H264.SlicesPerFrame="Фрагментів на кадр"
47
+AMF.H264.IntraRefreshNumMBsPerSlot="Кількість Intra-Refresh макроблоків на слот"
48
AMF.H264.ScanType="Вид розгортки"
49
AMF.H264.ScanType.Progressive="Прогресивна"
50
AMF.H264.ScanType.Interlaced="Черезрядкова"
51
-AMF.H264.BPicture.Pattern="Послідовні B-кадри"
52
-AMF.H264.BPicture.Reference="B-кадри як опорні"
53
-AMF.H264.GOPSize="Розмір GOP"
54
+AMF.H264.QualityPreset="Шаблон якості"
55
+AMF.H264.QualityPreset.Speed="Швидкість"
56
+AMF.H264.QualityPreset.Balanced="Збалансований"
57
+AMF.H264.QualityPreset.Quality="Якість"
58
+AMF.H264.MotionEstimation="Оцінка руху"
59
+AMF.H264.MotionEstimation.Description="Оцінка руху дозволяє енкодеру зменшити вимоги до бітрейту завдяки розрахункам з переміщення пікселів."
60
+AMF.H264.MotionEstimation.None="Немає"
61
+AMF.H264.MotionEstimation.Half="Пів-пікселя"
62
+AMF.H264.MotionEstimation.Quarter="Чверть-пікселя"
63
+AMF.H264.MotionEstimation.Both="Пів-пікселя та Чверть-пікселя"
64
AMF.H264.CABAC="CABAC кодування"
65
-AMF.H264.DebugTracing="Інформація для відладки"
66
AMF.H264.MemoryType="Пам'ять адресується"
67
-AMF.H264.ComputeType="Використовувати бібліотеки"
68
+AMF.H264.MemoryType.Description="Визначає як кадри зберігатимуться перед надсиланням до енкодеру:\n 'Автоматично' - програма обирає найкращий спосіб самостійно;\n 'Host' - буде використано системну пам'ять;\n 'DirectX 9' - використовуються поверхні DirectX9 (Windows), пам'ять\nграфічного адаптера;\n 'DirectX 11' - використовуються поверхні DirectX11 (для Windows 8.1\nта новіших), пам'ять графічного адаптера;\n 'OpenGL' - використовуються поверхні OpenGL, пам'ять графічного\nадаптера.\n\nHost - достатньо гарний вибір для багатьох систем, хоча DirectX можна\nвикористати у край навантажених ситуаціях обміну даними (інколи допомагає)."
69
AMF.H264.SurfaceFormat="Формат поверхні (або кольору)"
70
-
71
-AMF.H264Advanced.Name="H264 енкодер [Advanced] (AMD Advanced Media Framework)"
72
-AMF.H264Advanced.Reset="Відновити параметри за замовчанням"
73
-AMF.H264Advanced.MaxLTRFrames="Кількість LTR-кадрів"
74
-AMF.H264Advanced.VBVBuffer.Size="Розмір VBV буфера (біт)"
75
-AMF.H264Advanced.VBVBuffer.Fullness="Початкова повнота буферу VBV"
76
-AMF.H264Advanced.MaxAUSize="Максимальний розмір AU (біт)"
77
-AMF.H264Advanced.HeaderInsertionSpacing="Заголовки потоку, період (кадрів)"
78
-AMF.H264Advanced.IDRPeriod="Ключові кадри, період (кадрів)"
79
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Кількість Intra-Refresh макроблоків на слот"
80
-AMF.H264Advanced.SlicesPerFrame="Фрагментів на кадр"
81
-AMF.H264Advanced.MotionEstimation="Оцінка руху"
82
-AMF.H264Advanced.MotionEstimation.None="Немає"
83
-AMF.H264Advanced.MotionEstimation.Half="Тільки Пів-пікселя"
84
-AMF.H264Advanced.MotionEstimation.Quarter="Тільки Чверть-пікселя"
85
-AMF.H264Advanced.MotionEstimation.Both="Обидва методи (Пів-пікселя + Чверть-пікселя)"
86
-
87
-AMF.H264Simple.Name="H264 енкодер (AMD Advanced Media Framework)"
88
-AMF.H264Simple.Preset="Шаблон"
89
-AMF.H264Simple.Preset.Recording="Локальний запис"
90
-AMF.H264Simple.Preset.Twitch="Twitch"
91
-AMF.H264Simple.Preset.YouTube="YouTube"
92
-AMF.H264Simple.KeyframeInterval="Інтервал ключових кадрів (секунд)"
93
-AMF.H264Simple.UseCustomBufferSize="Розмір буфера за користувачем"
94
-AMF.H264Simple.CustomBufferSize="Розмір буфера (кбіт/c)"
95
-AMF.H264Simple.CustomBufferFullness="Початкова повнота буферу"
96
-AMF.H264Simple.UseCustomGOPSize="Розмір GOP за користувачем"
97
-AMF.H264Simple.ShowAdvancedParameters="Показати додаткові параметри"
98
-AMF.H264Simple.ShowExpertParameters="Показати екстра параметри"
99
-
100
+AMF.H264.SurfaceFormat.Description="Визначає Формат поверхні (кольору) що використовується для кодування.\nЛише NV12 має вбудовану підтримку, інші типи потребують додаткового перетворення."
101
+AMF.H264.View="Вид для налаштувань"
102
+AMF.H264.View.Description="Визначає кількість наявних опцій для налаштування. Навряд чи розробник вам допомагатиме, якщо ви оберете рівень 'Експерт' або 'Бог енкодерів'."
103
+AMF.H264.View.Basic="Базовий"
104
+AMF.H264.View.Advanced="Розширений"
105
+AMF.H264.View.Expert="Експерт"
106
+AMF.H264.View.Master="Бог енкодерів"
107
+AMF.H264.Debug="Відладка"
108
+AMF.H264.Debug.Description="Вмикає занесення до лог-файлу додаткової інформації про процес кодування. Корисно у випадку коли ви бажаєте звернутися за допомогою до розробника енкодера."
109
AMF.Util.Default="За замовчанням"
110
AMF.Util.Automatic="Автоматично"
111
+AMF.Util.Manual="Вручну"
112
AMF.Util.Toggle.Disabled="Вимкнено"
113
AMF.Util.Toggle.Enabled="Увімкнено"
114
-
115
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/vi-VN.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/vi-VN.ini
Changed
100
1
2
-AMF.H264.Usage="Sử dụng loại"
3
+AMF.H264.Preset="Mẫu thiết lập"
4
+AMF.H264.Preset.Recording="Quay video"
5
+AMF.H264.Preset.HighQuality="Chất lượng cao"
6
+AMF.H264.Preset.Indistinguishable="Không thể phân biệt"
7
+AMF.H264.Preset.Lossless="Lossless"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
AMF.H264.Usage.Transcoding="Chuyển mã"
11
AMF.H264.Usage.UltraLowLatency="Độ trễ cực thấp"
12
AMF.H264.Usage.LowLatency="Độ trễ thấp"
13
-AMF.H264.Usage.Webcam="Webcam"
14
-AMF.H264.QualityPreset="Quality Preset"
15
-AMF.H264.QualityPreset.Speed="Tốc độ"
16
-AMF.H264.QualityPreset.Balanced="Cân bằng"
17
-AMF.H264.QualityPreset.Quality="Chất lượng"
18
AMF.H264.Profile="Profile"
19
AMF.H264.ProfileLevel="Profile Level"
20
+AMF.H264.MaximumLTRFrames="LTR Frames tối đa"
21
AMF.H264.RateControlMethod="Cách kiểm soát Bitrate"
22
AMF.H264.RateControlMethod.CQP="QP Không thay đổi (CQP)"
23
AMF.H264.RateControlMethod.CBR="Bitrate Không thay đổi (CBR)"
24
25
AMF.H264.QP.PFrame="P-Frame QP"
26
AMF.H264.QP.BFrame="B-Frame QP"
27
AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
28
+AMF.H264.QP.ReferenceBPictureDelta="Reference B-Picture Delta QP"
29
AMF.H264.FillerData="Filler Data (Thêm data cho đủ bitrate)"
30
AMF.H264.FrameSkipping="Frame Skipping"
31
AMF.H264.EnforceHRDCompatibility="Enforce HRD Compatibility"
32
+AMF.H264.KeyframeInterval="Thời gian đặt keyframe"
33
+AMF.H264.BPicture.Pattern="B-Picture Pattern"
34
+AMF.H264.BPicture.Reference="B-Picture Reference"
35
AMF.H264.DeblockingFilter="De-blocking Filter (Lọc chống nhiễu ảnh)"
36
+AMF.H264.SlicesPerFrame="Lát cho mỗi khung hình"
37
AMF.H264.ScanType="Quét hình loại"
38
AMF.H264.ScanType.Progressive="Quét nguyên ảnh (Progressive)"
39
AMF.H264.ScanType.Interlaced="Quét 1/2 ảnh (Interlaced)"
40
-AMF.H264.BPicture.Pattern="B-Picture Pattern"
41
-AMF.H264.BPicture.Reference="B-Picture Reference"
42
-AMF.H264.GOPSize="Kích cỡ GOP"
43
+AMF.H264.QualityPreset="Quality Preset"
44
+AMF.H264.QualityPreset.Speed="Tốc độ"
45
+AMF.H264.QualityPreset.Balanced="Cân bằng"
46
+AMF.H264.QualityPreset.Quality="Chất lượng"
47
+AMF.H264.MotionEstimation="Dự đoán bù trừ chuyển động"
48
+AMF.H264.MotionEstimation.Description="Dự toán chuyển động cho phép bộ mã hóa giảm bitrate cần thiết bằng cách ước tính một pixel sẽ đi đâu."
49
+AMF.H264.MotionEstimation.None="Không"
50
+AMF.H264.MotionEstimation.Half="1/2 Pixel"
51
+AMF.H264.MotionEstimation.Quarter="1/4 Pixel"
52
+AMF.H264.MotionEstimation.Both="1/2 và 1/4 Pixel"
53
AMF.H264.CABAC="Nén lossless theo tình huống (CABAC)"
54
-AMF.H264.DebugTracing="Debug Tracing (Dò lỗi)"
55
-
56
-AMF.H264Advanced.Name="H264 Encoder [Nâng cao] (AMD Advanced Media Framework)"
57
-AMF.H264Advanced.Reset="Thiết lập về mặc định"
58
-AMF.H264Advanced.Update="Cập nhật giá trị từ AMF (Nếu mặc định/-1)"
59
-AMF.H264Advanced.MaxLTRFrames="LTR Frames tối đa"
60
-AMF.H264Advanced.VBVBuffer.Size="VBV Buffer Size (bits)"
61
-AMF.H264Advanced.VBVBuffer.Fullness="Initial VBV Buffer Fullness"
62
-AMF.H264Advanced.MaxAUSize="AU Size tối đa (bits)"
63
-AMF.H264Advanced.HeaderInsertionSpacing="Header Insertion Spacing (Frames)"
64
-AMF.H264Advanced.IDRPeriod="Keyframe IDR-Period (Frames)"
65
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="Intra-Refresh Memory Per Slot In Macroblocks (trong MB)"
66
-AMF.H264Advanced.SlicesPerFrame="Slices Per Frame"
67
-AMF.H264Advanced.MotionEstimation="Dự đoán bù trừ chuyển động"
68
-AMF.H264Advanced.MotionEstimation.None="Không"
69
-AMF.H264Advanced.MotionEstimation.Half="Chỉ 1/2"
70
-AMF.H264Advanced.MotionEstimation.Quarter="Chỉ 1/4"
71
-AMF.H264Advanced.MotionEstimation.Both="Cả hai"
72
-
73
-AMF.H264Simple.Name="H264 Encoder (AMD Advanced Media Framework)"
74
-AMF.H264Simple.Preset="Preset"
75
-AMF.H264Simple.Preset.Recording="Quay video"
76
-AMF.H264Simple.Preset.Twitch="Twitch"
77
-AMF.H264Simple.Preset.YouTube="YouTube"
78
-AMF.H264Simple.KeyframeInterval="Thời gian đặt Keyframe (giây)"
79
-AMF.H264Simple.UseCustomBufferSize="Dùng Custom Buffer Size"
80
-AMF.H264Simple.CustomBufferSize="Buffer Size (kbit/s)"
81
-AMF.H264Simple.UseCustomGOPSize="Dùng Kích cỡ GOP tùy chỉnh"
82
-AMF.H264Simple.ShowAdvancedParameters="Hiện các thông số nâng cao"
83
-
84
+AMF.H264.CABAC.Description="Sử dụng CABAC (Context Adaptive Binary Arithmethic Coding) thay vì CALV.\nKhông ảnh hưởng đến chất lượng nhưng tăng khả năng nén. Trung bình có thể nén được 5% tổng dung lượng."
85
+AMF.H264.MemoryType="Loại bộ nhớ"
86
+AMF.H264.SurfaceFormat="Định dạng bề mặt"
87
+AMF.H264.View="Chế độ xem"
88
+AMF.H264.View.Basic="Cơ bản"
89
+AMF.H264.View.Advanced="Nâng cao"
90
+AMF.H264.View.Expert="Chuyên gia"
91
+AMF.H264.View.Master="Bật cả tính năng ẩn"
92
+AMF.H264.UnlockProperties="Mở khóa Properties"
93
+AMF.H264.Debug="Gỡ lỗi"
94
AMF.Util.Default="Mặc định"
95
+AMF.Util.Automatic="Tự động"
96
+AMF.Util.Manual="Thủ công"
97
AMF.Util.Toggle.Disabled="Tắt"
98
AMF.Util.Toggle.Enabled="Bật"
99
-
100
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/zh-CN.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/zh-CN.ini
Changed
152
1
2
-AMF.H264.Usage="使用类型"
3
+AMF.H264.Preset="预设"
4
+AMF.H264.Preset.Recording="录像"
5
+AMF.H264.Preset.HighQuality="高质量"
6
+AMF.H264.Preset.Indistinguishable="无法区分"
7
+AMF.H264.Preset.Lossless="无损"
8
+AMF.H264.Preset.Twitch="Twitch"
9
+AMF.H264.Preset.YouTube="YouTube"
10
+AMF.H264.Usage="使用"
11
+AMF.H264.Usage.Description="AMF 应调整为什么用法:\n-'转码' 是通用转码(推荐), \n '超低延迟' 对于真的低延迟编码,\n-'低延迟' 类似于上面稍高的延迟.\n 推流仅支持 '转码', 所有其他值可以用于录制."
12
AMF.H264.Usage.Transcoding="转码"
13
AMF.H264.Usage.UltraLowLatency="超低延迟"
14
AMF.H264.Usage.LowLatency="低延迟"
15
-AMF.H264.Usage.Webcam="网络摄像头"
16
-AMF.H264.QualityPreset="质量预设"
17
-AMF.H264.QualityPreset.Speed="速度"
18
-AMF.H264.QualityPreset.Balanced="平衡"
19
-AMF.H264.QualityPreset.Quality="质量"
20
AMF.H264.Profile="配置文件"
21
+AMF.H264.Profile.Description="使用哪个 H.264 Profile 来编码:\n-'Baseline' 最广泛支持,\n-'Main'被 95% 设备支持(推荐),\n-'High' 只被高端设备支持."
22
AMF.H264.ProfileLevel="配置等级"
23
+AMF.H264.ProfileLevel.Description="对于编码使用哪种 H.264 Profile Level:\n-'Automatic' 根据给定的帧率和帧大小计算最优的 profile level,\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"
24
+AMF.H264.MaximumLTRFrames="最大的 LTR 帧"
25
+AMF.H264.MaximumLTRFrames.Description="长期参考帧(LTR) 是一个特性允许编码器来标记在一个序列的一些帧作为参考帧.\n这会使当 B 帧不支持或者不需要时提高质量.\nLTR真不能和 B 帧一起使用, 并且当使用LTR时, 编码器会禁用 B 帧."
26
AMF.H264.RateControlMethod="速率控制方法"
27
AMF.H264.RateControlMethod.CQP="恒定 QP (CQP)"
28
AMF.H264.RateControlMethod.CBR="固定比特率 (CBR)"
29
AMF.H264.RateControlMethod.VBR.Peak="变比特率 (峰值约束) (VBR)"
30
AMF.H264.RateControlMethod.VBR.Latency="变比特率 (延迟约束) (VBR_LAT)"
31
AMF.H264.Bitrate.Target="目标比特率"
32
+AMF.H264.Bitrate.Target.Description="比特率尝试在整个序列获得.\n用于 CBR 和 VBR_LAT."
33
AMF.H264.Bitrate.Peak="峰值比特率"
34
+AMF.H264.Bitrate.Peak.Description="比特率尝试最大峰值在整个序列.\n 用于 VBR 和 VBR_LAT"
35
AMF.H264.QP.Minimum="最低 QP"
36
+AMF.H264.QP.Minimum.Description="在一个帧中的追的 QP 值.\n 用于 CBR, VBR 和 VBR_LAT."
37
AMF.H264.QP.Maximum="最高 QP"
38
+AMF.H264.QP.Maximum.Description="在一个帧中的最高 QP 值.\n 用于 CBR, VBR 和 VBR_LAT."
39
AMF.H264.QP.IFrame="I 帧 QP"
40
+AMF.H264.QP.IFrame.Description="用于 I 帧的固定 QP 值.\n 较低 = 较大的文件, 较好的资料. 较高 = 较小的文件, 较差的质量.\nI 帧 QP 应该等于或者大于 P 和 B 帧的 QP 值.\n 用于 CQP."
41
AMF.H264.QP.PFrame="P 帧 QP"
42
+AMF.H264.QP.PFrame.Description="固定的 QP 值用于 P 帧.\n 较低 = 较大的文件, 较高的质量. 较高 = 较小的文件, 较差的质量.\nP 帧 QP 值应该等于或者高于 B 帧的 QP 值.\n用于 CQP."
43
AMF.H264.QP.BFrame="B 帧 QP"
44
+AMF.H264.QP.BFrame.Description="用于 B 帧的固定的 QP 值.\n 较小 = 较大的文件, 较好的质量. 较大 = 较小的文件, 较差的质量.\n 用于 CQP."
45
AMF.H264.QP.BPictureDelta="B 图片 差值 QP"
46
+AMF.H264.QP.BPictureDelta.Description="相对于上一个非参考 B 帧的差值 QP 值."
47
AMF.H264.QP.ReferenceBPictureDelta="参考 B 图片 差值 QP"
48
+AMF.H264.QP.ReferenceBPictureDelta.Description="相对于上一个参考 B 帧的差值 QP 值."
49
+AMF.H264.VBVBuffer="VBV 缓存"
50
+AMF.H264.VBVBuffer.Strictness="VBV 缓存规范性"
51
+AMF.H264.VBVBuffer.Strictness.Description="VBV 缓存应该怎样严格, 100% 几乎完全和目标比特率一致和 0% 不受限制的."
52
+AMF.H264.VBVBuffer.Size="VBV 缓存大小"
53
+AMF.H264.VBVBuffer.Size.Description="VBV 缓存大小用于在一个序列中的比特率控制.\n体积小会产生几乎完美的比特率控制但有较大的性能影响.\n理想的(100% 严格) VBV 缓存大小是比特率/帧率."
54
+AMF.H264.VBVBuffer.Fullness="VBV 缓冲满"
55
+AMF.H264.VBVBuffer.Fullness.Description="VBV 缓存最初应该多满, 将只会影响最初的序列的编码."
56
AMF.H264.FillerData="填充数据"
57
+AMF.H264.FillerData.Description="填充数据是解码器忽略的空/无效数据.\n如果启用和使用 CBR, 编码器将会塞满序列中的剩余空间此数据."
58
AMF.H264.FrameSkipping="跳过的帧"
59
+AMF.H264.FrameSkipping.Description="跳过的帧允许编码器有选择地跳过帧, 如果他们非常相似, 或太长时间编码.\n编码这个将使输出文件为可变帧率, 这样大多数编辑软件不支持."
60
AMF.H264.EnforceHRDCompatibility="强制 HRD 兼容"
61
+AMF.H264.EnforceHRDCompatibility.Description="强制假设的参考解码器限制在一个帧内的最大的 QP 值更改.\n不推荐用于录制或推流, 并且应仅用于面向只有参考软件解码器的很老的设备."
62
+AMF.H264.MaximumAccessUnitSize="最大访问单元大小"
63
+AMF.H264.MaximumAccessUnitSize.Description="一个 NAL 的访问单元的最大大小. 值 0 允许编码器挑选最好的一个."
64
+AMF.H264.KeyframeInterval="关键帧间隔"
65
+AMF.H264.KeyframeInterval.Description="非丢弃帧之间应该多少秒.\n也控制序列(GOP) 的大小."
66
+AMF.H264.IDRPeriod="IDR 周期"
67
+AMF.H264.IDRPeriod.Description="非丢弃帧之间应该多少帧.\n也控制序列(GOP) 的大小."
68
+AMF.H264.HeaderInsertionSpacing="头部插入空白"
69
+AMF.H264.HeaderInsertionSpacing.Description="NAL 头之间应该多少帧. 不推荐改为非零(自动) 值."
70
+AMF.H264.BPicture.Pattern="B 图片模式"
71
+AMF.H264.BPicture.Reference="B 图片参考"
72
+AMF.H264.BPicture.Reference.Description="允许 B 帧参考 P 帧和 I 帧之外的其他 B 帧.\n 巨大的性能影响, 较小的质量提高."
73
AMF.H264.DeblockingFilter="去块滤波"
74
+AMF.H264.DeblockingFilter.Description="设置解码器允许使用的标记, 用于编码流去块滤波器."
75
+AMF.H264.SlicesPerFrame="每帧的切片数"
76
+AMF.H264.SlicesPerFrame.Description="使用固定切片编码而不动态切片编码.\n可以帮助用大分辨率和帧率, 由于它允许更多的数据存储在相同的 profile level, 但大多时候会对质量有负面影响."
77
+AMF.H264.IntraRefreshNumMBsPerSlot="每个槽的内部宏块刷新数量"
78
+AMF.H264.IntraRefreshNumMBsPerSlot.Description="应该允许每个插槽中多少个宏块用于帧内刷新编码.\n帧内刷新编码允许更快的寻找和解码, 以一个较高的比特率为代价, 由于需要存储额外的数据.\n 推流时保持为默认值."
79
AMF.H264.ScanType="扫描类型"
80
+AMF.H264.ScanType.Description="使用哪种扫描方法, 通常设置为'Progressive'."
81
AMF.H264.ScanType.Progressive="渐进"
82
AMF.H264.ScanType.Interlaced="交错"
83
-AMF.H264.BPicture.Pattern="B 图片模式"
84
-AMF.H264.BPicture.Reference="B 图片参考"
85
-AMF.H264.GOPSize="GOP 大小"
86
+AMF.H264.QualityPreset="质量预设"
87
+AMF.H264.QualityPreset.Description="哪种质量预设 AMF 应该尝试对于目标:\n-'速度' 是最快但有最差的质量,\n-'平衡' 是 '速度' 和 '质量' 之间, 提供一个两者之间的较好的平衡,\n-'质量' 给出了最好的质量对于给定的比特率."
88
+AMF.H264.QualityPreset.Speed="速度"
89
+AMF.H264.QualityPreset.Balanced="平衡"
90
+AMF.H264.QualityPreset.Quality="质量"
91
+AMF.H264.MotionEstimation="移动侦测"
92
+AMF.H264.MotionEstimation.Description="运动侦测允许编码器通过估计一个像素去了哪里来降低比特率."
93
+AMF.H264.MotionEstimation.None="无"
94
+AMF.H264.MotionEstimation.Half="半像素"
95
+AMF.H264.MotionEstimation.Quarter="四分之一像素"
96
+AMF.H264.MotionEstimation.Both="半&四分之一像素"
97
AMF.H264.CABAC="上下文自适应二进制算术编码 (CABAC)"
98
-AMF.H264.DebugTracing="调试跟踪"
99
+AMF.H264.CABAC.Description="使用 CABAC(Context Adaptive Binary Arithmethic Coding) 取代 CALV.\n 不影响质量但是对压缩有帮助. 平均, 可以预期有 5% 更好的压缩率."
100
AMF.H264.MemoryType="内存类型"
101
-AMF.H264.ComputeType="计算类型"
102
+AMF.H264.MemoryType.Description="在提交给编码器之前应该如何存储帧:\n-'自动' 选择最佳可用内存后端类型,\n- '主机' 使用系统内存,\n- 'DirectX 9' 使用 DirectX 接口来提交, \n- 'DirectX 11' 使用 DirectX 来提交, \n 'OpenGL' 使用 OpenGL 接口来提交.\n\n 'Host' 对于大多数系统不够好, 但 DirectX 可以偶尔缓解高负载的情况."
103
AMF.H264.SurfaceFormat="表面格式"
104
-
105
-AMF.H264Advanced.Name="H264 编码器 [Advanced] (AMD 高级媒体框架)"
106
-AMF.H264Advanced.Reset="重设为默认值"
107
-AMF.H264Advanced.Update="更新来自 AMF 的值 (如果在默认 /-1)"
108
-AMF.H264Advanced.MaxLTRFrames="最大的 LTR 帧"
109
-AMF.H264Advanced.VBVBuffer.Size="VBV 缓冲区大小 (bits)"
110
-AMF.H264Advanced.VBVBuffer.Fullness="初始 VBV 缓冲区满"
111
-AMF.H264Advanced.MaxAUSize="最大化 AU 大小(比特)"
112
-AMF.H264Advanced.HeaderInsertionSpacing="头部插入空白 (帧)"
113
-AMF.H264Advanced.IDRPeriod="关键帧间隔 (帧)"
114
-AMF.H264Advanced.IntraRefreshNumMBPerSlot="在宏块中每个插槽的内刷新内存 (单位 MB)"
115
-AMF.H264Advanced.SlicesPerFrame="每帧的切片数"
116
-AMF.H264Advanced.MotionEstimation="移动侦测"
117
-AMF.H264Advanced.MotionEstimation.None="无"
118
-AMF.H264Advanced.MotionEstimation.Half="只有半像素"
119
-AMF.H264Advanced.MotionEstimation.Quarter="只有四分之一像素"
120
-AMF.H264Advanced.MotionEstimation.Both="两个"
121
-
122
-AMF.H264Simple.Name="H264 编码器 (AMD 高级媒体框架)"
123
-AMF.H264Simple.Preset="预设"
124
-AMF.H264Simple.Preset.Recording="录像"
125
-AMF.H264Simple.Preset.Twitch="Twitch"
126
-AMF.H264Simple.Preset.YouTube="YouTube"
127
-AMF.H264Simple.KeyframeInterval="关键帧间隔 (秒)"
128
-AMF.H264Simple.UseCustomBufferSize="使用自定义缓存大小"
129
-AMF.H264Simple.CustomBufferSize="缓冲大小 (kbit/s)"
130
-AMF.H264Simple.CustomBufferFullness="初始缓冲区满"
131
-AMF.H264Simple.UseCustomGOPSize="使用自定义 GOP 大小"
132
-AMF.H264Simple.ShowAdvancedParameters="显示高级参数"
133
-AMF.H264Simple.ShowExpertParameters="显示专家参数"
134
-
135
+AMF.H264.SurfaceFormat.Description="什么接口格式用于编码.\n 只有 NV12 本地支持, 其他类型需要转换."
136
+AMF.H264.View="查看模式"
137
+AMF.H264.View.Description="哪些属性应该是可见的. 当使用 '专家' 或者 '大师' 模式时, 您将不会得到支持."
138
+AMF.H264.View.Basic="基本"
139
+AMF.H264.View.Advanced="高级"
140
+AMF.H264.View.Expert="专家"
141
+AMF.H264.View.Master="主"
142
+AMF.H264.UnlockProperties="解锁属性"
143
+AMF.H264.UnlockProperties.Description="解锁给他们完整范围的某些属性, 而不是将他们局限到一定范围内."
144
+AMF.H264.Debug="调试"
145
+AMF.H264.Debug.Description="启用附加调试日志记录, 应该是启用的, 无论何时您需要此编码器的支持."
146
AMF.Util.Default="默认"
147
AMF.Util.Automatic="自动"
148
+AMF.Util.Manual="手动"
149
AMF.Util.Toggle.Disabled="禁用"
150
AMF.Util.Toggle.Enabled="启用"
151
-
152
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/zh-TW.ini -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Resources/locale/zh-TW.ini
Changed
49
1
2
-AMF.H264.Usage="使用類型"
3
AMF.H264.Usage.Transcoding="轉碼"
4
AMF.H264.Usage.UltraLowLatency="超低延遲"
5
AMF.H264.Usage.LowLatency="低延遲"
6
-AMF.H264.Usage.Webcam="網路攝影機"
7
-AMF.H264.QualityPreset="預設品質"
8
-AMF.H264.QualityPreset.Speed="速度"
9
-AMF.H264.QualityPreset.Balanced="平衡"
10
-AMF.H264.QualityPreset.Quality="品質"
11
AMF.H264.Profile="設定檔"
12
AMF.H264.ProfileLevel="設定檔級別"
13
AMF.H264.RateControlMethod="速率控制方法"
14
15
AMF.H264.QP.IFrame="I-訊框 QP"
16
AMF.H264.QP.PFrame="P-訊框 QP"
17
AMF.H264.QP.BFrame="B-訊框 QP"
18
+AMF.H264.QP.BPictureDelta="B-Picture Delta QP"
19
+AMF.H264.QP.ReferenceBPictureDelta="Reference B-Picture Delta QP"
20
+AMF.H264.FillerData="填充資料"
21
AMF.H264.FrameSkipping="省略訊框"
22
-
23
-AMF.H264Advanced.Name="H264 編碼器 [Advanced] (AMD Advanced Media Framework)"
24
-AMF.H264Advanced.HeaderInsertionSpacing="標頭插入間距 (訊框)"
25
-AMF.H264Advanced.IDRPeriod="關鍵訊框週期 (訊框)"
26
-
27
-AMF.H264Simple.Name="H264 編碼器 (AMD Advanced Media Framework)"
28
-AMF.H264Simple.KeyframeInterval="關鍵訊框間隔 (秒)"
29
-
30
-
31
+AMF.H264.EnforceHRDCompatibility="與 HRD 相容"
32
+AMF.H264.BPicture.Pattern="B-Picture 模式"
33
+AMF.H264.BPicture.Reference="B-Picture 參照"
34
+AMF.H264.DeblockingFilter="去塊狀色斑濾鏡"
35
+AMF.H264.ScanType="掃描類型"
36
+AMF.H264.ScanType.Progressive="漸進式"
37
+AMF.H264.ScanType.Interlaced="交错式"
38
+AMF.H264.QualityPreset="預設品質"
39
+AMF.H264.QualityPreset.Speed="速度"
40
+AMF.H264.QualityPreset.Balanced="平衡"
41
+AMF.H264.QualityPreset.Quality="品質"
42
+AMF.H264.CABAC="前文參考之適應性二元算術編碼 (CABAC)"
43
+AMF.H264.MemoryType="記憶體類型"
44
+AMF.H264.SurfaceFormat="表面格式"
45
+AMF.Util.Default="預設"
46
+AMF.Util.Automatic="自動"
47
+AMF.Util.Toggle.Disabled="停用"
48
+AMF.Util.Toggle.Enabled="啟用"
49
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Source/amd-amf-vce.cpp -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/amd-amf-vce.cpp
Changed
1387
1
2
//////////////////////////////////////////////////////////////////////////
3
#include "amd-amf-vce.h"
4
#include "amd-amf-vce-capabilities.h"
5
+#include "misc-util.cpp"
6
7
-#if (defined _WIN32) | (defined _WIN64)
8
+#ifdef _WIN32
9
#include <windows.h>
10
#include <VersionHelpers.h>
11
+
12
+#include "api-d3d9.h"
13
+#include "api-d3d11.h"
14
#endif
15
16
//////////////////////////////////////////////////////////////////////////
17
18
p_this->OutputThreadLogic();
19
}
20
21
-Plugin::AMD::VCEEncoder::VCEEncoder(VCEEncoderType p_Type, VCESurfaceFormat p_SurfaceFormat /*= VCESurfaceFormat_NV12*/, VCEMemoryType p_MemoryType /*= VCEMemoryType_Auto*/, VCEComputeType p_ComputeType /*= VCEComputeType_None*/) {
22
+Plugin::AMD::VCEEncoder::VCEEncoder(VCEEncoderType p_Type,
23
+ VCESurfaceFormat p_SurfaceFormat /*= VCESurfaceFormat_NV12*/,
24
+ VCEMemoryType p_MemoryType /*= VCEMemoryType_Auto*/,
25
+ bool p_UseOpenCL /*= false*/, std::string p_DeviceUniqueId /*= ""*/) {
26
AMF_RESULT res;
27
28
AMF_LOG_INFO("<Plugin::AMD::VCEEncoder::VCEEncoder> Initializing...");
29
30
m_EncoderType = p_Type;
31
m_SurfaceFormat = p_SurfaceFormat;
32
m_MemoryType = p_MemoryType;
33
- m_ComputeType = p_ComputeType;
34
+ m_UseOpenCL = p_UseOpenCL;
35
m_Flag_IsStarted = false;
36
- m_Flag_EmergencyQuit = false;
37
m_Flag_Threading = true;
38
m_FrameSize.first = 64; m_FrameSize.second = 64;
39
m_FrameRate.first = 30; m_FrameRate.second = 1;
40
m_FrameRateDivisor = ((double_t)m_FrameRate.first / (double_t)m_FrameRate.second);
41
m_FrameRateReverseDivisor = ((double_t)m_FrameRate.second / (double_t)m_FrameRate.first);
42
m_InputQueueLimit = (uint32_t)(m_FrameRateDivisor * 3);
43
+ m_InputQueueLastSize = 0;
44
m_TimerPeriod = 1;
45
46
// AMF
47
48
/// AMF Context
49
res = m_AMFFactory->CreateContext(&m_AMFContext);
50
if (res != AMF_OK) {
51
- AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::VCEEncoder> Creating a context object failed with error code %d.", res);
52
- throw;
53
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> Creating a context object failed with error %ls (code %ld).", res);
54
}
55
56
// Initialize Memory
57
58
case VCEMemoryType_Host:
59
res = AMF_OK;
60
break;
61
+ #ifdef _WIN32
62
+ case VCEMemoryType_OpenGL:
63
+ if (p_DeviceUniqueId.empty()) {
64
+ res = m_AMFContext->InitOpenGL(nullptr, nullptr, nullptr);
65
+ } else {
66
+ /*m_APIDevice = Plugin::API::OpenGL(Plugin::API::OpenGL::GetDeviceForUniqueId(p_DeviceUniqueId));
67
+ res = m_AMFContext->InitOpenGL(m_APIDevice.GetContext(), nullptr, nullptr);*/
68
+ }
69
+ break;
70
case VCEMemoryType_DirectX11:
71
if (IsWindows8OrGreater()) {
72
- res = m_AMFContext->InitDX11(nullptr);
73
+ if (p_DeviceUniqueId.empty()) {
74
+ res = m_AMFContext->InitDX11(nullptr);
75
+ } else {
76
+ m_APIDevice = Plugin::API::Direct3D11(Plugin::API::Direct3D11::GetDeviceForUniqueId(p_DeviceUniqueId));
77
+ res = m_AMFContext->InitDX11(m_APIDevice.GetContext());
78
+ }
79
} else {
80
AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::VCEEncoder> DirectX 11 is only supported on Windows 8 or newer, using Host Memory Type instead.");
81
m_MemoryType = VCEMemoryType_Host;
82
83
break;
84
case VCEMemoryType_DirectX9:
85
if (IsWindowsXPOrGreater()) {
86
- res = m_AMFContext->InitDX9(nullptr);
87
+ if (p_DeviceUniqueId.empty()) {
88
+ res = m_AMFContext->InitDX9(nullptr);
89
+ } else {
90
+ m_APIDevice = Plugin::API::Direct3D9(Plugin::API::Direct3D9::GetDeviceForUniqueId(p_DeviceUniqueId));
91
+ res = m_AMFContext->InitDX9(m_APIDevice.GetContext());
92
+ }
93
} else {
94
AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::VCEEncoder> DirectX 11 is only supported on Windows 8 or newer, using Host Memory Type instead.");
95
m_MemoryType = VCEMemoryType_Host;
96
}
97
break;
98
- case VCEMemoryType_OpenGL:
99
- res = m_AMFContext->InitOpenGL(nullptr, nullptr, nullptr);
100
- break;
101
+ #endif
102
}
103
if (res != AMF_OK)
104
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> Initializing 3D queue failed with error %ls (code %d)", res);
105
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> Initializing 3D queue failed with error %ls (code %ld).", res);
106
107
- switch (m_ComputeType) {
108
- case VCEComputeType_None:
109
- break;
110
- case VCEComputeType_OpenCL:
111
- res = m_AMFContext->InitOpenCL(nullptr);
112
- if (res != AMF_OK)
113
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> InitOpenCL failed with error %ls (code %d)", res);
114
- m_AMFContext->GetCompute(amf::AMF_MEMORY_OPENCL, &m_AMFCompute);
115
- break;
116
+ if (m_UseOpenCL) {
117
+ if (m_MemoryType == VCEMemoryType_Host)
118
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> Use of OpenCL without DirectX or OpenGL is not supported, error %ls (code %d).", AMF_NOT_SUPPORTED);
119
+
120
+ res = m_AMFContext->InitOpenCL(nullptr);
121
+ if (res != AMF_OK)
122
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> InitOpenCL failed with error %ls (code %ld).", res);
123
+ m_AMFContext->GetCompute(amf::AMF_MEMORY_OPENCL, &m_AMFCompute);
124
}
125
126
/// AMF Component (Encoder)
127
128
break;
129
}
130
if (res != AMF_OK)
131
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> Creating a component object failed with error %ls (code %d).", res);
132
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::VCEEncoder> Creating a component object failed with error %ls (code %ld).", res);
133
134
AMF_LOG_INFO("<Plugin::AMD::VCEEncoder::VCEEncoder> Initialization complete!");
135
}
136
137
// Create Encoder
138
AMF_RESULT res = m_AMFEncoder->Init(surfaceFormatToAMF[m_SurfaceFormat], m_FrameSize.first, m_FrameSize.second);
139
if (res != AMF_OK)
140
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::Start> Initialization failed with error %ls (code %d).", res);
141
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::Start> Initialization failed with error %ls (code %ld).", res);
142
143
m_Flag_IsStarted = true;
144
145
146
}
147
}
148
149
-void Plugin::AMD::VCEEncoder::Stop() {
150
- m_Flag_IsStarted = false;
151
+void Plugin::AMD::VCEEncoder::Restart() {
152
+ static amf::AMF_SURFACE_FORMAT surfaceFormatToAMF[] = {
153
+ // 4:2:0 Formats
154
+ amf::AMF_SURFACE_NV12,
155
+ amf::AMF_SURFACE_YUV420P,
156
+ // 4:2:2 Formats
157
+ amf::AMF_SURFACE_YUY2,
158
+ // Uncompressed
159
+ amf::AMF_SURFACE_BGRA,
160
+ amf::AMF_SURFACE_RGBA,
161
+ // Other
162
+ amf::AMF_SURFACE_GRAY8,
163
+ };
164
+
165
+ if (!m_Flag_IsStarted)
166
+ return;
167
+
168
+ std::unique_lock<std::mutex> ilock(m_Input.mutex);
169
+ std::unique_lock<std::mutex> olock(m_Output.mutex);
170
+
171
+ // Create Encoder
172
+ AMF_RESULT res = m_AMFEncoder->ReInit(m_FrameSize.first, m_FrameSize.second);
173
+ if (res != AMF_OK)
174
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::Start> Initialization failed with error %ls (code %ld).", res);
175
+}
176
177
+void Plugin::AMD::VCEEncoder::Stop() {
178
// Restore Timer precision.
179
if (m_TimerPeriod != 0) {
180
timeEndPeriod(m_TimerPeriod);
181
}
182
183
- // Stop AMF Encoder
184
- m_AMFEncoder->Drain();
185
- m_AMFEncoder->Flush();
186
-
187
+ m_Flag_IsStarted = false;
188
if (m_Flag_Threading) { // Threading
189
m_Output.condvar.notify_all();
190
#if defined _WIN32 || defined _WIN64
191
192
#endif
193
}
194
195
+ // Stop AMF Encoder
196
+ if (m_AMFEncoder) {
197
+ m_AMFEncoder->Drain();
198
+ m_AMFEncoder->Flush();
199
+ }
200
+
201
// Clear Queues, Data
202
std::queue<amf::AMFSurfacePtr>().swap(m_Input.queue);
203
std::queue<amf::AMFDataPtr>().swap(m_Output.queue);
204
205
if (frame != nullptr) {
206
amf::AMFSurfacePtr pAMFSurface = CreateSurfaceFromFrame(frame);
207
if (pAMFSurface) {
208
+ // Set Surface Properties
209
+ pAMFSurface->SetPts(frame->pts / m_FrameRate.second);
210
+ pAMFSurface->SetProperty(L"Frame", frame->pts);
211
+
212
+ // Add to Queue
213
std::unique_lock<std::mutex> qlock(m_Input.queuemutex);
214
size_t uiQueueSize = m_Input.queue.size();
215
216
217
}
218
} else {
219
AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::SendInput> Critical error while trying to create a frame.");
220
- m_Flag_EmergencyQuit = true;
221
return false;
222
}
223
}
224
225
if (frame != nullptr)
226
GetOutput(nullptr, nullptr);
227
} else {
228
- AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::SendInput> SubmitInput returned error %ls (code %d).", m_AMF->GetTrace()->GetResultText(res), res);
229
+ AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::SendInput> SubmitInput returned error %ls (code %lld).", m_AMF->GetTrace()->GetResultText(res), res);
230
}
231
}
232
}
233
234
__amf_repeat_count = 0;
235
}
236
} else {
237
- AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::GetOutput> QueryOutput returned error %ls (code %d).", m_AMF->GetTrace()->GetResultText(res), res);
238
+ AMF_LOG_ERROR("<Plugin::AMD::VCEEncoder::GetOutput> QueryOutput returned error %ls (code %lld).", m_AMF->GetTrace()->GetResultText(res), res);
239
}
240
}
241
}
242
243
m_Output.queue.pop();
244
}
245
246
+ // We've got a DataPtr, let's use it.
247
amf::AMFBufferPtr pAMFBuffer = amf::AMFBufferPtr(pAMFData);
248
249
// Assemble Packet
250
packet->type = OBS_ENCODER_VIDEO;
251
+ /// Data
252
size_t uiBufferSize = pAMFBuffer->GetSize();
253
if (m_PacketDataBuffer.size() < uiBufferSize) {
254
size_t newSize = (size_t)exp2(ceil(log2(uiBufferSize)));
255
256
packet->data = m_PacketDataBuffer.data();
257
packet->size = uiBufferSize;
258
std::memcpy(packet->data, pAMFBuffer->GetNative(), packet->size);
259
-
260
- { // What Type of Frame is it?
261
- // Read Packet Type
262
+ /// Timestamps
263
+ packet->dts = (pAMFData->GetPts() - 2) * m_FrameRate.second; // Offset by 2 to support B-Pictures
264
+ pAMFBuffer->GetProperty(L"Frame", &packet->pts);
265
+ { /// Packet Priority & Keyframe
266
uint64_t pktType;
267
pAMFData->GetProperty(AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE, &pktType);
268
269
270
break;
271
}
272
}
273
-
274
- { // Timestamps
275
- int64_t frameTimeStep = (int64_t)(m_FrameRateReverseDivisor * 1e6);
276
- int64_t dtsTimeOffset = frameTimeStep << 1;
277
-
278
- /// Retrieve Decode-Timestamp from AMF and convert it to micro-seconds.
279
- int64_t dts_usec = (pAMFData->GetPts() / 10);
280
- /// Decode Timestamp
281
- packet->dts_usec = (int64_t)(dts_usec - dtsTimeOffset);
282
- packet->dts = (int64_t)(packet->dts_usec / frameTimeStep);
283
- /// Presentation Timestamp
284
- pAMFBuffer->GetProperty(L"Frame", &packet->pts);
285
- //pkt.pts_usec = (int64_t)(pkt.pts * frTimeStep);
286
- //packet->pts_usec = pkt.dts_usec;
287
- //packet->pts = packet->dts;
288
-
289
- // See: https://stackoverflow.com/questions/6044330/ffmpeg-c-what-are-pts-and-dts-what-does-this-code-block-do-in-ffmpeg-c
290
- // PTS may not be needed: https://github.com/GPUOpen-LibrariesAndSDKs/AMF/issues/17
291
- }
292
-
293
*received_packet = true;
294
295
// Debug: Packet Information
296
- #ifdef DEBUG
297
- AMF_LOG_INFO("Packet: Type(%lld), PTS(%4lld), DTS(%4lld), Size(%8lld)", packet->priority, packet->pts, packet->dts, packet->size);
298
- #endif
299
+ std::vector<wchar_t> fileName(128);
300
+ mbstowcs(fileName.data(), __FILE__, fileName.size());
301
+ std::vector<wchar_t> functionName(128);
302
+ mbstowcs(functionName.data(), __FUNCTION__, functionName.size());
303
+ m_AMF->GetTrace()->TraceW(fileName.data(), __LINE__, AMF_TRACE_TRACE, L"Plugin::GetOutput", 4, L"Packet: Type(%lld), PTS(%4lld), DTS(%4lld), Size(%8lld)", (int64_t)packet->priority, (int64_t)packet->pts, (int64_t)packet->dts, (int64_t)packet->size);
304
}
305
}
306
307
308
// Assign Thread Name
309
static const char* __threadName = "enc-amf Input Thread";
310
SetThreadName(__threadName);
311
-
312
+
313
// Core Loop
314
std::unique_lock<std::mutex> lock(m_Input.mutex);
315
+ uint32_t repeatSurfaceSubmission = 0;
316
do {
317
m_Input.condvar.wait(lock);
318
319
320
if (!m_Flag_IsStarted)
321
continue;
322
323
- // Skip to next wait if queue is empty.
324
- AMF_RESULT res = AMF_OK;
325
- int32_t __amf_input_full_repeat = 0;
326
- while (res == AMF_OK) { // Repeat until impossible.
327
- amf::AMFSurfacePtr surface;
328
+ // Dequeue Surface
329
+ amf::AMFSurfacePtr surface;
330
+ {
331
+ std::unique_lock<std::mutex> qlock(m_Input.queuemutex);
332
+ if (m_Input.queue.size() == 0)
333
+ continue; // Queue is empty,
334
+ surface = m_Input.queue.front();
335
+ }
336
337
- { // Dequeue Surface
338
+ /// Submit to AMF
339
+ AMF_RESULT res = m_AMFEncoder->SubmitInput(surface);
340
+ if (res == AMF_OK) {
341
+ { // Remove Surface from Queue
342
std::unique_lock<std::mutex> qlock(m_Input.queuemutex);
343
- if (m_Input.queue.size() == 0)
344
- break;
345
- surface = m_Input.queue.front();
346
+ m_Input.queue.pop();
347
}
348
349
- /// Submit to AMF
350
- res = m_AMFEncoder->SubmitInput(surface);
351
- if (res == AMF_OK) {
352
- { // Remove Surface from Queue
353
- std::unique_lock<std::mutex> qlock(m_Input.queuemutex);
354
- m_Input.queue.pop();
355
- }
356
+ // Reset AMF_INPUT_FULL retries.
357
+ repeatSurfaceSubmission = 0;
358
359
- // Reset AMF_INPUT_FULL retries.
360
- __amf_input_full_repeat = 0;
361
- } else if (res == AMF_INPUT_FULL) { // Try submitting for 5 milliseconds
362
- m_Output.condvar.notify_all(); // Signal Querying Thread
363
+ // Continue with next Surface.
364
+ m_Input.condvar.notify_all();
365
+ } else if (res == AMF_INPUT_FULL) {
366
+ m_Output.condvar.notify_all();
367
+ if (repeatSurfaceSubmission < 5) {
368
+ repeatSurfaceSubmission++;
369
370
std::this_thread::sleep_for(std::chrono::milliseconds(1));
371
- if (__amf_input_full_repeat < 5) {
372
- res = AMF_OK;
373
- __amf_input_full_repeat++;
374
- continue;
375
- }
376
- } else {
377
- std::vector<char> msgBuf(128);
378
- FormatTextWithAMFError(&msgBuf, "%ls (code %d)", Plugin::AMD::AMF::GetInstance()->GetTrace()->GetResultText(res), res);
379
- AMF_LOG_WARNING("<Plugin::AMD::VCEEncoder::InputThreadLogic> SubmitInput failed with error %s.", msgBuf.data());
380
- continue;
381
+ m_Input.condvar.notify_all();
382
}
383
+ } else if (res == AMF_EOF) {
384
+ // This should never happen, but on the off-chance that it does, just straight up leave the loop.
385
+ break;
386
+ } else {
387
+ // Unknown, unexpected return code.
388
+ std::vector<char> msgBuf(128);
389
+ FormatTextWithAMFError(&msgBuf, "%ls (code %d)", Plugin::AMD::AMF::GetInstance()->GetTrace()->GetResultText(res), res);
390
+ AMF_LOG_WARNING("<Plugin::AMD::VCEEncoder::InputThreadLogic> SubmitInput failed with error %s.", msgBuf.data());
391
}
392
} while (m_Flag_IsStarted);
393
}
394
395
if (!m_Flag_IsStarted)
396
continue;
397
398
- AMF_RESULT res = AMF_OK;
399
- while (res == AMF_OK) { // Repeat until impossible.
400
- amf::AMFDataPtr pData;
401
-
402
- res = m_AMFEncoder->QueryOutput(&pData);
403
- if (res == AMF_OK) {
404
- /*if (pData->GetMemoryType() != amf::AMF_MEMORY_HOST) {
405
- pData->Convert(amf::AMF_MEMORY_HOST);
406
- }*/
407
-
408
- // Queue
409
- {
410
- std::unique_lock<std::mutex> qlock(m_Output.queuemutex);
411
- m_Output.queue.push(pData);
412
- }
413
- } else if (res == AMF_REPEAT) {
414
- m_Input.condvar.notify_all();
415
- } else {
416
- std::vector<char> msgBuf(128);
417
- FormatTextWithAMFError(&msgBuf, "%s (code %d)", res);
418
- AMF_LOG_WARNING("<Plugin::AMD::VCEEncoder::OutputThreadLogic> QueryOutput failed with error %s.", msgBuf.data());
419
+ amf::AMFDataPtr pData;
420
+ AMF_RESULT res = m_AMFEncoder->QueryOutput(&pData);
421
+ if (res == AMF_OK) {
422
+ { // Queue
423
+ std::unique_lock<std::mutex> qlock(m_Output.queuemutex);
424
+ m_Output.queue.push(pData);
425
}
426
+
427
+ // Continue querying until nothing is left.
428
+ m_Output.condvar.notify_all();
429
+ } else if (res == AMF_REPEAT) {
430
+ m_Input.condvar.notify_all();
431
+ } else if (res == AMF_EOF) {
432
+ // This should never happen, but on the off-chance that it does, just straight up leave the loop.
433
+ break;
434
+ } else {
435
+ // Unknown, unexpected return code.
436
+ std::vector<char> msgBuf(128);
437
+ FormatTextWithAMFError(&msgBuf, "%s (code %d)", res);
438
+ AMF_LOG_WARNING("<Plugin::AMD::VCEEncoder::OutputThreadLogic> QueryOutput failed with error %s.", msgBuf.data());
439
}
440
} while (m_Flag_IsStarted);
441
}
442
443
444
AMF_RESULT res = AMF_UNEXPECTED;
445
amf::AMFSurfacePtr pSurface = nullptr;
446
- if (m_ComputeType != VCEComputeType_None) {
447
+ if (m_UseOpenCL) {
448
amf_size l_origin[] = { 0, 0, 0 };
449
amf_size l_size0[] = { m_FrameSize.first, m_FrameSize.second, 1 };
450
amf_size l_size1[] = { m_FrameSize.first >> 1, m_FrameSize.second >> 1, 1 };
451
452
- amf::AMFComputeSyncPointPtr pSyncPoint;
453
res = m_AMFContext->AllocSurface(memoryTypeToAMF[m_MemoryType], surfaceFormatToAMF[m_SurfaceFormat], m_FrameSize.first, m_FrameSize.second, &pSurface);
454
- if (m_ComputeType == VCEComputeType_OpenCL) {
455
- pSurface->Convert(amf::AMF_MEMORY_OPENCL);
456
- }
457
+ if (res != AMF_OK) // Unable to create Surface
458
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::CreateSurfaceFromFrame> Unable to create AMFSurface, error %ls (code %d).", res);
459
+
460
+ amf::AMFComputeSyncPointPtr pSyncPoint;
461
m_AMFCompute->PutSyncPoint(&pSyncPoint);
462
+ pSurface->Convert(amf::AMF_MEMORY_OPENCL);
463
m_AMFCompute->CopyPlaneFromHost(frame->data[0], l_origin, l_size0, frame->linesize[0], pSurface->GetPlaneAt(0), false);
464
m_AMFCompute->CopyPlaneFromHost(frame->data[1], l_origin, l_size1, frame->linesize[1], pSurface->GetPlaneAt(1), false);
465
m_AMFCompute->FinishQueue();
466
- pSyncPoint->Wait();
467
-
468
- // Convert to AMF native type.
469
pSurface->Convert(memoryTypeToAMF[m_MemoryType]);
470
+ pSyncPoint->Wait();
471
} else {
472
res = m_AMFContext->AllocSurface(amf::AMF_MEMORY_HOST, surfaceFormatToAMF[m_SurfaceFormat], m_FrameSize.first, m_FrameSize.second, &pSurface);
473
if (res != AMF_OK) // Unable to create Surface
474
475
pSurface->Convert(memoryTypeToAMF[m_MemoryType]);
476
}
477
478
- // Convert Frame Index to Nanoseconds.
479
- amf_pts amfPts = (int64_t)(frame->pts * (m_FrameRateReverseDivisor * 1e7));
480
- pSurface->SetPts(amfPts);
481
- pSurface->SetProperty(L"Frame", frame->pts);
482
-
483
return pSurface;
484
}
485
486
487
"DirectX11",
488
"OpenGL",
489
};
490
- static const char* computeTypeToString[] = {
491
- "None",
492
- "OpenCL",
493
- };
494
static const char* surfaceFormatToString[] = {
495
"NV12",
496
"I420",
497
498
AMF_LOG_INFO("-- AMD Advanced Media Framework VCE Encoder --");
499
AMF_LOG_INFO("Initialization Parameters: ");
500
AMF_LOG_INFO(" Memory Type: %s", memoryTypeToString[m_MemoryType]);
501
- AMF_LOG_INFO(" Compute Type: %s", computeTypeToString[m_ComputeType]);
502
- AMF_LOG_INFO(" Surface Format: %s", surfaceFormatToString[m_SurfaceFormat]);
503
+ AMF_LOG_INFO(" Device: %s", m_APIDevice.GetDevice().Name);
504
+ AMF_LOG_INFO(" OpenCL: %s", m_UseOpenCL ? "Disabled" : "Enabled");
505
+ AMF_LOG_INFO(" Surface Format: %s", surfaceFormatToString[max(m_SurfaceFormat,0)]);
506
AMF_LOG_INFO("Static Parameters: ");
507
AMF_LOG_INFO(" Usage: %s", usageToString[this->GetUsage()]);
508
AMF_LOG_INFO(" Quality Preset: %s", qualityPresetToString[this->GetQualityPreset()]);
509
510
AMF_LOG_INFO(" Frame Rate: %d/%d", this->GetFrameRate().first, this->GetFrameRate().second);
511
AMF_LOG_INFO("Rate Control Parameters: ");
512
AMF_LOG_INFO(" Method: %s", rateControlMethodToString[this->GetRateControlMethod()]);
513
- AMF_LOG_INFO(" Frame Skipping Enabled: %s", this->IsRateControlSkipFrameEnabled() ? "Yes" : "No");
514
+ AMF_LOG_INFO(" Frame Skipping Enabled: %s", this->IsFrameSkippingEnabled() ? "Yes" : "No");
515
AMF_LOG_INFO(" Filler Data Enabled: %s", this->IsFillerDataEnabled() ? "Yes" : "No");
516
- AMF_LOG_INFO(" Enforcce HRD Restrictions: %s", this->IsEnforceHRDRestrictionsEnabled() ? "Yes" : "No");
517
+ AMF_LOG_INFO(" Enforce HRD Restrictions: %s", this->IsEnforceHRDRestrictionsEnabled() ? "Yes" : "No");
518
AMF_LOG_INFO(" Maximum Access Unit Size: %d bits", this->GetMaximumAccessUnitSize());
519
AMF_LOG_INFO(" Bitrate: ");
520
AMF_LOG_INFO(" Target: %d bits", this->GetTargetBitrate());
521
522
AMF_LOG_INFO("Picture Control Parameters: ");
523
AMF_LOG_INFO(" IDR Period: %d frames", this->GetIDRPeriod());
524
AMF_LOG_INFO(" Header Insertion Spacing: %d frames", this->GetHeaderInsertionSpacing());
525
- AMF_LOG_INFO(" Deblocking Filter Enabled: %s", this->IsDeBlockingFilterEnabled() ? "Yes" : "No");
526
+ AMF_LOG_INFO(" Deblocking Filter Enabled: %s", this->IsDeblockingFilterEnabled() ? "Yes" : "No");
527
AMF_LOG_INFO(" B-Picture Pattern: %d", this->GetBPicturePattern());
528
AMF_LOG_INFO(" B-Picture Reference Enabled: %s", this->IsBPictureReferenceEnabled() ? "Yes" : "No");
529
AMF_LOG_INFO(" Intra-Refresh MBs Number per Slot: %d", this->GetIntraRefreshMBsNumberPerSlot());
530
531
AMF_LOG_INFO("Experimental Parameters: ");
532
AMF_LOG_INFO(" Nominal Range: %s", this->GetNominalRange() ? "Enabled" : "Disabled");
533
AMF_LOG_INFO(" Wait For Task: %s", this->GetWaitForTask() ? "Enabled" : "Disabled");
534
- AMF_LOG_INFO(" GOP Size: %d frames", this->GetGOPSize());
535
AMF_LOG_INFO(" Aspect Ratio: %d:%d", this->GetAspectRatio().first, this->GetAspectRatio().second);
536
AMF_LOG_INFO(" CABAC: %s", this->IsCABACEnabled() ? "Enabled" : "Disabled");
537
}
538
539
+/************************************************************************/
540
+/* Static Properties */
541
+/************************************************************************/
542
+
543
void Plugin::AMD::VCEEncoder::SetUsage(VCEUsage usage) {
544
static AMF_VIDEO_ENCODER_USAGE_ENUM customToAMF[] = {
545
AMF_VIDEO_ENCODER_USAGE_TRANSCONDING,
546
547
return AMFToCustom[usage];
548
}
549
550
-void Plugin::AMD::VCEEncoder::SetQualityPreset(VCEQualityPreset preset) {
551
- static AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM CustomToAMF[] = {
552
- AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED,
553
- AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED,
554
- AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY,
555
- };
556
- static char* CustomToName[] = {
557
- "Speed",
558
- "Balanced",
559
- "Quality",
560
- };
561
-
562
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_QUALITY_PRESET, (uint32_t)CustomToAMF[preset]);
563
- if (res != AMF_OK) {
564
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetQualityPreset> Setting to %s failed with error %ls (code %d).", res, CustomToName[preset]);
565
- }
566
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetQualityPreset> Set to %s.", CustomToName[preset]);
567
-}
568
-
569
-Plugin::AMD::VCEQualityPreset Plugin::AMD::VCEEncoder::GetQualityPreset() {
570
- static VCEQualityPreset AMFToCustom[] = {
571
- VCEQualityPreset_Balanced,
572
- VCEQualityPreset_Speed,
573
- VCEQualityPreset_Quality,
574
- };
575
- static char* CustomToName[] = {
576
- "Speed",
577
- "Balanced",
578
- "Quality",
579
- };
580
-
581
- uint32_t preset;
582
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_QUALITY_PRESET, &preset);
583
- if (res != AMF_OK) {
584
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetQualityPreset> Failed with error %ls (code %d).", res);
585
- }
586
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetQualityPreset> Value is %s.", CustomToName[AMFToCustom[preset]]);
587
- return AMFToCustom[preset];
588
-}
589
-
590
void Plugin::AMD::VCEEncoder::SetProfile(VCEProfile profile) {
591
if ((profile != VCEProfile_High) && (profile != VCEProfile_Main) && (profile != VCEProfile_Baseline)) {
592
profile = VCEProfile_Baseline;
593
594
}
595
596
void Plugin::AMD::VCEEncoder::SetProfileLevel(VCEProfileLevel level) {
597
+ // Automatic Detection
598
+ if (level == VCEProfileLevel_Automatic) {
599
+ auto frameSize = this->GetFrameSize();
600
+ auto frameRate = this->GetFrameRate();
601
+ level = Plugin::Utility::GetMinimumProfileLevel(frameSize, frameRate);
602
+ }
603
+
604
AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_PROFILE_LEVEL, (uint32_t)level);
605
if (res != AMF_OK) {
606
ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetProfile> Setting to %d failed with error %ls (code %d).", res, level);
607
608
return maximumLTRFrames;
609
}
610
611
+
612
+/************************************************************************/
613
+/* Resolution Properties */
614
+/************************************************************************/
615
+
616
void Plugin::AMD::VCEEncoder::SetFrameSize(uint32_t width, uint32_t height) {
617
AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_FRAMESIZE, ::AMFConstructSize(width, height));
618
if (res != AMF_OK) {
619
620
sprintf(msgBuf.data(), "%dx%d", width, height);
621
ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetFrameSize> Setting to %s failed with error %ls (code %d).", res, msgBuf.data());
622
}
623
+ m_FrameSize.first = width;
624
+ m_FrameSize.second = height;
625
AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetFrameSize> Set to %dx%d.", width, height);
626
}
627
628
629
return std::pair<uint32_t, uint32_t>(m_FrameSize);
630
}
631
632
-void Plugin::AMD::VCEEncoder::SetTargetBitrate(uint32_t bitrate) {
633
- // Clamp Value
634
- bitrate = min(max(bitrate, 10000), Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(m_EncoderType)->maxBitrate);
635
-
636
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_TARGET_BITRATE, bitrate);
637
- if (res != AMF_OK) {
638
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetTargetBitrate> Setting to %d bits failed with error %ls (code %d).", res, bitrate);
639
- }
640
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetTargetBitrate> Set to %d bits.", bitrate);
641
-}
642
-
643
-uint32_t Plugin::AMD::VCEEncoder::GetTargetBitrate() {
644
- uint32_t bitrate;
645
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_TARGET_BITRATE, &bitrate);
646
+void Plugin::AMD::VCEEncoder::SetFrameRate(uint32_t num, uint32_t den) {
647
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_FRAMERATE, ::AMFConstructRate(num, den));
648
if (res != AMF_OK) {
649
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetTargetBitrate> Failed with error %ls (code %d).", res);
650
+ std::vector<char> msgBuf;
651
+ sprintf(msgBuf.data(), "%d/%d", num, den);
652
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetFrameRate> Setting to %s failed with error %ls (code %d).", res, msgBuf.data());
653
}
654
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetTargetBitrate> Value is %d bits.", bitrate);
655
- return bitrate;
656
-}
657
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetFrameRate> Set to %d/%d.", num, den);
658
+ m_FrameRate.first = num;
659
+ m_FrameRate.second = den;
660
+ m_FrameRateDivisor = (double_t)m_FrameRate.first / (double_t)m_FrameRate.second;
661
+ m_FrameRateReverseDivisor = ((double_t)m_FrameRate.second / (double_t)m_FrameRate.first);
662
+ m_InputQueueLimit = (uint32_t)ceil(m_FrameRateDivisor * 3);
663
664
-void Plugin::AMD::VCEEncoder::SetPeakBitrate(uint32_t bitrate) {
665
- // Clamp Value
666
- bitrate = min(max(bitrate, 10000), Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(m_EncoderType)->maxBitrate);
667
+ if (m_Flag_IsStarted) { // Change Timer precision if encoding.
668
+ if (m_TimerPeriod != 0) {
669
+ // Restore Timer precision.
670
+ timeEndPeriod(m_TimerPeriod);
671
+ }
672
673
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_PEAK_BITRATE, (uint32_t)bitrate);
674
- if (res != AMF_OK) {
675
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetPeakBitrate> Setting to %d bits failed with error %ls (code %d).", res, bitrate);
676
+ m_TimerPeriod = 1;
677
+ while (timeBeginPeriod(m_TimerPeriod) == TIMERR_NOCANDO) {
678
+ ++m_TimerPeriod;
679
+ }
680
}
681
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetPeakBitrate> Set to %d bits.", bitrate);
682
}
683
684
-uint32_t Plugin::AMD::VCEEncoder::GetPeakBitrate() {
685
- uint32_t bitrate;
686
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_PEAK_BITRATE, &bitrate);
687
+std::pair<uint32_t, uint32_t> Plugin::AMD::VCEEncoder::GetFrameRate() {
688
+ AMFRate frameRate;
689
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_FRAMERATE, &frameRate);
690
if (res != AMF_OK) {
691
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetPeakBitrate> Failed with error %ls (code %d).", res);
692
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetFrameRate> Failed with error %ls (code %d).", res);
693
}
694
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetPeakBitrate> Value is %d bits.", bitrate);
695
- return bitrate;
696
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetFrameRate> Value is %d/%d.", frameRate.num, frameRate.den);
697
+ m_FrameRate.first = frameRate.num;
698
+ m_FrameRate.second = frameRate.den;
699
+ m_FrameRateDivisor = (double_t)frameRate.num / (double_t)frameRate.den;
700
+ m_InputQueueLimit = (uint32_t)ceil(m_FrameRateDivisor * 3);
701
+ return std::pair<uint32_t, uint32_t>(m_FrameRate);
702
}
703
704
+/************************************************************************/
705
+/* Rate Control Properties */
706
+/************************************************************************/
707
+
708
void Plugin::AMD::VCEEncoder::SetRateControlMethod(VCERateControlMethod method) {
709
static AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_ENUM CustomToAMF[] = {
710
AMF_VIDEO_ENCODER_RATE_CONTROL_METHOD_CONSTANT_QP,
711
712
return AMFToCustom[method];
713
}
714
715
-void Plugin::AMD::VCEEncoder::SetRateControlSkipFrameEnabled(bool enabled) {
716
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_RATE_CONTROL_SKIP_FRAME_ENABLE, enabled);
717
+void Plugin::AMD::VCEEncoder::SetTargetBitrate(uint32_t bitrate) {
718
+ // Clamp Value
719
+ if (bitrate != 0)
720
+ bitrate = min(max(bitrate, 10000), Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(m_EncoderType)->maxBitrate);
721
+
722
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_TARGET_BITRATE, bitrate);
723
if (res != AMF_OK) {
724
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetRateControlSkipFrameEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
725
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetTargetBitrate> Setting to %d bits failed with error %ls (code %d).", res, bitrate);
726
}
727
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetRateControlSkipFrameEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
728
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetTargetBitrate> Set to %d bits.", bitrate);
729
}
730
731
-bool Plugin::AMD::VCEEncoder::IsRateControlSkipFrameEnabled() {
732
- bool enabled;
733
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_RATE_CONTROL_SKIP_FRAME_ENABLE, &enabled);
734
+uint32_t Plugin::AMD::VCEEncoder::GetTargetBitrate() {
735
+ uint32_t bitrate;
736
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_TARGET_BITRATE, &bitrate);
737
if (res != AMF_OK) {
738
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsRateControlSkipFrameEnabled> Failed with error %ls (code %d).", res);
739
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetTargetBitrate> Failed with error %ls (code %d).", res);
740
}
741
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsRateControlSkipFrameEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
742
- return enabled;
743
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetTargetBitrate> Value is %d bits.", bitrate);
744
+ return bitrate;
745
+}
746
+
747
+void Plugin::AMD::VCEEncoder::SetPeakBitrate(uint32_t bitrate) {
748
+ // Clamp Value
749
+ if (bitrate != 0)
750
+ bitrate = min(max(bitrate, 10000), Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(m_EncoderType)->maxBitrate);
751
+
752
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_PEAK_BITRATE, (uint32_t)bitrate);
753
+ if (res != AMF_OK) {
754
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetPeakBitrate> Setting to %d bits failed with error %ls (code %d).", res, bitrate);
755
+ }
756
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetPeakBitrate> Set to %d bits.", bitrate);
757
+}
758
+
759
+uint32_t Plugin::AMD::VCEEncoder::GetPeakBitrate() {
760
+ uint32_t bitrate;
761
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_PEAK_BITRATE, &bitrate);
762
+ if (res != AMF_OK) {
763
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetPeakBitrate> Failed with error %ls (code %d).", res);
764
+ }
765
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetPeakBitrate> Value is %d bits.", bitrate);
766
+ return bitrate;
767
}
768
769
void Plugin::AMD::VCEEncoder::SetMinimumQP(uint8_t qp) {
770
771
return (uint8_t)qp;
772
}
773
774
-void Plugin::AMD::VCEEncoder::SetFrameRate(uint32_t num, uint32_t den) {
775
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_FRAMERATE, ::AMFConstructRate(num, den));
776
+void Plugin::AMD::VCEEncoder::SetBPictureDeltaQP(int8_t qp) {
777
+ // Clamp Value
778
+ qp = max(min(qp, 10), -10);
779
+
780
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_B_PIC_DELTA_QP, (int32_t)qp);
781
if (res != AMF_OK) {
782
- std::vector<char> msgBuf;
783
- sprintf(msgBuf.data(), "%d/%d", num, den);
784
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetFrameRate> Setting to %s failed with error %ls (code %d).", res, msgBuf.data());
785
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetBPictureDeltaQP> Setting to %d failed with error %ls (code %d).", res, qp);
786
}
787
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetFrameRate> Set to %d/%d.", num, den);
788
- m_FrameRate.first = num;
789
- m_FrameRate.second = den;
790
- m_FrameRateDivisor = (double_t)m_FrameRate.first / (double_t)m_FrameRate.second;
791
- m_FrameRateReverseDivisor = ((double_t)m_FrameRate.second / (double_t)m_FrameRate.first);
792
- m_InputQueueLimit = (uint32_t)ceil(m_FrameRateDivisor * 3);
793
- //AMF_LOG_DEBUG("%f div, %f revdiv", m_FrameRateDivisor, m_FrameRateReverseDivisor);
794
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetBPictureDeltaQP> Set to %d.", qp);
795
+}
796
797
- if (m_Flag_IsStarted) { // Change Timer precision if encoding.
798
- if (m_TimerPeriod != 0) {
799
- // Restore Timer precision.
800
- timeEndPeriod(m_TimerPeriod);
801
- }
802
+int8_t Plugin::AMD::VCEEncoder::GetBPictureDeltaQP() {
803
+ int32_t qp;
804
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_B_PIC_DELTA_QP, &qp);
805
+ if (res != AMF_OK) {
806
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetBPictureDeltaQP> Failed with error %ls (code %d).", res);
807
+ }
808
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetBPictureDeltaQP> Value is %d.", qp);
809
+ return (int8_t)qp;
810
+}
811
812
- m_TimerPeriod = 1;
813
- while (timeBeginPeriod(m_TimerPeriod) == TIMERR_NOCANDO) {
814
- ++m_TimerPeriod;
815
- }
816
+void Plugin::AMD::VCEEncoder::SetReferenceBPictureDeltaQP(int8_t qp) {
817
+ // Clamp Value
818
+ qp = max(min(qp, 10), -10);
819
+
820
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_REF_B_PIC_DELTA_QP, (int32_t)qp);
821
+ if (res != AMF_OK) {
822
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetReferenceBPictureDeltaQP> Setting to %d failed with error %ls (code %d).", res, qp);
823
}
824
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetReferenceBPictureDeltaQP> Set to %d.", qp);
825
}
826
827
-std::pair<uint32_t, uint32_t> Plugin::AMD::VCEEncoder::GetFrameRate() {
828
- AMFRate frameRate;
829
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_FRAMERATE, &frameRate);
830
+int8_t Plugin::AMD::VCEEncoder::GetReferenceBPictureDeltaQP() {
831
+ int32_t qp;
832
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_REF_B_PIC_DELTA_QP, &qp);
833
if (res != AMF_OK) {
834
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetFrameRate> Failed with error %ls (code %d).", res);
835
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetReferenceBPictureDeltaQP> Failed with error %ls (code %d).", res);
836
}
837
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetFrameRate> Value is %d/%d.", frameRate.num, frameRate.den);
838
- m_FrameRate.first = frameRate.num;
839
- m_FrameRate.second = frameRate.den;
840
- m_FrameRateDivisor = (double_t)frameRate.num / (double_t)frameRate.den;
841
- m_InputQueueLimit = (uint32_t)ceil(m_FrameRateDivisor * 3);
842
- return std::pair<uint32_t, uint32_t>(m_FrameRate);
843
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetReferenceBPictureDeltaQP> Value is %d.", qp);
844
+ return (int8_t)qp;
845
}
846
847
void Plugin::AMD::VCEEncoder::SetVBVBufferSize(uint32_t size) {
848
849
AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetVBVBufferSize> Set to %d bits.", size);
850
}
851
852
+void Plugin::AMD::VCEEncoder::SetVBVBufferAutomatic(double_t strictness) {
853
+ uint32_t strictBitrate = 1000, looseBitrate = 100000000;
854
+
855
+ // Strict VBV Buffer Size = Bitrate / FPS
856
+ // Loose VBV Buffer Size = Bitrate
857
+
858
+ switch (this->GetRateControlMethod()) {
859
+ case VCERateControlMethod_ConstantBitrate:
860
+ case VCERateControlMethod_VariableBitrate_LatencyConstrained:
861
+ looseBitrate = this->GetTargetBitrate();
862
+ break;
863
+ case VCERateControlMethod_VariableBitrate_PeakConstrained:
864
+ looseBitrate = max(this->GetTargetBitrate(), this->GetPeakBitrate());
865
+ break;
866
+ case VCERateControlMethod_ConstantQP:
867
+ // When using Constant QP, one will have to pick a QP that is decent
868
+ // in both quality and bitrate. We can easily calculate both the QP
869
+ // required for an average bitrate and the average bitrate itself
870
+ // with these formulas:
871
+ // BITRATE = ((1 - (QP / 51)) ^ 2) * ((Width * Height) * 1.5 * (FPSNumerator / FPSDenumerator))
872
+ // QP = (1 - sqrt(BITRATE / ((Width * Height) * 1.5 * (FPSNumerator / FPSDenumerator)))) * 51
873
+
874
+ auto frameSize = this->GetFrameSize();
875
+ auto frameRate = this->GetFrameRate();
876
+
877
+ double_t bitrate = frameSize.first * frameSize.second;
878
+ switch (this->m_SurfaceFormat) {
879
+ case VCESurfaceFormat_NV12:
880
+ case VCESurfaceFormat_I420:
881
+ bitrate *= 1.5;
882
+ break;
883
+ case VCESurfaceFormat_YUY2:
884
+ bitrate *= 4;
885
+ break;
886
+ case VCESurfaceFormat_BGRA:
887
+ case VCESurfaceFormat_RGBA:
888
+ bitrate *= 3;
889
+ break;
890
+ case VCESurfaceFormat_GRAY:
891
+ bitrate *= 1;
892
+ break;
893
+ }
894
+ bitrate *= frameRate.first / frameRate.second;
895
+
896
+ uint8_t qp_i, qp_p, qp_b;
897
+ qp_i = this->GetIFrameQP();
898
+ qp_p = this->GetPFrameQP();
899
+ try { qp_b = this->GetBFrameQP(); } catch (...) { qp_b = 51; }
900
+ double_t qp = 1 - ((double_t)(min(min(qp_i, qp_p), qp_b)) / 51.0);
901
+ qp = max(qp * qp, 0.001); // Needs to be at least 0.001.
902
+
903
+ looseBitrate = static_cast<uint32_t>(bitrate * qp);
904
+ break;
905
+ }
906
+ strictBitrate = static_cast<uint32_t>(looseBitrate * m_FrameRateReverseDivisor);
907
+
908
+ #define PI 3.14159265
909
+ double_t interpVal = (sin(max(min(strictness, 1.0), 0.0) * 90 * (PI / 180))); // sin curve?
910
+ uint32_t realBitrate = static_cast<uint32_t>((strictBitrate * interpVal) + (looseBitrate * (1.0 - interpVal)));
911
+ this->SetVBVBufferSize(realBitrate);
912
+}
913
+
914
uint32_t Plugin::AMD::VCEEncoder::GetVBVBufferSize() {
915
uint32_t size;
916
AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_VBV_BUFFER_SIZE, &size);
917
918
return ((double_t)vbvBufferFullness / 64.0);
919
}
920
921
-void Plugin::AMD::VCEEncoder::SetEnforceHRDRestrictionsEnabled(bool enabled) {
922
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_ENFORCE_HRD, enabled);
923
+void Plugin::AMD::VCEEncoder::SetMaximumAccessUnitSize(uint32_t size) {
924
+ // Clamp Value
925
+ size = max(min(size, 100000000), 0); // 1kbit to 100mbit.
926
+
927
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_MAX_AU_SIZE, (uint32_t)size);
928
if (res != AMF_OK) {
929
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetEnforceHRD> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
930
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetMaxAUSize> Setting to %d bits failed with error %ls (code %d).", res, size);
931
}
932
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetEnforceHRD> Set to %s.", enabled ? "Enabled" : "Disabled");
933
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetMaxAUSize> Set to %d bits.", size);
934
}
935
936
-bool Plugin::AMD::VCEEncoder::IsEnforceHRDRestrictionsEnabled() {
937
- bool enabled;
938
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_ENFORCE_HRD, &enabled);
939
+uint32_t Plugin::AMD::VCEEncoder::GetMaximumAccessUnitSize() {
940
+ uint32_t size;
941
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_MAX_AU_SIZE, &size);
942
if (res != AMF_OK) {
943
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetEnforceHRD> Failed with error %ls (code %d).", res);
944
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetMaxAUSize> Failed with error %ls (code %d).", res);
945
}
946
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetEnforceHRD> Value is %s.", enabled ? "Enabled" : "Disabled");
947
- return enabled;
948
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetMaxAUSize> Value is %d.", size);
949
+ return size;
950
}
951
952
void Plugin::AMD::VCEEncoder::SetFillerDataEnabled(bool enabled) {
953
954
return enabled;
955
}
956
957
-void Plugin::AMD::VCEEncoder::SetMaximumAccessUnitSize(uint32_t size) {
958
- // Clamp Value
959
- size = max(min(size, 100000000), 0); // 1kbit to 100mbit.
960
-
961
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_MAX_AU_SIZE, (uint32_t)size);
962
+void Plugin::AMD::VCEEncoder::SetFrameSkippingEnabled(bool enabled) {
963
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_RATE_CONTROL_SKIP_FRAME_ENABLE, enabled);
964
if (res != AMF_OK) {
965
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetMaxAUSize> Setting to %d bits failed with error %ls (code %d).", res, size);
966
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetRateControlSkipFrameEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
967
}
968
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetMaxAUSize> Set to %d bits.", size);
969
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetRateControlSkipFrameEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
970
}
971
972
-uint32_t Plugin::AMD::VCEEncoder::GetMaximumAccessUnitSize() {
973
- uint32_t size;
974
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_MAX_AU_SIZE, &size);
975
+bool Plugin::AMD::VCEEncoder::IsFrameSkippingEnabled() {
976
+ bool enabled;
977
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_RATE_CONTROL_SKIP_FRAME_ENABLE, &enabled);
978
if (res != AMF_OK) {
979
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetMaxAUSize> Failed with error %ls (code %d).", res);
980
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsRateControlSkipFrameEnabled> Failed with error %ls (code %d).", res);
981
}
982
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetMaxAUSize> Value is %d.", size);
983
- return size;
984
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsRateControlSkipFrameEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
985
+ return enabled;
986
}
987
988
-void Plugin::AMD::VCEEncoder::SetBPictureDeltaQP(int8_t qp) {
989
- // Clamp Value
990
- qp = max(min(qp, 10), -10);
991
-
992
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_B_PIC_DELTA_QP, (int32_t)qp);
993
+void Plugin::AMD::VCEEncoder::SetEnforceHRDRestrictionsEnabled(bool enabled) {
994
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_ENFORCE_HRD, enabled);
995
if (res != AMF_OK) {
996
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetBPictureDeltaQP> Setting to %d failed with error %ls (code %d).", res, qp);
997
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetEnforceHRD> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
998
}
999
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetBPictureDeltaQP> Set to %d.", qp);
1000
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetEnforceHRD> Set to %s.", enabled ? "Enabled" : "Disabled");
1001
}
1002
1003
-int8_t Plugin::AMD::VCEEncoder::GetBPictureDeltaQP() {
1004
- int32_t qp;
1005
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_B_PIC_DELTA_QP, &qp);
1006
+bool Plugin::AMD::VCEEncoder::IsEnforceHRDRestrictionsEnabled() {
1007
+ bool enabled;
1008
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_ENFORCE_HRD, &enabled);
1009
if (res != AMF_OK) {
1010
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetBPictureDeltaQP> Failed with error %ls (code %d).", res);
1011
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetEnforceHRD> Failed with error %ls (code %d).", res);
1012
}
1013
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetBPictureDeltaQP> Value is %d.", qp);
1014
- return (int8_t)qp;
1015
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetEnforceHRD> Value is %s.", enabled ? "Enabled" : "Disabled");
1016
+ return enabled;
1017
}
1018
1019
-void Plugin::AMD::VCEEncoder::SetReferenceBPictureDeltaQP(int8_t qp) {
1020
+/************************************************************************/
1021
+/* Picture Control Properties */
1022
+/************************************************************************/
1023
+
1024
+void Plugin::AMD::VCEEncoder::SetIDRPeriod(uint32_t period) {
1025
// Clamp Value
1026
- qp = max(min(qp, 10), -10);
1027
+ period = max(min(period, m_FrameRate.second * 1000), 1); // 1-1000 so that OBS can actually quit.
1028
1029
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_REF_B_PIC_DELTA_QP, (int32_t)qp);
1030
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_IDR_PERIOD, (uint32_t)period);
1031
if (res != AMF_OK) {
1032
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetReferenceBPictureDeltaQP> Setting to %d failed with error %ls (code %d).", res, qp);
1033
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetIDRPeriod> Setting to %d failed with error %ls (code %d).", res, period);
1034
}
1035
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetReferenceBPictureDeltaQP> Set to %d.", qp);
1036
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetIDRPeriod> Set to %d.", period);
1037
}
1038
1039
-int8_t Plugin::AMD::VCEEncoder::GetReferenceBPictureDeltaQP() {
1040
- int32_t qp;
1041
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_REF_B_PIC_DELTA_QP, &qp);
1042
+uint32_t Plugin::AMD::VCEEncoder::GetIDRPeriod() {
1043
+ int32_t period;
1044
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_IDR_PERIOD, &period);
1045
if (res != AMF_OK) {
1046
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetReferenceBPictureDeltaQP> Failed with error %ls (code %d).", res);
1047
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetIDRPeriod> Failed with error %ls (code %d).", res);
1048
}
1049
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetReferenceBPictureDeltaQP> Value is %d.", qp);
1050
- return (int8_t)qp;
1051
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetIDRPeriod> Value is %d.", period);
1052
+ return period;
1053
}
1054
1055
void Plugin::AMD::VCEEncoder::SetHeaderInsertionSpacing(uint32_t spacing) {
1056
1057
return headerInsertionSpacing;
1058
}
1059
1060
-void Plugin::AMD::VCEEncoder::SetIDRPeriod(uint32_t period) {
1061
- // Clamp Value
1062
- period = max(min(period, m_FrameRate.second * 1000), 1); // 1-1000 so that OBS can actually quit.
1063
-
1064
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_IDR_PERIOD, (uint32_t)period);
1065
+void Plugin::AMD::VCEEncoder::SetBPicturePattern(VCEBPicturePattern pattern) {
1066
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_B_PIC_PATTERN, (uint32_t)pattern);
1067
if (res != AMF_OK) {
1068
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetIDRPeriod> Setting to %d failed with error %ls (code %d).", res, period);
1069
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetBPicturesPattern> Setting to %d failed with error %ls (code %d).", res, pattern);
1070
}
1071
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetIDRPeriod> Set to %d.", period);
1072
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetBPicturesPattern> Set to %d.", pattern);
1073
}
1074
1075
-uint32_t Plugin::AMD::VCEEncoder::GetIDRPeriod() {
1076
- int32_t period;
1077
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_IDR_PERIOD, &period);
1078
+Plugin::AMD::VCEBPicturePattern Plugin::AMD::VCEEncoder::GetBPicturePattern() {
1079
+ uint32_t pattern;
1080
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_B_PIC_PATTERN, &pattern);
1081
if (res != AMF_OK) {
1082
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetIDRPeriod> Failed with error %ls (code %d).", res);
1083
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetBPicturesPattern> Failed with error %ls (code %d).", res);
1084
}
1085
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetIDRPeriod> Value is %d.", period);
1086
- return period;
1087
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetBPicturesPattern> Value is %d.", pattern);
1088
+ return (Plugin::AMD::VCEBPicturePattern)pattern;
1089
}
1090
1091
-void Plugin::AMD::VCEEncoder::SetDeBlockingFilterEnabled(bool enabled) {
1092
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_DE_BLOCKING_FILTER, enabled);
1093
+void Plugin::AMD::VCEEncoder::SetBPictureReferenceEnabled(bool enabled) {
1094
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_B_REFERENCE_ENABLE, enabled);
1095
if (res != AMF_OK) {
1096
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetDeBlockingFilterEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1097
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetBReferenceEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1098
}
1099
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetDeBlockingFilterEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1100
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetBReferenceEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1101
}
1102
1103
-bool Plugin::AMD::VCEEncoder::IsDeBlockingFilterEnabled() {
1104
+bool Plugin::AMD::VCEEncoder::IsBPictureReferenceEnabled() {
1105
bool enabled;
1106
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_DE_BLOCKING_FILTER, &enabled);
1107
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_B_REFERENCE_ENABLE, &enabled);
1108
if (res != AMF_OK) {
1109
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsDeBlockingFilterEnabled> Failed with error %ls (code %d).", res);
1110
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsBReferenceEnabled> Failed with error %ls (code %d).", res);
1111
}
1112
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsDeBlockingFilterEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1113
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsBReferenceEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1114
return enabled;
1115
}
1116
1117
-void Plugin::AMD::VCEEncoder::SetIntraRefreshMBsNumberPerSlot(uint32_t mbs) {
1118
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_INTRA_REFRESH_NUM_MBS_PER_SLOT, (uint32_t)mbs);
1119
+void Plugin::AMD::VCEEncoder::SetDeblockingFilterEnabled(bool enabled) {
1120
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_DE_BLOCKING_FILTER, enabled);
1121
if (res != AMF_OK) {
1122
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetIntraRefreshMBsNumberPerSlot> Setting to %d failed with error %ls (code %d).", res, mbs);
1123
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetDeBlockingFilterEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1124
}
1125
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetIntraRefreshMBsNumberPerSlot> Set to %d.", mbs);
1126
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetDeBlockingFilterEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1127
}
1128
1129
-uint32_t Plugin::AMD::VCEEncoder::GetIntraRefreshMBsNumberPerSlot() {
1130
- int32_t mbs;
1131
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_INTRA_REFRESH_NUM_MBS_PER_SLOT, &mbs);
1132
+bool Plugin::AMD::VCEEncoder::IsDeblockingFilterEnabled() {
1133
+ bool enabled;
1134
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_DE_BLOCKING_FILTER, &enabled);
1135
if (res != AMF_OK) {
1136
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetIntraRefreshMBsNumberPerSlot> Failed with error %ls (code %d).", res);
1137
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsDeBlockingFilterEnabled> Failed with error %ls (code %d).", res);
1138
}
1139
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetIntraRefreshMBsNumberPerSlot> Value is %d.", mbs);
1140
- return mbs;
1141
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsDeBlockingFilterEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1142
+ return enabled;
1143
}
1144
1145
void Plugin::AMD::VCEEncoder::SetSlicesPerFrame(uint32_t slices) {
1146
1147
return slices;
1148
}
1149
1150
-void Plugin::AMD::VCEEncoder::SetBPicturePattern(VCEBPicturePattern pattern) {
1151
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_B_PIC_PATTERN, (uint32_t)pattern);
1152
+void Plugin::AMD::VCEEncoder::SetIntraRefreshMBsNumberPerSlot(uint32_t mbs) {
1153
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_INTRA_REFRESH_NUM_MBS_PER_SLOT, (uint32_t)mbs);
1154
if (res != AMF_OK) {
1155
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetBPicturesPattern> Setting to %d failed with error %ls (code %d).", res, pattern);
1156
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetIntraRefreshMBsNumberPerSlot> Setting to %d failed with error %ls (code %d).", res, mbs);
1157
}
1158
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetBPicturesPattern> Set to %d.", pattern);
1159
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetIntraRefreshMBsNumberPerSlot> Set to %d.", mbs);
1160
}
1161
1162
-Plugin::AMD::VCEBPicturePattern Plugin::AMD::VCEEncoder::GetBPicturePattern() {
1163
- uint32_t pattern;
1164
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_B_PIC_PATTERN, &pattern);
1165
+uint32_t Plugin::AMD::VCEEncoder::GetIntraRefreshMBsNumberPerSlot() {
1166
+ int32_t mbs;
1167
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_INTRA_REFRESH_NUM_MBS_PER_SLOT, &mbs);
1168
if (res != AMF_OK) {
1169
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetBPicturesPattern> Failed with error %ls (code %d).", res);
1170
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetIntraRefreshMBsNumberPerSlot> Failed with error %ls (code %d).", res);
1171
}
1172
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetBPicturesPattern> Value is %d.", pattern);
1173
- return (Plugin::AMD::VCEBPicturePattern)pattern;
1174
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetIntraRefreshMBsNumberPerSlot> Value is %d.", mbs);
1175
+ return mbs;
1176
}
1177
1178
-void Plugin::AMD::VCEEncoder::SetBPictureReferenceEnabled(bool enabled) {
1179
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_B_REFERENCE_ENABLE, enabled);
1180
+/************************************************************************/
1181
+/* Miscellaneous Control Properties */
1182
+/************************************************************************/
1183
+
1184
+void Plugin::AMD::VCEEncoder::SetQualityPreset(VCEQualityPreset preset) {
1185
+ static AMF_VIDEO_ENCODER_QUALITY_PRESET_ENUM CustomToAMF[] = {
1186
+ AMF_VIDEO_ENCODER_QUALITY_PRESET_SPEED,
1187
+ AMF_VIDEO_ENCODER_QUALITY_PRESET_BALANCED,
1188
+ AMF_VIDEO_ENCODER_QUALITY_PRESET_QUALITY,
1189
+ };
1190
+ static char* CustomToName[] = {
1191
+ "Speed",
1192
+ "Balanced",
1193
+ "Quality",
1194
+ };
1195
+
1196
+ AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_QUALITY_PRESET, (uint32_t)CustomToAMF[preset]);
1197
if (res != AMF_OK) {
1198
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetBReferenceEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1199
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetQualityPreset> Setting to %s failed with error %ls (code %d).", res, CustomToName[preset]);
1200
}
1201
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetBReferenceEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1202
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetQualityPreset> Set to %s.", CustomToName[preset]);
1203
}
1204
1205
-bool Plugin::AMD::VCEEncoder::IsBPictureReferenceEnabled() {
1206
- bool enabled;
1207
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_B_REFERENCE_ENABLE, &enabled);
1208
+Plugin::AMD::VCEQualityPreset Plugin::AMD::VCEEncoder::GetQualityPreset() {
1209
+ static VCEQualityPreset AMFToCustom[] = {
1210
+ VCEQualityPreset_Balanced,
1211
+ VCEQualityPreset_Speed,
1212
+ VCEQualityPreset_Quality,
1213
+ };
1214
+ static char* CustomToName[] = {
1215
+ "Speed",
1216
+ "Balanced",
1217
+ "Quality",
1218
+ };
1219
+
1220
+ uint32_t preset;
1221
+ AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_QUALITY_PRESET, &preset);
1222
if (res != AMF_OK) {
1223
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsBReferenceEnabled> Failed with error %ls (code %d).", res);
1224
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetQualityPreset> Failed with error %ls (code %d).", res);
1225
}
1226
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsBReferenceEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1227
- return enabled;
1228
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetQualityPreset> Value is %s.", CustomToName[AMFToCustom[preset]]);
1229
+ return AMFToCustom[preset];
1230
}
1231
1232
void Plugin::AMD::VCEEncoder::SetScanType(VCEScanType scanType) {
1233
1234
return enabled;
1235
}
1236
1237
-void Plugin::AMD::VCEEncoder::SetNumberOfTemporalEnhancementLayers(uint32_t layers) {
1238
- layers = min(layers, 2);
1239
+void Plugin::AMD::VCEEncoder::SetCABACEnabled(bool enabled) {
1240
+ AMF_RESULT res = m_AMFEncoder->SetProperty(L"CABACEnable", enabled);
1241
+ if (res != AMF_OK) {
1242
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetCABACEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1243
+ }
1244
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetCABACEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1245
+}
1246
+
1247
+bool Plugin::AMD::VCEEncoder::IsCABACEnabled() {
1248
+ bool enabled;
1249
+ AMF_RESULT res = m_AMFEncoder->GetProperty(L"CABACEnable", &enabled);
1250
+ if (res != AMF_OK) {
1251
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsCABACEnabled> Failed with error %ls (code %d).", res);
1252
+ }
1253
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsCABACEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1254
+ return enabled;
1255
+}
1256
+
1257
+/************************************************************************/
1258
+/* Hidden Properties */
1259
+/************************************************************************/
1260
1261
- AMF_RESULT res = m_AMFEncoder->SetProperty(AMF_VIDEO_ENCODER_NUM_TEMPORAL_ENHANCMENT_LAYERS, (uint32_t)layers);
1262
+void Plugin::AMD::VCEEncoder::SetGOPSize(uint32_t size) {
1263
+ AMF_LOG_WARNING("Using unsupported SetGOPSize function. Unexpected behaviour may happen.");
1264
+
1265
+ AMF_RESULT res = m_AMFEncoder->SetProperty(L"GOPSize", (uint32_t)size);
1266
if (res != AMF_OK) {
1267
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetNumberOfTemporalEnhancementLayers> Setting to %d failed with error %ls (code %d).", res, layers);
1268
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetGOPSize> Setting to %d failed with error %ls (code %d).", res, size);
1269
}
1270
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetNumberOfTemporalEnhancementLayers> Set to %d.", layers);
1271
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetGOPSize> Set to %d.", size);
1272
}
1273
1274
-uint32_t Plugin::AMD::VCEEncoder::GetNumberOfTemporalEnhancementLayers() {
1275
- uint32_t layers;
1276
- AMF_RESULT res = m_AMFEncoder->GetProperty(AMF_VIDEO_ENCODER_NUM_TEMPORAL_ENHANCMENT_LAYERS, &layers);
1277
+uint32_t Plugin::AMD::VCEEncoder::GetGOPSize() {
1278
+ AMF_LOG_WARNING("Using unsupported GetGOPSize function. Unexpected behaviour may happen.");
1279
+
1280
+ uint32_t size;
1281
+ AMF_RESULT res = m_AMFEncoder->GetProperty(L"GOPSize", &size);
1282
if (res != AMF_OK) {
1283
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetNumberOfTemporalEnhancementLayers> Failed with error %ls (code %d).", res);
1284
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetGOPSize> Failed with error %ls (code %d).", res);
1285
}
1286
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetNumberOfTemporalEnhancementLayers> Value is %d.", layers);
1287
- return layers;
1288
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetGOPSize> Value is %d.", size);
1289
+ return size;
1290
}
1291
1292
+
1293
void Plugin::AMD::VCEEncoder::SetNominalRange(bool enabled) {
1294
AMF_RESULT res = m_AMFEncoder->SetProperty(L"NominalRange", enabled);
1295
if (res != AMF_OK) {
1296
1297
return enabled;
1298
}
1299
1300
-void Plugin::AMD::VCEEncoder::SetGOPSize(uint32_t size) {
1301
- AMF_RESULT res = m_AMFEncoder->SetProperty(L"GOPSize", (uint32_t)size);
1302
- if (res != AMF_OK) {
1303
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetGOPSize> Setting to %d failed with error %ls (code %d).", res, size);
1304
- }
1305
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetGOPSize> Set to %d.", size);
1306
-}
1307
-
1308
-uint32_t Plugin::AMD::VCEEncoder::GetGOPSize() {
1309
- uint32_t size;
1310
- AMF_RESULT res = m_AMFEncoder->GetProperty(L"GOPSize", &size);
1311
- if (res != AMF_OK) {
1312
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetGOPSize> Failed with error %ls (code %d).", res);
1313
- }
1314
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetGOPSize> Value is %d.", size);
1315
- return size;
1316
-}
1317
-
1318
void Plugin::AMD::VCEEncoder::SetAspectRatio(uint32_t num, uint32_t den) {
1319
AMF_RESULT res = m_AMFEncoder->SetProperty(L"AspectRatio", ::AMFConstructRate(num, den));
1320
if (res != AMF_OK) {
1321
1322
return std::pair<uint32_t, uint32_t>(aspectRatio.num, aspectRatio.den);
1323
}
1324
1325
-void Plugin::AMD::VCEEncoder::SetCABACEnabled(bool enabled) {
1326
- AMF_RESULT res = m_AMFEncoder->SetProperty(L"CABACEnable", enabled);
1327
+void Plugin::AMD::VCEEncoder::SetMaximumNumberOfReferenceFrames(uint32_t numFrames) {
1328
+ AMF_RESULT res = m_AMFEncoder->SetProperty(L"MaxNumRefFrames", (uint32_t)numFrames);
1329
if (res != AMF_OK) {
1330
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetCABACEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1331
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetMaximumNumberOfReferenceFrames> Setting to %d failed with error %ls (code %d).", res, numFrames);
1332
}
1333
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetCABACEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1334
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetMaximumNumberOfReferenceFrames> Set to %d.", numFrames);
1335
}
1336
1337
-bool Plugin::AMD::VCEEncoder::IsCABACEnabled() {
1338
+uint32_t Plugin::AMD::VCEEncoder::GetMaximumNumberOfReferenceFrames() {
1339
+ uint32_t numFrames;
1340
+ AMF_RESULT res = m_AMFEncoder->GetProperty(L"MaxNumRefFrames", &numFrames);
1341
+ if (res != AMF_OK) {
1342
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetMaximumNumberOfReferenceFrames> Failed with error %ls (code %d).", res);
1343
+ }
1344
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetMaximumNumberOfReferenceFrames> Value is %d.", numFrames);
1345
+ return numFrames;
1346
+}
1347
+
1348
+void Plugin::AMD::VCEEncoder::SetMaxMBPerSec(uint32_t maxMBPerSec) {
1349
+ AMF_RESULT res = m_AMFEncoder->SetProperty(L"MaxMBPerSec", (uint32_t)maxMBPerSec);
1350
+ if (res != AMF_OK) {
1351
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetMaxMBPerSec> Setting to %d failed with error %ls (code %d).", res, maxMBPerSec);
1352
+ }
1353
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetMaxMBPerSec> Set to %d.", maxMBPerSec);
1354
+}
1355
+
1356
+uint32_t Plugin::AMD::VCEEncoder::GetMaxMBPerSec() {
1357
+ uint32_t maxMBPerSec;
1358
+ AMF_RESULT res = m_AMFEncoder->GetProperty(L"MaxMBPerSec", &maxMBPerSec);
1359
+ if (res != AMF_OK) {
1360
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::GetMaxMBPerSec> Failed with error %ls (code %d).", res);
1361
+ }
1362
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::GetMaxMBPerSec> Value is %d.", maxMBPerSec);
1363
+ return maxMBPerSec;
1364
+}
1365
+
1366
+void Plugin::AMD::VCEEncoder::SetRateControlPreanalysisEnabled(bool enabled) {
1367
+ AMF_RESULT res = m_AMFEncoder->SetProperty(L"RateControlPreanalysisEnable", enabled);
1368
+ if (res != AMF_OK) {
1369
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::SetRateControlPreanalysisEnabled> Setting to %s failed with error %ls (code %d).", res, enabled ? "Enabled" : "Disabled");
1370
+ }
1371
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::SetRateControlPreanalysisEnabled> Set to %s.", enabled ? "Enabled" : "Disabled");
1372
+}
1373
+
1374
+bool Plugin::AMD::VCEEncoder::IsRateControlPreanalysisEnabled() {
1375
bool enabled;
1376
- AMF_RESULT res = m_AMFEncoder->GetProperty(L"CABACEnable", &enabled);
1377
+ AMF_RESULT res = m_AMFEncoder->GetProperty(L"RateControlPreanalysisEnable", &enabled);
1378
if (res != AMF_OK) {
1379
- ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsCABACEnabled> Failed with error %ls (code %d).", res);
1380
+ ThrowExceptionWithAMFError("<Plugin::AMD::VCEEncoder::IsRateControlPreanalysisEnabled> Failed with error %ls (code %d).", res);
1381
}
1382
- AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsCABACEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1383
+ AMF_LOG_DEBUG("<Plugin::AMD::VCEEncoder::IsRateControlPreanalysisEnabled> Value is %s.", enabled ? "Enabled" : "Disabled");
1384
return enabled;
1385
}
1386
+
1387
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Source/amd-amf.cpp -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/amd-amf.cpp
Changed
199
1
2
#include <mutex>
3
4
#include "amd-amf.h"
5
+#include "windows.h"
6
7
// AMD AMF SDK
8
#include "components\Component.h"
9
10
11
class CustomWriter : public amf::AMFTraceWriter {
12
public:
13
- virtual void Write(const wchar_t*, const wchar_t* message) override {
14
- //const wchar_t* realmsg = &(message[(33 + wcslen(scope) + 2)]);
15
- size_t msgLen = wcslen(message) - (sizeof(wchar_t));
16
+ virtual void Write(const wchar_t* scope, const wchar_t* message) override {
17
+ const wchar_t* realmsg = &(message[(33 + wcslen(scope) + 2)]); // Skip Time & Scope
18
+ size_t msgLen = wcslen(realmsg) - (sizeof(wchar_t));
19
20
- blog(LOG_INFO, "[AMFTrace] %.*ls", msgLen, message);
21
+ blog(LOG_INFO, "[%ls] %.*ls", scope, msgLen, realmsg);
22
}
23
24
virtual void Flush() override {}
25
};
26
27
-
28
std::shared_ptr<Plugin::AMD::AMF> Plugin::AMD::AMF::GetInstance() {
29
static std::shared_ptr<AMF> __instance = std::make_shared<AMF>();
30
static std::mutex __mutex;
31
32
- try {
33
- const std::lock_guard<std::mutex> lock(__mutex);
34
- return __instance;
35
- } catch (...) {
36
- return nullptr;
37
- }
38
+ const std::lock_guard<std::mutex> lock(__mutex);
39
+ return __instance;
40
}
41
42
Plugin::AMD::AMF::AMF() {
43
AMF_RESULT res = AMF_OK;
44
45
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> Initializing...");
46
+ AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Initializing...");
47
48
// Null Values
49
m_TimerPeriod = 0;
50
51
if (!m_AMFModule) {
52
DWORD error = GetLastError();
53
std::vector<char> buf(1024);
54
- sprintf(buf.data(), "<Plugin::AMD::AMF::AMF> Loading of '%ls' failed with error code %d.", AMF_DLL_NAME, error);
55
+ sprintf(buf.data(), "Unable to load '%ls', error code %ld.", AMF_DLL_NAME, error);
56
AMF_LOG_ERROR("%s", buf.data());
57
throw std::exception(buf.data(), error);
58
} else {
59
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> Loaded '%ls'.", AMF_DLL_NAME);
60
+ std::vector<char> verbuf(GetFileVersionInfoSizeW(AMF_DLL_NAME, nullptr));
61
+ GetFileVersionInfoW(AMF_DLL_NAME, 0, (DWORD)verbuf.size(), verbuf.data());
62
+
63
+ void* pBlock = verbuf.data();
64
+
65
+ // Read the list of languages and code pages.
66
+ struct LANGANDCODEPAGE {
67
+ WORD wLanguage;
68
+ WORD wCodePage;
69
+ } *lpTranslate;
70
+ UINT cbTranslate = 1024;
71
+
72
+ VerQueryValueA(pBlock, "\\VarFileInfo\\Translation", (LPVOID*)&lpTranslate, &cbTranslate);
73
+
74
+ std::vector<char> buf(1024);
75
+ sprintf(buf.data(), "%s%04x%04x%s",
76
+ "\\StringFileInfo\\",
77
+ lpTranslate[0].wLanguage,
78
+ lpTranslate[0].wCodePage,
79
+ "\\ProductVersion");
80
+
81
+ // Retrieve file description for language and code page "i".
82
+ void* lpBuffer;
83
+ uint32_t dwBytes;
84
+ VerQueryValueA(pBlock, buf.data(), &lpBuffer, &dwBytes);
85
+
86
+ AMF_LOG_INFO("Runtime Library is on Version %.*s.", dwBytes, lpBuffer);
87
+ AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Loaded '%ls'.", AMF_DLL_NAME);
88
}
89
90
// Find Function: Query Version
91
92
if (!AMFQueryVersion) {
93
DWORD error = GetLastError();
94
std::vector<char> buf(1024);
95
- sprintf(buf.data(), "<Plugin::AMD::AMF::AMF> Finding Address of Function '%s' failed with error code %d.", AMF_QUERY_VERSION_FUNCTION_NAME, error);
96
+ sprintf(buf.data(), "<Plugin::AMD::AMF::AMF> Finding Address of Function '%s' failed with error code %ld.", AMF_QUERY_VERSION_FUNCTION_NAME, error);
97
AMF_LOG_ERROR("%s", buf.data());
98
throw std::exception(buf.data(), error);
99
}
100
101
// Query Runtime Version
102
m_AMFVersion_Compiler = AMF_FULL_VERSION;
103
res = AMFQueryVersion(&m_AMFVersion_Runtime);
104
- if (res != AMF_OK) {
105
-
106
- AMF_LOG_ERROR("<Plugin::AMD::AMF::AMF> Querying Version failed with error code %d.", res);
107
- throw std::exception("<Plugin::AMD::AMF::AMF> Querying Version failed with error code ", res);
108
- }
109
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> Runtime is on Version %d.%d.%d.%d",
110
+ if (res != AMF_OK)
111
+ ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Querying Version failed with error %ls (code %ld).", res);
112
+ AMF_LOG_DEBUG("Runtime reports back Version %d.%d.%d.%d",
113
(uint16_t)((m_AMFVersion_Runtime >> 48ull) & 0xFFFF),
114
(uint16_t)((m_AMFVersion_Runtime >> 32ull) & 0xFFFF),
115
(uint16_t)((m_AMFVersion_Runtime >> 16ull) & 0xFFFF),
116
117
AMFInit = (AMFInit_Fn)GetProcAddress(m_AMFModule, AMF_INIT_FUNCTION_NAME);
118
if (!AMFInit) {
119
DWORD error = GetLastError();
120
- AMF_LOG_ERROR("<Plugin::AMD::AMF::AMF> Finding Address of Function '%ls' failed with error code %d.", AMF_INIT_FUNCTION_NAME, error);
121
- throw std::exception("", error);
122
+ std::vector<char> buf(1024);
123
+ sprintf(buf.data(), "<Plugin::AMD::AMF::AMF> Finding Address of Function '%s' failed with error code %ld.", AMF_INIT_FUNCTION_NAME, error);
124
+ AMF_LOG_ERROR("%s", buf.data());
125
+ throw std::exception(buf.data(), error);
126
}
127
128
// Initialize AMF Libraries
129
res = AMFInit(m_AMFVersion_Runtime, &m_AMFFactory);
130
if (res != AMF_OK) {
131
- AMF_LOG_ERROR("<Plugin::AMD::AMF::AMF> Initializing AMF Library failed with error code %d.", res);
132
- throw std::exception("", res);
133
+ ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Initializing AMF Library failed with error %ls (code %ld).", res);
134
} else {
135
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> AMF Library initialized.");
136
+ AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> AMF Library initialized.");
137
}
138
139
// Retrieve Trace Object
140
res = m_AMFFactory->GetTrace(&m_AMFTrace);
141
if (res != AMF_OK) {
142
- ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Retrieving Trace object failed with error %ls (code %d).", res);
143
+ ThrowExceptionWithAMFError("<Plugin::AMD::AMF::AMF> Retrieving Trace object failed with error %ls (code %ld).", res);
144
}
145
146
// Retrieve Debug Object
147
res = m_AMFFactory->GetDebug(&m_AMFDebug);
148
if (res != AMF_OK) {
149
- AMF_LOG_ERROR("<Plugin::AMD::AMF::AMF> Retrieving Debug object failed with error code %ls (code %d).", res);
150
+ AMF_LOG_ERROR("<Plugin::AMD::AMF::AMF> Retrieving Debug object failed with error code %ls (code %ld).", res);
151
throw std::exception("", res);
152
}
153
- #ifdef DEBUG
154
- m_AMFTrace->SetGlobalLevel(AMF_TRACE_TEST);
155
- #else
156
- m_AMFTrace->SetGlobalLevel(AMF_TRACE_WARNING);
157
- #endif
158
m_AMFTrace->RegisterWriter(L"OBSWriter", new CustomWriter(), true);
159
-
160
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> Initialized.");
161
+ this->EnableDebugTrace(false);
162
+
163
+ AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Initialized.");
164
}
165
166
Plugin::AMD::AMF::~AMF() {
167
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> Finalizing.");
168
+ AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Finalizing.");
169
170
// Free Library again
171
if (m_AMFModule)
172
173
AMFQueryVersion = nullptr;
174
AMFInit = nullptr;
175
176
- AMF_LOG_INFO("<Plugin::AMD::AMF::AMF> Finalized.");
177
+ AMF_LOG_DEBUG("<Plugin::AMD::AMF::AMF> Finalized.");
178
}
179
180
amf::AMFFactory* Plugin::AMD::AMF::GetFactory() {
181
182
#ifdef DEBUG
183
m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_DEBUG_OUTPUT, true);
184
m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_TEST);
185
+ m_AMFTrace->SetPath(L"C:/AMFTrace.log");
186
#else
187
m_AMFTrace->EnableWriter(AMF_TRACE_WRITER_DEBUG_OUTPUT, false);
188
m_AMFTrace->SetWriterLevel(AMF_TRACE_WRITER_DEBUG_OUTPUT, AMF_TRACE_ERROR);
189
190
m_AMFDebug->AssertsEnable(false);
191
m_AMFDebug->EnablePerformanceMonitor(false);
192
m_AMFTrace->TraceEnableAsync(true);
193
- m_AMFTrace->SetGlobalLevel(AMF_TRACE_INFO);
194
- m_AMFTrace->SetWriterLevel(L"OBSWriter", AMF_TRACE_INFO);
195
+ m_AMFTrace->SetGlobalLevel(AMF_TRACE_WARNING);
196
+ m_AMFTrace->SetWriterLevel(L"OBSWriter", AMF_TRACE_WARNING);
197
}
198
}
199
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/api-base.cpp
Added
68
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#pragma once
27
+//////////////////////////////////////////////////////////////////////////
28
+// Includes
29
+//////////////////////////////////////////////////////////////////////////
30
+#include "api-base.h"
31
+
32
+//////////////////////////////////////////////////////////////////////////
33
+// Code
34
+//////////////////////////////////////////////////////////////////////////
35
+
36
+Plugin::API::Device::Device() {
37
+ this->Name = "";
38
+ this->UniqueId = "";
39
+}
40
+
41
+Plugin::API::Device::Device(std::string Name, std::string UniqueId) {
42
+ this->Name = Name;
43
+ this->UniqueId = UniqueId;
44
+}
45
+
46
+Plugin::API::Device::~Device() {
47
+}
48
+
49
+std::vector<Plugin::API::Device> Plugin::API::BaseAPI::EnumerateDevices() {
50
+ return std::vector<Plugin::API::Device>();
51
+}
52
+
53
+Plugin::API::BaseAPI::BaseAPI(Device device) {
54
+ myDevice = device;
55
+}
56
+
57
+Plugin::API::BaseAPI::~BaseAPI() {
58
+
59
+}
60
+
61
+void* Plugin::API::BaseAPI::GetContext() {
62
+ return nullptr;
63
+}
64
+
65
+Plugin::API::Device Plugin::API::BaseAPI::GetDevice() {
66
+ return myDevice;
67
+}
68
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/api-d3d11.cpp
Added
291
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#ifdef _WIN32
27
+//////////////////////////////////////////////////////////////////////////
28
+// Includes
29
+//////////////////////////////////////////////////////////////////////////
30
+#include "api-d3d11.h"
31
+
32
+#include <vector>
33
+#include <string>
34
+#include <sstream>
35
+
36
+#include <dxgi.h>
37
+#include <d3d11.h>
38
+
39
+#include <mutex>
40
+
41
+//////////////////////////////////////////////////////////////////////////
42
+// Code
43
+//////////////////////////////////////////////////////////////////////////
44
+using namespace Plugin::API;
45
+
46
+class SingletonDXGI {
47
+ public:
48
+
49
+ #pragma region Singleton
50
+ static std::shared_ptr<SingletonDXGI> GetInstance() {
51
+ static std::shared_ptr<SingletonDXGI> __instance = std::make_shared<SingletonDXGI>();
52
+ static std::mutex __mutex;
53
+
54
+ const std::lock_guard<std::mutex> lock(__mutex);
55
+ return __instance;
56
+ }
57
+ #pragma endregion Singleton
58
+
59
+ SingletonDXGI() {
60
+ hModule = LoadLibrary(TEXT("dxgi.dll"));
61
+ if (hModule == 0)
62
+ throw std::exception("Unable to load 'dxgi.dll'.");
63
+
64
+ }
65
+ ~SingletonDXGI() {
66
+ if (hModule)
67
+ FreeLibrary(hModule);
68
+ }
69
+
70
+ HRESULT CreateDXGIFactory1(REFIID riid, _Out_ void **ppFactory) {
71
+ if (hModule == 0)
72
+ return S_FALSE;
73
+
74
+ typedef HRESULT(__stdcall *t_CreateDXGIFactory1)(REFIID, void**);
75
+ t_CreateDXGIFactory1 pCreateDXGIFactory1 = (t_CreateDXGIFactory1)GetProcAddress(hModule, "CreateDXGIFactory1");
76
+
77
+ if (pCreateDXGIFactory1) {
78
+ return pCreateDXGIFactory1(riid, ppFactory);
79
+ }
80
+ return S_FALSE;
81
+ }
82
+
83
+ private:
84
+ HMODULE hModule;
85
+};
86
+class SingletonD3D11 {
87
+ public:
88
+
89
+ #pragma region Singleton
90
+ static std::shared_ptr<SingletonD3D11> GetInstance() {
91
+ static std::shared_ptr<SingletonD3D11> __instance = std::make_shared<SingletonD3D11>();
92
+ static std::mutex __mutex;
93
+
94
+ const std::lock_guard<std::mutex> lock(__mutex);
95
+ return __instance;
96
+ }
97
+ #pragma endregion Singleton
98
+
99
+ SingletonD3D11() {
100
+ hModule = LoadLibrary(TEXT("d3d11.dll"));
101
+ if (hModule == 0)
102
+ throw std::exception("Unable to load 'd3d11.dll'.");
103
+
104
+ }
105
+ ~SingletonD3D11() {
106
+ if (hModule)
107
+ FreeLibrary(hModule);
108
+ }
109
+
110
+ HRESULT WINAPI D3D11CreateDevice(
111
+ _In_opt_ IDXGIAdapter* pAdapter,
112
+ D3D_DRIVER_TYPE DriverType,
113
+ HMODULE Software,
114
+ UINT Flags,
115
+ _In_reads_opt_(FeatureLevels) CONST D3D_FEATURE_LEVEL* pFeatureLevels,
116
+ UINT FeatureLevels,
117
+ UINT SDKVersion,
118
+ _Out_opt_ ID3D11Device** ppDevice,
119
+ _Out_opt_ D3D_FEATURE_LEVEL* pFeatureLevel,
120
+ _Out_opt_ ID3D11DeviceContext** ppImmediateContext) {
121
+
122
+ if (hModule == 0)
123
+ return S_FALSE;
124
+
125
+ typedef HRESULT(__stdcall *t_D3D11CreateDevice)(_In_opt_ IDXGIAdapter*, D3D_DRIVER_TYPE, HMODULE, UINT,
126
+ CONST D3D_FEATURE_LEVEL*, UINT, UINT, _Out_opt_ ID3D11Device**,
127
+ _Out_opt_ D3D_FEATURE_LEVEL*, _Out_opt_ ID3D11DeviceContext**);
128
+ t_D3D11CreateDevice pD3D11CreateDevice = (t_D3D11CreateDevice)GetProcAddress(hModule, "D3D11CreateDevice");
129
+
130
+ if (pD3D11CreateDevice) {
131
+ return pD3D11CreateDevice(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels,
132
+ SDKVersion, ppDevice, pFeatureLevel, ppImmediateContext);
133
+ }
134
+ return S_FALSE;
135
+ }
136
+
137
+ private:
138
+ HMODULE hModule;
139
+};
140
+
141
+Plugin::API::Device BuildDeviceFromAdapter(DXGI_ADAPTER_DESC1* pAdapter) {
142
+ if (pAdapter == nullptr)
143
+ return Device("INVALID DEVICE", "");
144
+
145
+ std::vector<char> uidBuf(1024);
146
+ sprintf(uidBuf.data(), "%ld:%ld:%ld:%ld",
147
+ pAdapter->VendorId,
148
+ pAdapter->DeviceId,
149
+ pAdapter->SubSysId,
150
+ pAdapter->Revision);
151
+
152
+ std::vector<char> nameBuf(1024);
153
+ wcstombs(nameBuf.data(), pAdapter->Description, 1024);
154
+
155
+ return Device(std::string(nameBuf.data()), std::string(uidBuf.data()));
156
+}
157
+
158
+std::vector<Plugin::API::Device> Plugin::API::Direct3D11::EnumerateDevices() {
159
+ std::vector<Plugin::API::Device> devices = std::vector<Plugin::API::Device>();
160
+
161
+ IDXGIFactory1* pFactory = NULL;
162
+ auto singletonDXGI = SingletonDXGI::GetInstance();
163
+ HRESULT hr = singletonDXGI->CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&pFactory));
164
+ if (FAILED(hr)) {
165
+ return devices;
166
+ }
167
+
168
+ IDXGIAdapter1* pAdapter = NULL;
169
+ for (uint32_t iAdapterIndex = 0; pFactory->EnumAdapters1(iAdapterIndex, &pAdapter) != DXGI_ERROR_NOT_FOUND; iAdapterIndex++) {
170
+ DXGI_ADAPTER_DESC1 adapterDesc = DXGI_ADAPTER_DESC1();
171
+ std::memset(&adapterDesc, 0, sizeof(DXGI_ADAPTER_DESC1));
172
+
173
+ if (pAdapter->GetDesc1(&adapterDesc) == S_OK) {
174
+ // Only allow AMD devices to be listed here.
175
+ if (adapterDesc.VendorId != 0x1002)
176
+ continue;
177
+
178
+ devices.push_back(BuildDeviceFromAdapter(&adapterDesc));
179
+ }
180
+ }
181
+
182
+ pFactory->Release();
183
+
184
+ return devices;
185
+}
186
+
187
+Plugin::API::Device Plugin::API::Direct3D11::GetDeviceForUniqueId(std::string uniqueId) {
188
+ Plugin::API::Device device = Device("", "");
189
+
190
+ IDXGIFactory1* pFactory = NULL;
191
+ auto singletonDXGI = SingletonDXGI::GetInstance();
192
+ HRESULT hr = singletonDXGI->CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&pFactory));
193
+ if (FAILED(hr)) {
194
+ return device;
195
+ }
196
+
197
+ IDXGIAdapter1* pAdapter = NULL;
198
+ for (uint32_t iAdapterIndex = 0; pFactory->EnumAdapters1(iAdapterIndex, &pAdapter) != DXGI_ERROR_NOT_FOUND; iAdapterIndex++) {
199
+ DXGI_ADAPTER_DESC1 adapterDesc = DXGI_ADAPTER_DESC1();
200
+ std::memset(&adapterDesc, 0, sizeof(DXGI_ADAPTER_DESC1));
201
+
202
+ if (pAdapter->GetDesc1(&adapterDesc) == S_OK) {
203
+ // Only allow AMD devices to be listed here.
204
+ if (adapterDesc.VendorId != 0x1002)
205
+ continue;
206
+
207
+ Plugin::API::Device device2 = BuildDeviceFromAdapter(&adapterDesc);
208
+
209
+ if (uniqueId == device2.UniqueId) {
210
+ device = device2;
211
+ break;
212
+ }
213
+ }
214
+ }
215
+
216
+ pFactory->Release();
217
+ return device;
218
+}
219
+
220
+Plugin::API::Direct3D11::Direct3D11(Device device) : BaseAPI(device) {
221
+ IDXGIFactory1 *pFactory;
222
+
223
+ auto singletonDXGI = SingletonDXGI::GetInstance();
224
+ if (FAILED(singletonDXGI->CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&pFactory))))
225
+ throw new std::exception("Unable to create D3D11 driver.");
226
+
227
+ try {
228
+ IDXGIAdapter1 *pAdapter = NULL,
229
+ *pAdapter2 = NULL;
230
+ for (uint32_t iAdapterIndex = 0; pFactory->EnumAdapters1(iAdapterIndex, &pAdapter2) != DXGI_ERROR_NOT_FOUND; iAdapterIndex++) {
231
+ DXGI_ADAPTER_DESC1 adapterDesc = DXGI_ADAPTER_DESC1();
232
+ std::memset(&adapterDesc, 0, sizeof(DXGI_ADAPTER_DESC1));
233
+
234
+ if (pAdapter2->GetDesc1(&adapterDesc) == S_OK) {
235
+ // Only allow AMD devices to be listed here.
236
+ if (adapterDesc.VendorId != 0x1002)
237
+ continue;
238
+
239
+ Plugin::API::Device device2 = BuildDeviceFromAdapter(&adapterDesc);
240
+
241
+ if (device.UniqueId == device2.UniqueId) {
242
+ pAdapter = pAdapter2;
243
+ break;
244
+ }
245
+ }
246
+ }
247
+
248
+ try {
249
+ D3D_FEATURE_LEVEL featureLevels[] = {
250
+ D3D_FEATURE_LEVEL_11_1,
251
+ D3D_FEATURE_LEVEL_11_0,
252
+ };
253
+ uint32_t flags =
254
+ D3D11_CREATE_DEVICE_BGRA_SUPPORT |
255
+ D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT |
256
+ D3D11_CREATE_DEVICE_VIDEO_SUPPORT;
257
+
258
+ auto singletonD3D11 = SingletonD3D11::GetInstance();
259
+ HRESULT hr = singletonD3D11->D3D11CreateDevice(pAdapter, D3D_DRIVER_TYPE_UNKNOWN, NULL,
260
+ flags, featureLevels, 2, D3D11_SDK_VERSION,
261
+ &pDevice, NULL, &pDeviceContext);
262
+
263
+ if (FAILED(hr)) {
264
+ throw new std::exception("Unable to create D3D11 device.");
265
+ }
266
+ } catch (...) {
267
+ if (pAdapter)
268
+ pAdapter->Release();
269
+
270
+ throw;
271
+ }
272
+ } catch (...) {
273
+ if (pFactory)
274
+ pFactory->Release();
275
+
276
+ throw;
277
+ }
278
+}
279
+
280
+Plugin::API::Direct3D11::~Direct3D11() {
281
+ if (pDeviceContext)
282
+ pDeviceContext->Release();
283
+ if (pDevice)
284
+ pDevice->Release();
285
+}
286
+
287
+void* Plugin::API::Direct3D11::GetContext() {
288
+ return pDevice;
289
+}
290
+#endif
291
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/api-d3d9.cpp
Added
199
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#ifdef _WIN32
27
+//////////////////////////////////////////////////////////////////////////
28
+// Includes
29
+//////////////////////////////////////////////////////////////////////////
30
+#include "api-d3d9.h"
31
+
32
+//////////////////////////////////////////////////////////////////////////
33
+// Code
34
+//////////////////////////////////////////////////////////////////////////
35
+using namespace Plugin::API;
36
+
37
+Plugin::API::Device BuildDeviceFromAdapter(D3DADAPTER_IDENTIFIER9* pAdapter) {
38
+ if (pAdapter == nullptr)
39
+ return Device("INVALID DEVICE", "");
40
+
41
+ std::vector<char> uidBuf(1024);
42
+ sprintf(uidBuf.data(), "%ld:%ld:%ld:%ld",
43
+ pAdapter->VendorId,
44
+ pAdapter->DeviceId,
45
+ pAdapter->SubSysId,
46
+ pAdapter->Revision);
47
+
48
+ std::vector<char> nameBuf(1024);
49
+ sprintf(nameBuf.data(), "%s (%s)",
50
+ pAdapter->DeviceName,
51
+ pAdapter->Description);
52
+
53
+ return Device(std::string(nameBuf.data()), std::string(uidBuf.data()));
54
+}
55
+
56
+
57
+std::vector<Plugin::API::Device> Plugin::API::Direct3D9::EnumerateDevices() {
58
+ std::vector<Plugin::API::Device> devices = std::vector<Plugin::API::Device>();
59
+
60
+ IDirect3D9* pDirect3D = Direct3DCreate9(D3D_SDK_VERSION);
61
+
62
+ uint32_t adapterCount = pDirect3D->GetAdapterCount();
63
+ for (uint32_t adapterIndex = 0; adapterIndex < adapterCount; adapterIndex++) {
64
+ D3DADAPTER_IDENTIFIER9 adapterDesc = D3DADAPTER_IDENTIFIER9();
65
+ pDirect3D->GetAdapterIdentifier(adapterIndex, 0, &adapterDesc);
66
+
67
+ if (adapterDesc.VendorId != 0x1002)
68
+ continue;
69
+
70
+ Device device = BuildDeviceFromAdapter(&adapterDesc);
71
+ devices.push_back(device);
72
+ }
73
+
74
+ pDirect3D->Release();
75
+
76
+ return devices;
77
+}
78
+
79
+Plugin::API::Device Plugin::API::Direct3D9::GetDeviceForUniqueId(std::string uniqueId) {
80
+ Plugin::API::Device device = Device("", "");
81
+
82
+ IDirect3D9* pDirect3D = Direct3DCreate9(D3D_SDK_VERSION);
83
+
84
+ uint32_t adapterCount = pDirect3D->GetAdapterCount();
85
+ for (uint32_t adapterIndex = 0; adapterIndex <= adapterCount; adapterIndex++) {
86
+ D3DADAPTER_IDENTIFIER9 adapterDesc = D3DADAPTER_IDENTIFIER9();
87
+ pDirect3D->GetAdapterIdentifier(adapterIndex, 0, &adapterDesc);
88
+
89
+ if (adapterDesc.VendorId != 0x1002)
90
+ continue;
91
+
92
+ Device device2 = BuildDeviceFromAdapter(&adapterDesc);
93
+ if (device2.UniqueId == uniqueId)
94
+ device = device2;
95
+ }
96
+
97
+ pDirect3D->Release();
98
+
99
+ return device;
100
+}
101
+
102
+struct EnumWindowsData {
103
+ DWORD processId;
104
+ HWND bestWindowId;
105
+};
106
+
107
+BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam) {
108
+ EnumWindowsData* data = (EnumWindowsData*)lParam;
109
+
110
+ DWORD processId;
111
+ GetWindowThreadProcessId(handle, &processId);
112
+ if ((processId == data->processId)
113
+ && (GetWindow(handle, GW_OWNER) == (HWND)0)
114
+ && (IsWindowVisible(handle))) {
115
+ return TRUE;
116
+ }
117
+ data->bestWindowId = handle;
118
+ return FALSE;
119
+}
120
+
121
+Plugin::API::Direct3D9::Direct3D9(Device device) : BaseAPI(device) {
122
+ pDirect3D = Direct3DCreate9(D3D_SDK_VERSION);
123
+ if (!pDirect3D)
124
+ throw std::exception("Unable to create D3D9 driver.");
125
+
126
+ // Find Adapter Index
127
+ uint32_t usedAdapter = 0;
128
+ uint32_t adapterCount = pDirect3D->GetAdapterCount();
129
+ for (uint32_t adapterIndex = 0; adapterIndex <= adapterCount; adapterIndex++) {
130
+ D3DADAPTER_IDENTIFIER9 adapterDesc = D3DADAPTER_IDENTIFIER9();
131
+ pDirect3D->GetAdapterIdentifier(adapterIndex, 0, &adapterDesc);
132
+
133
+ if (adapterDesc.VendorId != 0x1002)
134
+ continue;
135
+
136
+ Device device2 = BuildDeviceFromAdapter(&adapterDesc);
137
+ if (device2.UniqueId == device.UniqueId) {
138
+ usedAdapter = adapterIndex++;
139
+ break;
140
+ }
141
+ }
142
+
143
+ EnumWindowsData data = EnumWindowsData();
144
+ data.processId = GetCurrentProcessId();
145
+ EnumWindows(EnumWindowsCallback, (LPARAM)&data);
146
+
147
+ D3DPRESENT_PARAMETERS pPresentParameter = D3DPRESENT_PARAMETERS();
148
+ pPresentParameter.BackBufferWidth = 1280;
149
+ pPresentParameter.BackBufferHeight = 720;
150
+ pPresentParameter.BackBufferFormat = D3DFORMAT::D3DFMT_R8G8B8;
151
+ pPresentParameter.BackBufferCount = 2;
152
+ pPresentParameter.MultiSampleType = D3DMULTISAMPLE_TYPE::D3DMULTISAMPLE_NONE;
153
+ pPresentParameter.MultiSampleQuality = 0;
154
+ pPresentParameter.SwapEffect = D3DSWAPEFFECT::D3DSWAPEFFECT_DISCARD;
155
+ pPresentParameter.hDeviceWindow = data.bestWindowId;
156
+ pPresentParameter.Windowed = TRUE;
157
+ pPresentParameter.EnableAutoDepthStencil = FALSE;
158
+ pPresentParameter.AutoDepthStencilFormat = D3DFORMAT::D3DFMT_A1;
159
+ pPresentParameter.Flags = D3DPRESENTFLAG_VIDEO;
160
+ pPresentParameter.FullScreen_RefreshRateInHz = 0;
161
+ pPresentParameter.PresentationInterval = 1;
162
+
163
+ HRESULT hr = pDirect3D->CreateDevice(usedAdapter,
164
+ D3DDEVTYPE_HAL,
165
+ data.bestWindowId,
166
+ D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX | D3DCREATE_MULTITHREADED | D3DCREATE_PUREDEVICE | D3DCREATE_MIXED_VERTEXPROCESSING | D3DCREATE_NOWINDOWCHANGES,
167
+ &pPresentParameter,
168
+ &pDirect3DDevice);
169
+ switch (hr) {
170
+ case D3DERR_DEVICELOST:
171
+ throw std::exception("D3DERR_DEVICELOST");
172
+ break;
173
+ case D3DERR_INVALIDCALL:
174
+ throw std::exception("D3DERR_INVALIDCALL");
175
+ break;
176
+ case D3DERR_NOTAVAILABLE:
177
+ throw std::exception("D3DERR_NOTAVAILABLE");
178
+ break;
179
+ case D3DERR_OUTOFVIDEOMEMORY:
180
+ throw std::exception("D3DERR_OUTOFVIDEOMEMORY");
181
+ break;
182
+ }
183
+ if (FAILED(hr))
184
+ throw std::exception("Unable to create D3D9 device.");
185
+}
186
+
187
+Plugin::API::Direct3D9::~Direct3D9() {
188
+ if (pDirect3DDevice)
189
+ pDirect3DDevice->Release();
190
+
191
+ if (pDirect3D)
192
+ pDirect3D->Release();
193
+}
194
+
195
+void* Plugin::API::Direct3D9::GetContext() {
196
+ return pDirect3DDevice;
197
+}
198
+#endif
199
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Source/enc-h264.cpp -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/enc-h264.cpp
Changed
2149
1
2
// Includes
3
//////////////////////////////////////////////////////////////////////////
4
#include "enc-h264.h"
5
+#include "misc-util.cpp"
6
7
#if (defined _WIN32) | (defined _WIN64)
8
#include <VersionHelpers.h>
9
-#endif
10
-
11
-//////////////////////////////////////////////////////////////////////////
12
-// Defines
13
-//////////////////////////////////////////////////////////////////////////
14
15
-// Advanced Interface
16
-#define AMF_H264ADVANCED_NAME TEXT_AMF_H264ADVANCED("Name")
17
-#define AMF_H264ADVANCED_RESET TEXT_AMF_H264ADVANCED("Reset")
18
-#define AMF_H264ADVANCED_UPDATE TEXT_AMF_H264ADVANCED("Update")
19
-#define AMF_H264ADVANCED_MAX_LTR_FRAMES TEXT_AMF_H264ADVANCED("MaxLTRFrames")
20
-#define AMF_H264ADVANCED_VBVBUFFER_SIZE TEXT_AMF_H264ADVANCED("VBVBuffer.Size")
21
-#define AMF_H264ADVANCED_VBVBUFFER_FULLNESS TEXT_AMF_H264ADVANCED("VBVBuffer.Fullness")
22
-#define AMF_H264ADVANCED_MAX_AU_SIZE TEXT_AMF_H264ADVANCED("MaxAUSize")
23
-#define AMF_H264ADVANCED_HEADER_INSERTION_SPACING TEXT_AMF_H264ADVANCED("HeaderInsertionSpacing")
24
-#define AMF_H264ADVANCED_IDR_PERIOD TEXT_AMF_H264ADVANCED("IDRPeriod")
25
-#define AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT TEXT_AMF_H264ADVANCED("IntraRefreshNumMBPerSlot")
26
-#define AMF_H264ADVANCED_SLICESPERFRAME TEXT_AMF_H264ADVANCED("SlicesPerFrame")
27
-#define AMF_H264ADVANCED_MOTIONESTIMATION TEXT_AMF_H264ADVANCED("MotionEstimation")
28
-#define AMF_H264ADVANCED_MOTIONESTIMATION_NONE TEXT_AMF_H264ADVANCED("MotionEstimation.None")
29
-#define AMF_H264ADVANCED_MOTIONESTIMATION_HALF TEXT_AMF_H264ADVANCED("MotionEstimation.Half")
30
-#define AMF_H264ADVANCED_MOTIONESTIMATION_QUARTER TEXT_AMF_H264ADVANCED("MotionEstimation.Quarter")
31
-#define AMF_H264ADVANCED_MOTIONESTIMATION_BOTH TEXT_AMF_H264ADVANCED("MotionEstimation.Both")
32
+#include "api-d3d9.h"
33
+#include "api-d3d11.h"
34
+#endif
35
36
//////////////////////////////////////////////////////////////////////////
37
// Code
38
39
using namespace Plugin::AMD;
40
using namespace Plugin::Interface;
41
42
+enum Presets {
43
+ None = -1,
44
+ Default = 0,
45
+ Recording,
46
+ HighQuality,
47
+ Indistinguishable,
48
+ Lossless,
49
+ Twitch,
50
+ YouTube,
51
+};
52
+enum ViewMode {
53
+ Basic,
54
+ Advanced,
55
+ Expert,
56
+ Master
57
+};
58
+
59
void Plugin::Interface::H264Interface::encoder_register() {
60
static obs_encoder_info* encoder_info = new obs_encoder_info();
61
static const char* encoder_name = "amd_amf_h264";
62
63
encoder_info->get_extra_data = &get_extra_data;
64
65
obs_register_encoder(encoder_info);
66
+
67
+ //////////////////////////////////////////////////////////////////////////
68
+ // Deprecated old Encoder
69
+ static obs_encoder_info* encoder_info_simple = new obs_encoder_info();
70
+ static const char* encoder_name_simple = "amd_amf_h264_simple";
71
+
72
+ std::memset(encoder_info_simple, 0, sizeof(obs_encoder_info));
73
+
74
+ // Initialize Structure
75
+ encoder_info_simple->id = encoder_name_simple;
76
+ encoder_info_simple->type = obs_encoder_type::OBS_ENCODER_VIDEO;
77
+ encoder_info_simple->codec = encoder_codec;
78
+
79
+ // Functions
80
+ encoder_info_simple->get_name = &get_name_simple;
81
+ encoder_info_simple->get_defaults = &get_defaults;
82
+ encoder_info_simple->get_properties = &get_properties;
83
+ encoder_info_simple->create = &create;
84
+ encoder_info_simple->destroy = &destroy;
85
+ encoder_info_simple->encode = &encode;
86
+ encoder_info_simple->update = &update;
87
+ encoder_info_simple->get_video_info = &get_video_info;
88
+ encoder_info_simple->get_extra_data = &get_extra_data;
89
+
90
+ obs_register_encoder(encoder_info_simple);
91
+ //////////////////////////////////////////////////////////////////////////
92
}
93
94
const char* Plugin::Interface::H264Interface::get_name(void*) {
95
- return obs_module_text(AMF_H264ADVANCED_NAME);
96
+ static const char* name = "H264 Encoder (AMD Advanced Media Framework)";
97
+ return name;
98
}
99
100
+//////////////////////////////////////////////////////////////////////////
101
+// Deprecated old Encoder
102
+const char* Plugin::Interface::H264Interface::get_name_simple(void*) {
103
+ static const char* name = "[DEPRECATED] H264 Encoder (AMD Advanced Media Framework)";
104
+ return name;
105
+}
106
+//////////////////////////////////////////////////////////////////////////
107
void* Plugin::Interface::H264Interface::create(obs_data_t* settings, obs_encoder_t* encoder) {
108
try {
109
+ AMF_LOG_INFO("Starting up...");
110
Plugin::Interface::H264Interface* enc = new Plugin::Interface::H264Interface(settings, encoder);
111
return enc;
112
- } catch (...) {
113
+ } catch (std::exception e) {
114
+ AMF_LOG_ERROR("Exception: %s", e.what());
115
AMF_LOG_ERROR("Unable to create Encoder, see log for more information.");
116
return NULL;
117
+ } catch (...) {
118
+ AMF_LOG_ERROR("Unhandled Exception during start up.");
119
+ return NULL;
120
}
121
}
122
123
124
#pragma warning( disable: 4702 )
125
void Plugin::Interface::H264Interface::destroy(void* data) {
126
try {
127
+ AMF_LOG_INFO("Shutting down...");
128
Plugin::Interface::H264Interface* enc = static_cast<Plugin::Interface::H264Interface*>(data);
129
delete enc;
130
data = nullptr;
131
- } catch (...) {
132
+ } catch (std::exception e) {
133
+ AMF_LOG_ERROR("Exception: %s", e.what());
134
AMF_LOG_ERROR("Unable to destroy Encoder, see log for more information.");
135
+ } catch (...) {
136
+ AMF_LOG_ERROR("Unhandled Exception during shut down.");
137
}
138
}
139
#pragma warning( pop )
140
141
bool Plugin::Interface::H264Interface::encode(void *data, struct encoder_frame *frame, struct encoder_packet *packet, bool *received_packet) {
142
try {
143
return static_cast<Plugin::Interface::H264Interface*>(data)->encode(frame, packet, received_packet);
144
- } catch (...) {
145
+ } catch (std::exception e) {
146
+ AMF_LOG_ERROR("Exception: %s", e.what());
147
AMF_LOG_ERROR("Unable to encode, see log for more information.");
148
return false;
149
+ } catch (...) {
150
+ throw;
151
}
152
}
153
154
void Plugin::Interface::H264Interface::get_defaults(obs_data_t *data) {
155
- // Controls
156
- obs_data_set_default_bool(data, AMF_H264ADVANCED_RESET, false);
157
- obs_data_set_default_bool(data, AMF_H264ADVANCED_UPDATE, false);
158
-
159
- // Static Properties
160
- /// Memory Type & Compute Type
161
- obs_data_set_default_int(data, AMF_H264_MEMORYTYPE, VCEMemoryType_Host);
162
- obs_data_set_default_int(data, AMF_H264_COMPUTETYPE, VCEComputeType_None);
163
- obs_data_set_default_int(data, AMF_H264_SURFACEFORMAT, -1);
164
- /// Usage & Quality Preset
165
- obs_data_set_default_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
166
- obs_data_set_default_int(data, AMF_H264_QUALITY_PRESET, -1);
167
- /// Profile & Level
168
- obs_data_set_default_int(data, AMF_H264_PROFILE, -1);
169
- obs_data_set_default_int(data, AMF_H264_PROFILELEVEL, -1);
170
- /// Other
171
- obs_data_set_default_int(data, AMF_H264ADVANCED_MAX_LTR_FRAMES, -1);
172
- obs_data_set_default_int(data, AMF_H264_SCANTYPE, -1);
173
-
174
- // Dynamic Properties
175
- /// Rate Control
176
- obs_data_set_default_int(data, AMF_H264_RATECONTROLMETHOD, -1);
177
- /// Other
178
- obs_data_set_default_int(data, AMF_H264_FILLERDATA, -1);
179
- obs_data_set_default_int(data, AMF_H264_FRAMESKIPPING, -1);
180
- obs_data_set_default_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, -1);
181
- /// Video Coding Settings
182
- obs_data_set_default_int(data, AMF_H264ADVANCED_VBVBUFFER_SIZE, -1);
183
- obs_data_set_default_double(data, AMF_H264ADVANCED_VBVBUFFER_FULLNESS, 1.0);
184
- obs_data_set_default_int(data, AMF_H264ADVANCED_MAX_AU_SIZE, -1);
185
- /// Rate Control: CBR, VBR
186
- obs_data_set_default_int(data, AMF_H264_BITRATE_TARGET, -1);
187
- obs_data_set_default_int(data, AMF_H264_BITRATE_PEAK, -1);
188
- /// Todo: Unknown Rate Control Method, possibly just used for internal storage. I believe there is a Constrained QP setting that is yet undiscovered.
189
- obs_data_set_default_int(data, AMF_H264_QP_MINIMUM, -1);
190
- obs_data_set_default_int(data, AMF_H264_QP_MAXIMUM, -1);
191
- /// Rate Control: Constrained QP
192
- obs_data_set_default_int(data, AMF_H264_QP_IFRAME, -1);
193
- obs_data_set_default_int(data, AMF_H264_QP_PFRAME, -1);
194
- obs_data_set_default_int(data, AMF_H264_QP_BFRAME, -1);
195
- /// B-Picture Stuff
196
- obs_data_set_default_int(data, AMF_H264_QP_BPICTURE_DELTA, -11);
197
- obs_data_set_default_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, -11);
198
-
199
- // Picture Control Properties
200
- obs_data_set_default_int(data, AMF_H264_BPICTURE_PATTERN, -1);
201
- obs_data_set_default_int(data, AMF_H264_BPICTURE_REFERENCE, -1);
202
- obs_data_set_default_int(data, AMF_H264ADVANCED_HEADER_INSERTION_SPACING, -1);
203
- obs_data_set_default_int(data, AMF_H264_DEBLOCKINGFILTER, -1);
204
- obs_data_set_default_int(data, AMF_H264ADVANCED_IDR_PERIOD, -1);
205
- obs_data_set_default_int(data, AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT, -1);
206
- obs_data_set_default_int(data, AMF_H264ADVANCED_SLICESPERFRAME, -1);
207
-
208
- // Motion Estimation
209
- obs_data_set_default_int(data, AMF_H264ADVANCED_MOTIONESTIMATION, -1);
210
-
211
- // Other
212
- obs_data_set_default_int(data, AMF_H264_GOP_SIZE, -1);
213
- obs_data_set_default_int(data, AMF_H264_CABAC, -1);
214
-
215
- /// Debug Mode
216
- obs_data_set_default_bool(data, AMF_H264_DEBUGTRACING, false);
217
-
218
- //////////////////////////////////////////////////////////////////////////
219
+ #pragma region OBS - Enforce Streaming Service Restrictions
220
// OBS - Enforce Streaming Service Restrictions
221
- //////////////////////////////////////////////////////////////////////////
222
obs_data_set_default_int(data, "bitrate", -1);
223
obs_data_set_default_int(data, "keyint_sec", -1);
224
obs_data_set_default_string(data, "rate_control", "");
225
obs_data_set_default_string(data, "profile", "");
226
+ obs_data_set_default_string(data, "preset", "");
227
obs_data_set_int(data, "bitrate", -1);
228
obs_data_set_int(data, "keyint_sec", -1);
229
obs_data_set_string(data, "rate_control", "");
230
obs_data_set_string(data, "profile", "");
231
+ obs_data_set_string(data, "preset", "");
232
+ #pragma endregion OBS - Enforce Streaming Service Restrictions
233
+
234
+ obs_data_set_default_int(data, AMF_H264_PRESET, -1);
235
+
236
+ // Static Properties
237
+ obs_data_set_default_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
238
+ obs_data_set_default_int(data, AMF_H264_PROFILE, VCEProfile_Main);
239
+ obs_data_set_default_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
240
+ obs_data_set_default_int(data, AMF_H264_MAXIMUMLTRFRAMES, 0);
241
+
242
+ // Rate Control Properties
243
+ obs_data_set_default_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
244
+ obs_data_set_default_int(data, AMF_H264_BITRATE_TARGET, 3500);
245
+ obs_data_set_default_int(data, AMF_H264_BITRATE_PEAK, 9000);
246
+ obs_data_set_default_int(data, AMF_H264_QP_MINIMUM, 1);
247
+ obs_data_set_default_int(data, AMF_H264_QP_MAXIMUM, 51);
248
+ obs_data_set_default_int(data, AMF_H264_QP_IFRAME, 22);
249
+ obs_data_set_default_int(data, AMF_H264_QP_PFRAME, 22);
250
+ obs_data_set_default_int(data, AMF_H264_QP_BFRAME, 22);
251
+ obs_data_set_default_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
252
+ obs_data_set_default_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
253
+ obs_data_set_default_int(data, AMF_H264_VBVBUFFER, 0);
254
+ obs_data_set_default_int(data, AMF_H264_VBVBUFFER_SIZE, 3500);
255
+ obs_data_set_default_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 100);
256
+ obs_data_set_default_double(data, AMF_H264_VBVBUFFER_FULLNESS, 100);
257
+ obs_data_set_default_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
258
+ obs_data_set_default_int(data, AMF_H264_FILLERDATA, 1);
259
+ obs_data_set_default_int(data, AMF_H264_FRAMESKIPPING, 0);
260
+ obs_data_set_default_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
261
+
262
+ // Picture Control Properties
263
+ obs_data_set_default_double(data, AMF_H264_KEYFRAME_INTERVAL, 2);
264
+ obs_data_set_default_int(data, AMF_H264_IDR_PERIOD, 60);
265
+ obs_data_set_default_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
266
+ obs_data_set_default_int(data, AMF_H264_BPICTURE_PATTERN, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? VCEBPicturePattern_Three : VCEBPicturePattern_None));
267
+ obs_data_set_default_int(data, AMF_H264_BPICTURE_REFERENCE, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 1 : 0));
268
+ obs_data_set_default_int(data, AMF_H264_DEBLOCKINGFILTER, 1);
269
+ obs_data_set_default_int(data, AMF_H264_SLICESPERFRAME, 0);
270
+ obs_data_set_default_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
271
+
272
+ // Miscellaneous Control Properties
273
+ obs_data_set_default_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
274
+ obs_data_set_default_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
275
+ obs_data_set_default_int(data, AMF_H264_MOTIONESTIMATION, 3);
276
+ obs_data_set_default_int(data, AMF_H264_CABAC, 0);
277
+
278
+ // System Properties
279
+ obs_data_set_default_int(data, AMF_H264_MEMORYTYPE, VCEMemoryType_Host);
280
+ obs_data_set_default_int(data, AMF_H264_USE_OPENCL, 0);
281
+ obs_data_set_default_int(data, AMF_H264_SURFACEFORMAT, -1);
282
+ obs_data_set_default_int(data, AMF_H264_VIEW, ViewMode::Basic);
283
+ obs_data_set_default_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
284
+ obs_data_set_default_bool(data, AMF_H264_DEBUG, 0);
285
+}
286
+
287
+void fill_device_list(obs_property_t* p, obs_data_t* data) {
288
+ std::vector<Plugin::API::Device> devices;
289
+
290
+ switch ((VCEMemoryType)obs_data_get_int(data, AMF_H264_MEMORYTYPE)) {
291
+ case VCEMemoryType_Auto:
292
+ #ifdef _WIN32
293
+ if (IsWindows8OrGreater()) {
294
+ // DirectX 11
295
+ devices = Plugin::API::Direct3D11::EnumerateDevices();
296
+ } else if (IsWindowsXPOrGreater()) {
297
+ // DirectX 9
298
+ //devices = Plugin::API::Direct3D9::EnumerateDevices();
299
+ } else
300
+ #endif
301
+ {
302
+ // OpenGL
303
+ }
304
+ break;
305
+
306
+ #ifdef _WIN32
307
+ case VCEMemoryType_DirectX9:
308
+ if (IsWindowsXPOrGreater()) // DirectX 9
309
+ //devices = Plugin::API::Direct3D9::EnumerateDevices();
310
+ break;
311
+ case VCEMemoryType_DirectX11:
312
+ if (IsWindows8OrGreater()) // DirectX 11
313
+ devices = Plugin::API::Direct3D11::EnumerateDevices();
314
+ break;
315
+ #endif
316
+ case VCEMemoryType_OpenGL:
317
+ // OpenGL
318
+ break;
319
+ /*case VCEMemoryType_Host:
320
+ break;*/
321
+ }
322
+
323
+ obs_property_list_clear(p);
324
+ obs_property_list_add_string(p, obs_module_text(AMF_UTIL_DEFAULT), "");
325
+ for (Plugin::API::Device device : devices) {
326
+ obs_property_list_add_string(p, device.Name.c_str(), device.UniqueId.c_str());
327
+ }
328
}
329
330
obs_properties_t* Plugin::Interface::H264Interface::get_properties(void*) {
331
obs_properties* props = obs_properties_create();
332
- obs_property_t* list;
333
obs_property_t* p;
334
335
- //////////////////////////////////////////////////////////////////////////
336
- // Controls
337
- //////////////////////////////////////////////////////////////////////////
338
- p = obs_properties_add_bool(props, AMF_H264ADVANCED_RESET, obs_module_text(AMF_H264ADVANCED_RESET));
339
- obs_property_set_modified_callback(p, &reset_callback);
340
- p = obs_properties_add_bool(props, AMF_H264ADVANCED_UPDATE, obs_module_text(AMF_H264ADVANCED_UPDATE));
341
- obs_property_set_modified_callback(p, &update_from_amf);
342
-
343
- //////////////////////////////////////////////////////////////////////////
344
- // Encoder Static Parameters
345
- //////////////////////////////////////////////////////////////////////////
346
- /// Memory Type
347
- list = obs_properties_add_list(props, AMF_H264_MEMORYTYPE, obs_module_text(AMF_H264_MEMORYTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
348
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_AUTOMATIC), VCEMemoryType_Auto);
349
- obs_property_list_add_int(list, "Host", VCEMemoryType_Host);
350
- if (IsWindowsXPOrGreater()) {
351
- obs_property_list_add_int(list, "DirectX 9", VCEMemoryType_DirectX9);
352
- if (IsWindows8OrGreater()) {
353
- obs_property_list_add_int(list, "DirectX 11", VCEMemoryType_DirectX11);
354
- }
355
- }
356
- obs_property_list_add_int(list, "OpenGL", VCEMemoryType_OpenGL);
357
- /// Compute Type
358
- list = obs_properties_add_list(props, AMF_H264_COMPUTETYPE, obs_module_text(AMF_H264_COMPUTETYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
359
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), VCEComputeType_None);
360
- obs_property_list_add_int(list, "OpenCL", VCEComputeType_OpenCL);
361
- /// Surface Format
362
- list = obs_properties_add_list(props, AMF_H264_SURFACEFORMAT, obs_module_text(AMF_H264_SURFACEFORMAT), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
363
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_AUTOMATIC), -1);
364
- auto formats = Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->input.formats;
365
- for (auto format = formats.begin(); format != formats.end(); format++) {
366
- switch (format->first) {
367
- case amf::AMF_SURFACE_NV12:
368
- obs_property_list_add_int(list, "NV12 (4:2:0)", VCESurfaceFormat_NV12);
369
- break;
370
- case amf::AMF_SURFACE_YUV420P:
371
- obs_property_list_add_int(list, "I420 (4:2:0)", VCESurfaceFormat_I420);
372
- break;
373
- case amf::AMF_SURFACE_YUY2:
374
- obs_property_list_add_int(list, "YUY2 (4:2:2)", VCESurfaceFormat_YUY2);
375
- break;
376
- case amf::AMF_SURFACE_BGRA:
377
- obs_property_list_add_int(list, "BGRA (Uncompressed)", VCESurfaceFormat_BGRA);
378
- break;
379
- case amf::AMF_SURFACE_RGBA:
380
- obs_property_list_add_int(list, "RGBA (Uncompressed)", VCESurfaceFormat_RGBA);
381
- break;
382
- case amf::AMF_SURFACE_GRAY8:
383
- obs_property_list_add_int(list, "Y800 (Gray)", VCESurfaceFormat_GRAY);
384
- break;
385
- }
386
- }
387
- /// Usage
388
- list = obs_properties_add_list(props, AMF_H264_USAGE, obs_module_text(AMF_H264_USAGE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
389
- obs_property_list_add_int(list, obs_module_text(AMF_H264_USAGE_TRANSCODING), VCEUsage_Transcoding);
390
- obs_property_list_add_int(list, obs_module_text(AMF_H264_USAGE_ULTRALOWLATENCY), VCEUsage_UltraLowLatency);
391
- obs_property_list_add_int(list, obs_module_text(AMF_H264_USAGE_LOWLATENCY), VCEUsage_LowLatency);
392
- obs_property_list_add_int(list, obs_module_text(AMF_H264_USAGE_WEBCAM), VCEUsage_Webcam);
393
- /// h264 Profile
394
- list = obs_properties_add_list(props, AMF_H264_PROFILE, obs_module_text(AMF_H264_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
395
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
396
+ #pragma region Preset
397
+ p = obs_properties_add_list(props, AMF_H264_PRESET, obs_module_text(AMF_H264_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
398
+ obs_property_set_modified_callback(p, preset_modified);
399
+ obs_property_list_add_int(p, "", -1);
400
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_DEFAULT), Presets::Default);
401
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_PRESET_RECORDING), Presets::Recording);
402
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_PRESET_HIGHQUALITY), Presets::HighQuality);
403
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_PRESET_INDISTINGUISHABLE), Presets::Indistinguishable);
404
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_PRESET_LOSSLESS), Presets::Lossless);
405
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_PRESET_TWITCH), Presets::Twitch);
406
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_PRESET_YOUTUBE), Presets::YouTube);
407
+ #pragma endregion Preset
408
+
409
+ #pragma region Static Properties
410
+ #pragma region Usage
411
+ p = obs_properties_add_list(props, AMF_H264_USAGE, obs_module_text(AMF_H264_USAGE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
412
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_USAGE_DESCRIPTION));
413
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_USAGE_TRANSCODING), VCEUsage_Transcoding);
414
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_USAGE_ULTRALOWLATENCY), VCEUsage_UltraLowLatency);
415
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_USAGE_LOWLATENCY), VCEUsage_LowLatency);
416
+ //obs_property_list_add_int(list, obs_module_text(AMF_H264_USAGE_WEBCAM), VCEUsage_Webcam); // Requires SVC? SVC is not implemented by default.
417
+ #pragma endregion Usage
418
+ #pragma region Profile
419
+ p = obs_properties_add_list(props, AMF_H264_PROFILE, obs_module_text(AMF_H264_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
420
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_PROFILE_DESCRIPTION));
421
switch (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfile) {
422
case 100:
423
- obs_property_list_add_int(list, "High", VCEProfile_High);
424
+ obs_property_list_add_int(p, "High", VCEProfile_High);
425
case 77:
426
- obs_property_list_add_int(list, "Main", VCEProfile_Main);
427
+ obs_property_list_add_int(p, "Main", VCEProfile_Main);
428
case 66:
429
- obs_property_list_add_int(list, "Baseline", VCEProfile_Baseline);
430
+ obs_property_list_add_int(p, "Baseline", VCEProfile_Baseline);
431
break;
432
}
433
- /// h264 Profile Level
434
- list = obs_properties_add_list(props, AMF_H264_PROFILELEVEL, obs_module_text(AMF_H264_PROFILELEVEL), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
435
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
436
+ #pragma endregion Profile
437
+ #pragma region Profile Level
438
+ p = obs_properties_add_list(props, AMF_H264_PROFILELEVEL, obs_module_text(AMF_H264_PROFILELEVEL), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
439
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_PROFILELEVEL_DESCRIPTION));
440
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_AUTOMATIC), VCEProfileLevel_Automatic);
441
switch (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxProfileLevel) {
442
- case 62:
443
- obs_property_list_add_int(list, "6.2", VCEProfileLevel_62);
444
- case 61:
445
- obs_property_list_add_int(list, "6.1", VCEProfileLevel_61);
446
- case 60:
447
- obs_property_list_add_int(list, "6.0", VCEProfileLevel_60);
448
case 52:
449
- obs_property_list_add_int(list, "5.2", VCEProfileLevel_52);
450
+ obs_property_list_add_int(p, "5.2", VCEProfileLevel_52);
451
case 51:
452
- obs_property_list_add_int(list, "5.1", VCEProfileLevel_51);
453
+ obs_property_list_add_int(p, "5.1", VCEProfileLevel_51);
454
case 50:
455
- obs_property_list_add_int(list, "5.0", VCEProfileLevel_50);
456
+ obs_property_list_add_int(p, "5.0", VCEProfileLevel_50);
457
case 42: // Some VCE 2.0 Cards.
458
- obs_property_list_add_int(list, "4.2", VCEProfileLevel_42);
459
+ obs_property_list_add_int(p, "4.2", VCEProfileLevel_42);
460
case 41: // Some APUs and VCE 1.0 Cards.
461
- obs_property_list_add_int(list, "4.1", VCEProfileLevel_41);
462
+ obs_property_list_add_int(p, "4.1", VCEProfileLevel_41);
463
case 40: // These should in theory be supported by all VCE 1.0 devices and APUs.
464
- obs_property_list_add_int(list, "4.0", VCEProfileLevel_40);
465
+ obs_property_list_add_int(p, "4.0", VCEProfileLevel_40);
466
case 32:
467
- obs_property_list_add_int(list, "3.2", VCEProfileLevel_32);
468
+ obs_property_list_add_int(p, "3.2", VCEProfileLevel_32);
469
case 31:
470
- obs_property_list_add_int(list, "3.1", VCEProfileLevel_31);
471
+ obs_property_list_add_int(p, "3.1", VCEProfileLevel_31);
472
case 30:
473
- obs_property_list_add_int(list, "3.0", VCEProfileLevel_30);
474
+ obs_property_list_add_int(p, "3.0", VCEProfileLevel_30);
475
case 22:
476
- obs_property_list_add_int(list, "2.2", VCEProfileLevel_22);
477
+ obs_property_list_add_int(p, "2.2", VCEProfileLevel_22);
478
case 21:
479
- obs_property_list_add_int(list, "2.1", VCEProfileLevel_21);
480
+ obs_property_list_add_int(p, "2.1", VCEProfileLevel_21);
481
case 20:
482
- obs_property_list_add_int(list, "2.0", VCEProfileLevel_20);
483
+ obs_property_list_add_int(p, "2.0", VCEProfileLevel_20);
484
case 13:
485
- obs_property_list_add_int(list, "1.3", VCEProfileLevel_13);
486
+ obs_property_list_add_int(p, "1.3", VCEProfileLevel_13);
487
case 12:
488
- obs_property_list_add_int(list, "1.2", VCEProfileLevel_12);
489
+ obs_property_list_add_int(p, "1.2", VCEProfileLevel_12);
490
case 11:
491
- obs_property_list_add_int(list, "1.1", VCEProfileLevel_11);
492
+ obs_property_list_add_int(p, "1.1", VCEProfileLevel_11);
493
case 10:
494
default:
495
- obs_property_list_add_int(list, "1.0", VCEProfileLevel_10);
496
+ obs_property_list_add_int(p, "1.0", VCEProfileLevel_10);
497
}
498
- /// Maximum Long-Term-Reference Frames
499
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_MAX_LTR_FRAMES, obs_module_text(AMF_H264ADVANCED_MAX_LTR_FRAMES), -1, 2, 1);
500
-
501
- //////////////////////////////////////////////////////////////////////////
502
- // Encoder Rate Control
503
- //////////////////////////////////////////////////////////////////////////
504
- /// Method
505
- list = obs_properties_add_list(props, AMF_H264_RATECONTROLMETHOD, obs_module_text(AMF_H264_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
506
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
507
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_CQP), VCERateControlMethod_ConstantQP);
508
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_CBR), VCERateControlMethod_ConstantBitrate);
509
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_VBR), VCERateControlMethod_VariableBitrate_PeakConstrained);
510
- obs_property_list_add_int(list, obs_module_text(AMF_H264_RATECONTROLMETHOD_VBR_LAT), VCERateControlMethod_VariableBitrate_LatencyConstrained);
511
- /// Skip Frames if necessary
512
- list = obs_properties_add_list(props, AMF_H264_FRAMESKIPPING, obs_module_text(AMF_H264_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
513
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
514
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
515
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
516
- /// Method: Bitrate
517
- obs_properties_add_int_slider(props, AMF_H264_BITRATE_TARGET, obs_module_text(AMF_H264_BITRATE_TARGET), -1, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
518
- obs_properties_add_int_slider(props, AMF_H264_BITRATE_PEAK, obs_module_text(AMF_H264_BITRATE_PEAK), -1, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
519
+ #pragma endregion Profile Levels
520
+ #pragma region Long Term Reference Frames
521
+ p = obs_properties_add_int_slider(props, AMF_H264_MAXIMUMLTRFRAMES, obs_module_text(AMF_H264_MAXIMUMLTRFRAMES), 0, 2, 1);
522
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_MAXIMUMLTRFRAMES_DESCRIPTION));
523
+ obs_property_set_modified_callback(p, maximum_ltr_frames_modified);
524
+ #pragma endregion Long Term Reference Frames
525
+ #pragma endregion Static Properties
526
+
527
+ #pragma region Rate Control Properties
528
+ //p = obs_properties_add_bool(props, "rcp_delimiter", "------ Rate Control Properties ------");
529
+ #pragma region Method
530
+ p = obs_properties_add_list(props, AMF_H264_RATECONTROLMETHOD, obs_module_text(AMF_H264_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
531
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_RATECONTROLMETHOD_DESCRIPTION));
532
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_RATECONTROLMETHOD_CQP), VCERateControlMethod_ConstantQP);
533
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_RATECONTROLMETHOD_CBR), VCERateControlMethod_ConstantBitrate);
534
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_RATECONTROLMETHOD_VBR), VCERateControlMethod_VariableBitrate_PeakConstrained);
535
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_RATECONTROLMETHOD_VBR_LAT), VCERateControlMethod_VariableBitrate_LatencyConstrained);
536
+ obs_property_set_modified_callback(p, rate_control_method_modified);
537
+ #pragma endregion Method
538
+ #pragma region Method Parameters
539
+ /// Bitrate Constraints
540
+ p = obs_properties_add_int(props, AMF_H264_BITRATE_TARGET, obs_module_text(AMF_H264_BITRATE_TARGET), 0, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
541
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_BITRATE_TARGET_DESCRIPTION));
542
+ p = obs_properties_add_int(props, AMF_H264_BITRATE_PEAK, obs_module_text(AMF_H264_BITRATE_PEAK), 0, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
543
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_BITRATE_PEAK_DESCRIPTION));
544
/// Minimum QP, Maximum QP
545
- obs_properties_add_int_slider(props, AMF_H264_QP_MINIMUM, obs_module_text(AMF_H264_QP_MINIMUM), -1, 51, 1);
546
- obs_properties_add_int_slider(props, AMF_H264_QP_MAXIMUM, obs_module_text(AMF_H264_QP_MAXIMUM), -1, 51, 1);
547
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_MINIMUM, obs_module_text(AMF_H264_QP_MINIMUM), 0, 51, 1);
548
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_MINIMUM_DESCRIPTION));
549
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_MAXIMUM, obs_module_text(AMF_H264_QP_MAXIMUM), 0, 51, 1);
550
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_MAXIMUM_DESCRIPTION));
551
/// Method: Constant QP
552
- obs_properties_add_int_slider(props, AMF_H264_QP_IFRAME, obs_module_text(AMF_H264_QP_IFRAME), -1, 51, 1);
553
- obs_properties_add_int_slider(props, AMF_H264_QP_PFRAME, obs_module_text(AMF_H264_QP_PFRAME), -1, 51, 1);
554
- obs_properties_add_int_slider(props, AMF_H264_QP_BFRAME, obs_module_text(AMF_H264_QP_BFRAME), -1, 51, 1);
555
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_IFRAME, obs_module_text(AMF_H264_QP_IFRAME), 0, 51, 1);
556
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_IFRAME_DESCRIPTION));
557
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_PFRAME, obs_module_text(AMF_H264_QP_PFRAME), 0, 51, 1);
558
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_PFRAME_DESCRIPTION));
559
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_BFRAME, obs_module_text(AMF_H264_QP_BFRAME), 0, 51, 1);
560
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_BFRAME_DESCRIPTION));
561
/// B-Picture Related
562
- obs_properties_add_int_slider(props, AMF_H264_QP_BPICTURE_DELTA, obs_module_text(AMF_H264_QP_BPICTURE_DELTA), -11, 10, 1);
563
- obs_properties_add_int_slider(props, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, obs_module_text(AMF_H264_QP_REFERENCE_BPICTURE_DELTA), -11, 10, 1);
564
- /// VBV Buffer
565
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_VBVBUFFER_SIZE, obs_module_text(AMF_H264ADVANCED_VBVBUFFER_SIZE), -1, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
566
- obs_properties_add_float_slider(props, AMF_H264ADVANCED_VBVBUFFER_FULLNESS, obs_module_text(AMF_H264ADVANCED_VBVBUFFER_FULLNESS), 0.0, 1.0, 0.015625);
567
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_BPICTURE_DELTA, obs_module_text(AMF_H264_QP_BPICTURE_DELTA), -10, 10, 1);
568
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_BPICTURE_DELTA_DESCRIPTION));
569
+ p = obs_properties_add_int_slider(props, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, obs_module_text(AMF_H264_QP_REFERENCE_BPICTURE_DELTA), -10, 10, 1);
570
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QP_REFERENCE_BPICTURE_DELTA_DESCRIPTION));
571
+ #pragma endregion Method Parameters
572
+ #pragma region VBV Buffer
573
+ p = obs_properties_add_list(props, AMF_H264_VBVBUFFER, obs_module_text(AMF_H264_VBVBUFFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
574
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_VBVBUFFER_DESCRIPTION));
575
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_AUTOMATIC), 0);
576
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_MANUAL), 1);
577
+ obs_property_set_modified_callback(p, view_modified);
578
+ p = obs_properties_add_float_slider(props, AMF_H264_VBVBUFFER_STRICTNESS, obs_module_text(AMF_H264_VBVBUFFER_STRICTNESS), 0.0, 100.0, 0.1);
579
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_VBVBUFFER_STRICTNESS_DESCRIPTION));
580
+ p = obs_properties_add_int_slider(props, AMF_H264_VBVBUFFER_SIZE, obs_module_text(AMF_H264_VBVBUFFER_SIZE), 1, 1000000, 1);
581
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_VBVBUFFER_SIZE_DESCRIPTION));
582
+ p = obs_properties_add_float_slider(props, AMF_H264_VBVBUFFER_FULLNESS, obs_module_text(AMF_H264_VBVBUFFER_FULLNESS), 0.0, 100.0, 100.0 / 64.0);
583
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_VBVBUFFER_FULLNESS_DESCRIPTION));
584
+ #pragma endregion VBV Buffer
585
+ /// Max Access Unit Size
586
+ p = obs_properties_add_int_slider(props, AMF_H264_MAXIMUMACCESSUNITSIZE, obs_module_text(AMF_H264_MAXIMUMACCESSUNITSIZE), 0, 100000000, 1);
587
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_MAXIMUMACCESSUNITSIZE_DESCRIPTION));
588
+ #pragma region Flags
589
+ /// Filler Data (Only supported by CBR so far)
590
+ p = obs_properties_add_list(props, AMF_H264_FILLERDATA, obs_module_text(AMF_H264_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
591
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_FILLERDATA_DESCRIPTION));
592
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
593
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
594
+ /// Frame Skipping
595
+ p = obs_properties_add_list(props, AMF_H264_FRAMESKIPPING, obs_module_text(AMF_H264_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
596
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_FRAMESKIPPING_DESCRIPTION));
597
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
598
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
599
/// Enforce Hypothetical Reference Decoder Compatibility
600
- list = obs_properties_add_list(props, AMF_H264_ENFORCEHRDCOMPATIBILITY, obs_module_text(AMF_H264_ENFORCEHRDCOMPATIBILITY), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
601
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
602
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
603
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
604
- /// Filler Data
605
- list = obs_properties_add_list(props, AMF_H264_FILLERDATA, obs_module_text(AMF_H264_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
606
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
607
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
608
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
609
- /// Max AU Size
610
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_MAX_AU_SIZE, obs_module_text(AMF_H264ADVANCED_MAX_AU_SIZE), -1, 100000000, 1);
611
-
612
- //////////////////////////////////////////////////////////////////////////
613
- // Encoder Picture Control
614
- //////////////////////////////////////////////////////////////////////////
615
- /// Header Insertion Spacing
616
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_HEADER_INSERTION_SPACING, obs_module_text(AMF_H264ADVANCED_HEADER_INSERTION_SPACING), -1, 1000, 1);
617
- /// IDR Period
618
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_IDR_PERIOD, obs_module_text(AMF_H264ADVANCED_IDR_PERIOD), -1, 1000, 1);
619
- /// De-Blocking Filter
620
- list = obs_properties_add_list(props, AMF_H264_DEBLOCKINGFILTER, obs_module_text(AMF_H264_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
621
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
622
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
623
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
624
- /// Intra Refresh MBs Number Per Slot in Macro-Blocks
625
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT, obs_module_text(AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT), -1, 1024, 1);
626
- /// Number of slices Per Frame
627
- obs_properties_add_int_slider(props, AMF_H264ADVANCED_SLICESPERFRAME, obs_module_text(AMF_H264ADVANCED_SLICESPERFRAME), -1, 1000, 1);
628
+ p = obs_properties_add_list(props, AMF_H264_ENFORCEHRDCOMPATIBILITY, obs_module_text(AMF_H264_ENFORCEHRDCOMPATIBILITY), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
629
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_ENFORCEHRDCOMPATIBILITY_DESCRIPTION));
630
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
631
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
632
+ #pragma endregion Flags
633
+ #pragma endregion Rate Control Properties
634
+
635
+ #pragma region Picture Control Properties
636
+ //p = obs_properties_add_bool(props, "pcp_delimiter", "------ Picture Control Properties ------");
637
+ #pragma region IDR Period / Keyframe Interval / Header Insertion Spacing
638
+ p = obs_properties_add_float(props, AMF_H264_KEYFRAME_INTERVAL, obs_module_text(AMF_H264_KEYFRAME_INTERVAL), 0, 100, 0.001);
639
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_KEYFRAME_INTERVAL_DESCRIPTION));
640
+ p = obs_properties_add_int(props, AMF_H264_IDR_PERIOD, obs_module_text(AMF_H264_IDR_PERIOD), 1, 1000, 1);
641
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_IDR_PERIOD_DESCRIPTION));
642
+ p = obs_properties_add_int(props, AMF_H264_HEADER_INSERTION_SPACING, obs_module_text(AMF_H264_HEADER_INSERTION_SPACING), 0, 1000, 1);
643
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_HEADER_INSERTION_SPACING_DESCRIPTION));
644
+ #pragma endregion IDR Period / Keyframe Interval / Header Insertion Spacing
645
+ #pragma region B-Pictures
646
/// B-Pictures Pattern
647
- obs_properties_add_int_slider(props, AMF_H264_BPICTURE_PATTERN, obs_module_text(AMF_H264_BPICTURE_PATTERN), -1, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 3 : 0), 1);
648
+ p = obs_properties_add_int_slider(props, AMF_H264_BPICTURE_PATTERN, obs_module_text(AMF_H264_BPICTURE_PATTERN), 0, (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames ? 3 : 0), 1);
649
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_BPICTURE_PATTERN_DESCRIPTION));
650
+ obs_property_set_modified_callback(p, bpictures_modified);
651
/// Enable Reference to B-Frames (2nd Generation GCN and newer)
652
- list = obs_properties_add_list(props, AMF_H264_BPICTURE_REFERENCE, obs_module_text(AMF_H264_BPICTURE_REFERENCE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
653
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
654
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
655
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
656
-
657
- //////////////////////////////////////////////////////////////////////////
658
- // Encoder Miscellaneous Parameters
659
- //////////////////////////////////////////////////////////////////////////
660
- /// Scan Type
661
- list = obs_properties_add_list(props, AMF_H264_SCANTYPE, obs_module_text(AMF_H264_SCANTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
662
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
663
- obs_property_list_add_int(list, obs_module_text(AMF_H264_SCANTYPE_PROGRESSIVE), VCEScanType_Progressive);
664
- obs_property_list_add_int(list, obs_module_text(AMF_H264_SCANTYPE_INTERLACED), VCEScanType_Interlaced);
665
+ p = obs_properties_add_list(props, AMF_H264_BPICTURE_REFERENCE, obs_module_text(AMF_H264_BPICTURE_REFERENCE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
666
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_BPICTURE_REFERENCE_DESCRIPTION));
667
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
668
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
669
+ #pragma endregion B-Pictures
670
+ /// De-Blocking Filter
671
+ p = obs_properties_add_list(props, AMF_H264_DEBLOCKINGFILTER, obs_module_text(AMF_H264_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
672
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_DEBLOCKINGFILTER_DESCRIPTION));
673
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
674
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
675
+ /// Number of Slices Per Frame
676
+ p = obs_properties_add_int_slider(props, AMF_H264_SLICESPERFRAME, obs_module_text(AMF_H264_SLICESPERFRAME), 0, 65535, 1);
677
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_SLICESPERFRAME_DESCRIPTION));
678
+ /// Intra Refresh Number of Macro Blocks per Slot
679
+ obs_properties_add_int_slider(props, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, obs_module_text(AMF_H264_INTRAREFRESHNUMMBSPERSLOT), 0, 65535, 1);
680
+ #pragma endregion Picture Control Properties
681
+
682
+ #pragma region Miscellaneous Control Properties
683
+ //p = obs_properties_add_bool(props, "msc_delimiter", "------ Miscellaneous Properties ------");
684
/// Quality Preset
685
- list = obs_properties_add_list(props, AMF_H264_QUALITY_PRESET, obs_module_text(AMF_H264_QUALITY_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
686
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
687
- obs_property_list_add_int(list, obs_module_text(AMF_H264_QUALITY_PRESET_SPEED), VCEQualityPreset_Speed);
688
- obs_property_list_add_int(list, obs_module_text(AMF_H264_QUALITY_PRESET_BALANCED), VCEQualityPreset_Balanced);
689
- obs_property_list_add_int(list, obs_module_text(AMF_H264_QUALITY_PRESET_QUALITY), VCEQualityPreset_Quality);
690
-
691
- //////////////////////////////////////////////////////////////////////////
692
- // Encoder Motion Estimation Parameters
693
- //////////////////////////////////////////////////////////////////////////
694
+ p = obs_properties_add_list(props, AMF_H264_QUALITY_PRESET, obs_module_text(AMF_H264_QUALITY_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
695
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_QUALITY_PRESET_DESCRIPTION));
696
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_QUALITY_PRESET_SPEED), VCEQualityPreset_Speed);
697
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_QUALITY_PRESET_BALANCED), VCEQualityPreset_Balanced);
698
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_QUALITY_PRESET_QUALITY), VCEQualityPreset_Quality);
699
+ /// Scan Type
700
+ p = obs_properties_add_list(props, AMF_H264_SCANTYPE, obs_module_text(AMF_H264_SCANTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
701
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_SCANTYPE_DESCRIPTION));
702
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_SCANTYPE_PROGRESSIVE), VCEScanType_Progressive);
703
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_SCANTYPE_INTERLACED), VCEScanType_Interlaced);
704
/// Motion Estimation
705
- list = obs_properties_add_list(props, AMF_H264ADVANCED_MOTIONESTIMATION, obs_module_text(AMF_H264ADVANCED_MOTIONESTIMATION), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
706
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
707
- obs_property_list_add_int(list, obs_module_text(AMF_H264ADVANCED_MOTIONESTIMATION_NONE), 0);
708
- obs_property_list_add_int(list, obs_module_text(AMF_H264ADVANCED_MOTIONESTIMATION_HALF), 1);
709
- obs_property_list_add_int(list, obs_module_text(AMF_H264ADVANCED_MOTIONESTIMATION_QUARTER), 2);
710
- obs_property_list_add_int(list, obs_module_text(AMF_H264ADVANCED_MOTIONESTIMATION_BOTH), 3);
711
-
712
- //////////////////////////////////////////////////////////////////////////
713
- // Other Parameters
714
- //////////////////////////////////////////////////////////////////////////
715
- /// GOP Size
716
- obs_properties_add_int_slider(props, AMF_H264_GOP_SIZE, obs_module_text(AMF_H264_GOP_SIZE), -1, 1000, 1);
717
+ p = obs_properties_add_list(props, AMF_H264_MOTIONESTIMATION, obs_module_text(AMF_H264_MOTIONESTIMATION), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
718
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_MOTIONESTIMATION_DESCRIPTION));
719
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_MOTIONESTIMATION_NONE), 0);
720
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_MOTIONESTIMATION_HALF), 1);
721
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_MOTIONESTIMATION_QUARTER), 2);
722
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_MOTIONESTIMATION_BOTH), 3);
723
/// CABAC
724
- list = obs_properties_add_list(props, AMF_H264_CABAC, obs_module_text(AMF_H264_CABAC), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
725
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_DEFAULT), -1);
726
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
727
- obs_property_list_add_int(list, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
728
+ p = obs_properties_add_list(props, AMF_H264_CABAC, obs_module_text(AMF_H264_CABAC), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
729
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_CABAC_DESCRIPTION));
730
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
731
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
732
+ #pragma endregion Miscellaneous Control Properties
733
+
734
+ #pragma region System Properties
735
+ //p = obs_properties_add_bool(props, "sys_delimiter", "------ System Properties ------");
736
+ /// Memory Type
737
+ p = obs_properties_add_list(props, AMF_H264_MEMORYTYPE, obs_module_text(AMF_H264_MEMORYTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
738
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_MEMORYTYPE_DESCRIPTION));
739
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_AUTOMATIC), VCEMemoryType_Auto);
740
+ obs_property_list_add_int(p, "Host", VCEMemoryType_Host);
741
+ #ifdef _WIN32
742
+ if (IsWindowsXPOrGreater()) {
743
+ obs_property_list_add_int(p, "DirectX 9", VCEMemoryType_DirectX9);
744
+ if (IsWindows8OrGreater()) {
745
+ obs_property_list_add_int(p, "DirectX 11", VCEMemoryType_DirectX11);
746
+ }
747
+ }
748
+ #endif
749
+ obs_property_list_add_int(p, "OpenGL", VCEMemoryType_OpenGL);
750
+ obs_property_set_modified_callback(p, view_modified);
751
+ /// Device
752
+ p = obs_properties_add_list(props, AMF_H264_DEVICE, obs_module_text(AMF_H264_DEVICE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
753
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_DEVICE_DESCRIPTION));
754
+ /// Compute Type
755
+ p = obs_properties_add_list(props, AMF_H264_USE_OPENCL, obs_module_text(AMF_H264_USE_OPENCL), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
756
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_USE_OPENCL_DESCRIPTION));
757
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_DISABLED), 0);
758
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_TOGGLE_ENABLED), 1);
759
+ /// Surface Format
760
+ p = obs_properties_add_list(props, AMF_H264_SURFACEFORMAT, obs_module_text(AMF_H264_SURFACEFORMAT), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
761
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_SURFACEFORMAT_DESCRIPTION));
762
+ obs_property_list_add_int(p, obs_module_text(AMF_UTIL_AUTOMATIC), -1);
763
+ auto formats = Plugin::AMD::VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->input.formats;
764
+ for (auto format = formats.begin(); format != formats.end(); format++) {
765
+ switch (format->first) {
766
+ case amf::AMF_SURFACE_NV12:
767
+ obs_property_list_add_int(p, "NV12 (4:2:0)", VCESurfaceFormat_NV12);
768
+ break;
769
+ case amf::AMF_SURFACE_YUV420P:
770
+ obs_property_list_add_int(p, "I420 (4:2:0)", VCESurfaceFormat_I420);
771
+ break;
772
+ case amf::AMF_SURFACE_YUY2:
773
+ obs_property_list_add_int(p, "YUY2 (4:2:2)", VCESurfaceFormat_YUY2);
774
+ break;
775
+ case amf::AMF_SURFACE_BGRA:
776
+ obs_property_list_add_int(p, "BGRA (Uncompressed)", VCESurfaceFormat_BGRA);
777
+ break;
778
+ case amf::AMF_SURFACE_RGBA:
779
+ obs_property_list_add_int(p, "RGBA (Uncompressed)", VCESurfaceFormat_RGBA);
780
+ break;
781
+ case amf::AMF_SURFACE_GRAY8:
782
+ obs_property_list_add_int(p, "Y800 (Gray)", VCESurfaceFormat_GRAY);
783
+ break;
784
+ }
785
+ }
786
787
- //////////////////////////////////////////////////////////////////////////
788
- // Debug
789
- //////////////////////////////////////////////////////////////////////////
790
- /// Debug Mode
791
- obs_properties_add_bool(props, AMF_H264_DEBUGTRACING, obs_module_text(AMF_H264_DEBUGTRACING));
792
+ /// View Mode
793
+ p = obs_properties_add_list(props, AMF_H264_VIEW, obs_module_text(AMF_H264_VIEW), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
794
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_VIEW_DESCRIPTION));
795
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_VIEW_BASIC), ViewMode::Basic);
796
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_VIEW_ADVANCED), ViewMode::Advanced);
797
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_VIEW_EXPERT), ViewMode::Expert);
798
+ obs_property_list_add_int(p, obs_module_text(AMF_H264_VIEW_MASTER), ViewMode::Master);
799
+ obs_property_set_modified_callback(p, view_modified);
800
+ /// Unlock Properties to full range.
801
+ p = obs_properties_add_bool(props, AMF_H264_UNLOCK_PROPERTIES, obs_module_text(AMF_H264_UNLOCK_PROPERTIES));
802
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_UNLOCK_PROPERTIES_DESCRIPTION));
803
+ obs_property_set_modified_callback(p, unlock_properties_modified);
804
+
805
+ /// Debug
806
+ p = obs_properties_add_bool(props, AMF_H264_DEBUG, obs_module_text(AMF_H264_DEBUG));
807
+ obs_property_set_long_description(p, obs_module_text(AMF_H264_DEBUG_DESCRIPTION));
808
+ #pragma endregion System Properties
809
810
return props;
811
}
812
813
-bool Plugin::Interface::H264Interface::reset_callback(obs_properties_t *props, obs_property_t *, obs_data_t *settings) {
814
- if (obs_data_get_bool(settings, AMF_H264ADVANCED_RESET) == false)
815
- return false;
816
- obs_data_set_bool(settings, AMF_H264ADVANCED_RESET, false);
817
-
818
- for (obs_property_t* el = obs_properties_first(props); obs_property_next(&el);) {
819
- const char* name = obs_property_name(el);
820
-
821
- if (!obs_data_has_default_value(settings, name))
822
- continue;
823
-
824
- obs_property_type type = obs_property_get_type(el);
825
- switch (type) {
826
- case OBS_PROPERTY_BOOL:
827
- obs_data_set_bool(settings, name, obs_data_get_default_bool(settings, name));
828
- break;
829
- case OBS_PROPERTY_INT:
830
- obs_data_set_int(settings, name, obs_data_get_default_int(settings, name));
831
- break;
832
- case OBS_PROPERTY_FLOAT:
833
- obs_data_set_double(settings, name, obs_data_get_default_double(settings, name));
834
- break;
835
- case OBS_PROPERTY_TEXT:
836
- case OBS_PROPERTY_PATH:
837
- case OBS_PROPERTY_FONT:
838
- obs_data_set_string(settings, name, obs_data_get_default_string(settings, name));
839
- break;
840
- case OBS_PROPERTY_LIST:
841
- case OBS_PROPERTY_EDITABLE_LIST:
842
- {
843
- obs_combo_format format = obs_property_list_format(el);
844
- switch (format) {
845
- case OBS_COMBO_FORMAT_INT:
846
- obs_data_set_int(settings, name, obs_data_get_default_int(settings, name));
847
+bool Plugin::Interface::H264Interface::preset_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
848
+ auto caps = VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC);
849
+ Presets preset = (Presets)obs_data_get_int(data, AMF_H264_PRESET);
850
+ switch (preset) {
851
+ case Default:
852
+ #pragma region Default
853
+ {
854
+ obs_property_t* pn = obs_properties_first(props);
855
+ while (pn) {
856
+ const char* name = obs_property_name(pn);
857
+ switch (obs_property_get_type(pn)) {
858
+ case obs_property_type::OBS_PROPERTY_BOOL:
859
+ obs_data_set_bool(data, name, obs_data_get_default_bool(data, name));
860
+ break;
861
+ case obs_property_type::OBS_PROPERTY_FLOAT:
862
+ obs_data_set_double(data, name, obs_data_get_default_double(data, name));
863
break;
864
- case OBS_COMBO_FORMAT_FLOAT:
865
- obs_data_set_double(settings, name, obs_data_get_default_double(settings, name));
866
+ case obs_property_type::OBS_PROPERTY_INT:
867
+ obs_data_set_int(data, name, obs_data_get_default_int(data, name));
868
break;
869
- case OBS_COMBO_FORMAT_STRING:
870
- obs_data_set_string(settings, name, obs_data_get_default_string(settings, name));
871
+ case obs_property_type::OBS_PROPERTY_TEXT:
872
+ obs_data_set_string(data, name, obs_data_get_default_string(data, name));
873
+ break;
874
+ case obs_property_type::OBS_PROPERTY_LIST:
875
+ switch (obs_property_list_format(pn)) {
876
+ case obs_combo_format::OBS_COMBO_FORMAT_INT:
877
+ obs_data_set_int(data, name, obs_data_get_default_int(data, name));
878
+ break;
879
+ case obs_combo_format::OBS_COMBO_FORMAT_FLOAT:
880
+ obs_data_set_double(data, name, obs_data_get_default_double(data, name));
881
+ break;
882
+ case obs_combo_format::OBS_COMBO_FORMAT_STRING:
883
+ obs_data_set_string(data, name, obs_data_get_default_string(data, name));
884
+ break;
885
+ }
886
break;
887
}
888
- break;
889
+ obs_property_next(&pn);
890
}
891
- case OBS_PROPERTY_COLOR:
892
- break;
893
- case OBS_PROPERTY_BUTTON:
894
- break;
895
- case OBS_PROPERTY_FRAME_RATE:
896
- break;
897
- default:
898
- break;
899
}
900
+ break;
901
+ #pragma endregion Default
902
+ case Recording:
903
+ #pragma region Recording
904
+ // Static Properties
905
+ //obs_data_set_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
906
+ obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
907
+ switch (caps->maxProfileLevel) {
908
+ case 52:
909
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_52);
910
+ break;
911
+ case 51:
912
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_51);
913
+ break;
914
+ case 50:
915
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_50);
916
+ break;
917
+ default:
918
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
919
+ break;
920
+ }
921
+ //obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, obs_data_get_default_int(data, AMF_H264_MAXIMUMLTRFRAMES));
922
+
923
+ // Rate Control Properties
924
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_VariableBitrate_LatencyConstrained);
925
+ obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 35000 * (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1000 : 1));
926
+ obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1 : 1000));
927
+ obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
928
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
929
+ /*obs_data_set_int(data, AMF_H264_QP_IFRAME, 0);
930
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, 0);
931
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, 0);*/
932
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
933
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
934
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, 0);
935
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 0);
936
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, 0);
937
+ //obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
938
+ obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
939
+ //obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
940
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
941
+
942
+ // Picture Control Properties
943
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, 1);
944
+ //obs_data_set_int(data, AMF_H264_IDR_PERIOD, 60);
945
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
946
+ //obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, obs_data_get_default_int(data, AMF_H264_BPICTURE_PATTERN));
947
+ //obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, obs_data_get_default_int(data, AMF_H264_BPICTURE_REFERENCE));
948
+ //obs_data_set_int(data, AMF_H264_SLICESPERFRAME, 0);
949
+ //obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
950
+
951
+ // Miscellaneous Properties
952
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
953
+ obs_data_set_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
954
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, 3);
955
+ obs_data_set_int(data, AMF_H264_CABAC, 0);
956
+
957
+ // System Properties
958
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
959
+
960
+ break;
961
+ #pragma endregion Recording
962
+ case HighQuality:
963
+ #pragma region High Quality
964
+ // Static Properties
965
+ //obs_data_set_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
966
+ obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
967
+ switch (caps->maxProfileLevel) {
968
+ case 52:
969
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_52);
970
+ break;
971
+ case 51:
972
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_51);
973
+ break;
974
+ case 50:
975
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_50);
976
+ break;
977
+ default:
978
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
979
+ break;
980
+ }
981
+ //obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, obs_data_get_default_int(data, AMF_H264_MAXIMUMLTRFRAMES));
982
+
983
+ // Rate Control Properties
984
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantQP);
985
+ //obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 35000 * (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1000 : 1));
986
+ //obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1 : 1000));
987
+ /*obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
988
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);*/
989
+ obs_data_set_int(data, AMF_H264_QP_IFRAME, 21);
990
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, 18);
991
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, 16);
992
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
993
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
994
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, 0);
995
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 0);
996
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, 0);
997
+ //obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
998
+ //obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
999
+ //obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
1000
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
1001
+
1002
+ // Picture Control Properties
1003
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, 1);
1004
+ //obs_data_set_int(data, AMF_H264_IDR_PERIOD, 60);
1005
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
1006
+ //obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, obs_data_get_default_int(data, AMF_H264_BPICTURE_PATTERN));
1007
+ //obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, obs_data_get_default_int(data, AMF_H264_BPICTURE_REFERENCE));
1008
+ //obs_data_set_int(data, AMF_H264_SLICESPERFRAME, 0);
1009
+ //obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
1010
+
1011
+ // Miscellaneous Properties
1012
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
1013
+ obs_data_set_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
1014
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, 3);
1015
+ obs_data_set_int(data, AMF_H264_CABAC, 0);
1016
+
1017
+ // System Properties
1018
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
1019
+
1020
+ break;
1021
+ #pragma endregion High Quality
1022
+ case Indistinguishable:
1023
+ #pragma region Indistinguishable
1024
+ // Static Properties
1025
+ //obs_data_set_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
1026
+ obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
1027
+ switch (caps->maxProfileLevel) {
1028
+ case 52:
1029
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_52);
1030
+ break;
1031
+ case 51:
1032
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_51);
1033
+ break;
1034
+ case 50:
1035
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_50);
1036
+ break;
1037
+ default:
1038
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
1039
+ break;
1040
+ }
1041
+ //obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, obs_data_get_default_int(data, AMF_H264_MAXIMUMLTRFRAMES));
1042
+
1043
+ // Rate Control Properties
1044
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantQP);
1045
+ //obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 35000 * (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1000 : 1));
1046
+ //obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1 : 1000));
1047
+ /*obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
1048
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);*/
1049
+ obs_data_set_int(data, AMF_H264_QP_IFRAME, 16);
1050
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, 13);
1051
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, 11);
1052
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, -4);
1053
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, -2);
1054
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, 0);
1055
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 0);
1056
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, 0);
1057
+ //obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
1058
+ //obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
1059
+ //obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
1060
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
1061
+
1062
+ // Picture Control Properties
1063
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, 1);
1064
+ //obs_data_set_int(data, AMF_H264_IDR_PERIOD, 60);
1065
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
1066
+ //obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, obs_data_get_default_int(data, AMF_H264_BPICTURE_PATTERN));
1067
+ //obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, obs_data_get_default_int(data, AMF_H264_BPICTURE_REFERENCE));
1068
+ //obs_data_set_int(data, AMF_H264_SLICESPERFRAME, 0);
1069
+ //obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
1070
+
1071
+ // Miscellaneous Properties
1072
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
1073
+ obs_data_set_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
1074
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, 3);
1075
+ obs_data_set_int(data, AMF_H264_CABAC, 0);
1076
+
1077
+ // System Properties
1078
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
1079
+
1080
+ break;
1081
+ #pragma endregion Indistinguishable
1082
+ case Lossless:
1083
+ #pragma region Lossless
1084
+ // Static Properties
1085
+ //obs_data_set_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
1086
+ obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_High);
1087
+ switch (caps->maxProfileLevel) {
1088
+ case 52:
1089
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_52);
1090
+ break;
1091
+ case 51:
1092
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_51);
1093
+ break;
1094
+ case 50:
1095
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_50);
1096
+ break;
1097
+ default:
1098
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
1099
+ break;
1100
+ }
1101
+ obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, 0);
1102
+
1103
+ // Rate Control Properties
1104
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantQP);
1105
+ //obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 35000 * (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1000 : 1));
1106
+ //obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1 : 1000));
1107
+ /*obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
1108
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);*/
1109
+ obs_data_set_int(data, AMF_H264_QP_IFRAME, 0);
1110
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, 0);
1111
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, 0);
1112
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, -10);
1113
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, -10);
1114
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, 0);
1115
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 0);
1116
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, 0);
1117
+ //obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
1118
+ //obs_data_set_int(data, AMF_H264_FILLERDATA, 0);
1119
+ //obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
1120
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
1121
+
1122
+ // Picture Control Properties
1123
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, 0);
1124
+ obs_data_set_int(data, AMF_H264_IDR_PERIOD, 1);
1125
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
1126
+ obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, 0);
1127
+ obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
1128
+ //obs_data_set_int(data, AMF_H264_SLICESPERFRAME, 0);
1129
+ //obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
1130
+
1131
+ // Miscellaneous Properties
1132
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
1133
+ obs_data_set_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
1134
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, 3);
1135
+ obs_data_set_int(data, AMF_H264_CABAC, 0);
1136
+
1137
+ // System Properties
1138
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
1139
+
1140
+ break;
1141
+ #pragma endregion Lossless
1142
+ case Twitch:
1143
+ #pragma region Twitch
1144
+ // Static Properties
1145
+ //obs_data_set_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
1146
+ obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_Main);
1147
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
1148
+ //obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, obs_data_get);
1149
+
1150
+ // Rate Control Properties
1151
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
1152
+ obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 3500);
1153
+ //obs_data_set_int(data, AMF_H264_BITRATE_PEAK, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / (obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1 : 1000));
1154
+ obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
1155
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
1156
+ /*obs_data_set_int(data, AMF_H264_QP_IFRAME, 0);
1157
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, 0);
1158
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, 0);*/
1159
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
1160
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
1161
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, 0);
1162
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 90);
1163
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, 100);
1164
+ //obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
1165
+ obs_data_set_int(data, AMF_H264_FILLERDATA, 1);
1166
+ //obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
1167
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
1168
+
1169
+ // Picture Control Properties
1170
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, 2);
1171
+ //obs_data_set_int(data, AMF_H264_IDR_PERIOD, 120);
1172
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
1173
+ //obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, 0);
1174
+ //obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
1175
+ //obs_data_set_int(data, AMF_H264_SLICESPERFRAME, 0);
1176
+ //obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
1177
+
1178
+ // Miscellaneous Properties
1179
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
1180
+ obs_data_set_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
1181
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, 3);
1182
+ obs_data_set_int(data, AMF_H264_CABAC, 0);
1183
+
1184
+ // System Properties
1185
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
1186
+
1187
+ break;
1188
+ #pragma endregion Twitch
1189
+ case YouTube:
1190
+ #pragma region YouTube
1191
+ // Static Properties
1192
+ //obs_data_set_int(data, AMF_H264_USAGE, VCEUsage_Transcoding);
1193
+ obs_data_set_int(data, AMF_H264_PROFILE, VCEProfile_Main);
1194
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, VCEProfileLevel_Automatic);
1195
+ //obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, obs_data_get);
1196
+
1197
+ // Rate Control Properties
1198
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, VCERateControlMethod_ConstantBitrate);
1199
+ obs_data_set_int(data, AMF_H264_BITRATE_TARGET, 6000);
1200
+ obs_data_set_int(data, AMF_H264_BITRATE_PEAK, 9000);
1201
+ obs_data_set_int(data, AMF_H264_QP_MINIMUM, 0);
1202
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, 51);
1203
+ /*obs_data_set_int(data, AMF_H264_QP_IFRAME, 0);
1204
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, 0);
1205
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, 0);*/
1206
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, 0);
1207
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, 0);
1208
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, 0);
1209
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, 75);
1210
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, 100);
1211
+ //obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, 0);
1212
+ obs_data_set_int(data, AMF_H264_FILLERDATA, 1);
1213
+ //obs_data_set_int(data, AMF_H264_FRAMESKIPPING, 0);
1214
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, 0);
1215
+
1216
+ // Picture Control Properties
1217
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, 2);
1218
+ //obs_data_set_int(data, AMF_H264_IDR_PERIOD, 120);
1219
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, 0);
1220
+ //obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, 0);
1221
+ //obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
1222
+ //obs_data_set_int(data, AMF_H264_SLICESPERFRAME, 0);
1223
+ //obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, 0);
1224
+
1225
+ // Miscellaneous Properties
1226
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, VCEQualityPreset_Quality);
1227
+ obs_data_set_int(data, AMF_H264_SCANTYPE, VCEScanType_Progressive);
1228
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, 3);
1229
+ obs_data_set_int(data, AMF_H264_CABAC, 0);
1230
+
1231
+ // System Properties
1232
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, 0);
1233
+
1234
+ break;
1235
+ #pragma endregion YouTube
1236
}
1237
- return true;
1238
+ return view_modified(props, nullptr, data);
1239
}
1240
1241
-bool Plugin::Interface::H264Interface::update_from_amf(obs_properties_t *, obs_property_t *, obs_data_t *settings) {
1242
- if (obs_data_get_bool(settings, AMF_H264ADVANCED_UPDATE) == false)
1243
- return false;
1244
- obs_data_set_bool(settings, AMF_H264ADVANCED_UPDATE, false);
1245
+bool Plugin::Interface::H264Interface::maximum_ltr_frames_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
1246
+ return view_modified(props, nullptr, data);
1247
+}
1248
1249
- try {
1250
- VCEEncoder* vce = new VCEEncoder(VCEEncoderType_AVC);
1251
+bool Plugin::Interface::H264Interface::rate_control_method_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
1252
+ return view_modified(props, nullptr, data);
1253
+}
1254
1255
- // Usage & Quality Preset
1256
- int64_t usage = obs_data_get_int(settings, AMF_H264_USAGE);
1257
- vce->SetUsage((VCEUsage)usage);
1258
- try {
1259
- int64_t preset = obs_data_get_int(settings, AMF_H264_QUALITY_PRESET);
1260
- if (preset == -1)
1261
- obs_data_set_int(settings, AMF_H264_QUALITY_PRESET, vce->GetQualityPreset());
1262
- else
1263
- vce->SetQualityPreset((VCEQualityPreset)preset);
1264
- } catch (...) {}
1265
+bool Plugin::Interface::H264Interface::bpictures_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
1266
+ view_modified(props, nullptr, data);
1267
+ return false;
1268
+}
1269
1270
- // Profile & Level
1271
- try {
1272
- if (obs_data_get_int(settings, AMF_H264_PROFILE) == -1)
1273
- obs_data_set_int(settings, AMF_H264_PROFILE, vce->GetProfile());
1274
- } catch (...) {}
1275
- try {
1276
- if (obs_data_get_int(settings, AMF_H264_PROFILELEVEL) == -1)
1277
- obs_data_set_int(settings, AMF_H264_PROFILELEVEL, vce->GetProfileLevel());
1278
- } catch (...) {}
1279
+bool Plugin::Interface::H264Interface::view_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
1280
+ uint32_t view = (uint32_t)obs_data_get_int(data, AMF_H264_VIEW);
1281
+ bool vis_basic = view >= ViewMode::Basic,
1282
+ vis_advanced = view >= ViewMode::Advanced,
1283
+ vis_expert = view >= ViewMode::Expert,
1284
+ vis_master = view >= ViewMode::Master,
1285
+ vis_rcm_bitrate_target = false,
1286
+ vis_rcm_bitrate_peak = false,
1287
+ vis_rcm_qp = false,
1288
+ vis_rcm_qp_b = false,
1289
+ vis_rcm_fillerdata = false;
1290
1291
- // Other
1292
- try {
1293
- if (obs_data_get_int(settings, AMF_H264ADVANCED_MAX_LTR_FRAMES) == -1)
1294
- obs_data_set_int(settings, AMF_H264ADVANCED_MAX_LTR_FRAMES, vce->GetMaximumLongTermReferenceFrames());
1295
- } catch (...) {}
1296
- try {
1297
- if (obs_data_get_int(settings, AMF_H264_SCANTYPE) == -1)
1298
- obs_data_set_int(settings, AMF_H264_SCANTYPE, vce->GetScanType());
1299
- } catch (...) {}
1300
+ // Static Properties
1301
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_USAGE), vis_master);
1302
+ if (!vis_master)
1303
+ obs_data_set_int(data, AMF_H264_USAGE, obs_data_get_default_int(data, AMF_H264_USAGE));
1304
+
1305
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_PROFILE), vis_advanced);
1306
+ if (!vis_basic)
1307
+ obs_data_set_int(data, AMF_H264_PROFILE, obs_data_get_default_int(data, AMF_H264_PROFILE));
1308
+
1309
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_PROFILELEVEL), vis_expert);
1310
+ if (!vis_expert)
1311
+ obs_data_set_int(data, AMF_H264_PROFILELEVEL, obs_data_get_default_int(data, AMF_H264_PROFILELEVEL));
1312
+
1313
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_MAXIMUMLTRFRAMES), vis_master);
1314
+ if (!vis_master)
1315
+ obs_data_set_int(data, AMF_H264_MAXIMUMLTRFRAMES, obs_data_get_default_int(data, AMF_H264_MAXIMUMLTRFRAMES));
1316
+ bool using_ltr_frames = obs_data_get_int(data, AMF_H264_MAXIMUMLTRFRAMES) > 0;
1317
+
1318
+ // Rate Control Properties
1319
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_RATECONTROLMETHOD), vis_basic);
1320
+ if (!vis_basic)
1321
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, obs_data_get_default_int(data, AMF_H264_RATECONTROLMETHOD));
1322
+ switch ((VCERateControlMethod)obs_data_get_int(data, AMF_H264_RATECONTROLMETHOD)) {
1323
+ case VCERateControlMethod_ConstantBitrate:
1324
+ vis_rcm_bitrate_target = true;
1325
+ vis_rcm_fillerdata = true;
1326
+ break;
1327
+ case VCERateControlMethod_VariableBitrate_PeakConstrained:
1328
+ vis_rcm_bitrate_target = true;
1329
+ vis_rcm_bitrate_peak = true;
1330
+ break;
1331
+ case VCERateControlMethod_VariableBitrate_LatencyConstrained:
1332
+ vis_rcm_bitrate_target = true;
1333
+ break;
1334
+ case VCERateControlMethod_ConstantQP:
1335
+ vis_rcm_qp = true;
1336
+ vis_rcm_qp_b = VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames
1337
+ && (using_ltr_frames == false);
1338
+ break;
1339
+ }
1340
1341
- //////////////////////////////////////////////////////////////////////////
1342
- // Dynamic Properties (Can be changed during Encoding)
1343
- //////////////////////////////////////////////////////////////////////////
1344
- // Rate Control
1345
- /// Method
1346
- try {
1347
- if (obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD) == -1)
1348
- obs_data_set_int(settings, AMF_H264_RATECONTROLMETHOD, vce->GetRateControlMethod());
1349
- } catch (...) {}
1350
- /// Skip Frames if necessary
1351
- try {
1352
- if (obs_data_get_int(settings, AMF_H264_FRAMESKIPPING) == -1)
1353
- obs_data_set_int(settings, AMF_H264_FRAMESKIPPING, vce->IsRateControlSkipFrameEnabled() ? 1 : 0);
1354
- } catch (...) {}
1355
- // Rate Control - Other
1356
- /// Filler Data
1357
- try {
1358
- if (obs_data_get_int(settings, AMF_H264_FILLERDATA) == -1)
1359
- obs_data_set_int(settings, AMF_H264_FILLERDATA, vce->IsFillerDataEnabled() ? 1 : 0);
1360
- } catch (...) {}
1361
- /// Enforce Hyptohecial Reference Decoder Compatability
1362
- try {
1363
- if (obs_data_get_int(settings, AMF_H264_ENFORCEHRDCOMPATIBILITY) == -1)
1364
- obs_data_set_int(settings, AMF_H264_ENFORCEHRDCOMPATIBILITY, vce->IsEnforceHRDRestrictionsEnabled() ? 1 : 0);
1365
- } catch (...) {}
1366
- // Video Coding Settings
1367
- /// VBV Buffer
1368
- try {
1369
- if (obs_data_get_int(settings, AMF_H264ADVANCED_VBVBUFFER_SIZE) == -1) {
1370
- obs_data_set_int(settings, AMF_H264ADVANCED_VBVBUFFER_SIZE, vce->GetVBVBufferSize());
1371
- obs_data_set_double(settings, AMF_H264ADVANCED_VBVBUFFER_FULLNESS, vce->GetInitialVBVBufferFullness());
1372
- }
1373
- } catch (...) {}
1374
- /// Max AU Size
1375
- try {
1376
- if (obs_data_get_int(settings, AMF_H264ADVANCED_MAX_AU_SIZE) == -1)
1377
- obs_data_set_int(settings, AMF_H264ADVANCED_MAX_AU_SIZE, vce->GetMaximumAccessUnitSize());
1378
- } catch (...) {}
1379
- /// B-Picture Related
1380
- try {
1381
- if (obs_data_get_int(settings, AMF_H264_QP_BPICTURE_DELTA) == -11)
1382
- obs_data_set_int(settings, AMF_H264_QP_BPICTURE_DELTA, vce->GetBPictureDeltaQP());
1383
- } catch (...) {}
1384
- try {
1385
- if (obs_data_get_int(settings, AMF_H264_QP_REFERENCE_BPICTURE_DELTA) == -11)
1386
- obs_data_set_int(settings, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, vce->GetReferenceBPictureDeltaQP());
1387
- } catch (...) {}
1388
- // Rate Control: Constrained QP
1389
- try {
1390
- if (obs_data_get_int(settings, AMF_H264_QP_MINIMUM) == -1)
1391
- obs_data_set_int(settings, AMF_H264_QP_MINIMUM, vce->GetMinimumQP());
1392
- } catch (...) {}
1393
- try {
1394
- if (obs_data_get_int(settings, AMF_H264_QP_MAXIMUM) == -1)
1395
- obs_data_set_int(settings, AMF_H264_QP_MAXIMUM, vce->GetMaximumQP());
1396
- } catch (...) {}
1397
- try {
1398
- if (obs_data_get_int(settings, AMF_H264_QP_IFRAME) == -1)
1399
- obs_data_set_int(settings, AMF_H264_QP_IFRAME, vce->GetIFrameQP());
1400
- } catch (...) {}
1401
- try {
1402
- if (obs_data_get_int(settings, AMF_H264_QP_PFRAME) == -1)
1403
- obs_data_set_int(settings, AMF_H264_QP_PFRAME, vce->GetPFrameQP());
1404
- } catch (...) {}
1405
- try {
1406
- if (obs_data_get_int(settings, AMF_H264_QP_BFRAME) == -1)
1407
- obs_data_set_int(settings, AMF_H264_QP_BFRAME, vce->GetBFrameQP());
1408
- } catch (...) {}
1409
- // Rate Control: CBR, VBR
1410
- try {
1411
- if (obs_data_get_int(settings, AMF_H264_BITRATE_TARGET) == -1)
1412
- obs_data_set_int(settings, AMF_H264_BITRATE_TARGET, vce->GetTargetBitrate());
1413
- } catch (...) {}
1414
- try {
1415
- if (obs_data_get_int(settings, AMF_H264_BITRATE_PEAK) == -1)
1416
- obs_data_set_int(settings, AMF_H264_BITRATE_PEAK, vce->GetPeakBitrate());
1417
- } catch (...) {}
1418
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_BITRATE_TARGET), (vis_basic && vis_rcm_bitrate_target));
1419
+ if (!((vis_basic && vis_rcm_bitrate_target)))
1420
+ obs_data_set_int(data, AMF_H264_BITRATE_TARGET, obs_data_get_default_int(data, AMF_H264_BITRATE_TARGET));
1421
1422
- // Picture Control Properties
1423
- try {
1424
- if (obs_data_get_int(settings, AMF_H264ADVANCED_HEADER_INSERTION_SPACING) == -1)
1425
- obs_data_set_int(settings, AMF_H264ADVANCED_HEADER_INSERTION_SPACING, vce->GetHeaderInsertionSpacing());
1426
- } catch (...) {}
1427
- try {
1428
- if (obs_data_get_int(settings, AMF_H264_BPICTURE_PATTERN) == -1)
1429
- obs_data_set_int(settings, AMF_H264_BPICTURE_PATTERN, vce->GetBPicturePattern());
1430
- } catch (...) {}
1431
- try {
1432
- if (obs_data_get_int(settings, AMF_H264_DEBLOCKINGFILTER) == -1)
1433
- obs_data_set_int(settings, AMF_H264_DEBLOCKINGFILTER, vce->IsDeBlockingFilterEnabled() ? 1 : 0);
1434
- } catch (...) {}
1435
- try {
1436
- if (obs_data_get_int(settings, AMF_H264_BPICTURE_REFERENCE) == -1)
1437
- obs_data_set_int(settings, AMF_H264_BPICTURE_REFERENCE, vce->IsBPictureReferenceEnabled() ? 1 : 0);
1438
- } catch (...) {}
1439
- try {
1440
- if (obs_data_get_int(settings, AMF_H264ADVANCED_IDR_PERIOD) == -1)
1441
- obs_data_set_int(settings, AMF_H264ADVANCED_IDR_PERIOD, vce->GetIDRPeriod());
1442
- } catch (...) {}
1443
- try {
1444
- if (obs_data_get_int(settings, AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT) == -1)
1445
- obs_data_set_int(settings, AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT, vce->GetIntraRefreshMBsNumberPerSlot());
1446
- } catch (...) {}
1447
- try {
1448
- if (obs_data_get_int(settings, AMF_H264ADVANCED_SLICESPERFRAME) == -1)
1449
- obs_data_set_int(settings, AMF_H264ADVANCED_SLICESPERFRAME, vce->GetSlicesPerFrame());
1450
- } catch (...) {}
1451
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_BITRATE_PEAK), (vis_basic && vis_rcm_bitrate_peak));
1452
+ if (!((vis_basic && vis_rcm_bitrate_peak)))
1453
+ obs_data_set_int(data, AMF_H264_BITRATE_PEAK, obs_data_get_default_int(data, AMF_H264_BITRATE_PEAK));
1454
1455
- // Motion Estimation
1456
- try {
1457
- if (obs_data_get_int(settings, AMF_H264ADVANCED_MOTIONESTIMATION) == -1)
1458
- obs_data_set_int(settings, AMF_H264ADVANCED_MOTIONESTIMATION, (vce->IsHalfPixelMotionEstimationEnabled() ? 1 : 0) + (vce->IsQuarterPixelMotionEstimationEnabled() ? 2 : 0));
1459
- } catch (...) {}
1460
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_MINIMUM), vis_advanced && !vis_rcm_qp);
1461
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_MAXIMUM), vis_advanced && !vis_rcm_qp);
1462
+ if (!(vis_advanced && !vis_rcm_qp)) {
1463
+ obs_data_set_int(data, AMF_H264_QP_MINIMUM, obs_data_get_default_int(data, AMF_H264_QP_MINIMUM));
1464
+ obs_data_set_int(data, AMF_H264_QP_MAXIMUM, obs_data_get_default_int(data, AMF_H264_QP_MAXIMUM));
1465
+ }
1466
1467
- // Remove Instance again.
1468
- delete vce;
1469
- } catch (...) {
1470
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_IFRAME), (vis_basic && vis_rcm_qp));
1471
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_PFRAME), (vis_basic && vis_rcm_qp));
1472
+ if (!(vis_basic && vis_rcm_qp)) {
1473
+ obs_data_set_int(data, AMF_H264_QP_IFRAME, obs_data_get_default_int(data, AMF_H264_QP_IFRAME));
1474
+ obs_data_set_int(data, AMF_H264_QP_PFRAME, obs_data_get_default_int(data, AMF_H264_QP_PFRAME));
1475
}
1476
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_BFRAME), (vis_basic && vis_rcm_qp_b));
1477
+ if (!(vis_basic && vis_rcm_qp_b))
1478
+ obs_data_set_int(data, AMF_H264_QP_BFRAME, obs_data_get_default_int(data, AMF_H264_QP_BFRAME));
1479
+
1480
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_BPICTURE_DELTA), (vis_advanced && vis_rcm_qp_b));
1481
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QP_REFERENCE_BPICTURE_DELTA), (vis_advanced && vis_rcm_qp_b));
1482
+ if (!(vis_advanced && vis_rcm_qp_b)) {
1483
+ obs_data_set_int(data, AMF_H264_QP_BPICTURE_DELTA, obs_data_get_default_int(data, AMF_H264_QP_BPICTURE_DELTA));
1484
+ obs_data_set_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA, obs_data_get_default_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA));
1485
+ }
1486
+
1487
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_VBVBUFFER), vis_advanced);
1488
+ if (!vis_advanced)
1489
+ obs_data_set_int(data, AMF_H264_VBVBUFFER, obs_data_get_default_int(data, AMF_H264_VBVBUFFER));
1490
+ uint32_t vbvBuffer = (uint32_t)obs_data_get_int(data, AMF_H264_VBVBUFFER);
1491
+
1492
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_VBVBUFFER_STRICTNESS), (vis_advanced && (vbvBuffer == 0)));
1493
+ if (!(vis_advanced && (vbvBuffer == 0)))
1494
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_STRICTNESS, obs_data_get_default_double(data, AMF_H264_VBVBUFFER_STRICTNESS));
1495
+
1496
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_VBVBUFFER_SIZE), vis_advanced && (vbvBuffer == 1));
1497
+ if (!(vis_advanced && (vbvBuffer == 1)))
1498
+ obs_data_set_int(data, AMF_H264_VBVBUFFER_SIZE, obs_data_get_default_int(data, AMF_H264_VBVBUFFER_SIZE));
1499
+
1500
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_VBVBUFFER_FULLNESS), vis_expert);
1501
+ if (!vis_expert)
1502
+ obs_data_set_double(data, AMF_H264_VBVBUFFER_FULLNESS, obs_data_get_default_double(data, AMF_H264_VBVBUFFER_FULLNESS));
1503
+
1504
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_FILLERDATA), vis_rcm_fillerdata);
1505
+ if (!vis_rcm_fillerdata)
1506
+ obs_data_set_int(data, AMF_H264_FILLERDATA, obs_data_get_default_int(data, AMF_H264_FILLERDATA));
1507
+
1508
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_FRAMESKIPPING), vis_advanced);
1509
+ if (!vis_advanced)
1510
+ obs_data_set_int(data, AMF_H264_FRAMESKIPPING, obs_data_get_default_int(data, AMF_H264_FRAMESKIPPING));
1511
+
1512
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_ENFORCEHRDCOMPATIBILITY), vis_expert);
1513
+ if (!vis_expert)
1514
+ obs_data_set_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY, obs_data_get_default_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY));
1515
+
1516
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_MAXIMUMACCESSUNITSIZE), vis_master);
1517
+ if (!vis_master)
1518
+ obs_data_set_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE, obs_data_get_default_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE));
1519
+
1520
+ // Picture Control Properties
1521
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_KEYFRAME_INTERVAL), !vis_master);
1522
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_IDR_PERIOD), vis_master);
1523
+ if (vis_master)
1524
+ obs_data_set_int(data, AMF_H264_KEYFRAME_INTERVAL, obs_data_get_default_int(data, AMF_H264_KEYFRAME_INTERVAL));
1525
+ else
1526
+ obs_data_set_int(data, AMF_H264_IDR_PERIOD, obs_data_get_default_int(data, AMF_H264_IDR_PERIOD));
1527
+
1528
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_HEADER_INSERTION_SPACING), vis_master);
1529
+ if (!vis_master)
1530
+ obs_data_set_int(data, AMF_H264_HEADER_INSERTION_SPACING, obs_data_get_default_int(data, AMF_H264_HEADER_INSERTION_SPACING));
1531
+
1532
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_DEBLOCKINGFILTER), vis_advanced);
1533
+ if (!vis_advanced)
1534
+ obs_data_set_int(data, AMF_H264_DEBLOCKINGFILTER, obs_data_get_default_int(data, AMF_H264_DEBLOCKINGFILTER));
1535
+
1536
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_INTRAREFRESHNUMMBSPERSLOT), vis_master);
1537
+ if (!vis_master)
1538
+ obs_data_set_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT, obs_data_get_default_int(data, AMF_H264_INTRAREFRESHNUMMBSPERSLOT));
1539
+
1540
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_SLICESPERFRAME), vis_master);
1541
+ if (!vis_master)
1542
+ obs_data_set_int(data, AMF_H264_SLICESPERFRAME, obs_data_get_default_int(data, AMF_H264_SLICESPERFRAME));
1543
+
1544
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_BPICTURE_PATTERN), vis_advanced && !using_ltr_frames);
1545
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_BPICTURE_REFERENCE), vis_advanced && !using_ltr_frames);
1546
+ if (!vis_advanced) {
1547
+ obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, obs_data_get_default_int(data, AMF_H264_BPICTURE_PATTERN));
1548
+ obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, obs_data_get_default_int(data, AMF_H264_BPICTURE_REFERENCE));
1549
+ }
1550
+ if (using_ltr_frames) {
1551
+ obs_data_set_int(data, AMF_H264_BPICTURE_PATTERN, VCEBPicturePattern_None);
1552
+ obs_data_set_int(data, AMF_H264_BPICTURE_REFERENCE, 0);
1553
+ }
1554
+
1555
+ // Miscellaneous Properties
1556
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_SCANTYPE), vis_master);
1557
+ if (!vis_master)
1558
+ obs_data_set_int(data, AMF_H264_SCANTYPE, obs_data_get_default_int(data, AMF_H264_SCANTYPE));
1559
+
1560
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_QUALITY_PRESET), vis_basic);
1561
+ if (!vis_basic)
1562
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, obs_data_get_default_int(data, AMF_H264_QUALITY_PRESET));
1563
+
1564
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_MOTIONESTIMATION), vis_expert);
1565
+ if (!vis_expert)
1566
+ obs_data_set_int(data, AMF_H264_MOTIONESTIMATION, obs_data_get_default_int(data, AMF_H264_MOTIONESTIMATION));
1567
+
1568
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_CABAC), vis_expert);
1569
+ if (!vis_expert)
1570
+ obs_data_set_int(data, AMF_H264_CABAC, obs_data_get_default_int(data, AMF_H264_CABAC));
1571
+
1572
+ // System Properties
1573
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_MEMORYTYPE), vis_expert);
1574
+ if (!vis_expert)
1575
+ obs_data_set_int(data, AMF_H264_MEMORYTYPE, obs_data_get_default_int(data, AMF_H264_MEMORYTYPE));
1576
+
1577
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_DEVICE), vis_expert && (obs_data_get_int(data, AMF_H264_MEMORYTYPE) != 0));
1578
+ if (vis_expert && (obs_data_get_int(data, AMF_H264_MEMORYTYPE) != 0)) {
1579
+ fill_device_list(obs_properties_get(props, AMF_H264_DEVICE), data);
1580
+ } else {
1581
+ obs_data_set_string(data, AMF_H264_DEVICE, "");
1582
+ }
1583
+
1584
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_USE_OPENCL), vis_expert);
1585
+ if (!vis_expert)
1586
+ obs_data_set_int(data, AMF_H264_USE_OPENCL, obs_data_get_default_int(data, AMF_H264_USE_OPENCL));
1587
+
1588
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_SURFACEFORMAT), vis_master);
1589
+ if (!vis_master)
1590
+ obs_data_set_int(data, AMF_H264_SURFACEFORMAT, obs_data_get_default_int(data, AMF_H264_SURFACEFORMAT));
1591
+
1592
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_VIEW), vis_basic);
1593
+ if (!vis_basic)
1594
+ obs_data_set_int(data, AMF_H264_VIEW, obs_data_get_default_int(data, AMF_H264_VIEW));
1595
+
1596
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_UNLOCK_PROPERTIES), vis_master);
1597
+ if (!vis_master)
1598
+ obs_data_set_int(data, AMF_H264_UNLOCK_PROPERTIES, obs_data_get_default_int(data, AMF_H264_UNLOCK_PROPERTIES));
1599
+ unlock_properties_modified(props, nullptr, data);
1600
+
1601
+ obs_property_set_visible(obs_properties_get(props, AMF_H264_DEBUG), vis_basic);
1602
+ if (!vis_basic)
1603
+ obs_data_set_int(data, AMF_H264_DEBUG, obs_data_get_default_int(data, AMF_H264_DEBUG));
1604
+
1605
+ return true;
1606
+}
1607
+
1608
+bool Plugin::Interface::H264Interface::unlock_properties_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) {
1609
+ bool unlocked = obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES);
1610
+ bool last_unlocked = obs_data_get_bool(data, "last_" vstr(AMF_H264_UNLOCK_PROPERTIES));
1611
+
1612
+ if (last_unlocked != unlocked) {
1613
+ uint32_t multiplier = (unlocked == true ? 1000 : 1),
1614
+ divisor = (unlocked == false ? 1000 : 1);
1615
+ obs_data_set_int(data, AMF_H264_BITRATE_TARGET, (obs_data_get_int(data, AMF_H264_BITRATE_TARGET) * multiplier) / divisor);
1616
+ obs_data_set_int(data, AMF_H264_BITRATE_PEAK, (obs_data_get_int(data, AMF_H264_BITRATE_PEAK) * multiplier) / divisor);
1617
+ obs_data_set_int(data, AMF_H264_VBVBUFFER_SIZE, (obs_data_get_int(data, AMF_H264_VBVBUFFER_SIZE) * multiplier) / divisor);
1618
+
1619
+ obs_data_set_bool(data, "last_" vstr(AMF_H264_UNLOCK_PROPERTIES), unlocked);
1620
+ }
1621
+
1622
+ if (unlocked) {
1623
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_BITRATE_TARGET), 1000, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
1624
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_BITRATE_PEAK), 1000, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate, 1);
1625
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_VBVBUFFER_SIZE), 1000, 100000000, 1);
1626
+ obs_property_float_set_limits(obs_properties_get(props, AMF_H264_KEYFRAME_INTERVAL), 0, 100, 1);
1627
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_IDR_PERIOD), 0, 1000, 1);
1628
+ } else {
1629
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_BITRATE_TARGET), 1, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000, 1);
1630
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_BITRATE_PEAK), 1, VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->maxBitrate / 1000, 1);
1631
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_VBVBUFFER_SIZE), 1, 100000, 1);
1632
+ obs_property_float_set_limits(obs_properties_get(props, AMF_H264_KEYFRAME_INTERVAL), 1, 100, 1);
1633
+ obs_property_int_set_limits(obs_properties_get(props, AMF_H264_IDR_PERIOD), 1, 1000, 1);
1634
+ }
1635
+
1636
return true;
1637
}
1638
1639
1640
//////////////////////////////////////////////////////////////////////////
1641
// Module Code
1642
//////////////////////////////////////////////////////////////////////////
1643
-Plugin::Interface::H264Interface::H264Interface(obs_data_t* settings, obs_encoder_t* encoder) {
1644
- int64_t value;
1645
-
1646
- AMF_LOG_INFO("<AMFEncoder::H264Interface::H264Interface> Initializing...");
1647
+Plugin::Interface::H264Interface::H264Interface(obs_data_t* data, obs_encoder_t* encoder) {
1648
+ AMF_LOG_DEBUG("<AMFEncoder::H264Interface::H264Interface> Initializing...");
1649
1650
// OBS Settings
1651
uint32_t m_cfgWidth = obs_encoder_get_width(encoder);
1652
1653
uint32_t m_cfgFPSnum = voi->fps_num;
1654
uint32_t m_cfgFPSden = voi->fps_den;
1655
1656
- // AMF Setup
1657
- Plugin::AMD::AMF::GetInstance()->EnableDebugTrace(obs_data_get_bool(settings, AMF_H264_DEBUGTRACING));
1658
-
1659
//////////////////////////////////////////////////////////////////////////
1660
- // Static Properties (Can't be changed during Encoding)
1661
- //////////////////////////////////////////////////////////////////////////
1662
- // Encoder
1663
- VCESurfaceFormat surfFormat = (VCESurfaceFormat)obs_data_get_int(settings, AMF_H264_SURFACEFORMAT);
1664
+ /// Initialize Encoder
1665
+ bool debug = obs_data_get_bool(data, AMF_H264_DEBUG);
1666
+ Plugin::AMD::AMF::GetInstance()->EnableDebugTrace(debug);
1667
+ VCESurfaceFormat surfFormat = (VCESurfaceFormat)obs_data_get_int(data, AMF_H264_SURFACEFORMAT);
1668
if (surfFormat == -1) {
1669
switch (voi->format) {
1670
case VIDEO_FORMAT_NV12:
1671
1672
break;
1673
}
1674
}
1675
- m_VideoEncoder = new VCEEncoder(VCEEncoderType_AVC, surfFormat, (VCEMemoryType)obs_data_get_int(settings, AMF_H264_MEMORYTYPE), (VCEComputeType)obs_data_get_int(settings, AMF_H264_COMPUTETYPE));
1676
-
1677
- /// Usage & Quality Preset
1678
- m_VideoEncoder->SetUsage((VCEUsage)obs_data_get_int(settings, AMF_H264_USAGE));
1679
- value = obs_data_get_int(settings, AMF_H264_QUALITY_PRESET);
1680
- if (value != -1)
1681
- m_VideoEncoder->SetQualityPreset((VCEQualityPreset)value);
1682
-
1683
- // Profile & Level
1684
- /// Profile
1685
- value = obs_data_get_int(settings, AMF_H264_PROFILE);
1686
- if (value != -1)
1687
- m_VideoEncoder->SetProfile((VCEProfile)value);
1688
- /// Profile Level
1689
- value = obs_data_get_int(settings, AMF_H264_PROFILELEVEL);
1690
- if (value != -1)
1691
- m_VideoEncoder->SetProfileLevel((VCEProfileLevel)value);
1692
-
1693
- // Other
1694
- /// Maximum Long-Term-Reference Frames
1695
- value = obs_data_get_int(settings, AMF_H264ADVANCED_MAX_LTR_FRAMES);
1696
- if (value != -1)
1697
- m_VideoEncoder->SetMaximumLongTermReferenceFrames((uint32_t)value);
1698
- /// Scan Type
1699
- value = obs_data_get_int(settings, AMF_H264_SCANTYPE);
1700
- if (value != -1)
1701
- m_VideoEncoder->SetScanType((VCEScanType)value);
1702
-
1703
- // Framesize & Framerate
1704
+ m_VideoEncoder = new VCEEncoder(VCEEncoderType_AVC, surfFormat,
1705
+ (VCEMemoryType)obs_data_get_int(data, AMF_H264_MEMORYTYPE),
1706
+ !!obs_data_get_int(data, AMF_H264_USE_OPENCL),
1707
+ std::string(obs_data_get_string(data, AMF_H264_DEVICE)));
1708
+
1709
+ /// Static Properties
1710
+ m_VideoEncoder->SetUsage((VCEUsage)obs_data_get_int(data, AMF_H264_USAGE));
1711
+ m_VideoEncoder->SetProfile((VCEProfile)obs_data_get_int(data, AMF_H264_PROFILE));
1712
+ m_VideoEncoder->SetProfileLevel((VCEProfileLevel)obs_data_get_int(data, AMF_H264_PROFILELEVEL));
1713
+ m_VideoEncoder->SetMaximumLongTermReferenceFrames((uint32_t)obs_data_get_int(data, AMF_H264_MAXIMUMLTRFRAMES));
1714
+
1715
+ /// Framesize & Framerate
1716
m_VideoEncoder->SetFrameSize(m_cfgWidth, m_cfgHeight);
1717
m_VideoEncoder->SetFrameRate(m_cfgFPSnum, m_cfgFPSden);
1718
1719
- //////////////////////////////////////////////////////////////////////////
1720
- // Dynamic Properties (Can be changed during Encoding)
1721
- //////////////////////////////////////////////////////////////////////////
1722
- update_properties(settings);
1723
-
1724
- // Framesize & Framerate
1725
- m_VideoEncoder->SetFrameSize(m_cfgWidth, m_cfgHeight);
1726
- m_VideoEncoder->SetFrameRate(m_cfgFPSnum, m_cfgFPSden);
1727
+ /// Miscellaneous Properties
1728
+ m_VideoEncoder->SetScanType((VCEScanType)obs_data_get_int(data, AMF_H264_SCANTYPE));
1729
+ m_VideoEncoder->SetQualityPreset((VCEQualityPreset)obs_data_get_int(data, AMF_H264_QUALITY_PRESET));
1730
+ m_VideoEncoder->SetCABACEnabled(!!obs_data_get_int(data, AMF_H264_CABAC));
1731
1732
- //////////////////////////////////////////////////////////////////////////
1733
// OBS - Enforce Streaming Service Restrictions
1734
- //////////////////////////////////////////////////////////////////////////
1735
+ #pragma region OBS - Enforce Streaming Service Restrictions
1736
{
1737
// Profile
1738
- const char* p_str = obs_data_get_string(settings, "profile");
1739
+ const char* p_str = obs_data_get_string(data, "profile");
1740
if (strcmp(p_str, "") != 0) {
1741
if (strcmp(p_str, "baseline")) {
1742
m_VideoEncoder->SetProfile(VCEProfile_Baseline);
1743
1744
} else {
1745
switch (m_VideoEncoder->GetProfile()) {
1746
case VCEProfile_Baseline:
1747
- obs_data_set_string(settings, "profile", "baseline");
1748
+ obs_data_set_string(data, "profile", "baseline");
1749
break;
1750
case VCEProfile_Main:
1751
- obs_data_set_string(settings, "profile", "main");
1752
+ obs_data_set_string(data, "profile", "main");
1753
break;
1754
case VCEProfile_High:
1755
- obs_data_set_string(settings, "profile", "high");
1756
+ obs_data_set_string(data, "profile", "high");
1757
+ break;
1758
+ }
1759
+ }
1760
+
1761
+ // Preset
1762
+ const char* preset = obs_data_get_string(data, "preset");
1763
+ if (strcmp(preset, "") != 0) {
1764
+ if (strcmp(preset, "speed") == 0) {
1765
+ m_VideoEncoder->SetQualityPreset(VCEQualityPreset_Speed);
1766
+ } else if (strcmp(preset, "balanced") == 0) {
1767
+ m_VideoEncoder->SetQualityPreset(VCEQualityPreset_Balanced);
1768
+ } else if (strcmp(preset, "quality") == 0) {
1769
+ m_VideoEncoder->SetQualityPreset(VCEQualityPreset_Quality);
1770
+ }
1771
+ obs_data_set_int(data, AMF_H264_QUALITY_PRESET, m_VideoEncoder->GetQualityPreset());
1772
+ } else {
1773
+ switch (m_VideoEncoder->GetQualityPreset()) {
1774
+ case VCEQualityPreset_Speed:
1775
+ obs_data_set_string(data, "preset", "speed");
1776
+ break;
1777
+ case VCEQualityPreset_Balanced:
1778
+ obs_data_set_string(data, "preset", "balanced");
1779
+ break;
1780
+ case VCEQualityPreset_Quality:
1781
+ obs_data_set_string(data, "preset", "quality");
1782
break;
1783
}
1784
}
1785
+ }
1786
+ #pragma endregion OBS - Enforce Streaming Service Restrictions
1787
+
1788
+ // Initialize (locks static properties)
1789
+ try {
1790
+ m_VideoEncoder->Start();
1791
+ } catch (...) {
1792
+ throw;
1793
+ }
1794
+
1795
+ // Dynamic Properties (Can be changed during Encoding)
1796
+ this->update(data);
1797
+
1798
+ AMF_LOG_DEBUG("<AMFEncoder::H264Interface::H264Interface> Complete.");
1799
+}
1800
+
1801
+Plugin::Interface::H264Interface::~H264Interface() {
1802
+ AMF_LOG_DEBUG("<AMFEncoder::H264Interface::~H264Interface> Finalizing...");
1803
+ m_VideoEncoder->Stop();
1804
+ delete m_VideoEncoder;
1805
+ AMF_LOG_DEBUG("<AMFEncoder::H264Interface::~H264Interface> Complete.");
1806
+}
1807
+
1808
+bool Plugin::Interface::H264Interface::update(obs_data_t* data) {
1809
+ double_t framerate = (double_t)m_VideoEncoder->GetFrameRate().first / (double_t)m_VideoEncoder->GetFrameRate().second;
1810
+ int32_t bitrateMultiplier = obs_data_get_bool(data, AMF_H264_UNLOCK_PROPERTIES) ? 1 : 1000;
1811
+
1812
+ // Rate Control Properties
1813
+ switch ((VCERateControlMethod)obs_data_get_int(data, AMF_H264_RATECONTROLMETHOD)) {
1814
+ case VCERateControlMethod_ConstantBitrate:
1815
+ m_VideoEncoder->SetTargetBitrate((uint32_t)obs_data_get_int(data, AMF_H264_BITRATE_TARGET) * bitrateMultiplier);
1816
+ m_VideoEncoder->SetPeakBitrate(m_VideoEncoder->GetTargetBitrate());
1817
+ m_VideoEncoder->SetFillerDataEnabled(obs_data_get_int(data, AMF_H264_FILLERDATA) == 1);
1818
+ break;
1819
+ case VCERateControlMethod_VariableBitrate_PeakConstrained:
1820
+ m_VideoEncoder->SetTargetBitrate((uint32_t)obs_data_get_int(data, AMF_H264_BITRATE_TARGET) * bitrateMultiplier);
1821
+ m_VideoEncoder->SetPeakBitrate((uint32_t)obs_data_get_int(data, AMF_H264_BITRATE_PEAK) * bitrateMultiplier);
1822
+ m_VideoEncoder->SetFillerDataEnabled(false);
1823
+ break;
1824
+ case VCERateControlMethod_VariableBitrate_LatencyConstrained:
1825
+ m_VideoEncoder->SetTargetBitrate((uint32_t)obs_data_get_int(data, AMF_H264_BITRATE_TARGET) * bitrateMultiplier);
1826
+ m_VideoEncoder->SetPeakBitrate((uint32_t)obs_data_get_int(data, AMF_H264_BITRATE_PEAK) * bitrateMultiplier);
1827
+ m_VideoEncoder->SetFillerDataEnabled(false);
1828
+ break;
1829
+ case VCERateControlMethod_ConstantQP:
1830
+ m_VideoEncoder->SetIFrameQP((uint8_t)obs_data_get_int(data, AMF_H264_QP_IFRAME));
1831
+ m_VideoEncoder->SetPFrameQP((uint8_t)obs_data_get_int(data, AMF_H264_QP_PFRAME));
1832
+ try {
1833
+ m_VideoEncoder->SetBFrameQP((uint8_t)obs_data_get_int(data, AMF_H264_QP_BFRAME));
1834
+ } catch (...) {}
1835
+ m_VideoEncoder->SetTargetBitrate(0);
1836
+ m_VideoEncoder->SetPeakBitrate(0);
1837
+ m_VideoEncoder->SetFillerDataEnabled(false);
1838
+ break;
1839
+ }
1840
+ m_VideoEncoder->SetRateControlMethod((VCERateControlMethod)obs_data_get_int(data, AMF_H264_RATECONTROLMETHOD));
1841
+ m_VideoEncoder->SetMinimumQP((uint8_t)obs_data_get_int(data, AMF_H264_QP_MINIMUM));
1842
+ m_VideoEncoder->SetMaximumQP((uint8_t)obs_data_get_int(data, AMF_H264_QP_MAXIMUM));
1843
+ if (obs_data_get_int(data, AMF_H264_VBVBUFFER) == 0) {
1844
+ m_VideoEncoder->SetVBVBufferAutomatic(obs_data_get_double(data, AMF_H264_VBVBUFFER_STRICTNESS) / 100.0);
1845
+ } else {
1846
+ m_VideoEncoder->SetVBVBufferSize((uint32_t)obs_data_get_int(data, AMF_H264_VBVBUFFER_SIZE) * bitrateMultiplier);
1847
+ }
1848
+ m_VideoEncoder->SetInitialVBVBufferFullness(obs_data_get_double(data, AMF_H264_VBVBUFFER_FULLNESS) / 100.0);
1849
+ m_VideoEncoder->SetFrameSkippingEnabled(obs_data_get_int(data, AMF_H264_FRAMESKIPPING) == 1);
1850
+ m_VideoEncoder->SetEnforceHRDRestrictionsEnabled(obs_data_get_int(data, AMF_H264_ENFORCEHRDCOMPATIBILITY) == 1);
1851
+ if (obs_data_get_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE) != 0)
1852
+ m_VideoEncoder->SetMaximumAccessUnitSize((uint32_t)obs_data_get_int(data, AMF_H264_MAXIMUMACCESSUNITSIZE));
1853
1854
+ // Picture Control Properties
1855
+ if (obs_data_get_int(data, AMF_H264_VIEW) == ViewMode::Master)
1856
+ m_VideoEncoder->SetIDRPeriod((uint32_t)obs_data_get_int(data, AMF_H264_IDR_PERIOD));
1857
+ else
1858
+ m_VideoEncoder->SetIDRPeriod(max((uint32_t)(obs_data_get_double(data, AMF_H264_KEYFRAME_INTERVAL) * framerate), 1));
1859
+ if (obs_data_get_int(data, AMF_H264_HEADER_INSERTION_SPACING) != 0)
1860
+ m_VideoEncoder->SetHeaderInsertionSpacing((uint32_t)obs_data_get_int(data, AMF_H264_HEADER_INSERTION_SPACING));
1861
+ m_VideoEncoder->SetDeblockingFilterEnabled(!!obs_data_get_int(data, AMF_H264_DEBLOCKINGFILTER));
1862
+ if (VCECapabilities::GetInstance()->GetEncoderCaps(VCEEncoderType_AVC)->supportsBFrames) {
1863
+ try {
1864
+ m_VideoEncoder->SetBPicturePattern((VCEBPicturePattern)obs_data_get_int(data, AMF_H264_BPICTURE_PATTERN));
1865
+ m_VideoEncoder->SetBPictureReferenceEnabled(!!obs_data_get_int(data, AMF_H264_BPICTURE_REFERENCE));
1866
+ } catch (...) {}
1867
+ try {
1868
+ if (m_VideoEncoder->GetBPicturePattern() != VCEBPicturePattern_None) {
1869
+ m_VideoEncoder->SetBPictureDeltaQP((int8_t)obs_data_get_int(data, AMF_H264_QP_BPICTURE_DELTA));
1870
+ m_VideoEncoder->SetReferenceBPictureDeltaQP((int8_t)obs_data_get_int(data, AMF_H264_QP_REFERENCE_BPICTURE_DELTA));
1871
+ }
1872
+ } catch (...) {}
1873
+ }
1874
+
1875
+ // Miscellaneous Properties
1876
+ m_VideoEncoder->SetHalfPixelMotionEstimationEnabled(!!(obs_data_get_int(data, AMF_H264_MOTIONESTIMATION) & 1));
1877
+ m_VideoEncoder->SetQuarterPixelMotionEstimationEnabled(!!(obs_data_get_int(data, AMF_H264_MOTIONESTIMATION) & 2));
1878
+
1879
+ // OBS - Enforce Streaming Service Stuff
1880
+ {
1881
// Rate Control Method
1882
- const char* t_str = obs_data_get_string(settings, "rate_control");
1883
+ const char* t_str = obs_data_get_string(data, "rate_control");
1884
if (strcmp(t_str, "") != 0) {
1885
if (strcmp(t_str, "CBR") == 0) {
1886
m_VideoEncoder->SetRateControlMethod(VCERateControlMethod_ConstantBitrate);
1887
1888
} else if (strcmp(t_str, "CQP") == 0) {
1889
m_VideoEncoder->SetRateControlMethod(VCERateControlMethod_ConstantQP);
1890
}
1891
+
1892
+ obs_data_set_int(data, AMF_H264_RATECONTROLMETHOD, m_VideoEncoder->GetRateControlMethod());
1893
} else {
1894
switch (m_VideoEncoder->GetRateControlMethod()) {
1895
case VCERateControlMethod_ConstantBitrate:
1896
- obs_data_set_string(settings, "rate_control", "CBR");
1897
+ obs_data_set_string(data, "rate_control", "CBR");
1898
break;
1899
case VCERateControlMethod_VariableBitrate_PeakConstrained:
1900
- obs_data_set_string(settings, "rate_control", "VBR");
1901
+ obs_data_set_string(data, "rate_control", "VBR");
1902
break;
1903
case VCERateControlMethod_VariableBitrate_LatencyConstrained:
1904
- obs_data_set_string(settings, "rate_control", "VBR_LAT");
1905
+ obs_data_set_string(data, "rate_control", "VBR_LAT");
1906
break;
1907
case VCERateControlMethod_ConstantQP:
1908
- obs_data_set_string(settings, "rate_control", "CQP");
1909
+ obs_data_set_string(data, "rate_control", "CQP");
1910
break;
1911
}
1912
}
1913
1914
// Bitrate
1915
- uint64_t bitrateOvr = obs_data_get_int(settings, "bitrate") * 1000;
1916
+ uint64_t bitrateOvr = obs_data_get_int(data, "bitrate") * 1000;
1917
if (bitrateOvr != -1) {
1918
if (m_VideoEncoder->GetTargetBitrate() > bitrateOvr)
1919
m_VideoEncoder->SetTargetBitrate((uint32_t)bitrateOvr);
1920
1921
if (m_VideoEncoder->GetPeakBitrate() > bitrateOvr)
1922
m_VideoEncoder->SetPeakBitrate((uint32_t)bitrateOvr);
1923
1924
- obs_data_set_int(settings, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
1925
+ obs_data_set_int(data, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
1926
+
1927
+ obs_data_set_int(data, AMF_H264_BITRATE_TARGET, m_VideoEncoder->GetTargetBitrate() / bitrateMultiplier);
1928
+ obs_data_set_int(data, AMF_H264_BITRATE_PEAK, m_VideoEncoder->GetPeakBitrate() / bitrateMultiplier);
1929
} else {
1930
- obs_data_set_int(settings, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
1931
+ obs_data_set_int(data, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000);
1932
}
1933
1934
// IDR-Period (Keyframes)
1935
uint32_t fpsNum = m_VideoEncoder->GetFrameRate().first;
1936
uint32_t fpsDen = m_VideoEncoder->GetFrameRate().second;
1937
- if (obs_data_get_int(settings, "keyint_sec") != -1) {
1938
- m_VideoEncoder->SetIDRPeriod((uint32_t)(obs_data_get_int(settings, "keyint_sec") * ((double_t)fpsNum / (double_t)fpsDen)));
1939
+ if (obs_data_get_int(data, "keyint_sec") != -1) {
1940
+ m_VideoEncoder->SetIDRPeriod((uint32_t)(obs_data_get_int(data, "keyint_sec") * ((double_t)fpsNum / (double_t)fpsDen)));
1941
+
1942
+ obs_data_set_double(data, AMF_H264_KEYFRAME_INTERVAL, (double_t)obs_data_get_int(data, "keyint_sec"));
1943
+ obs_data_set_int(data, AMF_H264_IDR_PERIOD, (uint32_t)(obs_data_get_int(data, "keyint_sec") * ((double_t)fpsNum / (double_t)fpsDen)));
1944
} else {
1945
- obs_data_set_int(settings, "keyint_sec", (uint64_t)(m_VideoEncoder->GetIDRPeriod() / ((double_t)fpsNum / (double_t)fpsDen)));
1946
+ obs_data_set_int(data, "keyint_sec", (uint64_t)(m_VideoEncoder->GetIDRPeriod() / ((double_t)fpsNum / (double_t)fpsDen)));
1947
}
1948
}
1949
1950
- //////////////////////////////////////////////////////////////////////////
1951
// Verify
1952
- //////////////////////////////////////////////////////////////////////////
1953
m_VideoEncoder->LogProperties();
1954
+ if (obs_data_get_int(data, AMF_H264_VIEW) >= ViewMode::Master)
1955
+ AMF_LOG_ERROR("View Mode 'Master' is active, avoid giving anything but basic support. Error is most likely caused by user settings themselves.");
1956
1957
- //////////////////////////////////////////////////////////////////////////
1958
- // Initialize (locks static properties)
1959
- //////////////////////////////////////////////////////////////////////////
1960
- m_VideoEncoder->Start();
1961
-
1962
- AMF_LOG_INFO("<AMFEncoder::H264Interface::H264Interface> Complete.");
1963
-}
1964
-
1965
-Plugin::Interface::H264Interface::~H264Interface() {
1966
- AMF_LOG_INFO("<AMFEncoder::H264Interface::~H264Interface> Finalizing...");
1967
- m_VideoEncoder->Stop();
1968
- delete m_VideoEncoder;
1969
- AMF_LOG_INFO("<AMFEncoder::H264Interface::~H264Interface> Complete.");
1970
-}
1971
-
1972
-bool Plugin::Interface::H264Interface::update(obs_data_t* settings) {
1973
- return update_properties(settings);
1974
+ return true;
1975
}
1976
1977
bool Plugin::Interface::H264Interface::encode(struct encoder_frame * frame, struct encoder_packet * packet, bool * received_packet) {
1978
1979
bool Plugin::Interface::H264Interface::get_extra_data(uint8_t** extra_data, size_t* size) {
1980
return m_VideoEncoder->GetExtraData(extra_data, size);
1981
}
1982
-
1983
-bool Plugin::Interface::H264Interface::update_properties(obs_data_t* settings) {
1984
- int64_t value; double_t valued;
1985
-
1986
- /// Minimum & Maximum QP
1987
- try {
1988
- value = obs_data_get_int(settings, AMF_H264_QP_MINIMUM);
1989
- if (value != -1)
1990
- m_VideoEncoder->SetMinimumQP((uint8_t)value);
1991
- } catch (...) {}
1992
- try {
1993
- value = obs_data_get_int(settings, AMF_H264_QP_MAXIMUM);
1994
- if (value != -1)
1995
- m_VideoEncoder->SetMaximumQP((uint8_t)value);
1996
- } catch (...) {}
1997
-
1998
- /// Bitrate
1999
- try {
2000
- value = obs_data_get_int(settings, AMF_H264_BITRATE_TARGET);
2001
- if (value != -1)
2002
- m_VideoEncoder->SetTargetBitrate((uint32_t)value);
2003
- } catch (...) {}
2004
- try {
2005
- value = obs_data_get_int(settings, AMF_H264_BITRATE_PEAK);
2006
- if (value != -1)
2007
- m_VideoEncoder->SetPeakBitrate((uint32_t)value);
2008
- } catch (...) {}
2009
-
2010
- /// I-, P-, B-Frame QP
2011
- try {
2012
- value = obs_data_get_int(settings, AMF_H264_QP_IFRAME);
2013
- if (value != -1)
2014
- m_VideoEncoder->SetIFrameQP((uint8_t)value);
2015
- } catch (...) {}
2016
- try {
2017
- value = obs_data_get_int(settings, AMF_H264_QP_PFRAME);
2018
- if (value != -1)
2019
- m_VideoEncoder->SetPFrameQP((uint8_t)value);
2020
- } catch (...) {}
2021
- try {
2022
- value = obs_data_get_int(settings, AMF_H264_QP_BFRAME);
2023
- if (value != -1)
2024
- m_VideoEncoder->SetBFrameQP((uint8_t)value);
2025
- } catch (...) {}
2026
-
2027
- /// Rate Control
2028
- try {
2029
- value = obs_data_get_int(settings, AMF_H264_RATECONTROLMETHOD);
2030
- if (value != -1)
2031
- m_VideoEncoder->SetRateControlMethod((VCERateControlMethod)value);
2032
- } catch (...) {}
2033
- try {
2034
- value = obs_data_get_int(settings, AMF_H264_FILLERDATA);
2035
- if (value != -1)
2036
- m_VideoEncoder->SetFillerDataEnabled(value == 1);
2037
- } catch (...) {}
2038
- try {
2039
- value = obs_data_get_int(settings, AMF_H264_FRAMESKIPPING);
2040
- if (value != -1)
2041
- m_VideoEncoder->SetRateControlSkipFrameEnabled(value == 1);
2042
- } catch (...) {}
2043
- /// CABAC
2044
- try {
2045
- value = obs_data_get_int(settings, AMF_H264_CABAC);
2046
- if (value != -1)
2047
- m_VideoEncoder->SetCABACEnabled(value != 0);
2048
- } catch (...) {}
2049
-
2050
- /// VBV Buffer
2051
- try {
2052
- value = obs_data_get_int(settings, AMF_H264ADVANCED_VBVBUFFER_SIZE);
2053
- if (value != -1)
2054
- m_VideoEncoder->SetVBVBufferSize((uint32_t)value);
2055
- } catch (...) {}
2056
- try {
2057
- valued = obs_data_get_double(settings, AMF_H264ADVANCED_VBVBUFFER_FULLNESS);
2058
- m_VideoEncoder->SetInitialVBVBufferFullness(valued);
2059
- } catch (...) {}
2060
-
2061
- /// Header Insertion Spacing
2062
- try {
2063
- value = obs_data_get_int(settings, AMF_H264ADVANCED_HEADER_INSERTION_SPACING);
2064
- if (value != -1)
2065
- m_VideoEncoder->SetHeaderInsertionSpacing((uint32_t)value);
2066
- } catch (...) {}
2067
- /// IDR Period / Keyframe Period
2068
- try {
2069
- value = obs_data_get_int(settings, AMF_H264ADVANCED_IDR_PERIOD);
2070
- if (value != -1)
2071
- m_VideoEncoder->SetIDRPeriod((uint32_t)value);
2072
- } catch (...) {}
2073
- /// GOP Size
2074
- try {
2075
- value = obs_data_get_int(settings, AMF_H264_GOP_SIZE);
2076
- if (value != -1)
2077
- m_VideoEncoder->SetGOPSize((uint32_t)value);
2078
- } catch (...) {}
2079
- /// Max AU Size
2080
- try {
2081
- value = obs_data_get_int(settings, AMF_H264ADVANCED_MAX_AU_SIZE);
2082
- if (value != -1)
2083
- m_VideoEncoder->SetMaximumAccessUnitSize((uint32_t)value);
2084
- } catch (...) {}
2085
-
2086
- /// De-Blocking Filter
2087
- try {
2088
- value = obs_data_get_int(settings, AMF_H264_DEBLOCKINGFILTER);
2089
- if (value != -1)
2090
- m_VideoEncoder->SetDeBlockingFilterEnabled(value == 1);
2091
- } catch (...) {}
2092
- /// Enforce HRD Compatibility Restrictions
2093
- try {
2094
- value = obs_data_get_int(settings, AMF_H264_ENFORCEHRDCOMPATIBILITY);
2095
- if (value != -1)
2096
- m_VideoEncoder->SetEnforceHRDRestrictionsEnabled(value == 1);
2097
- } catch (...) {}
2098
-
2099
- /// B-Pictures Pattern
2100
- try {
2101
- value = obs_data_get_int(settings, AMF_H264_BPICTURE_PATTERN);
2102
- if (value != -1)
2103
- m_VideoEncoder->SetBPicturePattern((VCEBPicturePattern)value);
2104
- } catch (...) {}
2105
- /// B-Picture Reference
2106
- try {
2107
- value = obs_data_get_int(settings, AMF_H264_BPICTURE_REFERENCE);
2108
- if (value != -1)
2109
- m_VideoEncoder->SetBPictureReferenceEnabled(value == 1);
2110
- } catch (...) {}
2111
- /// B-Picture Delta QP
2112
- try {
2113
- value = obs_data_get_int(settings, AMF_H264_QP_BPICTURE_DELTA);
2114
- if (value != -11)
2115
- m_VideoEncoder->SetBPictureDeltaQP((int8_t)value);
2116
- } catch (...) {}
2117
- /// Ref B-Picture Delta QP
2118
- try {
2119
- value = obs_data_get_int(settings, AMF_H264_QP_REFERENCE_BPICTURE_DELTA);
2120
- if (value != -11)
2121
- m_VideoEncoder->SetReferenceBPictureDeltaQP((int8_t)value);
2122
- } catch (...) {}
2123
-
2124
- /// Motion Estimation
2125
- try {
2126
- value = obs_data_get_int(settings, AMF_H264ADVANCED_MOTIONESTIMATION);
2127
- if (value != -1) {
2128
- m_VideoEncoder->SetHalfPixelMotionEstimationEnabled(!!(value & 0x1));
2129
- m_VideoEncoder->SetQuarterPixelMotionEstimationEnabled(!!(value & 0x2));
2130
- }
2131
- } catch (...) {}
2132
-
2133
- /// Intra Refresh MBs Number Per Slot in Macroblocks
2134
- try {
2135
- value = obs_data_get_int(settings, AMF_H264ADVANCED_INTRAREFRESHNUMMBPERSLOT);
2136
- if (value != -1)
2137
- m_VideoEncoder->SetIntraRefreshMBsNumberPerSlot((uint32_t)value);
2138
- } catch (...) {}
2139
- /// Number of slices Per Frame
2140
- try {
2141
- value = obs_data_get_int(settings, AMF_H264ADVANCED_SLICESPERFRAME);
2142
- if (value != -1)
2143
- m_VideoEncoder->SetSlicesPerFrame((uint32_t)value);
2144
- } catch (...) {}
2145
-
2146
-
2147
- return true;
2148
-}
2149
obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/misc-util.cpp
Added
88
1
2
+/*
3
+MIT License
4
+
5
+Copyright (c) 2016 Michael Fabian Dirks
6
+
7
+Permission is hereby granted, free of charge, to any person obtaining a copy
8
+of this software and associated documentation files (the "Software"), to deal
9
+in the Software without restriction, including without limitation the rights
10
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+copies of the Software, and to permit persons to whom the Software is
12
+furnished to do so, subject to the following conditions:
13
+
14
+The above copyright notice and this permission notice shall be included in all
15
+copies or substantial portions of the Software.
16
+
17
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+SOFTWARE.
24
+*/
25
+
26
+#pragma once
27
+//////////////////////////////////////////////////////////////////////////
28
+// Includes
29
+//////////////////////////////////////////////////////////////////////////
30
+
31
+// Plugin
32
+#include "plugin.h"
33
+#include "amd-amf.h"
34
+#include "amd-amf-vce.h"
35
+#include "amd-amf-vce-capabilities.h"
36
+
37
+//////////////////////////////////////////////////////////////////////////
38
+// Code
39
+//////////////////////////////////////////////////////////////////////////
40
+using namespace Plugin::AMD;
41
+
42
+namespace Plugin {
43
+ namespace Utility {
44
+ VCEProfileLevel inline GetMinimumProfileLevel(std::pair<uint32_t, uint32_t> frameSize, std::pair<uint32_t, uint32_t> frameRate) {
45
+ typedef std::pair<uint32_t, uint32_t> levelRestriction;
46
+ typedef std::pair<VCEProfileLevel, levelRestriction> level;
47
+
48
+ static const level profileLevelLimit[] = { // [Level, [Samples, Samples_Per_Sec]]
49
+ level(VCEProfileLevel_10, levelRestriction(25344, 380160)),
50
+ level(VCEProfileLevel_11, levelRestriction(101376, 768000)),
51
+ level(VCEProfileLevel_12, levelRestriction(101376, 1536000)),
52
+ level(VCEProfileLevel_13, levelRestriction(101376, 3041280)),
53
+ level(VCEProfileLevel_20, levelRestriction(101376, 3041280)),
54
+ level(VCEProfileLevel_21, levelRestriction(202752, 5068800)),
55
+ level(VCEProfileLevel_22, levelRestriction(414720, 5184000)),
56
+ level(VCEProfileLevel_30, levelRestriction(414720, 10368000)),
57
+ level(VCEProfileLevel_31, levelRestriction(921600, 27648000)),
58
+ level(VCEProfileLevel_32, levelRestriction(1310720, 55296000)),
59
+ //level(VCEProfileLevel_40, levelRestriction(2097152, 62914560)), // Technically identical to 4.1, but backwards compatible.
60
+ level(VCEProfileLevel_41, levelRestriction(2097152, 62914560)),
61
+ level(VCEProfileLevel_42, levelRestriction(2228224, 133693440)),
62
+ level(VCEProfileLevel_50, levelRestriction(5652480, 150994944)),
63
+ level(VCEProfileLevel_51, levelRestriction(9437184, 251658240)),
64
+ level(VCEProfileLevel_52, levelRestriction(9437184, 530841600)),
65
+ level((VCEProfileLevel)-1, levelRestriction(0, 0))
66
+ };
67
+
68
+ uint32_t samples = frameSize.first * frameSize.second;
69
+ uint32_t samples_sec = (uint32_t)ceil((double_t)samples * ((double_t)frameRate.first / (double_t)frameRate.second));
70
+
71
+ level curLevel = profileLevelLimit[0];
72
+ for (uint32_t index = 0; curLevel.first != -1; index++) {
73
+ curLevel = profileLevelLimit[index];
74
+
75
+ if (samples > curLevel.second.first)
76
+ continue;
77
+
78
+ if (samples_sec > curLevel.second.second)
79
+ continue;
80
+
81
+ return curLevel.first;
82
+ }
83
+ return VCEProfileLevel_52;
84
+ }
85
+ }
86
+}
87
\ No newline at end of file
88
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/Source/plugin.cpp -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/Source/plugin.cpp
Changed
41
1
2
// Plugin
3
#include "plugin.h"
4
#include "amd-amf.h"
5
-#include "amd-amf-vce.h"
6
#include "amd-amf-vce-capabilities.h"
7
-#include "enc-h264-simple.h"
8
#include "enc-h264.h"
9
10
//////////////////////////////////////////////////////////////////////////
11
// Code
12
//////////////////////////////////////////////////////////////////////////
13
-BOOL WINAPI DllMain(HINSTANCE , DWORD , LPVOID ) {
14
+BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID) {
15
return TRUE;
16
}
17
18
19
MODULE_EXPORT bool obs_module_load(void) {
20
try {
21
AMF_LOG_INFO("Version " PLUGIN_VERSION_TEXT);
22
-
23
- // Attempt to load libraries
24
+
25
+ // Load AMF Runtime
26
auto instance = Plugin::AMD::AMF::GetInstance();
27
28
- // Report Capabilities
29
+ // Report AMF Capabilities
30
Plugin::AMD::VCECapabilities::ReportCapabilities();
31
32
// Register Encoders
33
- Plugin::Interface::H264SimpleInterface::encoder_register();
34
Plugin::Interface::H264Interface::encoder_register();
35
- return true;
36
- } catch(...) {
37
+ } catch (...) {
38
}
39
return true;
40
}
41
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/enc-amf.vcxproj -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/enc-amf.vcxproj
Changed
122
1
2
</ImportGroup>
3
<PropertyGroup Label="UserMacros" />
4
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
5
- <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
6
+ <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\amf\public\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
7
<SourcePath>$(ProjectDir)Source;$(VC_SourcePath)</SourcePath>
8
<OutDir>$(ProjectDir)#Build\$(Configuration)\obs-plugins\$(PlatformArchitecture)bit\</OutDir>
9
<IntDir>$(ProjectDir)#Intermediate\$(Configuration)\$(PlatformArchitecture)\</IntDir>
10
<LibraryPath>$(SolutionDir)#ThirdParty\OBS-Studio\build$(PlatformArchitecture)\libobs\$(Configuration)\;$(LibraryPath)</LibraryPath>
11
</PropertyGroup>
12
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
13
- <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
14
+ <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\amf\public\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
15
<SourcePath>$(ProjectDir)Source;$(VC_SourcePath)</SourcePath>
16
<OutDir>$(ProjectDir)#Build\$(Configuration)\obs-plugins\$(PlatformArchitecture)bit\</OutDir>
17
<IntDir>$(ProjectDir)#Intermediate\$(Configuration)\$(PlatformArchitecture)\</IntDir>
18
<LibraryPath>$(SolutionDir)#ThirdParty\OBS-Studio\build$(PlatformArchitecture)\libobs\$(Configuration)\;$(LibraryPath)</LibraryPath>
19
</PropertyGroup>
20
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
21
- <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
22
+ <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\amf\public\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
23
<SourcePath>$(ProjectDir)Source;$(VC_SourcePath)</SourcePath>
24
<OutDir>$(ProjectDir)#Build\$(Configuration)\obs-plugins\$(PlatformArchitecture)bit\</OutDir>
25
<IntDir>$(ProjectDir)#Intermediate\$(Configuration)\$(PlatformArchitecture)\</IntDir>
26
<LibraryPath>$(SolutionDir)#ThirdParty\OBS-Studio\build$(PlatformArchitecture)\libobs\$(Configuration)\;$(LibraryPath)</LibraryPath>
27
</PropertyGroup>
28
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
29
- <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
30
+ <IncludePath>$(SolutionDir)#ThirdParty\AMD-AMF-SDK\amf\public\include;$(SolutionDir)#ThirdParty\OBS-Studio;$(SolutionDir)#ThirdParty;$(ProjectDir)Include;$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
31
<SourcePath>$(ProjectDir)Source;$(VC_SourcePath)</SourcePath>
32
<OutDir>$(ProjectDir)#Build\$(Configuration)\obs-plugins\$(PlatformArchitecture)bit\</OutDir>
33
<IntDir>$(ProjectDir)#Intermediate\$(Configuration)\$(PlatformArchitecture)\</IntDir>
34
35
</ClCompile>
36
<Link>
37
<EnableCOMDATFolding>false</EnableCOMDATFolding>
38
- <AdditionalDependencies>obs.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
39
+ <AdditionalDependencies>obs.lib;version.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
40
</Link>
41
</ItemDefinitionGroup>
42
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
43
44
</ClCompile>
45
<Link>
46
<EnableCOMDATFolding>false</EnableCOMDATFolding>
47
- <AdditionalDependencies>obs.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
48
+ <AdditionalDependencies>obs.lib;version.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
49
</Link>
50
</ItemDefinitionGroup>
51
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
52
53
<EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
54
<BufferSecurityCheck>false</BufferSecurityCheck>
55
<EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
56
+ <OmitFramePointers>false</OmitFramePointers>
57
</ClCompile>
58
<Link>
59
<EnableCOMDATFolding>true</EnableCOMDATFolding>
60
- <AdditionalDependencies>obs.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
61
+ <AdditionalDependencies>obs.lib;version.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;dxgi.lib;%(AdditionalDependencies)</AdditionalDependencies>
62
<ProfileGuidedDatabase>$(IntDir)$(TargetName).pgd</ProfileGuidedDatabase>
63
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
64
</Link>
65
66
</ClCompile>
67
<Link>
68
<EnableCOMDATFolding>true</EnableCOMDATFolding>
69
- <AdditionalDependencies>obs.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
70
+ <AdditionalDependencies>obs.lib;version.lib;winmm.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
71
<LinkTimeCodeGeneration>UseFastLinkTimeCodeGeneration</LinkTimeCodeGeneration>
72
</Link>
73
</ItemDefinitionGroup>
74
75
<ClInclude Include="Include\amd-amf-vce.h" />
76
<ClInclude Include="Include\amd-amf.h" />
77
<ClInclude Include="Include\amd-amf-vce-capabilities.h" />
78
- <ClInclude Include="Include\enc-h264-simple.h" />
79
+ <ClInclude Include="Include\api-base.h" />
80
+ <ClInclude Include="Include\api-d3d11.h" />
81
+ <ClInclude Include="Include\api-d3d9.h" />
82
<ClInclude Include="Include\enc-h264.h" />
83
<ClInclude Include="Include\plugin.h" />
84
</ItemGroup>
85
86
<ClCompile Include="Source\amd-amf-vce.cpp" />
87
<ClCompile Include="Source\amd-amf.cpp" />
88
<ClCompile Include="Source\amd-amf-vce-capabilities.cpp" />
89
- <ClCompile Include="Source\enc-h264-simple.cpp" />
90
+ <ClCompile Include="Source\api-base.cpp" />
91
+ <ClCompile Include="Source\api-d3d11.cpp" />
92
+ <ClCompile Include="Source\api-d3d9.cpp" />
93
<ClCompile Include="Source\enc-h264.cpp" />
94
+ <ClCompile Include="Source\misc-util.cpp" />
95
<ClCompile Include="Source\plugin.cpp" />
96
</ItemGroup>
97
<ItemGroup>
98
- <None Include="Resources\locale\ca-ES.ini" />
99
- <None Include="Resources\locale\cs-CZ.ini" />
100
- <None Include="Resources\locale\da-DK.ini" />
101
- <None Include="Resources\locale\de-DE.ini" />
102
<None Include="Resources\locale\en-US.ini" />
103
- <None Include="Resources\locale\es-ES.ini" />
104
- <None Include="Resources\locale\eu-ES.ini" />
105
- <None Include="Resources\locale\fi-FI.ini" />
106
- <None Include="Resources\locale\fr-FR.ini" />
107
- <None Include="Resources\locale\hu-HU.ini" />
108
- <None Include="Resources\locale\ja-JP.ini" />
109
- <None Include="Resources\locale\ko-KR.ini" />
110
- <None Include="Resources\locale\nb-NO.ini" />
111
- <None Include="Resources\locale\nl-NL.ini" />
112
- <None Include="Resources\locale\pl-PL.ini" />
113
- <None Include="Resources\locale\ru-RU.ini" />
114
- <None Include="Resources\locale\sv-SE.ini" />
115
- <None Include="Resources\locale\uk-UA.ini" />
116
- <None Include="Resources\locale\vi-VN.ini" />
117
- <None Include="Resources\locale\zh-CN.ini" />
118
- <None Include="Resources\locale\zh-TW.ini" />
119
</ItemGroup>
120
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
121
<ImportGroup Label="ExtensionTargets">
122
obs-studio-0.16.2.tar.xz/plugins/enc-amf/enc-amf/enc-amf.vcxproj.filters -> obs-studio-0.16.4.tar.xz/plugins/enc-amf/enc-amf/enc-amf.vcxproj.filters
Changed
119
1
2
<ClInclude Include="Include\enc-h264.h">
3
<Filter>Header Files</Filter>
4
</ClInclude>
5
- <ClInclude Include="Include\enc-h264-simple.h">
6
- <Filter>Header Files</Filter>
7
- </ClInclude>
8
<ClInclude Include="Include\amd-amf.h">
9
<Filter>Header Files</Filter>
10
</ClInclude>
11
12
<ClInclude Include="Include\amd-amf-vce-capabilities.h">
13
<Filter>Header Files</Filter>
14
</ClInclude>
15
+ <ClInclude Include="Include\api-d3d11.h">
16
+ <Filter>Header Files</Filter>
17
+ </ClInclude>
18
+ <ClInclude Include="Include\api-base.h">
19
+ <Filter>Header Files</Filter>
20
+ </ClInclude>
21
+ <ClInclude Include="Include\api-d3d9.h">
22
+ <Filter>Header Files</Filter>
23
+ </ClInclude>
24
</ItemGroup>
25
<ItemGroup>
26
<ClCompile Include="Source\enc-h264.cpp">
27
<Filter>Source Files</Filter>
28
</ClCompile>
29
- <ClCompile Include="Source\enc-h264-simple.cpp">
30
- <Filter>Source Files</Filter>
31
- </ClCompile>
32
<ClCompile Include="Source\amd-amf.cpp">
33
<Filter>Source Files</Filter>
34
</ClCompile>
35
36
<ClCompile Include="Source\amd-amf-vce.cpp">
37
<Filter>Source Files</Filter>
38
</ClCompile>
39
+ <ClCompile Include="Source\misc-util.cpp">
40
+ <Filter>Source Files</Filter>
41
+ </ClCompile>
42
+ <ClCompile Include="Source\api-d3d11.cpp">
43
+ <Filter>Source Files</Filter>
44
+ </ClCompile>
45
+ <ClCompile Include="Source\api-base.cpp">
46
+ <Filter>Source Files</Filter>
47
+ </ClCompile>
48
+ <ClCompile Include="Source\api-d3d9.cpp">
49
+ <Filter>Source Files</Filter>
50
+ </ClCompile>
51
</ItemGroup>
52
<ItemGroup>
53
<None Include="Resources\locale\en-US.ini">
54
<Filter>Resource Files\locale</Filter>
55
</None>
56
- <None Include="Resources\locale\es-ES.ini">
57
- <Filter>Resource Files\locale</Filter>
58
- </None>
59
- <None Include="Resources\locale\da-DK.ini">
60
- <Filter>Resource Files\locale</Filter>
61
- </None>
62
- <None Include="Resources\locale\hu-HU.ini">
63
- <Filter>Resource Files\locale</Filter>
64
- </None>
65
- <None Include="Resources\locale\ru-RU.ini">
66
- <Filter>Resource Files\locale</Filter>
67
- </None>
68
- <None Include="Resources\locale\vi-VN.ini">
69
- <Filter>Resource Files\locale</Filter>
70
- </None>
71
- <None Include="Resources\locale\de-DE.ini">
72
- <Filter>Resource Files\locale</Filter>
73
- </None>
74
- <None Include="Resources\locale\nb-NO.ini">
75
- <Filter>Resource Files\locale</Filter>
76
- </None>
77
- <None Include="Resources\locale\ca-ES.ini">
78
- <Filter>Resource Files\locale</Filter>
79
- </None>
80
- <None Include="Resources\locale\cs-CZ.ini">
81
- <Filter>Resource Files\locale</Filter>
82
- </None>
83
- <None Include="Resources\locale\eu-ES.ini">
84
- <Filter>Resource Files\locale</Filter>
85
- </None>
86
- <None Include="Resources\locale\fi-FI.ini">
87
- <Filter>Resource Files\locale</Filter>
88
- </None>
89
- <None Include="Resources\locale\fr-FR.ini">
90
- <Filter>Resource Files\locale</Filter>
91
- </None>
92
- <None Include="Resources\locale\ja-JP.ini">
93
- <Filter>Resource Files\locale</Filter>
94
- </None>
95
- <None Include="Resources\locale\ko-KR.ini">
96
- <Filter>Resource Files\locale</Filter>
97
- </None>
98
- <None Include="Resources\locale\nl-NL.ini">
99
- <Filter>Resource Files\locale</Filter>
100
- </None>
101
- <None Include="Resources\locale\pl-PL.ini">
102
- <Filter>Resource Files\locale</Filter>
103
- </None>
104
- <None Include="Resources\locale\sv-SE.ini">
105
- <Filter>Resource Files\locale</Filter>
106
- </None>
107
- <None Include="Resources\locale\uk-UA.ini">
108
- <Filter>Resource Files\locale</Filter>
109
- </None>
110
- <None Include="Resources\locale\zh-CN.ini">
111
- <Filter>Resource Files\locale</Filter>
112
- </None>
113
- <None Include="Resources\locale\zh-TW.ini">
114
- <Filter>Resource Files\locale</Filter>
115
- </None>
116
</ItemGroup>
117
</Project>
118
\ No newline at end of file
119
obs-studio-0.16.2.tar.xz/plugins/image-source/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/plugins/image-source/data/locale/el-GR.ini
Changed
7
1
2
File="Αρχείο εικόνας"
3
UnloadWhenNotShowing="Ξεφόρτωση εικόνας όταν δεν εμφανίζεται"
4
5
+SlideShow.Files="Αρχεία φωτογραφίας"
6
7
obs-studio-0.16.4.tar.xz/plugins/image-source/data/locale/ms-MY.ini
Added
17
1
2
+ImageInput="Imej"
3
+File="Fail Imej"
4
+UnloadWhenNotShowing="Nyahmuatkan imej apabila tidak ditunjukkan"
5
+
6
+SlideShow="Tayangan Slaid Imej"
7
+SlideShow.TransitionSpeed="Kelajuan Peralihan (milisaat)"
8
+SlideShow.SlideTime="Masa Antara Slaid (milisaat)"
9
+SlideShow.Files="Fail-fail Imej"
10
+SlideShow.Randomize="Rawakkan Main balik"
11
+SlideShow.Transition="Peralihan"
12
+SlideShow.Transition.Cut="Potong"
13
+SlideShow.Transition.Fade="Pudar"
14
+SlideShow.Transition.Swipe="Sapu"
15
+SlideShow.Transition.Slide="Slaid"
16
+
17
obs-studio-0.16.4.tar.xz/plugins/linux-jack/data/locale/vi-VN.ini
Added
5
1
2
+StartJACKServer="Bắt đầu JACK server"
3
+Channels="Số lượng các kênh"
4
+
5
obs-studio-0.16.4.tar.xz/plugins/mac-syphon/data/locale/ms-MY.ini
Added
8
1
2
+Source="Sumber"
3
+LaunchSyphonInject="Lancarkan 'SyphonInject'"
4
+Application="Aplikasi"
5
+SyphonLicense="Lesen Syphon"
6
+AllowTransparency="Benarkan Ketelusan"
7
+
8
obs-studio-0.16.4.tar.xz/plugins/mac-vth264/data/locale/ms-MY.ini
Added
9
1
2
+Bitrate="Nilai Bit"
3
+UseMaxBitrate="Had Nilai Bit"
4
+MaxBitrate="Nilai bit maksimum"
5
+None="(Tiada)"
6
+UseBFrames="Gunakan 'B-Frames'"
7
+
8
+
9
obs-studio-0.16.2.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.mm -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.mm
Changed
21
1
2
}];
3
}
4
5
+- (void)refreshPageNoCache:(const int)browserIdentifier
6
+{
7
+ [self sendEvent:browserIdentifier
8
+ event:^(SharedBrowserHandle browserHandle)
9
+ {
10
+ CefRefPtr<CefBrowser> browser = browserHandle->GetBrowser();
11
+
12
+ browser->ReloadIgnoreCache();
13
+ }];
14
+}
15
+
16
+
17
+
18
- (void)destroyBrowser:(const int)browserIdentifier {
19
if (map.count(browserIdentifier) == 1) {
20
std::shared_ptr<BrowserHandle> browserHandle =
21
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.h -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.h
Changed
10
1
2
void ExecuteVisiblityJSCallback(int browserIdentifier, bool visible);
3
4
void ExecuteSceneChangeJSCallback(const char *name);
5
+
6
+ void RefreshPageNoCache(int browserIdentifier);
7
8
private:
9
std::unique_ptr<CEFIsolationServiceManager> cefIsolationServiceManager;
10
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.mm -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/apple/browser-manager-mac.mm
Changed
25
1
2
pimpl->ExecuteSceneChangeJSCallback(name);
3
}
4
5
+void BrowserManager::RefreshPageNoCache(int browserIdentifier)
6
+{
7
+ pimpl->RefreshPageNoCache(browserIdentifier);
8
+}
9
+
10
int BrowserManager::CreateBrowser(const BrowserSettings &browserSettings,
11
const std::shared_ptr<BrowserListener> &browserListener)
12
{
13
14
cefIsolationServiceManager->ExecuteSceneChangeJSCallback(name);
15
}
16
17
+void BrowserManager::Impl::RefreshPageNoCache(int browserIdentifier)
18
+{
19
+ cefIsolationServiceManager->RefreshPageNoCache(browserIdentifier);
20
+}
21
+
22
static BrowserManager *instance;
23
24
BrowserManager *BrowserManager::Instance()
25
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.mm -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.mm
Changed
17
1
2
BrowserSource::BrowserSource(obs_data_t *settings, obs_source_t *source)
3
: pimpl(new Impl(this)), source(source)
4
{
5
- pthread_mutex_init(&textureLock, NULL);
6
UpdateSettings(settings);
7
}
8
9
10
if (browserIdentifier != 0) {
11
BrowserManager::Instance()->DestroyBrowser(browserIdentifier);
12
}
13
- pthread_mutex_destroy(&textureLock);
14
}
15
16
BrowserSource::Impl::Impl(BrowserSource *parent)
17
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.h -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.h
Changed
10
1
2
void ExecuteVisiblityJSCallback(int browserIdentifier, bool visible);
3
4
void ExecuteSceneChangeJSCallback(const char *name);
5
+
6
+ void RefreshPageNoCache(int browserIdentifier);
7
8
public:
9
NSString *GetUniqueClientName() { return _uniqueClientName; }
10
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.mm -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service-manager.mm
Changed
27
1
2
3
void CEFIsolationServiceManager::ExecuteSceneChangeJSCallback(const char *name)
4
{
5
+ id<CEFIsolatedClient> cefIsolatedClient =
6
+ [_cefIsolationService client];
7
+ @try {
8
+ [cefIsolatedClient executeSceneChangeJSCallback:name];
9
+ }
10
+ @catch (NSException *exception) {}
11
+}
12
+
13
+void CEFIsolationServiceManager::RefreshPageNoCache(int browserIdentifier)
14
+{
15
id<CEFIsolatedClient> cefIsolatedClient =
16
[_cefIsolationService client];
17
@try {
18
- [cefIsolatedClient executeSceneChangeJSCallback:name];
19
+ [cefIsolatedClient refreshPageNoCache:browserIdentifier];
20
}
21
@catch (NSException *exception) {}
22
}
23
+
24
+
25
+
26
+
27
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp
Changed
28
1
2
pimpl->ExecuteSceneChangeJSCallback(name);
3
}
4
5
+void BrowserManager::RefreshPageNoCache(int browserIdentifier)
6
+{
7
+ pimpl->RefreshPageNoCache(browserIdentifier);
8
+}
9
+
10
BrowserManager::Impl::Impl()
11
{
12
os_event_init(&dispatchEvent, OS_EVENT_TYPE_AUTO);
13
14
});
15
}
16
17
+void BrowserManager::Impl::RefreshPageNoCache(int browserIdentifier)
18
+{
19
+ ExecuteOnBrowser(browserIdentifier, [&](CefRefPtr<CefBrowser> b)
20
+ {
21
+ b->ReloadIgnoreCache();
22
+ });
23
+}
24
+
25
void
26
BrowserManager::Impl::Startup()
27
{
28
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp
Changed
39
1
2
void DestroyBrowser(int browserIdentifier);
3
void TickBrowser(int browserIdentifier);
4
5
- void SendMouseClick(int browserIdentifier,
6
- const struct obs_mouse_event *event, int32_t type,
7
- bool mouse_up, uint32_t click_count);
8
- void SendMouseMove(int browserIdentifier,
9
- const struct obs_mouse_event *event, bool mouseLeave);
10
- void SendMouseWheel(int browserIdentifier,
11
- const struct obs_mouse_event *event, int xDelta,
12
- int yDelta);
13
- void SendFocus(int browserIdentifier, bool focus);
14
- void SendKeyClick(int browserIdentifier,
15
- const struct obs_key_event *event, bool keyUp);
16
+ void SendMouseClick(int browserIdentifier,
17
+ const struct obs_mouse_event *event, int32_t type,
18
+ bool mouse_up, uint32_t click_count);
19
+ void SendMouseMove(int browserIdentifier,
20
+ const struct obs_mouse_event *event, bool mouseLeave);
21
+ void SendMouseWheel(int browserIdentifier,
22
+ const struct obs_mouse_event *event, int xDelta,
23
+ int yDelta);
24
+ void SendFocus(int browserIdentifier, bool focus);
25
+ void SendKeyClick(int browserIdentifier,
26
+ const struct obs_key_event *event, bool keyUp);
27
28
void AddListener(const int browserIdentifier,
29
std::shared_ptr<BrowserListener> browserListener);
30
31
32
void ExecuteSceneChangeJSCallback(const char *name);
33
34
+ void RefreshPageNoCache(int browserIdentifier);
35
+
36
private:
37
void ExecuteOnBrowser(int browserIdentifier,
38
std::function<void(CefRefPtr<CefBrowser>)> f,
39
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp
Changed
28
1
2
BrowserManager::Instance()->Restart();
3
return true;
4
}
5
+
6
+static bool refreshnocache_button_clicked(obs_properties_t *props,
7
+ obs_property_t *property, void *data)
8
+{
9
+ BrowserSource *bs = static_cast<BrowserSource *>(data);
10
+
11
+ BrowserManager::Instance()->RefreshPageNoCache(bs->GetBrowserIdentifier());
12
+
13
+ return true;
14
+}
15
+
16
static bool is_local_file_modified(obs_properties_t *props,
17
obs_property_t *prop, obs_data_t *settings)
18
{
19
20
obs_properties_add_bool(props, "shutdown",
21
obs_module_text("Shutdown when not active"));
22
23
+ obs_properties_add_button(props, "refreshnocache",
24
+ obs_module_text("Refresh cache of current page"), refreshnocache_button_clicked);
25
26
#ifdef __APPLE__
27
// osx is the only process-isolated cef impl
28
obs-studio-0.16.2.tar.xz/plugins/obs-browser/obs-browser/main.cpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/obs-browser/main.cpp
Changed
10
1
2
3
bool obs_module_load(void)
4
{
5
- blog(LOG_INFO, "[browser_source: 'Version: %s']", OBS_BROWSER_VERSION);
6
+ blog(LOG_INFO, "[browser_source: 'Version: %s']", OBS_BROWSER_VERSION);
7
8
browser_source_info = create_browser_source_info();
9
10
obs-studio-0.16.2.tar.xz/plugins/obs-browser/shared/browser-app.hpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/shared/browser-app.hpp
Changed
10
1
2
private:
3
virtual void ExecuteJSFunction(CefRefPtr<CefBrowser> browser,
4
const char *functionName,
5
- CefV8ValueList arguments);
6
+ CefV8ValueList arguments);
7
8
IMPLEMENT_REFCOUNTING(BrowserApp);
9
10
obs-studio-0.16.2.tar.xz/plugins/obs-browser/shared/browser-manager.hpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/shared/browser-manager.hpp
Changed
14
1
2
const char *GetModulePath() { return path; }
3
4
void ExecuteVisiblityJSCallback(int browserIdentifier, bool visible);
5
-
6
- void ExecuteSceneChangeJSCallback(const char *name);
7
+
8
+ void ExecuteSceneChangeJSCallback(const char *name);
9
+
10
+ void RefreshPageNoCache(int browserIdentifier);
11
12
private:
13
class Impl;
14
obs-studio-0.16.2.tar.xz/plugins/obs-browser/shared/browser-scheme.cpp -> obs-studio-0.16.4.tar.xz/plugins/obs-browser/shared/browser-scheme.cpp
Changed
14
1
2
3
path = CefURIDecode(path, true, cef_uri_unescape_rule_t::UU_SPACES);
4
path = CefURIDecode(path, true, cef_uri_unescape_rule_t::UU_URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS);
5
-
6
+
7
#ifdef WIN32
8
//blog(LOG_INFO, "%s", path.erase(0,1));
9
- inputStream.open(nowide::widen(path.erase(0,1)), std::ifstream::binary);
10
+ inputStream.open(nowide::widen(path.erase(0,1)), std::ifstream::binary);
11
#else
12
inputStream.open(path, std::ifstream::binary);
13
#endif
14
obs-studio-0.16.2.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-ffmpeg/data/locale/el-GR.ini
Changed
9
1
2
FFmpegAAC="FFmpeg προεπιλεγμένος κωδικοποιητής AAC"
3
Bitrate="Ρυθμός μετάδοσης bit"
4
5
+NVENC.Preset.default="Προεπιλογή"
6
7
LocalFile="Τοπικό αρχείο"
8
Looping="Επανάληψη"
9
obs-studio-0.16.2.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini
Changed
10
1
2
Advanced="고급"
3
AudioBufferSize="오디오 버퍼 크기 (프레임)"
4
VideoBufferSize="비디오 버퍼 크기 (프레임)"
5
-FrameDropping="프레임 드롭 수준"
6
+FrameDropping="프레임 손실 수준"
7
DiscardNone="없음"
8
DiscardDefault="기본 (유효하지 않은 패킷)"
9
DiscardNonRef="비 참조 프레임"
10
obs-studio-0.16.4.tar.xz/plugins/obs-ffmpeg/data/locale/vi-VN.ini
Added
27
1
2
+FFmpegOutput="FFmpeg đầu ra"
3
+FFmpegAAC="FFmpeg AAC Encoder mặc định"
4
+Bitrate="Bitrate"
5
+Preset="Mẫu thiết lập"
6
+RateControl="Cách kiểm soát bitrate"
7
+KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
8
+Lossless="Lossless"
9
+
10
+NVENC.Use2Pass="Sử dụng 2-Pass Encoding"
11
+NVENC.Preset.default="Mặc định"
12
+NVENC.Preset.hq="Chất lượng cao"
13
+NVENC.Preset.hp="Hiệu suất cao"
14
+NVENC.Preset.bd="Bluray"
15
+NVENC.Preset.ll="Độ trễ thấp"
16
+NVENC.Preset.llhq="Độ trễ thấp chất lượng cao"
17
+NVENC.Preset.llhp="Độ trễ thấp hiệu suất cao"
18
+NVENC.Level="Cấp độ"
19
+
20
+LocalFile="Tập tin cục bộ"
21
+Looping="Lặp lại"
22
+Input="Nhập"
23
+InputFormat="Định dạng đầu vào"
24
+
25
+
26
+
27
obs-studio-0.16.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-aac.c -> obs-studio-0.16.4.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-aac.c
Changed
10
1
2
enc->context->cutoff = cutoff;
3
}
4
5
- info("bitrate: %d, channels: %d",
6
+ info("bitrate: %" PRId64 ", channels: %d",
7
enc->context->bit_rate / 1000, enc->context->channels);
8
9
init_sizes(enc, audio);
10
obs-studio-0.16.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c -> obs-studio-0.16.4.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-nvenc.c
Changed
15
1
2
"\twidth: %d\n"
3
"\theight: %d\n"
4
"\t2-pass: %s\n"
5
+ "\tb-frames: %d\n"
6
"\tGPU: %d\n",
7
rc, bitrate, cqp, enc->context->gop_size,
8
preset, profile, level,
9
enc->context->width, enc->context->height,
10
twopass ? "true" : "false",
11
+ enc->context->max_b_frames,
12
gpu);
13
14
return nvenc_init_codec(enc);
15
obs-studio-0.16.2.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-filters/data/locale/nb-NO.ini
Changed
8
1
2
NoiseGate.ReleaseTime="Løslatelsestid (millisekunder)"
3
Gain.GainDB="Forsterkning (dB)"
4
StretchImage="Strekk bilde (ignorer bildets sideforhold)"
5
+Resolution="Oppløsning"
6
+None="Ingen"
7
8
obs-studio-0.16.2.tar.xz/plugins/obs-outputs/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-outputs/data/locale/el-GR.ini
Changed
7
1
2
RTMPStream.DropThreshold="Όριο απωλειών (χιλιοστά δευτερολέπτου)"
3
FLVOutput="FLV Αρχείο Εξόδου"
4
FLVOutput.FilePath="Διαδρομή Αρχείου"
5
+Default="Προεπιλογή"
6
7
obs-studio-0.16.2.tar.xz/plugins/obs-outputs/data/locale/nb-NO.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-outputs/data/locale/nb-NO.ini
Changed
7
1
2
RTMPStream.DropThreshold="Senk terskelen (millisekunder)"
3
FLVOutput="FLV-filutgang"
4
FLVOutput.FilePath="Filbane"
5
+Default="Standard"
6
7
obs-studio-0.16.2.tar.xz/plugins/obs-outputs/rtmp-stream.c -> obs-studio-0.16.4.tar.xz/plugins/obs-outputs/rtmp-stream.c
Changed
10
1
2
buffer_duration_usec = stream->last_dts_usec - first.dts_usec;
3
4
if (buffer_duration_usec > drop_threshold) {
5
- debug("buffer_duration_usec: %lld", buffer_duration_usec);
6
+ debug("buffer_duration_usec: %" PRId64, buffer_duration_usec);
7
drop_frames(stream, name, priority, p_min_dts_usec);
8
}
9
}
10
obs-studio-0.16.4.tar.xz/plugins/obs-qsv11/data/locale/el-GR.ini
Added
4
1
2
+Profile="Προφίλ"
3
+
4
obs-studio-0.16.4.tar.xz/plugins/obs-qsv11/data/locale/vi-VN.ini
Added
14
1
2
+TargetUsage="Mục tiêu sử dụng"
3
+Bitrate="Bitrate"
4
+MaxBitrate="Bitrate Cao nhất"
5
+RateControl="Cách kiểm soát bitrate"
6
+KeyframeIntervalSec="Thời gian đặt Keyframe (giây, 0=tự động)"
7
+Profile="Hồ sơ"
8
+AsyncDepth="Async Depth"
9
+Accuracy="Độ chính xác"
10
+Convergence="Convergence"
11
+ICQQuality="ICQ chất lượng"
12
+LookAheadDepth="Lookahead Depth"
13
+
14
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/ca-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/ca-ES.ini
Changed
12
1
2
Filter.AllFiles="Tots els fitxers"
3
Color="Color"
4
Opacity="Opacitat"
5
+Gradient="Gradient"
6
+Gradient.Color="Color del gradient"
7
+Gradient.Opacity="Opacitat del gradient"
8
+Gradient.Direction="Direcció del gradient"
9
BkColor="Color de fons"
10
BkOpacity="Opacitat del fons"
11
Alignment="Alineació"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/cs-CZ.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/cs-CZ.ini
Changed
12
1
2
Filter.AllFiles="Všechny soubory"
3
Color="Barva"
4
Opacity="Krytí"
5
+Gradient="Přechod barvy"
6
+Gradient.Color="Barva přechodu"
7
+Gradient.Opacity="Průhlednost přechodu"
8
+Gradient.Direction="Směr přechodu"
9
BkColor="Barva pozadí"
10
BkOpacity="Průhlednost pozadí"
11
Alignment="Zarovnání"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/de-DE.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/de-DE.ini
Changed
12
1
2
Filter.AllFiles="Alle Dateien"
3
Color="Farbe"
4
Opacity="Deckkraft"
5
+Gradient="Farbverlauf"
6
+Gradient.Color="Verlaufsfarbe"
7
+Gradient.Opacity="Verlaufsdeckkraft"
8
+Gradient.Direction="Verlaufsrichtung"
9
BkColor="Hintergrundfarbe"
10
BkOpacity="Hintergrunddeckkraft"
11
Alignment="Ausrichtung"
12
obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/el-GR.ini
Added
8
1
2
+Text="Κείμενο"
3
+Filter.TextFiles="Αρχεία κειμένου"
4
+Filter.AllFiles="Όλα τα αρχεία"
5
+Color="Χρώμα"
6
+Alignment.Right="Δεξιά"
7
+
8
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/es-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/es-ES.ini
Changed
12
1
2
Filter.AllFiles="Todos los archivos"
3
Color="Color"
4
Opacity="Opacidad"
5
+Gradient="Degradado"
6
+Gradient.Color="Color del degradado"
7
+Gradient.Opacity="Opacidad del degradado"
8
+Gradient.Direction="Dirección del degradado"
9
BkColor="Color del fondo"
10
BkOpacity="Opacidad del fondo"
11
Alignment="Alineamiento"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/eu-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/eu-ES.ini
Changed
12
1
2
Filter.AllFiles="Fitxategi guztiak"
3
Color="Kolorea"
4
Opacity="Opakutasuna"
5
+Gradient="Gradientea"
6
+Gradient.Color="Gradientearen kolorea"
7
+Gradient.Opacity="Gradientearen opakutasuna"
8
+Gradient.Direction="Gradientearen norabidea"
9
BkColor="Atzeko planoaren kolorea"
10
BkOpacity="Atzeko planoaren opakutasuna"
11
Alignment="Lerrokatzea"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/fi-FI.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/fi-FI.ini
Changed
12
1
2
Filter.AllFiles="Kaikki tiedostot"
3
Color="Väri"
4
Opacity="Läpinäkyvyys"
5
+Gradient="Liuku"
6
+Gradient.Color="Liukuväri"
7
+Gradient.Opacity="Liukuva läpinäkyvyys"
8
+Gradient.Direction="Liu'un suunta"
9
BkColor="Taustaväri"
10
BkOpacity="Taustan läpinäkyvyys"
11
Alignment="Sijoittelu"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/fr-FR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/fr-FR.ini
Changed
12
1
2
Filter.AllFiles="Tous les fichiers"
3
Color="Couleur"
4
Opacity="Opacité"
5
+Gradient="Dégradé"
6
+Gradient.Color="Couleur du dégradé"
7
+Gradient.Opacity="Opacité du dégradé"
8
+Gradient.Direction="Direction du dégradé"
9
BkColor="Couleur de l'arrière-plan"
10
BkOpacity="Transparence de l'arrière-plan"
11
Alignment="Alignement"
12
obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/hr-HR.ini
Added
36
1
2
+TextGDIPlus="Tekst (GDI+)"
3
+Font="Font"
4
+Text="Tekst"
5
+ReadFromFile="Učitaj iz datoteke"
6
+TextFile="Tekstualne datoteka (UTF-8)"
7
+Filter.TextFiles="Tekstualne datoteke"
8
+Filter.AllFiles="Sve datoteke"
9
+Color="Boja"
10
+Opacity="Prozirnost"
11
+Gradient="Nijansa"
12
+Gradient.Color="Boja nijanse"
13
+Gradient.Opacity="Nijansa prozirnosti"
14
+Gradient.Direction="Pravac nijansi"
15
+BkColor="Pozadinska boja"
16
+BkOpacity="Prozirnost pozadine"
17
+Alignment="Poravnanje"
18
+Alignment.Left="Levo"
19
+Alignment.Center="Centrirano"
20
+Alignment.Right="Desno"
21
+Vertical="Uspravno"
22
+VerticalAlignment="Uspravno poravnanje"
23
+VerticalAlignment.Top="Vrh"
24
+VerticalAlignment.Bottom="Dno"
25
+Outline="Okvir"
26
+Outline.Size="Debljina okvira"
27
+Outline.Color="Boja okvira"
28
+Outline.Opacity="Prozirnost okvira"
29
+ChatlogMode="Režim zapisnika ćaskanja"
30
+ChatlogMode.Lines="Broj linija u zapisniku"
31
+UseCustomExtents="Koristi posebne dimenzije teksta"
32
+UseCustomExtents.Wrap="Prelom"
33
+Width="Širina"
34
+Height="Visina"
35
+
36
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/hu-HU.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/hu-HU.ini
Changed
12
1
2
Filter.AllFiles="Minden fájl"
3
Color="Szín"
4
Opacity="Áttetszőség"
5
+Gradient="Színátmenet"
6
+Gradient.Color="Színátmenet színe"
7
+Gradient.Opacity="Színátmenet áttetszősége"
8
+Gradient.Direction="Színátmenet iránya"
9
BkColor="Háttérszín"
10
BkOpacity="Háttér áttetszőség"
11
Alignment="Pozíció"
12
obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/it-IT.ini
Added
36
1
2
+TextGDIPlus="Testo (GDI+)"
3
+Font="Font"
4
+Text="Testo"
5
+ReadFromFile="Leggi da file"
6
+TextFile="File di testo (UTF-8)"
7
+Filter.TextFiles="File di testo"
8
+Filter.AllFiles="Tutti i file"
9
+Color="Colore"
10
+Opacity="Opacità"
11
+Gradient="Sfumato"
12
+Gradient.Color="Colore sfumatura"
13
+Gradient.Opacity="Opacità sfumatura"
14
+Gradient.Direction="Direzione sfumatura"
15
+BkColor="Colore dello sfondo"
16
+BkOpacity="Opacità Sfondo"
17
+Alignment="Allineamento"
18
+Alignment.Left="A sinistra"
19
+Alignment.Center="Al centro"
20
+Alignment.Right="A destra"
21
+Vertical="Verticale"
22
+VerticalAlignment="Allineamento verticale"
23
+VerticalAlignment.Top="Alto"
24
+VerticalAlignment.Bottom="Dal basso"
25
+Outline="Contorno"
26
+Outline.Size="Dimensione contorno"
27
+Outline.Color="Colore del contorno"
28
+Outline.Opacity="Opacità contorno"
29
+ChatlogMode="Modalità Chatlog"
30
+ChatlogMode.Lines="Limite linea Chatlog"
31
+UseCustomExtents="Usa personalizzazioni testo"
32
+UseCustomExtents.Wrap="A capo automatico"
33
+Width="Larghezza"
34
+Height="Altezza"
35
+
36
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/ja-JP.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/ja-JP.ini
Changed
12
1
2
Filter.AllFiles="すべてのファイル"
3
Color="色"
4
Opacity="不透明度"
5
+Gradient="グラデーション"
6
+Gradient.Color="グラデーションカラー"
7
+Gradient.Opacity="グラデーションの不透明度"
8
+Gradient.Direction="グラデーションの方向"
9
BkColor="背景色"
10
BkOpacity="背景の不透明度"
11
Alignment="位置揃え"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/ko-KR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/ko-KR.ini
Changed
12
1
2
Filter.AllFiles="모든 파일"
3
Color="색"
4
Opacity="투명도"
5
+Gradient="바림"
6
+Gradient.Color="바림 색"
7
+Gradient.Opacity="발미 불투명도"
8
+Gradient.Direction="바림 방향"
9
BkColor="배경 색상"
10
BkOpacity="배경 불투명도"
11
Alignment="정렬"
12
obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/nb-NO.ini
Added
27
1
2
+TextGDIPlus="Tekst (GDI +)"
3
+Font="Skrifttype"
4
+Text="Tekst"
5
+ReadFromFile="Lese fra fil"
6
+TextFile="Tekstfil (UTF-8)"
7
+Filter.TextFiles="Tekstfiler"
8
+Filter.AllFiles="Alle filer"
9
+Color="Farge"
10
+Opacity="Gjennomsiktighet"
11
+BkColor="Bakgrunnsfarge"
12
+BkOpacity="Gjennomsiktighet bakgrunn"
13
+Alignment="Justering"
14
+Alignment.Left="Venstre"
15
+Alignment.Center="I midten"
16
+Alignment.Right="Høyre"
17
+Vertical="Vertikal"
18
+VerticalAlignment="Loddrett justering"
19
+VerticalAlignment.Top="Topp"
20
+VerticalAlignment.Bottom="Bunn"
21
+ChatlogMode="Chatlog modus"
22
+UseCustomExtents="Bruk egendefinerte tekst-utvidelser"
23
+UseCustomExtents.Wrap="Ordbrytning"
24
+Width="Bredde"
25
+Height="Høyde"
26
+
27
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/pl-PL.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/pl-PL.ini
Changed
12
1
2
Filter.AllFiles="Wszystkie pliki"
3
Color="Kolor"
4
Opacity="Przezroczystość"
5
+Gradient="Gradient"
6
+Gradient.Color="Kolor gradientu"
7
+Gradient.Opacity="Przezroczystość gradientu"
8
+Gradient.Direction="Kierunek gradientu"
9
BkColor="Kolor tła"
10
BkOpacity="Przezroczystość tła"
11
Alignment="Wyrównanie"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/ru-RU.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/ru-RU.ini
Changed
12
1
2
Filter.AllFiles="Все файлы"
3
Color="Цвет"
4
Opacity="Непрозрачность"
5
+Gradient="Градиент"
6
+Gradient.Color="Цвет градиента"
7
+Gradient.Opacity="Непрозрачность градиента"
8
+Gradient.Direction="Направление градиента"
9
BkColor="Цвет фона"
10
BkOpacity="Непрозрачность фона"
11
Alignment="Выравнивание"
12
obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/sr-CS.ini
Added
36
1
2
+TextGDIPlus="Tekst (GDI+)"
3
+Font="Font"
4
+Text="Tekst"
5
+ReadFromFile="Učitaj iz datoteke"
6
+TextFile="Tekstualne datoteka (UTF-8)"
7
+Filter.TextFiles="Tekstualne datoteke"
8
+Filter.AllFiles="Sve datoteke"
9
+Color="Boja"
10
+Opacity="Prozirnost"
11
+Gradient="Nijansa"
12
+Gradient.Color="Boja nijanse"
13
+Gradient.Opacity="Nijansa prozirnosti"
14
+Gradient.Direction="Pravac nijansi"
15
+BkColor="Pozadinska boja"
16
+BkOpacity="Prozirnost pozadine"
17
+Alignment="Poravnanje"
18
+Alignment.Left="Levo"
19
+Alignment.Center="Centrirano"
20
+Alignment.Right="Desno"
21
+Vertical="Uspravno"
22
+VerticalAlignment="Uspravno poravnanje"
23
+VerticalAlignment.Top="Vrh"
24
+VerticalAlignment.Bottom="Dno"
25
+Outline="Okvir"
26
+Outline.Size="Debljina okvira"
27
+Outline.Color="Boja okvira"
28
+Outline.Opacity="Prozirnost okvira"
29
+ChatlogMode="Režim zapisnika ćaskanja"
30
+ChatlogMode.Lines="Broj linija u zapisniku"
31
+UseCustomExtents="Koristi posebne dimenzije teksta"
32
+UseCustomExtents.Wrap="Prelom"
33
+Width="Širina"
34
+Height="Visina"
35
+
36
obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/sr-SP.ini
Added
36
1
2
+TextGDIPlus="Текст (GDI+)"
3
+Font="Фонт"
4
+Text="Текст"
5
+ReadFromFile="Учитај из датотеке"
6
+TextFile="Текстуалне датотеке (UTF-8)"
7
+Filter.TextFiles="Текстуалне датотеке"
8
+Filter.AllFiles="Све датотеке"
9
+Color="Боја"
10
+Opacity="Прозирност"
11
+Gradient="Нијанса"
12
+Gradient.Color="Боја нијансе"
13
+Gradient.Opacity="Нијанса прозирности"
14
+Gradient.Direction="Правац нијанси"
15
+BkColor="Позадинска боја"
16
+BkOpacity="Прозирност позадине"
17
+Alignment="Поравнање"
18
+Alignment.Left="Лево"
19
+Alignment.Center="Центрирано"
20
+Alignment.Right="Десно"
21
+Vertical="Усправно"
22
+VerticalAlignment="Усправно поравнање"
23
+VerticalAlignment.Top="Врх"
24
+VerticalAlignment.Bottom="Дно"
25
+Outline="Оквир"
26
+Outline.Size="Дебљина оквира"
27
+Outline.Color="Боја оквира"
28
+Outline.Opacity="Прозирност оквира"
29
+ChatlogMode="Режим записника ћаскања"
30
+ChatlogMode.Lines="Број линија у записнику"
31
+UseCustomExtents="Користи посебне димензије текста"
32
+UseCustomExtents.Wrap="Прелом"
33
+Width="Ширина"
34
+Height="Висина"
35
+
36
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/sv-SE.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/sv-SE.ini
Changed
12
1
2
Filter.AllFiles="Alla filer"
3
Color="Färg"
4
Opacity="Opacitet"
5
+Gradient="Gradient"
6
+Gradient.Color="Gradientfärg"
7
+Gradient.Opacity="Gradientopacitet"
8
+Gradient.Direction="Gradientriktning"
9
BkColor="Bakgrundsfärg"
10
BkOpacity="Bakgrundsopacitet"
11
Alignment="Justering"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/uk-UA.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/uk-UA.ini
Changed
12
1
2
Filter.AllFiles="Всі файли"
3
Color="Колір"
4
Opacity="Непрозорість"
5
+Gradient="Градієнтна заливка"
6
+Gradient.Color="Колір градієнта"
7
+Gradient.Opacity="Непрозорость градієнта"
8
+Gradient.Direction="Напрямок градієнта (кут)"
9
BkColor="Колір фону"
10
BkOpacity="Непрозорість фону"
11
Alignment="Вирівнювання"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/zh-CN.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/zh-CN.ini
Changed
12
1
2
Filter.AllFiles="所有文件"
3
Color="色彩"
4
Opacity="不透明度"
5
+Gradient="渐变"
6
+Gradient.Color="渐变颜色"
7
+Gradient.Opacity="渐变不透明度"
8
+Gradient.Direction="渐变方向"
9
BkColor="背景颜色"
10
BkOpacity="背景不透明度"
11
Alignment="对齐"
12
obs-studio-0.16.2.tar.xz/plugins/obs-text/data/locale/zh-TW.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-text/data/locale/zh-TW.ini
Changed
14
1
2
Filter.AllFiles="所有檔案"
3
Color="顏色"
4
Opacity="不透明度"
5
+Gradient="漸層"
6
+Gradient.Color="漸層色彩"
7
+Gradient.Opacity="漸層不透明度"
8
+Gradient.Direction="漸層方向"
9
+BkColor="背景顏色"
10
+BkOpacity="背景不透明度"
11
Alignment="對齊方式"
12
Alignment.Left="靠左對齊"
13
Alignment.Center="置中"
14
obs-studio-0.16.2.tar.xz/plugins/obs-transitions/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-transitions/data/locale/el-GR.ini
Changed
8
1
2
FadeTransition="Ξεθώριασμα"
3
CutTransition="Αποκοπή"
4
+Direction.Left="Αριστερά"
5
+Direction.Right="Δεξιά"
6
+Color="Χρώμα"
7
8
obs-studio-0.16.2.tar.xz/plugins/obs-transitions/data/slide_transition.effect -> obs-studio-0.16.4.tar.xz/plugins/obs-transitions/data/slide_transition.effect
Changed
19
1
2
{
3
float2 tex_a_uv = v_in.uv + tex_a_dir;
4
float2 tex_b_uv = v_in.uv - tex_b_dir;
5
-
6
- return (tex_a_uv.x - saturate(tex_a_uv.x) != 0.0) ||
7
- (tex_a_uv.y - saturate(tex_a_uv.y) != 0.0)
8
- ? tex_b.Sample(textureSampler, tex_b_uv)
9
- : tex_a.Sample(textureSampler, tex_a_uv);
10
+
11
+ float4 tex_a_sample = tex_a.Sample(textureSampler, tex_a_uv);
12
+ float4 tex_b_sample = tex_b.Sample(textureSampler, tex_b_uv);
13
+
14
+ float val = saturate(abs((tex_a_uv.x - saturate(tex_a_uv.x)) + (tex_a_uv.y - saturate(tex_a_uv.y))) * 65535);
15
+ return lerp(tex_a_sample, tex_b_sample, val);
16
}
17
18
technique Slide
19
obs-studio-0.16.2.tar.xz/plugins/obs-x264/data/locale/ko-KR.ini -> obs-studio-0.16.4.tar.xz/plugins/obs-x264/data/locale/ko-KR.ini
Changed
10
1
2
CRF="CRF"
3
KeyframeIntervalSec="키프레임 간격 (초 단위, 0=자동)"
4
CPUPreset="CPU 사용량 사전설정 (높음 = 적은 CPU 부담)"
5
-Profile="프로필"
6
+Profile="프로파일"
7
Tune="조정"
8
None="(없음)"
9
EncoderOptions="x264 설정 (공백으로 구분)"
10
obs-studio-0.16.4.tar.xz/plugins/obs-x264/data/locale/vi-VN.ini
Added
15
1
2
+Bitrate="Bitrate"
3
+CustomBufsize="Sử dụng tùy chỉnh bộ đệm kích thước"
4
+BufferSize="Bộ nhớ đệm lớn nhất"
5
+RateControl="Cách kiểm soát bitrate"
6
+CRF="CRF"
7
+KeyframeIntervalSec="Keyframe Interval (giây, 0 = auto)"
8
+CPUPreset="CPU sử dụng (cao hơn = ít sử dụng CPU)"
9
+Profile="Hồ sơ"
10
+Tune="Điều chỉnh"
11
+None="(Trống)"
12
+EncoderOptions="x264 tùy chọn (phân cách bởi khoảng trống)"
13
+VFR="Framerate thay đổi được (VFR)"
14
+
15
obs-studio-0.16.2.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-0.16.4.tar.xz/plugins/rtmp-services/data/package.json
Changed
14
1
2
{
3
"url": "https://obsproject.com/obs2_update/rtmp-services",
4
- "version": 38,
5
+ "version": 40,
6
"files": [
7
{
8
"name": "services.json",
9
- "version": 38
10
+ "version": 40
11
}
12
]
13
}
14
obs-studio-0.16.2.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-0.16.4.tar.xz/plugins/rtmp-services/data/services.json
Changed
39
1
2
{
3
"name": "EU",
4
"url": "rtmp://eumedia1.livecoding.tv/livecodingtv"
5
+ },
6
+ {
7
+ "name": "Asia Pacific",
8
+ "url": "rtmp://apmedia1.livecoding.tv/livecodingtv"
9
}
10
],
11
"recommended": {
12
- "max video bitrate": 1300
13
+ "max video bitrate": 2300
14
}
15
},
16
{
17
18
"max video bitrate": 3000,
19
"max audio bitrate": 128
20
}
21
+ },
22
+ {
23
+ "name": "Picarto",
24
+ "servers": [
25
+ {
26
+ "name": "USA/Canada",
27
+ "url": "rtmp://live.us.picarto.tv/golive"
28
+ }
29
+ ],
30
+ "recommended": {
31
+ "keyint": 2,
32
+ "profile": "main",
33
+ "max video bitrate": 2000,
34
+ "max audio bitrate": 160
35
+ }
36
}
37
]
38
}
39
obs-studio-0.16.4.tar.xz/plugins/text-freetype2/data/locale/ms-MY.ini
Added
11
1
2
+TextFreetype2="Teks (FreeType 2)"
3
+Font="Jenis Tulisan"
4
+Text="Teks"
5
+TextFile="Fail teks (UTF-8 atau UTF-16)"
6
+TextFileFilter="Fail teks (*.txt);;"
7
+ChatLogMode="Mod log chat (6 baris terakhir)"
8
+Color1="Warna 1"
9
+Color2="Warna 2"
10
+
11
obs-studio-0.16.2.tar.xz/plugins/win-capture/cursor-capture.c -> obs-studio-0.16.4.tar.xz/plugins/win-capture/cursor-capture.c
Changed
64
1
2
return output;
3
}
4
5
+static gs_texture_t *get_cached_texture(struct cursor_data *data,
6
+ uint32_t cx, uint32_t cy)
7
+{
8
+ struct cached_cursor cc;
9
+
10
+ for (size_t i = 0; i < data->cached_textures.num; i++) {
11
+ struct cached_cursor *pcc = &data->cached_textures.array[i];
12
+
13
+ if (pcc->cx == cx && pcc->cy == cy)
14
+ return pcc->texture;
15
+ }
16
+
17
+ cc.texture = gs_texture_create(cx, cy, GS_BGRA, 1, NULL, GS_DYNAMIC);
18
+ cc.cx = cx;
19
+ cc.cy = cy;
20
+ da_push_back(data->cached_textures, &cc);
21
+ return cc.texture;
22
+}
23
+
24
static inline bool cursor_capture_icon(struct cursor_data *data, HICON icon)
25
{
26
uint8_t *bitmap;
27
28
uint32_t width;
29
ICONINFO ii;
30
31
- gs_texture_destroy(data->texture);
32
- data->texture = NULL;
33
-
34
if (!icon) {
35
return false;
36
}
37
38
39
bitmap = cursor_capture_icon_bitmap(&ii, &width, &height);
40
if (bitmap) {
41
- data->texture = gs_texture_create(width, height, GS_BGRA,
42
- 1, (const uint8_t**)&bitmap, 0);
43
+ if (data->last_cx != width && data->last_cy != height) {
44
+ data->texture = get_cached_texture(data, width, height);
45
+ data->last_cx = width;
46
+ data->last_cy = height;
47
+ }
48
+ gs_texture_set_image(data->texture, bitmap, width * 4, false);
49
bfree(bitmap);
50
51
data->x_hotspot = ii.xHotspot;
52
53
54
void cursor_data_free(struct cursor_data *data)
55
{
56
- gs_texture_destroy(data->texture);
57
+ for (size_t i = 0; i < data->cached_textures.num; i++) {
58
+ struct cached_cursor *pcc = &data->cached_textures.array[i];
59
+ gs_texture_destroy(pcc->texture);
60
+ }
61
+ da_free(data->cached_textures);
62
memset(data, 0, sizeof(*data));
63
}
64
obs-studio-0.16.2.tar.xz/plugins/win-capture/cursor-capture.h -> obs-studio-0.16.4.tar.xz/plugins/win-capture/cursor-capture.h
Changed
26
1
2
3
#include <stdint.h>
4
5
+struct cached_cursor {
6
+ gs_texture_t *texture;
7
+ uint32_t cx;
8
+ uint32_t cy;
9
+};
10
+
11
struct cursor_data {
12
gs_texture_t *texture;
13
HCURSOR current_cursor;
14
15
long x_hotspot;
16
long y_hotspot;
17
bool visible;
18
+
19
+ uint32_t last_cx;
20
+ uint32_t last_cy;
21
+
22
+ DARRAY(struct cached_cursor) cached_textures;
23
};
24
25
extern void cursor_capture(struct cursor_data *data);
26
obs-studio-0.16.2.tar.xz/plugins/win-capture/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/plugins/win-capture/data/locale/el-GR.ini
Changed
7
1
2
GameCapture.ScaleRes="Κλιμάκωση Ανάλυσης"
3
GameCapture.LimitFramerate="Περιορισμός των frame καταγραφής"
4
GameCapture.CaptureOverlays="Καταγραφή επικαλύψεων τρίτου προσώπου (όπως π.χ. steam)"
5
+Mode="Τύπος"
6
7
obs-studio-0.16.2.tar.xz/plugins/win-capture/data/locale/es-ES.ini -> obs-studio-0.16.4.tar.xz/plugins/win-capture/data/locale/es-ES.ini
Changed
10
1
2
GameCapture.UseHotkey="Capturar ventana en primer plano con teclas de acceso rápido"
3
GameCapture.ForceScaling="Forzar escalado"
4
GameCapture.ScaleRes="Resolución de la escala"
5
-GameCapture.LimitFramerate="Limitar ratio de captura"
6
+GameCapture.LimitFramerate="Limitar velocidad de los fotogramas de la captura"
7
GameCapture.CaptureOverlays="Capturar capas de aplicaciones externas (tales como Steam)"
8
GameCapture.AntiCheatHook="Utilice la compatibilidad anti-trampa"
9
GameCapture.HotkeyStart="Captura ventana en primer plano"
10
obs-studio-0.16.2.tar.xz/plugins/win-capture/data/locale/it-IT.ini -> obs-studio-0.16.4.tar.xz/plugins/win-capture/data/locale/it-IT.ini
Changed
7
1
2
GameCapture.AntiCheatHook="Usa la compatibilità anti-cheat"
3
GameCapture.HotkeyStart="Cattura finestra in primo piano"
4
GameCapture.HotkeyStop="Disattiva cattura"
5
+Mode="Modalità"
6
7
obs-studio-0.16.2.tar.xz/plugins/win-capture/data/locale/nb-NO.ini -> obs-studio-0.16.4.tar.xz/plugins/win-capture/data/locale/nb-NO.ini
Changed
7
1
2
GameCapture.LimitFramerate="Begrens opptakets bildefrekvens"
3
GameCapture.CaptureOverlays="Ta opp tredjeparts overlag (som Steam)"
4
GameCapture.AntiCheatHook="Bruk antijukskompitabilitet-hook"
5
+Mode="Modus"
6
7
obs-studio-0.16.4.tar.xz/plugins/win-capture/data/locale/vi-VN.ini
Added
25
1
2
+MonitorCapture="Quay màn hình"
3
+WindowCapture="Quay cửa sổ"
4
+WindowCapture.Window="Cửa sổ"
5
+WindowCapture.Priority="Cửa sổ ưu tiên"
6
+WindowCapture.Priority.Title="Tiêu đề cửa sổ"
7
+WindowCapture.Priority.Class="Lớp cửa sổ"
8
+WindowCapture.Priority.Exe="Tên thực thi"
9
+CaptureCursor="Quay cả con trỏ"
10
+Compatibility="Khả năng tương thích đa adapter"
11
+AllowTransparency="Cho phép trong suốt"
12
+Monitor="Hiển thị"
13
+PrimaryMonitor="Màn hình chính"
14
+GameCapture="Quay trò chơi"
15
+GameCapture.AnyFullscreen="Quay tất cả các ứng dụng fullscreen"
16
+GameCapture.CaptureWindow="Quay cửa sổ cụ thể"
17
+GameCapture.UseHotkey="Quay nền trước cửa sổ với phím nóng"
18
+GameCapture.LimitFramerate="Giới hạn framerate"
19
+GameCapture.CaptureOverlays="Quay cả overlay (chẳng hạn như Steam)"
20
+GameCapture.AntiCheatHook="Dùng hook tương thích với phần mềm chống gian lận"
21
+GameCapture.HotkeyStart="Quay nền trước cửa sổ"
22
+GameCapture.HotkeyStop="Tắt quay"
23
+Mode="Chế độ"
24
+
25
obs-studio-0.16.2.tar.xz/plugins/win-capture/graphics-hook/CMakeLists.txt -> obs-studio-0.16.4.tar.xz/plugins/win-capture/graphics-hook/CMakeLists.txt
Changed
34
1
2
project(graphics-hook)
3
4
+set(COMPILE_D3D12_HOOK FALSE CACHE BOOL "Compile D3D12 hook support (required windows 10 SDK)")
5
+
6
+configure_file(
7
+ "${CMAKE_CURRENT_SOURCE_DIR}/graphics-hook-config.h.in"
8
+ "${CMAKE_BINARY_DIR}/plugins/win-capture/graphics-hook/config/graphics-hook-config.h")
9
+
10
+
11
set(graphics-hook_HEADERS
12
+ "${CMAKE_BINARY_DIR}/plugins/win-capture/graphics-hook/config/graphics-hook-config.h"
13
graphics-hook.h
14
../graphics-hook-info.h
15
../hook-helpers.h
16
17
d3d9-capture.cpp
18
dxgi-capture.cpp
19
d3d10-capture.cpp
20
- d3d11-capture.cpp)
21
+ d3d11-capture.cpp
22
+ d3d12-capture.cpp)
23
24
add_library(graphics-hook MODULE
25
${graphics-hook_SOURCES}
26
${graphics-hook_HEADERS})
27
28
+target_include_directories(graphics-hook PUBLIC
29
+ "${CMAKE_BINARY_DIR}/plugins/win-capture/graphics-hook/config")
30
+
31
target_link_libraries(graphics-hook
32
ipc-util psapi)
33
34
obs-studio-0.16.4.tar.xz/plugins/win-capture/graphics-hook/d3d12-capture.cpp
Added
303
1
2
+#define _CRT_SECURE_NO_WARNINGS
3
+#include <windows.h>
4
+#include "graphics-hook.h"
5
+
6
+#if COMPILE_D3D12_HOOK
7
+
8
+#include <d3d11on12.h>
9
+#include <d3d12.h>
10
+#include <dxgi1_2.h>
11
+
12
+#include "dxgi-helpers.hpp"
13
+#include "../funchook.h"
14
+
15
+struct d3d12_data {
16
+ ID3D12Device *device; /* do not release */
17
+ uint32_t base_cx;
18
+ uint32_t base_cy;
19
+ uint32_t cx;
20
+ uint32_t cy;
21
+ DXGI_FORMAT format;
22
+ bool using_shtex : 1;
23
+ bool using_scale : 1;
24
+ bool multisampled : 1;
25
+
26
+ ID3D11Device *device11;
27
+ ID3D11DeviceContext *context11;
28
+ ID3D11On12Device *device11on12;
29
+
30
+ union {
31
+ struct {
32
+ struct shtex_data *shtex_info;
33
+ ID3D11Resource *backbuffer11;
34
+ ID3D11Texture2D *copy_tex;
35
+ HANDLE handle;
36
+ };
37
+ };
38
+};
39
+
40
+static struct d3d12_data data = {};
41
+
42
+void d3d12_free(void)
43
+{
44
+ if (data.copy_tex)
45
+ data.copy_tex->Release();
46
+ if (data.backbuffer11)
47
+ data.backbuffer11->Release();
48
+ if (data.device11)
49
+ data.device11->Release();
50
+ if (data.context11)
51
+ data.context11->Release();
52
+ if (data.device11on12)
53
+ data.device11on12->Release();
54
+
55
+ capture_free();
56
+
57
+ memset(&data, 0, sizeof(data));
58
+
59
+ hlog("----------------- d3d12 capture freed ----------------");
60
+}
61
+
62
+static bool create_d3d12_tex(ID3D12Resource *backbuffer)
63
+{
64
+ D3D11_RESOURCE_FLAGS rf11 = {};
65
+ HRESULT hr;
66
+
67
+ hr = data.device11on12->CreateWrappedResource(backbuffer, &rf11,
68
+ D3D12_RESOURCE_STATE_COPY_SOURCE,
69
+ D3D12_RESOURCE_STATE_PRESENT,
70
+ __uuidof(ID3D11Resource),
71
+ (void**)&data.backbuffer11);
72
+ if (FAILED(hr)) {
73
+ hlog_hr("create_d3d12_tex: failed to create backbuffer11",
74
+ hr);
75
+ return false;
76
+ }
77
+
78
+ D3D11_TEXTURE2D_DESC desc11 = {};
79
+ desc11.Width = data.cx;
80
+ desc11.Height = data.cy;
81
+ desc11.MipLevels = 1;
82
+ desc11.ArraySize = 1;
83
+ desc11.Format = data.format;
84
+ desc11.SampleDesc.Count = 1;
85
+ desc11.BindFlags = D3D11_BIND_SHADER_RESOURCE;
86
+ desc11.MiscFlags = D3D11_RESOURCE_MISC_SHARED;
87
+
88
+ hr = data.device11->CreateTexture2D(&desc11, nullptr, &data.copy_tex);
89
+ if (FAILED(hr)) {
90
+ hlog_hr("create_d3d12_tex: creation of d3d11 copy tex failed",
91
+ hr);
92
+ return false;
93
+ }
94
+
95
+ data.device11on12->ReleaseWrappedResources(&data.backbuffer11, 1);
96
+
97
+ IDXGIResource *dxgi_res;
98
+ hr = data.copy_tex->QueryInterface(__uuidof(IDXGIResource),
99
+ (void**)&dxgi_res);
100
+ if (FAILED(hr)) {
101
+ hlog_hr("create_d3d12_tex: failed to query "
102
+ "IDXGIResource interface from texture", hr);
103
+ return false;
104
+ }
105
+
106
+ hr = dxgi_res->GetSharedHandle(&data.handle);
107
+ dxgi_res->Release();
108
+ if (FAILED(hr)) {
109
+ hlog_hr("create_d3d12_tex: failed to get shared handle", hr);
110
+ return false;
111
+ }
112
+
113
+ return true;
114
+}
115
+
116
+typedef PFN_D3D11ON12_CREATE_DEVICE create_11_on_12_t;
117
+
118
+const static D3D_FEATURE_LEVEL feature_levels[] =
119
+{
120
+ D3D_FEATURE_LEVEL_11_0,
121
+ D3D_FEATURE_LEVEL_10_1,
122
+ D3D_FEATURE_LEVEL_10_0,
123
+ D3D_FEATURE_LEVEL_9_3,
124
+};
125
+
126
+static bool d3d12_init_11on12(void)
127
+{
128
+ static HMODULE d3d11 = nullptr;
129
+ static create_11_on_12_t create_11_on_12 = nullptr;
130
+ static bool initialized_11 = false;
131
+ static bool initialized_func = false;
132
+ HRESULT hr;
133
+
134
+ if (!initialized_11 && !d3d11) {
135
+ d3d11 = load_system_library("d3d11.dll");
136
+ if (!d3d11) {
137
+ hlog("d3d12_init_11on12: failed to load d3d11");
138
+ }
139
+ initialized_11 = true;
140
+ }
141
+
142
+ if (!d3d11) {
143
+ return false;
144
+ }
145
+
146
+ if (!initialized_func && !create_11_on_12) {
147
+ create_11_on_12 = (create_11_on_12_t)GetProcAddress(d3d11,
148
+ "D3D11On12CreateDevice");
149
+ if (!create_11_on_12) {
150
+ hlog("d3d12_init_11on12: Failed to get "
151
+ "D3D11On12CreateDevice address");
152
+ }
153
+
154
+ initialized_func = true;
155
+ }
156
+
157
+ if (!create_11_on_12) {
158
+ return false;
159
+ }
160
+
161
+ hr = create_11_on_12(data.device, 0, nullptr, 0,
162
+ nullptr, 0, 0,
163
+ &data.device11, &data.context11, nullptr);
164
+ if (FAILED(hr)) {
165
+ hlog_hr("d3d12_init_11on12: failed to create 11 device", hr);
166
+ return false;
167
+ }
168
+
169
+ data.device11->QueryInterface(__uuidof(ID3D11On12Device),
170
+ (void**)&data.device11on12);
171
+ if (FAILED(hr)) {
172
+ hlog_hr("d3d12_init_11on12: failed to query 11on12 device", hr);
173
+ return false;
174
+ }
175
+
176
+ return true;
177
+}
178
+
179
+static bool d3d12_shtex_init(HWND window, ID3D12Resource *backbuffer)
180
+{
181
+ if (!d3d12_init_11on12()) {
182
+ return false;
183
+ }
184
+ if (!create_d3d12_tex(backbuffer)) {
185
+ return false;
186
+ }
187
+ if (!capture_init_shtex(&data.shtex_info, window,
188
+ data.base_cx, data.base_cy, data.cx, data.cy,
189
+ data.format, false, (uintptr_t)data.handle)) {
190
+ return false;
191
+ }
192
+
193
+ hlog("d3d12 shared texture capture successful");
194
+ return true;
195
+}
196
+
197
+static inline bool d3d12_init_format(IDXGISwapChain *swap, HWND &window)
198
+{
199
+ DXGI_SWAP_CHAIN_DESC desc;
200
+ HRESULT hr;
201
+
202
+ hr = swap->GetDesc(&desc);
203
+ if (FAILED(hr)) {
204
+ hlog_hr("d3d12_init_format: swap->GetDesc failed", hr);
205
+ return false;
206
+ }
207
+
208
+ data.format = fix_dxgi_format(desc.BufferDesc.Format);
209
+ data.multisampled = desc.SampleDesc.Count > 1;
210
+ window = desc.OutputWindow;
211
+ data.base_cx = desc.BufferDesc.Width;
212
+ data.base_cy = desc.BufferDesc.Height;
213
+
214
+ if (data.using_scale) {
215
+ data.cx = global_hook_info->cx;
216
+ data.cy = global_hook_info->cy;
217
+ } else {
218
+ data.cx = desc.BufferDesc.Width;
219
+ data.cy = desc.BufferDesc.Height;
220
+ }
221
+ return true;
222
+}
223
+
224
+static void d3d12_init(IDXGISwapChain *swap, ID3D12Resource *backbuffer)
225
+{
226
+ bool success = true;
227
+ HWND window;
228
+ HRESULT hr;
229
+
230
+ data.using_scale = global_hook_info->use_scale;
231
+
232
+ hr = swap->GetDevice(__uuidof(ID3D12Device), (void**)&data.device);
233
+ if (FAILED(hr)) {
234
+ hlog_hr("d3d12_init: failed to get device from swap", hr);
235
+ return;
236
+ }
237
+
238
+ data.device->Release();
239
+
240
+ if (!d3d12_init_format(swap, window)) {
241
+ return;
242
+ }
243
+ if (data.using_scale) {
244
+ hlog("d3d12_init: scaling currently unsupported; ignoring");
245
+ }
246
+ if (success) {
247
+ if (global_hook_info->force_shmem) {
248
+ hlog("d3d12_init: shared memory capture currently "
249
+ "unsupported; ignoring");
250
+ }
251
+
252
+ success = d3d12_shtex_init(window, backbuffer);
253
+ }
254
+
255
+ if (!success)
256
+ d3d12_free();
257
+}
258
+
259
+static inline void d3d12_copy_texture(ID3D11Resource *dst, ID3D11Resource *src)
260
+{
261
+ if (data.multisampled) {
262
+ data.context11->ResolveSubresource(dst, 0, src, 0, data.format);
263
+ } else {
264
+ data.context11->CopyResource(dst, src);
265
+ }
266
+}
267
+
268
+static inline void d3d12_shtex_capture()
269
+{
270
+ data.device11on12->AcquireWrappedResources(&data.backbuffer11, 1);
271
+ d3d12_copy_texture(data.copy_tex, data.backbuffer11);
272
+ data.device11on12->ReleaseWrappedResources(&data.backbuffer11, 1);
273
+ data.context11->Flush();
274
+}
275
+
276
+void d3d12_capture(void *swap_ptr, void *backbuffer_ptr)
277
+{
278
+ IUnknown *unk_backbuffer = (IUnknown*)backbuffer_ptr;
279
+ IDXGISwapChain *swap = (IDXGISwapChain*)swap_ptr;
280
+ ID3D12Resource *backbuffer;
281
+ HRESULT hr;
282
+
283
+ if (capture_should_stop()) {
284
+ d3d12_free();
285
+ }
286
+ if (capture_should_init()) {
287
+ hr = unk_backbuffer->QueryInterface(__uuidof(ID3D12Resource),
288
+ (void**)&backbuffer);
289
+ if (FAILED(hr)) {
290
+ hlog_hr("d3d12_capture: failed to get backbuffer", hr);
291
+ return;
292
+ }
293
+
294
+ d3d12_init(swap, backbuffer);
295
+ backbuffer->Release();
296
+ }
297
+ if (capture_ready()) {
298
+ d3d12_shtex_capture();
299
+ }
300
+}
301
+
302
+#endif
303
obs-studio-0.16.2.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp -> obs-studio-0.16.4.tar.xz/plugins/win-capture/graphics-hook/dxgi-capture.cpp
Changed
54
1
2
#include "graphics-hook.h"
3
#include "../funchook.h"
4
5
+#if COMPILE_D3D12_HOOK
6
+#include <d3d12.h>
7
+#endif
8
+
9
typedef HRESULT (STDMETHODCALLTYPE *resize_buffers_t)(IDXGISwapChain*, UINT,
10
UINT, UINT, DXGI_FORMAT, UINT);
11
typedef HRESULT (STDMETHODCALLTYPE *present_t)(IDXGISwapChain*, UINT, UINT);
12
13
return true;
14
}
15
16
+#if COMPILE_D3D12_HOOK
17
+ hr = swap->GetDevice(__uuidof(ID3D12Device), (void**)&device);
18
+ if (SUCCEEDED(hr)) {
19
+ data.swap = swap;
20
+ data.capture = d3d12_capture;
21
+ data.free = d3d12_free;
22
+ device->Release();
23
+ return true;
24
+ }
25
+#endif
26
+
27
return false;
28
}
29
30
31
return hr;
32
}
33
34
-static inline IDXGIResource *get_dxgi_backbuffer(IDXGISwapChain *swap)
35
+static inline IUnknown *get_dxgi_backbuffer(IDXGISwapChain *swap)
36
{
37
IDXGIResource *res = nullptr;
38
HRESULT hr;
39
40
- hr = swap->GetBuffer(0, __uuidof(ID3D11Resource), (void**)&res);
41
+ hr = swap->GetBuffer(0, __uuidof(IUnknown), (void**)&res);
42
if (FAILED(hr))
43
hlog_hr("get_dxgi_backbuffer: GetBuffer failed", hr);
44
45
46
static HRESULT STDMETHODCALLTYPE hook_present(IDXGISwapChain *swap,
47
UINT sync_interval, UINT flags)
48
{
49
- IDXGIResource *backbuffer = nullptr;
50
+ IUnknown *backbuffer = nullptr;
51
bool capture_overlay = global_hook_info->capture_overlay;
52
bool test_draw = (flags & DXGI_PRESENT_TEST) != 0;
53
bool capture;
54
obs-studio-0.16.4.tar.xz/plugins/win-capture/graphics-hook/graphics-hook-config.h.in
Added
17
1
2
+#pragma once
3
+
4
+#ifndef TRUE
5
+#define TRUE 1
6
+#endif
7
+
8
+#ifndef ON
9
+#define ON 1
10
+#endif
11
+
12
+#ifndef FALSE
13
+#define FALSE 0
14
+#endif
15
+
16
+#define COMPILE_D3D12_HOOK @COMPILE_D3D12_HOOK@
17
obs-studio-0.16.2.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h -> obs-studio-0.16.4.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.h
Changed
21
1
2
#pragma once
3
4
+#include "graphics-hook-config.h"
5
+
6
#ifdef _MSC_VER
7
/* conversion from data/function pointer */
8
#pragma warning(disable: 4152)
9
10
extern void d3d11_capture(void *swap, void *backbuffer);
11
extern void d3d11_free(void);
12
13
+#if COMPILE_D3D12_HOOK
14
+extern void d3d12_capture(void *swap, void *backbuffer);
15
+extern void d3d12_free(void);
16
+#endif
17
+
18
extern uint8_t *get_d3d1x_vertex_shader(size_t *size);
19
extern uint8_t *get_d3d1x_pixel_shader(size_t *size);
20
21
obs-studio-0.16.2.tar.xz/plugins/win-dshow/data/locale/el-GR.ini -> obs-studio-0.16.4.tar.xz/plugins/win-dshow/data/locale/el-GR.ini
Changed
10
1
2
UseCustomAudioDevice="Χρήση προσαρμοσμένης συσκευής ήχου"
3
AudioDevice="Συσκευή Ήχου"
4
Buffering="Γίνεται φόρτωση"
5
+Buffering.Enable="Ενεργοποίηση"
6
+Buffering.Disable="Απενεργοποίηση"
7
Activate="Ενεργοποίηση"
8
Deactivate="Απενεργοποίηση"
9
FlipVertically="Κάθετη αναστροφή"
10
obs-studio-0.16.2.tar.xz/plugins/win-dshow/data/locale/it-IT.ini -> obs-studio-0.16.4.tar.xz/plugins/win-dshow/data/locale/it-IT.ini
Changed
9
1
2
UseCustomAudioDevice="Usa il dispositivo audio personalizzato"
3
AudioDevice="Dispositivo audio"
4
Buffering="Buffering"
5
+Buffering.ToolTip="Quando abilitato, carica audio e video per garantire la più fluida e la più\naccurata riproduzione possibile, ma a costo di un aumento della latenza. Quando si usa\nil buffering con una scheda di acquisizione video, si consiglia di impostare la scheda e il\nprogramma allla stessa frequenza fotogrammi per migliori resulti.\n\nQuando disattivato, assicura la riproduzione di latenza minima, ma a scapito della precisione di frame\nnella riproduzione. Questo è l'ideale per le telecamere per il volto, o quando si desidera utilizzare la finestra di anteprima\ndel programma per giocare alla console.\n\nAuto-detect (predefinito) imposta attivato se il dispositivo ha ritardo e disabilitato\nse non ha alcun ritardo."
6
Buffering.AutoDetect="Ricon. autom."
7
Buffering.Enable="Abilita"
8
Buffering.Disable="Disabilita"
9
obs-studio-0.16.2.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini -> obs-studio-0.16.4.tar.xz/plugins/win-dshow/data/locale/nb-NO.ini
Changed
11
1
2
UseCustomAudioDevice="Bruk egendefinert lydenhet"
3
AudioDevice="Lydenhet"
4
Buffering="Bufring"
5
+Buffering.AutoDetect="Automatisk søk"
6
+Buffering.Enable="Aktiver"
7
+Buffering.Disable="Deaktiver"
8
Activate="Aktiver"
9
Deactivate="Deaktiver"
10
FlipVertically="Vend loddrett"
11
obs-studio-0.16.2.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini -> obs-studio-0.16.4.tar.xz/plugins/win-dshow/data/locale/sv-SE.ini
Changed
9
1
2
UseCustomAudioDevice="Använd anpassad ljudenhet"
3
AudioDevice="Ljudenhet"
4
Buffering="Buffrar"
5
+Buffering.ToolTip="Aktiverad: buffrar data för video/ljud för att försäkra den mest jämna \n och träffsäkra uppspelningen som möjligt, men med mer latens. När buffrandet används med ett capture card är det rekommenderat att sätta kortet och programmet till till samma framerate för optimalt resultat.\n\nAvaktiverad: garanterar lägsta möjliga uppspelningslatens, men på bekostnad av träffsäkerheten för \nuppspelningen av bildrutor. Det här är idealt för facecams, eller när du vill använda programmets förhandsvisningsfönster\nför att spela på en konsol.\n\nUpptäck automatiskt (standard): aktiverar om enheten dröjer, och avaktiverad om den inte dröjer."
6
Buffering.AutoDetect="Upptäck automatiskt"
7
Buffering.Enable="Aktivera"
8
Buffering.Disable="Inaktivera"
9
obs-studio-0.16.4.tar.xz/plugins/win-mf/data/locale/vi-VN.ini
Added
31
1
2
+MFAACEnc="Media Foundation AAC Encoder"
3
+Bitrate="Bitrate"
4
+
5
+MF.H264.EncoderName="Media Foundation H264 Encoder"
6
+MF.H264.Encoder="Tên Encoder"
7
+MF.H264.LowLatency="Độ trễ thấp (Tắt frame re-ordering)"
8
+MF.H264.CustomBufsize="Sử dụng tùy chỉnh bộ đệm kích thước"
9
+MF.H264.BufferSize="Kích cỡ bộ đệm"
10
+MF.H264.CustomMaxBitrate="Sử dụng tùy chỉnh Bitrate cao nhất"
11
+MF.H264.Bitrate="Bitrate"
12
+MF.H264.MaxBitrate="Bitrate Cao nhất"
13
+MF.H264.KeyframeIntervalSec="Keyframe Interval (giây, 0 = auto)"
14
+MF.H264.RateControl="Cách kiểm soát bitrate"
15
+MF.H264.CBR="CBR (Bitrate cố định)"
16
+MF.H264.VBR="VBR (Bitrate thay đổi được)"
17
+MF.H264.CQP="CQP (Chất lượng cố định)"
18
+MF.H264.MinQP="QP Thấp nhất"
19
+MF.H264.MaxQP="QP Cao nhất"
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="Hồ sơ"
24
+MF.H264.Advanced="Nâng cao"
25
+
26
+MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Encoder"
27
+MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)"
28
+MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Encoder (Media Foundation)"
29
+MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Media Foundation)"
30
+
31
obs-studio-0.16.2.tar.xz/plugins/win-mf/mf-h264.cpp -> obs-studio-0.16.4.tar.xz/plugins/win-mf/mf-h264.cpp
Changed
15
1
2
if (!CanSpawnEncoder(e))
3
continue;
4
5
- if (e->Type() == EncoderType::H264_QSV ||
6
- e->Type() == EncoderType::H264_NVENC)
7
- info.caps = OBS_ENCODER_CAP_DEPRECATED;
8
- else
9
- info.caps = 0;
10
-
11
+ info.caps = OBS_ENCODER_CAP_DEPRECATED;
12
info.id = e->Id();
13
info.type_data = new TypeData(e);
14
info.free_type_data = [] (void *type_data) {
15