📄 ext_camera.c
字号:
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 + -