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

📄 cam_msg_handler.c

📁 MTK6225 支持的200W像素的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
                {
                    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 + -