xref: /aosp_15_r20/external/libva/va/va_dec_jpeg.h (revision 54e60f844a168e9a219354de272cd517ee8cd4b7)
1*54e60f84SAndroid Build Coastguard Worker /*
2*54e60f84SAndroid Build Coastguard Worker  * Copyright (c) 2007-2012 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_dec_jpeg.h
27*54e60f84SAndroid Build Coastguard Worker  * \brief The JPEG decoding API
28*54e60f84SAndroid Build Coastguard Worker  *
29*54e60f84SAndroid Build Coastguard Worker  * This file contains the \ref api_dec_jpeg "JPEG decoding API".
30*54e60f84SAndroid Build Coastguard Worker  */
31*54e60f84SAndroid Build Coastguard Worker 
32*54e60f84SAndroid Build Coastguard Worker #ifndef VA_DEC_JPEG_H
33*54e60f84SAndroid Build Coastguard Worker #define VA_DEC_JPEG_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 #include <va/va.h>
40*54e60f84SAndroid Build Coastguard Worker 
41*54e60f84SAndroid Build Coastguard Worker /**
42*54e60f84SAndroid Build Coastguard Worker  * \defgroup api_dec_jpeg JPEG decoding API
43*54e60f84SAndroid Build Coastguard Worker  *
44*54e60f84SAndroid Build Coastguard Worker  * This JPEG decoding API supports Baseline profile only.
45*54e60f84SAndroid Build Coastguard Worker  *
46*54e60f84SAndroid Build Coastguard Worker  * @{
47*54e60f84SAndroid Build Coastguard Worker  */
48*54e60f84SAndroid Build Coastguard Worker 
49*54e60f84SAndroid Build Coastguard Worker /**
50*54e60f84SAndroid Build Coastguard Worker  * \brief Picture parameter for JPEG decoding.
51*54e60f84SAndroid Build Coastguard Worker  *
52*54e60f84SAndroid Build Coastguard Worker  * This structure holds information from the frame header, along with
53*54e60f84SAndroid Build Coastguard Worker  * definitions from additional segments.
54*54e60f84SAndroid Build Coastguard Worker  */
55*54e60f84SAndroid Build Coastguard Worker typedef struct _VAPictureParameterBufferJPEGBaseline {
56*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture width in pixels. */
57*54e60f84SAndroid Build Coastguard Worker     uint16_t      picture_width;
58*54e60f84SAndroid Build Coastguard Worker     /** \brief Picture height in pixels. */
59*54e60f84SAndroid Build Coastguard Worker     uint16_t      picture_height;
60*54e60f84SAndroid Build Coastguard Worker 
61*54e60f84SAndroid Build Coastguard Worker     struct {
62*54e60f84SAndroid Build Coastguard Worker         /** \brief Component identifier (Ci). */
63*54e60f84SAndroid Build Coastguard Worker         uint8_t   component_id;
64*54e60f84SAndroid Build Coastguard Worker         /** \brief Horizontal sampling factor (Hi). */
65*54e60f84SAndroid Build Coastguard Worker         uint8_t   h_sampling_factor;
66*54e60f84SAndroid Build Coastguard Worker         /** \brief Vertical sampling factor (Vi). */
67*54e60f84SAndroid Build Coastguard Worker         uint8_t   v_sampling_factor;
68*54e60f84SAndroid Build Coastguard Worker         /* \brief Quantization table selector (Tqi). */
69*54e60f84SAndroid Build Coastguard Worker         uint8_t   quantiser_table_selector;
70*54e60f84SAndroid Build Coastguard Worker     }                   components[255];
71*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of components in frame (Nf). */
72*54e60f84SAndroid Build Coastguard Worker     uint8_t       num_components;
73*54e60f84SAndroid Build Coastguard Worker 
74*54e60f84SAndroid Build Coastguard Worker     /** \brief Input color space 0: YUV, 1: RGB, 2: BGR, others: reserved */
75*54e60f84SAndroid Build Coastguard Worker     uint8_t       color_space;
76*54e60f84SAndroid Build Coastguard Worker     /** \brief Set to VA_ROTATION_* for a single rotation angle reported by VAConfigAttribDecJPEG. */
77*54e60f84SAndroid Build Coastguard Worker     uint32_t      rotation;
78*54e60f84SAndroid Build Coastguard Worker     /** \brief crop rectangle boundary in pixels */
79*54e60f84SAndroid Build Coastguard Worker     VARectangle   crop_rectangle;
80*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
81*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_MEDIUM - 3];
82*54e60f84SAndroid Build Coastguard Worker } VAPictureParameterBufferJPEGBaseline;
83*54e60f84SAndroid Build Coastguard Worker 
84*54e60f84SAndroid Build Coastguard Worker /**
85*54e60f84SAndroid Build Coastguard Worker  * \brief Quantization table for JPEG decoding.
86*54e60f84SAndroid Build Coastguard Worker  *
87*54e60f84SAndroid Build Coastguard Worker  * This structure holds the complete quantization tables. This is an
88*54e60f84SAndroid Build Coastguard Worker  * aggregation of all quantization table (DQT) segments maintained by
89*54e60f84SAndroid Build Coastguard Worker  * the application. i.e. up to 4 quantization tables are stored in
90*54e60f84SAndroid Build Coastguard Worker  * there for baseline profile.
91*54e60f84SAndroid Build Coastguard Worker  *
92*54e60f84SAndroid Build Coastguard Worker  * The #load_quantization_table array can be used as a hint to notify
93*54e60f84SAndroid Build Coastguard Worker  * the VA driver implementation about which table(s) actually changed
94*54e60f84SAndroid Build Coastguard Worker  * since the last submission of this buffer.
95*54e60f84SAndroid Build Coastguard Worker  *
96*54e60f84SAndroid Build Coastguard Worker  * The #quantiser_table values are specified in zig-zag scan order.
97*54e60f84SAndroid Build Coastguard Worker  */
98*54e60f84SAndroid Build Coastguard Worker typedef struct _VAIQMatrixBufferJPEGBaseline {
99*54e60f84SAndroid Build Coastguard Worker     /** \brief Specifies which #quantiser_table is valid. */
100*54e60f84SAndroid Build Coastguard Worker     uint8_t       load_quantiser_table[4];
101*54e60f84SAndroid Build Coastguard Worker     /** \brief Quanziation tables indexed by table identifier (Tqi). */
102*54e60f84SAndroid Build Coastguard Worker     uint8_t       quantiser_table[4][64];
103*54e60f84SAndroid Build Coastguard Worker 
104*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
105*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
106*54e60f84SAndroid Build Coastguard Worker } VAIQMatrixBufferJPEGBaseline;
107*54e60f84SAndroid Build Coastguard Worker 
108*54e60f84SAndroid Build Coastguard Worker /**
109*54e60f84SAndroid Build Coastguard Worker  * \brief Slice parameter for JPEG decoding.
110*54e60f84SAndroid Build Coastguard Worker  *
111*54e60f84SAndroid Build Coastguard Worker  * This structure holds information from the scan header, along with
112*54e60f84SAndroid Build Coastguard Worker  * definitions from additional segments. The associated slice data
113*54e60f84SAndroid Build Coastguard Worker  * buffer holds all entropy coded segments (ECS) in the scan.
114*54e60f84SAndroid Build Coastguard Worker  */
115*54e60f84SAndroid Build Coastguard Worker typedef struct _VASliceParameterBufferJPEGBaseline {
116*54e60f84SAndroid Build Coastguard Worker     /** @name Codec-independent Slice Parameter Buffer base. */
117*54e60f84SAndroid Build Coastguard Worker     /**@{*/
118*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of bytes in the slice data buffer for this slice. */
119*54e60f84SAndroid Build Coastguard Worker     uint32_t        slice_data_size;
120*54e60f84SAndroid Build Coastguard Worker     /** \brief The offset to the first byte of the first MCU. */
121*54e60f84SAndroid Build Coastguard Worker     uint32_t        slice_data_offset;
122*54e60f84SAndroid Build Coastguard Worker     /** \brief Slice data buffer flags. See \c VA_SLICE_DATA_FLAG_xxx. */
123*54e60f84SAndroid Build Coastguard Worker     uint32_t        slice_data_flag;
124*54e60f84SAndroid Build Coastguard Worker     /**@}*/
125*54e60f84SAndroid Build Coastguard Worker 
126*54e60f84SAndroid Build Coastguard Worker     /** \brief Scan horizontal position. */
127*54e60f84SAndroid Build Coastguard Worker     uint32_t        slice_horizontal_position;
128*54e60f84SAndroid Build Coastguard Worker     /** \brief Scan vertical position. */
129*54e60f84SAndroid Build Coastguard Worker     uint32_t        slice_vertical_position;
130*54e60f84SAndroid Build Coastguard Worker 
131*54e60f84SAndroid Build Coastguard Worker     struct {
132*54e60f84SAndroid Build Coastguard Worker         /** \brief Scan component selector (Csj). */
133*54e60f84SAndroid Build Coastguard Worker         uint8_t   component_selector;
134*54e60f84SAndroid Build Coastguard Worker         /** \brief DC entropy coding table selector (Tdj). */
135*54e60f84SAndroid Build Coastguard Worker         uint8_t   dc_table_selector;
136*54e60f84SAndroid Build Coastguard Worker         /** \brief AC entropy coding table selector (Taj). */
137*54e60f84SAndroid Build Coastguard Worker         uint8_t   ac_table_selector;
138*54e60f84SAndroid Build Coastguard Worker     }                   components[4];
139*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of components in scan (Ns). */
140*54e60f84SAndroid Build Coastguard Worker     uint8_t       num_components;
141*54e60f84SAndroid Build Coastguard Worker 
142*54e60f84SAndroid Build Coastguard Worker     /** \brief Restart interval definition (Ri). */
143*54e60f84SAndroid Build Coastguard Worker     uint16_t      restart_interval;
144*54e60f84SAndroid Build Coastguard Worker     /** \brief Number of MCUs in a scan. */
145*54e60f84SAndroid Build Coastguard Worker     uint32_t        num_mcus;
146*54e60f84SAndroid Build Coastguard Worker 
147*54e60f84SAndroid Build Coastguard Worker     /** \brief Reserved bytes for future use, must be zero */
148*54e60f84SAndroid Build Coastguard Worker     uint32_t                va_reserved[VA_PADDING_LOW];
149*54e60f84SAndroid Build Coastguard Worker } VASliceParameterBufferJPEGBaseline;
150*54e60f84SAndroid Build Coastguard Worker 
151*54e60f84SAndroid Build Coastguard Worker /**@}*/
152*54e60f84SAndroid Build Coastguard Worker 
153*54e60f84SAndroid Build Coastguard Worker #ifdef __cplusplus
154*54e60f84SAndroid Build Coastguard Worker }
155*54e60f84SAndroid Build Coastguard Worker #endif
156*54e60f84SAndroid Build Coastguard Worker 
157*54e60f84SAndroid Build Coastguard Worker #endif /* VA_DEC_JPEG_H */
158