diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-05 23:24:29 +0300 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2021-09-07 19:18:45 +0300 |
commit | 843048499fe1f1f8cea74838c1e3436945c1b1b7 (patch) | |
tree | 4d7f10086430d702bb2bdc23f9062b05cc2d8465 /src/cam/drm.h | |
parent | f8f6bc657d37e67c9f90762c8862a11e498925cc (diff) |
cam: drm: Support per-plane stride values
The stride is not always identical for all planes for multi-planar
formats. Semi-planar YUV formats without horizontal subsampling often
have a chroma stride equal to twice the luma stride, and tri-planar YUV
formats with a 1/2 horizontal subsampling often have a chroma stride
equal to half the luma stride. This isn't correctly taken into account
when creating a DRM frame buffer, as the same stride is set for all
planes.
libcamera doesn't report per-plane stride values yet, but uses chroma
strides that match the above description for all currently supported
platforms. Calculation the chrome strides appropriately in the KMSSink
class, and pass them to DRM::createFrameBuffer().
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Diffstat (limited to 'src/cam/drm.h')
-rw-r--r-- | src/cam/drm.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/cam/drm.h b/src/cam/drm.h index ee230402..00f7e798 100644 --- a/src/cam/drm.h +++ b/src/cam/drm.h @@ -7,9 +7,11 @@ #ifndef __CAM_DRM_H__ #define __CAM_DRM_H__ +#include <array> #include <list> #include <map> #include <memory> +#include <stdint.h> #include <string> #include <vector> @@ -298,7 +300,8 @@ public: std::unique_ptr<FrameBuffer> createFrameBuffer( const libcamera::FrameBuffer &buffer, const libcamera::PixelFormat &format, - const libcamera::Size &size, unsigned int stride); + const libcamera::Size &size, + const std::array<uint32_t, 4> &strides); libcamera::Signal<AtomicRequest *> requestComplete; |