Ejemplo n.º 1
0
static int mxr_try_crop(struct v4l2_subdev *sd,
		struct v4l2_subdev_fh *fh, unsigned int pad,
		struct v4l2_rect *r, enum v4l2_subdev_format_whence which)
{
	struct v4l2_mbus_framefmt *fmt;

	fmt = __mxr_get_fmt(sd, fh, pad, which);
	if (fmt == NULL)
		return -EINVAL;

	r->left = clamp_val(r->left, 0, fmt->width);
	r->top = clamp_val(r->top, 0, fmt->height);
	r->width = clamp_val(r->width, 1, fmt->width - r->left);
	r->height = clamp_val(r->height, 1, fmt->height - r->top);

	return 0;
}
Ejemplo n.º 2
0
static int mxr_try_crop(struct v4l2_subdev *sd,
		struct v4l2_subdev_fh *fh, unsigned int pad,
		struct v4l2_rect *r, enum v4l2_subdev_format_whence which)
{
	struct v4l2_mbus_framefmt *fmt;

	fmt = __mxr_get_fmt(sd, fh, pad, which);
	if (fmt == NULL)
		return -EINVAL;

	r->left = clamp_val(r->left, 0, fmt->width);
	r->top = clamp_val(r->top, 0, fmt->height);
	r->width = clamp_val(r->width, 1, fmt->width - r->left);
	r->height = clamp_val(r->height, 1, fmt->height - r->top);

	/* need to align size with G-Scaler */
	if (pad == MXR_PAD_SINK_GSCALER || pad == MXR_PAD_SOURCE_GSCALER)
		if (r->width % 2)
			r->width -= 1;

	return 0;
}