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