Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
2.. c:namespace:: V4L
3
4********
5Examples
6********
7
8(A video capture device is assumed; change
9``V4L2_BUF_TYPE_VIDEO_CAPTURE`` for other devices; change target to
10``V4L2_SEL_TGT_COMPOSE_*`` family to configure composing area)
11
12Example: Resetting the cropping parameters
13==========================================
14
15.. code-block:: c
16
17 struct v4l2_selection sel = {
18 .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
19 .target = V4L2_SEL_TGT_CROP_DEFAULT,
20 };
21 ret = ioctl(fd, VIDIOC_G_SELECTION, &sel);
22 if (ret)
23 exit(-1);
24 sel.target = V4L2_SEL_TGT_CROP;
25 ret = ioctl(fd, VIDIOC_S_SELECTION, &sel);
26 if (ret)
27 exit(-1);
28
29Setting a composing area on output of size of *at most* half of limit
30placed at a center of a display.
31
32Example: Simple downscaling
33===========================
34
35.. code-block:: c
36
37 struct v4l2_selection sel = {
38 .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
39 .target = V4L2_SEL_TGT_COMPOSE_BOUNDS,
40 };
41 struct v4l2_rect r;
42
43 ret = ioctl(fd, VIDIOC_G_SELECTION, &sel);
44 if (ret)
45 exit(-1);
46 /* setting smaller compose rectangle */
47 r.width = sel.r.width / 2;
48 r.height = sel.r.height / 2;
49 r.left = sel.r.width / 4;
50 r.top = sel.r.height / 4;
51 sel.r = r;
52 sel.target = V4L2_SEL_TGT_COMPOSE;
53 sel.flags = V4L2_SEL_FLAG_LE;
54 ret = ioctl(fd, VIDIOC_S_SELECTION, &sel);
55 if (ret)
56 exit(-1);
57
58A video output device is assumed; change ``V4L2_BUF_TYPE_VIDEO_OUTPUT``
59for other devices
60
61Example: Querying for scaling factors
62=====================================
63
64.. code-block:: c
65
66 struct v4l2_selection compose = {
67 .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
68 .target = V4L2_SEL_TGT_COMPOSE,
69 };
70 struct v4l2_selection crop = {
71 .type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
72 .target = V4L2_SEL_TGT_CROP,
73 };
74 double hscale, vscale;
75
76 ret = ioctl(fd, VIDIOC_G_SELECTION, &compose);
77 if (ret)
78 exit(-1);
79 ret = ioctl(fd, VIDIOC_G_SELECTION, &crop);
80 if (ret)
81 exit(-1);
82
83 /* computing scaling factors */
84 hscale = (double)compose.r.width / crop.r.width;
85 vscale = (double)compose.r.height / crop.r.height;