Loading services/camera/libcameraservice/api2/CameraDeviceClient.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -379,6 +379,12 @@ binder::Status CameraDeviceClient::submitRequestList( } String8 physicalId(it.id.c_str()); bool hasTestPatternModePhysicalKey = std::find(mSupportedPhysicalRequestKeys.begin(), mSupportedPhysicalRequestKeys.end(), ANDROID_SENSOR_TEST_PATTERN_MODE) != mSupportedPhysicalRequestKeys.end(); bool hasTestPatternDataPhysicalKey = std::find(mSupportedPhysicalRequestKeys.begin(), mSupportedPhysicalRequestKeys.end(), ANDROID_SENSOR_TEST_PATTERN_DATA) != mSupportedPhysicalRequestKeys.end(); if (physicalId != mDevice->getId()) { auto found = std::find(requestedPhysicalIds.begin(), requestedPhysicalIds.end(), it.id); Loading @@ -404,7 +410,8 @@ binder::Status CameraDeviceClient::submitRequestList( } } physicalSettingsList.push_back({it.id, filteredParams}); physicalSettingsList.push_back({it.id, filteredParams, hasTestPatternModePhysicalKey, hasTestPatternDataPhysicalKey}); } } else { physicalSettingsList.push_back({it.id, it.settings}); Loading services/camera/libcameraservice/common/CameraDeviceBase.h +10 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,16 @@ class CameraDeviceBase : public virtual FrameProducer { struct PhysicalCameraSettings { std::string cameraId; CameraMetadata metadata; // Whether the physical camera supports testPatternMode/testPatternData bool mHasTestPatternModeTag = true; bool mHasTestPatternDataTag = true; // Original value of TEST_PATTERN_MODE and DATA so that they can be // restored when sensor muting is turned off int32_t mOriginalTestPatternMode = 0; int32_t mOriginalTestPatternData[4] = {}; }; typedef List<PhysicalCameraSettings> PhysicalCameraSettingsList; Loading services/camera/libcameraservice/device3/Camera3Device.cpp +60 −53 Original line number Diff line number Diff line Loading @@ -2456,22 +2456,24 @@ sp<Camera3Device::CaptureRequest> Camera3Device::createCaptureRequest( } if (mSupportCameraMute) { for (auto& settings : newRequest->mSettingsList) { auto testPatternModeEntry = newRequest->mSettingsList.begin()->metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE); newRequest->mOriginalTestPatternMode = testPatternModeEntry.count > 0 ? settings.metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE); settings.mOriginalTestPatternMode = testPatternModeEntry.count > 0 ? testPatternModeEntry.data.i32[0] : ANDROID_SENSOR_TEST_PATTERN_MODE_OFF; auto testPatternDataEntry = newRequest->mSettingsList.begin()->metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA); settings.metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA); if (testPatternDataEntry.count >= 4) { memcpy(newRequest->mOriginalTestPatternData, testPatternDataEntry.data.i32, sizeof(CaptureRequest::mOriginalTestPatternData)); memcpy(settings.mOriginalTestPatternData, testPatternDataEntry.data.i32, sizeof(PhysicalCameraSettings::mOriginalTestPatternData)); } else { newRequest->mOriginalTestPatternData[0] = 0; newRequest->mOriginalTestPatternData[1] = 0; newRequest->mOriginalTestPatternData[2] = 0; newRequest->mOriginalTestPatternData[3] = 0; settings.mOriginalTestPatternData[0] = 0; settings.mOriginalTestPatternData[1] = 0; settings.mOriginalTestPatternData[2] = 0; settings.mOriginalTestPatternData[3] = 0; } } } Loading Loading @@ -5928,14 +5930,18 @@ bool Camera3Device::RequestThread::overrideTestPattern( bool changed = false; int32_t testPatternMode = request->mOriginalTestPatternMode; // For a multi-camera, the physical cameras support the same set of // test pattern modes as the logical camera. for (auto& settings : request->mSettingsList) { CameraMetadata &metadata = settings.metadata; int32_t testPatternMode = settings.mOriginalTestPatternMode; int32_t testPatternData[4] = { request->mOriginalTestPatternData[0], request->mOriginalTestPatternData[1], request->mOriginalTestPatternData[2], request->mOriginalTestPatternData[3] settings.mOriginalTestPatternData[0], settings.mOriginalTestPatternData[1], settings.mOriginalTestPatternData[2], settings.mOriginalTestPatternData[3] }; if (mCameraMute != ANDROID_SENSOR_TEST_PATTERN_MODE_OFF) { testPatternMode = mCameraMute; testPatternData[0] = 0; Loading @@ -5944,21 +5950,21 @@ bool Camera3Device::RequestThread::overrideTestPattern( testPatternData[3] = 0; } CameraMetadata &metadata = request->mSettingsList.begin()->metadata; auto testPatternEntry = metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE); bool supportTestPatternModeKey = settings.mHasTestPatternModeTag; if (testPatternEntry.count > 0) { if (testPatternEntry.data.i32[0] != testPatternMode) { testPatternEntry.data.i32[0] = testPatternMode; changed = true; } } else { } else if (supportTestPatternModeKey) { metadata.update(ANDROID_SENSOR_TEST_PATTERN_MODE, &testPatternMode, 1); changed = true; } auto testPatternColor = metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA); bool supportTestPatternDataKey = settings.mHasTestPatternDataTag; if (testPatternColor.count >= 4) { for (size_t i = 0; i < 4; i++) { if (testPatternColor.data.i32[i] != testPatternData[i]) { Loading @@ -5966,11 +5972,12 @@ bool Camera3Device::RequestThread::overrideTestPattern( changed = true; } } } else { } else if (supportTestPatternDataKey) { metadata.update(ANDROID_SENSOR_TEST_PATTERN_DATA, testPatternData, 4); changed = true; } } return changed; } Loading services/camera/libcameraservice/device3/Camera3Device.h +0 −5 Original line number Diff line number Diff line Loading @@ -576,10 +576,6 @@ class Camera3Device : // overriding of ROTATE_AND_CROP value and adjustment of coordinates // in several other controls in both the request and the result bool mRotateAndCropAuto; // Original value of TEST_PATTERN_MODE and DATA so that they can be // restored when sensor muting is turned off int32_t mOriginalTestPatternMode; int32_t mOriginalTestPatternData[4]; // Whether this capture request has its zoom ratio set to 1.0x before // the framework overrides it for camera HAL consumption. Loading @@ -587,7 +583,6 @@ class Camera3Device : // The systemTime timestamp when the request is created. nsecs_t mRequestTimeNs; // Whether this capture request's distortion correction update has // been done. bool mDistortionCorrectionUpdated = false; Loading Loading
services/camera/libcameraservice/api2/CameraDeviceClient.cpp +8 −1 Original line number Diff line number Diff line Loading @@ -379,6 +379,12 @@ binder::Status CameraDeviceClient::submitRequestList( } String8 physicalId(it.id.c_str()); bool hasTestPatternModePhysicalKey = std::find(mSupportedPhysicalRequestKeys.begin(), mSupportedPhysicalRequestKeys.end(), ANDROID_SENSOR_TEST_PATTERN_MODE) != mSupportedPhysicalRequestKeys.end(); bool hasTestPatternDataPhysicalKey = std::find(mSupportedPhysicalRequestKeys.begin(), mSupportedPhysicalRequestKeys.end(), ANDROID_SENSOR_TEST_PATTERN_DATA) != mSupportedPhysicalRequestKeys.end(); if (physicalId != mDevice->getId()) { auto found = std::find(requestedPhysicalIds.begin(), requestedPhysicalIds.end(), it.id); Loading @@ -404,7 +410,8 @@ binder::Status CameraDeviceClient::submitRequestList( } } physicalSettingsList.push_back({it.id, filteredParams}); physicalSettingsList.push_back({it.id, filteredParams, hasTestPatternModePhysicalKey, hasTestPatternDataPhysicalKey}); } } else { physicalSettingsList.push_back({it.id, it.settings}); Loading
services/camera/libcameraservice/common/CameraDeviceBase.h +10 −0 Original line number Diff line number Diff line Loading @@ -106,6 +106,16 @@ class CameraDeviceBase : public virtual FrameProducer { struct PhysicalCameraSettings { std::string cameraId; CameraMetadata metadata; // Whether the physical camera supports testPatternMode/testPatternData bool mHasTestPatternModeTag = true; bool mHasTestPatternDataTag = true; // Original value of TEST_PATTERN_MODE and DATA so that they can be // restored when sensor muting is turned off int32_t mOriginalTestPatternMode = 0; int32_t mOriginalTestPatternData[4] = {}; }; typedef List<PhysicalCameraSettings> PhysicalCameraSettingsList; Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +60 −53 Original line number Diff line number Diff line Loading @@ -2456,22 +2456,24 @@ sp<Camera3Device::CaptureRequest> Camera3Device::createCaptureRequest( } if (mSupportCameraMute) { for (auto& settings : newRequest->mSettingsList) { auto testPatternModeEntry = newRequest->mSettingsList.begin()->metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE); newRequest->mOriginalTestPatternMode = testPatternModeEntry.count > 0 ? settings.metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE); settings.mOriginalTestPatternMode = testPatternModeEntry.count > 0 ? testPatternModeEntry.data.i32[0] : ANDROID_SENSOR_TEST_PATTERN_MODE_OFF; auto testPatternDataEntry = newRequest->mSettingsList.begin()->metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA); settings.metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA); if (testPatternDataEntry.count >= 4) { memcpy(newRequest->mOriginalTestPatternData, testPatternDataEntry.data.i32, sizeof(CaptureRequest::mOriginalTestPatternData)); memcpy(settings.mOriginalTestPatternData, testPatternDataEntry.data.i32, sizeof(PhysicalCameraSettings::mOriginalTestPatternData)); } else { newRequest->mOriginalTestPatternData[0] = 0; newRequest->mOriginalTestPatternData[1] = 0; newRequest->mOriginalTestPatternData[2] = 0; newRequest->mOriginalTestPatternData[3] = 0; settings.mOriginalTestPatternData[0] = 0; settings.mOriginalTestPatternData[1] = 0; settings.mOriginalTestPatternData[2] = 0; settings.mOriginalTestPatternData[3] = 0; } } } Loading Loading @@ -5928,14 +5930,18 @@ bool Camera3Device::RequestThread::overrideTestPattern( bool changed = false; int32_t testPatternMode = request->mOriginalTestPatternMode; // For a multi-camera, the physical cameras support the same set of // test pattern modes as the logical camera. for (auto& settings : request->mSettingsList) { CameraMetadata &metadata = settings.metadata; int32_t testPatternMode = settings.mOriginalTestPatternMode; int32_t testPatternData[4] = { request->mOriginalTestPatternData[0], request->mOriginalTestPatternData[1], request->mOriginalTestPatternData[2], request->mOriginalTestPatternData[3] settings.mOriginalTestPatternData[0], settings.mOriginalTestPatternData[1], settings.mOriginalTestPatternData[2], settings.mOriginalTestPatternData[3] }; if (mCameraMute != ANDROID_SENSOR_TEST_PATTERN_MODE_OFF) { testPatternMode = mCameraMute; testPatternData[0] = 0; Loading @@ -5944,21 +5950,21 @@ bool Camera3Device::RequestThread::overrideTestPattern( testPatternData[3] = 0; } CameraMetadata &metadata = request->mSettingsList.begin()->metadata; auto testPatternEntry = metadata.find(ANDROID_SENSOR_TEST_PATTERN_MODE); bool supportTestPatternModeKey = settings.mHasTestPatternModeTag; if (testPatternEntry.count > 0) { if (testPatternEntry.data.i32[0] != testPatternMode) { testPatternEntry.data.i32[0] = testPatternMode; changed = true; } } else { } else if (supportTestPatternModeKey) { metadata.update(ANDROID_SENSOR_TEST_PATTERN_MODE, &testPatternMode, 1); changed = true; } auto testPatternColor = metadata.find(ANDROID_SENSOR_TEST_PATTERN_DATA); bool supportTestPatternDataKey = settings.mHasTestPatternDataTag; if (testPatternColor.count >= 4) { for (size_t i = 0; i < 4; i++) { if (testPatternColor.data.i32[i] != testPatternData[i]) { Loading @@ -5966,11 +5972,12 @@ bool Camera3Device::RequestThread::overrideTestPattern( changed = true; } } } else { } else if (supportTestPatternDataKey) { metadata.update(ANDROID_SENSOR_TEST_PATTERN_DATA, testPatternData, 4); changed = true; } } return changed; } Loading
services/camera/libcameraservice/device3/Camera3Device.h +0 −5 Original line number Diff line number Diff line Loading @@ -576,10 +576,6 @@ class Camera3Device : // overriding of ROTATE_AND_CROP value and adjustment of coordinates // in several other controls in both the request and the result bool mRotateAndCropAuto; // Original value of TEST_PATTERN_MODE and DATA so that they can be // restored when sensor muting is turned off int32_t mOriginalTestPatternMode; int32_t mOriginalTestPatternData[4]; // Whether this capture request has its zoom ratio set to 1.0x before // the framework overrides it for camera HAL consumption. Loading @@ -587,7 +583,6 @@ class Camera3Device : // The systemTime timestamp when the request is created. nsecs_t mRequestTimeNs; // Whether this capture request's distortion correction update has // been done. bool mDistortionCorrectionUpdated = false; Loading