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

Commit c87c948e authored by Michael H. Schimek's avatar Michael H. Schimek Committed by Linus Torvalds
Browse files

[PATCH] V4L: Bttv bytes per line fix



bttv bytes per line fix.

Signed-off-by: default avatarMichael H. Schimek <mschimek@gmx.at>
Signed-off-by: default avatarNickolay V. Shmyrev <nshmyrev@yandex.ru>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 50ab5edc
Loading
Loading
Loading
Loading
+23 −11
Original line number Original line Diff line number Diff line
@@ -2029,19 +2029,33 @@ static int bttv_switch_type(struct bttv_fh *fh, enum v4l2_buf_type type)
	return 0;
	return 0;
}
}


static void
pix_format_set_size     (struct v4l2_pix_format *       f,
			 const struct bttv_format *     fmt,
			 unsigned int                   width,
			 unsigned int                   height)
{
	f->width = width;
	f->height = height;

	if (fmt->flags & FORMAT_FLAGS_PLANAR) {
		f->bytesperline = width; /* Y plane */
		f->sizeimage = (width * height * fmt->depth) >> 3;
	} else {
		f->bytesperline = (width * fmt->depth) >> 3;
		f->sizeimage = height * f->bytesperline;
	}
}

static int bttv_g_fmt(struct bttv_fh *fh, struct v4l2_format *f)
static int bttv_g_fmt(struct bttv_fh *fh, struct v4l2_format *f)
{
{
	switch (f->type) {
	switch (f->type) {
	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
		memset(&f->fmt.pix,0,sizeof(struct v4l2_pix_format));
		memset(&f->fmt.pix,0,sizeof(struct v4l2_pix_format));
		f->fmt.pix.width        = fh->width;
		pix_format_set_size (&f->fmt.pix, fh->fmt,
		f->fmt.pix.height       = fh->height;
				     fh->width, fh->height);
		f->fmt.pix.field        = fh->cap.field;
		f->fmt.pix.field        = fh->cap.field;
		f->fmt.pix.pixelformat  = fh->fmt->fourcc;
		f->fmt.pix.pixelformat  = fh->fmt->fourcc;
		f->fmt.pix.bytesperline =
			(f->fmt.pix.width * fh->fmt->depth) >> 3;
		f->fmt.pix.sizeimage =
			f->fmt.pix.height * f->fmt.pix.bytesperline;
		return 0;
		return 0;
	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
		memset(&f->fmt.win,0,sizeof(struct v4l2_window));
		memset(&f->fmt.win,0,sizeof(struct v4l2_window));
@@ -2106,11 +2120,9 @@ static int bttv_try_fmt(struct bttv_fh *fh, struct bttv *btv,
			f->fmt.pix.width = maxw;
			f->fmt.pix.width = maxw;
		if (f->fmt.pix.height > maxh)
		if (f->fmt.pix.height > maxh)
			f->fmt.pix.height = maxh;
			f->fmt.pix.height = maxh;
		f->fmt.pix.width &= ~0x03;
		pix_format_set_size (&f->fmt.pix, fmt,
		f->fmt.pix.bytesperline =
				     f->fmt.pix.width & ~3,
			(f->fmt.pix.width * fmt->depth) >> 3;
				     f->fmt.pix.height);
		f->fmt.pix.sizeimage =
			f->fmt.pix.height * f->fmt.pix.bytesperline;


		return 0;
		return 0;
	}
	}