Skip to content

Commit 49a5626

Browse files
Hans Verkuilmchehab
authored andcommitted
media: vicodec: process all 4 components for RGB32 formats
Only ARGB32-type pixelformat were assumed to have 4 components, which is wrong since RGB32-type pixelformats may have an alpha channel, so they should also assume 4 color components. The XRGB32-type pixelformats really have only 3 color components, but this complicated matters since that creates strides that are sometimes width * 3 and sometimes width * 4, and in fact this can result in buffer overflows. Keep things simple by just always processing all 4 color components. In the future we might want to optimize this again for the XRGB32-type pixelformats, but for now keep it simple and robust. Signed-off-by: Hans Verkuil <[email protected]> Cc: <[email protected]> # for v5.4 and up Signed-off-by: Mauro Carvalho Chehab <[email protected]>
1 parent aa9eda7 commit 49a5626

File tree

1 file changed

+9
-25
lines changed

1 file changed

+9
-25
lines changed

drivers/media/platform/vicodec/codec-v4l2-fwht.c

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,17 @@ static const struct v4l2_fwht_pixfmt_info v4l2_fwht_pixfmts[] = {
2727
{ V4L2_PIX_FMT_BGR24, 3, 3, 1, 3, 3, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
2828
{ V4L2_PIX_FMT_RGB24, 3, 3, 1, 3, 3, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
2929
{ V4L2_PIX_FMT_HSV24, 3, 3, 1, 3, 3, 1, 1, 3, 1, FWHT_FL_PIXENC_HSV},
30-
{ V4L2_PIX_FMT_BGR32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
31-
{ V4L2_PIX_FMT_XBGR32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
30+
{ V4L2_PIX_FMT_BGR32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
31+
{ V4L2_PIX_FMT_XBGR32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
3232
{ V4L2_PIX_FMT_ABGR32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
33-
{ V4L2_PIX_FMT_RGB32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
34-
{ V4L2_PIX_FMT_XRGB32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
33+
{ V4L2_PIX_FMT_RGB32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
34+
{ V4L2_PIX_FMT_XRGB32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
3535
{ V4L2_PIX_FMT_ARGB32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
36-
{ V4L2_PIX_FMT_BGRX32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
36+
{ V4L2_PIX_FMT_BGRX32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
3737
{ V4L2_PIX_FMT_BGRA32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
38-
{ V4L2_PIX_FMT_RGBX32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_RGB},
38+
{ V4L2_PIX_FMT_RGBX32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
3939
{ V4L2_PIX_FMT_RGBA32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_RGB},
40-
{ V4L2_PIX_FMT_HSV32, 4, 4, 1, 4, 4, 1, 1, 3, 1, FWHT_FL_PIXENC_HSV},
40+
{ V4L2_PIX_FMT_HSV32, 4, 4, 1, 4, 4, 1, 1, 4, 1, FWHT_FL_PIXENC_HSV},
4141
{ V4L2_PIX_FMT_GREY, 1, 1, 1, 1, 0, 1, 1, 1, 1, FWHT_FL_PIXENC_RGB},
4242
};
4343

@@ -175,44 +175,28 @@ static int prepare_raw_frame(struct fwht_raw_frame *rf,
175175
case V4L2_PIX_FMT_RGB32:
176176
case V4L2_PIX_FMT_XRGB32:
177177
case V4L2_PIX_FMT_HSV32:
178-
rf->cr = rf->luma + 1;
179-
rf->cb = rf->cr + 2;
180-
rf->luma += 2;
181-
break;
182-
case V4L2_PIX_FMT_BGR32:
183-
case V4L2_PIX_FMT_XBGR32:
184-
rf->cb = rf->luma;
185-
rf->cr = rf->cb + 2;
186-
rf->luma++;
187-
break;
188178
case V4L2_PIX_FMT_ARGB32:
189179
rf->alpha = rf->luma;
190180
rf->cr = rf->luma + 1;
191181
rf->cb = rf->cr + 2;
192182
rf->luma += 2;
193183
break;
184+
case V4L2_PIX_FMT_BGR32:
185+
case V4L2_PIX_FMT_XBGR32:
194186
case V4L2_PIX_FMT_ABGR32:
195187
rf->cb = rf->luma;
196188
rf->cr = rf->cb + 2;
197189
rf->luma++;
198190
rf->alpha = rf->cr + 1;
199191
break;
200192
case V4L2_PIX_FMT_BGRX32:
201-
rf->cb = rf->luma + 1;
202-
rf->cr = rf->cb + 2;
203-
rf->luma += 2;
204-
break;
205193
case V4L2_PIX_FMT_BGRA32:
206194
rf->alpha = rf->luma;
207195
rf->cb = rf->luma + 1;
208196
rf->cr = rf->cb + 2;
209197
rf->luma += 2;
210198
break;
211199
case V4L2_PIX_FMT_RGBX32:
212-
rf->cr = rf->luma;
213-
rf->cb = rf->cr + 2;
214-
rf->luma++;
215-
break;
216200
case V4L2_PIX_FMT_RGBA32:
217201
rf->alpha = rf->luma + 3;
218202
rf->cr = rf->luma;

0 commit comments

Comments
 (0)