diff --git a/app/build.gradle b/app/build.gradle index 1eb51d1a..f2a1bf7f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { // 10,00,000 major-minor-build def AppMajorVersion = 1 def AppMinorVersion = 1 -def AppBuildNumber = 40 +def AppBuildNumber = 47 def AppVersionName = AppMajorVersion + "." + AppMinorVersion + "." + AppBuildNumber def AppVersionCode = AppMajorVersion * 100000 + AppMinorVersion * 1000 + AppBuildNumber diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt index 736422ad..393acd36 100644 --- a/app/src/main/cpp/CMakeLists.txt +++ b/app/src/main/cpp/CMakeLists.txt @@ -47,12 +47,11 @@ add_definitions(-DUSING_EXEC_HDRP=1) set(USING_EXEC_HDRP 1) -# add_definitions(-DUSING_PLZ) - if(ANDROID_ABI STREQUAL "armeabi-v7a") add_definitions(-DUSING_N938) elseif(ANDROID_ABI STREQUAL "arm64-v8a") # add_definitions(-DUSING_N938) + add_definitions(-DUSING_PLZ) endif() # include_directories(${OpenCV_DIR}/include) diff --git a/app/src/main/cpp/GPIOControl.cpp b/app/src/main/cpp/GPIOControl.cpp index 5e9f1893..fd1227e1 100644 --- a/app/src/main/cpp/GPIOControl.cpp +++ b/app/src/main/cpp/GPIOControl.cpp @@ -35,6 +35,7 @@ size_t GpioControl::turnOnImpl(const IOT_PARAM& param) std::vector::iterator it; int res = 0; int fd = -1; + time_t now = time(NULL); fd = open(GPIO_NODE_MP, O_RDONLY); if( fd > 0 ) @@ -47,16 +48,20 @@ size_t GpioControl::turnOnImpl(const IOT_PARAM& param) if (it->cmd == param.cmd) { it->references++; - it->closeTime = 0; + // it->closeTime = 0; references = it->references; + if(it->openTime == 0) + it->openTime = now; SetCamerastatus(it->cmd, true); break; } } if (it == m_items.end()) { - ITEM item = {param.cmd, references, 0, 0}; + ITEM item = {param.cmd, references, 0, 0, 0}; + item.openTime = now; m_items.push_back(item); + SetCamerastatus(param.cmd, true); } } #ifdef _DEBUG @@ -327,7 +332,10 @@ bool GpioControl::SetCamerastatus(int cmd, bool status) #endif #ifdef USING_PLZ if(cmd == CMD_SET_PTZ_PWR_ENABLE) + { m_cameraPowerStatus = status; + } + #endif return true; } @@ -336,6 +344,28 @@ bool GpioControl::GetCamerastatus() return m_cameraPowerStatus; } +bool GpioControl::GetSelftestStatus(time_t wait_time) +{ + int cmd; +#ifdef USING_N938 + cmd = CMD_SET_PIC1_POWER; +#endif +#ifdef USING_PLZ + cmd = CMD_SET_PTZ_PWR_ENABLE; +#endif + time_t now = time(NULL); + std::vector::iterator it; + for (it = m_items.begin(); it != m_items.end(); ++it) + { + if (it->cmd == cmd && (now - it->openTime >= wait_time)) + { + return true; + } + } + return false; + +} + void GpioControl::PowerControlThreadProc() { time_t ts = 0; @@ -360,7 +390,7 @@ void GpioControl::PowerControlThreadProc() if (it->references == 0 && it->closeCmds == 0 && it->closeTime == 0) { #ifdef _DEBUG - ALOGI("PWR TH cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds); + ALOGI("PWR THREAD cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds); #endif continue; } @@ -388,8 +418,9 @@ void GpioControl::PowerControlThreadProc() // close it directly setInt(it->cmd, 0); it->closeTime = 0; + it->openTime = 0; #ifdef _DEBUG - ALOGI("PWR TH DO TurnOff cmd=%d", it->cmd); + ALOGI("PWR THREAD DO TurnOff cmd=%d", it->cmd); #endif SetCamerastatus(it->cmd, false); } @@ -404,7 +435,7 @@ void GpioControl::PowerControlThreadProc() } } #ifdef _DEBUG - ALOGI("PWR TH cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds); + ALOGI("PWR THREAD cmd=%d ref=%u closeCmds=%u", it->cmd, (uint32_t)it->references, (uint32_t)it->closeCmds); #endif } m_locker.unlock(); diff --git a/app/src/main/cpp/GPIOControl.h b/app/src/main/cpp/GPIOControl.h index 49c9d5e9..3f8716a6 100644 --- a/app/src/main/cpp/GPIOControl.h +++ b/app/src/main/cpp/GPIOControl.h @@ -26,16 +26,16 @@ #define CMD_SET_NETWORK_STATE 106 #define CMD_SET_OTG_STATE 107 #define CMD_GET_OTG_STATE 108 -#define CMD_GET_CHARGING_VOL_STATE 110 -#define CMD_GET_CHARGING_SHUNT_VOLTAGE_STATE 111 +//#define CMD_GET_CHARGING_VOL_STATE 110 +//#define CMD_GET_CHARGING_SHUNT_VOLTAGE_STATE 111 #define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112 -#define CMD_GET_CHARGING_POWER_STATE 113 -#define CMD_GET_CHARGING_CURRENT_STATE 114 -#define CMD_GET_BAT_VOL_STATE 115 -#define CMD_GET_BAT_SHUNT_VOLTAGE_STATE 116 +//#define CMD_GET_CHARGING_POWER_STATE 113 +//#define CMD_GET_CHARGING_CURRENT_STATE 114 +//#define CMD_GET_BAT_VOL_STATE 115 +//#define CMD_GET_BAT_SHUNT_VOLTAGE_STATE 116 #define CMD_GET_BAT_BUS_VOLTAGE_STATE 117 -#define CMD_GET_BAT_POWER_STATE 118 -#define CMD_GET_BAT_CURRENT_STATE 119 +//#define CMD_GET_BAT_POWER_STATE 118 +//#define CMD_GET_BAT_CURRENT_STATE 119 #define CMD_SET_485_STATE 121 #define CMD_SET_SPI_MODE 123 #define CMD_SET_SPI_BITS_PER_WORD 124 @@ -56,18 +56,13 @@ #define CMD_GET_OTG_STATE 108 #define CMD_SET_SPI_POWER 129 + #define CMD_SET_12V_EN_STATE 0 // TO BE ADDED -#define CMD_SET_SYSTEM_RESET 0 // TO BE ADDED -#define CMD_GET_CHARGING_VOL_STATE 0 // TO BE ADDED -#define CMD_GET_CHARGING_SHUNT_VOLTAGE_STATE 0 // TO BE ADDED -#define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 0 // TO BE ADDED -#define CMD_GET_CHARGING_POWER_STATE 0 // TO BE ADDED -#define CMD_GET_CHARGING_CURRENT_STATE 0 // TO BE ADDED -#define CMD_GET_BAT_VOL_STATE 0 // TO BE ADDED -#define CMD_GET_BAT_SHUNT_VOLTAGE_STATE 0 // TO BE ADDED -#define CMD_GET_BAT_BUS_VOLTAGE_STATE 0 // TO BE ADDED -#define CMD_GET_BAT_POWER_STATE 0 // TO BE ADDED -#define CMD_GET_BAT_CURRENT_STATE 0 // TO BE ADDED +#define CMD_SET_SYSTEM_RESET 202 +#define CMD_GET_LIGHT_ADC 101 +#define CMD_SET_LIGHT_ADC 102 +#define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112 +#define CMD_GET_BAT_BUS_VOLTAGE_STATE 117 #define CMD_SET_SPI_MODE 0 // TO BE ADDED #define CMD_SET_SPI_BITS_PER_WORD 0 // TO BE ADDED #define CMD_SET_SPI_MAXSPEEDHZ 0 // TO BE ADDED @@ -132,6 +127,9 @@ #define CMD_SET_485_EN_STATE 131 #define CMD_SET_OTG_STATE 107 +#define CMD_GET_CHARGING_BUS_VOLTAGE_STATE 112 +#define CMD_GET_BAT_BUS_VOLTAGE_STATE 117 + #endif // USING_N938 @@ -156,6 +154,7 @@ public: size_t references; size_t closeCmds; time_t closeTime; + time_t openTime; }; private: @@ -181,6 +180,7 @@ public: static size_t TurnOffImmediately(int cmd); static bool SetCamerastatus(int cmd, bool status); static bool GetCamerastatus(); + static bool GetSelftestStatus(time_t wait_time); static void PowerControlThreadProc(); @@ -320,12 +320,13 @@ public: static int getChargingVoltage() { #ifndef USING_N938 - return getInt(CMD_GET_CHARGING_VOL_STATE); + return getInt(CMD_GET_CHARGING_BUS_VOLTAGE_STATE); #else return -1; #endif } +#if 0 static int getChargingShuntVoltage() { #ifndef USING_N938 @@ -334,6 +335,7 @@ public: return -1; #endif } +#endif static int getChargingBusVoltage() { #ifndef USING_N938 @@ -343,6 +345,7 @@ public: #endif } +#if 0 static int getChargingPower() { #ifndef USING_N938 return getInt(CMD_GET_CHARGING_POWER_STATE); @@ -358,15 +361,13 @@ public: return -1; #endif } +#endif static int getBatteryVoltage() { -#ifndef USING_N938 - return getInt(CMD_GET_BAT_VOL_STATE); -#else - return -1; -#endif + return getInt(CMD_GET_BAT_BUS_VOLTAGE_STATE); } +#if 0 static int getBatteryShuntVoltage() { #ifndef USING_N938 return getInt(CMD_GET_BAT_SHUNT_VOLTAGE_STATE); @@ -374,15 +375,13 @@ public: return -1; #endif } +#endif static int getBatteryBusVoltage() { -#ifndef USING_N938 return getInt(CMD_GET_BAT_BUS_VOLTAGE_STATE); -#else - return -1; -#endif } +#if 0 static int getBatteryPower() { #ifndef USING_N938 return getInt(CMD_GET_BAT_POWER_STATE); @@ -398,6 +397,7 @@ public: return -1; #endif } +#endif static void set485WriteMode() { #if 0 @@ -463,7 +463,7 @@ public: m_cmds.resize(4, cmd1); m_cmds[1] = cmd2; m_cmds[2] = cmd3; - m_cmds[3] = cmd3; + m_cmds[3] = cmd4; TurnOn(); } PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime) @@ -471,8 +471,30 @@ public: m_cmds.resize(5, cmd1); m_cmds[1] = cmd2; m_cmds[2] = cmd3; - m_cmds[3] = cmd3; - m_cmds[4] = cmd4; + m_cmds[3] = cmd4; + m_cmds[4] = cmd5; + TurnOn(); + } + PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, int cmd6, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime) + { + m_cmds.resize(6, cmd1); + m_cmds[1] = cmd2; + m_cmds[2] = cmd3; + m_cmds[3] = cmd4; + m_cmds[4] = cmd5; + m_cmds[5] = cmd6; + TurnOn(); + } + + PowerControl(int cmd1, int cmd2, int cmd3, int cmd4, int cmd5, int cmd6, int cmd7, uint32_t closeDelayTime) : m_delayCloseTime(closeDelayTime) + { + m_cmds.resize(7, cmd1); + m_cmds[1] = cmd2; + m_cmds[2] = cmd3; + m_cmds[3] = cmd4; + m_cmds[4] = cmd5; + m_cmds[5] = cmd6; + m_cmds[6] = cmd7; TurnOn(); } @@ -534,7 +556,7 @@ public: PowerControl(CMD_SET_OTG_STATE, CMD_SET_NETWORK_POWER_EN, CMD_SET_PIC1_POWER, CMD_SET_485_EN_STATE, closeDelayTime) #else // USING_N938 #ifdef USING_PLZ - PowerControl(CMD_SET_OTG_STATE, CMD_SET_PTZ_PWR_ENABLE, CMD_SET_100M_ENABLE, CMD_SET_100M_SWITCH_PWR_ENABLE, CMD_SET_12V_EN_STATE, closeDelayTime) + PowerControl(CMD_SET_3V3_PWR_EN, CMD_SET_OTG_STATE, CMD_SET_PTZ_PWR_ENABLE, CMD_SET_100M_ENABLE, CMD_SET_100M_SWITCH_PWR_ENABLE, CMD_SET_485_ENABLE, CMD_SET_12V_EN_STATE, closeDelayTime) #else // USING_PLZ PowerControl(CMD_SET_OTG_STATE, CMD_SET_12V_EN_STATE, closeDelayTime) #endif // USING_PLZ diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp index 6af7fc80..6855ba5b 100644 --- a/app/src/main/cpp/PhoneDevice.cpp +++ b/app/src/main/cpp/PhoneDevice.cpp @@ -970,6 +970,7 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro int val = GpioControl::getLightAdc(); it->second = std::to_string(val); } +#if 0 else if (it->first == (PROP_CHARGING_CURRENT)) { it->second = std::to_string(GpioControl::getChargingCurrent()); @@ -978,6 +979,7 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro { it->second = std::to_string(GpioControl::getChargingPower()); } +#endif else if (it->first == (PROP_CHARGING_BUS_VOL) || it->first == (PROP_CHARGING_VOLTAGE)) { double val = -1; @@ -994,10 +996,12 @@ bool CPhoneDevice::QuerySystemProperties(std::map& pro break; } } +#if 0 else if (it->first == (PROP_BATTERY_POWER)) { it->second = std::to_string(GpioControl::getBatteryPower()); } +#endif else if (it->first == (PROP_BATTERY_BUS_VOL) || it->first == (PROP_BATTERY_VOLTAGE)) { int val = QueryBatteryVoltage(DEFAULT_BATTERY_QUERY_RETRIES); // // BatVol @@ -1487,8 +1491,11 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c // AutoEnv autoEnv(pThis->m_vm); time_t ts = time(NULL); uint32_t waitTime = localPhotoInfo.selfTestingTime; - waitTime = (waitTime!= 0) ? (waitTime * 1024) : 10240; - std::this_thread::sleep_for(std::chrono::milliseconds(waitTime)); + if(!GpioControl::GetSelftestStatus(waitTime)) + { + waitTime = (waitTime != 0) ? (waitTime * 1024) : 10240; + std::this_thread::sleep_for(std::chrono::milliseconds(waitTime)); + } SetStaticIp(); std::this_thread::sleep_for(std::chrono::milliseconds(256)); @@ -1526,7 +1533,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c { // Hai Kang netPhotoInfo.authType = HTTP_AUTH_TYPE_DIGEST; - snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/ISAPI/Streaming/channels/%u/picture", (uint32_t)localPhotoInfo.channel); + snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/ISAPI/Streaming/channels/%u/picture", (uint32_t)localPhotoInfo.cameraId); } else if (localPhotoInfo.vendor == 2) { @@ -1538,7 +1545,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c // Yu Shi netPhotoInfo.authType = HTTP_AUTH_TYPE_DIGEST; int streamSid = 0; // should put into config - snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/LAPI/V1.0/Channels/%u/Media/Video/Streams/%d/Snapshot", (uint32_t)localPhotoInfo.channel, streamSid); + snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/LAPI/V1.0/Channels/%u/Media/Video/Streams/%d/Snapshot", (uint32_t)localPhotoInfo.cameraId, streamSid); } else if (localPhotoInfo.vendor == 5) { @@ -1547,7 +1554,7 @@ bool CPhoneDevice::TakePhotoWithNetCamera(IDevice::PHOTO_INFO& localPhotoInfo, c // http://192.168.1.46/Snapshot/%u/RemoteImageCapture?ImageFormat=2&HorizontalPixel=1920&VerticalPixel=1080 // http://192.168.1.101/Snapshot/1/2/RemoteImageCaptureV2?ImageFormat=jpg // http://192.168.1.101/Snapshot/1/1/RemoteImageCaptureV2?ImageFormat=jpg - snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/Snapshot/%u/1/RemoteImageCaptureV2?ImageFormat=jpg", (uint32_t)localPhotoInfo.channel); + snprintf(netPhotoInfo.url, sizeof(netPhotoInfo.url), "/Snapshot/%u/1/RemoteImageCaptureV2?ImageFormat=jpg", (uint32_t)localPhotoInfo.cameraId); } else { @@ -3421,6 +3428,8 @@ bool CPhoneDevice::PostProcessPhoto(const PHOTO_INFO& photoInfo, const vector (int)width - 1) { @@ -3467,6 +3476,16 @@ bool CPhoneDevice::PostProcessPhoto(const PHOTO_INFO& photoInfo, const vectoralignment == OSD_ALIGNMENT_TOP_RIGHT) { + std::size_t newlinePos = it->text.find('\n'); + if (newlinePos != std::string::npos) + { + std::string textBeforeNewline = it->text.substr(0, newlinePos); + std::string textAfterNewline = it->text.substr(newlinePos + 1); + if(textBeforeNewline.length()>=textAfterNewline.length()) + textSize = ft2->getTextSize(textBeforeNewline, fontSize, thickness, &baseline); + else + textSize = ft2->getTextSize(textAfterNewline, fontSize, thickness, &baseline); + } pt.x = width - textSize.width - it->x * ratio; pt.y= it->y * ratio; } @@ -3746,10 +3765,12 @@ void CPhoneDevice::CameraCtrl(unsigned short waitTime, unsigned short delayTime, std::thread ctrlThread([pThis, waitTime, delayTime, cmdidx, channel, preset, serfileStr, baud, addr]() mutable { uint64_t wid = pThis->RequestWakelock(0); + XYLOG(XYLOG_SEVERITY_INFO,"CameraCtrl Command= %d, preset = %u", cmdidx, preset); pThis->OpenPTZSensors(waitTime); CameraPhotoCmd(time(NULL), channel, cmdidx, 0, preset, serfileStr.c_str(), baud, addr); pThis->ClosePTZSensors(delayTime); + XYLOG(XYLOG_SEVERITY_INFO,"CameraCtrl over"); pThis->ReleaseWakelock(wid); }); ctrlThread.detach(); diff --git a/app/src/main/cpp/SensorsProtocol.cpp b/app/src/main/cpp/SensorsProtocol.cpp index 69624008..a3eea8ac 100644 --- a/app/src/main/cpp/SensorsProtocol.cpp +++ b/app/src/main/cpp/SensorsProtocol.cpp @@ -2969,7 +2969,7 @@ void ShxyProtocolDataProcess(int devno) int i, j, aipnt, datanum; SERIAL_DEV_DEF *pPortParam; SIO_PARAM_SERIAL_DEF *curserial; - char szbuf[64]; + char szbuf[128]; pPortParam = &srdt.ms_dev[devno]; curserial = &serialport[devparam[devno].commid]; diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp index 66183675..c7ac545e 100644 --- a/app/src/main/cpp/camera2/ndkcamera.cpp +++ b/app/src/main/cpp/camera2/ndkcamera.cpp @@ -81,7 +81,7 @@ static void onSessionReady(void* context, ACameraCaptureSession *session) static void onSessionClosed(void* context, ACameraCaptureSession *session) { - XYLOG(XYLOG_SEVERITY_INFO, "onSessionClosed %p", session); + XYLOG(XYLOG_SEVERITY_DEBUG, "onSessionClosed %p", session); } void onCaptureFailed(void* context, ACameraCaptureSession* session, ACaptureRequest* request, ACameraCaptureFailure* failure) @@ -164,6 +164,7 @@ NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARA mHeight = height; mCaptureTriggered = false; + mFocusTriggered = false; maxFrameDuration = 0; afSupported = false; @@ -732,201 +733,6 @@ int NdkCamera::open(const std::string& cameraId) { CaptureRequest *request = CreateRequest(true); mCaptureRequests.push_back(request); -#if 0 - for (int idx = 0; idx <= burstCaptures; idx++) - { - CaptureRequest *request = new CaptureRequest(); - std::memset(request, 0, sizeof(CaptureRequest)); - - bool isPreviewRequest = (idx == PREVIEW_REQUEST_IDX); - - request->pThis = this; - request->imageReader = isPreviewRequest ? mPreviewImageReader : mImageReader; - request->imageWindow = isPreviewRequest ? mPreviewImageWindow : mImageWindow; - request->imageTarget = isPreviewRequest ? mPreviewOutputTarget : mOutputTarget; - request->templateId = isPreviewRequest ? TEMPLATE_PREVIEW : (ACameraDevice_request_template)m_params.requestTemplate; - - // capture request - status = ACameraDevice_createCaptureRequest(camera_device, request->templateId, &request->request); - ACaptureRequest_setUserContext(request->request, request); - - // uint8_t ctrlMode = sceneModeSupported ? ACAMERA_CONTROL_MODE_USE_SCENE_MODE : ACAMERA_CONTROL_MODE_AUTO; - uint8_t ctrlMode = ACAMERA_CONTROL_MODE_AUTO; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_MODE, 1, &ctrlMode); - - uint8_t captureIntent = isPreviewRequest ? ACAMERA_CONTROL_CAPTURE_INTENT_PREVIEW : GetCaptureIntent(ACameraDevice_request_template)m_params.requestTemplate); - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_CAPTURE_INTENT, 1, &captureIntent); - - uint8_t flashMode = ACAMERA_FLASH_MODE_OFF; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_FLASH_MODE, 1, &flashMode); - - uint8_t nrMode = ACAMERA_NOISE_REDUCTION_MODE_HIGH_QUALITY; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_NOISE_REDUCTION_MODE, 1, &nrMode); - - uint8_t edgeMode = ACAMERA_EDGE_MODE_FAST; - // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_EDGE_MODE, 1, &edgeMode); - - if (afSupported && m_params.autoFocus) - { - if (!m_params.zoom) - { - if (maxRegions[2] > 0) - { - int32_t centerX = activeArraySize[0] >> 1; - int32_t centerY = activeArraySize[1] >> 1; - - int32_t sizeX = activeArraySize[0] >> 4; - int32_t sizeY = activeArraySize[1] >> 4; - - int32_t afRegions[] = { centerX - sizeX, centerY - sizeY, centerX + sizeX, centerY + sizeY, 1000 }; - // status = ACaptureRequest_setEntry_i32(request->request, ACAMERA_CONTROL_AF_REGIONS, 5, afRegions); - if (status == ACAMERA_OK) - { -#ifdef _DEBUG - int aa = 0; -#endif - } - } - - // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO; - uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE; - // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_MODE, 1, &afMode); - - // uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL; - // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); - - trig = ACAMERA_CONTROL_AF_TRIGGER_START; - // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); - } - } - else - { - uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_START; - // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); - } - - if (m_params.sceneMode != 0) - { - uint8_t sceneMode = m_params.sceneMode; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_SCENE_MODE, 1, &sceneMode); - } - - if (m_params.autoExposure) - { - uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode); - // ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_); - - if ((aeCompensationRange.min_ != 0 || aeCompensationRange.max_ != 0) && m_params.compensation != 0) - { - int32_t compensation = m_params.compensation; - if (compensation < aeCompensationRange.min_) - { - compensation = aeCompensationRange.min_; - } - if (compensation > aeCompensationRange.max_) - { - compensation = aeCompensationRange.max_; - } - // int32_t aeCompensation = aeCompensationRange.max_; - status = ACaptureRequest_setEntry_i32(request->request, ACAMERA_CONTROL_AE_EXPOSURE_COMPENSATION, 1, &compensation); - if (status != ACAMERA_OK) - { - int aa = 0; - } - } - - if (maxRegions[0] > 0) - { - int32_t aeRegions[] = { 0, 0, activeArraySize[0] - 1, activeArraySize[1] - 1, 1000 }; - // status = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_REGIONS, 5, aeRegions); - if (status == ACAMERA_OK) - { -#ifdef _DEBUG - int aa = 0; -#endif - } - } - - if (isPreviewRequest) - { - if (aeLockAvailable && (m_params.wait3ALocked & WAIT_AE_LOCKED)) - { - uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_ON; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLock); - - XYLOG(XYLOG_SEVERITY_DEBUG, "Try to Lock AE"); - mResult.aeLockSetted = 1; - } - else - { - uint8_t aeLock = ACAMERA_CONTROL_AE_LOCK_OFF; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLock); - XYLOG(XYLOG_SEVERITY_DEBUG, "AE_Lock Not Supported"); - } - - uint8_t aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d", (int)status); - m_precaptureStartTime = m_startTime; - - // ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff); - } - } - else - { - uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode); - - if (m_params.sensitivity > 0) - { - int32_t sensitivity = m_params.sensitivity; - status = ACaptureRequest_setEntry_i32(request->request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity); - } - if (m_params.exposureTime > 0) - { - int64_t exposureTime = m_params.exposureTime; - status = ACaptureRequest_setEntry_i64(request->request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime); - } - - int64_t frameDuration = maxFrameDuration / 2; - // status = ACaptureRequest_setEntry_i64(request->request, ACAMERA_SENSOR_FRAME_DURATION, 1, &frameDuration); - } - - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode); - if ((awbMode == ACAMERA_CONTROL_AWB_MODE_AUTO) && awbLockAvailable && (m_params.wait3ALocked & WAIT_AWB_LOCKED)) - { - uint8_t awbLock = ACAMERA_CONTROL_AWB_LOCK_ON; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AWB_LOCK, 1, &awbLock); - mResult.awbLockSetted = 1; - - XYLOG(XYLOG_SEVERITY_DEBUG, "Try to Lock AWB AWBS=%u", (unsigned int)mResult.awbState); - } - -#if 0 - uint8_t antiBandingMode = ACAMERA_CONTROL_AE_ANTIBANDING_MODE_60HZ; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AE_ANTIBANDING_MODE, 1, &antiBandingMode); - uint8_t flicker = ACAMERA_STATISTICS_SCENE_FLICKER_60HZ; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_STATISTICS_SCENE_FLICKER, 1, &flicker); -#endif - - if (m_params.zoom) - { - float zoomRatio = m_params.zoomRatio; - // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO; - status = ACaptureRequest_setEntry_float(request->request, ACAMERA_CONTROL_ZOOM_RATIO, 1, &zoomRatio); - if (status != ACAMERA_OK) - { - } - } - - status = ACaptureRequest_addTarget(request->request, request->imageTarget); - - status = ACaptureSessionOutput_create(request->imageWindow, &request->sessionOutput); - status = ACaptureSessionOutputContainer_add(capture_session_output_container, request->sessionOutput); - } -#endif // capture session ACameraCaptureSession_stateCallbacks camera_capture_session_state_callbacks; @@ -1023,14 +829,18 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest) // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_AUTO; status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_MODE, 1, &afMode); +#if 0 + // For ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE, we SHOULD NOT call ACAMERA_CONTROL_AF_TRIGGER_START + // Refer to: https://source.android.google.cn/docs/core/camera/camera3_3Amodes?hl=zh-cn if (isPreviewRequest) { - uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL; + // uint8_t trig = ACAMERA_CONTROL_AF_TRIGGER_CANCEL; // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); - trig = ACAMERA_CONTROL_AF_TRIGGER_START; - status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); + // trig = ACAMERA_CONTROL_AF_TRIGGER_START; + // status = ACaptureRequest_setEntry_u8(request->request, ACAMERA_CONTROL_AF_TRIGGER, 1, &trig); } +#endif } } else @@ -1163,6 +973,11 @@ NdkCamera::CaptureRequest* NdkCamera::CreateRequest(bool isPreviewRequest) return request; } +void NdkCamera::DestroyRequest(CaptureRequest* request) +{ + +} + void NdkCamera::close() { XYLOG(XYLOG_SEVERITY_DEBUG, "CameraStatus::try close %s", mCameraId.c_str()); @@ -1724,8 +1539,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque status = ACameraMetadata_getConstEntry(result, ACAMERA_CONTROL_AF_STATE, &val); afState = (status == ACAMERA_OK) ? *(val.data.u8) : ACAMERA_CONTROL_AF_STATE_INACTIVE; - // XYLOG(XYLOG_SEVERITY_DEBUG, "Preview State AFS=%u AES=%u AWBS=%u Time=%u", - // (unsigned int)afState, (unsigned int)aeState, (unsigned int)awbState, (unsigned int)(ts - m_startTime)); + // XYLOG(XYLOG_SEVERITY_DEBUG, "Preview State AFS=%u AES=%u AWBS=%u Time=%u", (unsigned int)afState, (unsigned int)aeState, (unsigned int)awbState, (unsigned int)(ts - m_startTime)); // Check if timeout if (ts - m_startTime < m_params.focusTimeout) @@ -1749,8 +1563,8 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque */ if (afState != ACAMERA_CONTROL_AF_STATE_PASSIVE_FOCUSED && - afState != ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED && - afState != ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED) + afState != ACAMERA_CONTROL_AF_STATE_FOCUSED_LOCKED/* && + afState != ACAMERA_CONTROL_AF_STATE_NOT_FOCUSED_LOCKED*/) // if (afState != ACAMERA_CONTROL_AF_STATE_INACTIVE) { //XYLOG(XYLOG_SEVERITY_DEBUG, "AF Enabled And Focused"); @@ -1767,7 +1581,7 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque aePrecatureTrigger = ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER_START; status = ACaptureRequest_setEntry_u8(request, ACAMERA_CONTROL_AE_PRECAPTURE_TRIGGER, 1, &aePrecatureTrigger); - //XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)mResult.aeState); + //XYLOG(XYLOG_SEVERITY_DEBUG, "Trigger PRECAPTURE status=%d AES=%u", (int)status, (unsigned int)aeState); AASSERT(status == ACAMERA_OK, "Failed to call PRECAPTURE_TRIGGER, status=%d", status); readyForCapture = false; @@ -1894,11 +1708,10 @@ void NdkCamera::onCaptureCompleted(ACameraCaptureSession* session, ACaptureReque status = ACameraMetadata_getConstEntry(result, ACAMERA_SENSOR_SENSITIVITY, &val); int sensitivity = (status == ACAMERA_OK) ? *(val.data.i32) : 0; - uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF; - XYLOG(XYLOG_SEVERITY_INFO, "HDR: Base Exp=%lld ISO=%d", exTime / 1000, sensitivity); if (exTime != -1 && sensitivity > 0) { + uint8_t aeModeOff = ACAMERA_CONTROL_AE_MODE_OFF; for (int idx = 0; idx < burstCaptures; idx++) { ACaptureRequest_setEntry_u8(requests[idx], ACAMERA_CONTROL_AE_MODE, 1, &aeModeOff); diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h index da2caa3a..d8e8bdf0 100644 --- a/app/src/main/cpp/camera2/ndkcamera.h +++ b/app/src/main/cpp/camera2/ndkcamera.h @@ -161,6 +161,7 @@ public: void CreateSession(ANativeWindow* previewWindow); CaptureRequest* CreateRequest(bool isPreviewRequest); + void DestroyRequest(CaptureRequest* request); void DestroySession(); @@ -234,6 +235,7 @@ protected: int32_t maxRegions[3]; bool mCaptureTriggered; + bool mFocusTriggered; CAPTURE_RESULT mResult; unsigned long long m_startTime; diff --git a/app/src/main/cpp/hdrplus2/src/HDRPlus.cpp b/app/src/main/cpp/hdrplus2/src/HDRPlus.cpp index 3c979399..05096ebd 100644 --- a/app/src/main/cpp/hdrplus2/src/HDRPlus.cpp +++ b/app/src/main/cpp/hdrplus2/src/HDRPlus.cpp @@ -50,9 +50,12 @@ public: Halide::Runtime::Buffer imgs = burst.ToBuffer(); if (imgs.dimensions() != 3 || imgs.extent(2) < 2) { + return output_img; +#if 0 throw std::invalid_argument( "The input of HDRPlus must be a 3-dimensional buffer with at least " "two channels."); +#endif } const int cfa_pattern = static_cast(burst.GetCfaPattern()); diff --git a/app/src/main/cpp/hdrplus2/src/InputSource.cpp b/app/src/main/cpp/hdrplus2/src/InputSource.cpp index cf82118d..2910a485 100644 --- a/app/src/main/cpp/hdrplus2/src/InputSource.cpp +++ b/app/src/main/cpp/hdrplus2/src/InputSource.cpp @@ -136,7 +136,9 @@ CfaPattern RawImage::GetCfaPattern() const { } else if (cfa_pattern == std::string{1, 2, 0, 1}) { return CfaPattern::CFA_GBRG; } +#if 0 throw std::invalid_argument("Unsupported CFA pattern: " + cfa_pattern); +#endif return CfaPattern::CFA_UNKNOWN; } diff --git a/app/src/main/cpp/netcamera/httpclient.cpp b/app/src/main/cpp/netcamera/httpclient.cpp index 2f16d3b3..874ef20d 100644 --- a/app/src/main/cpp/netcamera/httpclient.cpp +++ b/app/src/main/cpp/netcamera/httpclient.cpp @@ -90,7 +90,7 @@ int DoGetRequest(const char* url, int authType, const char* userName, const char char * log = new char[data.size() + 1]; log[data.size()] = 0; memcpy(log, &data[0], data.size()); - printf(log); + printf("%s", log); delete[] log; #endif } diff --git a/app/src/main/java/com/xypower/mpapp/MainActivity.java b/app/src/main/java/com/xypower/mpapp/MainActivity.java index e2ee7f05..5f140950 100644 --- a/app/src/main/java/com/xypower/mpapp/MainActivity.java +++ b/app/src/main/java/com/xypower/mpapp/MainActivity.java @@ -426,7 +426,6 @@ public class MainActivity extends AppCompatActivity { public void onClick(View view) { MicroPhotoService.setOtgState(true); - // SysApi.setOtgState(true); MicroPhotoService.setCam3V3Enable(true); Runnable runnable = new Runnable() { @@ -439,7 +438,7 @@ public class MainActivity extends AppCompatActivity { MicroPhotoService.setCam3V3Enable(false); MicroPhotoService.setOtgState(false); - binding.logs.append(cameraInfo + "\r\n"); + MicroPhotoService.infoLog(cameraInfo); Toast.makeText(view.getContext(), cameraInfo, Toast.LENGTH_LONG).show(); } }; diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java index 7f2ac1ef..cd8efe21 100644 --- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java +++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java @@ -78,6 +78,7 @@ import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.io.Reader; import java.lang.reflect.Method; +import java.net.Inet4Address; import java.net.InetAddress; import java.net.URI; import java.nio.channels.FileLock; @@ -812,8 +813,8 @@ public class MicroPhotoService extends Service { long ts = System.currentTimeMillis() / 1000; // long val = (ts << 24); long val = 0; - val |= ((long)channel << 16); - val |= ((long)preset << 8); + val |= ((long)channel << 12); + val |= ((long)preset << 4); val |= photoOrVideo ? 0L : 1L; schedules.add(Long.valueOf(val)); @@ -1519,9 +1520,12 @@ public class MicroPhotoService extends Service { if (lp != null) { List addresses = lp.getLinkAddresses(); if (addresses != null && addresses.size() > 0) { - InetAddress inetAddress = addresses.get(0).getAddress(); - if (inetAddress != null) { - ip = inetAddress.getHostAddress(); + for (LinkAddress linkAddress : addresses) { + InetAddress inetAddress = linkAddress.getAddress(); + if (inetAddress != null && inetAddress instanceof Inet4Address) { + ip = inetAddress.getHostAddress(); + break; + } } } } diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java index 0b9219f2..2ba8944a 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/MpMasterService.java @@ -390,9 +390,6 @@ public class MpMasterService extends Service { public boolean shouldSyncTime() { return mSyncTime; } public void startMpApp() { - if (true) { - return; - } try { final Context context = getApplicationContext(); long ts = System.currentTimeMillis(); @@ -422,7 +419,7 @@ public class MpMasterService extends Service { long tempduration = mMpHeartbeatDuration; if(mMpHeartbeatDuration < 600000) - tempduration = 300000; + tempduration = 290000; if (mPreviousMpHbTime <= ts && ts - mPreviousMpHbTime > tempduration * 2) { // MpApp is not running if (ts - mTimeToStartMpApp >= 1800000) {