summaryrefslogtreecommitdiff
path: root/test/v4l2_subdevice
AgeCommit message (Expand)Author
2021-10-15test: Remove using namespace in header filesHirokazu Honda
2021-07-11libcamera: buffer: Rename buffer.h to framebuffer.hLaurent Pinchart
2021-06-25libcamera/base: Validate internal headers as privateKieran Bingham
2021-06-25libcamera/base: Move utils to the base libraryKieran Bingham
2021-02-11meson: Fix coding style when declaring arraysLaurent Pinchart
2020-10-20test: Omit extra semicolonsHirokazu Honda
2020-07-23libcamera: v4l2_subdevice: Replace ImageFormats with a mapNiklas Söderlund
2020-07-08libcamera: Use Size::isNull()Laurent Pinchart
2020-06-08test: v4l2_subdevice: list_formats: Port to use utils::hex() output helperUmang Jain
2020-05-16libcamera: Move internal headers to include/libcamera/internal/Laurent Pinchart
2020-05-13licenses: License all meson files under CC0-1.0Laurent Pinchart
2019-11-08libcamera: Remove unneeded semicolonsLaurent Pinchart
2019-10-23libcamera: Standardise on C compatibility headersLaurent Pinchart
2019-06-19libcamera: v4l2_subdevice: Replace FormatEnum with ImageFormatsNiklas Söderlund
2019-05-25tests: list_formats: Fix argument names and add constNiklas Söderlund
2019-05-23meson: Create and use a dependency for libcamera and its headersLaurent Pinchart
2019-05-23meson: Fix coding style in meson.build filesLaurent Pinchart
2019-05-17libcamera: media_device: Open and close media device inside populate()Niklas Söderlund
2019-05-17libcamera: Always check return value of MediaDevice::acquire()Niklas Söderlund
2019-04-30libcamera: Use the Size class through libcameraLaurent Pinchart
2019-04-26test: v4l2_subdevice: Remove std::move() that prevents copy elisionLaurent Pinchart
2019-04-18libcamera: v4l2_subdevice: Add method to retrieve the media entityLaurent Pinchart
2019-04-18libcamera: geometry: Use Size to store min and max in SizeRangeLaurent Pinchart
2019-04-05libcamera: Make geometry.h a public headerNiklas Söderlund
2019-04-02libcamera: v4l2_subdevice: Rename deviceName() methodJacopo Mondi
2019-03-02test: v4l2_subdevice: Add ListFormat testJacopo Mondi
2019-03-01test: v4l2_subdevice: Add format handling testJacopo Mondi
/span>FrameSuccess) return; completeBuffersCount_++; } void requestComplete(Request *request) { if (request->status() != Request::RequestComplete) return; const std::map<Stream *, FrameBuffer *> &buffers = request->buffers(); completeRequestsCount_++; /* Create a new request. */ Stream *stream = buffers.begin()->first; FrameBuffer *buffer = buffers.begin()->second; request = camera_->createRequest(); request->addBuffer(stream, buffer); camera_->queueRequest(request); } int init() override { if (status_ != TestPass) return status_; config_ = camera_->generateConfiguration({ StreamRole::VideoRecording }); if (!config_ || config_->size() != 1) { cout << "Failed to generate default configuration" << endl; return TestFail; } allocator_ = FrameBufferAllocator::create(camera_); return TestPass; } void cleanup() override { delete allocator_; } int run() override { StreamConfiguration &cfg = config_->at(0); if (camera_->acquire()) { cout << "Failed to acquire the camera" << endl; return TestFail; } if (camera_->configure(config_.get())) { cout << "Failed to set default configuration" << endl; return TestFail; } if (camera_->allocateBuffers()) { cout << "Failed to allocate buffers" << endl; return TestFail; } Stream *stream = cfg.stream(); int ret = allocator_->allocate(stream); if (ret < 0) return TestFail; std::vector<Request *> requests; for (const std::unique_ptr<FrameBuffer> &buffer : allocator_->buffers(stream)) { Request *request = camera_->createRequest(); if (!request) { cout << "Failed to create request" << endl; return TestFail; } if (request->addBuffer(stream, buffer.get())) { cout << "Failed to associating buffer with request" << endl; return TestFail; } requests.push_back(request); } completeRequestsCount_ = 0; completeBuffersCount_ = 0; camera_->bufferCompleted.connect(this, &Capture::bufferComplete); camera_->requestCompleted.connect(this, &Capture::requestComplete); if (camera_->start()) { cout << "Failed to start camera" << endl; return TestFail; } for (Request *request : requests) { if (camera_->queueRequest(request)) { cout << "Failed to queue request" << endl; return TestFail; } } EventDispatcher *dispatcher = cm_->eventDispatcher(); Timer timer; timer.start(1000); while (timer.isRunning()) dispatcher->processEvents(); unsigned int nbuffers = allocator_->buffers(stream).size(); if (completeRequestsCount_ <= nbuffers * 2) { cout << "Failed to capture enough frames (got " << completeRequestsCount_ << " expected at least " << nbuffers * 2 << ")" << endl; return TestFail; } if (completeRequestsCount_ != completeBuffersCount_) { cout << "Number of completed buffers and requests differ" << endl; return TestFail; } if (camera_->stop()) { cout << "Failed to stop camera" << endl; return TestFail; } if (camera_->freeBuffers()) { cout << "Failed to free buffers" << endl; return TestFail; } return TestPass; } std::unique_ptr<CameraConfiguration> config_; FrameBufferAllocator *allocator_; }; } /* namespace */ TEST_REGISTER(Capture);