€•`¤Œsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ0/translations/zh_CN/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/userspace-api/media/v4l/crop”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ8SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later”h]”hŒ8SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/userspace-api/media/v4l/crop.rst”h´KubhŒtarget”“”)”}”(hŒ .. _crop:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œcrop”uh1hÈh´Khhh²hh³hÇubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ5Image Cropping, Insertion and Scaling -- the CROP API”h]”hŒ5Image Cropping, Insertion and Scaling -- the CROP API”…””}”(hhÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhhØh²hh³hÇh´KubhŒnote”“”)”}”(hXaThe CROP API is mostly superseded by the newer :ref:`SELECTION API `. The new API should be preferred in most cases, with the exception of pixel aspect ratio detection, which is implemented by :ref:`VIDIOC_CROPCAP ` and has no equivalent in the SELECTION API. See :ref:`selection-vs-crop` for a comparison of the two APIs.”h]”hŒ paragraph”“”)”}”(hXaThe CROP API is mostly superseded by the newer :ref:`SELECTION API `. The new API should be preferred in most cases, with the exception of pixel aspect ratio detection, which is implemented by :ref:`VIDIOC_CROPCAP ` and has no equivalent in the SELECTION API. See :ref:`selection-vs-crop` for a comparison of the two APIs.”h]”(hŒ/The CROP API is mostly superseded by the newer ”…””}”(hhóh²hh³Nh´Nubh)”}”(hŒ$:ref:`SELECTION API `”h]”hŒinline”“”)”}”(hhýh]”hŒ SELECTION API”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhhûubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œuserspace-api/media/v4l/crop”Œ refdomain”j Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ selection-api”uh1hh³hÇh´K hhóubhŒ}. The new API should be preferred in most cases, with the exception of pixel aspect ratio detection, which is implemented by ”…””}”(hhóh²hh³Nh´Nubh)”}”(hŒ&:ref:`VIDIOC_CROPCAP `”h]”j)”}”(hj&h]”hŒVIDIOC_CROPCAP”…””}”(hj(h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j2Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_cropcap”uh1hh³hÇh´K hhóubhŒ1 and has no equivalent in the SELECTION API. See ”…””}”(hhóh²hh³Nh´Nubh)”}”(hŒ:ref:`selection-vs-crop`”h]”j)”}”(hjJh]”hŒselection-vs-crop”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjHubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jVŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒselection-vs-crop”uh1hh³hÇh´K hhóubhŒ" for a comparison of the two APIs.”…””}”(hhóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K hhíubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhØh²hh³hÇh´Nubhò)”}”(hX2Some video capture devices can sample a subsection of the picture and shrink or enlarge it to an image of arbitrary size. We call these abilities cropping and scaling. Some video output devices can scale an image up or down and insert it at an arbitrary scan line and horizontal offset into a video signal.”h]”hX2Some video capture devices can sample a subsection of the picture and shrink or enlarge it to an image of arbitrary size. We call these abilities cropping and scaling. Some video output devices can scale an image up or down and insert it at an arbitrary scan line and horizontal offset into a video signal.”…””}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´KhhØh²hubhò)”}”(hŒ}Applications can use the following API to select an area in the video signal, query the default area and the hardware limits.”h]”hŒ}Applications can use the following API to select an area in the video signal, query the default area and the hardware limits.”…””}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´KhhØh²hubhì)”}”(hŒ¾Despite their name, the :ref:`VIDIOC_CROPCAP `, :ref:`VIDIOC_G_CROP ` and :ref:`VIDIOC_S_CROP ` ioctls apply to input as well as output devices.”h]”hò)”}”(hŒ¾Despite their name, the :ref:`VIDIOC_CROPCAP `, :ref:`VIDIOC_G_CROP ` and :ref:`VIDIOC_S_CROP ` ioctls apply to input as well as output devices.”h]”(hŒDespite their name, the ”…””}”(hj˜h²hh³Nh´Nubh)”}”(hŒ&:ref:`VIDIOC_CROPCAP `”h]”j)”}”(hj¢h]”hŒVIDIOC_CROPCAP”…””}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j®Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_cropcap”uh1hh³hÇh´Khj˜ubhŒ, ”…””}”(hj˜h²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_G_CROP `”h]”j)”}”(hjÆh]”hŒ VIDIOC_G_CROP”…””}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjÄubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÒŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_crop”uh1hh³hÇh´Khj˜ubhŒ and ”…””}”(hj˜h²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_S_CROP `”h]”j)”}”(hjêh]”hŒ VIDIOC_S_CROP”…””}”(hjìh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjèubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jöŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_crop”uh1hh³hÇh´Khj˜ubhŒ1 ioctls apply to input as well as output devices.”…””}”(hj˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´Khj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhØh²hh³hÇh´Nubhò)”}”(hXScaling requires a source and a target. On a video capture or overlay device the source is the video signal, and the cropping ioctls determine the area actually sampled. The target are images read by the application or overlaid onto the graphics screen. Their size (and position for an overlay) is negotiated with the :ref:`VIDIOC_G_FMT ` and :ref:`VIDIOC_S_FMT ` ioctls.”h]”(hX>Scaling requires a source and a target. On a video capture or overlay device the source is the video signal, and the cropping ioctls determine the area actually sampled. The target are images read by the application or overlaid onto the graphics screen. Their size (and position for an overlay) is negotiated with the ”…””}”(hjh²hh³Nh´Nubh)”}”(hŒ":ref:`VIDIOC_G_FMT `”h]”j)”}”(hj"h]”hŒ VIDIOC_G_FMT”…””}”(hj$h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j.Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_fmt”uh1hh³hÇh´K"hjubhŒ and ”…””}”(hjh²hh³Nh´Nubh)”}”(hŒ":ref:`VIDIOC_S_FMT `”h]”j)”}”(hjFh]”hŒ VIDIOC_S_FMT”…””}”(hjHh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjDubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jRŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_fmt”uh1hh³hÇh´K"hjubhŒ ioctls.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K"hhØh²hubhò)”}”(hXhOn a video output device the source are the images passed in by the application, and their size is again negotiated with the :ref:`VIDIOC_G_FMT ` and :ref:`VIDIOC_S_FMT ` ioctls, or may be encoded in a compressed video stream. The target is the video signal, and the cropping ioctls determine the area where the images are inserted.”h]”(hŒ}On a video output device the source are the images passed in by the application, and their size is again negotiated with the ”…””}”(hjnh²hh³Nh´Nubh)”}”(hŒ":ref:`VIDIOC_G_FMT `”h]”j)”}”(hjxh]”hŒ VIDIOC_G_FMT”…””}”(hjzh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjvubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j„Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_fmt”uh1hh³hÇh´K)hjnubhŒ and ”…””}”(hjnh²hh³Nh´Nubh)”}”(hŒ":ref:`VIDIOC_S_FMT `”h]”j)”}”(hjœh]”hŒ VIDIOC_S_FMT”…””}”(hjžh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjšubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j¨Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_fmt”uh1hh³hÇh´K)hjnubhŒ¢ ioctls, or may be encoded in a compressed video stream. The target is the video signal, and the cropping ioctls determine the area where the images are inserted.”…””}”(hjnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K)hhØh²hubhò)”}”(hŒøSource and target rectangles are defined even if the device does not support scaling or the :ref:`VIDIOC_G_CROP ` and :ref:`VIDIOC_S_CROP ` ioctls. Their size (and position where applicable) will be fixed in this case.”h]”(hŒ\Source and target rectangles are defined even if the device does not support scaling or the ”…””}”(hjÄh²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_G_CROP `”h]”j)”}”(hjÎh]”hŒ VIDIOC_G_CROP”…””}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjÌubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÚŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_crop”uh1hh³hÇh´K0hjÄubhŒ and ”…””}”(hjÄh²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_S_CROP `”h]”j)”}”(hjòh]”hŒ VIDIOC_S_CROP”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjðubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jþŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_crop”uh1hh³hÇh´K0hjÄubhŒO ioctls. Their size (and position where applicable) will be fixed in this case.”…””}”(hjÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K0hhØh²hubhì)”}”(hŒ‰All capture and output devices that support the CROP or SELECTION API will also support the :ref:`VIDIOC_CROPCAP ` ioctl.”h]”hò)”}”(hŒ‰All capture and output devices that support the CROP or SELECTION API will also support the :ref:`VIDIOC_CROPCAP ` ioctl.”h]”(hŒ\All capture and output devices that support the CROP or SELECTION API will also support the ”…””}”(hjh²hh³Nh´Nubh)”}”(hŒ&:ref:`VIDIOC_CROPCAP `”h]”j)”}”(hj(h]”hŒVIDIOC_CROPCAP”…””}”(hj*h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j4Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_cropcap”uh1hh³hÇh´K7hjubhŒ ioctl.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K7hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhhØh²hh³hÇh´Nubh×)”}”(hhh]”(hÜ)”}”(hŒCropping Structures”h]”hŒCropping Structures”…””}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjVh²hh³hÇh´K` ioctl. To support a wide range of hardware this specification does not define an origin or units. However by convention drivers should horizontally count unscaled samples relative to 0H (the leading edge of the horizontal sync pulse, see :ref:`vbi-hsync`). Vertically ITU-R line numbers of the first field (see ITU R-525 line numbering for :ref:`525 lines ` and for :ref:`625 lines `), multiplied by two if the driver can capture both fields.”h]”(hŒ~For capture devices the coordinates of the top left corner, width and height of the area which can be sampled is given by the ”…””}”(hjÍh²hh³Nh´NubhŒliteral”“”)”}”(hŒ ``bounds``”h]”hŒbounds”…””}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÍubhŒ substructure of the struct ”…””}”(hjÍh²hh³Nh´Nubh)”}”(hŒ:c:type:`v4l2_cropcap`”h]”jÖ)”}”(hjëh]”hŒ v4l2_cropcap”…””}”(hjíh²hh³Nh´Nubah}”(h]”h ]”(j Œc”Œc-type”eh"]”h$]”h&]”uh1jÕhjéubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j÷Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)”}”Œdata”]”j Œ ASTIdentifier”“”)”}”Œ identifier”ŒV4L”sbN†”asbjŒ v4l2_cropcap”uh1hh³hÇh´KKhjÍubhŒ returned by the ”…””}”(hjÍh²hh³Nh´Nubh)”}”(hŒ&:ref:`VIDIOC_CROPCAP `”h]”j)”}”(hjh]”hŒVIDIOC_CROPCAP”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j*Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_cropcap”uh1hh³hÇh´KKhjÍubhŒï ioctl. To support a wide range of hardware this specification does not define an origin or units. However by convention drivers should horizontally count unscaled samples relative to 0H (the leading edge of the horizontal sync pulse, see ”…””}”(hjÍh²hh³Nh´Nubh)”}”(hŒ:ref:`vbi-hsync`”h]”j)”}”(hjBh]”hŒ vbi-hsync”…””}”(hjDh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jNŒreftype”Œref”Œ refexplicit”‰Œrefwarn”ˆjŒ vbi-hsync”uh1hh³hÇh´KKhjÍubhŒV). Vertically ITU-R line numbers of the first field (see ITU R-525 line numbering for ”…””}”(hjÍh²hh³Nh´Nubh)”}”(hŒ:ref:`525 lines `”h]”j)”}”(hjfh]”hŒ 525 lines”…””}”(hjhh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjdubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jrŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvbi-525”uh1hh³hÇh´KKhjÍubhŒ and for ”…””}”(hjÍh²hh³Nh´Nubh)”}”(hŒ:ref:`625 lines `”h]”j)”}”(hjŠh]”hŒ 625 lines”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjˆubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j–Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvbi-625”uh1hh³hÇh´KKhjÍubhŒ;), multiplied by two if the driver can capture both fields.”…””}”(hjÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´KKhjVh²hubhò)”}”(hXõThe top left corner, width and height of the source rectangle, that is the area actually sampled, is given by struct :c:type:`v4l2_crop` using the same coordinate system as struct :c:type:`v4l2_cropcap`. Applications can use the :ref:`VIDIOC_G_CROP ` and :ref:`VIDIOC_S_CROP ` ioctls to get and set this rectangle. It must lie completely within the capture boundaries and the driver may further adjust the requested size and/or position according to hardware limitations.”h]”(hŒuThe top left corner, width and height of the source rectangle, that is the area actually sampled, is given by struct ”…””}”(hj²h²hh³Nh´Nubh)”}”(hŒ:c:type:`v4l2_crop`”h]”jÖ)”}”(hj¼h]”hŒ v4l2_crop”…””}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”(j j÷Œc-type”eh"]”h$]”h&]”uh1jÕhjºubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j÷Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jj jŒ v4l2_crop”uh1hh³hÇh´KWhj²ubhŒ, using the same coordinate system as struct ”…””}”(hj²h²hh³Nh´Nubh)”}”(hŒ:c:type:`v4l2_cropcap`”h]”jÖ)”}”(hjßh]”hŒ v4l2_cropcap”…””}”(hjáh²hh³Nh´Nubah}”(h]”h ]”(j j÷Œc-type”eh"]”h$]”h&]”uh1jÕhjÝubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j÷Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jj jŒ v4l2_cropcap”uh1hh³hÇh´KWhj²ubhŒ. Applications can use the ”…””}”(hj²h²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_G_CROP `”h]”j)”}”(hjh]”hŒ VIDIOC_G_CROP”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_crop”uh1hh³hÇh´KWhj²ubhŒ and ”…””}”(hj²h²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_S_CROP `”h]”j)”}”(hj&h]”hŒ VIDIOC_S_CROP”…””}”(hj(h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j2Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_crop”uh1hh³hÇh´KWhj²ubhŒÃ ioctls to get and set this rectangle. It must lie completely within the capture boundaries and the driver may further adjust the requested size and/or position according to hardware limitations.”…””}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´KWhjVh²hubhò)”}”(hXEach capture device has a default source rectangle, given by the ``defrect`` substructure of struct :c:type:`v4l2_cropcap`. The center of this rectangle shall align with the center of the active picture area of the video signal, and cover what the driver writer considers the complete picture. Drivers shall reset the source rectangle to the default when the driver is first loaded, but not later.”h]”(hŒAEach capture device has a default source rectangle, given by the ”…””}”(hjNh²hh³Nh´NubjÖ)”}”(hŒ ``defrect``”h]”hŒdefrect”…””}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjNubhŒ substructure of struct ”…””}”(hjNh²hh³Nh´Nubh)”}”(hŒ:c:type:`v4l2_cropcap`”h]”jÖ)”}”(hjjh]”hŒ v4l2_cropcap”…””}”(hjlh²hh³Nh´Nubah}”(h]”h ]”(j j÷Œc-type”eh"]”h$]”h&]”uh1jÕhjhubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j÷Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jj jŒ v4l2_cropcap”uh1hh³hÇh´K`hjNubhX. The center of this rectangle shall align with the center of the active picture area of the video signal, and cover what the driver writer considers the complete picture. Drivers shall reset the source rectangle to the default when the driver is first loaded, but not later.”…””}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K`hjVh²hubhò)”}”(hŒFor output devices these structures and ioctls are used accordingly, defining the *target* rectangle where the images will be inserted into the video signal.”h]”(hŒRFor output devices these structures and ioctls are used accordingly, defining the ”…””}”(hj‘h²hh³Nh´NubhŒemphasis”“”)”}”(hŒ*target*”h]”hŒtarget”…””}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j™hj‘ubhŒC rectangle where the images will be inserted into the video signal.”…””}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´KhhjVh²hubeh}”(h]”Œcropping-structures”ah ]”h"]”Œcropping structures”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”j÷Œreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jj jŒ v4l2_cropcap”uh1hh³hÇh´KphjÌubhŒ. ”…””}”(hjÌh²hh³Nh´NubjÖ)”}”(hŒ ``bounds``”h]”hŒbounds”…””}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjÌubhŒz area. Therefore, as usual, drivers are expected to adjust the requested parameters and return the actual values selected.”…””}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´Kphj»h²hubhò)”}”(hXÍApplications can change the source or the target rectangle first, as they may prefer a particular image size or a certain area in the video signal. If the driver has to adjust both to satisfy hardware limitations, the last requested rectangle shall take priority, and the driver should preferably adjust the opposite one. The :ref:`VIDIOC_TRY_FMT ` ioctl however shall not change the driver state and therefore only adjust the requested rectangle.”h]”(hXFApplications can change the source or the target rectangle first, as they may prefer a particular image size or a certain area in the video signal. If the driver has to adjust both to satisfy hardware limitations, the last requested rectangle shall take priority, and the driver should preferably adjust the opposite one. The ”…””}”(hjyh²hh³Nh´Nubh)”}”(hŒ$:ref:`VIDIOC_TRY_FMT `”h]”j)”}”(hjƒh]”hŒVIDIOC_TRY_FMT”…””}”(hj…h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒ vidioc_g_fmt”uh1hh³hÇh´K|hjyubhŒc ioctl however shall not change the driver state and therefore only adjust the requested rectangle.”…””}”(hjyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K|hj»h²hubhò)”}”(hXTSuppose scaling on a video capture device is restricted to a factor 1:1 or 2:1 in either direction and the target image size must be a multiple of 16 × 16 pixels. The source cropping rectangle is set to defaults, which are also the upper limit in this example, of 640 × 400 pixels at offset 0, 0. An application requests an image size of 300 × 225 pixels, assuming video will be scaled down from the "full picture" accordingly. The driver sets the image size to the closest possible values 304 × 224, then chooses the cropping rectangle closest to the requested size, that is 608 × 224 (224 × 2:1 would exceed the limit 400). The offset 0, 0 is still valid, thus unmodified. Given the default cropping rectangle reported by :ref:`VIDIOC_CROPCAP ` the application can easily propose another offset to center the cropping rectangle.”h]”(hXÞSuppose scaling on a video capture device is restricted to a factor 1:1 or 2:1 in either direction and the target image size must be a multiple of 16 × 16 pixels. The source cropping rectangle is set to defaults, which are also the upper limit in this example, of 640 × 400 pixels at offset 0, 0. An application requests an image size of 300 × 225 pixels, assuming video will be scaled down from the “full picture†accordingly. The driver sets the image size to the closest possible values 304 × 224, then chooses the cropping rectangle closest to the requested size, that is 608 × 224 (224 × 2:1 would exceed the limit 400). The offset 0, 0 is still valid, thus unmodified. Given the default cropping rectangle reported by ”…””}”(hj«h²hh³Nh´Nubh)”}”(hŒ&:ref:`VIDIOC_CROPCAP `”h]”j)”}”(hjµh]”hŒVIDIOC_CROPCAP”…””}”(hj·h²hh³Nh´Nubah}”(h]”h ]”(j Œstd”Œstd-ref”eh"]”h$]”h&]”uh1hÿhj³ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jŒ refdomain”jÁŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆjŒvidioc_cropcap”uh1hh³hÇh´K„hj«ubhŒT the application can easily propose another offset to center the cropping rectangle.”…””}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K„hj»h²hubhò)”}”(hXQNow the application may insist on covering an area using a picture aspect ratio closer to the original request, so it asks for a cropping rectangle of 608 × 456 pixels. The present scaling factors limit cropping to 640 × 384, so the driver returns the cropping size 608 × 384 and adjusts the image size to closest possible 304 × 192.”h]”hXQNow the application may insist on covering an area using a picture aspect ratio closer to the original request, so it asks for a cropping rectangle of 608 × 456 pixels. The present scaling factors limit cropping to 640 × 384, so the driver returns the cropping size 608 × 384 and adjusts the image size to closest possible 304 × 192.”…””}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K‘hj»h²hubeh}”(h]”Œscaling-adjustments”ah ]”h"]”Œscaling adjustments”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Knubh×)”}”(hhh]”(hÜ)”}”(hŒExamples”h]”hŒExamples”…””}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjóh²hh³hÇh´K™ubhò)”}”(hX Source and target rectangles shall remain unchanged across closing and reopening a device, such that piping data into or out of a device will work without special preparations. More advanced applications should ensure the parameters are suitable before starting I/O.”h]”hX Source and target rectangles shall remain unchanged across closing and reopening a device, such that piping data into or out of a device will work without special preparations. More advanced applications should ensure the parameters are suitable before starting I/O.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K›hjóh²hubhì)”}”(hŒ~On the next two examples, a video capture device is assumed; change ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` for other types of device.”h]”hò)”}”(hŒ~On the next two examples, a video capture device is assumed; change ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` for other types of device.”h]”(hŒDOn the next two examples, a video capture device is assumed; change ”…””}”(hjh²hh³Nh´NubjÖ)”}”(hŒ``V4L2_BUF_TYPE_VIDEO_CAPTURE``”h]”hŒV4L2_BUF_TYPE_VIDEO_CAPTURE”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÕhjubhŒ for other types of device.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´K¢hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjóh²hh³hÇh´Nubeh}”(h]”Œexamples”ah ]”h"]”Œexamples”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K™ubh×)”}”(hhh]”(hÜ)”}”(hŒ*Example: Resetting the cropping parameters”h]”hŒ*Example: Resetting the cropping parameters”…””}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjDh²hh³hÇh´K¦ubhŒ literal_block”“”)”}”(hXstruct v4l2_cropcap cropcap; struct v4l2_crop crop; memset (&cropcap, 0, sizeof (cropcap)); cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_CROPCAP, &cropcap)) { perror ("VIDIOC_CROPCAP"); exit (EXIT_FAILURE); } memset (&crop, 0, sizeof (crop)); crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; crop.c = cropcap.defrect; /* Ignore if cropping is not supported (EINVAL). */ if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) && errno != EINVAL) { perror ("VIDIOC_S_CROP"); exit (EXIT_FAILURE); }”h]”hXstruct v4l2_cropcap cropcap; struct v4l2_crop crop; memset (&cropcap, 0, sizeof (cropcap)); cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_CROPCAP, &cropcap)) { perror ("VIDIOC_CROPCAP"); exit (EXIT_FAILURE); } memset (&crop, 0, sizeof (crop)); crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; crop.c = cropcap.defrect; /* Ignore if cropping is not supported (EINVAL). */ if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) && errno != EINVAL) { perror ("VIDIOC_S_CROP"); exit (EXIT_FAILURE); }”…””}”hjWsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”j÷Œhighlight_args”}”uh1jUh³hÇh´K¨hjDh²hubeh}”(h]”Œ)example-resetting-the-cropping-parameters”ah ]”h"]”Œ*example: resetting the cropping parameters”ah$]”h&]”uh1hÖhhØh²hh³hÇh´K¦ubh×)”}”(hhh]”(hÜ)”}”(hŒExample: Simple downscaling”h]”hŒExample: Simple downscaling”…””}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjqh²hh³hÇh´KÃubjV)”}”(hX\struct v4l2_cropcap cropcap; struct v4l2_format format; reset_cropping_parameters (); /* Scale down to 1/4 size of full picture. */ memset (&format, 0, sizeof (format)); /* defaults */ format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; format.fmt.pix.width = cropcap.defrect.width >> 1; format.fmt.pix.height = cropcap.defrect.height >> 1; format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; if (-1 == ioctl (fd, VIDIOC_S_FMT, &format)) { perror ("VIDIOC_S_FORMAT"); exit (EXIT_FAILURE); } /* We could check the actual image size now, the actual scaling factor or if the driver can scale at all. */”h]”hX\struct v4l2_cropcap cropcap; struct v4l2_format format; reset_cropping_parameters (); /* Scale down to 1/4 size of full picture. */ memset (&format, 0, sizeof (format)); /* defaults */ format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; format.fmt.pix.width = cropcap.defrect.width >> 1; format.fmt.pix.height = cropcap.defrect.height >> 1; format.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV; if (-1 == ioctl (fd, VIDIOC_S_FMT, &format)) { perror ("VIDIOC_S_FORMAT"); exit (EXIT_FAILURE); } /* We could check the actual image size now, the actual scaling factor or if the driver can scale at all. */”…””}”hj‚sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆje‰jfj÷jg}”uh1jUh³hÇh´KÅhjqh²hubeh}”(h]”Œexample-simple-downscaling”ah ]”h"]”Œexample: simple downscaling”ah$]”h&]”uh1hÖhhØh²hh³hÇh´KÃubh×)”}”(hhh]”(hÜ)”}”(hŒ!Example: Selecting an output area”h]”hŒ!Example: Selecting an output area”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhj™h²hh³hÇh´Kßubhì)”}”(hŒ&This example assumes an output device.”h]”hò)”}”(hj¬h]”hŒ&This example assumes an output device.”…””}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´Káhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhj™h²hh³hÇh´NubjV)”}”(hXÔstruct v4l2_cropcap cropcap; struct v4l2_crop crop; memset (&cropcap, 0, sizeof (cropcap)); cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; if (-1 == ioctl (fd, VIDIOC_CROPCAP;, &cropcap)) { perror ("VIDIOC_CROPCAP"); exit (EXIT_FAILURE); } memset (&crop, 0, sizeof (crop)); crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; crop.c = cropcap.defrect; /* Scale the width and height to 50 % of their original size and center the output. */ crop.c.width /= 2; crop.c.height /= 2; crop.c.left += crop.c.width / 2; crop.c.top += crop.c.height / 2; /* Ignore if cropping is not supported (EINVAL). */ if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) && errno != EINVAL) { perror ("VIDIOC_S_CROP"); exit (EXIT_FAILURE); }”h]”hXÔstruct v4l2_cropcap cropcap; struct v4l2_crop crop; memset (&cropcap, 0, sizeof (cropcap)); cropcap.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; if (-1 == ioctl (fd, VIDIOC_CROPCAP;, &cropcap)) { perror ("VIDIOC_CROPCAP"); exit (EXIT_FAILURE); } memset (&crop, 0, sizeof (crop)); crop.type = V4L2_BUF_TYPE_VIDEO_OUTPUT; crop.c = cropcap.defrect; /* Scale the width and height to 50 % of their original size and center the output. */ crop.c.width /= 2; crop.c.height /= 2; crop.c.left += crop.c.width / 2; crop.c.top += crop.c.height / 2; /* Ignore if cropping is not supported (EINVAL). */ if (-1 == ioctl (fd, VIDIOC_S_CROP, &crop) && errno != EINVAL) { perror ("VIDIOC_S_CROP"); exit (EXIT_FAILURE); }”…””}”hjÁsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆje‰jfj÷jg}”uh1jUh³hÇh´Kãhj™h²hubeh}”(h]”Œ example-selecting-an-output-area”ah ]”h"]”Œ!example: selecting an output area”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Kßubh×)”}”(hhh]”(hÜ)”}”(hŒ0Example: Current scaling factor and pixel aspect”h]”hŒ0Example: Current scaling factor and pixel aspect”…””}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjØh²hh³hÇh´Mubhì)”}”(hŒ,This example assumes a video capture device.”h]”hò)”}”(hjëh]”hŒ,This example assumes a video capture device.”…””}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hñh³hÇh´Mhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1hëhjØh²hh³hÇh´NubjV)”}”(hXstruct v4l2_cropcap cropcap; struct v4l2_crop crop; struct v4l2_format format; double hscale, vscale; double aspect; int dwidth, dheight; memset (&cropcap, 0, sizeof (cropcap)); cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_CROPCAP, &cropcap)) { perror ("VIDIOC_CROPCAP"); exit (EXIT_FAILURE); } memset (&crop, 0, sizeof (crop)); crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_G_CROP, &crop)) { if (errno != EINVAL) { perror ("VIDIOC_G_CROP"); exit (EXIT_FAILURE); } /* Cropping not supported. */ crop.c = cropcap.defrect; } memset (&format, 0, sizeof (format)); format.fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_G_FMT, &format)) { perror ("VIDIOC_G_FMT"); exit (EXIT_FAILURE); } /* The scaling applied by the driver. */ hscale = format.fmt.pix.width / (double) crop.c.width; vscale = format.fmt.pix.height / (double) crop.c.height; aspect = cropcap.pixelaspect.numerator / (double) cropcap.pixelaspect.denominator; aspect = aspect * hscale / vscale; /* Devices following ITU-R BT.601 do not capture square pixels. For playback on a computer monitor we should scale the images to this size. */ dwidth = format.fmt.pix.width / aspect; dheight = format.fmt.pix.height;”h]”hXstruct v4l2_cropcap cropcap; struct v4l2_crop crop; struct v4l2_format format; double hscale, vscale; double aspect; int dwidth, dheight; memset (&cropcap, 0, sizeof (cropcap)); cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_CROPCAP, &cropcap)) { perror ("VIDIOC_CROPCAP"); exit (EXIT_FAILURE); } memset (&crop, 0, sizeof (crop)); crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_G_CROP, &crop)) { if (errno != EINVAL) { perror ("VIDIOC_G_CROP"); exit (EXIT_FAILURE); } /* Cropping not supported. */ crop.c = cropcap.defrect; } memset (&format, 0, sizeof (format)); format.fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl (fd, VIDIOC_G_FMT, &format)) { perror ("VIDIOC_G_FMT"); exit (EXIT_FAILURE); } /* The scaling applied by the driver. */ hscale = format.fmt.pix.width / (double) crop.c.width; vscale = format.fmt.pix.height / (double) crop.c.height; aspect = cropcap.pixelaspect.numerator / (double) cropcap.pixelaspect.denominator; aspect = aspect * hscale / vscale; /* Devices following ITU-R BT.601 do not capture square pixels. For playback on a computer monitor we should scale the images to this size. */ dwidth = format.fmt.pix.width / aspect; dheight = format.fmt.pix.height;”…””}”hjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆje‰jfj÷jg}”uh1jUh³hÇh´M hjØh²hubeh}”(h]”Œ/example-current-scaling-factor-and-pixel-aspect”ah ]”h"]”Œ0example: current scaling factor and pixel aspect”ah$]”h&]”uh1hÖhhØh²hh³hÇh´Mubeh}”(h]”(Œ1image-cropping-insertion-and-scaling-the-crop-api”hÕeh ]”h"]”(Œ5image cropping, insertion and scaling -- the crop api”Œcrop”eh$]”h&]”uh1hÖhhh²hh³hÇh´KjÉ}”jhÊsjË}”hÕhÊsubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÛNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jEŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”(hÕ]”hÊajq]”jgauŒnameids”}”(jhÕjjj¸jµjÆjqjðjíjAj>jnjkj–j“jÕjÒjjuŒ nametypes”}”(jˆj‰j¸‰jƈjð‰jA‰jn‰j–‰jÕ‰j‰uh}”(hÕhØjhØjµjVjqjujíj»j>jójkjDj“jqjÒj™jjØj»jzuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jSKs…”R”Œparse_messages”]”Œtransform_messages”]”(hŒsystem_message”“”)”}”(hhh]”hò)”}”(hhh]”hŒ*Hyperlink target "crop" is not referenced.”…””}”hj°sbah}”(h]”h ]”h"]”h$]”h&]”uh1hñhj­ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j«ubj¬)”}”(hhh]”hò)”}”(hhh]”hŒ0Hyperlink target "crop-scale" is not referenced.”…””}”hjËsbah}”(h]”h ]”h"]”h$]”h&]”uh1hñhjÈubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jÅŒsource”hÇŒline”K?uh1j«ubeŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.