Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d010974f authored by Ahmed Abdul-Salam's avatar Ahmed Abdul-Salam
Browse files

msm: VPU: Remove unnecessary checks on format resolution



Remove a check that height in pixels must be a multiple of 8, which is
no longer necessary.
Change get_bytesperline so that it only returns the default value if
input bytesperline is zero. Previously, the result can be random if
input bytesperline was not initialized by the caller.

Change-Id: I68b9852a9d43776274267fa1abdd06b03925026d
Signed-off-by: default avatarAhmed Abdul-Salam <aabdulsa@codeaurora.org>
parent 416e5ce5
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -1004,26 +1004,25 @@ u32 get_bytesperline(u32 width, u32 bitsperpixel, u32 input_bytesperline)
	u32 padding_factor = CEIL(bytesperline, PADDING);
	u32 min_bytesperline = PADDING * padding_factor;

	if (input_bytesperline < min_bytesperline) /* input too small */
	if (!input_bytesperline) {
		return min_bytesperline;
	else if (input_bytesperline % PADDING) /* must be multiple of padding */
		return min_bytesperline;
	else if (input_bytesperline > SZ_32K) /* not too big */
		return min_bytesperline;
	else
		return input_bytesperline; /* input bytesperline was fine */
	} else if (input_bytesperline < min_bytesperline ||
			input_bytesperline % PADDING ||
			input_bytesperline > SZ_16K) {
		pr_err("Invalid input bytesperline %d\n", input_bytesperline);
		return 0;
	} else {
		return input_bytesperline;
	}
}

int is_format_valid(struct v4l2_format *fmt)
{
#define VPU_HEIGHT_MINIMUM 72
#define VPU_HEIGHT_MULTIPLE 8
#define VPU_DIM_MINIMUM 72
	u32 height = fmt->fmt.pix_mp.height;
	u32 width = fmt->fmt.pix_mp.width;

	if (height < VPU_HEIGHT_MINIMUM)
		return 0;
	if ((height / VPU_HEIGHT_MULTIPLE) * VPU_HEIGHT_MULTIPLE != height)
	if (width < VPU_DIM_MINIMUM || height < VPU_DIM_MINIMUM)
		return 0;
	if ((height & 1) || (width & 1)) /* must be even */
		return 0;
+13 −6
Original line number Diff line number Diff line
@@ -486,9 +486,9 @@ int vpu_get_fmt(struct vpu_client *client, struct v4l2_format *f)

int vpu_try_fmt(struct vpu_client *client, struct v4l2_format *f)
{
	int i;
	u32 hfi_pixelformat;
	const struct vpu_format_desc *vpu_format;
	u32 hfi_pixelformat, bytesperline;
	int i;

	hfi_pixelformat =
		translate_pixelformat_to_hfi(f->fmt.pix_mp.pixelformat);
@@ -496,18 +496,25 @@ int vpu_try_fmt(struct vpu_client *client, struct v4l2_format *f)
	if (!vpu_format)
		return -EINVAL;

	pr_debug("width = %d, height = %d\n",
			f->fmt.pix_mp.width, f->fmt.pix_mp.height);
	if (!is_format_valid(f))
		return -EINVAL;

	f->fmt.pix_mp.num_planes = vpu_format->num_planes;

	for (i = 0; i < vpu_format->num_planes; i++) {
		f->fmt.pix_mp.plane_fmt[i].bytesperline =
			get_bytesperline(f->fmt.pix_mp.width,
		bytesperline = get_bytesperline(f->fmt.pix_mp.width,
				vpu_format->plane[i].bitsperpixel,
				f->fmt.pix_mp.plane_fmt[i].bytesperline);
		if (!bytesperline) {
			pr_err("Invalid plane %d bytesperline\n", i);
			return -EINVAL;
		}
		f->fmt.pix_mp.plane_fmt[i].bytesperline = bytesperline;

		f->fmt.pix_mp.plane_fmt[i].sizeimage =
			get_sizeimage(f->fmt.pix_mp.plane_fmt[i].bytesperline,
				f->fmt.pix_mp.height,
			get_sizeimage(bytesperline, f->fmt.pix_mp.height,
				vpu_format->plane[i].heightfactor);
	}

+1 −2
Original line number Diff line number Diff line
@@ -122,8 +122,7 @@ u32 translate_pixelformat_to_hfi(u32 api_pix_fmt)
		break;
	default:
		hfi_pix_fmt = PIXEL_FORMAT_MAX;
		pr_warn("Unsupported api pixel format: %d (%4c)\n",
				api_pix_fmt, (char)api_pix_fmt);
		pr_warn("Unsupported api pixel format: %d\n", api_pix_fmt);
		break;
	}