140 lines
3.6 KiB
C
140 lines
3.6 KiB
C
|
|
/*
|
||
|
|
* Copyright (c) Hunan Goke,Chengdu Goke,Shandong Goke. 2021. All rights reserved.
|
||
|
|
*/
|
||
|
|
#ifndef __JPEGD_DRV_H__
|
||
|
|
#define __JPEGD_DRV_H__
|
||
|
|
#include "jpegd_reg.h"
|
||
|
|
#include "type.h"
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif /* End of #ifdef __cplusplus */
|
||
|
|
|
||
|
|
#define JPEGD_REGS_SIZE 0x6BF
|
||
|
|
|
||
|
|
#define JPEGD_IP_NUM 1
|
||
|
|
|
||
|
|
#define QUANT_TABLE_SIZE 64
|
||
|
|
#define HDC_TABLE_SIZE 12
|
||
|
|
#define HAC_MIN_TABLE_SIZE 8
|
||
|
|
#define HAC_BASE_TABLE_SIZE 8
|
||
|
|
#define HAC_SYMBOL_TABLE_SIZE 176
|
||
|
|
#define ZIGZAG_TABLE_SIZE 64
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
gk_bool int_dec_finish;
|
||
|
|
gk_bool int_dec_err;
|
||
|
|
gk_bool int_over_time;
|
||
|
|
gk_bool int_bs_res;
|
||
|
|
} jpegd_vpu_status;
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
PIXEL_FORMAT_RGB_444 = 0,
|
||
|
|
PIXEL_FORMAT_RGB_555,
|
||
|
|
PIXEL_FORMAT_RGB_565,
|
||
|
|
PIXEL_FORMAT_RGB_888,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_BGR_444,
|
||
|
|
PIXEL_FORMAT_BGR_555,
|
||
|
|
PIXEL_FORMAT_BGR_565,
|
||
|
|
PIXEL_FORMAT_BGR_888,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_ARGB_1555,
|
||
|
|
PIXEL_FORMAT_ARGB_4444,
|
||
|
|
PIXEL_FORMAT_ARGB_8565,
|
||
|
|
PIXEL_FORMAT_ARGB_8888,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_ABGR_1555,
|
||
|
|
PIXEL_FORMAT_ABGR_4444,
|
||
|
|
PIXEL_FORMAT_ABGR_8565,
|
||
|
|
PIXEL_FORMAT_ABGR_8888,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_RGB_BAYER_8BPP,
|
||
|
|
PIXEL_FORMAT_RGB_BAYER_10BPP,
|
||
|
|
PIXEL_FORMAT_RGB_BAYER_12BPP,
|
||
|
|
PIXEL_FORMAT_RGB_BAYER_14BPP,
|
||
|
|
PIXEL_FORMAT_RGB_BAYER_16BPP,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_YUV_PLANAR_422,
|
||
|
|
PIXEL_FORMAT_YUV_PLANAR_420,
|
||
|
|
PIXEL_FORMAT_YUV_PLANAR_444,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_YVU_SEMIPLANAR_422,
|
||
|
|
PIXEL_FORMAT_YVU_SEMIPLANAR_420,
|
||
|
|
PIXEL_FORMAT_YVU_SEMIPLANAR_444,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_UYVY_PACKAGE_422,
|
||
|
|
PIXEL_FORMAT_YUYV_PACKAGE_422,
|
||
|
|
PIXEL_FORMAT_VYUY_PACKAGE_422,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_YUV_400,
|
||
|
|
|
||
|
|
PIXEL_FORMAT_BUTT
|
||
|
|
} gk_pixel_format;
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
PICTURE_FORMAT_YUV420 = 0,
|
||
|
|
PICTURE_FORMAT_YUV422 = 1, /* 422 2x1 */
|
||
|
|
PICTURE_FORMAT_YUV444 = 2,
|
||
|
|
PICTURE_FORMAT_YUV422V = 3, /* 422 1x2 */
|
||
|
|
PICTURE_FORMAT_YUV400 = 4,
|
||
|
|
PICTURE_FORMAT_BUTT
|
||
|
|
} picture_format;
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
int chn_id;
|
||
|
|
picture_format pic_format;
|
||
|
|
gk_pixel_format pixel_format;
|
||
|
|
gk_bool out_yuv;
|
||
|
|
unsigned char v_fac;
|
||
|
|
unsigned char u_fac;
|
||
|
|
unsigned char y_fac;
|
||
|
|
unsigned int dri;
|
||
|
|
unsigned int width;
|
||
|
|
unsigned int height;
|
||
|
|
unsigned int width_in_mcu;
|
||
|
|
unsigned int height_in_mcu;
|
||
|
|
unsigned int y_stride;
|
||
|
|
unsigned int c_stride;
|
||
|
|
unsigned int pic_type;
|
||
|
|
unsigned int rgb_stride;
|
||
|
|
unsigned int alpha;
|
||
|
|
|
||
|
|
unsigned long long y_phy_addr;
|
||
|
|
unsigned long long c_phy_addr;
|
||
|
|
unsigned long long phy_str_buf_start;
|
||
|
|
unsigned long long phy_str_buf_end;
|
||
|
|
unsigned long long phy_str_start;
|
||
|
|
unsigned long long phy_str_end;
|
||
|
|
unsigned long long phy_emar_buffer0;
|
||
|
|
unsigned long long phy_emar_buffer1;
|
||
|
|
|
||
|
|
unsigned int quant_table[QUANT_TABLE_SIZE];
|
||
|
|
unsigned int huffman_table[HDC_TABLE_SIZE];
|
||
|
|
unsigned int huffman_min_table[HAC_MIN_TABLE_SIZE];
|
||
|
|
unsigned int huffman_base_table[HAC_BASE_TABLE_SIZE];
|
||
|
|
unsigned int huffman_symbol_table[HAC_SYMBOL_TABLE_SIZE];
|
||
|
|
} jpegd_vpu_config;
|
||
|
|
|
||
|
|
void jpegd_drv_write_regs(S_JPGD_REGS_TYPE *reg_base, jpegd_vpu_config *vpu_config);
|
||
|
|
|
||
|
|
void jpegd_drv_read_regs(S_JPGD_REGS_TYPE *reg_base, jpegd_vpu_status *vpu_status);
|
||
|
|
|
||
|
|
void jpegd_set_clock_en(int vpu_id, gk_bool is_run);
|
||
|
|
void jpegd_reset_select(int vpu_id, gk_bool is_run);
|
||
|
|
|
||
|
|
void jpegd_set_outstanding(int vpu_id, int outstanding);
|
||
|
|
void *jpegd_get_reg_addr(int vpu_id);
|
||
|
|
unsigned int jpegd_read_int(int vpu_id);
|
||
|
|
void jpegd_clear_int(int vpu_id);
|
||
|
|
void jpegd_set_int_mask(int vpu_id);
|
||
|
|
void jpegd_reset(int vpu_id);
|
||
|
|
void jpegd_start_vpu(int vpu_id);
|
||
|
|
int jpegd_set_time_out(int vpu_id, int time_out);
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif /* End of #ifdef __cplusplus */
|
||
|
|
|
||
|
|
#endif /* End of __JPEGD_DRV_H__ */
|