@desklink/host 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +26 -0
- package/README.md +134 -56
- package/bin/desklink-host.mjs +13 -5
- package/dist/bridge.d.ts +1 -0
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +12 -4
- package/dist/bridge.js.map +1 -1
- package/dist/engineProcess.d.ts +6 -1
- package/dist/engineProcess.d.ts.map +1 -1
- package/dist/engineProcess.js +35 -4
- package/dist/engineProcess.js.map +1 -1
- package/dist/protocol.d.ts +58 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js.map +1 -1
- package/dist/resolveEngine.d.ts +7 -1
- package/dist/resolveEngine.d.ts.map +1 -1
- package/dist/resolveEngine.js +66 -14
- package/dist/resolveEngine.js.map +1 -1
- package/docs/BOUNDARY.md +15 -7
- package/docs/PROTOCOL.md +267 -27
- package/engine/Cargo.lock +47 -2
- package/engine/Cargo.toml +18 -13
- package/engine/build.rs +86 -4
- package/engine/native/agent_overlay_mac.m +51 -4
- package/engine/native/agent_overlay_wayland.c +145 -12
- package/engine/native/agent_overlay_x11.c +72 -0
- package/engine/native/nvenc_shim.c +453 -0
- package/engine/native/vaapi_shim.c +727 -0
- package/engine/native/vpx_shim.c +54 -4
- package/engine/native/vt_shim.c +448 -0
- package/engine/src/capture.rs +167 -58
- package/engine/src/capture_mac.rs +24 -14
- package/engine/src/capture_win.rs +23 -0
- package/engine/src/clipboard_win.rs +8 -0
- package/engine/src/convert.rs +286 -61
- package/engine/src/cursor.rs +118 -0
- package/engine/src/encoder.rs +122 -13
- package/engine/src/h264.rs +188 -0
- package/engine/src/h264_nvenc.rs +308 -0
- package/engine/src/h264_openh264.rs +735 -0
- package/engine/src/h264_vaapi.rs +263 -0
- package/engine/src/h264_vt.rs +368 -0
- package/engine/src/indicator.rs +104 -3
- package/engine/src/input_win.rs +91 -0
- package/engine/src/keymap_win.rs +39 -0
- package/engine/src/mac.rs +34 -9
- package/engine/src/main.rs +186 -26
- package/engine/src/peer.rs +466 -28
- package/engine/src/portal.rs +42 -4
- package/engine/src/portal_win.rs +37 -0
- package/engine/src/protocol.rs +64 -2
- package/engine/src/session.rs +1252 -105
- package/engine/src/win.rs +110 -0
- package/engine/src/x11.rs +225 -9
- package/engine/src/x11_mac.rs +12 -0
- package/engine/vendor/libva/COPYING +19 -0
- package/engine/vendor/libva/va/va.h +5450 -0
- package/engine/vendor/libva/va/va_dec_av1.h +695 -0
- package/engine/vendor/libva/va/va_dec_hevc.h +616 -0
- package/engine/vendor/libva/va/va_dec_jpeg.h +157 -0
- package/engine/vendor/libva/va/va_dec_vp8.h +249 -0
- package/engine/vendor/libva/va/va_dec_vp9.h +312 -0
- package/engine/vendor/libva/va/va_dec_vvc.h +688 -0
- package/engine/vendor/libva/va/va_drm.h +61 -0
- package/engine/vendor/libva/va/va_enc_av1.h +1010 -0
- package/engine/vendor/libva/va/va_enc_h264.h +659 -0
- package/engine/vendor/libva/va/va_enc_hevc.h +958 -0
- package/engine/vendor/libva/va/va_enc_jpeg.h +162 -0
- package/engine/vendor/libva/va/va_enc_mpeg2.h +308 -0
- package/engine/vendor/libva/va/va_enc_vp8.h +350 -0
- package/engine/vendor/libva/va/va_enc_vp9.h +639 -0
- package/engine/vendor/libva/va/va_fei.h +170 -0
- package/engine/vendor/libva/va/va_fei_h264.h +505 -0
- package/engine/vendor/libva/va/va_fei_hevc.h +254 -0
- package/engine/vendor/libva/va/va_prot.h +525 -0
- package/engine/vendor/libva/va/va_version.h +87 -0
- package/engine/vendor/libva/va/va_vpp.h +1590 -0
- package/engine/vendor/nv-codec-headers/LICENSE +24 -0
- package/engine/vendor/nv-codec-headers/README +7 -0
- package/engine/vendor/nv-codec-headers/include/ffnvcodec/nvEncodeAPI.h +3825 -0
- package/examples/reference-client.html +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,1590 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2007-2011 Intel Corporation. All Rights Reserved.
|
|
3
|
+
*
|
|
4
|
+
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
5
|
+
* copy of this software and associated documentation files (the
|
|
6
|
+
* "Software"), to deal in the Software without restriction, including
|
|
7
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
8
|
+
* distribute, sub license, and/or sell copies of the Software, and to
|
|
9
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
10
|
+
* the following conditions:
|
|
11
|
+
*
|
|
12
|
+
* The above copyright notice and this permission notice (including the
|
|
13
|
+
* next paragraph) shall be included in all copies or substantial portions
|
|
14
|
+
* of the Software.
|
|
15
|
+
*
|
|
16
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
17
|
+
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
18
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
19
|
+
* IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
|
|
20
|
+
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
21
|
+
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
22
|
+
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* \file va_vpp.h
|
|
27
|
+
* \brief The video processing API
|
|
28
|
+
*
|
|
29
|
+
* This file contains the \ref api_vpp "Video processing API".
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
#ifndef VA_VPP_H
|
|
33
|
+
#define VA_VPP_H
|
|
34
|
+
|
|
35
|
+
#ifdef __cplusplus
|
|
36
|
+
extern "C" {
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* \defgroup api_vpp Video processing API
|
|
41
|
+
*
|
|
42
|
+
* @{
|
|
43
|
+
*
|
|
44
|
+
* The video processing API uses the same paradigm as for decoding:
|
|
45
|
+
* - Query for supported filters;
|
|
46
|
+
* - Set up a video processing pipeline;
|
|
47
|
+
* - Send video processing parameters through VA buffers.
|
|
48
|
+
*
|
|
49
|
+
* \section api_vpp_caps Query for supported filters
|
|
50
|
+
*
|
|
51
|
+
* Checking whether video processing is supported can be performed
|
|
52
|
+
* with vaQueryConfigEntrypoints() and the profile argument set to
|
|
53
|
+
* #VAProfileNone. If video processing is supported, then the list of
|
|
54
|
+
* returned entry-points will include #VAEntrypointVideoProc.
|
|
55
|
+
*
|
|
56
|
+
* \code
|
|
57
|
+
* VAEntrypoint *entrypoints;
|
|
58
|
+
* int i, num_entrypoints, supportsVideoProcessing = 0;
|
|
59
|
+
*
|
|
60
|
+
* num_entrypoints = vaMaxNumEntrypoints();
|
|
61
|
+
* entrypoints = malloc(num_entrypoints * sizeof(entrypoints[0]);
|
|
62
|
+
* vaQueryConfigEntrypoints(va_dpy, VAProfileNone,
|
|
63
|
+
* entrypoints, &num_entrypoints);
|
|
64
|
+
*
|
|
65
|
+
* for (i = 0; !supportsVideoProcessing && i < num_entrypoints; i++) {
|
|
66
|
+
* if (entrypoints[i] == VAEntrypointVideoProc)
|
|
67
|
+
* supportsVideoProcessing = 1;
|
|
68
|
+
* }
|
|
69
|
+
* \endcode
|
|
70
|
+
*
|
|
71
|
+
* Then, the vaQueryVideoProcFilters() function is used to query the
|
|
72
|
+
* list of video processing filters.
|
|
73
|
+
*
|
|
74
|
+
* \code
|
|
75
|
+
* VAProcFilterType filters[VAProcFilterCount];
|
|
76
|
+
* unsigned int num_filters = VAProcFilterCount;
|
|
77
|
+
*
|
|
78
|
+
* // num_filters shall be initialized to the length of the array
|
|
79
|
+
* vaQueryVideoProcFilters(va_dpy, vpp_ctx, &filters, &num_filters);
|
|
80
|
+
* \endcode
|
|
81
|
+
*
|
|
82
|
+
* Finally, individual filter capabilities can be checked with
|
|
83
|
+
* vaQueryVideoProcFilterCaps().
|
|
84
|
+
*
|
|
85
|
+
* \code
|
|
86
|
+
* VAProcFilterCap denoise_caps;
|
|
87
|
+
* unsigned int num_denoise_caps = 1;
|
|
88
|
+
* vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx,
|
|
89
|
+
* VAProcFilterNoiseReduction,
|
|
90
|
+
* &denoise_caps, &num_denoise_caps
|
|
91
|
+
* );
|
|
92
|
+
*
|
|
93
|
+
* VAProcFilterCapDeinterlacing deinterlacing_caps[VAProcDeinterlacingCount];
|
|
94
|
+
* unsigned int num_deinterlacing_caps = VAProcDeinterlacingCount;
|
|
95
|
+
* vaQueryVideoProcFilterCaps(va_dpy, vpp_ctx,
|
|
96
|
+
* VAProcFilterDeinterlacing,
|
|
97
|
+
* &deinterlacing_caps, &num_deinterlacing_caps
|
|
98
|
+
* );
|
|
99
|
+
* \endcode
|
|
100
|
+
*
|
|
101
|
+
* \section api_vpp_setup Set up a video processing pipeline
|
|
102
|
+
*
|
|
103
|
+
* A video processing pipeline buffer is created for each source
|
|
104
|
+
* surface we want to process. However, buffers holding filter
|
|
105
|
+
* parameters can be created once and for all. Rationale is to avoid
|
|
106
|
+
* multiple creation/destruction chains of filter buffers and also
|
|
107
|
+
* because filter parameters generally won't change frame after
|
|
108
|
+
* frame. e.g. this makes it possible to implement a checkerboard of
|
|
109
|
+
* videos where the same filters are applied to each video source.
|
|
110
|
+
*
|
|
111
|
+
* The general control flow is demonstrated by the following pseudo-code:
|
|
112
|
+
* \code
|
|
113
|
+
* // Create filters
|
|
114
|
+
* VABufferID denoise_filter, deint_filter;
|
|
115
|
+
* VABufferID filter_bufs[VAProcFilterCount];
|
|
116
|
+
* unsigned int num_filter_bufs;
|
|
117
|
+
*
|
|
118
|
+
* for (i = 0; i < num_filters; i++) {
|
|
119
|
+
* switch (filters[i]) {
|
|
120
|
+
* case VAProcFilterNoiseReduction: { // Noise reduction filter
|
|
121
|
+
* VAProcFilterParameterBuffer denoise;
|
|
122
|
+
* denoise.type = VAProcFilterNoiseReduction;
|
|
123
|
+
* denoise.value = 0.5;
|
|
124
|
+
* vaCreateBuffer(va_dpy, vpp_ctx,
|
|
125
|
+
* VAProcFilterParameterBufferType, sizeof(denoise), 1,
|
|
126
|
+
* &denoise, &denoise_filter
|
|
127
|
+
* );
|
|
128
|
+
* filter_bufs[num_filter_bufs++] = denoise_filter;
|
|
129
|
+
* break;
|
|
130
|
+
* }
|
|
131
|
+
*
|
|
132
|
+
* case VAProcFilterDeinterlacing: // Motion-adaptive deinterlacing
|
|
133
|
+
* for (j = 0; j < num_deinterlacing_caps; j++) {
|
|
134
|
+
* VAProcFilterCapDeinterlacing * const cap = &deinterlacing_caps[j];
|
|
135
|
+
* if (cap->type != VAProcDeinterlacingMotionAdaptive)
|
|
136
|
+
* continue;
|
|
137
|
+
*
|
|
138
|
+
* VAProcFilterParameterBufferDeinterlacing deint;
|
|
139
|
+
* deint.type = VAProcFilterDeinterlacing;
|
|
140
|
+
* deint.algorithm = VAProcDeinterlacingMotionAdaptive;
|
|
141
|
+
* vaCreateBuffer(va_dpy, vpp_ctx,
|
|
142
|
+
* VAProcFilterParameterBufferType, sizeof(deint), 1,
|
|
143
|
+
* &deint, &deint_filter
|
|
144
|
+
* );
|
|
145
|
+
* filter_bufs[num_filter_bufs++] = deint_filter;
|
|
146
|
+
* }
|
|
147
|
+
* }
|
|
148
|
+
* }
|
|
149
|
+
* \endcode
|
|
150
|
+
*
|
|
151
|
+
* Once the video processing pipeline is set up, the caller shall check the
|
|
152
|
+
* implied capabilities and requirements with vaQueryVideoProcPipelineCaps().
|
|
153
|
+
* This function can be used to validate the number of reference frames are
|
|
154
|
+
* needed by the specified deinterlacing algorithm, the supported color
|
|
155
|
+
* primaries, etc.
|
|
156
|
+
* \code
|
|
157
|
+
* // Create filters
|
|
158
|
+
* VAProcPipelineCaps pipeline_caps;
|
|
159
|
+
* VASurfaceID *forward_references;
|
|
160
|
+
* unsigned int num_forward_references;
|
|
161
|
+
* VASurfaceID *backward_references;
|
|
162
|
+
* unsigned int num_backward_references;
|
|
163
|
+
* VAProcColorStandardType in_color_standards[VAProcColorStandardCount];
|
|
164
|
+
* VAProcColorStandardType out_color_standards[VAProcColorStandardCount];
|
|
165
|
+
*
|
|
166
|
+
* pipeline_caps.input_color_standards = NULL;
|
|
167
|
+
* pipeline_caps.num_input_color_standards = ARRAY_ELEMS(in_color_standards);
|
|
168
|
+
* pipeline_caps.output_color_standards = NULL;
|
|
169
|
+
* pipeline_caps.num_output_color_standards = ARRAY_ELEMS(out_color_standards);
|
|
170
|
+
* vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx,
|
|
171
|
+
* filter_bufs, num_filter_bufs,
|
|
172
|
+
* &pipeline_caps
|
|
173
|
+
* );
|
|
174
|
+
*
|
|
175
|
+
* num_forward_references = pipeline_caps.num_forward_references;
|
|
176
|
+
* forward_references =
|
|
177
|
+
* malloc(num__forward_references * sizeof(VASurfaceID));
|
|
178
|
+
* num_backward_references = pipeline_caps.num_backward_references;
|
|
179
|
+
* backward_references =
|
|
180
|
+
* malloc(num_backward_references * sizeof(VASurfaceID));
|
|
181
|
+
* \endcode
|
|
182
|
+
*
|
|
183
|
+
* \section api_vpp_submit Send video processing parameters through VA buffers
|
|
184
|
+
*
|
|
185
|
+
* Video processing pipeline parameters are submitted for each source
|
|
186
|
+
* surface to process. Video filter parameters can also change, per-surface.
|
|
187
|
+
* e.g. the list of reference frames used for deinterlacing.
|
|
188
|
+
*
|
|
189
|
+
* \code
|
|
190
|
+
* foreach (iteration) {
|
|
191
|
+
* vaBeginPicture(va_dpy, vpp_ctx, vpp_surface);
|
|
192
|
+
* foreach (surface) {
|
|
193
|
+
* VARectangle output_region;
|
|
194
|
+
* VABufferID pipeline_buf;
|
|
195
|
+
* VAProcPipelineParameterBuffer *pipeline_param;
|
|
196
|
+
*
|
|
197
|
+
* vaCreateBuffer(va_dpy, vpp_ctx,
|
|
198
|
+
* VAProcPipelineParameterBuffer, sizeof(*pipeline_param), 1,
|
|
199
|
+
* NULL, &pipeline_buf
|
|
200
|
+
* );
|
|
201
|
+
*
|
|
202
|
+
* // Setup output region for this surface
|
|
203
|
+
* // e.g. upper left corner for the first surface
|
|
204
|
+
* output_region.x = BORDER;
|
|
205
|
+
* output_region.y = BORDER;
|
|
206
|
+
* output_region.width =
|
|
207
|
+
* (vpp_surface_width - (Nx_surfaces + 1) * BORDER) / Nx_surfaces;
|
|
208
|
+
* output_region.height =
|
|
209
|
+
* (vpp_surface_height - (Ny_surfaces + 1) * BORDER) / Ny_surfaces;
|
|
210
|
+
*
|
|
211
|
+
* vaMapBuffer(va_dpy, pipeline_buf, &pipeline_param);
|
|
212
|
+
* pipeline_param->surface = surface;
|
|
213
|
+
* pipeline_param->surface_region = NULL;
|
|
214
|
+
* pipeline_param->output_region = &output_region;
|
|
215
|
+
* pipeline_param->output_background_color = 0;
|
|
216
|
+
* if (first surface to render)
|
|
217
|
+
* pipeline_param->output_background_color = 0xff000000; // black
|
|
218
|
+
* pipeline_param->filter_flags = VA_FILTER_SCALING_HQ;
|
|
219
|
+
* pipeline_param->filters = filter_bufs;
|
|
220
|
+
* pipeline_param->num_filters = num_filter_bufs;
|
|
221
|
+
* vaUnmapBuffer(va_dpy, pipeline_buf);
|
|
222
|
+
*
|
|
223
|
+
* // Update reference frames for deinterlacing, if necessary
|
|
224
|
+
* pipeline_param->forward_references = forward_references;
|
|
225
|
+
* pipeline_param->num_forward_references = num_forward_references_used;
|
|
226
|
+
* pipeline_param->backward_references = backward_references;
|
|
227
|
+
* pipeline_param->num_backward_references = num_bacward_references_used;
|
|
228
|
+
*
|
|
229
|
+
* // Apply filters
|
|
230
|
+
* vaRenderPicture(va_dpy, vpp_ctx, &pipeline_buf, 1);
|
|
231
|
+
* }
|
|
232
|
+
* vaEndPicture(va_dpy, vpp_ctx);
|
|
233
|
+
* }
|
|
234
|
+
* \endcode
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
/** \brief Video filter types. */
|
|
238
|
+
typedef enum _VAProcFilterType {
|
|
239
|
+
VAProcFilterNone = 0,
|
|
240
|
+
/** \brief Noise reduction filter. */
|
|
241
|
+
VAProcFilterNoiseReduction,
|
|
242
|
+
/** \brief Deinterlacing filter. */
|
|
243
|
+
VAProcFilterDeinterlacing,
|
|
244
|
+
/** \brief Sharpening filter. */
|
|
245
|
+
VAProcFilterSharpening,
|
|
246
|
+
/** \brief Color balance parameters. */
|
|
247
|
+
VAProcFilterColorBalance,
|
|
248
|
+
/** \brief Skin Tone Enhancement. */
|
|
249
|
+
VAProcFilterSkinToneEnhancement,
|
|
250
|
+
/** \brief Total Color Correction. */
|
|
251
|
+
VAProcFilterTotalColorCorrection,
|
|
252
|
+
/** \brief Human Vision System(HVS) Noise reduction filter. */
|
|
253
|
+
VAProcFilterHVSNoiseReduction,
|
|
254
|
+
/** \brief High Dynamic Range Tone Mapping. */
|
|
255
|
+
VAProcFilterHighDynamicRangeToneMapping,
|
|
256
|
+
/** \brief Three-Dimensional Look Up Table (3DLUT). */
|
|
257
|
+
VAProcFilter3DLUT,
|
|
258
|
+
/** \brief Number of video filters. */
|
|
259
|
+
VAProcFilterCount
|
|
260
|
+
} VAProcFilterType;
|
|
261
|
+
|
|
262
|
+
/** \brief Deinterlacing types. */
|
|
263
|
+
typedef enum _VAProcDeinterlacingType {
|
|
264
|
+
VAProcDeinterlacingNone = 0,
|
|
265
|
+
/** \brief Bob deinterlacing algorithm. */
|
|
266
|
+
VAProcDeinterlacingBob,
|
|
267
|
+
/** \brief Weave deinterlacing algorithm. */
|
|
268
|
+
VAProcDeinterlacingWeave,
|
|
269
|
+
/** \brief Motion adaptive deinterlacing algorithm. */
|
|
270
|
+
VAProcDeinterlacingMotionAdaptive,
|
|
271
|
+
/** \brief Motion compensated deinterlacing algorithm. */
|
|
272
|
+
VAProcDeinterlacingMotionCompensated,
|
|
273
|
+
/** \brief Number of deinterlacing algorithms. */
|
|
274
|
+
VAProcDeinterlacingCount
|
|
275
|
+
} VAProcDeinterlacingType;
|
|
276
|
+
|
|
277
|
+
/** \brief Color balance types. */
|
|
278
|
+
typedef enum _VAProcColorBalanceType {
|
|
279
|
+
VAProcColorBalanceNone = 0,
|
|
280
|
+
/** \brief Hue. */
|
|
281
|
+
VAProcColorBalanceHue,
|
|
282
|
+
/** \brief Saturation. */
|
|
283
|
+
VAProcColorBalanceSaturation,
|
|
284
|
+
/** \brief Brightness. */
|
|
285
|
+
VAProcColorBalanceBrightness,
|
|
286
|
+
/** \brief Contrast. */
|
|
287
|
+
VAProcColorBalanceContrast,
|
|
288
|
+
/** \brief Automatically adjusted saturation. */
|
|
289
|
+
VAProcColorBalanceAutoSaturation,
|
|
290
|
+
/** \brief Automatically adjusted brightness. */
|
|
291
|
+
VAProcColorBalanceAutoBrightness,
|
|
292
|
+
/** \brief Automatically adjusted contrast. */
|
|
293
|
+
VAProcColorBalanceAutoContrast,
|
|
294
|
+
/** \brief Number of color balance attributes. */
|
|
295
|
+
VAProcColorBalanceCount
|
|
296
|
+
} VAProcColorBalanceType;
|
|
297
|
+
|
|
298
|
+
/** \brief Color standard types.
|
|
299
|
+
*
|
|
300
|
+
* These define a set of color properties corresponding to particular
|
|
301
|
+
* video standards.
|
|
302
|
+
*
|
|
303
|
+
* Where matrix_coefficients is specified, it applies only to YUV data -
|
|
304
|
+
* RGB data always use the identity matrix (matrix_coefficients = 0).
|
|
305
|
+
*/
|
|
306
|
+
typedef enum _VAProcColorStandardType {
|
|
307
|
+
VAProcColorStandardNone = 0,
|
|
308
|
+
/** \brief ITU-R BT.601.
|
|
309
|
+
*
|
|
310
|
+
* It is unspecified whether this will use 525-line or 625-line values;
|
|
311
|
+
* specify the colour primaries and matrix coefficients explicitly if
|
|
312
|
+
* it is known which one is required.
|
|
313
|
+
*
|
|
314
|
+
* Equivalent to:
|
|
315
|
+
* colour_primaries = 5 or 6
|
|
316
|
+
* transfer_characteristics = 6
|
|
317
|
+
* matrix_coefficients = 5 or 6
|
|
318
|
+
*/
|
|
319
|
+
VAProcColorStandardBT601,
|
|
320
|
+
/** \brief ITU-R BT.709.
|
|
321
|
+
*
|
|
322
|
+
* Equivalent to:
|
|
323
|
+
* colour_primaries = 1
|
|
324
|
+
* transfer_characteristics = 1
|
|
325
|
+
* matrix_coefficients = 1
|
|
326
|
+
*/
|
|
327
|
+
VAProcColorStandardBT709,
|
|
328
|
+
/** \brief ITU-R BT.470-2 System M.
|
|
329
|
+
*
|
|
330
|
+
* Equivalent to:
|
|
331
|
+
* colour_primaries = 4
|
|
332
|
+
* transfer_characteristics = 4
|
|
333
|
+
* matrix_coefficients = 4
|
|
334
|
+
*/
|
|
335
|
+
VAProcColorStandardBT470M,
|
|
336
|
+
/** \brief ITU-R BT.470-2 System B, G.
|
|
337
|
+
*
|
|
338
|
+
* Equivalent to:
|
|
339
|
+
* colour_primaries = 5
|
|
340
|
+
* transfer_characteristics = 5
|
|
341
|
+
* matrix_coefficients = 5
|
|
342
|
+
*/
|
|
343
|
+
VAProcColorStandardBT470BG,
|
|
344
|
+
/** \brief SMPTE-170M.
|
|
345
|
+
*
|
|
346
|
+
* Equivalent to:
|
|
347
|
+
* colour_primaries = 6
|
|
348
|
+
* transfer_characteristics = 6
|
|
349
|
+
* matrix_coefficients = 6
|
|
350
|
+
*/
|
|
351
|
+
VAProcColorStandardSMPTE170M,
|
|
352
|
+
/** \brief SMPTE-240M.
|
|
353
|
+
*
|
|
354
|
+
* Equivalent to:
|
|
355
|
+
* colour_primaries = 7
|
|
356
|
+
* transfer_characteristics = 7
|
|
357
|
+
* matrix_coefficients = 7
|
|
358
|
+
*/
|
|
359
|
+
VAProcColorStandardSMPTE240M,
|
|
360
|
+
/** \brief Generic film.
|
|
361
|
+
*
|
|
362
|
+
* Equivalent to:
|
|
363
|
+
* colour_primaries = 8
|
|
364
|
+
* transfer_characteristics = 1
|
|
365
|
+
* matrix_coefficients = 1
|
|
366
|
+
*/
|
|
367
|
+
VAProcColorStandardGenericFilm,
|
|
368
|
+
/** \brief sRGB.
|
|
369
|
+
*
|
|
370
|
+
* Equivalent to:
|
|
371
|
+
* colour_primaries = 1
|
|
372
|
+
* transfer_characteristics = 13
|
|
373
|
+
* matrix_coefficients = 0
|
|
374
|
+
*/
|
|
375
|
+
VAProcColorStandardSRGB,
|
|
376
|
+
/** \brief stRGB.
|
|
377
|
+
*
|
|
378
|
+
* ???
|
|
379
|
+
*/
|
|
380
|
+
VAProcColorStandardSTRGB,
|
|
381
|
+
/** \brief xvYCC601.
|
|
382
|
+
*
|
|
383
|
+
* Equivalent to:
|
|
384
|
+
* colour_primaries = 1
|
|
385
|
+
* transfer_characteristics = 11
|
|
386
|
+
* matrix_coefficients = 5
|
|
387
|
+
*/
|
|
388
|
+
VAProcColorStandardXVYCC601,
|
|
389
|
+
/** \brief xvYCC709.
|
|
390
|
+
*
|
|
391
|
+
* Equivalent to:
|
|
392
|
+
* colour_primaries = 1
|
|
393
|
+
* transfer_characteristics = 11
|
|
394
|
+
* matrix_coefficients = 1
|
|
395
|
+
*/
|
|
396
|
+
VAProcColorStandardXVYCC709,
|
|
397
|
+
/** \brief ITU-R BT.2020.
|
|
398
|
+
*
|
|
399
|
+
* Equivalent to:
|
|
400
|
+
* colour_primaries = 9
|
|
401
|
+
* transfer_characteristics = 14
|
|
402
|
+
* matrix_coefficients = 9
|
|
403
|
+
*/
|
|
404
|
+
VAProcColorStandardBT2020,
|
|
405
|
+
/** \brief Explicitly specified color properties.
|
|
406
|
+
*
|
|
407
|
+
* Use corresponding color properties section.
|
|
408
|
+
* For example, HDR10 content:
|
|
409
|
+
* colour_primaries = 9 (BT2020)
|
|
410
|
+
* transfer_characteristics = 16 (SMPTE ST2084)
|
|
411
|
+
* matrix_coefficients = 9
|
|
412
|
+
*/
|
|
413
|
+
VAProcColorStandardExplicit,
|
|
414
|
+
/** \brief Number of color standards. */
|
|
415
|
+
VAProcColorStandardCount
|
|
416
|
+
} VAProcColorStandardType;
|
|
417
|
+
|
|
418
|
+
/** \brief Total color correction types. */
|
|
419
|
+
typedef enum _VAProcTotalColorCorrectionType {
|
|
420
|
+
VAProcTotalColorCorrectionNone = 0,
|
|
421
|
+
/** \brief Red Saturation. */
|
|
422
|
+
VAProcTotalColorCorrectionRed,
|
|
423
|
+
/** \brief Green Saturation. */
|
|
424
|
+
VAProcTotalColorCorrectionGreen,
|
|
425
|
+
/** \brief Blue Saturation. */
|
|
426
|
+
VAProcTotalColorCorrectionBlue,
|
|
427
|
+
/** \brief Cyan Saturation. */
|
|
428
|
+
VAProcTotalColorCorrectionCyan,
|
|
429
|
+
/** \brief Magenta Saturation. */
|
|
430
|
+
VAProcTotalColorCorrectionMagenta,
|
|
431
|
+
/** \brief Yellow Saturation. */
|
|
432
|
+
VAProcTotalColorCorrectionYellow,
|
|
433
|
+
/** \brief Number of color correction attributes. */
|
|
434
|
+
VAProcTotalColorCorrectionCount
|
|
435
|
+
} VAProcTotalColorCorrectionType;
|
|
436
|
+
|
|
437
|
+
/** \brief High Dynamic Range Metadata types. */
|
|
438
|
+
typedef enum _VAProcHighDynamicRangeMetadataType {
|
|
439
|
+
VAProcHighDynamicRangeMetadataNone = 0,
|
|
440
|
+
/** \brief Metadata type for HDR10. */
|
|
441
|
+
VAProcHighDynamicRangeMetadataHDR10,
|
|
442
|
+
/** \brief Number of Metadata type. */
|
|
443
|
+
VAProcHighDynamicRangeMetadataTypeCount
|
|
444
|
+
} VAProcHighDynamicRangeMetadataType;
|
|
445
|
+
|
|
446
|
+
/** \brief Video Processing Mode. */
|
|
447
|
+
typedef enum _VAProcMode {
|
|
448
|
+
/**
|
|
449
|
+
* \brief Default Mode.
|
|
450
|
+
* In this mode, pipeline is decided in driver to the appropriate mode.
|
|
451
|
+
* e.g. a mode that's a balance between power and performance.
|
|
452
|
+
*/
|
|
453
|
+
VAProcDefaultMode = 0,
|
|
454
|
+
/**
|
|
455
|
+
* \brief Power Saving Mode.
|
|
456
|
+
* In this mode, pipeline is optimized for power saving.
|
|
457
|
+
*/
|
|
458
|
+
VAProcPowerSavingMode,
|
|
459
|
+
/**
|
|
460
|
+
* \brief Performance Mode.
|
|
461
|
+
* In this mode, pipeline is optimized for performance.
|
|
462
|
+
*/
|
|
463
|
+
VAProcPerformanceMode
|
|
464
|
+
} VAProcMode;
|
|
465
|
+
|
|
466
|
+
/** @name Video blending flags */
|
|
467
|
+
/**@{*/
|
|
468
|
+
/** \brief Global alpha blending. */
|
|
469
|
+
#define VA_BLEND_GLOBAL_ALPHA 0x0001
|
|
470
|
+
/** \brief Premultiplied alpha blending (RGBA surfaces only). */
|
|
471
|
+
#define VA_BLEND_PREMULTIPLIED_ALPHA 0x0002
|
|
472
|
+
/** \brief Luma color key (YUV surfaces only). */
|
|
473
|
+
#define VA_BLEND_LUMA_KEY 0x0010
|
|
474
|
+
/**@}*/
|
|
475
|
+
|
|
476
|
+
/** \brief Video blending state definition. */
|
|
477
|
+
typedef struct _VABlendState {
|
|
478
|
+
/** \brief Video blending flags. */
|
|
479
|
+
unsigned int flags;
|
|
480
|
+
/**
|
|
481
|
+
* \brief Global alpha value.
|
|
482
|
+
*
|
|
483
|
+
* Valid if \ref flags has VA_BLEND_GLOBAL_ALPHA.
|
|
484
|
+
* Valid range is 0.0 to 1.0 inclusive.
|
|
485
|
+
*/
|
|
486
|
+
float global_alpha;
|
|
487
|
+
/**
|
|
488
|
+
* \brief Minimum luma value.
|
|
489
|
+
*
|
|
490
|
+
* Valid if \ref flags has VA_BLEND_LUMA_KEY.
|
|
491
|
+
* Valid range is 0.0 to 1.0 inclusive.
|
|
492
|
+
* \ref min_luma shall be set to a sensible value lower than \ref max_luma.
|
|
493
|
+
*/
|
|
494
|
+
float min_luma;
|
|
495
|
+
/**
|
|
496
|
+
* \brief Maximum luma value.
|
|
497
|
+
*
|
|
498
|
+
* Valid if \ref flags has VA_BLEND_LUMA_KEY.
|
|
499
|
+
* Valid range is 0.0 to 1.0 inclusive.
|
|
500
|
+
* \ref max_luma shall be set to a sensible value larger than \ref min_luma.
|
|
501
|
+
*/
|
|
502
|
+
float max_luma;
|
|
503
|
+
} VABlendState;
|
|
504
|
+
|
|
505
|
+
/** @name Video pipeline flags */
|
|
506
|
+
/**@{*/
|
|
507
|
+
/** \brief Specifies whether to apply subpictures when processing a surface. */
|
|
508
|
+
#define VA_PROC_PIPELINE_SUBPICTURES 0x00000001
|
|
509
|
+
/**
|
|
510
|
+
* \brief Specifies whether to apply power or performance
|
|
511
|
+
* optimizations to a pipeline.
|
|
512
|
+
*
|
|
513
|
+
* When processing several surfaces, it may be necessary to prioritize
|
|
514
|
+
* more certain pipelines than others. This flag is only a hint to the
|
|
515
|
+
* video processor so that it can omit certain filters to save power
|
|
516
|
+
* for example. Typically, this flag could be used with video surfaces
|
|
517
|
+
* decoded from a secondary bitstream.
|
|
518
|
+
*/
|
|
519
|
+
#define VA_PROC_PIPELINE_FAST 0x00000002
|
|
520
|
+
/**@}*/
|
|
521
|
+
|
|
522
|
+
/** @name Video filter flags */
|
|
523
|
+
/**@{*/
|
|
524
|
+
/** \brief Specifies whether the filter shall be present in the pipeline. */
|
|
525
|
+
#define VA_PROC_FILTER_MANDATORY 0x00000001
|
|
526
|
+
/**@}*/
|
|
527
|
+
|
|
528
|
+
/** @name Pipeline end flags */
|
|
529
|
+
/**@{*/
|
|
530
|
+
/** \brief Specifies the pipeline is the last. */
|
|
531
|
+
#define VA_PIPELINE_FLAG_END 0x00000004
|
|
532
|
+
/**@}*/
|
|
533
|
+
|
|
534
|
+
/** @name Chroma Siting flag */
|
|
535
|
+
/**@{*/
|
|
536
|
+
/** vertical chroma sitting take bit 0-1, horizontal chroma sitting take bit 2-3
|
|
537
|
+
* vertical chromma siting | horizontal chroma sitting to be chroma sitting */
|
|
538
|
+
#define VA_CHROMA_SITING_UNKNOWN 0x00
|
|
539
|
+
/** \brief Chroma samples are co-sited vertically on the top with the luma samples. */
|
|
540
|
+
#define VA_CHROMA_SITING_VERTICAL_TOP 0x01
|
|
541
|
+
/** \brief Chroma samples are not co-sited vertically with the luma samples. */
|
|
542
|
+
#define VA_CHROMA_SITING_VERTICAL_CENTER 0x02
|
|
543
|
+
/** \brief Chroma samples are co-sited vertically on the bottom with the luma samples. */
|
|
544
|
+
#define VA_CHROMA_SITING_VERTICAL_BOTTOM 0x03
|
|
545
|
+
/** \brief Chroma samples are co-sited horizontally on the left with the luma samples. */
|
|
546
|
+
#define VA_CHROMA_SITING_HORIZONTAL_LEFT 0x04
|
|
547
|
+
/** \brief Chroma samples are not co-sited horizontally with the luma samples. */
|
|
548
|
+
#define VA_CHROMA_SITING_HORIZONTAL_CENTER 0x08
|
|
549
|
+
/**@}*/
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* This is to indicate that the color-space conversion uses full range or reduced range.
|
|
553
|
+
* VA_SOURCE_RANGE_FULL(Full range): Y/Cb/Cr is in [0, 255]. It is mainly used
|
|
554
|
+
* for JPEG/JFIF formats. The combination with the BT601 flag means that
|
|
555
|
+
* JPEG/JFIF color-space conversion matrix is used.
|
|
556
|
+
* VA_SOURCE_RANGE_REDUCED(Reduced range): Y is in [16, 235] and Cb/Cr is in [16, 240].
|
|
557
|
+
* It is mainly used for the YUV->RGB color-space conversion in SDTV/HDTV/UHDTV.
|
|
558
|
+
*/
|
|
559
|
+
#define VA_SOURCE_RANGE_UNKNOWN 0
|
|
560
|
+
#define VA_SOURCE_RANGE_REDUCED 1
|
|
561
|
+
#define VA_SOURCE_RANGE_FULL 2
|
|
562
|
+
|
|
563
|
+
/** @name Tone Mapping flags multiple HDR mode*/
|
|
564
|
+
/**@{*/
|
|
565
|
+
/** \brief Tone Mapping from HDR content to HDR display. */
|
|
566
|
+
#define VA_TONE_MAPPING_HDR_TO_HDR 0x0001
|
|
567
|
+
/** \brief Tone Mapping from HDR content to SDR display. */
|
|
568
|
+
#define VA_TONE_MAPPING_HDR_TO_SDR 0x0002
|
|
569
|
+
/** \brief Tone Mapping from HDR content to EDR display. */
|
|
570
|
+
#define VA_TONE_MAPPING_HDR_TO_EDR 0x0004
|
|
571
|
+
/** \brief Tone Mapping from SDR content to HDR display. */
|
|
572
|
+
#define VA_TONE_MAPPING_SDR_TO_HDR 0x0008
|
|
573
|
+
/**@}*/
|
|
574
|
+
|
|
575
|
+
/** \brief Video processing pipeline capabilities. */
|
|
576
|
+
typedef struct _VAProcPipelineCaps {
|
|
577
|
+
/** \brief Pipeline flags. See VAProcPipelineParameterBuffer::pipeline_flags. */
|
|
578
|
+
uint32_t pipeline_flags;
|
|
579
|
+
/** \brief Extra filter flags. See VAProcPipelineParameterBuffer::filter_flags. */
|
|
580
|
+
uint32_t filter_flags;
|
|
581
|
+
/** \brief Number of forward reference frames that are needed. */
|
|
582
|
+
uint32_t num_forward_references;
|
|
583
|
+
/** \brief Number of backward reference frames that are needed. */
|
|
584
|
+
uint32_t num_backward_references;
|
|
585
|
+
/** \brief List of color standards supported on input. */
|
|
586
|
+
VAProcColorStandardType *input_color_standards;
|
|
587
|
+
/** \brief Number of elements in \ref input_color_standards array. */
|
|
588
|
+
uint32_t num_input_color_standards;
|
|
589
|
+
/** \brief List of color standards supported on output. */
|
|
590
|
+
VAProcColorStandardType *output_color_standards;
|
|
591
|
+
/** \brief Number of elements in \ref output_color_standards array. */
|
|
592
|
+
uint32_t num_output_color_standards;
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* \brief Rotation flags.
|
|
596
|
+
*
|
|
597
|
+
* For each rotation angle supported by the underlying hardware,
|
|
598
|
+
* the corresponding bit is set in \ref rotation_flags. See
|
|
599
|
+
* "Rotation angles" for a description of rotation angles.
|
|
600
|
+
*
|
|
601
|
+
* A value of 0 means the underlying hardware does not support any
|
|
602
|
+
* rotation. Otherwise, a check for a specific rotation angle can be
|
|
603
|
+
* performed as follows:
|
|
604
|
+
*
|
|
605
|
+
* \code
|
|
606
|
+
* VAProcPipelineCaps pipeline_caps;
|
|
607
|
+
* ...
|
|
608
|
+
* vaQueryVideoProcPipelineCaps(va_dpy, vpp_ctx,
|
|
609
|
+
* filter_bufs, num_filter_bufs,
|
|
610
|
+
* &pipeline_caps
|
|
611
|
+
* );
|
|
612
|
+
* ...
|
|
613
|
+
* if (pipeline_caps.rotation_flags & (1 << VA_ROTATION_xxx)) {
|
|
614
|
+
* // Clockwise rotation by xxx degrees is supported
|
|
615
|
+
* ...
|
|
616
|
+
* }
|
|
617
|
+
* \endcode
|
|
618
|
+
*/
|
|
619
|
+
uint32_t rotation_flags;
|
|
620
|
+
/** \brief Blend flags. See "Video blending flags". */
|
|
621
|
+
uint32_t blend_flags;
|
|
622
|
+
/**
|
|
623
|
+
* \brief Mirroring flags.
|
|
624
|
+
*
|
|
625
|
+
* For each mirroring direction supported by the underlying hardware,
|
|
626
|
+
* the corresponding bit is set in \ref mirror_flags. See
|
|
627
|
+
* "Mirroring directions" for a description of mirroring directions.
|
|
628
|
+
*
|
|
629
|
+
*/
|
|
630
|
+
uint32_t mirror_flags;
|
|
631
|
+
/** \brief Number of additional output surfaces supported by the pipeline */
|
|
632
|
+
uint32_t num_additional_outputs;
|
|
633
|
+
|
|
634
|
+
/** \brief Number of elements in \ref input_pixel_format array. */
|
|
635
|
+
uint32_t num_input_pixel_formats;
|
|
636
|
+
/** \brief List of input pixel formats in fourcc. */
|
|
637
|
+
uint32_t *input_pixel_format;
|
|
638
|
+
/** \brief Number of elements in \ref output_pixel_format array. */
|
|
639
|
+
uint32_t num_output_pixel_formats;
|
|
640
|
+
/** \brief List of output pixel formats in fourcc. */
|
|
641
|
+
uint32_t *output_pixel_format;
|
|
642
|
+
|
|
643
|
+
/** \brief Max supported input width in pixels. */
|
|
644
|
+
uint32_t max_input_width;
|
|
645
|
+
/** \brief Max supported input height in pixels. */
|
|
646
|
+
uint32_t max_input_height;
|
|
647
|
+
/** \brief Min supported input width in pixels. */
|
|
648
|
+
uint32_t min_input_width;
|
|
649
|
+
/** \brief Min supported input height in pixels. */
|
|
650
|
+
uint32_t min_input_height;
|
|
651
|
+
|
|
652
|
+
/** \brief Max supported output width in pixels. */
|
|
653
|
+
uint32_t max_output_width;
|
|
654
|
+
/** \brief Max supported output height in pixels. */
|
|
655
|
+
uint32_t max_output_height;
|
|
656
|
+
/** \brief Min supported output width in pixels. */
|
|
657
|
+
uint32_t min_output_width;
|
|
658
|
+
/** \brief Min supported output height in pixels. */
|
|
659
|
+
uint32_t min_output_height;
|
|
660
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
661
|
+
#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__) || defined(__LP64__)
|
|
662
|
+
uint32_t va_reserved[VA_PADDING_HIGH - 2];
|
|
663
|
+
#else
|
|
664
|
+
uint32_t va_reserved[VA_PADDING_HIGH];
|
|
665
|
+
#endif
|
|
666
|
+
} VAProcPipelineCaps;
|
|
667
|
+
|
|
668
|
+
/** \brief Specification of values supported by the filter. */
|
|
669
|
+
typedef struct _VAProcFilterValueRange {
|
|
670
|
+
/** \brief Minimum value supported, inclusive. */
|
|
671
|
+
float min_value;
|
|
672
|
+
/** \brief Maximum value supported, inclusive. */
|
|
673
|
+
float max_value;
|
|
674
|
+
/** \brief Default value. */
|
|
675
|
+
float default_value;
|
|
676
|
+
/** \brief Step value that alters the filter behaviour in a sensible way. */
|
|
677
|
+
float step;
|
|
678
|
+
|
|
679
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
680
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
681
|
+
} VAProcFilterValueRange;
|
|
682
|
+
|
|
683
|
+
typedef struct _VAProcColorProperties {
|
|
684
|
+
/** Chroma sample location.\c VA_CHROMA_SITING_VERTICAL_XXX | VA_CHROMA_SITING_HORIZONTAL_XXX */
|
|
685
|
+
uint8_t chroma_sample_location;
|
|
686
|
+
/** Color range. \c VA_SOURCE_RANGE_XXX*/
|
|
687
|
+
uint8_t color_range;
|
|
688
|
+
/** Colour primaries.
|
|
689
|
+
*
|
|
690
|
+
* See ISO/IEC 23001-8 or ITU H.273, section 8.1 and table 2.
|
|
691
|
+
* Only used if the color standard in use is \c VAColorStandardExplicit.
|
|
692
|
+
* Below list the typical colour primaries for the reference.
|
|
693
|
+
* ---------------------------------------------------------------------------------
|
|
694
|
+
* | Value | Primaries | Informative Remark |
|
|
695
|
+
* --------------------------------------------------------------------------------
|
|
696
|
+
* | 1 |primary x y |Rec.ITU-R BT.709-5 |
|
|
697
|
+
* | |green 0.300 0.600 |IEC 61966-2-1(sRGB or sYCC) |
|
|
698
|
+
* | |blue 0.150 0.060 | |
|
|
699
|
+
* | |red 0.640 0.330 | |
|
|
700
|
+
* | |whiteD65 0.3127 0.3290 | |
|
|
701
|
+
* ---------------------------------------------------------------------------------
|
|
702
|
+
* | 6 |primary x y |Rec.ITU-R BT.601-6 525 |
|
|
703
|
+
* | |green 0.310 0.595 | |
|
|
704
|
+
* | |blue 0.155 0.070 | |
|
|
705
|
+
* | |red 0.630 0.340 | |
|
|
706
|
+
* | |whiteD65 0.3127 0.3290 | |
|
|
707
|
+
* ---------------------------------------------------------------------------------
|
|
708
|
+
* | 9 |primary x y |Rec.ITU-R BT.2020 |
|
|
709
|
+
* | |green 0.170 0.797 | |
|
|
710
|
+
* | |blue 0.131 0.046 | |
|
|
711
|
+
* | |red 0.708 0.292 | |
|
|
712
|
+
* | |whiteD65 0.3127 0.3290 | |
|
|
713
|
+
* ---------------------------------------------------------------------------------
|
|
714
|
+
*/
|
|
715
|
+
uint8_t colour_primaries;
|
|
716
|
+
/** Transfer characteristics.
|
|
717
|
+
*
|
|
718
|
+
* See ISO/IEC 23001-8 or ITU H.273, section 8.2 and table 3.
|
|
719
|
+
* Only used if the color standard in use is \c VAColorStandardExplicit.
|
|
720
|
+
* Below list the typical transfer characteristics for the reference.
|
|
721
|
+
* -----------------------------------------------------------
|
|
722
|
+
* | Value | Informative Remark |
|
|
723
|
+
* -----------------------------------------------------------
|
|
724
|
+
* | 1 |Rec.ITU-R BT.709-5 |
|
|
725
|
+
* | |colour gamut system |
|
|
726
|
+
* -----------------------------------------------------------
|
|
727
|
+
* | 4 |Assumed display gamma 2.2 |
|
|
728
|
+
* -----------------------------------------------------------
|
|
729
|
+
* | 6 |Rec.ITU-R BT.601-6 525 or 625 |
|
|
730
|
+
* -----------------------------------------------------------
|
|
731
|
+
* | 8 |Linear transfer characteristics |
|
|
732
|
+
* -----------------------------------------------------------
|
|
733
|
+
* | 13 |IEC 61966-2-1(sRGB or sYCC) |
|
|
734
|
+
* -----------------------------------------------------------
|
|
735
|
+
* | 14,15 |Rec.ITU-R BT.2020 |
|
|
736
|
+
* -----------------------------------------------------------
|
|
737
|
+
* | 16 |SMPTE ST 2084 for 10,12,14 and 16bit system |
|
|
738
|
+
* -----------------------------------------------------------
|
|
739
|
+
*/
|
|
740
|
+
uint8_t transfer_characteristics;
|
|
741
|
+
/** Matrix coefficients.
|
|
742
|
+
*
|
|
743
|
+
* See ISO/IEC 23001-8 or ITU H.273, section 8.3 and table 4.
|
|
744
|
+
* Only used if the color standard in use is \c VAColorStandardExplicit.
|
|
745
|
+
*/
|
|
746
|
+
uint8_t matrix_coefficients;
|
|
747
|
+
/** Reserved bytes for future use, must be zero. */
|
|
748
|
+
uint8_t reserved[3];
|
|
749
|
+
} VAProcColorProperties;
|
|
750
|
+
|
|
751
|
+
/** \brief Describes High Dynamic Range Meta Data for HDR10.
|
|
752
|
+
*
|
|
753
|
+
* Specifies the colour volume(the colour primaries, white point and luminance range) of
|
|
754
|
+
* a display considered to be the mastering display for the associated video content -e.g.,
|
|
755
|
+
* the colour volume of a display that was used for viewing while authoring the video content.
|
|
756
|
+
* See ITU-T H.265 D.3.27 Mastering display colour volume SEI message semantics.
|
|
757
|
+
*
|
|
758
|
+
* Specifies upper bounds for the nominal light level of the content. See ITU-T H.265 D.3.35
|
|
759
|
+
* Content light level information SEI message semantics.
|
|
760
|
+
*
|
|
761
|
+
* This structure can be used to indicate the HDR10 metadata for 1) the content which was authored;
|
|
762
|
+
* 2) the display on which the content will be presented. If it is for display, max_content_light_level
|
|
763
|
+
* and max_pic_average_light_level are ignored.
|
|
764
|
+
*/
|
|
765
|
+
typedef struct _VAHdrMetaDataHDR10 {
|
|
766
|
+
/**
|
|
767
|
+
* \brief X chromaticity coordinate of the mastering display.
|
|
768
|
+
*
|
|
769
|
+
* Index value c equal to 0 should correspond to the green primary.
|
|
770
|
+
* Index value c equal to 1 should correspond to the blue primary.
|
|
771
|
+
* Index value c equal to 2 should correspond to the red primary.
|
|
772
|
+
* The value for display_primaries_x shall be in the range of 0 to 50000 inclusive.
|
|
773
|
+
*/
|
|
774
|
+
uint16_t display_primaries_x[3];
|
|
775
|
+
/**
|
|
776
|
+
* \brief Y chromaticity coordinate of the mastering display.
|
|
777
|
+
*
|
|
778
|
+
* Index value c equal to 0 should correspond to the green primary.
|
|
779
|
+
* Index value c equal to 1 should correspond to the blue primary.
|
|
780
|
+
* Index value c equal to 2 should correspond to the red primary.
|
|
781
|
+
* The value for display_primaries_y shall be in the range of 0 to 50000 inclusive.
|
|
782
|
+
*/
|
|
783
|
+
uint16_t display_primaries_y[3];
|
|
784
|
+
/**
|
|
785
|
+
* \brief X chromaticity coordinate of the white point of the mastering display.
|
|
786
|
+
*
|
|
787
|
+
* The value for white_point_x shall be in the range of 0 to 50000 inclusive.
|
|
788
|
+
*/
|
|
789
|
+
uint16_t white_point_x;
|
|
790
|
+
/**
|
|
791
|
+
* \brief Y chromaticity coordinate of the white point of the mastering display.
|
|
792
|
+
*
|
|
793
|
+
* The value for white_point_y shall be in the range of 0 to 50000 inclusive.
|
|
794
|
+
*/
|
|
795
|
+
uint16_t white_point_y;
|
|
796
|
+
/**
|
|
797
|
+
* \brief The maximum display luminance of the mastering display.
|
|
798
|
+
*
|
|
799
|
+
* The value is in units of 0.0001 candelas per square metre.
|
|
800
|
+
*/
|
|
801
|
+
uint32_t max_display_mastering_luminance;
|
|
802
|
+
/**
|
|
803
|
+
* \brief The minumum display luminance of the mastering display.
|
|
804
|
+
*
|
|
805
|
+
* The value is in units of 0.0001 candelas per square metre.
|
|
806
|
+
*/
|
|
807
|
+
uint32_t min_display_mastering_luminance;
|
|
808
|
+
/**
|
|
809
|
+
* \brief The maximum content light level (MaxCLL).
|
|
810
|
+
*
|
|
811
|
+
* The value is in units of 1 candelas per square metre.
|
|
812
|
+
*/
|
|
813
|
+
uint16_t max_content_light_level;
|
|
814
|
+
/**
|
|
815
|
+
* \brief The maximum picture average light level (MaxFALL).
|
|
816
|
+
*
|
|
817
|
+
* The value is in units of 1 candelas per square metre.
|
|
818
|
+
*/
|
|
819
|
+
uint16_t max_pic_average_light_level;
|
|
820
|
+
/** Resevered */
|
|
821
|
+
uint16_t reserved[VA_PADDING_HIGH];
|
|
822
|
+
} VAHdrMetaDataHDR10;
|
|
823
|
+
|
|
824
|
+
/** \brief Capabilities specification for the High Dynamic Range filter. */
|
|
825
|
+
typedef struct _VAProcFilterCapHighDynamicRange {
|
|
826
|
+
/** \brief high dynamic range type. */
|
|
827
|
+
VAProcHighDynamicRangeMetadataType metadata_type;
|
|
828
|
+
/**
|
|
829
|
+
* \brief flag for high dynamic range tone mapping
|
|
830
|
+
*
|
|
831
|
+
* The flag is the combination of VA_TONE_MAPPING_XXX_TO_XXX.
|
|
832
|
+
* It could be VA_TONE_MAPPING_HDR_TO_HDR | VA_TONE_MAPPING_HDR_TO_SDR.
|
|
833
|
+
* SDR content to SDR display is always supported by default since it is legacy path.
|
|
834
|
+
*/
|
|
835
|
+
uint16_t caps_flag;
|
|
836
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
837
|
+
uint16_t va_reserved[VA_PADDING_HIGH];
|
|
838
|
+
} VAProcFilterCapHighDynamicRange;
|
|
839
|
+
|
|
840
|
+
/** \brief High Dynamic Range Meta Data. */
|
|
841
|
+
typedef struct _VAHdrMetaData {
|
|
842
|
+
/** \brief high dynamic range metadata type, HDR10 etc. */
|
|
843
|
+
VAProcHighDynamicRangeMetadataType metadata_type;
|
|
844
|
+
/**
|
|
845
|
+
* \brief Pointer to high dynamic range metadata.
|
|
846
|
+
*
|
|
847
|
+
* The pointer could point to VAHdrMetaDataHDR10 or other HDR meta data.
|
|
848
|
+
*/
|
|
849
|
+
void* metadata;
|
|
850
|
+
/**
|
|
851
|
+
* \brief Size of high dynamic range metadata.
|
|
852
|
+
*/
|
|
853
|
+
uint32_t metadata_size;
|
|
854
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
855
|
+
uint32_t reserved[VA_PADDING_LOW];
|
|
856
|
+
} VAHdrMetaData;
|
|
857
|
+
|
|
858
|
+
/**
|
|
859
|
+
* \brief Video processing pipeline configuration.
|
|
860
|
+
*
|
|
861
|
+
* This buffer defines a video processing pipeline. The actual filters to
|
|
862
|
+
* be applied are provided in the \c filters field, they can be re-used
|
|
863
|
+
* in other processing pipelines.
|
|
864
|
+
*
|
|
865
|
+
* The target surface is specified by the \c render_target argument of
|
|
866
|
+
* \c vaBeginPicture(). The general usage model is described as follows:
|
|
867
|
+
* - \c vaBeginPicture(): specify the target surface that receives the
|
|
868
|
+
* processed output;
|
|
869
|
+
* - \c vaRenderPicture(): specify a surface to be processed and composed
|
|
870
|
+
* into the \c render_target. Use as many \c vaRenderPicture() calls as
|
|
871
|
+
* necessary surfaces to compose ;
|
|
872
|
+
* - \c vaEndPicture(): tell the driver to start processing the surfaces
|
|
873
|
+
* with the requested filters.
|
|
874
|
+
*
|
|
875
|
+
* If a filter (e.g. noise reduction) needs to be applied with different
|
|
876
|
+
* values for multiple surfaces, the application needs to create as many
|
|
877
|
+
* filter parameter buffers as necessary. i.e. the filter parameters shall
|
|
878
|
+
* not change between two calls to \c vaRenderPicture().
|
|
879
|
+
*
|
|
880
|
+
* For composition usage models, the first surface to process will generally
|
|
881
|
+
* use an opaque background color, i.e. \c output_background_color set with
|
|
882
|
+
* the most significant byte set to \c 0xff. For instance, \c 0xff000000 for
|
|
883
|
+
* a black background. Then, subsequent surfaces would use a transparent
|
|
884
|
+
* background color.
|
|
885
|
+
*/
|
|
886
|
+
typedef struct _VAProcPipelineParameterBuffer {
|
|
887
|
+
/**
|
|
888
|
+
* \brief Source surface ID.
|
|
889
|
+
*
|
|
890
|
+
* ID of the source surface to process. If subpictures are associated
|
|
891
|
+
* with the video surfaces then they shall be rendered to the target
|
|
892
|
+
* surface, if the #VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set.
|
|
893
|
+
*/
|
|
894
|
+
VASurfaceID surface;
|
|
895
|
+
/**
|
|
896
|
+
* \brief Region within the source surface to be processed.
|
|
897
|
+
*
|
|
898
|
+
* Pointer to a #VARectangle defining the region within the source
|
|
899
|
+
* surface to be processed. If NULL, \c surface_region implies the
|
|
900
|
+
* whole surface.
|
|
901
|
+
*/
|
|
902
|
+
const VARectangle *surface_region;
|
|
903
|
+
/**
|
|
904
|
+
* \brief Requested input color standard.
|
|
905
|
+
*
|
|
906
|
+
* Color properties are implicitly converted throughout the processing
|
|
907
|
+
* pipeline. The video processor chooses the best moment to apply
|
|
908
|
+
* this conversion. The set of supported color standards for input shall
|
|
909
|
+
* be queried with vaQueryVideoProcPipelineCaps().
|
|
910
|
+
*
|
|
911
|
+
* If this is set to VAProcColorStandardExplicit, the color properties
|
|
912
|
+
* are specified explicitly in input_color_properties instead.
|
|
913
|
+
*/
|
|
914
|
+
VAProcColorStandardType surface_color_standard;
|
|
915
|
+
/**
|
|
916
|
+
* \brief Region within the output surface.
|
|
917
|
+
*
|
|
918
|
+
* Pointer to a #VARectangle defining the region within the output
|
|
919
|
+
* surface that receives the processed pixels. If NULL, \c output_region
|
|
920
|
+
* implies the whole surface.
|
|
921
|
+
*
|
|
922
|
+
* Note that any pixels residing outside the specified region will
|
|
923
|
+
* be filled in with the \ref output_background_color.
|
|
924
|
+
*/
|
|
925
|
+
const VARectangle *output_region;
|
|
926
|
+
/**
|
|
927
|
+
* \brief Background color.
|
|
928
|
+
*
|
|
929
|
+
* Background color used to fill in pixels that reside outside of the
|
|
930
|
+
* specified \ref output_region. The color is specified in ARGB format:
|
|
931
|
+
* [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue.
|
|
932
|
+
*
|
|
933
|
+
* Unless the alpha value is zero or the \ref output_region represents
|
|
934
|
+
* the whole target surface size, implementations shall not render the
|
|
935
|
+
* source surface to the target surface directly. Rather, in order to
|
|
936
|
+
* maintain the exact semantics of \ref output_background_color, the
|
|
937
|
+
* driver shall use a temporary surface and fill it in with the
|
|
938
|
+
* appropriate background color. Next, the driver will blend this
|
|
939
|
+
* temporary surface into the target surface.
|
|
940
|
+
*/
|
|
941
|
+
uint32_t output_background_color;
|
|
942
|
+
/**
|
|
943
|
+
* \brief Requested output color standard.
|
|
944
|
+
*
|
|
945
|
+
* If this is set to VAProcColorStandardExplicit, the color properties
|
|
946
|
+
* are specified explicitly in output_color_properties instead.
|
|
947
|
+
*/
|
|
948
|
+
VAProcColorStandardType output_color_standard;
|
|
949
|
+
/**
|
|
950
|
+
* \brief Pipeline filters. See video pipeline flags.
|
|
951
|
+
*
|
|
952
|
+
* Flags to control the pipeline, like whether to apply subpictures
|
|
953
|
+
* or not, notify the driver that it can opt for power optimizations,
|
|
954
|
+
* should this be needed.
|
|
955
|
+
*/
|
|
956
|
+
uint32_t pipeline_flags;
|
|
957
|
+
/**
|
|
958
|
+
* \brief Extra filter flags. See vaPutSurface() flags.
|
|
959
|
+
*
|
|
960
|
+
* Filter flags are used as a fast path, wherever possible, to use
|
|
961
|
+
* vaPutSurface() flags instead of explicit filter parameter buffers.
|
|
962
|
+
*
|
|
963
|
+
* Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps()
|
|
964
|
+
* to check for implementation details:
|
|
965
|
+
* - Bob-deinterlacing: \c VA_FRAME_PICTURE, \c VA_TOP_FIELD,
|
|
966
|
+
* \c VA_BOTTOM_FIELD. Note that any deinterlacing filter
|
|
967
|
+
* (#VAProcFilterDeinterlacing) will override those flags.
|
|
968
|
+
* - Color space conversion: \c VA_SRC_BT601, \c VA_SRC_BT709,
|
|
969
|
+
* \c VA_SRC_SMPTE_240.
|
|
970
|
+
* - Scaling: \c VA_FILTER_SCALING_DEFAULT, \c VA_FILTER_SCALING_FAST,
|
|
971
|
+
* \c VA_FILTER_SCALING_HQ, \c VA_FILTER_SCALING_NL_ANAMORPHIC.
|
|
972
|
+
* - Interpolation Method: \c VA_FILTER_INTERPOLATION_DEFAULT,
|
|
973
|
+
* \c VA_FILTER_INTERPOLATION_NEAREST_NEIGHBOR,
|
|
974
|
+
* \c VA_FILTER_INTERPOLATION_BILINEAR, \c VA_FILTER_INTERPOLATION_ADVANCED.
|
|
975
|
+
*/
|
|
976
|
+
uint32_t filter_flags;
|
|
977
|
+
/**
|
|
978
|
+
* \brief Array of filters to apply to the surface.
|
|
979
|
+
*
|
|
980
|
+
* The list of filters shall be ordered in the same way the driver expects
|
|
981
|
+
* them. i.e. as was returned from vaQueryVideoProcFilters().
|
|
982
|
+
* Otherwise, a #VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned
|
|
983
|
+
* from vaRenderPicture() with this buffer.
|
|
984
|
+
*
|
|
985
|
+
* #VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list
|
|
986
|
+
* contains an unsupported filter.
|
|
987
|
+
*
|
|
988
|
+
*/
|
|
989
|
+
VABufferID *filters;
|
|
990
|
+
/** \brief Actual number of filters. */
|
|
991
|
+
uint32_t num_filters;
|
|
992
|
+
/** \brief Array of forward reference frames (past frames). */
|
|
993
|
+
VASurfaceID *forward_references;
|
|
994
|
+
/** \brief Number of forward reference frames that were supplied. */
|
|
995
|
+
uint32_t num_forward_references;
|
|
996
|
+
/** \brief Array of backward reference frames (future frames). */
|
|
997
|
+
VASurfaceID *backward_references;
|
|
998
|
+
/** \brief Number of backward reference frames that were supplied. */
|
|
999
|
+
uint32_t num_backward_references;
|
|
1000
|
+
/**
|
|
1001
|
+
* \brief Rotation state. See rotation angles.
|
|
1002
|
+
*
|
|
1003
|
+
* The rotation angle is clockwise. There is no specific rotation
|
|
1004
|
+
* center for this operation. Rather, The source \ref surface is
|
|
1005
|
+
* first rotated by the specified angle and then scaled to fit the
|
|
1006
|
+
* \ref output_region.
|
|
1007
|
+
*
|
|
1008
|
+
* This means that the top-left hand corner (0,0) of the output
|
|
1009
|
+
* (rotated) surface is expressed as follows:
|
|
1010
|
+
* - \ref VA_ROTATION_NONE: (0,0) is the top left corner of the
|
|
1011
|
+
* source surface -- no rotation is performed ;
|
|
1012
|
+
* - \ref VA_ROTATION_90: (0,0) is the bottom-left corner of the
|
|
1013
|
+
* source surface ;
|
|
1014
|
+
* - \ref VA_ROTATION_180: (0,0) is the bottom-right corner of the
|
|
1015
|
+
* source surface -- the surface is flipped around the X axis ;
|
|
1016
|
+
* - \ref VA_ROTATION_270: (0,0) is the top-right corner of the
|
|
1017
|
+
* source surface.
|
|
1018
|
+
*
|
|
1019
|
+
* Check VAProcPipelineCaps::rotation_flags first prior to
|
|
1020
|
+
* defining a specific rotation angle. Otherwise, the hardware can
|
|
1021
|
+
* perfectly ignore this variable if it does not support any
|
|
1022
|
+
* rotation.
|
|
1023
|
+
*/
|
|
1024
|
+
uint32_t rotation_state;
|
|
1025
|
+
/**
|
|
1026
|
+
* \brief blending state. See "Video blending state definition".
|
|
1027
|
+
*
|
|
1028
|
+
* If \ref blend_state is NULL, then default operation mode depends
|
|
1029
|
+
* on the source \ref surface format:
|
|
1030
|
+
* - RGB: per-pixel alpha blending ;
|
|
1031
|
+
* - YUV: no blending, i.e override the underlying pixels.
|
|
1032
|
+
*
|
|
1033
|
+
* Otherwise, \ref blend_state is a pointer to a #VABlendState
|
|
1034
|
+
* structure that shall be live until vaEndPicture().
|
|
1035
|
+
*
|
|
1036
|
+
* Implementation note: the driver is responsible for checking the
|
|
1037
|
+
* blend state flags against the actual source \ref surface format.
|
|
1038
|
+
* e.g. premultiplied alpha blending is only applicable to RGB
|
|
1039
|
+
* surfaces, and luma keying is only applicable to YUV surfaces.
|
|
1040
|
+
* If a mismatch occurs, then #VA_STATUS_ERROR_INVALID_BLEND_STATE
|
|
1041
|
+
* is returned.
|
|
1042
|
+
*/
|
|
1043
|
+
const VABlendState *blend_state;
|
|
1044
|
+
/**
|
|
1045
|
+
* \brief mirroring state. See "Mirroring directions".
|
|
1046
|
+
*
|
|
1047
|
+
* Mirroring of an image can be performed either along the
|
|
1048
|
+
* horizontal or vertical axis. It is assumed that the rotation
|
|
1049
|
+
* operation is always performed before the mirroring operation.
|
|
1050
|
+
*/
|
|
1051
|
+
uint32_t mirror_state;
|
|
1052
|
+
/** \brief Array of additional output surfaces. */
|
|
1053
|
+
VASurfaceID *additional_outputs;
|
|
1054
|
+
/** \brief Number of additional output surfaces. */
|
|
1055
|
+
uint32_t num_additional_outputs;
|
|
1056
|
+
/**
|
|
1057
|
+
* \brief Flag to indicate the input surface flag
|
|
1058
|
+
*
|
|
1059
|
+
* bit0~3: Surface sample type
|
|
1060
|
+
* - 0000: Progressive --> VA_FRAME_PICTURE
|
|
1061
|
+
* - 0001: Single Top Field --> VA_TOP_FIELD
|
|
1062
|
+
* - 0010: Single Bottom Field --> VA_BOTTOM_FIELD
|
|
1063
|
+
* - 0100: Interleaved Top Field First --> VA_TOP_FIELD_FIRST
|
|
1064
|
+
* - 1000: Interleaved Bottom Field First --> VA_BOTTOM_FIELD_FIRST
|
|
1065
|
+
*
|
|
1066
|
+
* For interlaced scaling, examples as follow:
|
|
1067
|
+
* - 1. Interleaved to Interleaved (Suppose input is top field first)
|
|
1068
|
+
* -- set input_surface_flag as VA_TOP_FIELD_FIRST
|
|
1069
|
+
* -- set output_surface_flag as VA_TOP_FIELD_FIRST
|
|
1070
|
+
* - 2. Interleaved to Field (Suppose input is top field first)
|
|
1071
|
+
* An interleaved frame need to be passed twice.
|
|
1072
|
+
* First cycle to get the first field:
|
|
1073
|
+
* -- set input_surface_flag as VA_TOP_FIELD_FIRST
|
|
1074
|
+
* -- set output_surface_flag as VA_TOP_FIELD
|
|
1075
|
+
* Second cycle to get the second field:
|
|
1076
|
+
* -- set input_surface_flag as VA_TOP_FIELD_FIRST
|
|
1077
|
+
* -- set output_surface_flag as VA_BOTTOM_FIELD
|
|
1078
|
+
* - 3. Field to Interleaved (Suppose first field is top field)
|
|
1079
|
+
* -- create two surfaces, one for top field, the other for bottom field
|
|
1080
|
+
* -- set surface with the first field surface id
|
|
1081
|
+
* -- set backward_reference with the second field surface id
|
|
1082
|
+
* -- set input_surface_flag as VA_TOP_FIELD
|
|
1083
|
+
* -- set output_surface_flag as VA_TOP_FIELD_FIRST
|
|
1084
|
+
* - 4. Field to Field:
|
|
1085
|
+
* -- set flag according to each frame.
|
|
1086
|
+
*
|
|
1087
|
+
* bit31: Surface encryption
|
|
1088
|
+
* - 0: non-protected
|
|
1089
|
+
* - 1: protected
|
|
1090
|
+
*
|
|
1091
|
+
* bit4~30 for future
|
|
1092
|
+
*/
|
|
1093
|
+
uint32_t input_surface_flag;
|
|
1094
|
+
/**
|
|
1095
|
+
* \brief Flag to indicate the output surface flag
|
|
1096
|
+
*
|
|
1097
|
+
* bit0~3: Surface sample type
|
|
1098
|
+
* - 0000: Progressive --> VA_FRAME_PICTURE
|
|
1099
|
+
* - 0001: Top Field --> VA_TOP_FIELD
|
|
1100
|
+
* - 0010: Bottom Field --> VA_BOTTOM_FIELD
|
|
1101
|
+
* - 0100: Top Field First --> VA_TOP_FIELD_FIRST
|
|
1102
|
+
* - 1000: Bottom Field First --> VA_BOTTOM_FIELD_FIRST
|
|
1103
|
+
*
|
|
1104
|
+
* bit31: Surface encryption
|
|
1105
|
+
* - 0: non-protected
|
|
1106
|
+
* - 1: protected
|
|
1107
|
+
*
|
|
1108
|
+
* bit4~30 for future
|
|
1109
|
+
*/
|
|
1110
|
+
uint32_t output_surface_flag;
|
|
1111
|
+
/**
|
|
1112
|
+
* \brief Input Color Properties. See "VAProcColorProperties".
|
|
1113
|
+
*/
|
|
1114
|
+
VAProcColorProperties input_color_properties;
|
|
1115
|
+
/**
|
|
1116
|
+
* \brief Output Color Properties. See "VAProcColorProperties".
|
|
1117
|
+
*/
|
|
1118
|
+
VAProcColorProperties output_color_properties;
|
|
1119
|
+
/**
|
|
1120
|
+
* \brief Processing mode. See "VAProcMode".
|
|
1121
|
+
*/
|
|
1122
|
+
VAProcMode processing_mode;
|
|
1123
|
+
/**
|
|
1124
|
+
* \brief Output High Dynamic Metadata.
|
|
1125
|
+
*
|
|
1126
|
+
* If output_metadata is NULL, then output default to SDR.
|
|
1127
|
+
*/
|
|
1128
|
+
VAHdrMetaData *output_hdr_metadata;
|
|
1129
|
+
|
|
1130
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1131
|
+
#if defined(__AMD64__) || defined(__x86_64__) || defined(__amd64__)|| defined(__LP64__)
|
|
1132
|
+
uint32_t va_reserved[VA_PADDING_LARGE - 16];
|
|
1133
|
+
#else
|
|
1134
|
+
uint32_t va_reserved[VA_PADDING_LARGE - 13];
|
|
1135
|
+
#endif
|
|
1136
|
+
} VAProcPipelineParameterBuffer;
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* \brief Filter parameter buffer base.
|
|
1140
|
+
*
|
|
1141
|
+
* This is a helper structure used by driver implementations only.
|
|
1142
|
+
* Users are not supposed to allocate filter parameter buffers of this
|
|
1143
|
+
* type.
|
|
1144
|
+
*/
|
|
1145
|
+
typedef struct _VAProcFilterParameterBufferBase {
|
|
1146
|
+
/** \brief Filter type. */
|
|
1147
|
+
VAProcFilterType type;
|
|
1148
|
+
} VAProcFilterParameterBufferBase;
|
|
1149
|
+
|
|
1150
|
+
/**
|
|
1151
|
+
* \brief Default filter parametrization.
|
|
1152
|
+
*
|
|
1153
|
+
* Unless there is a filter-specific parameter buffer,
|
|
1154
|
+
* #VAProcFilterParameterBuffer is the default type to use.
|
|
1155
|
+
*/
|
|
1156
|
+
typedef struct _VAProcFilterParameterBuffer {
|
|
1157
|
+
/** \brief Filter type. */
|
|
1158
|
+
VAProcFilterType type;
|
|
1159
|
+
/** \brief Value. */
|
|
1160
|
+
float value;
|
|
1161
|
+
|
|
1162
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1163
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
1164
|
+
} VAProcFilterParameterBuffer;
|
|
1165
|
+
|
|
1166
|
+
/** @name De-interlacing flags */
|
|
1167
|
+
/**@{*/
|
|
1168
|
+
/**
|
|
1169
|
+
* \brief Bottom field first in the input frame.
|
|
1170
|
+
* if this is not set then assumes top field first.
|
|
1171
|
+
*/
|
|
1172
|
+
#define VA_DEINTERLACING_BOTTOM_FIELD_FIRST 0x0001
|
|
1173
|
+
/**
|
|
1174
|
+
* \brief Bottom field used in deinterlacing.
|
|
1175
|
+
* if this is not set then assumes top field is used.
|
|
1176
|
+
*/
|
|
1177
|
+
#define VA_DEINTERLACING_BOTTOM_FIELD 0x0002
|
|
1178
|
+
/**
|
|
1179
|
+
* \brief A single field is stored in the input frame.
|
|
1180
|
+
* if this is not set then assumes the frame contains two interleaved fields.
|
|
1181
|
+
*/
|
|
1182
|
+
#define VA_DEINTERLACING_ONE_FIELD 0x0004
|
|
1183
|
+
/**
|
|
1184
|
+
* \brief Film Mode Detection is enabled. If enabled, driver performs inverse
|
|
1185
|
+
* of various pulldowns, such as 3:2 pulldown.
|
|
1186
|
+
* if this is not set then assumes FMD is disabled.
|
|
1187
|
+
*/
|
|
1188
|
+
#define VA_DEINTERLACING_FMD_ENABLE 0x0008
|
|
1189
|
+
|
|
1190
|
+
//Scene change parameter for ADI on Linux, if enabled, driver use spatial DI(Bob), instead of ADI. if not, use old behavior for ADI
|
|
1191
|
+
//Input stream is TFF(set flags = 0), SRC0,1,2,3 are interlaced frame (top +bottom fields), DSTs are progressive frames
|
|
1192
|
+
//30i->30p
|
|
1193
|
+
//SRC0 -> BOBDI, no reference, set flag = 0, output DST0
|
|
1194
|
+
//SRC1 -> ADI, reference frame=SRC0, set flags = 0, call VP, output DST1
|
|
1195
|
+
//SRC2 -> ADI, reference frame=SRC1, set flags = 0x0010(decimal 16), call VP, output DST2(T4)
|
|
1196
|
+
//SRC3 -> ADI, reference frame=SRC2, set flags = 0, call VP, output DST3
|
|
1197
|
+
//30i->60p
|
|
1198
|
+
//SRC0 -> BOBDI, no reference, set flag = 0, output DST0
|
|
1199
|
+
//SRC0 -> BOBDI, no reference, set flag =0x0002, output DST1
|
|
1200
|
+
|
|
1201
|
+
//SRC1 -> ADI, reference frame =SRC0, set flags = 0, call VP, output DST2
|
|
1202
|
+
//SRC1 -> ADI, reference frame =SRC0, set flags = 0x0012(decimal18), call VP, output DST3(B3)
|
|
1203
|
+
|
|
1204
|
+
//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0010(decimal 16), call VP, output DST4(T4)
|
|
1205
|
+
//SRC2 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST5
|
|
1206
|
+
|
|
1207
|
+
//SRC3 -> ADI, reference frame =SRC2, set flags = 0, call VP, output DST6
|
|
1208
|
+
//SRC3 -> ADI, reference frame =SRC1, set flags = 0x0002, call VP, output DST7
|
|
1209
|
+
|
|
1210
|
+
#define VA_DEINTERLACING_SCD_ENABLE 0x0010
|
|
1211
|
+
|
|
1212
|
+
/**@}*/
|
|
1213
|
+
|
|
1214
|
+
/** \brief Deinterlacing filter parametrization. */
|
|
1215
|
+
typedef struct _VAProcFilterParameterBufferDeinterlacing {
|
|
1216
|
+
/** \brief Filter type. Shall be set to #VAProcFilterDeinterlacing. */
|
|
1217
|
+
VAProcFilterType type;
|
|
1218
|
+
/** \brief Deinterlacing algorithm. */
|
|
1219
|
+
VAProcDeinterlacingType algorithm;
|
|
1220
|
+
/** \brief Deinterlacing flags. */
|
|
1221
|
+
uint32_t flags;
|
|
1222
|
+
|
|
1223
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1224
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
1225
|
+
} VAProcFilterParameterBufferDeinterlacing;
|
|
1226
|
+
|
|
1227
|
+
/**
|
|
1228
|
+
* \brief Color balance filter parametrization.
|
|
1229
|
+
*
|
|
1230
|
+
* This buffer defines color balance attributes. A VA buffer can hold
|
|
1231
|
+
* several color balance attributes by creating a VA buffer of desired
|
|
1232
|
+
* number of elements. This can be achieved by the following pseudo-code:
|
|
1233
|
+
*
|
|
1234
|
+
* \code
|
|
1235
|
+
* enum { kHue, kSaturation, kBrightness, kContrast };
|
|
1236
|
+
*
|
|
1237
|
+
* // Initial color balance parameters
|
|
1238
|
+
* static const VAProcFilterParameterBufferColorBalance colorBalanceParams[4] =
|
|
1239
|
+
* {
|
|
1240
|
+
* [kHue] =
|
|
1241
|
+
* { VAProcFilterColorBalance, VAProcColorBalanceHue, 0.5 },
|
|
1242
|
+
* [kSaturation] =
|
|
1243
|
+
* { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 },
|
|
1244
|
+
* [kBrightness] =
|
|
1245
|
+
* { VAProcFilterColorBalance, VAProcColorBalanceBrightness, 0.5 },
|
|
1246
|
+
* [kSaturation] =
|
|
1247
|
+
* { VAProcFilterColorBalance, VAProcColorBalanceSaturation, 0.5 }
|
|
1248
|
+
* };
|
|
1249
|
+
*
|
|
1250
|
+
* // Create buffer
|
|
1251
|
+
* VABufferID colorBalanceBuffer;
|
|
1252
|
+
* vaCreateBuffer(va_dpy, vpp_ctx,
|
|
1253
|
+
* VAProcFilterParameterBufferType, sizeof(*pColorBalanceParam), 4,
|
|
1254
|
+
* colorBalanceParams,
|
|
1255
|
+
* &colorBalanceBuffer
|
|
1256
|
+
* );
|
|
1257
|
+
*
|
|
1258
|
+
* VAProcFilterParameterBufferColorBalance *pColorBalanceParam;
|
|
1259
|
+
* vaMapBuffer(va_dpy, colorBalanceBuffer, &pColorBalanceParam);
|
|
1260
|
+
* {
|
|
1261
|
+
* // Change brightness only
|
|
1262
|
+
* pColorBalanceBuffer[kBrightness].value = 0.75;
|
|
1263
|
+
* }
|
|
1264
|
+
* vaUnmapBuffer(va_dpy, colorBalanceBuffer);
|
|
1265
|
+
* \endcode
|
|
1266
|
+
*/
|
|
1267
|
+
typedef struct _VAProcFilterParameterBufferColorBalance {
|
|
1268
|
+
/** \brief Filter type. Shall be set to #VAProcFilterColorBalance. */
|
|
1269
|
+
VAProcFilterType type;
|
|
1270
|
+
/** \brief Color balance attribute. */
|
|
1271
|
+
VAProcColorBalanceType attrib;
|
|
1272
|
+
/**
|
|
1273
|
+
* \brief Color balance value.
|
|
1274
|
+
*
|
|
1275
|
+
* Special case for automatically adjusted attributes. e.g.
|
|
1276
|
+
* #VAProcColorBalanceAutoSaturation,
|
|
1277
|
+
* #VAProcColorBalanceAutoBrightness,
|
|
1278
|
+
* #VAProcColorBalanceAutoContrast.
|
|
1279
|
+
* - If \ref value is \c 1.0 +/- \c FLT_EPSILON, the attribute is
|
|
1280
|
+
* automatically adjusted and overrides any other attribute of
|
|
1281
|
+
* the same type that would have been set explicitly;
|
|
1282
|
+
* - If \ref value is \c 0.0 +/- \c FLT_EPSILON, the attribute is
|
|
1283
|
+
* disabled and other attribute of the same type is used instead.
|
|
1284
|
+
*/
|
|
1285
|
+
float value;
|
|
1286
|
+
|
|
1287
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1288
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
1289
|
+
} VAProcFilterParameterBufferColorBalance;
|
|
1290
|
+
|
|
1291
|
+
/** \brief Total color correction filter parametrization. */
|
|
1292
|
+
typedef struct _VAProcFilterParameterBufferTotalColorCorrection {
|
|
1293
|
+
/** \brief Filter type. Shall be set to #VAProcFilterTotalColorCorrection. */
|
|
1294
|
+
VAProcFilterType type;
|
|
1295
|
+
/** \brief Color to correct. */
|
|
1296
|
+
VAProcTotalColorCorrectionType attrib;
|
|
1297
|
+
/** \brief Color correction value. */
|
|
1298
|
+
float value;
|
|
1299
|
+
} VAProcFilterParameterBufferTotalColorCorrection;
|
|
1300
|
+
|
|
1301
|
+
/** @name Video Processing Human Vision System (HVS) Denoise Mode.*/
|
|
1302
|
+
/**@{*/
|
|
1303
|
+
/**
|
|
1304
|
+
* \brief Default Mode.
|
|
1305
|
+
* This mode is decided in driver to the appropriate mode.
|
|
1306
|
+
*/
|
|
1307
|
+
#define VA_PROC_HVS_DENOISE_DEFAULT 0x0000
|
|
1308
|
+
/**
|
|
1309
|
+
* \brief Auto BDRate Mode.
|
|
1310
|
+
* Indicates auto BD rate improvement in pre-processing (such as before video encoding), ignore Strength.
|
|
1311
|
+
*/
|
|
1312
|
+
#define VA_PROC_HVS_DENOISE_AUTO_BDRATE 0x0001
|
|
1313
|
+
/**
|
|
1314
|
+
* \brief Auto Subjective Mode.
|
|
1315
|
+
* Indicates auto subjective quality improvement in pre-processing (such as before video encoding), ignore Strength.
|
|
1316
|
+
*/
|
|
1317
|
+
#define VA_PROC_HVS_DENOISE_AUTO_SUBJECTIVE 0x0002
|
|
1318
|
+
/**
|
|
1319
|
+
* \brief Manual Mode.
|
|
1320
|
+
* Indicates manual mode, allow to adjust the denoise strength manually (need to set Strength explicitly).
|
|
1321
|
+
*/
|
|
1322
|
+
#define VA_PROC_HVS_DENOISE_MANUAL 0x0003
|
|
1323
|
+
/**@}*/
|
|
1324
|
+
|
|
1325
|
+
/** \brief Human Vision System(HVS) Noise reduction filter parametrization. */
|
|
1326
|
+
typedef struct _VAProcFilterParameterBufferHVSNoiseReduction {
|
|
1327
|
+
/** \brief Filter type. Shall be set to #VAProcFilterHVSNoiseReduction. */
|
|
1328
|
+
VAProcFilterType type;
|
|
1329
|
+
/** \brief QP for encoding, used for HVS Denoise */
|
|
1330
|
+
uint16_t qp;
|
|
1331
|
+
/**
|
|
1332
|
+
* \brief QP to Noise Reduction Strength Mode, used for Human Vision System Based Noise Reduction.
|
|
1333
|
+
* Controls Noise Reduction strength of conservative and aggressive mode.
|
|
1334
|
+
* It is an integer from [0-16].
|
|
1335
|
+
* Value 0 means completely turn off Noise Reduction;
|
|
1336
|
+
* Value 16 means the most aggressive mode of Noise Reduction;
|
|
1337
|
+
* Value 10 is the default value.
|
|
1338
|
+
*/
|
|
1339
|
+
uint16_t strength;
|
|
1340
|
+
/**
|
|
1341
|
+
* \brief HVS Denoise Mode which controls denoise method.
|
|
1342
|
+
* It is a value of VA_PROC_HVS_DENOISE_xxx.
|
|
1343
|
+
* Please see the definition of VA_PROC_HVS_DENOISE_xxx.
|
|
1344
|
+
*/
|
|
1345
|
+
uint16_t mode;
|
|
1346
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1347
|
+
uint16_t va_reserved[VA_PADDING_HIGH - 1];
|
|
1348
|
+
} VAProcFilterParameterBufferHVSNoiseReduction;
|
|
1349
|
+
|
|
1350
|
+
/** \brief High Dynamic Range(HDR) Tone Mapping filter parametrization. */
|
|
1351
|
+
typedef struct _VAProcFilterParameterBufferHDRToneMapping {
|
|
1352
|
+
/** \brief Filter type. Shall be set to #VAProcFilterHighDynamicRangeToneMapping.*/
|
|
1353
|
+
VAProcFilterType type;
|
|
1354
|
+
/**
|
|
1355
|
+
* \brief High Dynamic Range metadata, could be HDR10 etc.
|
|
1356
|
+
*
|
|
1357
|
+
* This metadata is mainly for the input surface. Given that dynamic metadata is changing
|
|
1358
|
+
* on frame-by-frame or scene-by-scene basis for HDR10 plus, differentiate the metadata
|
|
1359
|
+
* for the input and output.
|
|
1360
|
+
*/
|
|
1361
|
+
VAHdrMetaData data;
|
|
1362
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1363
|
+
uint32_t va_reserved[VA_PADDING_HIGH];
|
|
1364
|
+
} VAProcFilterParameterBufferHDRToneMapping;
|
|
1365
|
+
|
|
1366
|
+
/** @name 3DLUT Channel Layout and Mapping */
|
|
1367
|
+
/**@{*/
|
|
1368
|
+
/** \brief 3DLUT Channel Layout is unknown. */
|
|
1369
|
+
#define VA_3DLUT_CHANNEL_UNKNOWN 0x00000000
|
|
1370
|
+
/** \brief 3DLUT Channel Layout is R, G, B, the default layout. Map RGB to RGB. */
|
|
1371
|
+
#define VA_3DLUT_CHANNEL_RGB_RGB 0x00000001
|
|
1372
|
+
/** \brief 3DLUT Channel Layout is Y, U, V. Map YUV to RGB. */
|
|
1373
|
+
#define VA_3DLUT_CHANNEL_YUV_RGB 0x00000002
|
|
1374
|
+
/** \brief 3DLUT Channel Layout is V, U, Y. Map VUY to RGB. */
|
|
1375
|
+
#define VA_3DLUT_CHANNEL_VUY_RGB 0x00000004
|
|
1376
|
+
/**@}*/
|
|
1377
|
+
|
|
1378
|
+
/**
|
|
1379
|
+
* \brief 3DLUT filter parametrization.
|
|
1380
|
+
*
|
|
1381
|
+
* 3DLUT (Three Dimensional Look Up Table) is often used when converting an image or a video frame
|
|
1382
|
+
* from one color representation to another, for example, when converting log and gamma encodings,
|
|
1383
|
+
* changing the color space, applying a color correction, changing the dynamic range, gamut mapping etc.
|
|
1384
|
+
*
|
|
1385
|
+
* This buffer defines 3DLUT attributes and memory layout. The typical 3DLUT has fixed number(lut_size)
|
|
1386
|
+
* per dimension and memory layout is 3 dimensional array as 3dlut[stride_0][stride_1][stride_2] (lut_size
|
|
1387
|
+
* shall be smaller than stride_0/1/2).
|
|
1388
|
+
*
|
|
1389
|
+
* API user should query hardware capability by using the VAProcFilterCap3DLUT to get the 3DLUT attributes
|
|
1390
|
+
* which hardware supports, and use these attributes. For example, if the user queries hardware, the API user
|
|
1391
|
+
* could get caps with 3dlut[33][33][64] (lut_size = 33, lut_stride[0/1/2] = 33/33/64). API user shall not
|
|
1392
|
+
* use the attributes which hardware can not support.
|
|
1393
|
+
*
|
|
1394
|
+
* 3DLUT is usually used to transform input RGB/YUV values in one color space to output RGB values in another
|
|
1395
|
+
* color space. Based on 1) the format and color space of VPP input and output and 2) 3DLUT memory layout and
|
|
1396
|
+
* channel mapping, driver will enable some color space conversion implicitly if needed. For example, the input of
|
|
1397
|
+
* VPP is P010 format in BT2020 color space, the output of VPP is NV12 in BT709 color space and the 3DLUT channel
|
|
1398
|
+
* mapping is VA_3DLUT_CHANNEL_RGB_RGB, driver could build the data pipeline as P010(BT2020)->RGB(BT2020)
|
|
1399
|
+
* ->3DULT(BT709)->NV12(BT709). Please note, the limitation of 3DLUT filter color space is that the color space of
|
|
1400
|
+
* 3DLUT filter input data needs to be same as the input data of VPP; the color space of 3DLUT filter output data
|
|
1401
|
+
* needs to be same as the output data of VPP; format does not have such limitation.
|
|
1402
|
+
*/
|
|
1403
|
+
typedef struct _VAProcFilterParameterBuffer3DLUT {
|
|
1404
|
+
/** \brief Filter type. Shall be set to #VAProcFilter3DLUT.*/
|
|
1405
|
+
VAProcFilterType type;
|
|
1406
|
+
|
|
1407
|
+
/** \brief lut_surface contains 3DLUT data in the 3DLUT memory layout, must be linear */
|
|
1408
|
+
VASurfaceID lut_surface;
|
|
1409
|
+
/**
|
|
1410
|
+
* \brief lut_size is the number of valid points on every dimension of the three dimensional look up table.
|
|
1411
|
+
* The size of LUT (lut_size) shall be same among every dimension of the three dimensional look up table.
|
|
1412
|
+
* The size of LUT (lut_size) shall be smaller than lut_stride[0/1/2].
|
|
1413
|
+
*/
|
|
1414
|
+
uint16_t lut_size;
|
|
1415
|
+
/**
|
|
1416
|
+
* \brief lut_stride are the number of points on every dimension of the three dimensional look up table.
|
|
1417
|
+
* Three dimension can has 3 different stride, lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]].
|
|
1418
|
+
* But the valid point shall start from 0, the range of valid point is [0, lut_size-1] for every dimension.
|
|
1419
|
+
*/
|
|
1420
|
+
uint16_t lut_stride[3];
|
|
1421
|
+
/** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */
|
|
1422
|
+
uint16_t bit_depth;
|
|
1423
|
+
/** \brief num_channel is the number of channels */
|
|
1424
|
+
uint16_t num_channel;
|
|
1425
|
+
|
|
1426
|
+
/** \brief channel_mapping defines the mapping of input and output channels, could be one of VA_3DLUT_CHANNEL_XXX*/
|
|
1427
|
+
uint32_t channel_mapping;
|
|
1428
|
+
|
|
1429
|
+
/** \brief reserved bytes for future use, must be zero */
|
|
1430
|
+
uint32_t va_reserved[VA_PADDING_HIGH];
|
|
1431
|
+
} VAProcFilterParameterBuffer3DLUT;
|
|
1432
|
+
|
|
1433
|
+
/** \brief Capabilities specification for the 3DLUT filter. */
|
|
1434
|
+
typedef struct _VAProcFilterCap3DLUT {
|
|
1435
|
+
/** \brief lut_size is the number of valid points on every dimension of the three dimensional look up table. */
|
|
1436
|
+
uint16_t lut_size;
|
|
1437
|
+
/** \brief lut_stride are the number of points on every dimension of the three dimensional look up table. lut3d[lut_stride[0]][lut_stride[1]][lut_stride[2]]*/
|
|
1438
|
+
uint16_t lut_stride[3];
|
|
1439
|
+
/** \brief bit_depth is the number of bits for every channel R, G or B (or Y, U, V) */
|
|
1440
|
+
uint16_t bit_depth;
|
|
1441
|
+
/** \brief num_channel is the number of channels */
|
|
1442
|
+
uint16_t num_channel;
|
|
1443
|
+
/** \brief channel_mapping defines the mapping of channels, could be some combination of VA_3DLUT_CHANNEL_XXX*/
|
|
1444
|
+
uint32_t channel_mapping;
|
|
1445
|
+
|
|
1446
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1447
|
+
uint32_t va_reserved[VA_PADDING_HIGH];
|
|
1448
|
+
} VAProcFilterCap3DLUT;
|
|
1449
|
+
|
|
1450
|
+
/**
|
|
1451
|
+
* \brief Default filter cap specification (single range value).
|
|
1452
|
+
*
|
|
1453
|
+
* Unless there is a filter-specific cap structure, #VAProcFilterCap is the
|
|
1454
|
+
* default type to use for output caps from vaQueryVideoProcFilterCaps().
|
|
1455
|
+
*/
|
|
1456
|
+
typedef struct _VAProcFilterCap {
|
|
1457
|
+
/** \brief Range of supported values for the filter. */
|
|
1458
|
+
VAProcFilterValueRange range;
|
|
1459
|
+
|
|
1460
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1461
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
1462
|
+
} VAProcFilterCap;
|
|
1463
|
+
|
|
1464
|
+
/** \brief Capabilities specification for the deinterlacing filter. */
|
|
1465
|
+
typedef struct _VAProcFilterCapDeinterlacing {
|
|
1466
|
+
/** \brief Deinterlacing algorithm. */
|
|
1467
|
+
VAProcDeinterlacingType type;
|
|
1468
|
+
|
|
1469
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1470
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
1471
|
+
} VAProcFilterCapDeinterlacing;
|
|
1472
|
+
|
|
1473
|
+
/** \brief Capabilities specification for the color balance filter. */
|
|
1474
|
+
typedef struct _VAProcFilterCapColorBalance {
|
|
1475
|
+
/** \brief Color balance operation. */
|
|
1476
|
+
VAProcColorBalanceType type;
|
|
1477
|
+
/** \brief Range of supported values for the specified operation. */
|
|
1478
|
+
VAProcFilterValueRange range;
|
|
1479
|
+
|
|
1480
|
+
/** \brief Reserved bytes for future use, must be zero */
|
|
1481
|
+
uint32_t va_reserved[VA_PADDING_LOW];
|
|
1482
|
+
} VAProcFilterCapColorBalance;
|
|
1483
|
+
|
|
1484
|
+
/** \brief Capabilities specification for the Total Color Correction filter. */
|
|
1485
|
+
typedef struct _VAProcFilterCapTotalColorCorrection {
|
|
1486
|
+
/** \brief Color to correct. */
|
|
1487
|
+
VAProcTotalColorCorrectionType type;
|
|
1488
|
+
/** \brief Range of supported values for the specified color. */
|
|
1489
|
+
VAProcFilterValueRange range;
|
|
1490
|
+
} VAProcFilterCapTotalColorCorrection;
|
|
1491
|
+
|
|
1492
|
+
/**
|
|
1493
|
+
* \brief Queries video processing filters.
|
|
1494
|
+
*
|
|
1495
|
+
* This function returns the list of video processing filters supported
|
|
1496
|
+
* by the driver. The \c filters array is allocated by the user and
|
|
1497
|
+
* \c num_filters shall be initialized to the number of allocated
|
|
1498
|
+
* elements in that array. Upon successful return, the actual number
|
|
1499
|
+
* of filters will be overwritten into \c num_filters. Otherwise,
|
|
1500
|
+
* \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and \c num_filters
|
|
1501
|
+
* is adjusted to the number of elements that would be returned if enough
|
|
1502
|
+
* space was available.
|
|
1503
|
+
*
|
|
1504
|
+
* The list of video processing filters supported by the driver shall
|
|
1505
|
+
* be ordered in the way they can be iteratively applied. This is needed
|
|
1506
|
+
* for both correctness, i.e. some filters would not mean anything if
|
|
1507
|
+
* applied at the beginning of the pipeline; but also for performance
|
|
1508
|
+
* since some filters can be applied in a single pass (e.g. noise
|
|
1509
|
+
* reduction + deinterlacing).
|
|
1510
|
+
*
|
|
1511
|
+
* @param[in] dpy the VA display
|
|
1512
|
+
* @param[in] context the video processing context
|
|
1513
|
+
* @param[out] filters the output array of #VAProcFilterType elements
|
|
1514
|
+
* @param[in,out] num_filters the number of elements allocated on input,
|
|
1515
|
+
* the number of elements actually filled in on output
|
|
1516
|
+
*/
|
|
1517
|
+
VAStatus
|
|
1518
|
+
vaQueryVideoProcFilters(
|
|
1519
|
+
VADisplay dpy,
|
|
1520
|
+
VAContextID context,
|
|
1521
|
+
VAProcFilterType *filters,
|
|
1522
|
+
unsigned int *num_filters
|
|
1523
|
+
);
|
|
1524
|
+
|
|
1525
|
+
/**
|
|
1526
|
+
* \brief Queries video filter capabilities.
|
|
1527
|
+
*
|
|
1528
|
+
* This function returns the list of capabilities supported by the driver
|
|
1529
|
+
* for a specific video filter. The \c filter_caps array is allocated by
|
|
1530
|
+
* the user and \c num_filter_caps shall be initialized to the number
|
|
1531
|
+
* of allocated elements in that array. Upon successful return, the
|
|
1532
|
+
* actual number of filters will be overwritten into \c num_filter_caps.
|
|
1533
|
+
* Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned and
|
|
1534
|
+
* \c num_filter_caps is adjusted to the number of elements that would be
|
|
1535
|
+
* returned if enough space was available.
|
|
1536
|
+
*
|
|
1537
|
+
* @param[in] dpy the VA display
|
|
1538
|
+
* @param[in] context the video processing context
|
|
1539
|
+
* @param[in] type the video filter type
|
|
1540
|
+
* @param[out] filter_caps the output array of #VAProcFilterCap elements
|
|
1541
|
+
* @param[in,out] num_filter_caps the number of elements allocated on input,
|
|
1542
|
+
* the number of elements actually filled in output
|
|
1543
|
+
*/
|
|
1544
|
+
VAStatus
|
|
1545
|
+
vaQueryVideoProcFilterCaps(
|
|
1546
|
+
VADisplay dpy,
|
|
1547
|
+
VAContextID context,
|
|
1548
|
+
VAProcFilterType type,
|
|
1549
|
+
void *filter_caps,
|
|
1550
|
+
unsigned int *num_filter_caps
|
|
1551
|
+
);
|
|
1552
|
+
|
|
1553
|
+
/**
|
|
1554
|
+
* \brief Queries video processing pipeline capabilities.
|
|
1555
|
+
*
|
|
1556
|
+
* This function returns the video processing pipeline capabilities. The
|
|
1557
|
+
* \c filters array defines the video processing pipeline and is an array
|
|
1558
|
+
* of buffers holding filter parameters.
|
|
1559
|
+
*
|
|
1560
|
+
* Note: the #VAProcPipelineCaps structure contains user-provided arrays.
|
|
1561
|
+
* If non-NULL, the corresponding \c num_* fields shall be filled in on
|
|
1562
|
+
* input with the number of elements allocated. Upon successful return,
|
|
1563
|
+
* the actual number of elements will be overwritten into the \c num_*
|
|
1564
|
+
* fields. Otherwise, \c VA_STATUS_ERROR_MAX_NUM_EXCEEDED is returned
|
|
1565
|
+
* and \c num_* fields are adjusted to the number of elements that would
|
|
1566
|
+
* be returned if enough space was available.
|
|
1567
|
+
*
|
|
1568
|
+
* @param[in] dpy the VA display
|
|
1569
|
+
* @param[in] context the video processing context
|
|
1570
|
+
* @param[in] filters the array of VA buffers defining the video
|
|
1571
|
+
* processing pipeline
|
|
1572
|
+
* @param[in] num_filters the number of elements in filters
|
|
1573
|
+
* @param[in,out] pipeline_caps the video processing pipeline capabilities
|
|
1574
|
+
*/
|
|
1575
|
+
VAStatus
|
|
1576
|
+
vaQueryVideoProcPipelineCaps(
|
|
1577
|
+
VADisplay dpy,
|
|
1578
|
+
VAContextID context,
|
|
1579
|
+
VABufferID *filters,
|
|
1580
|
+
unsigned int num_filters,
|
|
1581
|
+
VAProcPipelineCaps *pipeline_caps
|
|
1582
|
+
);
|
|
1583
|
+
|
|
1584
|
+
/**@}*/
|
|
1585
|
+
|
|
1586
|
+
#ifdef __cplusplus
|
|
1587
|
+
}
|
|
1588
|
+
#endif
|
|
1589
|
+
|
|
1590
|
+
#endif /* VA_VPP_H */
|