Loading services/camera/libcameraservice/common/FrameProcessorBase.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -89,12 +89,27 @@ void FrameProcessorBase::dump(int fd, const Vector<String16>& /*args*/) { write(fd, result.string(), result.size()); CameraMetadata lastFrame; std::map<std::string, CameraMetadata> lastPhysicalFrames; { // Don't race while dumping metadata Mutex::Autolock al(mLastFrameMutex); lastFrame = CameraMetadata(mLastFrame); for (const auto& physicalFrame : mLastPhysicalFrames) { lastPhysicalFrames.emplace(String8(physicalFrame.mPhysicalCameraId), physicalFrame.mPhysicalCameraMetadata); } } lastFrame.dump(fd, /*verbosity*/2, /*indentation*/6); for (const auto& physicalFrame : lastPhysicalFrames) { result = String8::format(" Latest received frame for physical camera %s:\n", physicalFrame.first.c_str()); write(fd, result.string(), result.size()); CameraMetadata lastPhysicalMetadata = CameraMetadata(physicalFrame.second); lastPhysicalMetadata.sort(); lastPhysicalMetadata.dump(fd, /*verbosity*/2, /*indentation*/6); } lastFrame.dump(fd, 2, 6); } bool FrameProcessorBase::threadLoop() { Loading Loading @@ -145,6 +160,8 @@ void FrameProcessorBase::processNewFrames(const sp<CameraDeviceBase> &device) { if (!result.mMetadata.isEmpty()) { Mutex::Autolock al(mLastFrameMutex); mLastFrame.acquire(result.mMetadata); mLastPhysicalFrames = std::move(result.mPhysicalMetadatas); } } if (res != NOT_ENOUGH_DATA) { Loading services/camera/libcameraservice/common/FrameProcessorBase.h +2 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ class FrameProcessorBase: public Thread { const sp<CameraDeviceBase> &device); CameraMetadata mLastFrame; std::vector<PhysicalCaptureResultInfo> mLastPhysicalFrames; }; Loading services/camera/libcameraservice/device3/Camera3Device.cpp +60 −52 Original line number Diff line number Diff line Loading @@ -1306,7 +1306,7 @@ status_t Camera3Device::readOneCameraMetadataLocked( void Camera3Device::processOneCaptureResultLocked( const hardware::camera::device::V3_2::CaptureResult& result, const hardware::hidl_vec< hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadatas) { hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadata) { camera3_capture_result r; status_t res; r.frame_number = result.frameNumber; Loading @@ -1322,21 +1322,21 @@ void Camera3Device::processOneCaptureResultLocked( r.result = reinterpret_cast<const camera_metadata_t*>(resultMetadata.data()); // Read and validate physical camera metadata size_t physResultCount = physicalCameraMetadatas.size(); size_t physResultCount = physicalCameraMetadata.size(); std::vector<const char*> physCamIds(physResultCount); std::vector<const camera_metadata_t *> phyCamMetadatas(physResultCount); std::vector<hardware::camera::device::V3_2::CameraMetadata> physResultMetadata; physResultMetadata.resize(physResultCount); for (size_t i = 0; i < physicalCameraMetadatas.size(); i++) { res = readOneCameraMetadataLocked(physicalCameraMetadatas[i].fmqMetadataSize, physResultMetadata[i], physicalCameraMetadatas[i].metadata); for (size_t i = 0; i < physicalCameraMetadata.size(); i++) { res = readOneCameraMetadataLocked(physicalCameraMetadata[i].fmqMetadataSize, physResultMetadata[i], physicalCameraMetadata[i].metadata); if (res != OK) { ALOGE("%s: Frame %d: Failed to read capture result metadata for camera %s", __FUNCTION__, result.frameNumber, physicalCameraMetadatas[i].physicalCameraId.c_str()); physicalCameraMetadata[i].physicalCameraId.c_str()); return; } physCamIds[i] = physicalCameraMetadatas[i].physicalCameraId.c_str(); physCamIds[i] = physicalCameraMetadata[i].physicalCameraId.c_str(); phyCamMetadatas[i] = reinterpret_cast<const camera_metadata_t*>( physResultMetadata[i].data()); } Loading Loading @@ -3419,6 +3419,14 @@ void Camera3Device::insertResultLocked(CaptureResult *result, return; } // Update vendor tag id for physical metadata for (auto& physicalMetadata : result->mPhysicalMetadatas) { camera_metadata_t *pmeta = const_cast<camera_metadata_t *>( physicalMetadata.mPhysicalCameraMetadata.getAndLock()); set_camera_metadata_vendor_id(pmeta, mVendorTagId); physicalMetadata.mPhysicalCameraMetadata.unlock(pmeta); } // Valid result, insert into queue List<CaptureResult>::iterator queuedResult = mResultQueue.insert(mResultQueue.end(), CaptureResult(*result)); Loading Loading @@ -3550,8 +3558,14 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata, } } std::unordered_map<std::string, CameraMetadata> monitoredPhysicalMetadata; for (auto& m : physicalMetadatas) { monitoredPhysicalMetadata.emplace(String8(m.mPhysicalCameraId).string(), CameraMetadata(m.mPhysicalCameraMetadata)); } mTagMonitor.monitorMetadata(TagMonitor::RESULT, frameNumber, timestamp.data.i64[0], captureResult.mMetadata); frameNumber, timestamp.data.i64[0], captureResult.mMetadata, monitoredPhysicalMetadata); insertResultLocked(&captureResult, frameNumber); } Loading Loading @@ -3965,8 +3979,11 @@ CameraMetadata Camera3Device::getLatestRequestLocked() { void Camera3Device::monitorMetadata(TagMonitor::eventSource source, int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata) { mTagMonitor.monitorMetadata(source, frameNumber, timestamp, metadata); int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata, const std::unordered_map<std::string, CameraMetadata>& physicalMetadata) { mTagMonitor.monitorMetadata(source, frameNumber, timestamp, metadata, physicalMetadata); } /** Loading Loading @@ -5122,28 +5139,7 @@ bool Camera3Device::RequestThread::sendRequestsBatch() { NextRequest& nextRequest = mNextRequests.editItemAt(i); nextRequest.submitted = true; // Update the latest request sent to HAL if (nextRequest.halRequest.settings != NULL) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); camera_metadata_t* cloned = clone_camera_metadata(nextRequest.halRequest.settings); mLatestRequest.acquire(cloned); sp<Camera3Device> parent = mParent.promote(); if (parent != NULL) { parent->monitorMetadata(TagMonitor::REQUEST, nextRequest.halRequest.frame_number, 0, mLatestRequest); } } if (nextRequest.halRequest.settings != NULL) { nextRequest.captureRequest->mSettingsList.begin()->metadata.unlock( nextRequest.halRequest.settings); } cleanupPhysicalSettings(nextRequest.captureRequest, &nextRequest.halRequest); updateNextRequest(nextRequest); if (!triggerRemoveFailed) { // Remove any previously queued triggers (after unlock) Loading Loading @@ -5198,26 +5194,7 @@ bool Camera3Device::RequestThread::sendRequestsOneByOne() { // Mark that the request has be submitted successfully. nextRequest.submitted = true; // Update the latest request sent to HAL if (nextRequest.halRequest.settings != NULL) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); camera_metadata_t* cloned = clone_camera_metadata(nextRequest.halRequest.settings); mLatestRequest.acquire(cloned); sp<Camera3Device> parent = mParent.promote(); if (parent != NULL) { parent->monitorMetadata(TagMonitor::REQUEST, nextRequest.halRequest.frame_number, 0, mLatestRequest); } } if (nextRequest.halRequest.settings != NULL) { nextRequest.captureRequest->mSettingsList.begin()->metadata.unlock( nextRequest.halRequest.settings); } cleanupPhysicalSettings(nextRequest.captureRequest, &nextRequest.halRequest); updateNextRequest(nextRequest); // Remove any previously queued triggers (after unlock) res = removeTriggers(mPrevRequest); Loading Loading @@ -5279,6 +5256,37 @@ bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag, return false; } void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) { // Update the latest request sent to HAL if (nextRequest.halRequest.settings != NULL) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); camera_metadata_t* cloned = clone_camera_metadata(nextRequest.halRequest.settings); mLatestRequest.acquire(cloned); mLatestPhysicalRequest.clear(); for (uint32_t i = 0; i < nextRequest.halRequest.num_physcam_settings; i++) { cloned = clone_camera_metadata(nextRequest.halRequest.physcam_settings[i]); mLatestPhysicalRequest.emplace(nextRequest.halRequest.physcam_id[i], CameraMetadata(cloned)); } sp<Camera3Device> parent = mParent.promote(); if (parent != NULL) { parent->monitorMetadata(TagMonitor::REQUEST, nextRequest.halRequest.frame_number, 0, mLatestRequest, mLatestPhysicalRequest); } } if (nextRequest.halRequest.settings != NULL) { nextRequest.captureRequest->mSettingsList.begin()->metadata.unlock( nextRequest.halRequest.settings); } cleanupPhysicalSettings(nextRequest.captureRequest, &nextRequest.halRequest); } bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata& settings) { ATRACE_CALL(); bool updatesDetected = false; Loading services/camera/libcameraservice/device3/Camera3Device.h +6 −4 Original line number Diff line number Diff line Loading @@ -556,7 +556,7 @@ class Camera3Device : void processOneCaptureResultLocked( const hardware::camera::device::V3_2::CaptureResult& result, const hardware::hidl_vec< hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadatas); hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadata); status_t readOneCameraMetadataLocked(uint64_t fmqResultSize, hardware::camera::device::V3_2::CameraMetadata& resultMetadata, const hardware::camera::device::V3_2::CameraMetadata& result); Loading Loading @@ -912,8 +912,8 @@ class Camera3Device : bool skipHFRTargetFPSUpdate(int32_t tag, const camera_metadata_ro_entry_t& newEntry, const camera_metadata_entry_t& currentEntry); // Re-configure camera using the latest session parameters. bool reconfigureCamera(); // Update next request sent to HAL void updateNextRequest(NextRequest& nextRequest); wp<Camera3Device> mParent; wp<camera3::StatusTracker> mStatusTracker; Loading Loading @@ -957,6 +957,7 @@ class Camera3Device : // android.request.id for latest process_capture_request int32_t mLatestRequestId; CameraMetadata mLatestRequest; std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest; typedef KeyedVector<uint32_t/*tag*/, RequestTrigger> TriggerMap; Mutex mTriggerMutex; Loading Loading @@ -1265,7 +1266,8 @@ class Camera3Device : TagMonitor mTagMonitor; void monitorMetadata(TagMonitor::eventSource source, int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata); nsecs_t timestamp, const CameraMetadata& metadata, const std::unordered_map<std::string, CameraMetadata>& physicalMetadata); metadata_vendor_id_t mVendorTagId; Loading services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,9 @@ void Camera3IOStreamBase::dump(int fd, const Vector<String16> &args) const { lines.appendFormat(" Max size: %zu\n", mMaxSize); lines.appendFormat(" Combined usage: %" PRIu64 ", max HAL buffers: %d\n", mUsage | consumerUsage, camera3_stream::max_buffers); if (strlen(camera3_stream::physical_camera_id) > 0) { lines.appendFormat(" Physical camera id: %s\n", camera3_stream::physical_camera_id); } lines.appendFormat(" Frames produced: %d, last timestamp: %" PRId64 " ns\n", mFrameCount, mLastTimestamp); lines.appendFormat(" Total buffers: %zu, currently dequeued: %zu\n", Loading Loading
services/camera/libcameraservice/common/FrameProcessorBase.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -89,12 +89,27 @@ void FrameProcessorBase::dump(int fd, const Vector<String16>& /*args*/) { write(fd, result.string(), result.size()); CameraMetadata lastFrame; std::map<std::string, CameraMetadata> lastPhysicalFrames; { // Don't race while dumping metadata Mutex::Autolock al(mLastFrameMutex); lastFrame = CameraMetadata(mLastFrame); for (const auto& physicalFrame : mLastPhysicalFrames) { lastPhysicalFrames.emplace(String8(physicalFrame.mPhysicalCameraId), physicalFrame.mPhysicalCameraMetadata); } } lastFrame.dump(fd, /*verbosity*/2, /*indentation*/6); for (const auto& physicalFrame : lastPhysicalFrames) { result = String8::format(" Latest received frame for physical camera %s:\n", physicalFrame.first.c_str()); write(fd, result.string(), result.size()); CameraMetadata lastPhysicalMetadata = CameraMetadata(physicalFrame.second); lastPhysicalMetadata.sort(); lastPhysicalMetadata.dump(fd, /*verbosity*/2, /*indentation*/6); } lastFrame.dump(fd, 2, 6); } bool FrameProcessorBase::threadLoop() { Loading Loading @@ -145,6 +160,8 @@ void FrameProcessorBase::processNewFrames(const sp<CameraDeviceBase> &device) { if (!result.mMetadata.isEmpty()) { Mutex::Autolock al(mLastFrameMutex); mLastFrame.acquire(result.mMetadata); mLastPhysicalFrames = std::move(result.mPhysicalMetadatas); } } if (res != NOT_ENOUGH_DATA) { Loading
services/camera/libcameraservice/common/FrameProcessorBase.h +2 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ class FrameProcessorBase: public Thread { const sp<CameraDeviceBase> &device); CameraMetadata mLastFrame; std::vector<PhysicalCaptureResultInfo> mLastPhysicalFrames; }; Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +60 −52 Original line number Diff line number Diff line Loading @@ -1306,7 +1306,7 @@ status_t Camera3Device::readOneCameraMetadataLocked( void Camera3Device::processOneCaptureResultLocked( const hardware::camera::device::V3_2::CaptureResult& result, const hardware::hidl_vec< hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadatas) { hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadata) { camera3_capture_result r; status_t res; r.frame_number = result.frameNumber; Loading @@ -1322,21 +1322,21 @@ void Camera3Device::processOneCaptureResultLocked( r.result = reinterpret_cast<const camera_metadata_t*>(resultMetadata.data()); // Read and validate physical camera metadata size_t physResultCount = physicalCameraMetadatas.size(); size_t physResultCount = physicalCameraMetadata.size(); std::vector<const char*> physCamIds(physResultCount); std::vector<const camera_metadata_t *> phyCamMetadatas(physResultCount); std::vector<hardware::camera::device::V3_2::CameraMetadata> physResultMetadata; physResultMetadata.resize(physResultCount); for (size_t i = 0; i < physicalCameraMetadatas.size(); i++) { res = readOneCameraMetadataLocked(physicalCameraMetadatas[i].fmqMetadataSize, physResultMetadata[i], physicalCameraMetadatas[i].metadata); for (size_t i = 0; i < physicalCameraMetadata.size(); i++) { res = readOneCameraMetadataLocked(physicalCameraMetadata[i].fmqMetadataSize, physResultMetadata[i], physicalCameraMetadata[i].metadata); if (res != OK) { ALOGE("%s: Frame %d: Failed to read capture result metadata for camera %s", __FUNCTION__, result.frameNumber, physicalCameraMetadatas[i].physicalCameraId.c_str()); physicalCameraMetadata[i].physicalCameraId.c_str()); return; } physCamIds[i] = physicalCameraMetadatas[i].physicalCameraId.c_str(); physCamIds[i] = physicalCameraMetadata[i].physicalCameraId.c_str(); phyCamMetadatas[i] = reinterpret_cast<const camera_metadata_t*>( physResultMetadata[i].data()); } Loading Loading @@ -3419,6 +3419,14 @@ void Camera3Device::insertResultLocked(CaptureResult *result, return; } // Update vendor tag id for physical metadata for (auto& physicalMetadata : result->mPhysicalMetadatas) { camera_metadata_t *pmeta = const_cast<camera_metadata_t *>( physicalMetadata.mPhysicalCameraMetadata.getAndLock()); set_camera_metadata_vendor_id(pmeta, mVendorTagId); physicalMetadata.mPhysicalCameraMetadata.unlock(pmeta); } // Valid result, insert into queue List<CaptureResult>::iterator queuedResult = mResultQueue.insert(mResultQueue.end(), CaptureResult(*result)); Loading Loading @@ -3550,8 +3558,14 @@ void Camera3Device::sendCaptureResult(CameraMetadata &pendingMetadata, } } std::unordered_map<std::string, CameraMetadata> monitoredPhysicalMetadata; for (auto& m : physicalMetadatas) { monitoredPhysicalMetadata.emplace(String8(m.mPhysicalCameraId).string(), CameraMetadata(m.mPhysicalCameraMetadata)); } mTagMonitor.monitorMetadata(TagMonitor::RESULT, frameNumber, timestamp.data.i64[0], captureResult.mMetadata); frameNumber, timestamp.data.i64[0], captureResult.mMetadata, monitoredPhysicalMetadata); insertResultLocked(&captureResult, frameNumber); } Loading Loading @@ -3965,8 +3979,11 @@ CameraMetadata Camera3Device::getLatestRequestLocked() { void Camera3Device::monitorMetadata(TagMonitor::eventSource source, int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata) { mTagMonitor.monitorMetadata(source, frameNumber, timestamp, metadata); int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata, const std::unordered_map<std::string, CameraMetadata>& physicalMetadata) { mTagMonitor.monitorMetadata(source, frameNumber, timestamp, metadata, physicalMetadata); } /** Loading Loading @@ -5122,28 +5139,7 @@ bool Camera3Device::RequestThread::sendRequestsBatch() { NextRequest& nextRequest = mNextRequests.editItemAt(i); nextRequest.submitted = true; // Update the latest request sent to HAL if (nextRequest.halRequest.settings != NULL) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); camera_metadata_t* cloned = clone_camera_metadata(nextRequest.halRequest.settings); mLatestRequest.acquire(cloned); sp<Camera3Device> parent = mParent.promote(); if (parent != NULL) { parent->monitorMetadata(TagMonitor::REQUEST, nextRequest.halRequest.frame_number, 0, mLatestRequest); } } if (nextRequest.halRequest.settings != NULL) { nextRequest.captureRequest->mSettingsList.begin()->metadata.unlock( nextRequest.halRequest.settings); } cleanupPhysicalSettings(nextRequest.captureRequest, &nextRequest.halRequest); updateNextRequest(nextRequest); if (!triggerRemoveFailed) { // Remove any previously queued triggers (after unlock) Loading Loading @@ -5198,26 +5194,7 @@ bool Camera3Device::RequestThread::sendRequestsOneByOne() { // Mark that the request has be submitted successfully. nextRequest.submitted = true; // Update the latest request sent to HAL if (nextRequest.halRequest.settings != NULL) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); camera_metadata_t* cloned = clone_camera_metadata(nextRequest.halRequest.settings); mLatestRequest.acquire(cloned); sp<Camera3Device> parent = mParent.promote(); if (parent != NULL) { parent->monitorMetadata(TagMonitor::REQUEST, nextRequest.halRequest.frame_number, 0, mLatestRequest); } } if (nextRequest.halRequest.settings != NULL) { nextRequest.captureRequest->mSettingsList.begin()->metadata.unlock( nextRequest.halRequest.settings); } cleanupPhysicalSettings(nextRequest.captureRequest, &nextRequest.halRequest); updateNextRequest(nextRequest); // Remove any previously queued triggers (after unlock) res = removeTriggers(mPrevRequest); Loading Loading @@ -5279,6 +5256,37 @@ bool Camera3Device::RequestThread::skipHFRTargetFPSUpdate(int32_t tag, return false; } void Camera3Device::RequestThread::updateNextRequest(NextRequest& nextRequest) { // Update the latest request sent to HAL if (nextRequest.halRequest.settings != NULL) { // Don't update if they were unchanged Mutex::Autolock al(mLatestRequestMutex); camera_metadata_t* cloned = clone_camera_metadata(nextRequest.halRequest.settings); mLatestRequest.acquire(cloned); mLatestPhysicalRequest.clear(); for (uint32_t i = 0; i < nextRequest.halRequest.num_physcam_settings; i++) { cloned = clone_camera_metadata(nextRequest.halRequest.physcam_settings[i]); mLatestPhysicalRequest.emplace(nextRequest.halRequest.physcam_id[i], CameraMetadata(cloned)); } sp<Camera3Device> parent = mParent.promote(); if (parent != NULL) { parent->monitorMetadata(TagMonitor::REQUEST, nextRequest.halRequest.frame_number, 0, mLatestRequest, mLatestPhysicalRequest); } } if (nextRequest.halRequest.settings != NULL) { nextRequest.captureRequest->mSettingsList.begin()->metadata.unlock( nextRequest.halRequest.settings); } cleanupPhysicalSettings(nextRequest.captureRequest, &nextRequest.halRequest); } bool Camera3Device::RequestThread::updateSessionParameters(const CameraMetadata& settings) { ATRACE_CALL(); bool updatesDetected = false; Loading
services/camera/libcameraservice/device3/Camera3Device.h +6 −4 Original line number Diff line number Diff line Loading @@ -556,7 +556,7 @@ class Camera3Device : void processOneCaptureResultLocked( const hardware::camera::device::V3_2::CaptureResult& result, const hardware::hidl_vec< hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadatas); hardware::camera::device::V3_4::PhysicalCameraMetadata> physicalCameraMetadata); status_t readOneCameraMetadataLocked(uint64_t fmqResultSize, hardware::camera::device::V3_2::CameraMetadata& resultMetadata, const hardware::camera::device::V3_2::CameraMetadata& result); Loading Loading @@ -912,8 +912,8 @@ class Camera3Device : bool skipHFRTargetFPSUpdate(int32_t tag, const camera_metadata_ro_entry_t& newEntry, const camera_metadata_entry_t& currentEntry); // Re-configure camera using the latest session parameters. bool reconfigureCamera(); // Update next request sent to HAL void updateNextRequest(NextRequest& nextRequest); wp<Camera3Device> mParent; wp<camera3::StatusTracker> mStatusTracker; Loading Loading @@ -957,6 +957,7 @@ class Camera3Device : // android.request.id for latest process_capture_request int32_t mLatestRequestId; CameraMetadata mLatestRequest; std::unordered_map<std::string, CameraMetadata> mLatestPhysicalRequest; typedef KeyedVector<uint32_t/*tag*/, RequestTrigger> TriggerMap; Mutex mTriggerMutex; Loading Loading @@ -1265,7 +1266,8 @@ class Camera3Device : TagMonitor mTagMonitor; void monitorMetadata(TagMonitor::eventSource source, int64_t frameNumber, nsecs_t timestamp, const CameraMetadata& metadata); nsecs_t timestamp, const CameraMetadata& metadata, const std::unordered_map<std::string, CameraMetadata>& physicalMetadata); metadata_vendor_id_t mVendorTagId; Loading
services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,9 @@ void Camera3IOStreamBase::dump(int fd, const Vector<String16> &args) const { lines.appendFormat(" Max size: %zu\n", mMaxSize); lines.appendFormat(" Combined usage: %" PRIu64 ", max HAL buffers: %d\n", mUsage | consumerUsage, camera3_stream::max_buffers); if (strlen(camera3_stream::physical_camera_id) > 0) { lines.appendFormat(" Physical camera id: %s\n", camera3_stream::physical_camera_id); } lines.appendFormat(" Frames produced: %d, last timestamp: %" PRId64 " ns\n", mFrameCount, mLastTimestamp); lines.appendFormat(" Total buffers: %zu, currently dequeued: %zu\n", Loading