selection-api-examples.rst (2073B)
1.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later 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 11Example: 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 28Setting a composing area on output of size of *at most* half of limit 29placed at a center of a display. 30 31Example: 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 57A video output device is assumed; change ``V4L2_BUF_TYPE_VIDEO_OUTPUT`` 58for other devices 59 60Example: 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;