Camera Driver analysis in the platform of MTK
ACDK_SCENARIO_ID_IMAGE_POST_PROCESS, ACDK_SCENARIO_ID_JPEG_RESIZE, ACDK_SCENARIO_ID_JPEG_DECODE, ACDK_SCENARIO_ID_JPEG_PARSE, ACDK_SCENARIO_ID_JPEG_ENCODE,
ACDK_SCENARIO_ID_JPEG_ENCODE_THUMBNAIL, ACDK_SCENARIO_ID_DRIVER_IO_CONTROL, ACDK_SCENARIO_ID_DO_NOT_CARE,
ACDK_SCENARIO_ID_IMAGE_DSPL_BUFFER_ALLOC, ACDK_SCENARIO_ID_TV_OUT,
Preliminary Information
ACDK_SCENARIO_ID_MAX,
ACDK_SCENARIO_ID_VIDOE_ENCODE_WITHOUT_PREVIEW, ACDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG_BACK_PREVIEW, ACDK_SCENARIO_ID_VIDEO_DECODE_RV8, ACDK_SCENARIO_ID_VIDEO_DECODE_RV9,
} ACDK_SCENARIO_ID_ENUM;
ACDK_SCENARIO_ID_CAMERA_ZSD,
通过这个数组定义 Camera 的各种模式,并且给他们从 0 开始给一个模拟的 ID,通过这个
ScenarioID 来控制 Camera 的工作模式是在拍照、摄像等等。
想要了解*pSensorInfo 这个指针的内容就得看 MSDK_SENSOR_INFO_STRUCT 的定义
#define MSDK_SENSOR_INFO_STRUCT ACDK_SENSOR_INFO_STRUCT typedef struct {
MUINT16 SensorPreviewResolutionX; MUINT16 SensorPreviewResolutionY; MUINT16 SensorFullResolutionX; MUINT16 SensorFullResolutionY; MUINT8 SensorClockFreq;
/* MHz */
MUINT8 SensorCameraPreviewFrameRate; MUINT8 SensorVideoFrameRate; MUINT8 SensorStillCaptureFrameRate;
MUINT8 SensorWebCamCaptureFrameRate; MUINT8
SensorClockPolarity;
/*
SENSOR_CLOCK_POLARITY_HIGH/SENSOR_CLOCK_POLARITY_Low */
Ghong Confidential
Revision 0.1-Feb.14 2012
?2012 Ghong inc.
Camera Driver analysis in the platform of MTK
- 21 -
Preliminary Information
MUINT8 SensorClockFallingPolarity; MUINT8 SensorClockRisingCount; MUINT8 SensorClockFallingCount; MUINT8 SensorClockDividCount; MUINT8 SensorPixelClockCount; MUINT8 SensorDataLatchCount; MUINT8 SensorHsyncPolarity; MUINT8 SensorVsyncPolarity; MUINT8 SensorInterruptDelayLines; MINT32 SensorResetActiveHigh; MUINT32 SensorResetDelayCount;
ACDK_SENSOR_INTERFACE_TYPE_ENUM SensroInterfaceType;
ACDK_SENSOR_OUTPUT_DATA_FORMAT_ENUM SensorOutputDataFormat; ACDK_SENSOR_MIPI_LANE_NUMBER_ENUM SensorMIPILaneNumber; CAMERA_ISO_BINNING_INFO_STRUCT SensorISOBinningInfo; MUINT32 CaptureDelayFrame; MUINT32 PreviewDelayFrame; MUINT32 VideoDelayFrame; MUINT16 SensorGrabStartX; MUINT16 SensorGrabStartY; MUINT16 SensorDrivingCurrent; MUINT8 MUINT8
/* 0..15 */
/* 0..15 */
/* 0..15 */
/* 0..15 */
/* 0..15 */
/* The frame of setting shutter default 0 for TG
SensorMasterClockSwitch; AEShutDelayFrame;
int */ MUINT8 MUINT8 MUINT8 MUINT8 MUINT8 MUINT8 MUINT8 MUINT8 MUINT8
AESensorGainDelayFrame; AEISPGainDelayFrame;
/* The frame of setting sensor gain */
MIPIDataLowPwr2HighSpeedTermDelayCount; MIPIDataLowPwr2HighSpeedSettleDelayCount; MIPICLKLowPwr2HighSpeedTermDelayCount; SensorWidthSampling; SensorHightSampling; SensorPacketECCOrder; SensorDriver3D;
} ACDK_SENSOR_INFO_STRUCT, *PACDK_SENSOR_INFO_STRUCT;
Ghong Confidential Revision 0.1-Feb.14 2012
?2012 Ghong inc.
Camera Driver analysis in the platform of MTK
- 22 -
Preliminary Information
这个结构体列取了 Sensor 的时钟频率、预览时的帧率、行同步/帧同步频率等参数。 第三个参数*pSensorConfigData 同样根据 MSDK_SENSOR_CONFIG_STRUCT 结构体 #define MSDK_SENSOR_CONFIG_STRUCT ACDK_SENSOR_CONFIG_STRUCT typedef struct {
ACDK_SENSOR_IMAGE_MIRROR_ENUM SensorImageMirror; MINT32 EnableShutterTansfer; MINT32 EnableFlashlightTansfer;
/* Capture 时的快门设置 */
/*有闪光灯的 SensorCapture 时的快门设置*/
ACDK_SENSOR_OPERATION_MODE_ENUMSensorOperationMode; MUINT16 ImageTargetWidth; MUINT16 ImageTargetHeight; MUINT16 MUINT16 MUINT16 MUINT16 MUINT16
CaptureShutter; FlashlightDuty; FlashlightOffset; FlashlightShutFactor;
/* Capture 的图像宽度 */ /* Capture 的图像高度*/
/* Capture 时的快门设置 */
/*有闪光灯的 SensorCapture 时的快门设置*/ /*有闪光灯的 SensorCapture 时的快门设置*/ /*有闪光灯的 SensorCapture 时的快门设置*/
FlashlightMinShutter; /*有闪光灯的 SensorCapture 时的快门设置*/
ACDK_CAMERA_OPERATION_MODE_ENUMMetaMode; MUINT32 DefaultPclk; MUINT32 Pixels; MUINT32 Lines; MUINT32 Shutter;
// Sensor 默认的像素时钟频率(Ex:24000000)
MUINT32 FrameLines;
} ACDK_SENSOR_CONFIG_STRUCT;
c) OV5647GetResolution
UINT32 OV5647GetResolution(MSDK_SENSOR_RESOLUTION_INFO_STRUCT *pSensorResolution) 此函数只有一个参数*pSensorResolution, 找到结构体:MSDK_SENSOR_RESOLUTION_INFO_STRUCT #define MSDK_SENSOR_RESOLUTION_INFO_STRUCT ACDK_SENSOR_RESOLUTION_INFO_STRUCT
typedef struct {
MUINT16 SensorPreviewWidth; //预览时的图像宽度 MUINT16 SensorPreviewHeight; //预览时的图像高度
- 23 -
Ghong Confidential
Revision 0.1-Feb.14 2012
?2012 Ghong inc.
Camera Driver analysis in the platform of MTK
Preliminary Information
MUINT16 SensorFullWidth; MUINT16 SensorFullHeight;
} ACDK_SENSOR_RESOLUTION_INFO_STRUCT, *PACDK_SENSOR_RESOLUTION_INFO_STRUCT;
到这里可以发现同样是获取 Sensor 的信息,GetInfo 函数获取并设置了 Sensor 所处的模式、 设置好需要的各种时钟、快门和拍照获取图像的信息整个流程的参数,而 GetResolution 函
数却是设置图像在预览模式下的参数,实际上是通过对实际捕获的图像缩放来提高预览时 图像的解析度。
d) OV5647FeatureControl
UINT32OV5647FeatureControl(MSDK_SENSOR_FEATURE_ENUM FeatureId, UINT8 *pFeaturePara, UINT32
*pFeatureParaLen)
在 FeatureControl 这个函数中有三个参数: #define
ACDK_SENSOR_FEATURE_ENUM typedef enum
MSDK_SENSOR_FEATURE_ENUM
{
SENSOR_FEATURE_BEGIN = SENSOR_FEATURE_START, SENSOR_FEATURE_GET_RESOLUTION, SENSOR_FEATURE_GET_PERIOD,
SENSOR_FEATURE_GET_PIXEL_CLOCK_FREQ, SENSOR_FEATURE_SET_ESHUTTER, SENSOR_FEATURE_SET_NIGHTMODE, SENSOR_FEATURE_SET_GAIN, SENSOR_FEATURE_SET_FLASHLIGHT,
SENSOR_FEATURE_SET_ISP_MASTER_CLOCK_FREQ, SENSOR_FEATURE_SET_REGISTER, SENSOR_FEATURE_GET_REGISTER, SENSOR_FEATURE_SET_CCT_REGISTER, SENSOR_FEATURE_GET_CCT_REGISTER, SENSOR_FEATURE_SET_ENG_REGISTER, SENSOR_FEATURE_GET_ENG_REGISTER, SENSOR_FEATURE_GET_REGISTER_DEFAULT, SENSOR_FEATURE_GET_CONFIG_PARA,
SENSOR_FEATURE_CAMERA_PARA_TO_SENSOR, Ghong Confidential Revision 0.1-Feb.14 2012
?2012 Ghong inc.
Camera Driver analysis in the platform of MTK
- 24 -
Preliminary Information
SENSOR_FEATURE_SENSOR_TO_CAMERA_PARA, SENSOR_FEATURE_GET_GROUP_COUNT, SENSOR_FEATURE_GET_GROUP_INFO, SENSOR_FEATURE_GET_ITEM_INFO, SENSOR_FEATURE_SET_ITEM_INFO, SENSOR_FEATURE_GET_ENG_INFO, SENSOR_FEATURE_GET_LENS_DRIVER_ID, SENSOR_FEATURE_SET_YUV_CMD, SENSOR_FEATURE_SET_VIDEO_MODE, SENSOR_FEATURE_SET_CALIBRATION_DATA, SENSOR_FEATURE_SET_SENSOR_SYNC, SENSOR_FEATURE_INITIALIZE_AF, SENSOR_FEATURE_CONSTANT_AF, SENSOR_FEATURE_MOVE_FOCUS_LENS, SENSOR_FEATURE_GET_AF_STATUS, SENSOR_FEATURE_GET_AF_INF, SENSOR_FEATURE_GET_AF_MACRO, SENSOR_FEATURE_CHECK_SENSOR_ID,
SENSOR_FEATURE_SET_AUTO_FLICKER_MODE, SENSOR_FEATURE_SET_TEST_PATTERN, SENSOR_FEATURE_SET_SOFTWARE_PWDN, SENSOR_FEATURE_SINGLE_FOCUS_MODE, SENSOR_FEATURE_CANCEL_AF, SENSOR_FEATURE_SET_AF_WINDOW, SENSOR_FEATURE_GET_EV_AWB_REF,
SENSOR_FEATURE_GET_SHUTTER_GAIN_AWB_GAIN,
} ACDK_SENSOR_FEATURE_ENUM;
别是 FeatureId 的具体值。
SENSOR_FEATURE_MAX
FeatureId 这个参数提供了低层给上层接口的准备。*pFeaturePara 和*pFeatureParaLen 分
Ghong Confidential
Revision 0.1-Feb.14 2012
?2012 Ghong inc.
- 25 -