Allow to specify list of supported input configurations.

... and populate corresponding metadata entries / perform
validation based on these.

Bug: 301023410
Test: atest virtual_camera_tests
Change-Id: I66f3cf2b013d5845b6fa7429294a1ed2157318f8
diff --git a/services/camera/virtualcamera/VirtualCameraSession.cc b/services/camera/virtualcamera/VirtualCameraSession.cc
index 55678b7..ff6235f 100644
--- a/services/camera/virtualcamera/VirtualCameraSession.cc
+++ b/services/camera/virtualcamera/VirtualCameraSession.cc
@@ -34,6 +34,7 @@
 
 #include "CameraMetadata.h"
 #include "EGL/egl.h"
+#include "VirtualCameraDevice.h"
 #include "VirtualCameraRenderThread.h"
 #include "VirtualCameraStream.h"
 #include "aidl/android/hardware/camera/common/Status.h"
@@ -152,10 +153,10 @@
 }  // namespace
 
 VirtualCameraSession::VirtualCameraSession(
-    const std::string& cameraId,
+    VirtualCameraDevice& cameraDevice,
     std::shared_ptr<ICameraDeviceCallback> cameraDeviceCallback,
     std::shared_ptr<IVirtualCameraCallback> virtualCameraClientCallback)
-    : mCameraId(cameraId),
+    : mCameraDevice(cameraDevice),
       mCameraDeviceCallback(cameraDeviceCallback),
       mVirtualCameraClientCallback(virtualCameraClientCallback) {
   mRequestMetadataQueue = std::make_unique<RequestMetadataQueue>(
@@ -204,18 +205,14 @@
   int inputWidth;
   int inputHeight;
 
+  if (!mCameraDevice.isStreamCombinationSupported(in_requestedConfiguration)) {
+    ALOGE("%s: Requested stream configuration is not supported", __func__);
+    return cameraStatus(Status::ILLEGAL_ARGUMENT);
+  }
+
   {
     std::lock_guard<std::mutex> lock(mLock);
     for (int i = 0; i < in_requestedConfiguration.streams.size(); ++i) {
-      // TODO(b/301023410) remove hardcoded format checks, verify against configuration.
-      if (streams[i].width != 640 || streams[i].height != 480 ||
-          streams[i].rotation != StreamRotation::ROTATION_0 ||
-          (streams[i].format != PixelFormat::IMPLEMENTATION_DEFINED &&
-           streams[i].format != PixelFormat::YCBCR_420_888 &&
-           streams[i].format != PixelFormat::BLOB)) {
-        halStreams.clear();
-        return cameraStatus(Status::ILLEGAL_ARGUMENT);
-      }
       halStreams[i] = getHalStream(streams[i]);
       if (mSessionContext.initializeStream(streams[i])) {
         ALOGV("Configured new stream: %s", streams[i].toString().c_str());