⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpeg.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 5 页
字号:
 *
 * 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 + -