MT6255 2M sensor插值到5M实现方法
请修改以下代码:
1. 在 project make file 中將YUVCAM_INTERPOLATION 設成 HW
2. 在option.mak文件中新增MT6255
YUVCAM_INTERPOLATION_SUPPORT_PLATFORM = MT6235 MT6235B MT6253 MT6253E MT6253L MT6252 MT6252H MT6255
3. 在 \custom\drv\camera_common\sensor_capability.h 中 image sensor 的 macro 還是按照原來的 resolution 設成__IMAGE_SENSOR_2M__
4. 在 \custom\drv\camera_common\sensor_capability.h 中將底下這一段藍色的部份改成紅色的
#if (defined(__YUVCAM_INTERPOLATION_SW__) || defined(__YUVCAM_INTERPOLATION_HW__))
#if defined(__IMAGE_SENSOR_01M__)
#define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_03M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_03M_MAX_HEIGHT
#elif defined(__IMAGE_SENSOR_03M__)
#define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_1M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_1M_MAX_HEIGHT
#elif defined(__IMAGE_SENSOR_1M__)
#define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_2M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_2M_MAX_HEIGHT
#elif defined(__IMAGE_SENSOR_2M__)
#define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_3M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_3M_MAX_HEIGHT
#define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_5M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_5M_MAX_HEIGHT
#elif defined(__IMAGE_SENSOR_3M__)
#define IMAGE_SENSOR_TARGET_MAX_WIDTH IMAGE_5M_MAX_WIDTH
#define IMAGE_SENSOR_TARGET_MAX_HEIGHT IMAGE_5M_MAX_HEIGHT
5. 在 \interface\hal\camera\cal_mem_def.h 中將底下這一段藍色的部份改成紅色的
#if (defined(__YUVCAM_INTERPOLATION_SW__) || defined(__YUVCAM_INTERPOLATION_HW__))
#if defined(__IMAGE_SENSOR_01M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (300*1024) /* 300KB for 0.3M */
#elif defined(__IMAGE_SENSOR_03M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (896*1024) /* 896KB for 1.3M */
#elif defined(__IMAGE_SENSOR_1M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (1536*1024) /* 1536KB for 2M */
#elif defined(__IMAGE_SENSOR_2M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (2048*1024) /* 2048KB for 3M */
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (3072*1024) /* 3072KB for 5M */
#elif defined(__IMAGE_SENSOR_3M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (3072*1024) /* 3072KB for 5M */
#elif defined(__IMAGE_SENSOR_5M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (5600*1024) /* 5600KB for 8M */
#elif defined(__IMAGE_SENSOR_8M__)
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (5600*1024) /* 5600KB for 8M */
#else
//#error "Please define max resolution of sensor in image_sensor.h"
#define MAX_STILL_CAPTURE_JPEG_BUFF_SIZE (1*1024) /* a dummy buffer if no sensor is selected */
#endif
// the address offset between raw image and JPEG image buffer while overlap these two buffers
// it is to minimize the requirement of memory while capture a picture
#if (defined(__IMAGE_SENSOR_03M__)||defined(__IMAGE_SENSOR_01M__))
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (88320)
#elif defined(__IMAGE_SENSOR_1M__)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (93440)
#elif defined(__IMAGE_SENSOR_2M__)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (100608)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312)
#elif defined(__IMAGE_SENSOR_3M__)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312)
#elif defined(__IMAGE_SENSOR_5M__)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312)
#elif defined(__IMAGE_SENSOR_8M__)
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (109312)
#else
#define CAL_RAW_IMAGE_JPEG_OVERLAP_OFFSET (1024) /* dummy buffer if no sensor is selcted */
#endif
6. 在 \interface\hal\camera\isp_mem_def.h 中將底下這一段藍色的部份改成紅色的
#elif defined(MT6255)
#if defined(__JPEG_SENSOR_SUPPORT__)
#define ISP_IMAGE_BUF_SIZE (0)
#else
#define ISP_IMAGE_BUF_SIZE (IMAGE_SENSOR_SOURCE_MAX_WIDTH * IMAGE_SENSOR_SOURCE_MAX_HEIGHT * 3/2+32)
#define ISP_IMAGE_BUF_SIZE (IMAGE_SENSOR_TARGET_MAX_WIDTH * IMAGE_SENSOR_TARGET_MAX_HEIGHT * 3/2+32)
#endif
7. 不區分 main/sub 了(因為沒有定義IMAGE_SENSOR_TARGET_SUB_MAX_WIDTHHEIGHT),直接用 main 的 TARGET WIDTHHEIGHT 配置 (注意:也是有兩個地方要改)
在 \hal\camera\cal\src\cal_scenario_ctrl.c 中在底下這一段中加入紅色的部份.
if (CAL_CAMERA_SOURCE_MAIN == CurrentCameraId)
{
Resolution = (IMAGE_SENSOR_SOURCE_MAX_WIDTH-6)*(IMAGE_SENSOR_SOURCE_MAX_HEIGHT-6);
Resolution = (IMAGE_SENSOR_TARGET_MAX_WIDTH-6)*(IMAGE_SENSOR_TARGET_MAX_HEIGHT-6);
}
else if (CAL_CAMERA_SOURCE_SUB == CurrentCameraId)
{
Resolution = (IMAGE_SENSOR_SOURCE_SUB_MAX_WIDTH-6)*(IMAGE_SENSOR_SOURCE_SUB_MAX_HEIGHT-6);
}
#ifdef __YUVCAM_INTERPOLATION_HW__
Resolution = MdpStillCapturePara.fullsize_image_width * MdpStillCapturePara.fullsize_image_height;
#endif
請注意在 cal_scenario_ctrl.c 中有兩個地方有和這一段相同的 code, 兩個地方都要加.
8. 紅色字體代表刪除, 藍色字體代表新增
修改mcu\hal\mdp\src\mt6255\idp_scen_camera_capture_to_jpeg_mt6255.c
Idp_camera_capture_to_jpeg_read_user_config_hook()
{
case IDP_CAMERA_CAPTURE_TO_JPEG_FULLSIZE_IMAGE_CAPTURE_WIDTH:
config.image_capture_width = va_arg(ap, kal_uint32);
if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH < config.image_capture_width)
{
return KAL_FALSE;
}
break;
case IDP_CAMERA_CAPTURE_TO_JPEG_FULLSIZE_IMAGE_CAPTURE_HEIGHT:
config.image_capture_height = va_arg(ap, kal_uint32);
if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH < config.image_capture_height)
{
return KAL_FALSE;
}
break;
case IDP_CAMERA_CAPTURE_TO_JPEG_CROP_WIDTH:
config.crop_width = va_arg(ap, kal_uint32);
if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH < config.crop_width)
{
return KAL_FALSE;
}
owner->have_config_resz_crz = KAL_FALSE;
SET_BIT(crz_struct.mask, IDP_RESZ_CRZ_MASK__SRC_WIDTH);
break;
case IDP_CAMERA_CAPTURE_TO_JPEG_CROP_HEIGHT:
config.crop_height = va_arg(ap, kal_uint32);
if (IDP_CAMERA_CAPTURE_TO_JPEG_MAX_CAPTURED_WIDTH < config.crop_height)
{
return KAL_FALSE;
}
owner->have_config_resz_crz = KAL_FALSE;
SET_BIT(crz_struct.mask, IDP_RESZ_CRZ_MASK__SRC_HEIGHT);
break;
}
然后再把添加菜单就可以了。