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

📄 usbvideo_cam_if.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:
	jpeg_encode_config_data.image_quality=g_usbvideo_camera_data.image_quality;
	jpeg_encode_config_data.jpeg_gray_mode=g_usbvideo_camera_data.jpeg_gray_mode;
	jpeg_encode_config_data.jpeg_file_start_address=g_usbvideo_camera_data.target_buffer_start_address;
	jpeg_encode_config_data.jpeg_file_buffer_size=g_usbvideo_camera_data.target_buffer_size;

	jpeg_codec_power_up();

	mp4_reset();
	config_image_dma(scene_id,g_usbvideo_camera_data.target_width,g_usbvideo_camera_data.target_height);
	config_jpeg_encoder(&jpeg_encode_config_data);
	config_image_processor(scene_id);
	config_pixel_resizer(scene_id);

#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
	/* Prepare IPP Data */
	ipp_capture_jpeg_data.intmem_start_address			=	g_usbvideo_camera_data.intmem_start_address;
	ipp_capture_jpeg_data.intmem_size						=	g_usbvideo_camera_data.intmem_size;
	ipp_capture_jpeg_data.extmem_start_address			=	g_usbvideo_camera_data.extmem_start_address;
	ipp_capture_jpeg_data.extmem_size						=	g_usbvideo_camera_data.extmem_size;

	ipp_capture_jpeg_data.image_src_width					=	g_usbvideo_camera_data.source_width;
	ipp_capture_jpeg_data.image_src_height					=	g_usbvideo_camera_data.source_height;
	ipp_capture_jpeg_data.image_capture_width				=	g_usbvideo_camera_data.target_width;
	ipp_capture_jpeg_data.image_capture_height			=	g_usbvideo_camera_data.target_height;
	
	ipp_capture_jpeg_data.image_quality						=	g_usbvideo_camera_data.image_quality;
	ipp_capture_jpeg_data.jpeg_yuv_mode						=	JPEG_FORMAT_YUV420;

	ipp_capture_jpeg_data.jpeg_file_start_address1		=	g_usbvideo_camera_data.target_buffer_start_address;
	ipp_capture_jpeg_data.jpeg_file_buffer_size1			=	g_usbvideo_camera_data.target_buffer_size;

	ipp_capture_jpeg_data.cam_capture_jpeg_cb				=	0;

	open_image_data_path(scene_id);
	config_camera_usbvideo_jpeg_data_path(scene_id,&ipp_capture_jpeg_data);
#endif
	jpeg_encoder_encode_result=0;
}	/* config_usbvideo_preview_jpeg() */

/*************************************************************************
* FUNCTION
*	usbvideo_camera_preview
*
* DESCRIPTION
*	This function starts camera preview
*
* PARAMETERS
*	usbvideo_data : the parameters for camera preview process
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void usbvideo_camera_preview(usbvideo_camera_process_struct* usbvideo_param)
{
	if (usbvideo_cam_operation_state != USBVIDEO_CAM_STANDBY_STATE)
		ASSERT(0);

	g_usbvideo_cam_buff = USBVideo_Get_Video_Buffer();	
	if(g_usbvideo_cam_buff!=NULL)
	{
		g_usbvideo_cam_size = usbvideo_param->target_size_enum;
		g_usbvideo_camera_data.target_width = VIDEO_SIZE[g_usbvideo_cam_size-1].width;
		g_usbvideo_camera_data.target_height = VIDEO_SIZE[g_usbvideo_cam_size-1].height;
		g_usbvideo_camera_data.target_buffer_size = VIDEO_SIZE[g_usbvideo_cam_size-1].max_frame_size;
	
	   ENABLE_CMOS_SESNOR;	
		config_usbvideo_preview_jpeg(usbvideo_param);
		usbvideo_cam_operation_state = USBVIDEO_CAM_PREVIEW_CHECK_STATE;
		/* Start Sensor Interrupt */
		SET_CAMERA_CAPTURE_MODE;
		SET_CAMERA_FRAME_RATE(0);
		ENABLE_VIEW_FINDER_MODE;
	}
}

/*************************************************************************
* FUNCTION
*	exit_usbvideo_camera_preview
*
* DESCRIPTION
*	This function exit camera preview
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void exit_usbvideo_camera_preview(void)
{
	if (usbvideo_cam_operation_state==USBVIDEO_CAM_PREVIEW_CHECK_STATE)
	{
   	kal_uint32 save_irq_mask;

     	save_irq_mask=SaveAndSetIRQMask();
   	usbvideo_cam_operation_state=USBVIDEO_CAM_STANDBY_STATE;
  	   RestoreIRQMask(save_irq_mask);

   	ae_on_off(KAL_FALSE);
   	awb_on_off(KAL_FALSE);
      if(jpeg_encoder_operation_state==JPEG_ENCODER_ENCODING_STATE)
      {
   		kal_uint32 i;      	
   		/* wait until JPEG encode completely */
   		for (i=0;i<20;i++)
   		{
   			kal_sleep_task(20);
				if ((jpeg_encoder_encode_result & JPEG_ENCODE_STALL)||
					 (jpeg_encoder_encode_result & JPEG_ENCODE_DONE))
   				i=100;
   		}
   		DISABLE_CMOS_SESNOR;
   		DISABLE_VIEW_FINDER_MODE;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
   		RESZ_Stop(scene_id);
   		RESZ_Close(scene_id);

   		clean_imgprc_coefficient(scene_id);
   		IMGPROC_Stop(scene_id);
   		IMGPROC_Close(scene_id);

   		stop_image_dma(scene_id);
   		IMGDMA_Close(scene_id);

   		intmem_deinit();
   		extmem_deinit();
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))      
			close_image_data_path(scene_id);
#endif      
      }
   }
   else if (usbvideo_cam_operation_state!=USBVIDEO_CAM_STANDBY_STATE)
      ASSERT(0);
   jpeg_codec_power_down();
}	/* exit_usbvideo_camera_preview() */

/*************************************************************************
* FUNCTION
*	usbvideo_camera_capture
*
* DESCRIPTION
*	This function start camera capture
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void usbvideo_camera_capture(usbvideo_camera_process_struct *usbvideo_param)
{
	if (usbvideo_cam_operation_state != USBVIDEO_CAM_STANDBY_STATE)
		ASSERT(0);

	g_usbvideo_cam_buff = USBVideo_Get_Still_Buffer();		
	if(g_usbvideo_cam_buff!=NULL)
	{	
   	g_usbvideo_cam_size = usbvideo_param->target_size_enum;
   	g_usbvideo_camera_data.target_width = STILL_SIZE[g_usbvideo_cam_size-1].width;
   	g_usbvideo_camera_data.target_height = STILL_SIZE[g_usbvideo_cam_size-1].height;
   	g_usbvideo_camera_data.target_buffer_size = STILL_SIZE[g_usbvideo_cam_size-1].max_frame_size;

		ENABLE_CMOS_SESNOR;
		config_usbvideo_preview_jpeg(usbvideo_param);
		usbvideo_cam_operation_state=USBVIDEO_CAM_CAPTURE_STATE;
	
		SET_CAMERA_CAPTURE_MODE;
		SET_CAMERA_FRAME_RATE(0);
		ENABLE_VIEW_FINDER_MODE;
	}
}	/* usbvideo_camera_capture() */

/*************************************************************************
* FUNCTION
*	exit_usbvideo_camera_capture
*
* DESCRIPTION
*	This function exit camera capture
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void exit_usbvideo_camera_capture(void)
{
	if (usbvideo_cam_operation_state==USBVIDEO_CAM_CAPTURE_STATE)
	{
   	kal_uint32 save_irq_mask;

     	save_irq_mask=SaveAndSetIRQMask();
   	usbvideo_cam_operation_state=USBVIDEO_CAM_STANDBY_STATE;
  	   RestoreIRQMask(save_irq_mask);

   	ae_on_off(KAL_FALSE);
   	awb_on_off(KAL_FALSE);
      if(jpeg_encoder_operation_state==JPEG_ENCODER_ENCODING_STATE)
      {
   		kal_uint32 i;      	
   		/* wait until JPEG encode completely */
   		for (i=0;i<20;i++)
   		{
   			kal_sleep_task(20);
				if ((jpeg_encoder_encode_result & JPEG_ENCODE_STALL)||
					 (jpeg_encoder_encode_result & JPEG_ENCODE_DONE))
   				i=100;
   		}
   		DISABLE_CMOS_SESNOR;
   		DISABLE_VIEW_FINDER_MODE;
#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))   	
   		RESZ_Stop(scene_id);
   		RESZ_Close(scene_id);

   		clean_imgprc_coefficient(scene_id);
   		IMGPROC_Stop(scene_id);
   		IMGPROC_Close(scene_id);

   		stop_image_dma(scene_id);
   		IMGDMA_Close(scene_id);

   		intmem_deinit();
   		extmem_deinit();
#elif (defined(MT6228)||defined(MT6229)||defined(MT6230))
			close_image_data_path(scene_id);
			jpeg_encoder_operation_state=JPEG_ENCODER_STANDBY_STATE;
#endif            
      }
	}
	else if (usbvideo_cam_operation_state!=USBVIDEO_CAM_STANDBY_STATE)
		ASSERT(0);
   jpeg_codec_power_down();		
}	/* usbvideo_camera_capture() */

static void usbvideo_camera_frame_timeout(void *parameter)
{
	GPTI_StopItem(usbvideo_camera_jpeg_timer_handle);	
	
	if((usbvideo_cam_operation_state==USBVIDEO_CAM_OFF_STATE) ||
		(usbvideo_cam_operation_state==USBVIDEO_CAM_STANDBY_STATE))
		return;
	
	if ((*(volatile unsigned int *) 0x80690000) & 0x10000)
	{
		DISABLE_VIEW_FINDER_MODE;
#if  (defined(MT6219))
		*((volatile unsigned int *) 0x80610004) = 0x600000;
		*((volatile unsigned int *) 0x80610004) = 0x60;
#elif  (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6228)||defined(MT6229)||defined(MT6230))		
		*((volatile unsigned int *) 0x80610004) = 0x60000;
		*((volatile unsigned int *) 0x80610004) = 0x6;
#endif		
		RESET_JPEG_ENCODER;
		ENABLE_JPEG_ENCODER;
		ENABLE_VIEW_FINDER_MODE;
		usbvideo_camera_jpeg_timer++;
		GPTI_StartItem(usbvideo_camera_jpeg_timer_handle, 73, usbvideo_camera_frame_timeout, NULL);								
	}		
	else
	{
	   jpeg_encode_config_data.image_quality=JPEG_ENCODER_POOR_QUALITY;		
		usbvideo_camera_frame_ready();
	}		
	// If retry too many times, ASSERT
	if(usbvideo_camera_jpeg_timer>50)
		ASSERT(0);
}

/*************************************************************************
* FUNCTION
*	usbvideo_camera_frame_ready
*
* DESCRIPTION
*	This function complete frame(HISR) and get next video buffer
*
* PARAMETERS
*	None
*
* RETURNS
*	None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void usbvideo_camera_frame_ready(void)
{
	kal_uint32 time=0;

	// JPEG Encode Done
	if(usbvideo_camera_jpeg_timer>0)
	{
		usbvideo_camera_jpeg_timer = 0;						
		jpeg_encoder_encode_result = 0;
		jpeg_file_size = 0;		
		usbvideo_complete_flag = KAL_FALSE;
	}		
	else if(jpeg_encoder_encode_result&JPEG_ENCODE_DONE)
	{
		time = GPT_return_current_count();
		jpeg_file_size = DRV_Reg32(JPEG_ENCODER_DMA_ADDR_REG)-DRV_Reg32(JPEG_ENCODER_DEST_ADDR_REG);
		usbvideo_complete_flag = KAL_TRUE;
	}
	else if(jpeg_encoder_encode_result&JPEG_ENCODE_STALL)
	{
		jpeg_encoder_encode_result = 0;
		jpeg_file_size = 0;		
		usbvideo_complete_flag = KAL_FALSE;
		usbvideo_camera_jpeg_timer = 0;		
		GPTI_StartItem(usbvideo_camera_jpeg_timer_handle, 100, usbvideo_camera_frame_timeout, NULL);
		return;
	}

	DISABLE_VIEW_FINDER_MODE;
	SET_CAMERA_PREVIEW_MODE;
#if  (defined(MT6226)||defined(MT6226M)||defined(MT6227)||defined(MT6229)||defined(MT6230))
	if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_FLASH_DONE_ENABLE_BIT)== 0)
	{
    	if( ae_count==camera_oper_data.ae_setting_cal_delay_frame ) 
    		DISABLE_AE_COUNT;
    }    		
#elif (defined(MT6228))
	if((REG_ISP_INT_ENABLE & REG_CAMERA_INT_VSYNC_ENABLE_BIT)== 0)
	{
    	if( ae_count==camera_oper_data.ae_setting_cal_delay_frame ) 
    		DISABLE_AE_COUNT;
    }    				
#endif		
#if (defined(MT6228)||defined(MT6229)||defined(MT6230))		
	DISABLE_CMOS_SESNOR;
#endif

#if (defined(MT6219)||defined(MT6226)||defined(MT6226M)||defined(MT6227))
	RESZ_Stop(scene_id);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -