📄 jpeg.c
字号:
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*
* removed!
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#if(defined (__SW_JPEG_CODEC_SUPPORT__) || !defined(__MTK_TARGET__))
#include "jpeg_sw.h"
#include "sw_jpeg_decoder.h"
#endif
#include "reg_base.h"
#include "IntrCtrl.h"
#include "drv_comm.h"
#include "drvpdn.h"
#include "lcd_if.h"
#include "jpeg.h"
#include "visualhisr.h"
#include "visual_comm.h"
#include "fat_fs.h"
#include "drm_gprot.h"
#if (defined(JPEG_DRV_V2)||defined(JPEG_DRV_V3))
#include "resizer.h"
#include "isp_if.h"
#include "imgproc.h"
#include "img_comm.h"
#include "imgdma.h"
#include "fsal.h"
#include "mp4_parser.h"
#include "l1audio.h"
#include "rtc_sw.h"
#include "video_file_creator.h"
#include "bmd.h"
#include "video_enc_glb.h"
#include "video_dec_glb.h"
#include "video_glb.h"
#endif
#if (defined(JPEG_DRV_V3))
#include "tv_out.h"
#endif
#if (defined(WEBCAM_SUPPORT))
#include "usbvideo_cam_if.h"
#endif
#if (defined(EXIF_SUPPORT))
#include "exif.h"
#endif
#if (defined(JPEG_DRV_V1) || defined(JPEG_DRV_V2)||defined(JPEG_DRV_V3))
extern kal_eventgrpid lcd_event_id;
#if ((defined(JPEG_DRV_V2)||defined(JPEG_DRV_V3)) && defined(ISP_SUPPORT))
extern kal_eventgrpid camera_isp_event_id;
extern camera_capture_jpeg_struct isp_capture_jpeg_data;
#endif
kal_bool jpeg_file_without_eoi;
kal_uint8 times_of_total_mcu_num=1;
kal_bool jpeg_thumbnail_mode=KAL_FALSE;
kal_bool jpeg_decode_break=KAL_FALSE;
kal_bool jpeg_decode_wait_event=KAL_FALSE;
kal_bool jpeg_decode_next_block=KAL_FALSE;
#ifndef __MAUI_BASIC__
extern kal_uint8 L1SM_GetHandle(void);
extern void L1SM_SleepEnable(kal_uint8 handle);
extern void L1SM_SleepDisable(kal_uint8 handle);
kal_uint8 jpeg_codec_sleep_mode_handler=0xFF;
#endif
jpeg_parameter_struct jpeg_file_para,jpeg_thumb_para;
jpeg_decode_process_struct jpeg_decode_config_data;
kal_uint16 jpeg_file_resize_width;
kal_uint16 jpeg_file_resize_height;
volatile kal_uint8 jpeg_decoder_decode_result;
kal_uint32 jpeg_decode_int_mem_size=0;
kal_uint32 jpeg_decode_ext_mem_size=0;
kal_uint32 jpeg_file_offset=0;
/* Log DRM READ Error */
kal_uint32 jpeg_drm_read_error_count=0;
kal_uint32 jpeg_drm_seek_error_count=0;
kal_uint32 jpeg_driver_status=0;
kal_uint8 jpeg_decoder_return_code;
volatile JPEG_DECODER_STATE_ENUM jpeg_decoder_operation_state=JPEG_DECODER_IDLE_STATE;
#if (defined(JPEG_DRV_V1))
volatile kal_uint8 jpeg_file_resizer_result;
#endif
volatile kal_uint8 jpeg_video_play_flag;
lcd_frame_update_struct jpeg_video_play_lcd_data;
extern kal_uint8 jpeg_video_play_lcd_id;
kal_eventgrpid jpeg_codec_event_id=NULL;
#if (defined(JPEG_DRV_V2)||defined(JPEG_DRV_V3))
volatile JPEG_ENCODER_STATE_ENUM jpeg_encoder_operation_state=JPEG_ENCODER_IDLE_STATE;
kal_uint8 jpeg_encoder_encode_result=0;
jpeg_encode_process_struct jpeg_encode_config_data;
resize_struct image_resize_data;
resize_struct thumbnail_resize_data;
#if (defined(JPEG_DRV_V3))
jpeg_file_resize_struct jpeg_resize_config_data;
extern volatile kal_bool wait_last_capture_frame;
#endif
#endif
/* bear */
#if(defined __SW_JPEG_CODEC_SUPPORT__)
__align(4) kal_uint8 y_channel[640*480];
__align(4) kal_uint8 u_channel[320*240];
__align(4) kal_uint8 v_channel[320*240];
//extern __align(4) kal_uint8 jpeg_sw_intmem[JPEG_SW_ENC_REQUIRED_INT_MEM_SIZE];
__align(4) kal_uint8 jpeg_sw_intmem[JPEG_SW_ENC_REQUIRED_INT_MEM_SIZE];
#elif (!defined(__MTK_TARGET__))
kal_uint8 y_channel[640*480];
kal_uint8 u_channel[320*240];
kal_uint8 v_channel[320*240];
kal_uint8 jpeg_sw_intmem[JPEG_SW_ENC_REQUIRED_INT_MEM_SIZE];
#endif
void jpeg_codec_power_up(void)
{
kal_uint32 save_irq_mask;
#if (defined(JPEG_DRV_V1))
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON0) &= (~DRVPDN_CON0_JPEG); /* Power on JPEG decoder */
DRV_Reg(DRVPDN_CON0) &= (~DRVPDN_CON0_RESZ); /* Power on Resizer */
RestoreIRQMask(save_irq_mask);
#elif (defined(JPEG_DRV_V2)||defined(JPEG_DRV_V3))
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON3) &= (~DRVPDN_CON3_JPEG); /* Power on JPEG codec */
DRV_Reg(DRVPDN_CON3) &= ~DRVPDN_CON3_DCT; /* power on DCT */
RestoreIRQMask(save_irq_mask);
#if (defined(JPEG_DRV_V2))
mp4_reset();
#endif
RESET_JPEG_ENCODER;
#endif
RESET_JPEG_DECODER;
#ifndef __MAUI_BASIC__
L1SM_SleepDisable(jpeg_codec_sleep_mode_handler);
#endif /* __MAUI_BASIC__ */
}
void jpeg_codec_power_down(void)
{
kal_uint32 save_irq_mask;
#if (defined(JPEG_DRV_V1))
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON0) |= (DRVPDN_CON0_JPEG); /* Power on JPEG decoder */
DRV_Reg(DRVPDN_CON0) |= (DRVPDN_CON0_RESZ); /* Power on Resizer */
RestoreIRQMask(save_irq_mask);
#elif (defined(JPEG_DRV_V2)||defined(JPEG_DRV_V3))
save_irq_mask=SaveAndSetIRQMask();
DRV_Reg(DRVPDN_CON3) |= (DRVPDN_CON3_JPEG); /* Power on JPEG codec */
DRV_Reg(DRVPDN_CON3) |= DRVPDN_CON3_DCT; /* power on DCT */
jpeg_encoder_operation_state=JPEG_ENCODER_STANDBY_STATE;/*reset state*/
RestoreIRQMask(save_irq_mask);
#if (defined(JPEG_DRV_V2))
mp4_reset();
#endif
RESET_JPEG_ENCODER;
#endif
RESET_JPEG_DECODER;
#ifndef __MAUI_BASIC__
L1SM_SleepEnable(jpeg_codec_sleep_mode_handler);
#endif /* __MAUI_BASIC__ */
}
#if (defined(JPEG_DRV_V1)||defined(JPEG_DRV_V2))
/*************************************************************************
* FUNCTION
* jpeg_LISR
*
* DESCRIPTION
* jpeg decoder LISR entry
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void jpeg_LISR(void)
{
unsigned int int_status;
if (jpeg_decoder_operation_state==JPEG_DECODER_DECODING_STATE)
{ /* jpeg decoder interrupt */
IRQMask(IRQ_JPEG_CODE);
int_status=DRV_Reg32(JPEG_DECODER_INT_STATUS_REG);
if (int_status & JPEG_INT_STATUS_MASK)
{ /* JPEG decoder interrupt */
if (int_status & JPEG_INT_STATUS_FILE_OVERFLOW_BIT)
jpeg_decoder_decode_result|=JPEG_DECODE_FILE_OVERFLOW;
if (int_status & JPEG_INT_STATUS_BREAKPOINT_BIT)
jpeg_decoder_decode_result|=JPEG_DECODE_BREAK;
if (int_status & JPEG_INT_STATUS_EOF_BIT)
jpeg_decoder_decode_result|=JPEG_DECODE_COMPLETE;
visual_active_hisr(VISUAL_JPEG_DEC_HISR_ID);
}
else
IRQUnmask(IRQ_JPEG_CODE);
}
#if (defined(JPEG_DRV_V2))
if (jpeg_encoder_operation_state==JPEG_ENCODER_ENCODING_STATE)
{ /* jpeg encoder interrupt */
IRQMask(IRQ_JPEG_CODE);
int_status =DRV_Reg32(JPEG_ENCODER_INT_STATUS_REG);
if (int_status!=0)
{
REG_JPEG_ENCODER_INT_STATUS=0;
if (int_status & JPEG_ENCODER_DONE_INT_STATUS)
jpeg_encoder_encode_result |= JPEG_ENCODE_DONE;
if (int_status & JPEG_ENCODER_STALL_INT_STATUS)
jpeg_encoder_encode_result |= JPEG_ENCODE_STALL;
visual_active_hisr(VISUAL_JPEG_ENC_HISR_ID);
}
else
{
IRQUnmask(IRQ_JPEG_CODE);
}
}
#endif /* MT6219, MT6226, MT6227 */
} /* jpeg_LISR() */
#endif
#if (defined(JPEG_DRV_V3))
/*************************************************************************
* FUNCTION
* jpeg_dec_LISR
*
* DESCRIPTION
* jpeg decoder LISR entry
*
* PARAMETERS
*
* RETURNS
* None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void jpeg_dec_LISR(void)
{
unsigned int int_status;
if (jpeg_decoder_operation_state==JPEG_DECODER_DECODING_STATE)
{ /* jpeg decoder interrupt */
IRQMask(IRQ_JPEG_DEC_CODE);
int_status=DRV_Reg32(JPEG_DECODER_INT_STATUS_REG);
if (int_status & JPEG_INT_STATUS_MASK)
{ /* JPEG decoder interrupt */
if (int_status & JPEG_INT_STATUS_FILE_OVERFLOW_BIT)
jpeg_decoder_decode_result|=JPEG_DECODE_FILE_OVERFLOW;
if (int_status & JPEG_INT_STATUS_BREAKPOINT_BIT)
jpeg_decoder_decode_result|=JPEG_DECODE_BREAK;
if (int_status & JPEG_INT_STATUS_EOF_BIT)
jpeg_decoder_decode_result|=JPEG_DECODE_COMPLETE;
visual_active_hisr(VISUAL_JPEG_DEC_HISR_ID);
}
else
IRQUnmask(IRQ_JPEG_DEC_CODE);
}
}
void jpeg_enc_LISR(void)
{
unsigned int int_status;
IRQMask(IRQ_JPEG_ENC_CODE);
int_status =DRV_Reg32(JPEG_ENCODER_INT_STATUS_REG);
if (int_status!=0)
{
if (isp_operation_state==ISP_CAPTURE_JPEG_STATE)
{ /* jpeg encoder interrupt */
REG_JPEG_ENCODER_INT_STATUS=0;
if (int_status & JPEG_ENCODER_DONE_INT_STATUS)
{
if (current_captured_file_number & 0x01)
{
camera_capture_jpeg_config_data.jpeg_file_info->jpeg_file_address[++current_captured_file_number]=REG_JPEG_ENCODER_DMA_ADDR2;
}
else
{
camera_capture_jpeg_config_data.jpeg_file_info->jpeg_file_address[++current_captured_file_number]=REG_JPEG_ENCODER_DMA_ADDR;
}
jpeg_encoder_encode_result |= JPEG_ENCODE_DONE;
visual_active_hisr(VISUAL_JPEG_ENC_HISR_ID);
}
else if (int_status & JPEG_ENCODER_STALL1_INT_STATUS)
{
jpeg_encoder_encode_result |= JPEG_ENCODE_STALL;
visual_active_hisr(VISUAL_JPEG_ENC_HISR_ID);
}
}
else if (jpeg_encoder_operation_state==JPEG_ENCODER_ENCODING_STATE)
{
REG_JPEG_ENCODER_INT_STATUS=0;
if (int_status & JPEG_ENCODER_DONE_INT_STATUS)
jpeg_encoder_encode_result |= JPEG_ENCODE_DONE;
if (int_status & JPEG_ENCODER_STALL_INT_STATUS)
jpeg_encoder_encode_result |= JPEG_ENCODE_STALL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -