[libcamera-devel] [PATCH 4/6] libcamera: PixelFormatInfo: Add methods bytesPerLine and imageSize

Paul Elder paul.elder at ideasonboard.com
Mon Jun 29 17:14:09 CEST 2020


Add instance methods to PixelFormatInfo for calculating bytes-per-line
and image size. This will simplify existing code that calculates these
things.

Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
---
 include/libcamera/internal/formats.h |  3 +++
 src/libcamera/formats.cpp            | 21 +++++++++++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h
index 3c7440a..1372a43 100644
--- a/include/libcamera/internal/formats.h
+++ b/include/libcamera/internal/formats.h
@@ -46,6 +46,9 @@ public:
 	static const PixelFormatInfo &info(const PixelFormat &format);
 	static const PixelFormatInfo &info(const V4L2PixelFormat &format);
 
+	unsigned int bytesPerLine(unsigned int width);
+	unsigned int imageSize(unsigned int width, unsigned int height);
+
 	const char *name;
 	PixelFormat format;
 	V4L2PixelFormat v4l2Format;
diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp
index 7029a94..dc1d348 100644
--- a/src/libcamera/formats.cpp
+++ b/src/libcamera/formats.cpp
@@ -7,12 +7,16 @@
 
 #include "libcamera/internal/formats.h"
 
+#include <algorithm>
 #include <errno.h>
 
 #include <libcamera/formats.h>
 
 #include "libcamera/internal/log.h"
 
+
+#define DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d))
+
 /**
  * \file internal/formats.h
  * \brief Types and helper methods to handle libcamera image formats
@@ -670,4 +674,21 @@ const PixelFormatInfo &PixelFormatInfo::info(const V4L2PixelFormat &format)
 	return info->second;
 }
 
+unsigned int PixelFormatInfo::bytesPerLine(unsigned int width)
+{
+	if (!isValid())
+		return 0;
+
+	return DIV_ROUND_UP(width, pixelsPerGroup) * bytesPerGroup;
+
+}
+
+unsigned int PixelFormatInfo::imageSize(unsigned int width, unsigned int height)
+{
+	if (!isValid())
+		return 0;
+
+	return height * bytesPerLine(width);
+}
+
 } /* namespace libcamera */
-- 
2.27.0



More information about the libcamera-devel mailing list