217 lines
6.2 KiB
C
Executable File
217 lines
6.2 KiB
C
Executable File
/*
|
|
* Copyright (c) Hunan Goke,Chengdu Goke,Shandong Goke. 2021. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __JPEGD_H__
|
|
#define __JPEGD_H__
|
|
#include "type.h"
|
|
#include "jpegd_drv.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif /* End of #ifdef __cplusplus */
|
|
|
|
#define align_up(x, a) (((x) + ((a) - 1)) & (~((a) - 1)))
|
|
|
|
#define GK_JPEG_DEC_OK 0
|
|
#define GK_JPEG_DEC_FRAME_ERR 1
|
|
#define GK_JPEG_DEC_SCAN_ERR 2
|
|
#define GK_JPEG_DEC_MCU_ERR 3
|
|
#define GK_JPEG_DEC_DRI_ERR 4
|
|
#define GK_JPEG_DEC_DHT_ERR 5
|
|
#define GK_JPEG_DEC_DQT_ERR 6
|
|
|
|
#define JPEGD_MAX_WIDTH 8192
|
|
#define JPEGD_MAX_HEIGHT 8192
|
|
#define JPEGD_MIN_WIDTH 8
|
|
#define JPEGD_MIN_HEIGHT 8
|
|
|
|
#define ONE_EMAR_BUF_SIZE (128 * ((JPEGD_MAX_WIDTH + 7) >> 3))
|
|
|
|
#define BASELINE 0xC0 /* baseline frame header */
|
|
#define PROGRESSIVE 0xC2 /* progressive frame header */
|
|
#define DHT 0xC4
|
|
#define RST0 0xD0
|
|
#define RST1 0xD1
|
|
#define RST2 0xD2
|
|
#define RST3 0xD3
|
|
#define RST4 0xD4
|
|
#define RST5 0xD5
|
|
#define RST6 0xD6
|
|
#define RST7 0xD7
|
|
#define SOI 0xD8
|
|
#define EOI 0xD9
|
|
#define SOS 0xDA
|
|
#define DQT 0xDB
|
|
#define DNL 0xDC
|
|
#define DRI 0xDD
|
|
|
|
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
|
|
|
#define GK_MJPEG_DEC_OK 0
|
|
#define GK_MJPEG_NO_PICTURE (-1)
|
|
#define GK_MJPEG_ERR_HANDLE (-2)
|
|
|
|
#define JPEGD_MAX_HANDLE_NUM 3
|
|
#define JPEGD_CODE_LEN 16
|
|
#define JPEGD_HUFFMAN_LEN 256
|
|
#define JPEGD_QUANT_LEN 64
|
|
#define JPEGD_NF_LEN 4
|
|
#define JPEGD_NS_LEN 4
|
|
#define JPEGD_FRAME_COUNT 2
|
|
#define JPEGD_HUFFMAN_TAB 4
|
|
#define JPEGD_QUANT_TAB 4
|
|
#define JPEGD_DC_PRED 4
|
|
#define JPEGD_HUFFMAN_TAB_LEN 3
|
|
#define JPEGD_HUFFMAN_LEN 256
|
|
|
|
#define COM0 0
|
|
#define COM1 1
|
|
#define COM2 2
|
|
|
|
#define JPEGD_ALLOC_BUFF_CACHED
|
|
|
|
typedef void *jpegd_handle;
|
|
|
|
typedef enum {
|
|
STATE_IDLE = 0,
|
|
STATE_BUSY = 1,
|
|
STATE_BUTT
|
|
} jpegd_state;
|
|
|
|
typedef struct {
|
|
int max_code[JPEGD_CODE_LEN];
|
|
int max_code16[JPEGD_CODE_LEN];
|
|
int min_code[JPEGD_CODE_LEN];
|
|
int len[JPEGD_CODE_LEN];
|
|
unsigned short huffman_val_ptr[JPEGD_CODE_LEN];
|
|
unsigned char huffman_val[JPEGD_HUFFMAN_LEN];
|
|
|
|
unsigned char fast_huffman_code[JPEGD_HUFFMAN_LEN];
|
|
unsigned char fast_huffman_len[JPEGD_HUFFMAN_LEN];
|
|
unsigned int u_code32;
|
|
} huffman_tab;
|
|
|
|
typedef struct {
|
|
unsigned char quant[JPEGD_QUANT_LEN];
|
|
} quant_tab;
|
|
|
|
typedef struct {
|
|
unsigned int nf;
|
|
unsigned int color_depth;
|
|
unsigned int y_width;
|
|
unsigned int y_height;
|
|
unsigned char ci[JPEGD_NF_LEN]; /* NF:Number of image components in frame */
|
|
unsigned char h[JPEGD_NF_LEN];
|
|
unsigned char v[JPEGD_NF_LEN];
|
|
unsigned char tq[JPEGD_NF_LEN];
|
|
unsigned int restart_interval;
|
|
unsigned int restart_interval_logic;
|
|
unsigned int max_mcu_number;
|
|
} frame_header;
|
|
|
|
typedef struct {
|
|
unsigned int ns;
|
|
unsigned char cs[JPEGD_NS_LEN]; /* NS:Number of image components in scan */
|
|
unsigned char td[JPEGD_NS_LEN];
|
|
unsigned char ta[JPEGD_NS_LEN];
|
|
unsigned char ss;
|
|
unsigned char se;
|
|
unsigned char ah;
|
|
unsigned char al;
|
|
} scan_header;
|
|
|
|
typedef struct {
|
|
unsigned char *buffer;
|
|
unsigned int bit_len;
|
|
unsigned int bit_offset;
|
|
} bitstream;
|
|
|
|
typedef struct {
|
|
unsigned char *vir_addr;
|
|
unsigned long long phy_addr;
|
|
unsigned int len;
|
|
unsigned int pts;
|
|
} jpegd_stream;
|
|
|
|
typedef struct {
|
|
unsigned char *stream_buffer;
|
|
unsigned char *pic_buffer;
|
|
unsigned int stream_offest;
|
|
jpegd_stream stream;
|
|
bitstream bits;
|
|
frame_header frame;
|
|
scan_header scan;
|
|
huffman_tab h_tab[JPEGD_HUFFMAN_TAB];
|
|
quant_tab q_tab[JPEGD_QUANT_TAB];
|
|
|
|
unsigned char *y[JPEGD_FRAME_COUNT];
|
|
unsigned char *u[JPEGD_FRAME_COUNT];
|
|
unsigned char *v[JPEGD_FRAME_COUNT];
|
|
unsigned int valid_frame;
|
|
unsigned int max_width;
|
|
unsigned int max_height;
|
|
unsigned int buf_size;
|
|
unsigned int first_mcu;
|
|
short jpeg_dc_pred[JPEGD_DC_PRED]; /* 0 for Y; 1 for U; 2 for V; 3 reserved total */
|
|
|
|
unsigned int height_in_mcu;
|
|
unsigned int width_in_mcu;
|
|
unsigned int y_stride;
|
|
unsigned int c_stride;
|
|
picture_format pic_format;
|
|
|
|
quant_tab *q_tab_components[JPEGD_HUFFMAN_TAB_LEN];
|
|
huffman_tab *h_tab_components_dc[JPEGD_HUFFMAN_TAB_LEN];
|
|
huffman_tab *h_tab_components_ac[JPEGD_HUFFMAN_TAB_LEN];
|
|
huffman_tab huffman_tmp;
|
|
|
|
unsigned int profile; /* 0: baseline; 1:progressive; other:unsupport; */
|
|
jpegd_state state;
|
|
jpegd_vpu_config vpu_config;
|
|
jpegd_vpu_status vpu_status;
|
|
} motion_jpeg_obj;
|
|
|
|
typedef struct gk_mjpeg_userdata {
|
|
unsigned int user_data_type; /* type of userdata */
|
|
unsigned int user_data_size; /* length of userdata in byte */
|
|
unsigned char *data; /* buffer contains userdata stuff */
|
|
struct gk_mjpeg_userdata *next; /* pointer to next userdata */
|
|
} mjpeg_userdata;
|
|
|
|
typedef struct {
|
|
unsigned char *y;
|
|
unsigned char *u;
|
|
unsigned char *v;
|
|
unsigned int width;
|
|
unsigned int height;
|
|
unsigned int y_stride;
|
|
unsigned int c_stride;
|
|
int pic_format; /* 0: YUV420; */
|
|
/* 1: YUV422; */
|
|
/* 2: YUV444; */
|
|
/* 3: YUV422V; */
|
|
/* 4: YUV400; */
|
|
/* >=5: reserved */
|
|
int error; /* 0: no error */
|
|
/* 1: MCU error */
|
|
unsigned long long pts; /* time stamp */
|
|
unsigned int reserved;
|
|
int error_code;
|
|
mjpeg_userdata *user_data; /* pointer to the first userdata */
|
|
} mjpeg_dec_frame;
|
|
|
|
jpegd_handle jpegd_get_handle(void);
|
|
int jpegd_dec_frame(jpegd_handle handle, unsigned int flags);
|
|
int jpegd_start_one_frame(jpegd_handle handle, unsigned int flags);
|
|
void jpegd_write_regs(jpegd_handle handle, S_JPGD_REGS_TYPE *reg_base);
|
|
void jpegd_read_regs(jpegd_handle handle, S_JPGD_REGS_TYPE *reg_base);
|
|
int jpegd_start_decoding(jpegd_handle handle);
|
|
void jpegd_finish_decoding(jpegd_handle handle);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif /* End of #ifdef __cplusplus */
|
|
|
|
#endif /* _JPEGD_H_ */
|