summaryrefslogtreecommitdiff
path: root/src/cam/options.h
AgeCommit message (Expand)Author
2020-10-23libcamera: Declare empty virtual destructors as defaultedLaurent Pinchart
2020-05-01cam: options: Add public method to invalidate optionsNiklas Söderlund
2020-05-01cam: options: Make KeyValueParser::parse() virtualNiklas Söderlund
2019-03-27cam: Separate options valid() and empty()Laurent Pinchart
2019-03-27cam: options: Add support for repeatable optionsNiklas Söderlund
2019-03-27cam: options: Add an array data type to OptionValueNiklas Söderlund
2019-03-25cam: options: Create separate enum for OptionValue typesNiklas Söderlund
2019-02-13cam: options: Fix coding style issue related to templatesLaurent Pinchart
2019-02-01cam: options: Add explicit conversion methods to OptionValueLaurent Pinchart
2019-02-01cam: options: Add a key=value parserNiklas Söderlund
2019-02-01cam: options: Add option type handling to options parserLaurent Pinchart
2019-02-01cam: options: Store options in a list instead of a vectorLaurent Pinchart
2019-02-01cam: options: Return whether addOption() succeeds or notNiklas Söderlund
2019-02-01cam: options: Create a template class for optionsNiklas Söderlund
2019-02-01cam: options: Move struct OptionLaurent Pinchart
2019-02-01cam: options: Move enum OptionArgumentNiklas Söderlund
2019-01-22cam: options: Don't implement move semantics for OptionsParser::OptionsLaurent Pinchart
2019-01-22cam: Extract option parser to separate fileLaurent Pinchart
t">, 34, 55, 89 }; const std::vector<StreamRole> ROLES = { Raw, StillCapture, VideoRecording, Viewfinder }; class SingleStream : public testing::TestWithParam<std::tuple<StreamRole, int>> { public: static std::string nameParameters(const testing::TestParamInfo<SingleStream::ParamType> &info); protected: void SetUp() override; void TearDown() override; std::shared_ptr<Camera> camera_; }; /* * We use gtest's SetUp() and TearDown() instead of constructor and destructor * in order to be able to assert on them. */ void SingleStream::SetUp() { Environment *env = Environment::get(); camera_ = env->cm()->get(env->cameraId()); ASSERT_EQ(camera_->acquire(), 0); } void SingleStream::TearDown() { if (!camera_) return; camera_->release(); camera_.reset(); } std::string SingleStream::nameParameters(const testing::TestParamInfo<SingleStream::ParamType> &info) { std::map<StreamRole, std::string> rolesMap = { { Raw, "Raw" }, { StillCapture, "StillCapture" }, { VideoRecording, "VideoRecording" }, { Viewfinder, "Viewfinder" } }; std::string roleName = rolesMap[std::get<0>(info.param)]; std::string numRequestsName = std::to_string(std::get<1>(info.param)); return roleName + "_" + numRequestsName; } /* * Test single capture cycles * * Makes sure the camera completes the exact number of requests queued. Example * failure is a camera that completes less requests than the number of requests * queued. */ TEST_P(SingleStream, Capture) { auto [role, numRequests] = GetParam(); SimpleCaptureBalanced capture(camera_); capture.configure(role); capture.capture(numRequests); } /* * Test multiple start/stop cycles * * Makes sure the camera supports multiple start/stop cycles. Example failure is * a camera that does not clean up correctly in its error path but is only * tested by single-capture applications. */ TEST_P(SingleStream, CaptureStartStop) { auto [role, numRequests] = GetParam(); unsigned int numRepeats = 3; SimpleCaptureBalanced capture(camera_); capture.configure(role); for (unsigned int starts = 0; starts < numRepeats; starts++) capture.capture(numRequests); } /* * Test unbalanced stop * * Makes sure the camera supports a stop with requests queued. Example failure * is a camera that does not handle cancelation of buffers coming back from the * video device while stopping. */ TEST_P(SingleStream, UnbalancedStop) { auto [role, numRequests] = GetParam(); SimpleCaptureUnbalanced capture(camera_); capture.configure(role); capture.capture(numRequests); } INSTANTIATE_TEST_SUITE_P(CaptureTests, SingleStream, testing::Combine(testing::ValuesIn(ROLES), testing::ValuesIn(NUMREQUESTS)), SingleStream::nameParameters);