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());