selinux: move user accesses in selinuxfs out of locked regions
[sfrench/cifs-2.6.git] / Documentation / media / uapi / v4l / selection-api-examples.rst
1 .. -*- coding: utf-8; mode: rst -*-
2
3 ********
4 Examples
5 ********
6
7 (A video capture device is assumed; change
8 ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` for other devices; change target to
9 ``V4L2_SEL_TGT_COMPOSE_*`` family to configure composing area)
10
11 Example: Resetting the cropping parameters
12 ==========================================
13
14 .. code-block:: c
15
16         struct v4l2_selection sel = {
17             .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
18             .target = V4L2_SEL_TGT_CROP_DEFAULT,
19         };
20         ret = ioctl(fd, VIDIOC_G_SELECTION, &sel);
21         if (ret)
22             exit(-1);
23         sel.target = V4L2_SEL_TGT_CROP;
24         ret = ioctl(fd, VIDIOC_S_SELECTION, &sel);
25         if (ret)
26             exit(-1);
27
28 Setting a composing area on output of size of *at most* half of limit
29 placed at a center of a display.
30
31 Example: Simple downscaling
32 ===========================
33
34 .. code-block:: c
35
36         struct v4l2_selection sel = {
37             .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
38             .target = V4L2_SEL_TGT_COMPOSE_BOUNDS,
39         };
40         struct v4l2_rect r;
41
42         ret = ioctl(fd, VIDIOC_G_SELECTION, &sel);
43         if (ret)
44             exit(-1);
45         /* setting smaller compose rectangle */
46         r.width = sel.r.width / 2;
47         r.height = sel.r.height / 2;
48         r.left = sel.r.width / 4;
49         r.top = sel.r.height / 4;
50         sel.r = r;
51         sel.target = V4L2_SEL_TGT_COMPOSE;
52         sel.flags = V4L2_SEL_FLAG_LE;
53         ret = ioctl(fd, VIDIOC_S_SELECTION, &sel);
54         if (ret)
55             exit(-1);
56
57 A video output device is assumed; change ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
58 for other devices
59
60 Example: Querying for scaling factors
61 =====================================
62
63 .. code-block:: c
64
65         struct v4l2_selection compose = {
66             .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
67             .target = V4L2_SEL_TGT_COMPOSE,
68         };
69         struct v4l2_selection crop = {
70             .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
71             .target = V4L2_SEL_TGT_CROP,
72         };
73         double hscale, vscale;
74
75         ret = ioctl(fd, VIDIOC_G_SELECTION, &compose);
76         if (ret)
77             exit(-1);
78         ret = ioctl(fd, VIDIOC_G_SELECTION, &crop);
79         if (ret)
80             exit(-1);
81
82         /* computing scaling factors */
83         hscale = (double)compose.r.width / crop.r.width;
84         vscale = (double)compose.r.height / crop.r.height;