MBOOL CamIOPipe:: configPipe(vector<PortInfo const*>const& vInPorts, vector<PortInfo const*>const& vOutPorts) { FUNCTION_LOG_START; MY_LOGD("+ tid(%d), %d in / %d out", gettid(), vInPorts.size(), vOutPorts.size()); MBOOL ret = MTRUE; // if (0 == vInPorts.size() || 0 == vOutPorts.size() || vOutPorts.size() > 2) { MY_LOGE("Port config error"); return MFALSE; } // if (EPortType_Sensor != vInPorts.at(0)->type) { MY_LOGE("The IN port type should be sensor type"); return MFALSE; } // for (MUINT32 i = 0; i < vOutPorts.size(); i++) { if (EPortType_MemoryOut != vOutPorts.at(i)->type) { MY_LOGE("The OUT port type should be EPortType_MemoryOut"); return MFALSE; } } // (1). callbacks mpCamIOPipe->setCallbacks(NULL, NULL, NULL); // (2). command queue config ret = ret && mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_CQ_CHANNEL, (MINT32)NSImageio::NSIspio::EPIPE_PASS1_CQ0, 0, 0 ) && mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_CQ_TRIGGER_MODE, (MINT32)NSImageio::NSIspio::EPIPE_PASS1_CQ0, (MINT32)NSImageio::NSIspio::EPIPECQ_TRIGGER_SINGLE_IMMEDIATE, (MINT32)NSImageio::NSIspio::EPIPECQ_TRIG_BY_START ) && mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_CONFIG_STAGE, (MINT32)NSImageio::NSIspio::eConfigSettingStage_Init, 0, 0 ); if (!ret) { MY_LOGE("Cammand queue config fail:%d", mpCamIOPipe->getLastErrorCode()); return ret; } // // (3). In sensor port vector<NSImageio::NSIspio::PortInfo const*> vCamIOInPorts; SensorPortInfo const* const pSensorPort = reinterpret_cast<SensorPortInfo const*> (vInPorts.at(0)); ::memcpy(&mrSensorPortInfo, const_cast<SensorPortInfo*>(pSensorPort),sizeof(SensorPortInfo)); MUINT32 u4SensorWidth = 0, u4SensorHeight = 0; MUINT32 u4RawPixelID = 0; EImageFormat eSensorFmt = eImgFmt_UNKNOWN; // (3.1) Sensor instance if (NULL == mpSensorHal) { mpSensorHal = SensorHal::createInstance(); if (NULL == mpSensorHal) { MY_LOGE("Null sensorHal object"); return MFALSE; } } // mpSensorHal->sendCommand(static_cast<halSensorDev_e>(pSensorPort->u4DeviceID), SENSOR_CMD_SET_SENSOR_DEV, 0, 0, 0 ); // //mpSensorHal->init(); ret = querySensorInfo( pSensorPort->u4DeviceID, pSensorPort->u4Scenario, pSensorPort->u4Bitdepth, eSensorFmt, u4SensorWidth, u4SensorHeight, u4RawPixelID); MY_LOGD("SensorPortInfo: (u4DeviceID, u4Scenario, bitdepth, fgBypassDelay, fgBypassScenaio, u4RawType) = (%d, %d, %d, %d, %d, %d)", pSensorPort->u4DeviceID, pSensorPort->u4Scenario, pSensorPort->u4Bitdepth, pSensorPort->fgBypassDelay, pSensorPort->fgBypassScenaio, pSensorPort->u4RawType); // MUINT32 u4SensorStride = u4SensorWidth; if (eImgFmt_BAYER8 == eSensorFmt || eImgFmt_BAYER10 == eSensorFmt || eImgFmt_BAYER12 == eSensorFmt) { u4SensorStride = NSImageio::NSIspio::queryRawStride(eSensorFmt, u4SensorWidth); } MY_LOGD("SensorPortInfo: (width, height, format, stride) = (%d, %d, 0x%x, %d, %d, %d)", u4SensorWidth, u4SensorHeight, eSensorFmt, u4SensorStride); // NSImageio::NSIspio::PortInfo tgi; tgi.eImgFmt = eSensorFmt; tgi.eRawPxlID = mapRawPixelID(u4RawPixelID); tgi.u4ImgWidth = u4SensorWidth; tgi.u4ImgHeight = u4SensorHeight; tgi.u4Stride[0] = u4SensorStride; tgi.u4Stride[1] = 0; tgi.u4Stride[2] = 0; tgi.type = NSImageio::NSIspio::EPortType_Sensor; mu4DeviceID = pSensorPort->u4DeviceID; tgi.index = ((mu4DeviceID == SENSOR_DEV_MAIN)||(mu4DeviceID == SENSOR_DEV_ATV)) ? (NSImageio::NSIspio::EPortIndex_TG1I) : (NSImageio::NSIspio::EPortIndex_TG2I); tgi.inout = NSImageio::NSIspio::EPortDirection_In; tgi.u4BufSize = (MUINT32)0; vCamIOInPorts.push_back(&tgi); // The raw type, 0: pure raw, 1: pre-process raw if(pSensorPort->u4RawType == 1) { ret = mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_IMGO_RAW_TYPE, (MINT32)NSImageio::NSIspio::eRawImageType_PreProc, 0, 0 ); } // // (4). Out Port vector<NSImageio::NSIspio::PortInfo const*> vCamIOOutPorts; NSImageio::NSIspio::PortInfo imgo; NSImageio::NSIspio::PortInfo img2o; for (MUINT32 i = 0; i < vOutPorts.size(); i++) { MemoryOutPortInfo const* const memOutPort= reinterpret_cast<MemoryOutPortInfo const*> (vOutPorts.at(i)); // if (0 == memOutPort->index) { MY_LOGD("MemoryOutPortInfo1: (fmt, width, height) = (0x%x, %d, %d)", tgi.eImgFmt, tgi.u4ImgWidth, tgi.u4ImgHeight); MY_LOGD("MemoryOutPortInfo1: stride = (%d, %d, %d)", memOutPort->u4Stride[0], memOutPort->u4Stride[1], memOutPort->u4Stride[2]); imgo.eImgFmt = tgi.eImgFmt; imgo.u4ImgWidth = tgi.u4ImgWidth; imgo.u4ImgHeight = tgi.u4ImgHeight; // no crop imgo.crop.y = 0; imgo.crop.h = imgo.u4ImgHeight; imgo.type = NSImageio::NSIspio::EPortType_Memory; imgo.index = NSImageio::NSIspio::EPortIndex_IMGO; imgo.inout = NSImageio::NSIspio::EPortDirection_Out; imgo.u4Stride[0] = memOutPort->u4Stride[0]; imgo.u4Stride[1] = memOutPort->u4Stride[1]; imgo.u4Stride[2] = memOutPort->u4Stride[2]; imgo.u4Offset = 0; vCamIOOutPorts.push_back(&imgo); } #warning [TODO] Should check the port config by scenario else if (1 == memOutPort->index) { MY_LOGD("MemoryOutPortInfo2: (fmt, width, height) = (0x%x, %d, %d)", memOutPort->eImgFmt, memOutPort->u4ImgWidth, memOutPort->u4ImgHeight); MY_LOGD("MemoryOutPortInfo2: stride = (%d, %d, %d)", memOutPort->u4Stride[0], memOutPort->u4Stride[1], memOutPort->u4Stride[2]); img2o.eImgFmt = memOutPort->eImgFmt; img2o.u4ImgWidth = memOutPort->u4ImgWidth; img2o.u4ImgHeight = memOutPort->u4ImgHeight; img2o.crop.y = 0; img2o.crop.h = img2o.u4ImgHeight; img2o.type = NSImageio::NSIspio::EPortType_Memory; img2o.index = NSImageio::NSIspio::EPortIndex_IMG2O; img2o.inout = NSImageio::NSIspio::EPortDirection_Out; img2o.u4Stride[0] = memOutPort->u4Stride[0]; img2o.u4Stride[1] = memOutPort->u4Stride[1]; img2o.u4Stride[2] = memOutPort->u4Stride[2]; vCamIOOutPorts.push_back(&img2o); mfgIsYUVPortON = MTRUE; } } ret = mpCamIOPipe->configPipe(vCamIOInPorts, vCamIOOutPorts); // ret = configSensor(pSensorPort->u4DeviceID, pSensorPort->u4Scenario, u4SensorWidth, u4SensorHeight, pSensorPort->fgBypassDelay, pSensorPort->fgBypassScenaio, MTRUE); FUNCTION_LOG_END; return ret; }
MBOOL CamIOPipe:: configPipe(vector<PortInfo const*>const& vInPorts, vector<PortInfo const*>const& vOutPorts) { //FUNCTION_LOG_START; MY_LOGD("+ tid(%d), %d in / %d out", gettid(), vInPorts.size(), vOutPorts.size()); MBOOL ret = MTRUE; // if (0 == vInPorts.size() || 0 == vOutPorts.size() || vOutPorts.size() > 2) { MY_LOGE("Port config error"); return MFALSE; } // if (EPortType_Sensor != vInPorts.at(0)->type) { MY_LOGE("The IN port type should be sensor type"); return MFALSE; } // for (MUINT32 i = 0; i < vOutPorts.size(); i++) { if (EPortType_MemoryOut != vOutPorts.at(i)->type) { MY_LOGE("The OUT port type should be EPortType_MemoryOut"); return MFALSE; } } // (1). callbacks mpCamIOPipe->setCallbacks(NULL, NULL, NULL); // (2). command queue config ret = ret && mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_CQ_CHANNEL, (MINT32)NSImageio::NSIspio::EPIPE_PASS1_CQ0, 0, 0 ) && mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_CQ_TRIGGER_MODE, (MINT32)NSImageio::NSIspio::EPIPE_PASS1_CQ0, (MINT32)NSImageio::NSIspio::EPIPECQ_TRIGGER_SINGLE_IMMEDIATE, (MINT32)NSImageio::NSIspio::EPIPECQ_TRIG_BY_START ) && mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_CONFIG_STAGE, (MINT32)NSImageio::NSIspio::eConfigSettingStage_Init, 0, 0 ); if (!ret) { MY_LOGE("Cammand queue config fail:%d", mpCamIOPipe->getLastErrorCode()); return ret; } // // (3). In sensor port vector<NSImageio::NSIspio::PortInfo const*> vCamIOInPorts; SensorPortInfo const* const pSensorPort = reinterpret_cast<SensorPortInfo const*> (vInPorts.at(0)); ::memcpy(&mrSensorPortInfo, const_cast<SensorPortInfo*>(pSensorPort),sizeof(SensorPortInfo)); MUINT32 u4SensorWidth = 0, u4SensorHeight = 0; MUINT32 u4RawPixelID = 0; EImageFormat eSensorFmt = eImgFmt_UNKNOWN; // (3.1) Sensor instance if (NULL == mpSensorHal) { mpSensorHal = SensorHal::createInstance(); if (NULL == mpSensorHal) { MY_LOGE("Null sensorHal object"); return MFALSE; } } // mpSensorHal->sendCommand(static_cast<halSensorDev_e>(pSensorPort->u4DeviceID), SENSOR_CMD_SET_SENSOR_DEV, 0, 0, 0 ); // //mpSensorHal->init(); ret = querySensorInfo( pSensorPort->u4DeviceID, pSensorPort->u4Scenario, pSensorPort->u4Bitdepth, eSensorFmt, u4SensorWidth, u4SensorHeight, u4RawPixelID); MY_LOGD("Sensor: (devID,scen)(%d,%d) (w,h,fmt,bits,pixID)(%d,%d,0x%x,%d,%d) (bpDelay,bpScen,rawType)(%d,%d,%d)", pSensorPort->u4DeviceID, pSensorPort->u4Scenario, u4SensorWidth, u4SensorHeight, eSensorFmt, pSensorPort->u4Bitdepth, u4RawPixelID, pSensorPort->fgBypassDelay, pSensorPort->fgBypassScenaio, pSensorPort->u4RawType); // MUINT32 u4SensorStride = u4SensorWidth; if (eImgFmt_BAYER8 == eSensorFmt || eImgFmt_BAYER10 == eSensorFmt || eImgFmt_BAYER12 == eSensorFmt) { u4SensorStride = NSImageio::NSIspio::queryRawStride(eSensorFmt, u4SensorWidth); } //MY_LOGD("SensorPortInfo: (width, height, format, stride) = (%d, %d, 0x%x, %d, %d, %d)", // u4SensorWidth, u4SensorHeight, eSensorFmt, u4SensorStride); // NSImageio::NSIspio::PortInfo tgi; tgi.eImgFmt = eSensorFmt; tgi.eRawPxlID = mapRawPixelID(u4RawPixelID); tgi.u4ImgWidth = u4SensorWidth; tgi.u4ImgHeight = u4SensorHeight; tgi.u4Stride[0] = u4SensorStride; tgi.u4Stride[1] = 0; tgi.u4Stride[2] = 0; tgi.type = NSImageio::NSIspio::EPortType_Sensor; mu4DeviceID = pSensorPort->u4DeviceID; tgi.index = ((mu4DeviceID == SENSOR_DEV_MAIN)||(mu4DeviceID == SENSOR_DEV_ATV)) ? (NSImageio::NSIspio::EPortIndex_TG1I) : (NSImageio::NSIspio::EPortIndex_TG2I); tgi.inout = NSImageio::NSIspio::EPortDirection_In; tgi.u4BufSize = (MUINT32)0; vCamIOInPorts.push_back(&tgi); // The raw type, 0: pure raw, 1: pre-process raw if(pSensorPort->u4RawType == 1) { ret = mpCamIOPipe->sendCommand(NSImageio::NSIspio::EPIPECmd_SET_IMGO_RAW_TYPE, (MINT32)NSImageio::NSIspio::eRawImageType_PreProc, 0, 0 ); } // // (4). Out Port vector<NSImageio::NSIspio::PortInfo const*> vCamIOOutPorts; NSImageio::NSIspio::PortInfo imgo; NSImageio::NSIspio::PortInfo img2o; for (MUINT32 i = 0; i < vOutPorts.size(); i++) { MemoryOutPortInfo const* const memOutPort= reinterpret_cast<MemoryOutPortInfo const*> (vOutPorts.at(i)); // if (0 == memOutPort->index) { MY_LOGD("Out 0: (fmt,w,h)(0x%x,%d,%d) stride(%d,%d,%d)", tgi.eImgFmt, tgi.u4ImgWidth, tgi.u4ImgHeight, memOutPort->u4Stride[0], memOutPort->u4Stride[1], memOutPort->u4Stride[2]); imgo.eImgFmt = tgi.eImgFmt; imgo.u4ImgWidth = tgi.u4ImgWidth; imgo.u4ImgHeight = tgi.u4ImgHeight; // no crop imgo.crop.y = 0; imgo.crop.h = imgo.u4ImgHeight; imgo.type = NSImageio::NSIspio::EPortType_Memory; imgo.index = NSImageio::NSIspio::EPortIndex_IMGO; imgo.inout = NSImageio::NSIspio::EPortDirection_Out; imgo.u4Stride[0] = memOutPort->u4Stride[0]; imgo.u4Stride[1] = memOutPort->u4Stride[1]; imgo.u4Stride[2] = memOutPort->u4Stride[2]; imgo.u4Offset = 0; vCamIOOutPorts.push_back(&imgo); } #warning [TODO] Should check the port config by scenario else if (1 == memOutPort->index) { MY_LOGD("Out 1: (fmt,w,h)(0x%x,%d,%d) stride(%d,%d,%d)", memOutPort->eImgFmt, memOutPort->u4ImgWidth, memOutPort->u4ImgHeight, memOutPort->u4Stride[0], memOutPort->u4Stride[1], memOutPort->u4Stride[2]); img2o.eImgFmt = memOutPort->eImgFmt; img2o.u4ImgWidth = memOutPort->u4ImgWidth; img2o.u4ImgHeight = memOutPort->u4ImgHeight; img2o.crop.y = 0; img2o.crop.h = img2o.u4ImgHeight; img2o.type = NSImageio::NSIspio::EPortType_Memory; img2o.index = NSImageio::NSIspio::EPortIndex_IMG2O; img2o.inout = NSImageio::NSIspio::EPortDirection_Out; img2o.u4Stride[0] = memOutPort->u4Stride[0]; img2o.u4Stride[1] = memOutPort->u4Stride[1]; img2o.u4Stride[2] = memOutPort->u4Stride[2]; vCamIOOutPorts.push_back(&img2o); mfgIsYUVPortON = MTRUE; } } ret = mpCamIOPipe->configPipe(vCamIOInPorts, vCamIOOutPorts); // ret = configSensor(pSensorPort->u4DeviceID, pSensorPort->u4Scenario, u4SensorWidth, u4SensorHeight, pSensorPort->fgBypassDelay, pSensorPort->fgBypassScenaio, MTRUE); // The raw type, 0: pure raw, 1: pre-process raw 2: sensor test pattern if(pSensorPort->u4RawType == 2) { MINT32 u32Enable = 1; mpSensorHal->sendCommand(static_cast<halSensorDev_e>(pSensorPort->u4DeviceID), SENSOR_CMD_SET_TEST_PATTERN_OUTPUT, (MINT32)&u32Enable, 0, 0); MY_LOGD("Sensor Test Pattern"); } // query skip frame to wait for stable mu4SkipFrame = 0; if (mrSensorPortInfo.fgBypassDelay == MFALSE) { MUINT32 u4Mode = SENSOR_CAPTURE_DELAY; switch (pSensorPort->u4Scenario) { case ACDK_SCENARIO_ID_CAMERA_PREVIEW: u4Mode = SENSOR_PREVIEW_DELAY; break; case ACDK_SCENARIO_ID_CAMERA_CAPTURE_JPEG: u4Mode = SENSOR_CAPTURE_DELAY; break; case ACDK_SCENARIO_ID_VIDEO_PREVIEW: u4Mode = SENSOR_VIDEO_DELAY; break; } // mpSensorHal->sendCommand(static_cast<halSensorDev_e>(mrSensorPortInfo.u4DeviceID), static_cast<int>(SENSOR_CMD_GET_UNSTABLE_DELAY_FRAME_CNT), reinterpret_cast<int>(&mu4SkipFrame), reinterpret_cast<int>(&u4Mode)); } handleNotifyCallback( ECamPipe_NOTIFY_MSG_DROPFRAME, mu4SkipFrame, 0 ); //FUNCTION_LOG_END; return ret; }
MVOID HalSensorList::querySensorDrvInfo() { MUINT i = 0, ret = 0; MINT sensorDev; SensorDrv *const pSensorDrv = SensorDrv::get(); #ifdef MTK_MAIN2_IMGSENSOR for (sensorDev = SENSOR_MAIN; sensorDev <= SENSOR_MAIN_2; sensorDev <<= 1) { #else #ifdef MTK_SUB_IMGSENSOR for (sensorDev = SENSOR_MAIN; sensorDev <= SENSOR_SUB; sensorDev <<= 1) { #else for (sensorDev = SENSOR_MAIN; sensorDev < SENSOR_SUB; sensorDev <<= 1) { #endif #endif pSensorDrv->init((SENSOR_DEV_ENUM)sensorDev); pSensorDrv->getInfo2((SENSOR_DEV_ENUM)sensorDev,&sensorDrvInfo[i]); ret = getRawInfo((SENSOR_DEV_ENUM)sensorDev, &sensorRawInfo[i]); i++; pSensorDrv->uninit(); } querySensorInfo();//to remap data } MUINT HalSensorList::getRawInfo(SENSOR_DEV_ENUM sensorDevId, SENSOR_HAL_RAW_INFO_STRUCT *pInfo) { MUINT32 ret = 0; SensorDrv *const pSensorDrv = SensorDrv::get(); switch(sensorDevId) { case SENSOR_MAIN: pInfo->u1Order = sensorDrvInfo[0].SensorOutputDataFormat; break; case SENSOR_SUB: pInfo->u1Order = sensorDrvInfo[1].SensorOutputDataFormat; break; case SENSOR_MAIN_2: pInfo->u1Order = sensorDrvInfo[2].SensorOutputDataFormat; break; default: break; } /* Modify getSensorType from getInfo Ioctl to directly compute sensorType from pInfo->u1Order //sensorType = pSensorDrv->getCurrentSensorType(sensorDevId); */ // Compute sensorType from SensorOutputDataFormat if (pInfo->u1Order >= SENSOR_OUTPUT_FORMAT_RAW_B && pInfo->u1Order <= SENSOR_OUTPUT_FORMAT_RAW_R) { pInfo->sensorType = IMAGE_SENSOR_TYPE_RAW; } else if (pInfo->u1Order >= SENSOR_OUTPUT_FORMAT_RAW8_B && pInfo->u1Order <= SENSOR_OUTPUT_FORMAT_RAW8_R) { pInfo->sensorType = IMAGE_SENSOR_TYPE_RAW8; } else if (pInfo->u1Order >= SENSOR_OUTPUT_FORMAT_UYVY && pInfo->u1Order <= SENSOR_OUTPUT_FORMAT_YVYU) { pInfo->sensorType = IMAGE_SENSOR_TYPE_YUV; } else if (pInfo->u1Order >= SENSOR_OUTPUT_FORMAT_CbYCrY && pInfo->u1Order <= SENSOR_OUTPUT_FORMAT_YCrYCb) { pInfo->sensorType = IMAGE_SENSOR_TYPE_YCBCR; } else { MY_LOGE("Unsupport SensorOutputDataFormat \n"); } MY_LOGD("SensorOutputDataFormat: %d, ImageSensor Type: %d\n", pInfo->u1Order, pInfo->sensorType); switch (pInfo->sensorType) { case IMAGE_SENSOR_TYPE_RAW: pInfo->u4BitDepth = 10; pInfo->u4IsPacked = 1; break; case IMAGE_SENSOR_TYPE_RAW8: pInfo->u4BitDepth = 8; pInfo->u4IsPacked = 1; break; case IMAGE_SENSOR_TYPE_RAW12: pInfo->u4BitDepth = 12; pInfo->u4IsPacked = 1; break; case IMAGE_SENSOR_TYPE_RAW14: pInfo->u4BitDepth = 14; pInfo->u4IsPacked = 1; break; case IMAGE_SENSOR_TYPE_YUV: case IMAGE_SENSOR_TYPE_YCBCR: pInfo->u4BitDepth = 8; pInfo->u4IsPacked = 0; break; case IMAGE_SENSOR_TYPE_RGB565: pInfo->u4BitDepth = 8; pInfo->u4IsPacked = 0; break; default: MY_LOGE("Unsupport Sensor Type \n"); break; } return ret; } MVOID HalSensorList::querySensorInfo() { MUINT idx; //MUINT32 data1,data2; MUINTPTR data1,data2; SensorDrv *const pSensorDrv = SensorDrv::get(); #ifdef MTK_MAIN2_IMGSENSOR for(idx=0; idx<3; idx++) { #else #ifdef MTK_SUB_IMGSENSOR for(idx=0; idx<2; idx++) { #else for(idx=0; idx<1; idx++) { #endif #endif switch (idx) { case 0: pSensorDrv->init(SENSOR_MAIN); pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_MCLK_CONNECTION, (MUINTPTR)&data1); sensorPara[idx].mclkSrc = data1; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_MIPI_SENSOR_PORT, (MUINTPTR)&data1); sensorPara[idx].mipiPad = data1; sensorStaticInfo[idx].sensorDevID = pSensorDrv->getMainSensorID(); pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_SENSOR_ORIENTATION_ANGLE, (MUINTPTR)&data1); sensorStaticInfo[idx].orientationAngle = data1; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_SENSOR_FACING_DIRECTION, (MUINTPTR)&data1); sensorStaticInfo[idx].facingDirection = data1; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_FAKE_ORIENTATION, (MUINTPTR)&data1); sensorStaticInfo[idx].fakeOrientation = data1; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_SENSOR_VIEWANGLE, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].horizontalViewAngle =data1; sensorStaticInfo[idx].verticalViewAngle = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_PREVIEW; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].previewFrameRate = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_CAPTURE; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].captureFrameRate = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_VIDEO; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].videoFrameRate = data2; data1 = SENSOR_SCENARIO_ID_SLIM_VIDEO1; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video1FrameRate = data2; data1 = SENSOR_SCENARIO_ID_SLIM_VIDEO2; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM1; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM2; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM3; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM4; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM5; pSensorDrv->sendCommand(SENSOR_MAIN, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; pSensorDrv->uninit(); break; case 1: pSensorDrv->init(SENSOR_SUB); pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_MCLK_CONNECTION, (MUINTPTR)&data1); sensorPara[idx].mclkSrc = data1; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_MIPI_SENSOR_PORT, (MUINTPTR)&data1); sensorPara[idx].mipiPad = data1; sensorStaticInfo[idx].sensorDevID = pSensorDrv->getSubSensorID(); pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_SENSOR_ORIENTATION_ANGLE, (MUINTPTR)&data1); sensorStaticInfo[idx].orientationAngle = data1; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_SENSOR_FACING_DIRECTION, (MUINTPTR)&data1); sensorStaticInfo[idx].facingDirection = data1; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_FAKE_ORIENTATION, (MUINTPTR)&data1); sensorStaticInfo[idx].fakeOrientation = data1; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_SENSOR_VIEWANGLE, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].horizontalViewAngle =data1; sensorStaticInfo[idx].verticalViewAngle = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_PREVIEW; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].previewFrameRate = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_CAPTURE; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].captureFrameRate = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_VIDEO; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].videoFrameRate = data2; data1 = SENSOR_SCENARIO_ID_SLIM_VIDEO1; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video1FrameRate = data2; data1 = SENSOR_SCENARIO_ID_SLIM_VIDEO2; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM1; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM2; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM3; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM4; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM5; pSensorDrv->sendCommand(SENSOR_SUB, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; pSensorDrv->uninit(); break; case 2: pSensorDrv->init(SENSOR_MAIN_2); pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_MCLK_CONNECTION, (MUINTPTR)&data1); sensorPara[idx].mclkSrc = data1; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_MIPI_SENSOR_PORT, (MUINTPTR)&data1); sensorPara[idx].mipiPad = data1; sensorStaticInfo[idx].sensorDevID = pSensorDrv->getMain2SensorID(); pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_SENSOR_ORIENTATION_ANGLE, (MUINTPTR)&data1); sensorStaticInfo[idx].orientationAngle = data1; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_SENSOR_FACING_DIRECTION, (MUINTPTR)&data1); sensorStaticInfo[idx].facingDirection = data1; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_FAKE_ORIENTATION, (MUINTPTR)&data1); sensorStaticInfo[idx].fakeOrientation = data1; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_SENSOR_VIEWANGLE, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].horizontalViewAngle =data1; sensorStaticInfo[idx].verticalViewAngle = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_PREVIEW; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].previewFrameRate = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_CAPTURE; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].captureFrameRate = data2; data1 = SENSOR_SCENARIO_ID_NORMAL_VIDEO; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].videoFrameRate = data2; data1 = SENSOR_SCENARIO_ID_SLIM_VIDEO1; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video1FrameRate = data2; data1 = SENSOR_SCENARIO_ID_SLIM_VIDEO2; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM1; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM2; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM3; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM4; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; data1 = SENSOR_SCENARIO_ID_CUSTOM5; pSensorDrv->sendCommand(SENSOR_MAIN_2, CMD_SENSOR_GET_DEFAULT_FRAME_RATE_BY_SCENARIO, (MUINTPTR)&data1, (MUINTPTR)&data2); sensorStaticInfo[idx].video2FrameRate = data2; pSensorDrv->uninit(); break; default: break; } switch (sensorRawInfo[idx].sensorType) { case IMAGE_SENSOR_TYPE_RAW: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_RAW; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_10BIT; break; case IMAGE_SENSOR_TYPE_RAW8: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_RAW; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_8BIT; break; case IMAGE_SENSOR_TYPE_RAW12: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_RAW; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_12BIT; break; case IMAGE_SENSOR_TYPE_RAW14: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_RAW; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_14BIT; break; case IMAGE_SENSOR_TYPE_YUV: case IMAGE_SENSOR_TYPE_YCBCR: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_YUV; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_ERROR; break; case IMAGE_SENSOR_TYPE_RGB565: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_RGB; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_ERROR; break; case IMAGE_SENSOR_TYPE_JPEG: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_JPEG; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_ERROR; break; default: sensorStaticInfo[idx].sensorType = SENSOR_TYPE_UNKNOWN; sensorStaticInfo[idx].rawSensorBit = RAW_SENSOR_ERROR; break; } switch (sensorRawInfo[idx].u1Order) { case SENSOR_OUTPUT_FORMAT_RAW_B: case SENSOR_OUTPUT_FORMAT_RAW8_B: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_RAW_B; break; case SENSOR_OUTPUT_FORMAT_RAW_Gb: case SENSOR_OUTPUT_FORMAT_RAW8_Gb: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_RAW_Gb; break; case SENSOR_OUTPUT_FORMAT_RAW_Gr: case SENSOR_OUTPUT_FORMAT_RAW8_Gr: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_RAW_Gr; break; case SENSOR_OUTPUT_FORMAT_RAW_R: case SENSOR_OUTPUT_FORMAT_RAW8_R: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_RAW_R; break; case SENSOR_OUTPUT_FORMAT_UYVY: case SENSOR_OUTPUT_FORMAT_CbYCrY: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_UYVY; break; case SENSOR_OUTPUT_FORMAT_VYUY: case SENSOR_OUTPUT_FORMAT_CrYCbY: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_VYUY; break; case SENSOR_OUTPUT_FORMAT_YUYV: case SENSOR_OUTPUT_FORMAT_YCbYCr: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_YUYV; break; case SENSOR_OUTPUT_FORMAT_YVYU: case SENSOR_OUTPUT_FORMAT_YCrYCb: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_YVYU; break; default: sensorStaticInfo[idx].sensorFormatOrder = SENSOR_FORMAT_ORDER_NONE; break; } sensorStaticInfo[idx].iHDRSupport = sensorDrvInfo[idx].iHDRSupport; sensorStaticInfo[idx].PDAF_Support = sensorDrvInfo[idx].PDAF_Support; sensorStaticInfo[idx].previewWidth = sensorDrvInfo[idx].SensorPreviewWidth; sensorStaticInfo[idx].previewHeight = sensorDrvInfo[idx].SensorPreviewHeight; sensorStaticInfo[idx].captureWidth = sensorDrvInfo[idx].SensorCapWidth; sensorStaticInfo[idx].captureHeight = sensorDrvInfo[idx].SensorCapHeight; sensorStaticInfo[idx].videoWidth = sensorDrvInfo[idx].SensorVideoWidth; sensorStaticInfo[idx].videoHeight = sensorDrvInfo[idx].SensorVideoHeight; sensorStaticInfo[idx].video1Width = sensorDrvInfo[idx].SensorVideo1Width; sensorStaticInfo[idx].video1Height = sensorDrvInfo[idx].SensorVideo1Height; sensorStaticInfo[idx].video2Width = sensorDrvInfo[idx].SensorVideo2Width; sensorStaticInfo[idx].video2Height = sensorDrvInfo[idx].SensorVideo2Height; sensorStaticInfo[idx].SensorCustom1Width = sensorDrvInfo[idx].SensorCustom1Width; sensorStaticInfo[idx].SensorCustom1Height = sensorDrvInfo[idx].SensorCustom1Height; sensorStaticInfo[idx].SensorCustom2Width = sensorDrvInfo[idx].SensorCustom2Width; sensorStaticInfo[idx].SensorCustom2Height = sensorDrvInfo[idx].SensorCustom2Height; sensorStaticInfo[idx].SensorCustom3Width = sensorDrvInfo[idx].SensorCustom3Width; sensorStaticInfo[idx].SensorCustom3Height = sensorDrvInfo[idx].SensorCustom3Height; sensorStaticInfo[idx].SensorCustom4Width = sensorDrvInfo[idx].SensorCustom4Width; sensorStaticInfo[idx].SensorCustom4Height = sensorDrvInfo[idx].SensorCustom4Height; sensorStaticInfo[idx].SensorCustom5Width = sensorDrvInfo[idx].SensorCustom5Width; sensorStaticInfo[idx].SensorCustom5Height = sensorDrvInfo[idx].SensorCustom5Height; sensorStaticInfo[idx].previewDelayFrame = sensorDrvInfo[idx].PreviewDelayFrame; sensorStaticInfo[idx].captureDelayFrame = sensorDrvInfo[idx].CaptureDelayFrame; sensorStaticInfo[idx].videoDelayFrame = sensorDrvInfo[idx].VideoDelayFrame; sensorStaticInfo[idx].video1DelayFrame = sensorDrvInfo[idx].HighSpeedVideoDelayFrame; sensorStaticInfo[idx].video2DelayFrame = sensorDrvInfo[idx].SlimVideoDelayFrame; sensorStaticInfo[idx].Custom1DelayFrame = sensorDrvInfo[idx].Custom1DelayFrame; sensorStaticInfo[idx].Custom2DelayFrame = sensorDrvInfo[idx].Custom2DelayFrame; sensorStaticInfo[idx].Custom3DelayFrame = sensorDrvInfo[idx].Custom3DelayFrame; sensorStaticInfo[idx].Custom4DelayFrame = sensorDrvInfo[idx].Custom4DelayFrame; sensorStaticInfo[idx].Custom5DelayFrame = sensorDrvInfo[idx].Custom5DelayFrame; sensorStaticInfo[idx].aeShutDelayFrame = sensorDrvInfo[idx].AEShutDelayFrame; sensorStaticInfo[idx].aeSensorGainDelayFrame = sensorDrvInfo[idx].AESensorGainDelayFrame; sensorStaticInfo[idx].aeISPGainDelayFrame = sensorDrvInfo[idx].AEISPGainDelayFrame; sensorStaticInfo[idx].previewActiveWidth = sensorDrvInfo[idx].SensorEffectivePreviewWidth;//3d use onlyl? sensorStaticInfo[idx].previewActiveHeight = sensorDrvInfo[idx].SensorEffectivePreviewHeight;//3d use onlyl? sensorStaticInfo[idx].captureActiveWidth = sensorDrvInfo[idx].SensorEffectiveCapWidth;//3d use onlyl? sensorStaticInfo[idx].captureActiveHeight = sensorDrvInfo[idx].SensorEffectiveCapHeight;//3d use onlyl? sensorStaticInfo[idx].videoActiveWidth = sensorDrvInfo[idx].SensorEffectiveVideoWidth;//3d use onlyl? sensorStaticInfo[idx].videowActiveHeight = sensorDrvInfo[idx].SensorEffectiveVideoHeight;//3d use onlyl? sensorStaticInfo[idx].previewHoizontalOutputOffset = sensorDrvInfo[idx].SensorPreviewWidthOffset;//3d use onlyl? sensorStaticInfo[idx].previewVerticalOutputOffset = sensorDrvInfo[idx].SensorPreviewHeightOffset; //3d use onlyl? sensorStaticInfo[idx].captureHoizontalOutputOffset = sensorDrvInfo[idx].SensorCapWidthOffset;//3d use onlyl? sensorStaticInfo[idx].captureVerticalOutputOffset = sensorDrvInfo[idx].SensorCapHeightOffset; //3d use onlyl? sensorStaticInfo[idx].videoHoizontalOutputOffset = sensorDrvInfo[idx].SensorVideoWidthOffset;//3d use onlyl? sensorStaticInfo[idx].videoVerticalOutputOffset = sensorDrvInfo[idx].SensorVideoHeightOffset; //3d use onlyl? sensorStaticInfo[idx].virtualChannelSupport = sensorDrvInfo[idx].virtualChannelSupport; sensorStaticInfo[idx].iHDR_First_IS_LE = sensorDrvInfo[idx].iHDR_First_IS_LE; sensorStaticInfo[idx].SensorModeNum = sensorDrvInfo[idx].SensorModeNum; } MY_LOGD("MCLK Source: Main = %d, Sub = %d, Main_2 =%d\n",sensorPara[0].mclkSrc,sensorPara[1].mclkSrc,sensorPara[2].mclkSrc); MY_LOGD("MIPI pad: Main = %d, Sub = %d, Main_2 =%d\n",sensorPara[0].mipiPad,sensorPara[1].mipiPad,sensorPara[2].mipiPad); } MVOID HalSensorList::buildSensorMetadata() { MINT idx; MINT64 exposureTime1 = 0x4000; MINT64 exposureTime2 = 0x4000; MUINT8 u8Para = 0; MINT32 s32Para = 0; MY_LOGD("impBuildSensorInfo start!\n"); #ifdef MTK_MAIN2_IMGSENSOR for(idx=0; idx<3; idx++) { #else #ifdef MTK_SUB_IMGSENSOR for(idx=0; idx<2; idx++) { #else for(idx=0; idx<1; idx++) { #endif #endif IMetadata& metadataA = gSensorMetadata[idx]; { IMetadata::IEntry entryA(MTK_SENSOR_EXPOSURE_TIME); entryA.push_back(exposureTime1, Type2Type<MINT64>()); entryA.push_back(exposureTime2, Type2Type<MINT64>()); metadataA.update(MTK_SENSOR_EXPOSURE_TIME, entryA); } { //using full size? IMetadata::IEntry entryA(MTK_SENSOR_INFO_ACTIVE_ARRAY_REGION); MRect region1(MPoint(sensorStaticInfo[idx].captureHoizontalOutputOffset,sensorStaticInfo[idx].captureVerticalOutputOffset), MSize(sensorStaticInfo[idx].captureWidth,sensorStaticInfo[idx].captureHeight)); entryA.push_back(region1, Type2Type<MRect>()); metadataA.update(MTK_SENSOR_INFO_ACTIVE_ARRAY_REGION, entryA); } { IMetadata::IEntry entryA(MTK_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT); switch(sensorStaticInfo[idx].sensorFormatOrder) { case SENSOR_FORMAT_ORDER_RAW_B: u8Para = 0x3;//BGGR break; case SENSOR_FORMAT_ORDER_RAW_Gb: u8Para = 0x2;//GBRG break; case SENSOR_FORMAT_ORDER_RAW_Gr: u8Para = 0x1;//GRBG break; case SENSOR_FORMAT_ORDER_RAW_R: u8Para = 0x0;//RGGB break; default: u8Para = 0x4;//BGR not bayer break; } entryA.push_back(u8Para, Type2Type<MUINT8>()); metadataA.update(MTK_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT, entryA); } { //need to add query from kernel IMetadata::IEntry entryA(MTK_SENSOR_INFO_EXPOSURE_TIME_RANGE); entryA.push_back(3000, Type2Type<MINT64>()); entryA.push_back(3000000000, Type2Type<MINT64>()); metadataA.update(MTK_SENSOR_INFO_EXPOSURE_TIME_RANGE, entryA); } { //need to add query from kernel IMetadata::IEntry entryA(MTK_SENSOR_INFO_MAX_FRAME_DURATION); entryA.push_back(50000000000, Type2Type<MINT64>()); metadataA.update(MTK_SENSOR_INFO_MAX_FRAME_DURATION, entryA); } { //need to add query from kernel IMetadata::IEntry entryA(MTK_SENSOR_INFO_PHYSICAL_SIZE); entryA.push_back(5.82, Type2Type<MFLOAT>()); entryA.push_back(4.76, Type2Type<MFLOAT>()); metadataA.update(MTK_SENSOR_INFO_PHYSICAL_SIZE, entryA); } { //need to add query from kernel IMetadata::IEntry entryA(MTK_SENSOR_INFO_PIXEL_ARRAY_SIZE); MSize Size1(4000,3000); entryA.push_back(Size1, Type2Type<MSize>()); metadataA.update(MTK_SENSOR_INFO_PIXEL_ARRAY_SIZE, entryA); } { //need to add query from kernel IMetadata::IEntry entryA(MTK_SENSOR_INFO_WHITE_LEVEL); switch (sensorStaticInfo[idx].rawSensorBit) { case RAW_SENSOR_8BIT: s32Para = 256; break; case RAW_SENSOR_10BIT: s32Para = 1024; break; case RAW_SENSOR_12BIT: s32Para = 4096; break; case RAW_SENSOR_14BIT: s32Para = 16384; break; default: s32Para = 256; break; } entryA.push_back(s32Para, Type2Type<MINT32>()); metadataA.update(MTK_SENSOR_INFO_WHITE_LEVEL, entryA); } { IMetadata::IEntry entryA(MTK_SENSOR_INFO_ORIENTATION); entryA.push_back((MINT32)sensorStaticInfo[idx].orientationAngle, Type2Type<MINT32>()); metadataA.update(MTK_SENSOR_INFO_ORIENTATION, entryA); } { IMetadata::IEntry entryA(MTK_SENSOR_INFO_PACKAGE); { IMetadata metadataB; { IMetadata::IEntry entryB(MTK_SENSOR_INFO_SCENARIO_ID); entryB.push_back((MINT32)SENSOR_SCENARIO_ID_NORMAL_PREVIEW,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_SCENARIO_ID, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_FRAME_RATE); entryB.push_back((MINT32)sensorStaticInfo[idx].previewFrameRate,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_FRAME_RATE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE); MSize size1(sensorStaticInfo[idx].previewWidth,sensorStaticInfo[idx].previewHeight); entryB.push_back(size1,Type2Type<MSize>()); metadataB.update(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY); MRect region1(MPoint(0,0), MSize(sensorStaticInfo[idx].previewWidth,sensorStaticInfo[idx].previewHeight)); entryB.push_back(region1,Type2Type<MRect>()); metadataB.update(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY, entryB); } entryA.push_back(metadataB,Type2Type<IMetadata>()); } { IMetadata metadataB; { IMetadata::IEntry entryB(MTK_SENSOR_INFO_SCENARIO_ID); entryB.push_back((MINT32)SENSOR_SCENARIO_ID_NORMAL_CAPTURE,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_SCENARIO_ID, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_FRAME_RATE); entryB.push_back((MINT32)sensorStaticInfo[idx].captureFrameRate,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_FRAME_RATE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE); MSize size1(sensorStaticInfo[idx].captureWidth,sensorStaticInfo[idx].captureHeight); entryB.push_back(size1,Type2Type<MSize>()); metadataB.update(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY); MRect region1(MPoint(0,0), MSize(sensorStaticInfo[idx].captureWidth,sensorStaticInfo[idx].captureHeight)); entryB.push_back(region1,Type2Type<MRect>()); metadataB.update(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY, entryB); } entryA.push_back(metadataB,Type2Type<IMetadata>()); } { IMetadata metadataB; { IMetadata::IEntry entryB(MTK_SENSOR_INFO_SCENARIO_ID); entryB.push_back((MINT32)SENSOR_SCENARIO_ID_NORMAL_VIDEO,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_SCENARIO_ID, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_FRAME_RATE); entryB.push_back((MINT32)sensorStaticInfo[idx].videoFrameRate,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_FRAME_RATE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE); MSize size1(sensorStaticInfo[idx].videoWidth,sensorStaticInfo[idx].videoHeight); entryB.push_back(size1,Type2Type<MSize>()); metadataB.update(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY); MRect region1(MPoint(0,0), MSize(sensorStaticInfo[idx].videoWidth,sensorStaticInfo[idx].videoHeight)); entryB.push_back(region1,Type2Type<MRect>()); metadataB.update(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY, entryB); } entryA.push_back(metadataB,Type2Type<IMetadata>()); } { IMetadata metadataB; { IMetadata::IEntry entryB(MTK_SENSOR_INFO_SCENARIO_ID); entryB.push_back((MINT32)SENSOR_SCENARIO_ID_SLIM_VIDEO1,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_SCENARIO_ID, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_FRAME_RATE); entryB.push_back((MINT32)sensorStaticInfo[idx].video1FrameRate,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_FRAME_RATE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE); MSize size1(sensorStaticInfo[idx].video1Width,sensorStaticInfo[idx].video1Height); entryB.push_back(size1,Type2Type<MSize>()); metadataB.update(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY); MRect region1(MPoint(0,0), MSize(sensorStaticInfo[idx].video1Width,sensorStaticInfo[idx].video1Height)); entryB.push_back(region1,Type2Type<MRect>()); metadataB.update(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY, entryB); } entryA.push_back(metadataB,Type2Type<IMetadata>()); } { IMetadata metadataB; { IMetadata::IEntry entryB(MTK_SENSOR_INFO_SCENARIO_ID); entryB.push_back((MINT32)SENSOR_SCENARIO_ID_SLIM_VIDEO2,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_SCENARIO_ID, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_FRAME_RATE); entryB.push_back((MINT32)sensorStaticInfo[idx].video2FrameRate,Type2Type<MINT32>()); metadataB.update(MTK_SENSOR_INFO_FRAME_RATE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE); MSize size1(sensorStaticInfo[idx].video2Width,sensorStaticInfo[idx].video2Height); entryB.push_back(size1,Type2Type<MSize>()); metadataB.update(MTK_SENSOR_INFO_REAL_OUTPUT_SIZE, entryB); } { IMetadata::IEntry entryB(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY); MRect region1(MPoint(0,0), MSize(sensorStaticInfo[idx].video2Width,sensorStaticInfo[idx].video2Height)); entryB.push_back(region1,Type2Type<MRect>()); metadataB.update(MTK_SENSOR_INFO_OUTPUT_REGION_ON_ACTIVE_ARRAY, entryB); } entryA.push_back(metadataB,Type2Type<IMetadata>()); } metadataA.update(MTK_SENSOR_INFO_PACKAGE, entryA); } metadataA.sort(); } MY_LOGD("impBuildSensorInfo end!\n"); }