€•nQŒ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Œ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”…””}”(hhòhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hhïhž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 hhïhž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”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjhž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 Khjhž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.”…””}”(hj<hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K-hjhžhubhÊ)”}”(hŒ6Such a configuration can be produced by user requests:”h]”hŒ6Such a configuration can be produced by user requests:”…””}”(hjJhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K1hjhž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))”…””}”(hjXhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K3hjhžhubhÊ)”}”(hŒHere:”h]”hŒHere:”…””}”(hjfhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K6hjhž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”…””}”(hjthžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K8hjhž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”…””}”(hjhž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:”…””}”(hjíhž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”…””}”(hjÿhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KOhjûubah}”(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:”…””}”(hjhž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))”…””}”(hj%hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KThj!ubah}”(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:”…””}”(hj9hž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”…””}”(hjKhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KYhjGubah}”(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.”…””}”(hjfhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K[hjbubjÃ)”}”(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)”…””}”(hjxhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K]hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhŸh³h K]hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j®hj_hž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®hj_hž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®hj_hž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”…””}”(hjóhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khhjïubah}”(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:”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kkhj ubjÃ)”}”(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)”…””}”(hj hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kmhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhŸh³h Kmhj ubeh}”(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:”…””}”(hj>hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kohj:ubjÃ)”}”(hŒscale_ceu = width_ceu / width ”h]”hÊ)”}”(hŒscale_ceu = width_ceu / width”h]”hŒscale_ceu = width_ceu / width”…””}”(hjPhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KqhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhŸh³h Kqhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j®hjhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”jèjéjêhjëjìjà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”…””}”(hj{hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h¹hjxhžhhŸh³h KuubhÊ)”}”(hŒ+The :ref:`V4L2 crop API ` says:”h]”(hŒThe ”…””}”(hj‰hž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 Kwhj‰ubhŒ says:”…””}”(hj‰hžhhŸNh Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Kwhjxhž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 Kyhjxhž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|hjxhž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 Khjxhž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.”…””}”(hjñhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h Khjíubah}”(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.”…””}”(hj hž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.”…””}”(hj!hž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Œ‡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)”…””}”(hj9hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h K‰hj5ubah}”(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)”…””}”(hjQhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KŒhjMubah}”(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Ê)”}”(hjgh]”hŒHCalculate and apply host crop: 6 - 7 = (5 - 2) * (6’ - 6) / (5’ - 5)”…””}”(hjihžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhŸh³h KŽhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®hjêhžhhŸh³h Nubeh}”(h]”h ]”h"]”h$]”h&]”jèjéjêhjëjìuh1j©hjxhž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”}”(jjŒjjj‡j„jujrj‡j„uŒ nametypes”}”(j‰j‰j‡‰ju‰j‡‰uh}”(jŒh¶jhïj„jjrjŠj„jxuŒ 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)”…””}”(hjhžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhjubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”h³Œline”Kuh1jhjŠ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)”…””}”(hj8hžhhŸNh Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÉhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”j2Œsource”h³Œline”Kuh1jhjŠhžhhŸh³h KkubeŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nhžhub.