📄 cam_msg_handler.c
字号:
{
cam_param.jpeg_buffer_ptr = (kal_uint8*) cam_context_p->capture_buffer_p;
cam_context_p->capture_check_conut = 0;
cam_context_p->capture_retry_conut = 0;
#ifdef __MTK_TARGET__
ext_cam_capture(&cam_param);
med_start_timer(CAM_READY_POLLING_TIMER, CAM_CAPTURE_POLLING_TIME, cam_capture_check, 0);
#endif /* __MTK_TARGET__ */
CAM_ENTER_STATE(CAM_CAPTURE);
}
else
{
lcd_frame_update_to_mem_struct lcd_param;
kal_int32 file_size;
cam_param.jpeg_buffer_ptr = (kal_uint8*) cam_context_p->capture_buffer_p;
#if 0 //只要带相框的拍照才会用到,目前并不使用modified by ycd for capture 2008.04.25
lcd_param.fb_update_mode = LCD_SW_TRIGGER_MODE;
lcd_param.block_mode = LCD_WM_CONT_MODE;
/* for lcd if */
lcd_param.dest_buffer_size = req_p->image_width * req_p->image_height * 2;
lcd_param.dest_buffer_address = cam_context_p->extmem_start_address =
(kal_uint32) med_alloc_ext_mem(lcd_param.dest_buffer_size);
lcd_param.roi_offset_x = req_p->roi_offset_x;
lcd_param.roi_offset_y = req_p->roi_offset_y;
lcd_param.roi_width = req_p->image_width;
lcd_param.roi_height = req_p->image_height;
lcd_param.update_layer = req_p->capture_layer;
lcd_param.hw_update_layer = cam_context_p->hw_update_layer;
#endif
if ((file_size = ext_cam_sticker_capture(&cam_param, &lcd_param)) != NULL_JPEG_FILE)
{
result = cam_close_image_file(file_size);
}
else
{
cam_close_image_file(0);
if(ext_cam_get_last_error(ERROR_INFO_MOD_CAMERA_CAPTURE) == SIMC_CAM_RET_CAPTURE_BUFFER_FLOW)
{
result = MED_RES_BUFFER_INSUFFICIENT;
}
else
{
result = MED_RES_ERROR;
}
}
#if 0 //只要带相框的拍照才会用到,目前并不使用modified by ycd for capture 2008.04.25
med_free_ext_mem((void **)(&cam_context_p->extmem_start_address));
#endif
cam_set_result(result);
CAM_ENTER_STATE(CAM_READY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else
{
cam_set_result(result);
#ifdef __MTK_TARGET__
ext_cam_stop_preview();
#endif
CAM_ENTER_STATE(CAM_READY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else if (req_p->media_mode == MED_MODE_ARRAY)
{
cam_param.image_width = img_context_p->image_width = req_p->image_width;
cam_param.image_height = img_context_p->image_height = req_p->image_height;
cam_param.jpeg_compression_ratio = cam_context_p->image_quality =
req_p->image_quality;//(kal_uint8) cam_jpg_qty_param_map[req_p->image_quality];
cam_param.snapshot_number = req_p->snapshot_number;
if (cam_param.snapshot_number > 1 && req_p->jpegs_p != NULL)
{
ASSERT(cam_param.snapshot_number > 1 && req_p->jpegs_p != NULL)
cam_param.burst_capture_ptr = (ext_camera_burst_struct*) req_p->jpegs_p;
}
/* stop preview timer */
med_stop_timer(CAM_READY_POLLING_TIMER);
if (req_p->data != NULL && req_p->file_buffer_len > 0)
{
if (req_p->source_device == CAM_SRC_ISP)
{
cam_param.jpeg_buffer_ptr = (kal_uint8*) req_p->data;
cam_param.image_buffer_size = req_p->file_buffer_len;
cam_context_p->file_size_p = req_p->file_size_p;
cam_context_p->capture_check_conut = 0;
cam_context_p->capture_retry_conut = 0;
#ifdef __MTK_TARGET__
ext_cam_capture(&cam_param);
med_start_timer(CAM_READY_POLLING_TIMER, CAM_CAPTURE_POLLING_TIME, cam_capture_check, 0);
#endif /* __MTK_TARGET__ */
CAM_ENTER_STATE(CAM_CAPTURE);
}
else
{
lcd_frame_update_to_mem_struct lcd_param;
kal_int32 file_size;
cam_param.jpeg_buffer_ptr = (kal_uint8*) req_p->data;
cam_param.image_buffer_size = req_p->file_buffer_len;
cam_context_p->file_size_p = req_p->file_size_p;
lcd_param.fb_update_mode = LCD_SW_TRIGGER_MODE;
lcd_param.block_mode = LCD_WM_CONT_MODE;
/* for lcd if */
lcd_param.dest_buffer_size = req_p->image_width * req_p->image_height * 2;
lcd_param.dest_buffer_address = cam_context_p->extmem_start_address =
(kal_uint32) med_alloc_ext_mem(lcd_param.dest_buffer_size);
lcd_param.roi_offset_x = req_p->roi_offset_x;
lcd_param.roi_offset_y = req_p->roi_offset_y;
lcd_param.roi_width = req_p->image_width;
lcd_param.roi_height = req_p->image_height;
lcd_param.update_layer = req_p->capture_layer;
lcd_param.hw_update_layer = cam_context_p->hw_update_layer;
if ((file_size = ext_cam_sticker_capture(&cam_param, &lcd_param)) != NULL_JPEG_FILE)
{
*(cam_context_p->file_size_p) = file_size;
result = MED_RES_OK;
}
else
{
result = MED_RES_ERROR;
}
med_free_ext_mem((void **)(&cam_context_p->extmem_start_address));
cam_set_result(result);
CAM_ENTER_STATE(CAM_READY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else
{
cam_set_result(result);
#ifdef __MTK_TARGET__
ext_cam_stop_preview();
#endif
CAM_ENTER_STATE(CAM_READY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else if (req_p->media_mode == MED_MODE_BUFFER)
{
kal_uint32 file_buffer_size;
/* stop prevew before capture */
cam_param.image_width = img_context_p->image_width = req_p->image_width;
cam_param.image_height = img_context_p->image_height = req_p->image_height;
cam_param.jpeg_compression_ratio = cam_context_p->image_quality =
req_p->image_quality;//(kal_uint8) cam_jpg_qty_param_map[req_p->image_quality];
cam_param.snapshot_number = req_p->snapshot_number;
if (cam_param.snapshot_number > 1 && req_p->jpegs_p != NULL)
{
ASSERT(cam_param.snapshot_number > 1 && req_p->jpegs_p != NULL)
cam_param.burst_capture_ptr = (ext_camera_burst_struct*) req_p->jpegs_p;
}
/* stop preview timer */
med_stop_timer(CAM_READY_POLLING_TIMER);
if (req_p->source_device == CAM_SRC_ISP)
{
#if (defined(__BAR_HI03__) || defined(__BAR_HI06__) || defined(__BAR_G35__))
file_buffer_size=600*1024;
#else
file_buffer_size = MAX_CAM_FILE_BUFFER_LEN;
#endif
}
else
{
file_buffer_size = 600*1024;
}
#ifdef __MMI_DSM__
if(isDsmUseCamera)
file_buffer_size = 50*1024;
#endif
CAM_FREE_CAPTURE_BUFFER();
cam_context_p->capture_buffer_p = (kal_uint32) med_alloc_ext_mem(file_buffer_size);
cam_context_p->capture_buffer_pp = req_p->capture_buffer_p;
if (cam_context_p->capture_buffer_p != NULL)
{
if (req_p->source_device == CAM_SRC_ISP)
{
cam_param.jpeg_buffer_ptr = (kal_uint8*) cam_context_p->capture_buffer_p;
cam_param.image_buffer_size = file_buffer_size;
cam_context_p->file_size_p = req_p->file_size_p;
cam_context_p->capture_check_conut = 0;
cam_context_p->capture_retry_conut = 0;
#ifdef __MTK_TARGET__
ext_cam_capture(&cam_param);
med_start_timer(CAM_READY_POLLING_TIMER, CAM_CAPTURE_POLLING_TIME, cam_capture_check, 0);
#endif /* __MTK_TARGET__ */
CAM_ENTER_STATE(CAM_CAPTURE);
}
else
{
lcd_frame_update_to_mem_struct lcd_param;
kal_int32 file_size;
cam_param.jpeg_buffer_ptr = (kal_uint8*) cam_context_p->capture_buffer_p;
cam_param.image_buffer_size = file_buffer_size;
cam_context_p->file_size_p = req_p->file_size_p;
#if 0 //只要带相框的拍照才会用到,目前并不使用modified by ycd for capture 2008.04.25
lcd_param.fb_update_mode = LCD_SW_TRIGGER_MODE;
lcd_param.block_mode = LCD_WM_CONT_MODE;
/* for lcd if */
lcd_param.dest_buffer_size = req_p->image_width * req_p->image_height * 2;
lcd_param.dest_buffer_address = cam_context_p->extmem_start_address =
(kal_uint32) med_alloc_ext_mem(lcd_param.dest_buffer_size);
lcd_param.roi_offset_x = req_p->roi_offset_x;
lcd_param.roi_offset_y = req_p->roi_offset_y;
lcd_param.roi_width = req_p->image_width;
lcd_param.roi_height = req_p->image_height;
lcd_param.update_layer = req_p->capture_layer;
lcd_param.hw_update_layer = cam_context_p->hw_update_layer;
#endif
if ((file_size = ext_cam_sticker_capture(&cam_param, &lcd_param)) != NULL_JPEG_FILE)
{
*(cam_context_p->file_size_p) = file_size;
*(cam_context_p->capture_buffer_pp) = (void*)cam_context_p->capture_buffer_p;
result = MED_RES_OK;
}
else
{
if(ext_cam_get_last_error(ERROR_INFO_MOD_CAMERA_CAPTURE) == SIMC_CAM_RET_CAPTURE_BUFFER_FLOW)
{
result = MED_RES_BUFFER_INSUFFICIENT;
}
else
{
result = MED_RES_ERROR;
}
}
#if 0 //只要带相框的拍照才会用到,目前并不使用modified by ycd for capture 2008.04.25
med_free_ext_mem((void **)(&cam_context_p->extmem_start_address));
#endif
cam_set_result(result);
CAM_ENTER_STATE(CAM_READY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else
{
cam_set_result(result);
#ifdef __MTK_TARGET__
ext_cam_stop_preview();
#endif
CAM_ENTER_STATE(CAM_READY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else
{
cam_set_result(MED_RES_INVALID_FORMAT);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
}
}
else
{
cam_set_result(MED_RES_BUSY);
CAM_SET_EVENT(CAM_EVT_CAPTURE);
ASSERT(0);
}
SIMC_CAM_PRITNF(CAPTURE REQ COM);
}
/*****************************************************************************
* FUNCTION
* cam_set_zoom_factor
* DESCRIPTION
* This function is to set the camera zoom factor.
* PARAMETERS
* value [IN]
* RETURNS
* void
*****************************************************************************/
kal_int16 cam_set_zoom_factor(kal_int16 value)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
SIMC_CAM_PRITNF(ZOOM SETING);
#ifdef __MTK_TARGET__
ext_cam_set_parameter(CAM_PARAM_ZOOM_FACTOR/*cam_command_map[CAM_PARAM_ZOOM_FACTOR]*/, value); //HuangYi, 2007-08-03
#endif
SIMC_CAM_PRITNF(ZOOM SETING COM);
return MED_RES_OK;
}
/*****************************************************************************
* FUNCTION
* cam_set_contrast
* DESCRIPTION
* This function is to set the contrast.
* PARAMETERS
* value [IN]
* RETURNS
* void
*****************************************************************************/
kal_int16 cam_set_contrast(kal_int16 value)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return MED_RES_ERROR;
}
/*****************************************************************************
* FUNCTION
* cam_set_brightness
* DESCRIPTION
* This function is to set the brightness.
* PARAMETERS
* value [IN]
* RETURNS
* void
*****************************************************************************/
kal_int16 cam_set_brightness(kal_int16 value)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return MED_RES_ERROR;
}
/*****************************************************************************
* FUNCTION
* cam_set_hue
* DESCRIPTION
* This function is to set the hue.
* PARAMETERS
* value [IN]
* RETURNS
* void
*****************************************************************************/
kal_int16 cam_set_hue(kal_int16 value)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return MED_RES_ERROR;
}
/*****************************************************************************
* FUNCTION
* cam_set_gamma
* DESCRIPTION
* This function is to set the gamma value.
* PARAMETERS
* value [IN]
* RETURNS
* void
*****************************************************************************/
kal_int16 cam_set_gamma(kal_int16 value)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return MED_RES_ERROR;
}
/*****************************************************************************
* FUNCTION
* cam_set_wb
* DESCRIPTION
* This function is to set the white balance value.
* PARAMETERS
* value [IN]
* RETURNS
* void
*********************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -