Add method to get id of virtual camera
Also, add CtsVirtualDevicesCameraTestCases to virtualcamera
service postsubmit.
Test: atest CtsVirtualDevicesCameraTestCases
Bug: 310857519
Change-Id: I9f2e070a49bbf94694e996e4793a7997fbcb7b9e
diff --git a/services/camera/virtualcamera/TEST_MAPPING b/services/camera/virtualcamera/TEST_MAPPING
index 04b4025..10ba61a 100644
--- a/services/camera/virtualcamera/TEST_MAPPING
+++ b/services/camera/virtualcamera/TEST_MAPPING
@@ -2,6 +2,14 @@
"postsubmit": [
{
"name": "virtual_camera_tests"
+ },
+ {
+ "name": "CtsVirtualDevicesCameraTestCases",
+ "options": [
+ {
+ "exclude-annotation": "androidx.test.filters.FlakyTest"
+ }
+ ]
}
]
}
diff --git a/services/camera/virtualcamera/VirtualCameraDevice.h b/services/camera/virtualcamera/VirtualCameraDevice.h
index 0c95b7a..97d6122 100644
--- a/services/camera/virtualcamera/VirtualCameraDevice.h
+++ b/services/camera/virtualcamera/VirtualCameraDevice.h
@@ -87,6 +87,8 @@
// "device@{major}.{minor}/virtual/{numerical_id}"
std::string getCameraName() const;
+ uint32_t getCameraId() const { return mCameraId; }
+
private:
const uint32_t mCameraId;
const std::shared_ptr<
diff --git a/services/camera/virtualcamera/VirtualCameraService.cc b/services/camera/virtualcamera/VirtualCameraService.cc
index 62dc08b..68a8979 100644
--- a/services/camera/virtualcamera/VirtualCameraService.cc
+++ b/services/camera/virtualcamera/VirtualCameraService.cc
@@ -109,6 +109,27 @@
return ndk::ScopedAStatus::ok();
}
+ndk::ScopedAStatus VirtualCameraService::getCameraId(
+ const ::ndk::SpAIBinder& token, int32_t* _aidl_return) {
+ if (_aidl_return == nullptr) {
+ return ndk::ScopedAStatus::fromServiceSpecificError(
+ Status::EX_ILLEGAL_ARGUMENT);
+ }
+
+ auto camera = getCamera(token);
+ if (camera == nullptr) {
+ ALOGE(
+ "Attempt to get camera id corresponding to unknown binder token: "
+ "0x%" PRIxPTR,
+ reinterpret_cast<uintptr_t>(token.get()));
+ return ndk::ScopedAStatus::ok();
+ }
+
+ *_aidl_return = camera->getCameraId();
+
+ return ndk::ScopedAStatus::ok();
+}
+
std::shared_ptr<VirtualCameraDevice> VirtualCameraService::getCamera(
const ::ndk::SpAIBinder& token) {
if (token == nullptr) {
diff --git a/services/camera/virtualcamera/VirtualCameraService.h b/services/camera/virtualcamera/VirtualCameraService.h
index cf68c1b..b68d43a 100644
--- a/services/camera/virtualcamera/VirtualCameraService.h
+++ b/services/camera/virtualcamera/VirtualCameraService.h
@@ -47,6 +47,10 @@
ndk::ScopedAStatus unregisterCamera(const ::ndk::SpAIBinder& token) override
EXCLUDES(mLock);
+ // Returns the camera id corresponding to the binder token.
+ ndk::ScopedAStatus getCameraId(
+ const ::ndk::SpAIBinder& token, int32_t* _aidl_return) override EXCLUDES(mLock);
+
// Returns VirtualCameraDevice corresponding to binder token or nullptr if
// there's no camera asociated with the token.
std::shared_ptr<VirtualCameraDevice> getCamera(const ::ndk::SpAIBinder& token)
diff --git a/services/camera/virtualcamera/aidl/android/companion/virtualcamera/IVirtualCameraService.aidl b/services/camera/virtualcamera/aidl/android/companion/virtualcamera/IVirtualCameraService.aidl
index af8324a..bb74f5c 100644
--- a/services/camera/virtualcamera/aidl/android/companion/virtualcamera/IVirtualCameraService.aidl
+++ b/services/camera/virtualcamera/aidl/android/companion/virtualcamera/IVirtualCameraService.aidl
@@ -35,4 +35,10 @@
* be visible to the camera framework anymore.
*/
void unregisterCamera(in IBinder token);
+
+ /**
+ * Returns the camera id for a given binder token. Note that this id corresponds to the id of
+ * the camera device in the camera framework.
+ */
+ int getCameraId(in IBinder token);
}