mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-25 17:45:06 +03:00
When searching for a suitable pipeline, we mistakenly only break from
the inner loop. This results in the last suitable output being selected.
Pick the first one instead.
Fixes: 1de0f90dd4
("cam: kms_sink: Print display pipelineconfiguration")
Signed-off-by: Eric Curtin <ecurtin@redhat.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
71 lines
1.5 KiB
C++
71 lines
1.5 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Copyright (C) 2021, Ideas on Board Oy
|
|
*
|
|
* kms_sink.h - KMS Sink
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <list>
|
|
#include <memory>
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <utility>
|
|
|
|
#include <libcamera/base/signal.h>
|
|
|
|
#include <libcamera/geometry.h>
|
|
#include <libcamera/pixel_format.h>
|
|
|
|
#include "drm.h"
|
|
#include "frame_sink.h"
|
|
|
|
class KMSSink : public FrameSink
|
|
{
|
|
public:
|
|
KMSSink(const std::string &connectorName);
|
|
|
|
void mapBuffer(libcamera::FrameBuffer *buffer) override;
|
|
|
|
int configure(const libcamera::CameraConfiguration &config) override;
|
|
int start() override;
|
|
int stop() override;
|
|
|
|
bool processRequest(libcamera::Request *request) override;
|
|
|
|
private:
|
|
class Request
|
|
{
|
|
public:
|
|
Request(DRM::AtomicRequest *drmRequest, libcamera::Request *camRequest)
|
|
: drmRequest_(drmRequest), camRequest_(camRequest)
|
|
{
|
|
}
|
|
|
|
std::unique_ptr<DRM::AtomicRequest> drmRequest_;
|
|
libcamera::Request *camRequest_;
|
|
};
|
|
|
|
int selectPipeline(const libcamera::PixelFormat &format);
|
|
int configurePipeline(const libcamera::PixelFormat &format);
|
|
void requestComplete(DRM::AtomicRequest *request);
|
|
|
|
DRM::Device dev_;
|
|
|
|
const DRM::Connector *connector_;
|
|
const DRM::Crtc *crtc_;
|
|
const DRM::Plane *plane_;
|
|
const DRM::Mode *mode_;
|
|
|
|
libcamera::PixelFormat format_;
|
|
libcamera::Size size_;
|
|
unsigned int stride_;
|
|
|
|
std::map<libcamera::FrameBuffer *, std::unique_ptr<DRM::FrameBuffer>> buffers_;
|
|
|
|
std::mutex lock_;
|
|
std::unique_ptr<Request> pending_;
|
|
std::unique_ptr<Request> queued_;
|
|
std::unique_ptr<Request> active_;
|
|
};
|