summaryrefslogtreecommitdiff
path: root/test/v4l2_subdevice/test_formats.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/v4l2_subdevice/test_formats.cpp')
-rw-r--r--test/v4l2_subdevice/test_formats.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/test/v4l2_subdevice/test_formats.cpp b/test/v4l2_subdevice/test_formats.cpp
new file mode 100644
index 00000000..af954459
--- /dev/null
+++ b/test/v4l2_subdevice/test_formats.cpp
@@ -0,0 +1,78 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * Copyright (C) 2019, Google Inc.
+ *
+ * libcamera V4L2 Subdevice format handling test
+ */
+
+#include <climits>
+#include <iostream>
+
+#include "v4l2_subdevice.h"
+#include "v4l2_subdevice_test.h"
+
+using namespace std;
+using namespace libcamera;
+
+/* Test format handling on the "Scaler" subdevice of vimc media device. */
+
+class FormatHandlingTest : public V4L2SubdeviceTest
+{
+protected:
+ int run() override;
+};
+
+int FormatHandlingTest::run()
+{
+ V4L2SubdeviceFormat format = {};
+
+ /*
+ * Get format on a non-existing Scaler pad: expect failure.
+ */
+ int ret = scaler_->getFormat(2, &format);
+ if (!ret) {
+ cerr << "Getting format on a non existing pad should fail" << endl;
+ return TestFail;
+ }
+
+ ret = scaler_->getFormat(0, &format);
+ if (ret) {
+ cerr << "Failed to get format" << endl;
+ return TestFail;
+ }
+
+ /*
+ * Set unrealistic image resolutions and make sure it gets updated.
+ */
+ format.width = UINT_MAX;
+ format.height = UINT_MAX;
+ ret = scaler_->setFormat(0, &format);
+ if (ret) {
+ cerr << "Failed to set format: image resolution is wrong, but "
+ << "setFormat() should not fail." << endl;
+ return TestFail;
+ }
+
+ if (format.width == UINT_MAX || format.height == UINT_MAX) {
+ cerr << "Failed to update image format" << endl;
+ return TestFail;
+ }
+
+ format.width = 0;
+ format.height = 0;
+ ret = scaler_->setFormat(0, &format);
+ if (ret) {
+ cerr << "Failed to set format: image resolution is wrong, but "
+ << "setFormat() should not fail." << endl;
+ return TestFail;
+ }
+
+ if (format.width == 0 || format.height == 0) {
+ cerr << "Failed to update image format" << endl;
+ return TestFail;
+ }
+
+ return TestPass;
+}
+
+TEST_REGISTER(FormatHandlingTest);