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

📄 ext_camera.c

📁 最新MTK手机软件源码
💻 C
📖 第 1 页 / 共 4 页
字号:

void ext_camera_power_off(void)
{
	lcd_power_up();	
#if (defined(CAMERA_MODULE_WITH_LCD))	
	if ((ext_camera_state==EXT_CAMERA_PREVIEW_STATE)||
		 (ext_camera_state==EXT_CAMERA_CAPTURE_STATE)||
		 (ext_camera_state==EXT_CAMERA_VIDEO_RECORD_STATE))
#else
	if ((ext_camera_state==EXT_CAMERA_PREVIEW_STATE)||
		 (ext_camera_state==EXT_CAMERA_CAPTURE_STATE))
#endif
	{
#ifndef DUAL_LCD
		if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
		if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
	 		(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
#endif	/* DUAL_LCD */
		{
#if (defined(CAMERA_MODULE_WITH_LCD))
			if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
			if (ext_camera_lcd==MAIN_LCD)
#endif
			{
				main_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
				lcd_fb_update((lcd_frame_update_struct *) &main_lcd_fb_update_para);
				kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
			}
#ifdef DUAL_LCD
#if (defined(CAMERA_MODULE_WITH_LCD))
			else if (sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
			else if (ext_camera_lcd==SUB_LCD)
#endif
			{
				sub_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
				lcd_fb_update((lcd_frame_update_struct *) &sub_lcd_fb_update_para);
				kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
			}
#endif
		}

		if (ext_camera_lcd==MAIN_LCD)
			main_lcd_operation_state=LCD_STANDBY_STATE;
#ifdef DUAL_LCD
		else if (ext_camera_lcd==SUB_LCD)
			sub_lcd_operation_state=LCD_STANDBY_STATE;
#endif
	}
#if (defined(CAMERA_MODULE_WITH_LCD))
	wait_lcd_update();
#endif
	get_NFI_bus();
	ext_cam_func->cam_module_power_off();
	free_NFI_bus();
#if (defined(CAMERA_MODULE_WITH_LCD))
		main_lcd_operation_state=LCD_STANDBY_STATE;
#ifdef DUAL_LCD
		sub_lcd_operation_state=LCD_STANDBY_STATE;
#endif
#endif
	lcd_power_down();
		
	L1SM_SleepEnable(camera_sleep_mode_handler);
	ext_camera_state=EXT_CAMERA_POWER_OFF_STATE;
}	/* ext_camera_power_off() */

void ext_camera_preview(ext_camera_para_struct *ext_cam_para, lcd_frame_update_struct *lcd_para)
{
	if (ext_camera_state!=EXT_CAMERA_STANDBY_STATE)
		ASSERT(0);

	lcd_power_up();
	ext_camera_lcd=lcd_para->lcd_id;
	ext_camera_preview_lcd_data.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
	ext_camera_preview_lcd_data.lcd_id=ext_camera_lcd;
	ext_camera_preview_lcd_data.fb_update_mode=lcd_para->fb_update_mode;
	ext_camera_preview_lcd_data.lcm_start_x=lcd_para->lcm_start_x;
	ext_camera_preview_lcd_data.lcm_start_y=lcd_para->lcm_start_y;
	ext_camera_preview_lcd_data.lcm_end_x=lcd_para->lcm_end_x;
	ext_camera_preview_lcd_data.lcm_end_y=lcd_para->lcm_end_y;
	ext_camera_preview_lcd_data.roi_offset_x=lcd_para->roi_offset_x;
	ext_camera_preview_lcd_data.roi_offset_y=lcd_para->roi_offset_y;
	ext_camera_preview_lcd_data.update_layer=lcd_para->update_layer;

	if (ext_camera_lcd==MAIN_LCD)
		main_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
#ifdef DUAL_LCD
	else if (ext_camera_lcd==SUB_LCD)
		sub_lcd_operation_state=LCD_CAMERA_UPDATE_STATE;
#endif
	else
		ASSERT(0);

	L1SM_SleepDisable(camera_sleep_mode_handler);
	/* 050309 MC Lin Add */
	ext_camera_config_data.image_width=ext_cam_para->image_width;
	ext_camera_config_data.image_height=ext_cam_para->image_height;
	/* 050309end of MC Lin Add */
	ext_camera_config_data.preview_width=ext_cam_para->preview_width;
	ext_camera_config_data.preview_height=ext_cam_para->preview_height;
	ext_camera_config_data.white_balance_mode1=ext_cam_para->white_balance_mode1;
	ext_camera_config_data.ev_value=ext_cam_para->ev_value;
	ext_camera_config_data.gamma_table=ext_cam_para->gamma_table;
	ext_camera_config_data.image_effect1=ext_cam_para->image_effect1;
	ext_camera_config_data.frame_rate=ext_cam_para->frame_rate;
	ext_camera_config_data.image_buffer_ptr=ext_cam_para->image_buffer_ptr;
	ext_camera_config_data.buffer_width=ext_cam_para->buffer_width;
	ext_camera_config_data.buffer_height=ext_cam_para->buffer_height;
	ext_camera_config_data.preview_offset_x = ext_cam_para->preview_offset_x;
	ext_camera_config_data.preview_offset_y = ext_cam_para->preview_offset_y;
	ext_camera_config_data.preview_rotate = ext_cam_para->preview_rotate;
	ext_camera_config_data.snapshot_number=ext_cam_para->snapshot_number;
	ext_camera_config_data.banding_freq=ext_cam_para->banding_freq;
	ext_camera_config_data.image_buffer_ptr=ext_cam_para->image_buffer_ptr;
	ext_camera_config_data.zoom_factor=ext_cam_para->zoom_factor;
	ext_camera_config_data.total_file_size=0;
	ext_camera_config_data.captured_picture=0;
	ext_camera_config_data.continue_capture = ext_cam_para->continue_capture;

#ifdef CAMERA_MODULE_WITH_LCD
	
	ext_camera_config_data.lcd_id=lcd_para->lcd_id;	
	ext_camera_config_data.src_key_color=ext_cam_para->src_key_color;
	ext_camera_config_data.preview_offset_x = ext_cam_para->preview_offset_x+lcd_para->lcm_start_x;
	ext_camera_config_data.preview_offset_y = ext_cam_para->preview_offset_y+lcd_para->lcm_start_y;
	ext_camera_config_data.video_mode = ext_cam_para->video_mode;

	ext_camera_lcd_menu_data.fb_update_mode=LCD_SW_TRIGGER_MODE;		
	ext_camera_lcd_menu_data.block_mode=LCD_WM_CONT_MODE;				
	ext_camera_lcd_menu_data.dest_block_width=lcd_para->lcm_end_x-lcd_para->lcm_start_x+1;		
	ext_camera_lcd_menu_data.dest_buffer_address=(kal_uint32)ext_cam_para->image_buffer_ptr;	
	ext_camera_lcd_menu_data.dest_buffer_size=ext_cam_para->image_buffer_size;    
	ext_camera_lcd_menu_data.roi_offset_x=lcd_para->roi_offset_x;			
	ext_camera_lcd_menu_data.roi_offset_y=lcd_para->roi_offset_y;			
	ext_camera_lcd_menu_data.roi_width=lcd_para->lcm_end_x-lcd_para->lcm_start_x+1;				
	ext_camera_lcd_menu_data.roi_height=lcd_para->lcm_end_y-lcd_para->lcm_start_y+1;				
	ext_camera_lcd_menu_data.update_layer=lcd_para->update_layer;        
   ext_camera_lcd_menu_data.hw_update_layer=0;     

	wait_lcd_update();
	ext_camera_osd_buffer_data.lcd_id=ext_camera_preview_lcd_data.lcd_id;
	ext_camera_osd_buffer_data.lcm_start_x=ext_camera_preview_lcd_data.lcm_start_x;
	ext_camera_osd_buffer_data.lcm_start_y=ext_camera_preview_lcd_data.lcm_start_y;
	ext_camera_osd_buffer_data.lcm_end_x=ext_camera_preview_lcd_data.lcm_end_x;
	ext_camera_osd_buffer_data.lcm_end_y=ext_camera_preview_lcd_data.lcm_end_y;
	ext_camera_osd_buffer_data.dest_buffer_address=(kal_uint32)ext_camera_config_data.image_buffer_ptr;
	ext_camera_osd_buffer_data.dest_buffer_size=ext_camera_config_data.image_buffer_size;
	ext_camera_osd_buffer_data.src_key_color=ext_camera_config_data.src_key_color;
	ext_camera_osd_buffer_data.force_update=0;
	lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
	get_NFI_bus();
	ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
	free_NFI_bus();
#endif

#if (defined(CAMERA_MODULE_WITH_LCD))
	if(ext_cam_para->video_mode)
		ext_camera_state=EXT_CAMERA_VIDEO_RECORD_STATE;
	else
		ext_camera_state=EXT_CAMERA_PREVIEW_STATE;
#else
	ext_camera_state=EXT_CAMERA_PREVIEW_STATE;
#endif
	get_NFI_bus();
	ext_cam_func->cam_module_preview(&ext_camera_config_data);
	free_NFI_bus();
	lcd_power_down();
}	/* ext_camera_preview() */

void exit_ext_camera_preview(void)
{
	lcd_power_up();
#if (defined(CAMERA_MODULE_WITH_LCD))	
	if ((ext_camera_state!=EXT_CAMERA_PREVIEW_STATE) && (ext_camera_state!=EXT_CAMERA_VIDEO_RECORD_STATE))
#else
	if (ext_camera_state!=EXT_CAMERA_PREVIEW_STATE)
#endif
		ASSERT(0);
	L1SM_SleepEnable(camera_sleep_mode_handler);
	ext_camera_state=EXT_CAMERA_STANDBY_STATE;

#if (defined(CAMERA_MODULE_WITH_LCD))
	wait_lcd_update();
#ifndef DUAL_LCD
			if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
			if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
		 		(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
#endif	/* DUAL_LCD */
			{
				ext_camera_osd_buffer_data.lcd_id=ext_camera_preview_lcd_data.lcd_id;
				ext_camera_osd_buffer_data.lcm_start_x=ext_camera_preview_lcd_data.lcm_start_x;
				ext_camera_osd_buffer_data.lcm_start_y=ext_camera_preview_lcd_data.lcm_start_y;
				ext_camera_osd_buffer_data.lcm_end_x=ext_camera_preview_lcd_data.lcm_end_x;
				ext_camera_osd_buffer_data.lcm_end_y=ext_camera_preview_lcd_data.lcm_end_y;
				ext_camera_osd_buffer_data.dest_buffer_address=(kal_uint32)ext_camera_config_data.image_buffer_ptr;
				ext_camera_osd_buffer_data.dest_buffer_size=ext_camera_config_data.image_buffer_size;
				ext_camera_osd_buffer_data.force_update=0;

//		if (ext_camera_lcd==MAIN_LCD)
		if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
				{
					lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
					get_NFI_bus();
					ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
					free_NFI_bus();
					kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
				}
				#ifdef DUAL_LCD
//			else if (ext_camera_lcd==SUB_LCD)
			else if (sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
					{
						lcd_fb_update_to_memory(&ext_camera_lcd_menu_data);
						get_NFI_bus();
						ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
						free_NFI_bus();
						kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
					}
				#endif
			}
		main_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#ifdef DUAL_LCD
		sub_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#endif

	if (ext_cam_func->exit_cam_module_preview!=NULL)
	{
		get_NFI_bus();
	ext_cam_func->exit_cam_module_preview();
		free_NFI_bus();
	}

#else	// !CAMERA_MODULE_WITH_LCD
	if (ext_cam_func->exit_cam_module_preview!=NULL)
	{
		get_NFI_bus();
		ext_cam_func->exit_cam_module_preview();
		free_NFI_bus();
	}

#ifndef DUAL_LCD
			if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
#else
			if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
		 		(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
#endif	/* DUAL_LCD */
			{
				if (ext_camera_lcd==MAIN_LCD)
				{
						main_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
						lcd_fb_update((lcd_frame_update_struct *) &main_lcd_fb_update_para);
						kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
					}
				#ifdef DUAL_LCD
					else if (ext_camera_lcd==SUB_LCD)
					{
						sub_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
						lcd_fb_update((lcd_frame_update_struct *) &sub_lcd_fb_update_para);
						kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
				}
			#endif
			}

	if (ext_camera_lcd==MAIN_LCD)
		main_lcd_operation_state=LCD_STANDBY_STATE;
#ifdef DUAL_LCD
	else if (ext_camera_lcd==SUB_LCD)
		sub_lcd_operation_state=LCD_STANDBY_STATE;
#endif
#endif
	lcd_power_down();
}	/* exit_ext_camera_preview() */

void ext_camera_capture(ext_camera_para_struct *ext_cam_para)
{
	lcd_power_up();
	if (ext_camera_state!=EXT_CAMERA_PREVIEW_STATE)
		ASSERT(0);

	burst_snapshot_number=ext_cam_para->snapshot_number;

	ext_camera_config_data.burst_capture_ptr=ext_cam_para->burst_capture_ptr;
	ext_camera_config_data.image_width=ext_cam_para->image_width;
	ext_camera_config_data.image_height=ext_cam_para->image_height;
	ext_camera_config_data.jpeg_compression_ratio=ext_cam_para->jpeg_compression_ratio;
	ext_camera_config_data.snapshot_number=ext_cam_para->snapshot_number;
	ext_camera_config_data.jpeg_buffer_ptr=ext_cam_para->jpeg_buffer_ptr;
	ext_camera_config_data.image_buffer_size=ext_cam_para->image_buffer_size;
	ext_camera_config_data.total_file_size=0;
	ext_camera_config_data.captured_picture=0;
	ext_camera_config_data.sticker_capture=0;
	ext_camera_config_data.continue_capture = ext_cam_para->continue_capture;

	get_NFI_bus();
	ext_cam_func->cam_module_capture(&ext_camera_config_data);
	free_NFI_bus();
	ext_camera_state=EXT_CAMERA_CAPTURE_STATE;
	lcd_power_down();
}	/* ext_camera_capture() */

kal_uint8 ext_camera_video_frame_rate(void)
{
	volatile kal_uint8 result;

	get_NFI_bus();
	result=ext_cam_func->cam_module_frame_rate();
	free_NFI_bus();
	return (result);
//	return (ext_cam_func->cam_module_frame_rate());
}

kal_uint32 ext_camera_video_clip(ext_camera_para_struct *ext_cam_para)
{
	kal_uint32 jpeg_file_size;

#ifndef CAMERA_MODULE_WITH_LCD
	if (ext_cam_func->cam_module_jpeg_encode!=NULL)
	{
		video_clip_mode=KAL_TRUE;
		lcd_power_up();
		if (ext_camera_state!=EXT_CAMERA_PREVIEW_STATE)
			ASSERT(0);

		get_NFI_bus();
		while (!ext_cam_func->cam_module_preview_ready_check())
		{
			free_NFI_bus();
			kal_sleep_task(1);
			if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
			{
				if (ext_camera_lcd==MAIN_LCD)
				{
					main_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
					lcd_fb_update((lcd_frame_update_struct *) &main_lcd_fb_update_para);
					kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
				}
			}
			get_NFI_bus();
		};
		free_NFI_bus();

		ext_cam_para->image_width=ext_camera_config_data.preview_width;
		ext_cam_para->image_height=ext_camera_config_data.preview_height;
		ext_cam_para->buffer_width=ext_camera_config_data.buffer_width;
        //add by JoeTsou to fix ae disable issue after video_recorder//
        ext_cam_para->continue_capture=0;


		get_NFI_bus();
		ext_cam_func->cam_module_jpeg_encode(ext_cam_para,KAL_TRUE);
		free_NFI_bus();

	#ifndef DUAL_LCD
		if (main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)
	#else
		if ((main_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE)||
	 		(sub_lcd_operation_state==LCD_CAMERA_CMD_QUEUE_STATE))
	#endif	/* DUAL_LCD */
		{
			if (ext_camera_lcd==MAIN_LCD)
			{
				main_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
				lcd_fb_update((lcd_frame_update_struct *) &main_lcd_fb_update_para);
				kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
			}
		#ifdef DUAL_LCD
			else if (ext_camera_lcd==SUB_LCD)
			{
				sub_lcd_fb_update_para.module_id=LCD_UPDATE_MODULE_EXT_CAMERA;
				lcd_fb_update((lcd_frame_update_struct *) &sub_lcd_fb_update_para);
				kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
			}
		#endif
		}

⌨️ 快捷键说明

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