pipeline: raspberrypi: Add an error state
Add an error state used internally in the Raspberry Pi pipeline handler. Currently this state is never set, but will be in a subsequent commit when a device timeout has been signalled. Add a isRunning() helper to identify if the state machine is in a stopped/error state. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
committed by
Kieran Bingham
parent
685da13d02
commit
883e2089db
@@ -253,9 +253,14 @@ public:
|
||||
* thread. So, we do not need to have any mutex to protect access to any
|
||||
* of the variables below.
|
||||
*/
|
||||
enum class State { Stopped, Idle, Busy, IpaComplete };
|
||||
enum class State { Stopped, Idle, Busy, IpaComplete, Error };
|
||||
State state_;
|
||||
|
||||
bool isRunning()
|
||||
{
|
||||
return state_ != State::Stopped && state_ != State::Error;
|
||||
}
|
||||
|
||||
struct BayerFrame {
|
||||
FrameBuffer *buffer;
|
||||
ControlList controls;
|
||||
@@ -1109,7 +1114,7 @@ int PipelineHandlerRPi::queueRequestDevice(Camera *camera, Request *request)
|
||||
{
|
||||
RPiCameraData *data = cameraData(camera);
|
||||
|
||||
if (data->state_ == RPiCameraData::State::Stopped)
|
||||
if (!data->isRunning())
|
||||
return -EINVAL;
|
||||
|
||||
LOG(RPI, Debug) << "queueRequestDevice: New request.";
|
||||
@@ -1708,7 +1713,7 @@ void RPiCameraData::enumerateVideoDevices(MediaLink *link)
|
||||
|
||||
void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &controls)
|
||||
{
|
||||
if (state_ == State::Stopped)
|
||||
if (!isRunning())
|
||||
return;
|
||||
|
||||
FrameBuffer *buffer = isp_[Isp::Stats].getBuffers().at(bufferId);
|
||||
@@ -1744,7 +1749,7 @@ void RPiCameraData::statsMetadataComplete(uint32_t bufferId, const ControlList &
|
||||
|
||||
void RPiCameraData::runIsp(uint32_t bufferId)
|
||||
{
|
||||
if (state_ == State::Stopped)
|
||||
if (!isRunning())
|
||||
return;
|
||||
|
||||
FrameBuffer *buffer = unicam_[Unicam::Image].getBuffers().at(bufferId);
|
||||
@@ -1759,7 +1764,7 @@ void RPiCameraData::runIsp(uint32_t bufferId)
|
||||
|
||||
void RPiCameraData::embeddedComplete(uint32_t bufferId)
|
||||
{
|
||||
if (state_ == State::Stopped)
|
||||
if (!isRunning())
|
||||
return;
|
||||
|
||||
FrameBuffer *buffer = unicam_[Unicam::Embedded].getBuffers().at(bufferId);
|
||||
@@ -1825,7 +1830,7 @@ void RPiCameraData::unicamBufferDequeue(FrameBuffer *buffer)
|
||||
RPi::Stream *stream = nullptr;
|
||||
int index;
|
||||
|
||||
if (state_ == State::Stopped)
|
||||
if (!isRunning())
|
||||
return;
|
||||
|
||||
for (RPi::Stream &s : unicam_) {
|
||||
@@ -1864,7 +1869,7 @@ void RPiCameraData::unicamBufferDequeue(FrameBuffer *buffer)
|
||||
|
||||
void RPiCameraData::ispInputDequeue(FrameBuffer *buffer)
|
||||
{
|
||||
if (state_ == State::Stopped)
|
||||
if (!isRunning())
|
||||
return;
|
||||
|
||||
LOG(RPI, Debug) << "Stream ISP Input buffer complete"
|
||||
@@ -1881,7 +1886,7 @@ void RPiCameraData::ispOutputDequeue(FrameBuffer *buffer)
|
||||
RPi::Stream *stream = nullptr;
|
||||
int index;
|
||||
|
||||
if (state_ == State::Stopped)
|
||||
if (!isRunning())
|
||||
return;
|
||||
|
||||
for (RPi::Stream &s : isp_) {
|
||||
@@ -1991,6 +1996,7 @@ void RPiCameraData::handleState()
|
||||
switch (state_) {
|
||||
case State::Stopped:
|
||||
case State::Busy:
|
||||
case State::Error:
|
||||
break;
|
||||
|
||||
case State::IpaComplete:
|
||||
|
||||
Reference in New Issue
Block a user