示例#1
0
static int get_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up)
{
	if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_format32)) ||
			get_user(kp->type, &up->type))
			return -EFAULT;
	switch (kp->type) {
	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
	case V4L2_BUF_TYPE_VIDEO_OUTPUT:
		return get_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix);
	case V4L2_BUF_TYPE_VIDEO_OVERLAY:
	case V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY:
		return get_v4l2_window32(&kp->fmt.win, &up->fmt.win);
	case V4L2_BUF_TYPE_VBI_CAPTURE:
	case V4L2_BUF_TYPE_VBI_OUTPUT:
		return get_v4l2_vbi_format(&kp->fmt.vbi, &up->fmt.vbi);
	case V4L2_BUF_TYPE_SLICED_VBI_CAPTURE:
	case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
		return get_v4l2_sliced_vbi_format(&kp->fmt.sliced, &up->fmt.sliced);
	case V4L2_BUF_TYPE_PRIVATE:
		if (copy_from_user(kp, up, sizeof(kp->fmt.raw_data)))
			return -EFAULT;
		return 0;
	case 0:
		return -EINVAL;
	default:
		printk(KERN_INFO "compat_ioctl32: unexpected VIDIOC_FMT type %d\n",
								kp->type);
		return -EINVAL;
	}
}
示例#2
0
static int get_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user *up)
{
    if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_format32)) ||
            get_user(kp->type, &up->type))
            return -EFAULT;
    switch (kp->type) {
    case V4L2_BUF_TYPE_VIDEO_CAPTURE:
        return get_v4l2_pix_format(&kp->fmt.pix, &up->fmt.pix);
    case V4L2_BUF_TYPE_VIDEO_OVERLAY:
        return get_v4l2_window32(&kp->fmt.win, &up->fmt.win);
    case V4L2_BUF_TYPE_VBI_CAPTURE:
        return get_v4l2_vbi_format(&kp->fmt.vbi, &up->fmt.vbi);
    default:
        printk("compat_ioctl : unexpected VIDIOC_FMT type %d\n",
                                kp->type);
        return -ENXIO;
    }
}