xref: /aosp_15_r20/external/libva/va/va_fei.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
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