€•gRŒ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”ŒA/translations/zh_CN/driver-api/media/drivers/sh_mobile_ceu_camera”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒA/translations/zh_TW/driver-api/media/drivers/sh_mobile_ceu_camera”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒA/translations/it_IT/driver-api/media/drivers/sh_mobile_ceu_camera”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒA/translations/ja_JP/driver-api/media/drivers/sh_mobile_ceu_camera”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒA/translations/ko_KR/driver-api/media/drivers/sh_mobile_ceu_camera”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒA/translations/pt_BR/driver-api/media/drivers/sh_mobile_ceu_camera”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”ŒA/translations/sp_SP/driver-api/media/drivers/sh_mobile_ceu_camera”Œ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Œ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/driver-api/media/drivers/sh_mobile_ceu_camera.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒGCropping and Scaling algorithm, used in the sh_mobile_ceu_camera driver”h]”hŒGCropping and Scaling algorithm, used in the sh_mobile_ceu_camera driver”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒ5Author: Guennadi Liakhovetski ”h]”(hŒAuthor: Guennadi Liakhovetski <”…””}”(hhßh²hh³Nh´NubhŒ reference”“”)”}”(hŒg.liakhovetski@gmx.de”h]”hŒg.liakhovetski@gmx.de”…””}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:g.liakhovetski@gmx.de”uh1hçhhßubhŒ>”…””}”(hhßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Terminology”h]”hŒ Terminology”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K ubhÞ)”}”(hŒ–sensor scales: horizontal and vertical scales, configured by the sensor driver host scales: -"- host driver combined scales: sensor_scale * host_scale”h]”hŒ˜sensor scales: horizontal and vertical scales, configured by the sensor driver host scales: -â€- host driver combined scales: sensor_scale * host_scale”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjh²hubeh}”(h]”Œ terminology”ah ]”h"]”Œ terminology”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒ!Generic scaling / cropping scheme”h]”hŒ!Generic scaling / cropping scheme”…””}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj*h²hh³hÇh´KubhŒ literal_block”“”)”}”(hX†-1-- | -2-- -\ | --\ | --\ +-5-- . -- -3-- -\ | `... -\ | `... -4-- . - -7.. | `. | `. .6-- | | . .6'- | .´ | ... -4'- .´ | ...´ - -7'. +-5'- .´ -/ | -- -3'- -/ | --/ | --/ -2'- -/ | | -1'-”h]”hX†-1-- | -2-- -\ | --\ | --\ +-5-- . -- -3-- -\ | `... -\ | `... -4-- . - -7.. | `. | `. .6-- | | . .6'- | .´ | ... -4'- .´ | ...´ - -7'. +-5'- .´ -/ | -- -3'- -/ | --/ | --/ -2'- -/ | | -1'-”…””}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒforce”‰Œlanguage”Œnone”Œhighlight_args”}”uh1j;h³hÇh´Khj*h²hubhÞ)”}”(hŒÇIn the above chart minuses and slashes represent "real" data amounts, points and accents represent "useful" data, basically, CEU scaled and cropped output, mapped back onto the client's source plane.”h]”hŒÑIn the above chart minuses and slashes represent “real†data amounts, points and accents represent “useful†data, basically, CEU scaled and cropped output, mapped back onto the client’s source plane.”…””}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hj*h²hubhÞ)”}”(hŒ6Such a configuration can be produced by user requests:”h]”hŒ6Such a configuration can be produced by user requests:”…””}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hj*h²hubhÞ)”}”(hŒ^S_CROP(left / top = (5) - (1), width / height = (5') - (5)) S_FMT(width / height = (6') - (6))”h]”hŒbS_CROP(left / top = (5) - (1), width / height = (5’) - (5)) S_FMT(width / height = (6’) - (6))”…””}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hj*h²hubhÞ)”}”(hŒHere:”h]”hŒHere:”…””}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K6hj*h²hubhÞ)”}”(hXž(1) to (1') - whole max width or height (1) to (2) - sensor cropped left or top (2) to (2') - sensor cropped width or height (3) to (3') - sensor scale (3) to (4) - CEU cropped left or top (4) to (4') - CEU cropped width or height (5) to (5') - reverse sensor scale applied to CEU cropped width or height (2) to (5) - reverse sensor scale applied to CEU cropped left or top (6) to (6') - CEU scale - user window”h]”hXª(1) to (1’) - whole max width or height (1) to (2) - sensor cropped left or top (2) to (2’) - sensor cropped width or height (3) to (3’) - sensor scale (3) to (4) - CEU cropped left or top (4) to (4’) - CEU cropped width or height (5) to (5’) - reverse sensor scale applied to CEU cropped width or height (2) to (5) - reverse sensor scale applied to CEU cropped left or top (6) to (6’) - CEU scale - user window”…””}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K8hj*h²hubeh}”(h]”Œgeneric-scaling-cropping-scheme”ah ]”h"]”Œ!generic scaling / cropping scheme”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒS_FMT”h]”hŒS_FMT”…””}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjžh²hh³hÇh´KDubhÞ)”}”(hŒ5Do not touch input rectangle - it is already optimal.”h]”hŒ5Do not touch input rectangle - it is already optimal.”…””}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KFhjžh²hubhŒenumerated_list”“”)”}”(hhh]”hŒ list_item”“”)”}”(hŒMCalculate current sensor scales: scale_s = ((2') - (2)) / ((3') - (3)) ”h]”(hÞ)”}”(hŒ Calculate current sensor scales:”h]”hŒ Calculate current sensor scales:”…””}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjÄubhŒ block_quote”“”)”}”(hŒ&scale_s = ((2') - (2)) / ((3') - (3)) ”h]”hÞ)”}”(hŒ%scale_s = ((2') - (2)) / ((3') - (3))”h]”hŒ)scale_s = ((2’) - (2)) / ((3’) - (3))”…””}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KJhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´KJhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¿h²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1j½hjžh²hh³hÇh´KHubhÞ)”}”(hŒ2. Calculate "effective" input crop (sensor subwindow) - CEU crop scaled back at current sensor scales onto input window - this is user S_CROP:”h]”hŒ“2. Calculate “effective†input crop (sensor subwindow) - CEU crop scaled back at current sensor scales onto input window - this is user S_CROP:”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KLhjžh²hubj×)”}”(hŒ.width_u = (5') - (5) = ((4') - (4)) * scale_s ”h]”hÞ)”}”(hŒ-width_u = (5') - (5) = ((4') - (4)) * scale_s”h]”hŒ1width_u = (5’) - (5) = ((4’) - (4)) * scale_s”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´KOhjžh²hubhÞ)”}”(hŒX3. Calculate new combined scales from "effective" input window to requested user window:”h]”hŒ\3. Calculate new combined scales from “effective†input window to requested user window:”…””}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KQhjžh²hubj×)”}”(hŒ$scale_comb = width_u / ((6') - (6)) ”h]”hÞ)”}”(hŒ#scale_comb = width_u / ((6') - (6))”h]”hŒ%scale_comb = width_u / ((6’) - (6))”…””}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KThj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´KThjžh²hubhÞ)”}”(hŒS4. Calculate sensor output window by applying combined scales to real input window:”h]”hŒS4. Calculate sensor output window by applying combined scales to real input window:”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KVhjžh²hubj×)”}”(hŒ7width_s_out = ((7') - (7)) = ((2') - (2)) / scale_comb ”h]”hÞ)”}”(hŒ6width_s_out = ((7') - (7)) = ((2') - (2)) / scale_comb”h]”hŒ:width_s_out = ((7’) - (7)) = ((2’) - (2)) / scale_comb”…””}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KYhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´KYhjžh²hubj¾)”}”(hhh]”(jÃ)”}”(hŒlApply iterative sensor S_FMT for sensor output window. subdev->video_ops->s_fmt(.width = width_s_out) ”h]”(hÞ)”}”(hŒ6Apply iterative sensor S_FMT for sensor output window.”h]”hŒ6Apply iterative sensor S_FMT for sensor output window.”…””}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hjvubj×)”}”(hŒ/subdev->video_ops->s_fmt(.width = width_s_out) ”h]”hÞ)”}”(hŒ.subdev->video_ops->s_fmt(.width = width_s_out)”h]”hŒ.subdev->video_ops->s_fmt(.width = width_s_out)”…””}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K]hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´K]hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsh²hh³hÇh´NubjÃ)”}”(hŒ&Retrieve sensor output window (g_fmt) ”h]”hÞ)”}”(hŒ%Retrieve sensor output window (g_fmt)”h]”hŒ%Retrieve sensor output window (g_fmt)”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K_hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsh²hh³hÇh´NubjÃ)”}”(hŒUCalculate new sensor scales: scale_s_new = ((3')_new - (3)_new) / ((2') - (2)) ”h]”(hÞ)”}”(hŒCalculate new sensor scales:”h]”hŒCalculate new sensor scales:”…””}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kahj¾ubj×)”}”(hŒ2scale_s_new = ((3')_new - (3)_new) / ((2') - (2)) ”h]”hÞ)”}”(hŒ1scale_s_new = ((3')_new - (3)_new) / ((2') - (2))”h]”hŒ5scale_s_new = ((3’)_new - (3)_new) / ((2’) - (2))”…””}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KchjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´Kchj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jüjýjþhjÿjŒstart”Kuh1j½hjžh²hh³hÇh´K[ubhÞ)”}”(hŒZ8. Calculate new CEU crop - apply sensor scales to previously calculated "effective" crop:”h]”hŒ^8. Calculate new CEU crop - apply sensor scales to previously calculated “effective†crop:”…””}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kehjžh²hubj×)”}”(hŒpwidth_ceu = (4')_new - (4)_new = width_u / scale_s_new left_ceu = (4)_new - (3)_new = ((5) - (2)) / scale_s_new ”h]”hÞ)”}”(hŒowidth_ceu = (4')_new - (4)_new = width_u / scale_s_new left_ceu = (4)_new - (3)_new = ((5) - (2)) / scale_s_new”h]”hŒqwidth_ceu = (4’)_new - (4)_new = width_u / scale_s_new left_ceu = (4)_new - (3)_new = ((5) - (2)) / scale_s_new”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´Khhjžh²hubj¾)”}”(hhh]”(jÃ)”}”(hŒaUse CEU cropping to crop to the new window: ceu_crop(.width = width_ceu, .left = left_ceu) ”h]”(hÞ)”}”(hŒ+Use CEU cropping to crop to the new window:”h]”hŒ+Use CEU cropping to crop to the new window:”…””}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kkhjubj×)”}”(hŒ/ceu_crop(.width = width_ceu, .left = left_ceu) ”h]”hÞ)”}”(hŒ.ceu_crop(.width = width_ceu, .left = left_ceu)”h]”hŒ.ceu_crop(.width = width_ceu, .left = left_ceu)”…””}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kmhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´Kmhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³hÇh´NubjÃ)”}”(hŒ[Use CEU scaling to scale to the requested user window: scale_ceu = width_ceu / width ”h]”(hÞ)”}”(hŒ6Use CEU scaling to scale to the requested user window:”h]”hŒ6Use CEU scaling to scale to the requested user window:”…””}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KohjNubj×)”}”(hŒscale_ceu = width_ceu / width ”h]”hÞ)”}”(hŒscale_ceu = width_ceu / width”h]”hŒscale_ceu = width_ceu / width”…””}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kqhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÖh³hÇh´KqhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jüjýjþhjÿjjôK uh1j½hjžh²hh³hÇh´Kkubeh}”(h]”Œs-fmt”ah ]”h"]”Œs_fmt”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KDubhÉ)”}”(hhh]”(hÎ)”}”(hŒS_CROP”h]”hŒS_CROP”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjŒh²hh³hÇh´KuubhÞ)”}”(hŒ+The :ref:`V4L2 crop API ` says:”h]”(hŒThe ”…””}”(hjh²hh³Nh´Nubh)”}”(hŒ!:ref:`V4L2 crop API `”h]”hŒinline”“”)”}”(hj§h]”hŒ V4L2 crop API”…””}”(hj«h²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j©hj¥ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œ-driver-api/media/drivers/sh_mobile_ceu_camera”Œ refdomain”j¶Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆŒ reftarget”Œ crop-scale”uh1hh³hÇh´KwhjubhŒ says:”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KwhjŒh²hubhÞ)”}”(hŒ"...specification does not define an origin or units. However by convention drivers should horizontally count unscaled samples relative to 0H."”h]”hŒ““...specification does not define an origin or units. However by convention drivers should horizontally count unscaled samples relative to 0H.—…””}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KyhjŒh²hubhÞ)”}”(hŒSWe choose to follow the advise and interpret cropping units as client input pixels.”h]”hŒSWe choose to follow the advise and interpret cropping units as client input pixels.”…””}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K|hjŒh²hubhÞ)”}”(hŒ/Cropping is performed in the following 6 steps:”h]”hŒ/Cropping is performed in the following 6 steps:”…””}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhjŒh²hubj¾)”}”(hhh]”(jÃ)”}”(hŒ0Request exactly user rectangle from the sensor. ”h]”hÞ)”}”(hŒ/Request exactly user rectangle from the sensor.”h]”hŒ/Request exactly user rectangle from the sensor.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþh²hh³hÇh´NubjÃ)”}”(hŒ‰If smaller - iterate until a larger one is obtained. Result: sensor cropped to 2 : 2', target crop 5 : 5', current output format 6' - 6. ”h]”hÞ)”}”(hŒˆIf smaller - iterate until a larger one is obtained. Result: sensor cropped to 2 : 2', target crop 5 : 5', current output format 6' - 6.”h]”hŒŽIf smaller - iterate until a larger one is obtained. Result: sensor cropped to 2 : 2’, target crop 5 : 5’, current output format 6’ - 6.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kƒhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþh²hh³hÇh´NubjÃ)”}”(hŒŠIn the previous step the sensor has tried to preserve its output frame as good as possible, but it could have changed. Retrieve it again. ”h]”hÞ)”}”(hŒ‰In the previous step the sensor has tried to preserve its output frame as good as possible, but it could have changed. Retrieve it again.”h]”hŒ‰In the previous step the sensor has tried to preserve its output frame as good as possible, but it could have changed. Retrieve it again.”…””}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K†hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþh²hh³hÇh´NubjÃ)”}”(hŒ‡Sensor scaled to 3 : 3'. Sensor's scale is (2' - 2) / (3' - 3). Calculate intermediate window: 4' - 4 = (5' - 5) * (3' - 3) / (2' - 2) ”h]”hÞ)”}”(hŒ†Sensor scaled to 3 : 3'. Sensor's scale is (2' - 2) / (3' - 3). Calculate intermediate window: 4' - 4 = (5' - 5) * (3' - 3) / (2' - 2)”h]”hŒ–Sensor scaled to 3 : 3’. Sensor’s scale is (2’ - 2) / (3’ - 3). Calculate intermediate window: 4’ - 4 = (5’ - 5) * (3’ - 3) / (2’ - 2)”…””}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‰hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþh²hh³hÇh´NubjÃ)”}”(hŒ5Calculate and apply host scale = (6' - 6) / (4' - 4) ”h]”hÞ)”}”(hŒ4Calculate and apply host scale = (6' - 6) / (4' - 4)”h]”hŒ8Calculate and apply host scale = (6’ - 6) / (4’ - 4)”…””}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŒhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþh²hh³hÇh´NubjÃ)”}”(hŒDCalculate and apply host crop: 6 - 7 = (5 - 2) * (6' - 6) / (5' - 5)”h]”hÞ)”}”(hj{h]”hŒHCalculate and apply host crop: 6 - 7 = (5 - 2) * (6’ - 6) / (5’ - 5)”…””}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŽhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”jüjýjþhjÿjuh1j½hjŒh²hh³hÇh´Kubeh}”(h]”Œs-crop”ah ]”h"]”Œs_crop”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kuubeh}”(h]”ŒFcropping-and-scaling-algorithm-used-in-the-sh-mobile-ceu-camera-driver”ah ]”h"]”ŒGcropping and scaling algorithm, used in the sh_mobile_ceu_camera driver”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(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”jÉŒ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”}”Œnameids”}”(j£j j'j$j›j˜j‰j†j›j˜uŒ nametypes”}”(j£‰j'‰j›‰j‰‰j›‰uh}”(j hÊj$jj˜j*j†jžj˜jŒuŒ 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”“”}”…”R”Œparse_messages”]”(hŒsystem_message”“”)”}”(hhh]”hÞ)”}”(hŒ:Enumerated list start value not ordinal-1: "5" (ordinal 5)”h]”hŒ>Enumerated list start value not ordinal-1: “5†(ordinal 5)”…””}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj-ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j+hjžh²hh³hÇh´K[ubj,)”}”(hhh]”hÞ)”}”(hŒ:Enumerated list start value not ordinal-1: "9" (ordinal 9)”h]”hŒ>Enumerated list start value not ordinal-1: “9†(ordinal 9)”…””}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhjIubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”jFŒsource”hÇŒline”Kuh1j+hjžh²hh³hÇh´KkubeŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.