cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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;