Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (C) STMicroelectronics SA 2015 * Author: Hugues Fruchet <hugues.fruchet@st.com> for STMicroelectronics. */ #ifndef DELTA_MJPEG_FW_H #define DELTA_MJPEG_FW_H /* * struct jpeg_decoded_buffer_address_t * * defines the addresses where the decoded picture/additional * info related to the block structures will be stored * * @display_luma_p: address of the luma buffer * @display_chroma_p: address of the chroma buffer */ struct jpeg_decoded_buffer_address_t { u32 luma_p; u32 chroma_p; }; /* * struct jpeg_display_buffer_address_t * * defines the addresses (used by the Display Reconstruction block) * where the pictures to be displayed will be stored * * @struct_size: size of the structure in bytes * @display_luma_p: address of the luma buffer * @display_chroma_p: address of the chroma buffer * @display_decimated_luma_p: address of the decimated luma buffer * @display_decimated_chroma_p: address of the decimated chroma buffer */ struct jpeg_display_buffer_address_t { u32 struct_size; u32 display_luma_p; u32 display_chroma_p; u32 display_decimated_luma_p; u32 display_decimated_chroma_p; }; /* * used for enabling main/aux outputs for both display & * reference reconstruction blocks */ enum jpeg_rcn_ref_disp_enable_t { /* enable decimated (for display) reconstruction */ JPEG_DISP_AUX_EN = 0x00000010, /* enable main (for display) reconstruction */ JPEG_DISP_MAIN_EN = 0x00000020, /* enable both main & decimated (for display) reconstruction */ JPEG_DISP_AUX_MAIN_EN = 0x00000030, /* enable only reference output(ex. for trick modes) */ JPEG_REF_MAIN_EN = 0x00000100, /* * enable reference output with decimated * (for display) reconstruction */ JPEG_REF_MAIN_DISP_AUX_EN = 0x00000110, /* * enable reference output with main * (for display) reconstruction */ JPEG_REF_MAIN_DISP_MAIN_EN = 0x00000120, /* * enable reference output with main & decimated * (for display) reconstruction */ JPEG_REF_MAIN_DISP_MAIN_AUX_EN = 0x00000130 }; /* identifies the horizontal decimation factor */ enum jpeg_horizontal_deci_factor_t { /* no resize */ JPEG_HDEC_1 = 0x00000000, /* Advanced H/2 resize using improved 8-tap filters */ JPEG_HDEC_ADVANCED_2 = 0x00000101, /* Advanced H/4 resize using improved 8-tap filters */ JPEG_HDEC_ADVANCED_4 = 0x00000102 }; /* identifies the vertical decimation factor */ enum jpeg_vertical_deci_factor_t { /* no resize */ JPEG_VDEC_1 = 0x00000000, /* V/2 , progressive resize */ JPEG_VDEC_ADVANCED_2_PROG = 0x00000204, /* V/2 , interlaced resize */ JPEG_VDEC_ADVANCED_2_INT = 0x000000208 }; /* status of the decoding process */ enum jpeg_decoding_error_t { JPEG_DECODER_NO_ERROR = 0, JPEG_DECODER_UNDEFINED_HUFF_TABLE = 1, JPEG_DECODER_UNSUPPORTED_MARKER = 2, JPEG_DECODER_UNABLE_ALLOCATE_MEMORY = 3, JPEG_DECODER_NON_SUPPORTED_SAMP_FACTORS = 4, JPEG_DECODER_BAD_PARAMETER = 5, JPEG_DECODER_DECODE_ERROR = 6, JPEG_DECODER_BAD_RESTART_MARKER = 7, JPEG_DECODER_UNSUPPORTED_COLORSPACE = 8, JPEG_DECODER_BAD_SOS_SPECTRAL = 9, JPEG_DECODER_BAD_SOS_SUCCESSIVE = 10, JPEG_DECODER_BAD_HEADER_LENGTH = 11, JPEG_DECODER_BAD_COUNT_VALUE = 12, JPEG_DECODER_BAD_DHT_MARKER = 13, JPEG_DECODER_BAD_INDEX_VALUE = 14, JPEG_DECODER_BAD_NUMBER_HUFFMAN_TABLES = 15, JPEG_DECODER_BAD_QUANT_TABLE_LENGTH = 16, JPEG_DECODER_BAD_NUMBER_QUANT_TABLES = 17, JPEG_DECODER_BAD_COMPONENT_COUNT = 18, JPEG_DECODER_DIVIDE_BY_ZERO_ERROR = 19, JPEG_DECODER_NOT_JPG_IMAGE = 20, JPEG_DECODER_UNSUPPORTED_ROTATION_ANGLE = 21, JPEG_DECODER_UNSUPPORTED_SCALING = 22, JPEG_DECODER_INSUFFICIENT_OUTPUTBUFFER_SIZE = 23, JPEG_DECODER_BAD_HWCFG_GP_VERSION_VALUE = 24, JPEG_DECODER_BAD_VALUE_FROM_RED = 25, JPEG_DECODER_BAD_SUBREGION_PARAMETERS = 26, JPEG_DECODER_PROGRESSIVE_DECODE_NOT_SUPPORTED = 27, JPEG_DECODER_ERROR_TASK_TIMEOUT = 28, JPEG_DECODER_ERROR_FEATURE_NOT_SUPPORTED = 29 }; /* identifies the decoding mode */ enum jpeg_decoding_mode_t { JPEG_NORMAL_DECODE = 0, }; enum jpeg_additional_flags_t { JPEG_ADDITIONAL_FLAG_NONE = 0, /* request firmware to return values of the CEH registers */ JPEG_ADDITIONAL_FLAG_CEH = 1, /* output storage of auxiliary reconstruction in Raster format. */ JPEG_ADDITIONAL_FLAG_RASTER = 64, /* output storage of auxiliary reconstruction in 420MB format. */ JPEG_ADDITIONAL_FLAG_420MB = 128 }; /* * struct jpeg_video_decode_init_params_t - initialization command parameters * * @circular_buffer_begin_addr_p: start address of fw circular buffer * @circular_buffer_end_addr_p: end address of fw circular buffer */ struct jpeg_video_decode_init_params_t { u32 circular_buffer_begin_addr_p; u32 circular_buffer_end_addr_p; u32 reserved; }; /* * struct jpeg_decode_params_t - decode command parameters * * @picture_start_addr_p: start address of jpeg picture * @picture_end_addr_p: end address of jpeg picture * @decoded_buffer_addr: decoded picture buffer * @display_buffer_addr: display picture buffer * @main_aux_enable: enable main and/or aux outputs * @horizontal_decimation_factor:horizontal decimation factor * @vertical_decimation_factor: vertical decimation factor * @xvalue0: the x(0) coordinate for subregion decoding * @xvalue1: the x(1) coordinate for subregion decoding * @yvalue0: the y(0) coordinate for subregion decoding * @yvalue1: the y(1) coordinate for subregion decoding * @decoding_mode: decoding mode * @additional_flags: additional flags * @field_flag: determines frame/field scan * @is_jpeg_image: 1 = still jpeg, 0 = motion jpeg */ struct jpeg_decode_params_t { u32 picture_start_addr_p; u32 picture_end_addr_p; struct jpeg_decoded_buffer_address_t decoded_buffer_addr; struct jpeg_display_buffer_address_t display_buffer_addr; enum jpeg_rcn_ref_disp_enable_t main_aux_enable; enum jpeg_horizontal_deci_factor_t horizontal_decimation_factor; enum jpeg_vertical_deci_factor_t vertical_decimation_factor; u32 xvalue0; u32 xvalue1; u32 yvalue0; u32 yvalue1; enum jpeg_decoding_mode_t decoding_mode; u32 additional_flags; u32 field_flag; u32 reserved; u32 is_jpeg_image; }; /* * struct jpeg_decode_return_params_t * * status returned by firmware after decoding * * @decode_time_in_us: decoding time in microseconds * @pm_cycles: profiling information * @pm_dmiss: profiling information * @pm_imiss: profiling information * @pm_bundles: profiling information * @pm_pft: profiling information * @error_code: status of the decoding process * @ceh_registers: array where values of the Contrast Enhancement * Histogram (CEH) registers will be stored. * ceh_registers[0] correspond to register MBE_CEH_0_7, * ceh_registers[1] correspond to register MBE_CEH_8_15 * ceh_registers[2] correspond to register MBE_CEH_16_23 * Note that elements of this array will be updated only * if additional_flags has JPEG_ADDITIONAL_FLAG_CEH set. */ struct jpeg_decode_return_params_t { /* profiling info */ u32 decode_time_in_us; u32 pm_cycles; u32 pm_dmiss; u32 pm_imiss; u32 pm_bundles; u32 pm_pft; enum jpeg_decoding_error_t error_code; u32 ceh_registers[32]; }; #endif /* DELTA_MJPEG_FW_H */ |