mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
media: v4l2-common: Add an helper to apply frmsize constraints
The rockchip VPU driver is open-coding this logic which seems pretty generic. Let's provide an helper to apply the min/max and alignment constraints on width/height. Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
ce57a82f8a
commit
32cddf9c94
@ -321,6 +321,16 @@ static unsigned int clamp_align(unsigned int x, unsigned int min,
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int clamp_roundup(unsigned int x, unsigned int min,
|
||||||
|
unsigned int max, unsigned int alignment)
|
||||||
|
{
|
||||||
|
x = clamp(x, min, max);
|
||||||
|
if (alignment)
|
||||||
|
x = round_up(x, alignment);
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
void v4l_bound_align_image(u32 *w, unsigned int wmin, unsigned int wmax,
|
void v4l_bound_align_image(u32 *w, unsigned int wmin, unsigned int wmax,
|
||||||
unsigned int walign,
|
unsigned int walign,
|
||||||
u32 *h, unsigned int hmin, unsigned int hmax,
|
u32 *h, unsigned int hmin, unsigned int hmax,
|
||||||
@ -531,6 +541,23 @@ static inline unsigned int v4l2_format_block_height(const struct v4l2_format_inf
|
|||||||
return info->block_h[plane];
|
return info->block_h[plane];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void v4l2_apply_frmsize_constraints(u32 *width, u32 *height,
|
||||||
|
const struct v4l2_frmsize_stepwise *frmsize)
|
||||||
|
{
|
||||||
|
if (!frmsize)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Clamp width/height to meet min/max constraints and round it up to
|
||||||
|
* macroblock alignment.
|
||||||
|
*/
|
||||||
|
*width = clamp_roundup(*width, frmsize->min_width, frmsize->max_width,
|
||||||
|
frmsize->step_width);
|
||||||
|
*height = clamp_roundup(*height, frmsize->min_height, frmsize->max_height,
|
||||||
|
frmsize->step_height);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(v4l2_apply_frmsize_constraints);
|
||||||
|
|
||||||
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt,
|
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt,
|
||||||
u32 pixelformat, u32 width, u32 height)
|
u32 pixelformat, u32 width, u32 height)
|
||||||
{
|
{
|
||||||
|
@ -420,6 +420,8 @@ struct v4l2_format_info {
|
|||||||
|
|
||||||
const struct v4l2_format_info *v4l2_format_info(u32 format);
|
const struct v4l2_format_info *v4l2_format_info(u32 format);
|
||||||
|
|
||||||
|
void v4l2_apply_frmsize_constraints(u32 *width, u32 *height,
|
||||||
|
const struct v4l2_frmsize_stepwise *frmsize);
|
||||||
int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
|
int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
|
||||||
u32 width, u32 height);
|
u32 width, u32 height);
|
||||||
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
||||||
|
Loading…
Reference in New Issue
Block a user