media: imx: utils: Add ability to filter pixel formats by mbus code
Add a media bus code argument to the imx_media_enum_pixel_formats(). If set to a non-zero value, the function will only consider pixel formats that match the given media bus code. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Rui Miguel Silva <rmfrfs@gmail.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
0ab05d7f7d
commit
82bedfbf66
@ -174,7 +174,8 @@ static int capture_enum_fmt_vid_cap(struct file *file, void *fh,
|
||||
(cc_src->cs == IPUV3_COLORSPACE_YUV) ?
|
||||
PIXFMT_SEL_YUV : PIXFMT_SEL_RGB;
|
||||
|
||||
ret = imx_media_enum_pixel_formats(&fourcc, f->index, fmt_sel);
|
||||
ret = imx_media_enum_pixel_formats(&fourcc, f->index, fmt_sel,
|
||||
0);
|
||||
if (ret)
|
||||
return ret;
|
||||
} else {
|
||||
@ -223,7 +224,7 @@ static int __capture_try_fmt_vid_cap(struct capture_priv *priv,
|
||||
|
||||
cc = imx_media_find_pixel_format(fourcc, fmt_sel);
|
||||
if (!cc) {
|
||||
imx_media_enum_pixel_formats(&fourcc, 0, fmt_sel);
|
||||
imx_media_enum_pixel_formats(&fourcc, 0, fmt_sel, 0);
|
||||
cc = imx_media_find_pixel_format(fourcc, fmt_sel);
|
||||
}
|
||||
} else {
|
||||
|
@ -167,7 +167,7 @@ static int ipu_csc_scaler_enum_fmt(struct file *file, void *fh,
|
||||
int ret;
|
||||
|
||||
ret = imx_media_enum_pixel_formats(&fourcc, f->index,
|
||||
PIXFMT_SEL_YUV_RGB);
|
||||
PIXFMT_SEL_YUV_RGB, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -283,9 +283,11 @@ EXPORT_SYMBOL_GPL(imx_media_find_mbus_format);
|
||||
* @index: The requested match index.
|
||||
* @fmt_sel: Include in the enumeration entries with the given selection
|
||||
* criteria.
|
||||
* @code: If non-zero, only include in the enumeration entries matching this
|
||||
* media bus code.
|
||||
*/
|
||||
int imx_media_enum_pixel_formats(u32 *fourcc, u32 index,
|
||||
enum imx_pixfmt_sel fmt_sel)
|
||||
enum imx_pixfmt_sel fmt_sel, u32 code)
|
||||
{
|
||||
bool sel_ipu = fmt_sel & PIXFMT_SEL_IPU;
|
||||
unsigned int i;
|
||||
@ -306,6 +308,25 @@ int imx_media_enum_pixel_formats(u32 *fourcc, u32 index,
|
||||
if (!(fmt_sel & sel))
|
||||
continue;
|
||||
|
||||
/*
|
||||
* If a media bus code is specified, only consider formats that
|
||||
* match it.
|
||||
*/
|
||||
if (code) {
|
||||
unsigned int j;
|
||||
|
||||
if (!fmt->codes)
|
||||
continue;
|
||||
|
||||
for (j = 0; fmt->codes[j]; j++) {
|
||||
if (code == fmt->codes[j])
|
||||
break;
|
||||
}
|
||||
|
||||
if (!fmt->codes[j])
|
||||
continue;
|
||||
}
|
||||
|
||||
if (index == 0) {
|
||||
*fourcc = fmt->fourcc;
|
||||
return 0;
|
||||
|
@ -170,7 +170,7 @@ struct imx_media_dev {
|
||||
const struct imx_media_pixfmt *
|
||||
imx_media_find_pixel_format(u32 fourcc, enum imx_pixfmt_sel sel);
|
||||
int imx_media_enum_pixel_formats(u32 *fourcc, u32 index,
|
||||
enum imx_pixfmt_sel sel);
|
||||
enum imx_pixfmt_sel sel, u32 code);
|
||||
const struct imx_media_pixfmt *
|
||||
imx_media_find_mbus_format(u32 code, enum imx_pixfmt_sel sel);
|
||||
int imx_media_enum_mbus_formats(u32 *code, u32 index,
|
||||
|
Loading…
x
Reference in New Issue
Block a user