mirror of https://gitee.com/openkylin/linux.git
V4L/DVB (4474): On some cases, depth were not returned.
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
a202a5bfb6
commit
3702627899
|
@ -2431,6 +2431,14 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
|
|||
fbuf->bytesperline = btv->fbuf.fmt.bytesperline;
|
||||
if (fh->ovfmt)
|
||||
fbuf->depth = fh->ovfmt->depth;
|
||||
else {
|
||||
if (fbuf->width)
|
||||
fbuf->depth = ((fbuf->bytesperline<<3)
|
||||
+ (fbuf->width-1) )
|
||||
/fbuf->width;
|
||||
else
|
||||
fbuf->depth = 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
case VIDIOCSFBUF:
|
||||
|
|
|
@ -349,6 +349,8 @@ v4l_compat_translate_ioctl(struct inode *inode,
|
|||
{
|
||||
struct video_buffer *buffer = arg;
|
||||
|
||||
memset(buffer, 0, sizeof(*buffer));
|
||||
|
||||
err = drv(inode, file, VIDIOC_G_FBUF, &fbuf2);
|
||||
if (err < 0) {
|
||||
dprintk("VIDIOCGFBUF / VIDIOC_G_FBUF: %d\n",err);
|
||||
|
@ -361,7 +363,7 @@ v4l_compat_translate_ioctl(struct inode *inode,
|
|||
switch (fbuf2.fmt.pixelformat) {
|
||||
case V4L2_PIX_FMT_RGB332:
|
||||
buffer->depth = 8;
|
||||
break;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
buffer->depth = 15;
|
||||
break;
|
||||
|
@ -377,9 +379,13 @@ v4l_compat_translate_ioctl(struct inode *inode,
|
|||
default:
|
||||
buffer->depth = 0;
|
||||
}
|
||||
if (0 != fbuf2.fmt.bytesperline)
|
||||
if (fbuf2.fmt.bytesperline) {
|
||||
buffer->bytesperline = fbuf2.fmt.bytesperline;
|
||||
else {
|
||||
if (!buffer->depth && buffer->width)
|
||||
buffer->depth = ((fbuf2.fmt.bytesperline<<3)
|
||||
+ (buffer->width-1) )
|
||||
/buffer->width;
|
||||
} else {
|
||||
buffer->bytesperline =
|
||||
(buffer->width * buffer->depth + 7) & 7;
|
||||
buffer->bytesperline >>= 3;
|
||||
|
|
Loading…
Reference in New Issue