226 lines
7.1 KiB
C
226 lines
7.1 KiB
C
|
/*
|
||
|
* Copyright (C) STMicroelectronics SA 2015
|
||
|
* Author: Hugues Fruchet <hugues.fruchet@st.com> for STMicroelectronics.
|
||
|
* License terms: GNU General Public License (GPL), version 2
|
||
|
*/
|
||
|
|
||
|
#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 */
|