summaryrefslogtreecommitdiff
path: root/package
diff options
context:
space:
mode:
authorDavid Plowman <david.plowman@raspberrypi.com>2020-11-23 07:38:01 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2020-11-23 14:24:36 +0000
commit2fb5b298da8b965afb4cecbe17cbb24975e9f4db (patch)
tree750db9a90065d5bb0e0f8451661c8d3157c12db7 /package
parent23ada683db6a33ee848dd9d3061d252e6c9e5dfd (diff)
libcamera: ipa: raspberrypi: agc: Report fixed exposure/gain values during SwitchMode
When an application has specified fixed exposure time and/or gain they must be programmed into the sensor immediately, even before the sensor has been started. For this to happen they must be written into the image metadata when the SwitchMode method is invoked. We also make the default exposure/gain, when nothing has been set, customisable in the tuning file. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'package')
0 files changed, 0 insertions, 0 deletions
: GPL-2.0-or-later */ /* * Copyright (C) 2019, Google Inc. * * event-thread.cpp - Threaded event test */ #include <chrono> #include <iostream> #include <string.h> #include <unistd.h> #include <libcamera/base/event_notifier.h> #include <libcamera/base/thread.h> #include <libcamera/base/timer.h> #include "test.h" using namespace std; using namespace libcamera; class EventHandler : public Object { public: EventHandler() : notified_(false) { int ret = pipe(pipefd_); if (ret < 0) { ret = errno; cout << "pipe() failed: " << strerror(ret) << endl; } notifier_ = new EventNotifier(pipefd_[0], EventNotifier::Read, this); notifier_->activated.connect(this, &EventHandler::readReady); } ~EventHandler() { delete notifier_; close(pipefd_[0]); close(pipefd_[1]); } int notify() { std::string data("H2G2"); ssize_t ret; memset(data_, 0, sizeof(data_)); size_ = 0; ret = write(pipefd_[1], data.data(), data.size()); if (ret < 0) { cout << "Pipe write failed" << endl; return TestFail; } return TestPass; } bool notified() const { return notified_; } private: void readReady() { size_ = read(notifier_->fd(), data_, sizeof(data_)); notified_ = true; } EventNotifier *notifier_; int pipefd_[2]; bool notified_; char data_[16]; ssize_t size_; }; class EventThreadTest : public Test { protected: int run() { Thread thread; thread.start(); /* * Fire the event notifier and then move the notifier to a * different thread. The notifier will not notice the event * immediately as there is no event dispatcher loop running in * the main thread. This tests that a notifier being moved to a * different thread will correctly process already pending * events in the new thread. */ EventHandler handler; handler.notify(); handler.moveToThread(&thread); this_thread::sleep_for(chrono::milliseconds(100)); /* Must stop thread before destroying the handler. */ thread.exit(0); thread.wait(); if (!handler.notified()) { cout << "Thread event handling test failed" << endl; return TestFail; } return TestPass; } }; TEST_REGISTER(EventThreadTest)