OV5640 YUV的自动对焦功能为何没有开启
现在我们在MT6572的平台上做了如下配置,只能显示出来一个对焦框,但是实际无对焦功能 。
ov5640 gc0328 都是后CAM,而gc0329是前CAM
ProjectConfig.mk配置如下:
CUSTOM_HAL_IMGSENSOR=ov5640_yuv_af gc0329_yuv gc0328_yuv
CUSTOM_HAL_MAIN_IMGSENSOR=ov5640_yuv_af gc0328_yuv
CUSTOM_KERNEL_IMGSENSOR=ov5640_yuv_af gc0329_yuv gc0328_yuv
CUSTOM_KERNEL_MAIN_IMGSENSOR=ov5640_yuv_af gc0328_yuv
CUSTOM_HAL_LENS=sensordrive dummy_lens
CUSTOM_HAL_MAIN_LENS=sensordrive
CUSTOM_KERNEL_LENS=sensordrive dummy_lens
CUSTOM_KERNEL_MAIN_LENS=sensordrive
lenslist.cpp 如下的配置:
- MSDK_LENS_INIT_FUNCTION_STRUCT LensList[MAX_NUM_OF_SUPPORT_LENS] =
- {
- {DUMMY_SENSOR_ID, DUMMY_LENS_ID, "Dummy", pDummy_getDefaultData},
- #if defined(SENSORDRIVE)
- //{DUMMY_SENSOR_ID, SENSOR_DRIVE_LENS_ID, "kd_CAMERA_hw", pSensorDrive_getDefaultData},
- {OV5640_SENSOR_ID, SENSOR_DRIVE_LENS_ID, "kd_camera_hw", pSensorDrive_getDefaultData},
- // for backup lens, need assign correct SensorID
- //{OV5642_SENSOR_ID, SENSOR_DRIVE_LENS_ID, "kd_camera_hw", pSensorDrive_getDefaultData},
- #endif
- #if defined(OV8825AF)
- {OV8825_SENSOR_ID, OV8825AF_LENS_ID, "OV8825AF", pOV8825AF_getDefaultData},
- #endif
- #if defined(FM50AF)
- {DUMMY_SENSOR_ID, FM50AF_LENS_ID, "FM50AF", pFM50AF_getDefaultData},
- #endif
- // for new added lens, need assign correct SensorID
- #if defined(MT9P017AF)
- {MT9P017mipi_SENSOR_ID, MT9P017AF_LENS_ID, "MT9P017AF", pMT9P017AF_getDefaultData},
- #endif
- };
- // AF Mode
- CONFIG_FEATURE_SD(FID_AF_MODE,
- BY_DEFAULT(AF_MODE_AFS),
- AF_MODE_AFS,AF_MODE_INFINITY
- )
- //......................................................................
- #if 0
- // AF Meter
- CONFIG_FEATURE_SD(FID_AF_METERING,
- BY_DEFAULT(AF_METER_SPOT),
- AF_METER_SPOT, AF_METER_MATRIX
- )
- #endif
我现在不知道还有哪些东西没有配对?
请大家指点!
兄弟,你是的ov5640是什么借口的,留个联系方式。
YUV接口。
你的摄像对自带的AF,有没有自带相关AF方面的驱动。还有,你确定你的这个AF功能已经注册上去了?
现在打LOG能看到他lensSearch是成功了。
你在init.rc里面注册了没?
马达供电了么
马达肯定供电了,进CAM时都有声
有sensordrive 这个是MTK原始就有的。
但是有些AF驱动是摄像头自带的!
是不是对焦算法不对!最好找FAE确认一下!
还没有跑到这个SENSOR的AF的驱动代码。所以应当与这个还没有关系的。
[DESCRIPTION]
在已经有一颗YUV 的driver,并且sensor内置AF core的情况下要实现YUV + AF可以通过以下方式来做,请step by step check
[SOLUTION]
1, 确定是哪一颗VCM并找FAE要相关AF init setting
2, 确定控制方式的命令,需要找FAE要setting,start signal focus,start continue focus,set AF window,query AF state ,stop focus 这些函数的写法,具体需要参照第9步的的feature Ctrl需要填写的case
3, 配置makefile:
CUSTOM_HAL_IMGSENSOR = ××××_yuv_af
CUSTOM_KERNEL_IMGSENSOR = ××××_yuv_af
CUSTOM_HAL_MAIN_IMGSENSOR = ××××_yuv_af
CUSTOM_KERNEL_MAIN_IMGSENSOR = ××××_yuv_af
CUSTOM_HAL_LENS = sensordrive
CUSTOM_KERNEL_LENS = sensordrive
CUSTOM_HAL_MAIN_LENS = sensordrive
CUSTOM_KERNEL_MAIN_LENS = sensordrive
4, 配置AF
alps\mediatek\custom\common\hal\lens\src\lenslist.cpp LensList:
5, 修改文件夹名字以及文件名字, ××××_yuv改成××××_yuv_af,主要修改kernel下的folder以及文件名称,hal下面的folder名称
6, 在kd_sensorlist.h 添加:
7, 在sensorlist.cpp里面 添加AF部分的定义:
8, 打开feature table (cfg_ftbl_****.h) AF相关
AF Mode这里 default不能配置成INFINITY,支持哪些mode就需要将哪些MODE都列出来,如下这种配置就不支持continue focus mode,需要添加上去
9, feature Ctrl Function
****FeatureControl function
SENSOR_FEATURE_INITIALIZE_AF
Init AF的setting
SENSOR_FEATURE_GET_AF_STATUS
Get the state
SENSOR_FEATURE_GET_AF_INF
SENSOR_FEATURE_GET_AF_MACRO
SENSOR_FEATURE_SET_AF_WINDOW
When Sensor AF could do focus in an assigned area. We pass a parameter “*zone_addr” to achieve this, which is the face detection (FD) window. It’s optional by sensor
SENSOR_FEATURE_MOVE_FOCUS_LENS
Not in use right now. An interface to ask sensor to step to specified position
SENSOR_FEATURE_CONSTANT_AF
Send constant focus command
SENSOR_FEATURE_SINGLE_FOCUS_MODE
SENSOR_FEATURE_CANCEL_AF
SENSOR_FEATURE_GET_AF_MAX_NUM_FOCUS_AREAS
ICS default touch focus,如果sensor支持AF,则填1,如果不支持,则要填0SENSOR_FEATURE_GET_AE_MAX_NUM_METERING_AREAS
如果sensor支持config AE window,则填1,如果不支持,则要填0。
写好以上这些函数,应该就ok了,写法可以参照OV3640AF的code来写~
sunicai,你说的是OV5640_sensor.c 中需要有类似如下的代码吗?
static void OV5642_FOCUS_AD5820_Get_AF_Inf(UINT32 *pFeatureReturnPara32)
{
*pFeatureReturnPara32 = 0;
}
static void OV5642_FOCUS_AD5820_Get_AF_Macro(UINT32 *pFeatureReturnPara32)
{
*pFeatureReturnPara32 = 1023;
}
//update focus window
//@input zone[] addr
static void OV5642_FOCUS_AD5820_Set_AF_Window(zone_addr)
{//update global zone
UINT8 state = 0x8F;
//input:
UINT32 times = 1;
UINT32 FD_XS = 4;
UINT32 FD_YS = 3;
这个我看过的。现在也是按他们的方法配的。
老兄,虽然是内置的,还是需要AF FW的,
你档下AF FW 看下
小编你这问题搞定没,我这有颗4E1的外置对焦马达跟你一样的问题
现在可以对焦,但是效果不好,只是在初始化时掉用了一下AF的初始化,就有对焦功能了。
小编,我的初始化有条用af的初始化,怎么都没有用呢?
辉哥!你这个后来是怎么弄好的啊.说说啊!
就是加了AF的初始化。
我现在OV5640连对焦框都没有啊
还有就是4.1的系统对YUV的lens设置都是要跟代码里面自带的OV3640一样的操作吗?
对应的宏开了,就会有框的
我的一直有框。
学习中,AF已经搞了好久了
没框的是projectconfig里LENS没有配成sensordrive.