Pick largest resolution for input surface
... instead of the first one.
Bug: 301023410
Test: atest virtual_camera_tests
Change-Id: I74daf1e78e10ee30dc710a2461e1c6eaffcf8577
diff --git a/services/camera/virtualcamera/VirtualCameraSession.cc b/services/camera/virtualcamera/VirtualCameraSession.cc
index 47780d8..03d63b8 100644
--- a/services/camera/virtualcamera/VirtualCameraSession.cc
+++ b/services/camera/virtualcamera/VirtualCameraSession.cc
@@ -18,6 +18,7 @@
#define LOG_TAG "VirtualCameraSession"
#include "VirtualCameraSession.h"
+#include <algorithm>
#include <atomic>
#include <chrono>
#include <cstddef>
@@ -150,6 +151,13 @@
return halStream;
}
+Stream getHighestResolutionStream(const std::vector<Stream>& streams) {
+ return *(std::max_element(streams.begin(), streams.end(),
+ [](const Stream& a, const Stream& b) {
+ return a.width * a.height < b.width * b.height;
+ }));
+}
+
} // namespace
VirtualCameraSession::VirtualCameraSession(
@@ -233,8 +241,9 @@
}
}
- inputWidth = streams[0].width;
- inputHeight = streams[0].height;
+ Stream maxResStream = getHighestResolutionStream(streams);
+ inputWidth = maxResStream.width;
+ inputHeight = maxResStream.height;
if (mRenderThread == nullptr) {
// If there's no client callback, start camera in test mode.
const bool testMode = mVirtualCameraClientCallback == nullptr;