blob: 67e0e9aed9e82f8ba346158370027a1d66e08fe2 [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
3********
4Examples
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
Mauro Carvalho Chehab282f02c2016-07-10 08:22:19 -030011Example: Resetting the cropping parameters
12==========================================
Markus Heiser5377d912016-06-30 15:18:56 +020013
14.. code-block:: c
15
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030016 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);
Markus Heiser5377d912016-06-30 15:18:56 +020027
28Setting a composing area on output of size of *at most* half of limit
29placed at a center of a display.
30
Mauro Carvalho Chehab282f02c2016-07-10 08:22:19 -030031Example: Simple downscaling
32===========================
Markus Heiser5377d912016-06-30 15:18:56 +020033
34.. code-block:: c
35
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030036 struct v4l2_selection sel = {
37 .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
38 .target = V4L2_SEL_TGT_COMPOSE_BOUNDS,
39 };
40 struct v4l2_rect r;
Markus Heiser5377d912016-06-30 15:18:56 +020041
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030042 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);
Markus Heiser5377d912016-06-30 15:18:56 +020056
57A video output device is assumed; change ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
58for other devices
59
Mauro Carvalho Chehab282f02c2016-07-10 08:22:19 -030060Example: Querying for scaling factors
61=====================================
Markus Heiser5377d912016-06-30 15:18:56 +020062
63.. code-block:: c
Markus Heiser5377d912016-06-30 15:18:56 +020064
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030065 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;
Markus Heiser5377d912016-06-30 15:18:56 +020074
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030075 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);
Markus Heiser5377d912016-06-30 15:18:56 +020081
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030082 /* computing scaling factors */
83 hscale = (double)compose.r.width / crop.r.width;
84 vscale = (double)compose.r.height / crop.r.height;