@@ -16,6 +16,7 @@ SimpleCapture::SimpleCapture(std::shared_ptr<Camera> camera)
SimpleCapture::~SimpleCapture()
{
+ stop();
}
Results::Result SimpleCapture::configure(StreamRole role)
@@ -51,12 +52,16 @@ Results::Result SimpleCapture::start()
Results::Result SimpleCapture::stop()
{
+ if (!config_)
+ return;
Stream *stream = config_->at(0).stream();
camera_->stop();
camera_->requestCompleted.disconnect(this, &SimpleCapture::requestComplete);
+ if (!allocator_->allocated())
+ return;
allocator_->free(stream);
return { Results::Pass, "Stopped camera" };
@@ -82,7 +87,6 @@ Results::Result SimpleCaptureBalanced::capture(unsigned int numRequests)
if (buffers.size() > numRequests) {
/* Cache buffers.size() before we destroy it in stop() */
int buffers_size = buffers.size();
- stop();
return { Results::Skip, "Camera needs " + std::to_string(buffers_size)
+ " requests, can't test only " + std::to_string(numRequests) };
@@ -97,17 +101,14 @@ Results::Result SimpleCaptureBalanced::capture(unsigned int numRequests)
for (const std::unique_ptr<FrameBuffer> &buffer : buffers) {
std::unique_ptr<Request> request = camera_->createRequest();
if (!request) {
- stop();
return { Results::Fail, "Can't create request" };
}
if (request->addBuffer(stream, buffer.get())) {
- stop();
return { Results::Fail, "Can't set buffer for request" };
}
if (queueRequest(request.get()) < 0) {
- stop();
return { Results::Fail, "Failed to queue request" };
}
@@ -174,17 +175,14 @@ Results::Result SimpleCaptureUnbalanced::capture(unsigned int numRequests)
for (const std::unique_ptr<FrameBuffer> &buffer : buffers) {
std::unique_ptr<Request> request = camera_->createRequest();
if (!request) {
- stop();
return { Results::Fail, "Can't create request" };
}
if (request->addBuffer(stream, buffer.get())) {
- stop();
return { Results::Fail, "Can't set buffer for request" };
}
if (camera_->queueRequest(request.get()) < 0) {
- stop();
return { Results::Fail, "Failed to queue request" };
}
Make SimpleCapture::stop() be able to be called multiple times and at any point so that it can be called from the destructor and an assert failure can return immeadiately. Signed-off-by: NĂcolas F. R. A. Prado <nfraprado@collabora.com> --- src/lc-compliance/simple_capture.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)