mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-02 08:34:20 +08: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;
|
||||
}
|
||||
|
||||
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,
|
||||
unsigned int walign,
|
||||
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];
|
||||
}
|
||||
|
||||
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,
|
||||
u32 pixelformat, u32 width, u32 height)
|
||||
{
|
||||
|
@ -420,6 +420,8 @@ struct v4l2_format_info {
|
||||
|
||||
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,
|
||||
u32 width, u32 height);
|
||||
int v4l2_fill_pixfmt_mp(struct v4l2_pix_format_mplane *pixfmt, u32 pixelformat,
|
||||
|
Loading…
Reference in New Issue
Block a user