summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAlain Volmat <alain.volmat@foss.st.com>2025-12-19 15:30:39 +0100
committerHans Verkuil <hverkuil+cisco@kernel.org>2026-01-16 14:08:52 +0100
commit8a71f1f8d91fb10d306857c0f198a940c1d22e06 (patch)
treee64abe92f152134ec1ffa88e705521857a793beb /drivers
parent0085da1315898ea27bcb323e456ca1d39d43e96a (diff)
media: stm32: dcmipp: byteproc: only allow compose with 8/16bit fmts
Since the byteproc is working at byte level, it is not possible to perform decimation with formats other than 8 or 16 bit per pixel. Ensure any other format won't be able to set a compose. Signed-off-by: Alain Volmat <alain.volmat@foss.st.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
index f45a3027f8f3..f9e4a3a9ef3f 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmipp/dcmipp-byteproc.c
@@ -131,6 +131,8 @@ static void dcmipp_byteproc_adjust_crop(struct v4l2_rect *r,
static void dcmipp_byteproc_adjust_compose(struct v4l2_rect *r,
const struct v4l2_mbus_framefmt *fmt)
{
+ const struct dcmipp_byteproc_pix_map *vpix;
+
r->top = 0;
r->left = 0;
@@ -142,6 +144,14 @@ static void dcmipp_byteproc_adjust_compose(struct v4l2_rect *r,
return;
}
+ /* Prevent compose on formats which are not 1 or 2 bytes per pixel */
+ vpix = dcmipp_byteproc_pix_map_by_code(fmt->code);
+ if (vpix->bpp != 1 && vpix->bpp != 2) {
+ r->width = fmt->width;
+ r->height = fmt->height;
+ return;
+ }
+
/* Adjust height - we can only perform 1/2 decimation */
if (r->height <= (fmt->height / 2))
r->height = fmt->height / 2;
@@ -149,7 +159,7 @@ static void dcmipp_byteproc_adjust_compose(struct v4l2_rect *r,
r->height = fmt->height;
/* Adjust width /2 or /4 for 8bits formats and /2 for 16bits formats */
- if (fmt->code == MEDIA_BUS_FMT_Y8_1X8 && r->width <= (fmt->width / 4))
+ if (vpix->bpp == 1 && r->width <= (fmt->width / 4))
r->width = fmt->width / 4;
else if (r->width <= (fmt->width / 2))
r->width = fmt->width / 2;