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