CameraITS: add query camera characteristics by ID command
Bug: 73378901
Change-Id: I834c1d1989a985220742502a290a6e435bc5dc0f
diff --git a/apps/CameraITS/pymodules/its/device.py b/apps/CameraITS/pymodules/its/device.py
index 4f35b7a..4fc5fe7 100644
--- a/apps/CameraITS/pymodules/its/device.py
+++ b/apps/CameraITS/pymodules/its/device.py
@@ -386,6 +386,26 @@
self.props = data['objValue']['cameraProperties']
return data['objValue']['cameraProperties']
+ def get_camera_properties_by_id(self, camera_id):
+ """Get the camera properties object for device with camera_id
+
+ Args:
+ camera_id: The ID string of the camera
+
+ Returns:
+ The Python dictionary object for the CameraProperties object. Empty
+ if no such device exists.
+
+ """
+ cmd = {}
+ cmd["cmdName"] = "getCameraPropertiesById"
+ cmd["cameraId"] = camera_id
+ self.sock.send(json.dumps(cmd) + "\n")
+ data,_ = self.__read_response_from_socket()
+ if data['tag'] != 'cameraProperties':
+ raise its.error.Error('Invalid command response')
+ return data['objValue']['cameraProperties']
+
def do_3a(self, regions_ae=[[0,0,1,1,1]],
regions_awb=[[0,0,1,1,1]],
regions_af=[[0,0,1,1,1]],
diff --git a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java
index 6b8e9b2..5dbbc79 100644
--- a/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java
+++ b/apps/CtsVerifier/src/com/android/cts/verifier/camera/its/ItsService.java
@@ -650,6 +650,8 @@
closeCameraDevice();
} else if ("getCameraProperties".equals(cmdObj.getString("cmdName"))) {
doGetProps();
+ } else if ("getCameraPropertiesById".equals(cmdObj.getString("cmdName"))) {
+ doGetPropsById(cmdObj);
} else if ("startSensorEvents".equals(cmdObj.getString("cmdName"))) {
doStartSensorEvents();
} else if ("getSensorEvents".equals(cmdObj.getString("cmdName"))) {
@@ -880,6 +882,34 @@
mSocketRunnableObj.sendResponse(mCameraCharacteristics);
}
+ private void doGetPropsById(JSONObject params) throws ItsException {
+ String[] devices;
+ try {
+ devices = mCameraManager.getCameraIdList();
+ if (devices == null || devices.length == 0) {
+ throw new ItsException("No camera devices");
+ }
+ } catch (CameraAccessException e) {
+ throw new ItsException("Failed to get device ID list", e);
+ }
+
+ try {
+ String cameraId = params.getString("cameraId");
+ if (Arrays.asList(devices).contains(cameraId)) {
+ CameraCharacteristics characteristics =
+ mCameraManager.getCameraCharacteristics(cameraId);
+ mSocketRunnableObj.sendResponse(characteristics);
+ } else {
+ Log.e(TAG, "Invalid camera ID: " + cameraId);
+ throw new ItsException("Invalid cameraId:" + cameraId);
+ }
+ } catch (org.json.JSONException e) {
+ throw new ItsException("JSON error: ", e);
+ } catch (CameraAccessException e) {
+ throw new ItsException("Access error: ", e);
+ }
+ }
+
private void doGetCameraIds() throws ItsException {
String[] devices;
try {