Loading services/camera/libcameraservice/Android.bp +0 −2 Original line number Diff line number Diff line Loading @@ -81,7 +81,6 @@ cc_library_shared { "device3/Camera3OutputUtils.cpp", "device3/Camera3DeviceInjectionMethods.cpp", "device3/UHRCropAndMeteringRegionMapper.cpp", "device3/PreviewFrameScheduler.cpp", "device3/hidl/HidlCamera3Device.cpp", "device3/hidl/HidlCamera3OfflineSession.cpp", "device3/hidl/HidlCamera3OutputUtils.cpp", Loading Loading @@ -112,7 +111,6 @@ cc_library_shared { ], shared_libs: [ "libandroid", "libbase", "libdl", "libexif", Loading services/camera/libcameraservice/device3/Camera3Device.cpp +20 −11 Original line number Diff line number Diff line Loading @@ -2649,7 +2649,7 @@ void Camera3Device::setErrorStateLockedV(const char *fmt, va_list args) { status_t Camera3Device::registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool hasAppCallback, nsecs_t maxExpectedDuration, bool hasAppCallback, nsecs_t minExpectedDuration, nsecs_t maxExpectedDuration, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, Loading @@ -2659,8 +2659,9 @@ status_t Camera3Device::registerInFlight(uint32_t frameNumber, ssize_t res; res = mInFlightMap.add(frameNumber, InFlightRequest(numBuffers, resultExtras, hasInput, hasAppCallback, maxExpectedDuration, physicalCameraIds, isStillCapture, isZslCapture, rotateAndCropAuto, cameraIdsWithZoom, requestTimeNs, outputSurfaces)); hasAppCallback, minExpectedDuration, maxExpectedDuration, physicalCameraIds, isStillCapture, isZslCapture, rotateAndCropAuto, cameraIdsWithZoom, requestTimeNs, outputSurfaces)); if (res < 0) return res; if (mInFlightMap.size() == 1) { Loading Loading @@ -3216,13 +3217,16 @@ bool Camera3Device::RequestThread::sendRequestsBatch() { return true; } nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_metadata_t *request) { nsecs_t maxExpectedDuration = kDefaultExpectedDuration; std::pair<nsecs_t, nsecs_t> Camera3Device::RequestThread::calculateExpectedDurationRange( const camera_metadata_t *request) { std::pair<nsecs_t, nsecs_t> expectedRange( InFlightRequest::kDefaultMinExpectedDuration, InFlightRequest::kDefaultMaxExpectedDuration); camera_metadata_ro_entry_t e = camera_metadata_ro_entry_t(); find_camera_metadata_ro_entry(request, ANDROID_CONTROL_AE_MODE, &e); if (e.count == 0) return maxExpectedDuration; if (e.count == 0) return expectedRange; switch (e.data.u8[0]) { case ANDROID_CONTROL_AE_MODE_OFF: Loading @@ -3230,13 +3234,15 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_ ANDROID_SENSOR_EXPOSURE_TIME, &e); if (e.count > 0) { maxExpectedDuration = e.data.i64[0]; expectedRange.first = e.data.i64[0]; expectedRange.second = expectedRange.first; } find_camera_metadata_ro_entry(request, ANDROID_SENSOR_FRAME_DURATION, &e); if (e.count > 0) { maxExpectedDuration = std::max(e.data.i64[0], maxExpectedDuration); expectedRange.first = std::max(e.data.i64[0], expectedRange.first); expectedRange.second = expectedRange.first; } break; default: Loading @@ -3244,12 +3250,13 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_ ANDROID_CONTROL_AE_TARGET_FPS_RANGE, &e); if (e.count > 1) { maxExpectedDuration = 1e9 / e.data.u8[0]; expectedRange.first = 1e9 / e.data.i32[1]; expectedRange.second = 1e9 / e.data.i32[0]; } break; } return maxExpectedDuration; return expectedRange; } bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag, Loading Loading @@ -3864,11 +3871,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { isZslCapture = true; } } auto expectedDurationRange = calculateExpectedDurationRange(settings); res = parent->registerInFlight(halRequest->frame_number, totalNumBuffers, captureRequest->mResultExtras, /*hasInput*/halRequest->input_buffer != NULL, hasCallback, calculateMaxExpectedDuration(settings), /*min*/expectedDurationRange.first, /*max*/expectedDurationRange.second, requestedPhysicalCameras, isStillCapture, isZslCapture, captureRequest->mRotateAndCropAuto, mPrevCameraIdsWithZoom, (mUseHalBufManager) ? uniqueSurfaceIdMap : Loading services/camera/libcameraservice/device3/Camera3Device.h +7 −4 Original line number Diff line number Diff line Loading @@ -302,7 +302,6 @@ class Camera3Device : static const nsecs_t kMinWarnInflightDuration = 5000000000; // 5 s static const size_t kInFlightWarnLimit = 30; static const size_t kInFlightWarnLimitHighSpeed = 256; // batch size 32 * pipe depth 8 static const nsecs_t kDefaultExpectedDuration = 100000000; // 100 ms static const nsecs_t kMinInflightDuration = 5000000000; // 5 s static const nsecs_t kBaseGetBufferWait = 3000000000; // 3 sec. // SCHED_FIFO priority for request submission thread in HFR mode Loading Loading @@ -956,8 +955,9 @@ class Camera3Device : // send request in mNextRequests to HAL in a batch. Return true = sucssess bool sendRequestsBatch(); // Calculate the expected maximum duration for a request nsecs_t calculateMaxExpectedDuration(const camera_metadata_t *request); // Calculate the expected (minimum, maximum) duration range for a request std::pair<nsecs_t, nsecs_t> calculateExpectedDurationRange( const camera_metadata_t *request); // Check and update latest session parameters based on the current request settings. bool updateSessionParameters(const CameraMetadata& settings); Loading Loading @@ -1072,7 +1072,7 @@ class Camera3Device : status_t registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool callback, nsecs_t maxExpectedDuration, bool callback, nsecs_t minExpectedDuration, nsecs_t maxExpectedDuration, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces, Loading Loading @@ -1323,6 +1323,9 @@ class Camera3Device : // performance class. bool mOverrideForPerfClass; // The current minimum expected frame duration based on AE_TARGET_FPS_RANGE nsecs_t mMinExpectedDuration = 0; // Injection camera related methods. class Camera3DeviceInjectionMethods : public virtual RefBase { public: Loading services/camera/libcameraservice/device3/Camera3FakeStream.h +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ class Camera3FakeStream : virtual status_t setBatchSize(size_t batchSize) override; virtual void onMinDurationChanged(nsecs_t /*duration*/) {} protected: /** Loading services/camera/libcameraservice/device3/Camera3OfflineSession.h +3 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,9 @@ class Camera3OfflineSession : // For client methods such as disconnect/dump std::mutex mInterfaceLock; // The current minimum expected frame duration based on AE_TARGET_FPS_RANGE nsecs_t mMinExpectedDuration = 0; // SetErrorInterface void setErrorState(const char *fmt, ...) override; void setErrorStateLocked(const char *fmt, ...) override; Loading Loading
services/camera/libcameraservice/Android.bp +0 −2 Original line number Diff line number Diff line Loading @@ -81,7 +81,6 @@ cc_library_shared { "device3/Camera3OutputUtils.cpp", "device3/Camera3DeviceInjectionMethods.cpp", "device3/UHRCropAndMeteringRegionMapper.cpp", "device3/PreviewFrameScheduler.cpp", "device3/hidl/HidlCamera3Device.cpp", "device3/hidl/HidlCamera3OfflineSession.cpp", "device3/hidl/HidlCamera3OutputUtils.cpp", Loading Loading @@ -112,7 +111,6 @@ cc_library_shared { ], shared_libs: [ "libandroid", "libbase", "libdl", "libexif", Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +20 −11 Original line number Diff line number Diff line Loading @@ -2649,7 +2649,7 @@ void Camera3Device::setErrorStateLockedV(const char *fmt, va_list args) { status_t Camera3Device::registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool hasAppCallback, nsecs_t maxExpectedDuration, bool hasAppCallback, nsecs_t minExpectedDuration, nsecs_t maxExpectedDuration, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, Loading @@ -2659,8 +2659,9 @@ status_t Camera3Device::registerInFlight(uint32_t frameNumber, ssize_t res; res = mInFlightMap.add(frameNumber, InFlightRequest(numBuffers, resultExtras, hasInput, hasAppCallback, maxExpectedDuration, physicalCameraIds, isStillCapture, isZslCapture, rotateAndCropAuto, cameraIdsWithZoom, requestTimeNs, outputSurfaces)); hasAppCallback, minExpectedDuration, maxExpectedDuration, physicalCameraIds, isStillCapture, isZslCapture, rotateAndCropAuto, cameraIdsWithZoom, requestTimeNs, outputSurfaces)); if (res < 0) return res; if (mInFlightMap.size() == 1) { Loading Loading @@ -3216,13 +3217,16 @@ bool Camera3Device::RequestThread::sendRequestsBatch() { return true; } nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_metadata_t *request) { nsecs_t maxExpectedDuration = kDefaultExpectedDuration; std::pair<nsecs_t, nsecs_t> Camera3Device::RequestThread::calculateExpectedDurationRange( const camera_metadata_t *request) { std::pair<nsecs_t, nsecs_t> expectedRange( InFlightRequest::kDefaultMinExpectedDuration, InFlightRequest::kDefaultMaxExpectedDuration); camera_metadata_ro_entry_t e = camera_metadata_ro_entry_t(); find_camera_metadata_ro_entry(request, ANDROID_CONTROL_AE_MODE, &e); if (e.count == 0) return maxExpectedDuration; if (e.count == 0) return expectedRange; switch (e.data.u8[0]) { case ANDROID_CONTROL_AE_MODE_OFF: Loading @@ -3230,13 +3234,15 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_ ANDROID_SENSOR_EXPOSURE_TIME, &e); if (e.count > 0) { maxExpectedDuration = e.data.i64[0]; expectedRange.first = e.data.i64[0]; expectedRange.second = expectedRange.first; } find_camera_metadata_ro_entry(request, ANDROID_SENSOR_FRAME_DURATION, &e); if (e.count > 0) { maxExpectedDuration = std::max(e.data.i64[0], maxExpectedDuration); expectedRange.first = std::max(e.data.i64[0], expectedRange.first); expectedRange.second = expectedRange.first; } break; default: Loading @@ -3244,12 +3250,13 @@ nsecs_t Camera3Device::RequestThread::calculateMaxExpectedDuration(const camera_ ANDROID_CONTROL_AE_TARGET_FPS_RANGE, &e); if (e.count > 1) { maxExpectedDuration = 1e9 / e.data.u8[0]; expectedRange.first = 1e9 / e.data.i32[1]; expectedRange.second = 1e9 / e.data.i32[0]; } break; } return maxExpectedDuration; return expectedRange; } bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag, Loading Loading @@ -3864,11 +3871,13 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { isZslCapture = true; } } auto expectedDurationRange = calculateExpectedDurationRange(settings); res = parent->registerInFlight(halRequest->frame_number, totalNumBuffers, captureRequest->mResultExtras, /*hasInput*/halRequest->input_buffer != NULL, hasCallback, calculateMaxExpectedDuration(settings), /*min*/expectedDurationRange.first, /*max*/expectedDurationRange.second, requestedPhysicalCameras, isStillCapture, isZslCapture, captureRequest->mRotateAndCropAuto, mPrevCameraIdsWithZoom, (mUseHalBufManager) ? uniqueSurfaceIdMap : Loading
services/camera/libcameraservice/device3/Camera3Device.h +7 −4 Original line number Diff line number Diff line Loading @@ -302,7 +302,6 @@ class Camera3Device : static const nsecs_t kMinWarnInflightDuration = 5000000000; // 5 s static const size_t kInFlightWarnLimit = 30; static const size_t kInFlightWarnLimitHighSpeed = 256; // batch size 32 * pipe depth 8 static const nsecs_t kDefaultExpectedDuration = 100000000; // 100 ms static const nsecs_t kMinInflightDuration = 5000000000; // 5 s static const nsecs_t kBaseGetBufferWait = 3000000000; // 3 sec. // SCHED_FIFO priority for request submission thread in HFR mode Loading Loading @@ -956,8 +955,9 @@ class Camera3Device : // send request in mNextRequests to HAL in a batch. Return true = sucssess bool sendRequestsBatch(); // Calculate the expected maximum duration for a request nsecs_t calculateMaxExpectedDuration(const camera_metadata_t *request); // Calculate the expected (minimum, maximum) duration range for a request std::pair<nsecs_t, nsecs_t> calculateExpectedDurationRange( const camera_metadata_t *request); // Check and update latest session parameters based on the current request settings. bool updateSessionParameters(const CameraMetadata& settings); Loading Loading @@ -1072,7 +1072,7 @@ class Camera3Device : status_t registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool callback, nsecs_t maxExpectedDuration, bool callback, nsecs_t minExpectedDuration, nsecs_t maxExpectedDuration, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces, Loading Loading @@ -1323,6 +1323,9 @@ class Camera3Device : // performance class. bool mOverrideForPerfClass; // The current minimum expected frame duration based on AE_TARGET_FPS_RANGE nsecs_t mMinExpectedDuration = 0; // Injection camera related methods. class Camera3DeviceInjectionMethods : public virtual RefBase { public: Loading
services/camera/libcameraservice/device3/Camera3FakeStream.h +1 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,7 @@ class Camera3FakeStream : virtual status_t setBatchSize(size_t batchSize) override; virtual void onMinDurationChanged(nsecs_t /*duration*/) {} protected: /** Loading
services/camera/libcameraservice/device3/Camera3OfflineSession.h +3 −0 Original line number Diff line number Diff line Loading @@ -246,6 +246,9 @@ class Camera3OfflineSession : // For client methods such as disconnect/dump std::mutex mInterfaceLock; // The current minimum expected frame duration based on AE_TARGET_FPS_RANGE nsecs_t mMinExpectedDuration = 0; // SetErrorInterface void setErrorState(const char *fmt, ...) override; void setErrorStateLocked(const char *fmt, ...) override; Loading