Add frame rate and sensor orientation for virtual camera
Test: atest CtsVirtualDevicesCameraTestCases
Test: atest virtual_camera_tests
Bug: 310857519
Change-Id: I0dc882f86881f5aaaa6501fdc3fd2f5d64fe2bc0
diff --git a/services/camera/virtualcamera/tests/VirtualCameraServiceTest.cc b/services/camera/virtualcamera/tests/VirtualCameraServiceTest.cc
index 38261fb..332b8ef 100644
--- a/services/camera/virtualcamera/tests/VirtualCameraServiceTest.cc
+++ b/services/camera/virtualcamera/tests/VirtualCameraServiceTest.cc
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2023 The Android Open Source Project
+ * Copyright 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -39,6 +39,7 @@
using ::aidl::android::companion::virtualcamera::BnVirtualCameraCallback;
using ::aidl::android::companion::virtualcamera::Format;
+using ::aidl::android::companion::virtualcamera::SensorOrientation;
using ::aidl::android::companion::virtualcamera::VirtualCameraConfiguration;
using ::aidl::android::hardware::camera::common::CameraDeviceStatus;
using ::aidl::android::hardware::camera::common::TorchModeStatus;
@@ -56,16 +57,21 @@
constexpr int kVgaWidth = 640;
constexpr int kVgaHeight = 480;
+constexpr int kMaxFps = 30;
constexpr char kCreateVirtualDevicePermissions[] =
"android.permission.CREATE_VIRTUAL_DEVICE";
const VirtualCameraConfiguration kEmptyVirtualCameraConfiguration;
-VirtualCameraConfiguration createConfiguration(const int width, const int height,
- const Format format) {
+VirtualCameraConfiguration createConfiguration(
+ const int width, const int height, const Format format, const int maxFps,
+ const SensorOrientation sensorOrientation) {
VirtualCameraConfiguration configuration;
- configuration.supportedStreamConfigs.push_back(
- {.width = width, .height = height, .pixelFormat = format});
+ configuration.supportedStreamConfigs.push_back({.width = width,
+ .height = height,
+ .pixelFormat = format,
+ .maxFps = maxFps});
+ configuration.sensorOrientation = sensorOrientation;
return configuration;
}
@@ -150,7 +156,8 @@
int mDevNullFd;
VirtualCameraConfiguration mVgaYUV420OnlyConfiguration =
- createConfiguration(kVgaWidth, kVgaHeight, Format::YUV_420_888);
+ createConfiguration(kVgaWidth, kVgaHeight, Format::YUV_420_888, kMaxFps,
+ SensorOrientation::ORIENTATION_0);
};
TEST_F(VirtualCameraServiceTest, RegisterCameraWithYuvInputSucceeds) {
@@ -173,7 +180,8 @@
bool aidlRet;
VirtualCameraConfiguration config =
- createConfiguration(kVgaWidth, kVgaHeight, Format::RGBA_8888);
+ createConfiguration(kVgaWidth, kVgaHeight, Format::RGBA_8888, kMaxFps,
+ SensorOrientation::ORIENTATION_0);
ASSERT_TRUE(mCameraService->registerCamera(ndkToken, config, &aidlRet).isOk());
@@ -208,7 +216,8 @@
bool aidlRet;
VirtualCameraConfiguration config =
- createConfiguration(kVgaWidth, kVgaHeight, Format::UNKNOWN);
+ createConfiguration(kVgaWidth, kVgaHeight, Format::UNKNOWN, kMaxFps,
+ SensorOrientation::ORIENTATION_0);
ASSERT_FALSE(
mCameraService->registerCamera(mNdkOwnerToken, config, &aidlRet).isOk());
@@ -219,7 +228,8 @@
TEST_F(VirtualCameraServiceTest, ConfigurationWithTooHighResFails) {
bool aidlRet;
VirtualCameraConfiguration config =
- createConfiguration(1000000, 1000000, Format::YUV_420_888);
+ createConfiguration(1000000, 1000000, Format::YUV_420_888, kMaxFps,
+ SensorOrientation::ORIENTATION_0);
ASSERT_FALSE(
mCameraService->registerCamera(mNdkOwnerToken, config, &aidlRet).isOk());
@@ -229,8 +239,8 @@
TEST_F(VirtualCameraServiceTest, ConfigurationWithUnalignedResolutionFails) {
bool aidlRet;
- VirtualCameraConfiguration config =
- createConfiguration(641, 481, Format::YUV_420_888);
+ VirtualCameraConfiguration config = createConfiguration(
+ 641, 481, Format::YUV_420_888, kMaxFps, SensorOrientation::ORIENTATION_0);
ASSERT_FALSE(
mCameraService->registerCamera(mNdkOwnerToken, config, &aidlRet).isOk());
@@ -241,7 +251,32 @@
TEST_F(VirtualCameraServiceTest, ConfigurationWithNegativeResolutionFails) {
bool aidlRet;
VirtualCameraConfiguration config =
- createConfiguration(-1, kVgaHeight, Format::YUV_420_888);
+ createConfiguration(-1, kVgaHeight, Format::YUV_420_888, kMaxFps,
+ SensorOrientation::ORIENTATION_0);
+
+ ASSERT_FALSE(
+ mCameraService->registerCamera(mNdkOwnerToken, config, &aidlRet).isOk());
+ EXPECT_FALSE(aidlRet);
+ EXPECT_THAT(getCameraIds(), IsEmpty());
+}
+
+TEST_F(VirtualCameraServiceTest, ConfigurationWithTooLowMaxFpsFails) {
+ bool aidlRet;
+ VirtualCameraConfiguration config =
+ createConfiguration(kVgaWidth, kVgaHeight, Format::YUV_420_888, 0,
+ SensorOrientation::ORIENTATION_0);
+
+ ASSERT_FALSE(
+ mCameraService->registerCamera(mNdkOwnerToken, config, &aidlRet).isOk());
+ EXPECT_FALSE(aidlRet);
+ EXPECT_THAT(getCameraIds(), IsEmpty());
+}
+
+TEST_F(VirtualCameraServiceTest, ConfigurationWithTooHighMaxFpsFails) {
+ bool aidlRet;
+ VirtualCameraConfiguration config =
+ createConfiguration(kVgaWidth, kVgaHeight, Format::YUV_420_888, 90,
+ SensorOrientation::ORIENTATION_0);
ASSERT_FALSE(
mCameraService->registerCamera(mNdkOwnerToken, config, &aidlRet).isOk());