libcamera: pipeline: raspberrypi: Pass the drop frame count in start, not configure
The number of frames to drop (not display) is passed back now from the start method, not configure. This means applications have a chance to set fixed exposure/gain before starting the camera and this can affect the frame drop count that is returned. Note how we need to be able to tell the very first time we start the camera from subsequent restarts, hence addition of the "firstStart_" flag. Both the IPA implementation file and the pipeline handler need matching modifications. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
a93775cab6
commit
10bcc51ca3
2 changed files with 38 additions and 32 deletions
|
@ -67,7 +67,7 @@ public:
|
|||
IPARPi()
|
||||
: lastMode_({}), controller_(), controllerInit_(false),
|
||||
frameCount_(0), checkCount_(0), mistrustCount_(0),
|
||||
lsTable_(nullptr)
|
||||
lsTable_(nullptr), firstStart_(true)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -145,6 +145,9 @@ private:
|
|||
/* LS table allocation passed in from the pipeline handler. */
|
||||
FileDescriptor lsTableHandle_;
|
||||
void *lsTable_;
|
||||
|
||||
/* Distinguish the first camera start from others. */
|
||||
bool firstStart_;
|
||||
};
|
||||
|
||||
int IPARPi::init(const IPASettings &settings)
|
||||
|
@ -180,6 +183,27 @@ int IPARPi::start(const IPAOperationData &data, IPAOperationData *result)
|
|||
result->operation |= RPi::IPA_CONFIG_SENSOR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialise frame counts, and decide how many frames must be hidden or
|
||||
* "mistrusted", which depends on whether this is a startup from cold,
|
||||
* or merely a mode switch in a running system.
|
||||
*/
|
||||
frameCount_ = 0;
|
||||
checkCount_ = 0;
|
||||
unsigned int dropFrame = 0;
|
||||
if (firstStart_) {
|
||||
dropFrame = helper_->HideFramesStartup();
|
||||
mistrustCount_ = helper_->MistrustFramesStartup();
|
||||
} else {
|
||||
dropFrame = helper_->HideFramesModeSwitch();
|
||||
mistrustCount_ = helper_->MistrustFramesModeSwitch();
|
||||
}
|
||||
|
||||
result->data.push_back(dropFrame);
|
||||
result->operation |= RPi::IPA_CONFIG_DROP_FRAMES;
|
||||
|
||||
firstStart_ = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -305,25 +329,6 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo,
|
|||
/* Pass the camera mode to the CamHelper to setup algorithms. */
|
||||
helper_->SetCameraMode(mode_);
|
||||
|
||||
/*
|
||||
* Initialise frame counts, and decide how many frames must be hidden or
|
||||
*"mistrusted", which depends on whether this is a startup from cold,
|
||||
* or merely a mode switch in a running system.
|
||||
*/
|
||||
frameCount_ = 0;
|
||||
checkCount_ = 0;
|
||||
unsigned int dropFrame = 0;
|
||||
if (controllerInit_) {
|
||||
dropFrame = helper_->HideFramesModeSwitch();
|
||||
mistrustCount_ = helper_->MistrustFramesModeSwitch();
|
||||
} else {
|
||||
dropFrame = helper_->HideFramesStartup();
|
||||
mistrustCount_ = helper_->MistrustFramesStartup();
|
||||
}
|
||||
|
||||
result->data.push_back(dropFrame);
|
||||
result->operation |= RPi::IPA_CONFIG_DROP_FRAMES;
|
||||
|
||||
if (!controllerInit_) {
|
||||
/* Load the tuning file for this sensor. */
|
||||
controller_.Read(tuningFile_.c_str());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue