📄 ext_camera.c
字号:
#ifndef DUAL_LCD
else if (main_lcd_operation_state==LCD_CAMERA_UPDATE_STATE)
#else
else if ((main_lcd_operation_state==LCD_CAMERA_UPDATE_STATE)||
(sub_lcd_operation_state==LCD_CAMERA_UPDATE_STATE))
#endif /* DUAL_LCD */
{
lcd_fb_update((lcd_frame_update_struct *) &ext_camera_preview_lcd_data);
}
else
ASSERT(0);
do
{
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();
jpeg_file_size=ext_cam_func->cam_module_capture_ready_check();
free_NFI_bus();
} while (jpeg_file_size==NULL_JPEG_FILE);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
lcd_power_down();
video_clip_mode=KAL_FALSE;
return jpeg_file_size;
}
else
return NULL_JPEG_FILE;
#else
ext_camera_capture((ext_camera_para_struct *)&ext_cam_para);
do
{
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);
}
}
kal_sleep_task(1);
get_NFI_bus();
jpeg_file_size=ext_cam_func->cam_module_capture_ready_check();
free_NFI_bus();
} while (jpeg_file_size==NULL_JPEG_FILE);
return jpeg_file_size;
#endif
} /* ext_camera_video_clip() */
kal_uint32 ext_camera_sticker_capture(ext_camera_para_struct *ext_cam_para, lcd_frame_update_to_mem_struct *lcd_para)
{
kal_uint32 jpeg_file_size;
#ifndef CAMERA_MODULE_WITH_LCD
if (ext_cam_func->cam_module_jpeg_encode!=NULL)
{
lcd_power_up();
/* for testing */
lcd_para->fb_update_mode=LCD_SW_TRIGGER_MODE;
lcd_para->block_mode=LCD_WM_CONT_MODE;
lcd_para->hw_update_layer=0;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
get_NFI_bus();
while (!ext_cam_func->cam_module_preview_ready_check()) {}; /* wait until one picture is get from external camera */
free_NFI_bus();
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
lcd_fb_update_to_memory(lcd_para);
lcd_power_up();
ext_cam_para->image_buffer_ptr=(kal_uint16 *) lcd_para->dest_buffer_address;
ext_cam_para->image_width=lcd_para->roi_width;
ext_cam_para->image_height=lcd_para->roi_height;
ext_cam_para->buffer_width=lcd_para->roi_width;
get_NFI_bus();
ext_cam_func->cam_module_jpeg_encode(ext_cam_para,KAL_FALSE);
free_NFI_bus();
do
{
get_NFI_bus();
jpeg_file_size=ext_cam_func->cam_module_capture_ready_check();
free_NFI_bus();
} while (jpeg_file_size==NULL_JPEG_FILE);
lcd_power_down();
L1SM_SleepEnable(camera_sleep_mode_handler);
ext_camera_state=EXT_CAMERA_STANDBY_STATE;
return jpeg_file_size;
}
else
return NULL_JPEG_FILE;
#else
/* update sticker */
wait_lcd_update();
ext_camera_osd_buffer_data.lcm_start_x=lcd_para->roi_offset_x;
ext_camera_osd_buffer_data.lcm_start_y=lcd_para->roi_offset_y;
ext_camera_osd_buffer_data.lcm_end_x=lcd_para->roi_offset_x+lcd_para->roi_width-1;
ext_camera_osd_buffer_data.lcm_end_y=lcd_para->roi_offset_y+lcd_para->roi_height-1;
ext_camera_osd_buffer_data.dest_buffer_address=lcd_para->dest_buffer_address;
ext_camera_osd_buffer_data.dest_buffer_size=lcd_para->dest_buffer_size;
ext_camera_osd_buffer_data.force_update=0;
lcd_fb_update_to_memory(lcd_para);
get_NFI_bus();
ext_cam_func->cam_module_write_lcdfb(&ext_camera_osd_buffer_data);
free_NFI_bus();
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=1;
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;
//ext_camera_capture(ext_cam_para);
do
{
get_NFI_bus();
jpeg_file_size=ext_cam_func->cam_module_capture_ready_check();
free_NFI_bus();
} while (jpeg_file_size==NULL_JPEG_FILE);
main_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#ifdef DUAL_LCD
sub_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#endif
ext_camera_state = EXT_CAMERA_STANDBY_STATE;
return jpeg_file_size;
#endif
} /* ext_camera_sticker_capture() */
void ext_camera_set_parameter(kal_uint8 cmd, kal_uint8 para)
{
lcd_power_up();
get_NFI_bus();
ext_cam_func->cam_module_set_para(cmd,para);
free_NFI_bus();
lcd_power_down();
} /* ext_camera_set_parameter() */
kal_bool write_ext_camera(kal_uint16 cmd, kal_uint16 para)
{
// kal_uint8 current_lcd_state;
engineering_mode_setting=KAL_TRUE;
ext_cam_reg_setting[((kal_uint8)cmd)]=1;
ext_cam_reg_value[((kal_uint8)cmd)]=para;
return KAL_TRUE;
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
}
kal_bool read_ext_camera(kal_uint16 cmd, kal_uint16 *para)
{
kal_uint8 current_lcd_state;
current_lcd_state=main_lcd_operation_state;
lcd_power_up();
main_lcd_operation_state=LCD_CAMERA_UPDATE_STATE; /* temp state to prevent lcd interface power down */
if (ext_camera_state==EXT_CAMERA_POWER_OFF_STATE)
{
get_NFI_bus();
ext_cam_func->cam_module_power_on();
free_NFI_bus();
ext_camera_state=EXT_CAMERA_INITIAL_STATE;
}
while (ext_camera_reset_status()!=KAL_TRUE) {}; /* wait until external camera ready */
if (ext_cam_func->cam_module_read_para!=NULL)
{
get_NFI_bus();
*para=ext_cam_func->cam_module_read_para(cmd);
free_NFI_bus();
main_lcd_operation_state=current_lcd_state;
lcd_power_down();
ext_camera_power_off();
return KAL_TRUE;
}
else
{
main_lcd_operation_state=current_lcd_state;
lcd_power_down();
ext_camera_power_off();
return KAL_FALSE;
}
}
void ext_camera_set_osd_buffer(kal_uint32 osd_addr, kal_uint32 osd_size)
{
#ifdef CAMERA_MODULE_WITH_LCD
ext_camera_lcd_menu_data.dest_buffer_address=osd_addr;
ext_camera_lcd_menu_data.dest_buffer_size=osd_size;
ext_camera_osd_buffer_data.dest_buffer_address=osd_addr;
ext_camera_osd_buffer_data.dest_buffer_size=osd_size;
#endif
}
void ext_camera_update_backend_lcd_buffer(lcd_frame_update_struct *ext_camera_osd_data)
{
#ifdef CAMERA_MODULE_WITH_LCD
kal_uint32 save_irq_mask;
if (ext_camera_osd_data->lcd_id==MAIN_LCD)
{
if ((main_lcd_operation_state!=LCD_CAMERA_ACTIVE_STATE)&&
(main_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE))
{
ASSERT(0);
}
}
#if (defined(DUAL_LCD))
else if (ext_camera_osd_data->lcd_id==SUB_LCD)
{
if ((sub_lcd_operation_state!=LCD_CAMERA_ACTIVE_STATE)&&
(sub_lcd_operation_state!=LCD_CAMERA_UPDATE_STATE))
{
ASSERT(0);
}
}
#endif
save_irq_mask=SaveAndSetIRQMask();
if (ext_camera_osd_data->lcd_id==MAIN_LCD)
main_lcd_operation_state=LCD_CAMERA_ACTIVE_UPDATE_STATE;
#ifdef DUAL_LCD
else if (ext_camera_osd_data->lcd_id==SUB_LCD)
sub_lcd_operation_state=LCD_CAMERA_ACTIVE_UPDATE_STATE;
#endif
RestoreIRQMask(save_irq_mask);
ext_camera_lcd_menu_data.fb_update_mode=ext_camera_osd_data->fb_update_mode;
ext_camera_lcd_menu_data.block_mode=LCD_WM_CONT_MODE;
ext_camera_lcd_menu_data.roi_offset_x=ext_camera_osd_data->roi_offset_x;
ext_camera_lcd_menu_data.roi_offset_y=ext_camera_osd_data->roi_offset_y;
ext_camera_lcd_menu_data.roi_width=ext_camera_osd_data->lcm_end_x-ext_camera_osd_data->lcm_start_x+1;
ext_camera_lcd_menu_data.roi_height=ext_camera_osd_data->lcm_end_y-ext_camera_osd_data->lcm_start_y+1;
ext_camera_lcd_menu_data.update_layer=ext_camera_osd_data->update_layer;
ext_camera_osd_buffer_data.lcd_id=ext_camera_osd_data->lcd_id;
ext_camera_osd_buffer_data.lcm_start_x=ext_camera_osd_data->lcm_start_x;
ext_camera_osd_buffer_data.lcm_start_y=ext_camera_osd_data->lcm_start_y;
ext_camera_osd_buffer_data.lcm_end_x=ext_camera_osd_data->lcm_end_x;
ext_camera_osd_buffer_data.lcm_end_y=ext_camera_osd_data->lcm_end_y;
ext_camera_osd_buffer_data.force_update=1;
ext_camera_osd_buffer_data.dest_buffer_address=ext_camera_lcd_menu_data.dest_buffer_address;
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();
save_irq_mask=SaveAndSetIRQMask();
main_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#ifdef DUAL_LCD
sub_lcd_operation_state=LCD_CAMERA_ACTIVE_STATE;
#endif
RestoreIRQMask(save_irq_mask);
kal_set_eg_events(lcd_event_id,LCD_CMD_COMPLETE_EVENT,KAL_OR);
#endif
}
void ext_camera_start_video_encode(ext_camera_retrieve_video_struct *ext_camera_retrieve_video_para)
{
#ifdef CAMERA_MODULE_WITH_LCD
get_NFI_bus();
ext_cam_func->cam_module_start_video_encode(ext_camera_retrieve_video_para);
free_NFI_bus();
#endif
}
void ext_camera_retrieve_video_data(ext_camera_retrieve_video_struct *ext_camera_retrieve_video_para)
{
#ifdef CAMERA_MODULE_WITH_LCD
get_NFI_bus();
ext_cam_func->cam_module_retrieve_video_data(ext_camera_retrieve_video_para);
free_NFI_bus();
#endif
}
void ext_camera_pause_video_encode(ext_camera_retrieve_video_struct *ext_camera_retrieve_video_para)
{
#ifdef CAMERA_MODULE_WITH_LCD
get_NFI_bus();
ext_cam_func->cam_module_pause_video_encode(ext_camera_retrieve_video_para);
free_NFI_bus();
#endif
}
void ext_camera_resume_video_encode(void)
{
#ifdef CAMERA_MODULE_WITH_LCD
get_NFI_bus();
ext_cam_func->cam_module_resume_video_encode();
free_NFI_bus();
#endif
}
void ext_camera_stop_video_encode(ext_camera_retrieve_video_struct *ext_camera_retrieve_video_para)
{
#ifdef CAMERA_MODULE_WITH_LCD
get_NFI_bus();
ext_cam_func->cam_module_stop_video_encode(ext_camera_retrieve_video_para);
free_NFI_bus();
#endif
}
#endif /* CAMERA_MODULE */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -