1*54e60f84SAndroid Build Coastguard Worker /* 2*54e60f84SAndroid Build Coastguard Worker * Copyright (c) 2007-2017 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_fei.h 27*54e60f84SAndroid Build Coastguard Worker * \brief The FEI encoding common API 28*54e60f84SAndroid Build Coastguard Worker */ 29*54e60f84SAndroid Build Coastguard Worker 30*54e60f84SAndroid Build Coastguard Worker #ifndef VA_FEI_H 31*54e60f84SAndroid Build Coastguard Worker #define VA_FEI_H 32*54e60f84SAndroid Build Coastguard Worker 33*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 34*54e60f84SAndroid Build Coastguard Worker extern "C" { 35*54e60f84SAndroid Build Coastguard Worker #endif 36*54e60f84SAndroid Build Coastguard Worker 37*54e60f84SAndroid Build Coastguard Worker #include <stdint.h> 38*54e60f84SAndroid Build Coastguard Worker 39*54e60f84SAndroid Build Coastguard Worker /** 40*54e60f84SAndroid Build Coastguard Worker * \defgroup api_fei FEI encoding common API 41*54e60f84SAndroid Build Coastguard Worker * 42*54e60f84SAndroid Build Coastguard Worker * @{ 43*54e60f84SAndroid Build Coastguard Worker */ 44*54e60f84SAndroid Build Coastguard Worker 45*54e60f84SAndroid Build Coastguard Worker /** 46*54e60f84SAndroid Build Coastguard Worker * \brief FEI specific attribute definitions 47*54e60f84SAndroid Build Coastguard Worker */ 48*54e60f84SAndroid Build Coastguard Worker /** @name Attribute values for VAConfigAttribFEIFunctionType 49*54e60f84SAndroid Build Coastguard Worker * 50*54e60f84SAndroid Build Coastguard Worker * This is only for VAEntrypointFEI 51*54e60f84SAndroid Build Coastguard Worker * The desired type should be passed to driver when creating the configuration. 52*54e60f84SAndroid Build Coastguard Worker * If VA_FEI_FUNCTION_ENC_PAK is set, VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK 53*54e60f84SAndroid Build Coastguard Worker * will be ignored if set also. Combination of VA_FEI_FUNCTION_ENC and VA_FEI_FUNCTION_PAK 54*54e60f84SAndroid Build Coastguard Worker * is not valid. If VA_FEI_FUNCTION_ENC is set, there will be no bitstream output. 55*54e60f84SAndroid Build Coastguard Worker * If VA_FEI_FUNCTION_PAK is set, two extra input buffers for PAK are needed: 56*54e60f84SAndroid Build Coastguard Worker * VAEncFEIMVBufferType and VAEncFEIMBCodeBufferType. 57*54e60f84SAndroid Build Coastguard Worker * VA_FEI_FUNCTION_ENC_PAK is recommended for best performance. 58*54e60f84SAndroid Build Coastguard Worker * 59*54e60f84SAndroid Build Coastguard Worker **/ 60*54e60f84SAndroid Build Coastguard Worker /**@{*/ 61*54e60f84SAndroid Build Coastguard Worker /** \brief ENC only is supported */ 62*54e60f84SAndroid Build Coastguard Worker #define VA_FEI_FUNCTION_ENC 0x00000001 63*54e60f84SAndroid Build Coastguard Worker /** \brief PAK only is supported */ 64*54e60f84SAndroid Build Coastguard Worker #define VA_FEI_FUNCTION_PAK 0x00000002 65*54e60f84SAndroid Build Coastguard Worker /** \brief ENC_PAK is supported */ 66*54e60f84SAndroid Build Coastguard Worker #define VA_FEI_FUNCTION_ENC_PAK 0x00000004 67*54e60f84SAndroid Build Coastguard Worker 68*54e60f84SAndroid Build Coastguard Worker /**@}*/ 69*54e60f84SAndroid Build Coastguard Worker 70*54e60f84SAndroid Build Coastguard Worker /** \brief Attribute value for VAConfigAttribStats */ 71*54e60f84SAndroid Build Coastguard Worker typedef union _VAConfigAttribValStats { 72*54e60f84SAndroid Build Coastguard Worker struct { 73*54e60f84SAndroid Build Coastguard Worker /** \brief Max number of past reference frames that are supported. */ 74*54e60f84SAndroid Build Coastguard Worker uint32_t max_num_past_references : 4; 75*54e60f84SAndroid Build Coastguard Worker /** \brief Max number of future reference frames that are supported. */ 76*54e60f84SAndroid Build Coastguard Worker uint32_t max_num_future_references : 4; 77*54e60f84SAndroid Build Coastguard Worker /** \brief Number of supported output buffers for VAStatsStatisticsParameter->outputs */ 78*54e60f84SAndroid Build Coastguard Worker uint32_t num_outputs : 3; 79*54e60f84SAndroid Build Coastguard Worker /** \brief Interlaced content is supported */ 80*54e60f84SAndroid Build Coastguard Worker uint32_t interlaced : 1; 81*54e60f84SAndroid Build Coastguard Worker uint32_t reserved : 20; 82*54e60f84SAndroid Build Coastguard Worker } bits; 83*54e60f84SAndroid Build Coastguard Worker uint32_t value; 84*54e60f84SAndroid Build Coastguard Worker } VAConfigAttribValStats; 85*54e60f84SAndroid Build Coastguard Worker 86*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureStats { 87*54e60f84SAndroid Build Coastguard Worker VASurfaceID picture_id; 88*54e60f84SAndroid Build Coastguard Worker /* 89*54e60f84SAndroid Build Coastguard Worker * see flags below. 90*54e60f84SAndroid Build Coastguard Worker */ 91*54e60f84SAndroid Build Coastguard Worker uint32_t flags; 92*54e60f84SAndroid Build Coastguard Worker } VAPictureStats; 93*54e60f84SAndroid Build Coastguard Worker /* flags in VAPictureStats could be one of the following */ 94*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_STATS_INVALID 0x00000001 95*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_STATS_PROGRESSIVE 0x00000000 96*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_STATS_TOP_FIELD 0x00000002 97*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_STATS_BOTTOM_FIELD 0x00000004 98*54e60f84SAndroid Build Coastguard Worker /** \brief picutre surface content updated indicator. 99*54e60f84SAndroid Build Coastguard Worker * The picture surface content is updated, it means temporary buffer like downscaled pixel data in driver 100*54e60f84SAndroid Build Coastguard Worker * internal needs be forced freshing 101*54e60f84SAndroid Build Coastguard Worker **/ 102*54e60f84SAndroid Build Coastguard Worker #define VA_PICTURE_STATS_CONTENT_UPDATED 0x00000010 103*54e60f84SAndroid Build Coastguard Worker 104*54e60f84SAndroid Build Coastguard Worker /** \brief Motion Vector and Statistics frame level controls. 105*54e60f84SAndroid Build Coastguard Worker * common part VAStatsStatisticsParameterBufferType for a MB or CTB 106*54e60f84SAndroid Build Coastguard Worker **/ 107*54e60f84SAndroid Build Coastguard Worker typedef struct _VAStatsStatisticsParameter { 108*54e60f84SAndroid Build Coastguard Worker /** \brief Source surface ID. */ 109*54e60f84SAndroid Build Coastguard Worker VAPictureStats input; 110*54e60f84SAndroid Build Coastguard Worker 111*54e60f84SAndroid Build Coastguard Worker /** \brief Past reference surface ID pointer. */ 112*54e60f84SAndroid Build Coastguard Worker VAPictureStats *past_references; 113*54e60f84SAndroid Build Coastguard Worker 114*54e60f84SAndroid Build Coastguard Worker /** \brief Past reference surface number */ 115*54e60f84SAndroid Build Coastguard Worker uint32_t num_past_references; 116*54e60f84SAndroid Build Coastguard Worker 117*54e60f84SAndroid Build Coastguard Worker /** \brief Statistics output for past reference surface. 118*54e60f84SAndroid Build Coastguard Worker * Only enabling statistics output for past reference picture when *past_ref_stat_buf is a valid 119*54e60f84SAndroid Build Coastguard Worker * VABufferID, it is needed in case app wants statistics data of both reference and current pictures 120*54e60f84SAndroid Build Coastguard Worker * in very special use cases for better performance. 121*54e60f84SAndroid Build Coastguard Worker * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of 122*54e60f84SAndroid Build Coastguard Worker * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only 123*54e60f84SAndroid Build Coastguard Worker * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. 124*54e60f84SAndroid Build Coastguard Worker **/ 125*54e60f84SAndroid Build Coastguard Worker VABufferID *past_ref_stat_buf; 126*54e60f84SAndroid Build Coastguard Worker 127*54e60f84SAndroid Build Coastguard Worker /** \brief Future reference surface ID pointer. */ 128*54e60f84SAndroid Build Coastguard Worker VAPictureStats *future_references; 129*54e60f84SAndroid Build Coastguard Worker 130*54e60f84SAndroid Build Coastguard Worker /** \brief Future reference surface number */ 131*54e60f84SAndroid Build Coastguard Worker uint32_t num_future_references; 132*54e60f84SAndroid Build Coastguard Worker 133*54e60f84SAndroid Build Coastguard Worker /** \brief Statistics output for future reference surface. 134*54e60f84SAndroid Build Coastguard Worker * Only enabling statistics output for future reference picture when *past_ref_stat_buf is a valid 135*54e60f84SAndroid Build Coastguard Worker * VABufferID, it is needed in case app wants statistics data of both reference and current pictures 136*54e60f84SAndroid Build Coastguard Worker * in very special use cases for better performance. 137*54e60f84SAndroid Build Coastguard Worker * The output layout is defined by VAStatsStatisticsBufferType(for progressive and top field of 138*54e60f84SAndroid Build Coastguard Worker * interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case), only 139*54e60f84SAndroid Build Coastguard Worker * pixel_average_16x16/pixel_average_8x8 and variance_16x16/variance_8x8 data are valid. 140*54e60f84SAndroid Build Coastguard Worker **/ 141*54e60f84SAndroid Build Coastguard Worker VABufferID *future_ref_stat_buf; 142*54e60f84SAndroid Build Coastguard Worker 143*54e60f84SAndroid Build Coastguard Worker /** \brief ID of the output buffer. 144*54e60f84SAndroid Build Coastguard Worker * The number of outputs is determined by below DisableMVOutput and DisableStatisticsOutput. 145*54e60f84SAndroid Build Coastguard Worker * The output layout is defined by VAStatsMVBufferType, VAStatsStatisticsBufferType(for progressive and 146*54e60f84SAndroid Build Coastguard Worker * top field of interlaced case) and VAStatsStatisticsBottomFieldBufferType(only for interlaced case). 147*54e60f84SAndroid Build Coastguard Worker **/ 148*54e60f84SAndroid Build Coastguard Worker VABufferID *outputs; 149*54e60f84SAndroid Build Coastguard Worker 150*54e60f84SAndroid Build Coastguard Worker /** \brief MV predictor. It is valid only when mv_predictor_ctrl is not 0. 151*54e60f84SAndroid Build Coastguard Worker * Each block has a pair of MVs, one for past and one for future reference 152*54e60f84SAndroid Build Coastguard Worker * as defined by VAMotionVector. The block is in raster scan order. 153*54e60f84SAndroid Build Coastguard Worker * Buffer size shall not be less than the number of blocks multiplied by sizeof(VAMotionVector). 154*54e60f84SAndroid Build Coastguard Worker **/ 155*54e60f84SAndroid Build Coastguard Worker VABufferID mv_predictor; 156*54e60f84SAndroid Build Coastguard Worker 157*54e60f84SAndroid Build Coastguard Worker /** \brief QP input buffer. It is valid only when mb_qp is set to 1. 158*54e60f84SAndroid Build Coastguard Worker * The data in this buffer correspond to the input source. 159*54e60f84SAndroid Build Coastguard Worker * One QP per MB or CTB block in raster scan order, each QP is a signed char (8-bit) value. 160*54e60f84SAndroid Build Coastguard Worker **/ 161*54e60f84SAndroid Build Coastguard Worker VABufferID qp; 162*54e60f84SAndroid Build Coastguard Worker } VAStatsStatisticsParameter; 163*54e60f84SAndroid Build Coastguard Worker 164*54e60f84SAndroid Build Coastguard Worker /**@}*/ 165*54e60f84SAndroid Build Coastguard Worker 166*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus 167*54e60f84SAndroid Build Coastguard Worker } 168*54e60f84SAndroid Build Coastguard Worker #endif 169*54e60f84SAndroid Build Coastguard Worker 170*54e60f84SAndroid Build Coastguard Worker #endif /* VA_FEI_H */ 171