/* SPDX-License-Identifier: GPL-2.0-or-later *//* * Copyright (C) 2019, Google Inc. * * libcamera Camera API tests */#include <iostream>#include <libcamera/framebuffer_allocator.h>#include"camera_test.h"#include"test.h"using namespace libcamera;using namespace std;namespace{class Statemachine :public CameraTest,public Test
{public:Statemachine():CameraTest("platform/vimc.0 Sensor B"){}protected:inttestAvailable(){/* Test operations which should fail. */if(camera_->configure(defconf_.get()) != -EACCES)return TestFail;if(camera_->createRequest())return TestFail;if(camera_->start() != -EACCES)return TestFail;
Request request(camera_.get());if(camera_->queueRequest(&request) != -EACCES)return TestFail;/* Test operations which should pass. */if(camera_->release())return TestFail;if(camera_->stop())return TestFail;/* Test valid state transitions, end in Acquired state. */if(camera_->acquire())return TestFail;return TestPass;}inttestAcquired(){/* Test operations which should fail. */if(camera_->acquire() != -EBUSY)return TestFail;if(camera_->createRequest())return TestFail;if(camera_->start() != -EACCES)return TestFail;
Request request(camera_.get());if(camera_->queueRequest(&request) != -EACCES)return TestFail;/* Test operations which should pass. */if(camera_->stop())return TestFail;/* Test valid state transitions, end in Configured state. */if(camera_->release())return TestFail;if(camera_->acquire())return TestFail;if(camera_->configure(defconf_.get()))return TestFail;return TestPass;}inttestConfigured(){/* Test operations which should fail. */if(camera_->acquire() != -EBUSY)return TestFail;
Request request1(camera_.get());if(camera_->queueRequest(&request1) != -EACCES)return TestFail;/* Test operations which should pass. */std::unique_ptr<Request> request2 = camera_->createRequest();if(!request2)return TestFail;if(camera_->stop())return TestFail;/* Test valid state transitions, end in Running state. */if(camera_->release())return TestFail;if(camera_->acquire())return TestFail;if(camera_->configure(defconf_.get()))return TestFail;/* Use internally allocated buffers. */
allocator_ =newFrameBufferAllocator(camera_);
Stream *stream = *camera_->streams().begin();if(allocator_->allocate(stream) <0)return TestFail;if(camera_->start())return TestFail;return TestPass;}inttestRuning(){/* Test operations which should fail. */if(camera_->acquire() != -EBUSY)return TestFail;if(camera_->release() != -EBUSY)return TestFail;if(camera_->configure(defconf_.get()) != -EACCES)return TestFail;if(camera_->start() != -EACCES)return TestFail;/* Test operations which should pass. */std::unique_ptr<Request> request = camera_->createRequest();if(!request)return TestFail;
Stream *stream = *camera_->streams().begin();if(request->addBuffer(stream, allocator_->buffers(stream)[0].get()))return TestFail;if(camera_->queueRequest(request.get()))return TestFail;/* Test valid state transitions, end in Available state. */if(camera_->stop())return TestFail;delete allocator_;if(camera_->release())return TestFail;return TestPass;}intinit() override