Age | Commit message (Collapse) | Author |
|
This patch adds Algorithm::queueRequest call for the defined algorithms.
As there are currently no control knobs in software ISP nor the
corresponding queueRequest call chain, the patch also introduces the
queueRequest methods and calls from the pipeline to the IPA.
This is preparation only since there are currently no Algorithm based
algorithms defined and no current software ISP algorithms support
control knobs.
Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
This patch adds Algorithm::configure call for the defined algorithms.
This is preparation only since there are currently no Algorithm based
algorithms defined.
A part of this change is passing IPAConfigInfo instead of ControlInfoMap
to configure() calls as this is what Algorithm::configure expects.
Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
We are ready to introduce algorithms now. First, let's create
algorithms. The algorithms are not called yet, calls to them will be
added in followup patches.
The maximum number of contexts is set to the same value as in hardware
pipelines.
Signed-off-by: Milan Zamazal <mzamazal@redhat.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
A previous preparation patch implemented passing frame ids to stats
processing but without actual meaningful frame id value passed there.
This patch extends that by actually providing the frame id and passing
it through to the stats processor.
The frame id is taken from the request sequence number, the same as in
hardw/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright (C) 2019, Google Inc.
*
* signal-threads.cpp - Cross-thread signal delivery test
*/
#include <chrono>
#include <iostream>
#include <thread>
#include "libcamera/internal/message.h"
#include "libcamera/internal/thread.h"
#include "libcamera/internal/utils.h"
#include "test.h"
using namespace std;
using namespace libcamera;
class SignalReceiver : public Object
{
public:
enum Status {
NoSignal,
InvalidThread,
SignalReceived,
};
SignalReceiver()
: status_(NoSignal)
{
}
Status status() const { return status_; }
int value() const { return value_; }
void reset()
{
status_ = NoSignal;
value_ = 0;
}
void slot(int value)
{
if (Thread::current() != thread())
status_ = InvalidThread;
else
status_ = SignalReceived;
value_ = value;
}
private:
Status status_;
int value_;
};
class SignalThreadsTest : public Test
{
protected:
int run()
{
SignalReceiver receiver;
signal_.connect(&receiver, &SignalReceiver::slot);
/* Test that a signal is received in the main thread. */
signal_.emit(0);
switch (receiver.status()) {
case SignalReceiver::NoSignal:
cout << "No signal received for direct connection" << endl;
return TestFail;
case SignalReceiver::InvalidThread:
cout << "Signal received in incorrect thread "
"for direct connection" << endl;
return TestFail;
default:
break;
}
/*
* Move the object to a thread and verify that the signal is
* correctly delivered, with the correct data.
*/
receiver.reset();
receiver.moveToThread(&thread_);
thread_.start();
signal_.emit(42);
this_thread::sleep_for(chrono::milliseconds(100));
switch (receiver.status()) {
case SignalReceiver::NoSignal:
cout << "No signal received for message connection" << endl;
return TestFail;
case SignalReceiver::InvalidThread:
cout << "Signal received in incorrect thread "
"for message connection" << endl;
return TestFail;
default:
break;
}
if (receiver.value() != 42) {
cout << "Signal received with incorrect value" << endl;
return TestFail;
}
return TestPass;
}
void cleanup()
{
thread_.exit(0);
thread_.wait();
}
private:
Thread thread_;
Signal<int> signal_;
};
TEST_REGISTER(SignalThreadsTest)
|