[libcamera-devel] [PATCH v4 10/10] android: libcamera: add useful debug prints

nicholas at rothemail.net nicholas at rothemail.net
Fri Oct 28 00:41:35 CEST 2022


From: Nicholas Roth <nicholas at rothemail.net>

I identified opportunities to make libcamera's log output easier to
understand while working to get it working on my Android device as a
HAL. These additional logging statements came out of that and will
hopefully prove useful to Android distribution maintainers with the same
goal as mine and to users who attempt to debug tools like Waydroid.

Signed-off-by: Nicholas Roth <nicholas at rothemail.net>
---
 src/android/.camera_hal_config.cpp.swp | Bin 16384 -> 0 bytes
 src/android/camera_capabilities.cpp    |  12 +++++++++---
 src/android/camera_hal_manager.cpp     |   3 ++-
 src/libcamera/.v4l2_subdevice.cpp.swp  | Bin 0 -> 40960 bytes
 4 files changed, 11 insertions(+), 4 deletions(-)
 delete mode 100644 src/android/.camera_hal_config.cpp.swp
 create mode 100644 src/libcamera/.v4l2_subdevice.cpp.swp

diff --git a/src/android/.camera_hal_config.cpp.swp b/src/android/.camera_hal_config.cpp.swp
deleted file mode 100644
index e6b7220ae345f309242d3d97dd369fe783e65ed6..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16384
zcmeI3TWlOx8OMjVp)92r1zy at baI!}3uI0VhQLAcVTe8<{XVs1E_!2dw)@pX<?0S;*
z%ywqhsc|AC9(VvkTLkR`O{E3_MJ??^RjC4rzCck?C7>@r)RYPYR0O1|Patvof9IUp
z8SmQ81(1-Km44pc*>nA$bG|v>cgFSN at yb#5Kz>xi>n=@u_m-39o45Vr<}cp8Pjfss
zSflG#d5Ltnwt1CgT49}Awowqt3saTZYGrQap+d`cxY6XUU*L}h+;fZ;F4awAoqI;X
z_soLfSe|QJ1$n8qX0&Ri>on|U-fXw8R%h~iqClbm6zBwv+yl33hek(=q{l$|Ap7|K
zl|-6Efkc5sfkc5sfkc5sfkc5sfkc7-BL#x?P1<MC-<wpQpH%N3>UqCeeb?3dQ$4?{
zugP1YK%zjRK%zjRK%zjRK%zjRK%zjRK%zjRK%&6^paO=aX}6+XTND7m`G4sD|MX5x
zdlP&Id<$@3fGIEua^L{C2mJL8P5Tx2C3pcm56*)xfk!|a90LpB6JS61!|j^(d+-i;
z3;Z0M180E`2EnC|Y1)^;d2j+82P<F%6hICPgAZ=gv{%5(;3e<`I1egdAGq>S)CVqs
z*TIY6N$>^mdEkLhgDG%77y(6a0NevEr_es|8u$UY2p$KI0T;}HF>n}Y;GZASv|oT9
zfgge`a0J{3M!^Ue1fK!};4KWmbKu+Ho8WVx4O}n^M!;R*?GJ0(Prw`CIS_z4Fu-xJ
z43 at yH;L<*f2Y3lw08fJzuncsN0#|O)wC{sgz&F4}@D%tO_$oL84uHGC`v?HN11^JS
zzy;6&tKdE`02ufr_zULJpTQOINAP2C4$vI?3{bBvEv2(Ep80TmyWZj%Kd^Lt-8ju_
z9mjs8!^ajpd&3C$L?)XZX8cjx5ByrDVYGaX?;A$Tw!*JkNjxrc#AubolOej^b0L#O
z6SS1agO2C0;$bZ%pC*yXr;WhK<6##guw93Zv+(0#=!9Hhwp_U~cYLyn%&FAa7)!4>
zryci<(@n0kG{f~McPdq#pUoVZtjcPJS=sYkFRP{O2FrxW*cdCavuC^6*u*$Hbbm3+
zwotq61cydzLG<G|lMSD*pW<e4G98wZUd=aoFs9N^WO5@}YJGpxsp^CAGV*wsCNONr
z&qRe~vl>Q+UJNg(Wh50F>=iGop<<OTHVA3}b-itPK3`M<XHcOZuoK35OZFlxPktNj
z8L6E*!7&GLy|)?phGE)H6C+rfJX&6ytj$c8Ds!{7smaoV7&XepsQ)e3R6{+^(sjc;
zoyM44b7?b+^K;86uCJtq2PILImJ(Ch4?Jp2R9Vl^g+HjFi{+Wfq|-MreBA>7E5lb+
zqWuSkkCf|~5 at P+T37~X}CLH>cDh#m&nnkSbxoz$Rn=G2HY^bp7To?63ZNHIvy1L4G
zuD%>F0W(8#a{9IGN%^T_tzPSjwEbz at BwJ*7n=pP at i*hlF)wuWSxu%ua+XFSEu^AXH
z$%@s#9LXZ~+ZC}KgxLM13(-*&L)-D(9+_Jj(uV6XRkhIxTsGKMDxPwc>1?xWD`eq*
z-VhQ&9APH=n<LCzf3{v_aUbY2Mt!-&aC)vAWKX8$So-O`#*&ieCQz_4t6`p9rg8Z5
zUbFb1EVIA)yYyVNR at otWH?6e;Z!EI86S$?g0eVK4#KQ8Fna(uq78lk>HLQkI>LX2H
zY9{{Bje+I!`R?cNPNdVVxdZd8(uAvL`*kJc2(zuUPHDU8|Lro1-7>>wM-|9^uwadE
zGLJX7#{yS&;fx)u(REgtW*Nh0hVS!rY)dRw-&A+DCG1pO$kgNxo=pvS#iIG=HYl5D
ze%UbBRGp!jvboRdkl-}4Q6_6)6GJ(a5u;yGk!#v0&g#k_4IMQGdxuzBw6ri3zcVwY
zHcjoZ*y0`TyJJtV&>UTxeGtoZ2J;|8f7l>R31JAfv{LU*t9z4IAH-G*x5w*kS&b$a
zZ6kyc*<-WN- at VXUl_K*(_vf&z$oluK_3JK6c0a0UPt!^Eu4ku%h1HhZTAZXtO_T-p
zDt`T=OB!~^0abPCE!(7;s+B3VCz>vos*{W5+QQ0IwNlFTj3?b}%ogV4uDdyyV_9r$
z at 2=~rQcc5-w>Dj#smzsYrOD;;?EK=1Xa|hFQOBoEk%L*}w+)kHMW|=J(ewe^F<Tvr
zv#~Y9v(6YER}Xz3%CAkteol8Y6)?#1nQ^k(H8FL({8~Decq~d>H+)`bxlJl9s;lRB
zn(N!E!`h;qTs#jZH?nO{rc7G=0d+Kl%q1+LG(7R&@bEgzDV4=K$7I3Hu>;FOUI;aV
zts4#=jrULhl~Horo1WcV3s|O<WuwK>kzqFLx=kdkIA&ghZNM&RX<_=IT-7#Vtaz?s
zaVM}FHurQ^on5HrM)M;%*UPnFZ#-%m`Tq~XXPt+iOa6a&zW+P;^}hwb0lx+p!6{G#
ze}e!19{3)36>NYGsDUG(2tI)S{w}x--UiQuC%`elz<zKixC8thKK$Rn8{jqYUGM^U
z8hjmWf(0-D-iJT`I(Qa511^BCfXBgOU=$Pq`Tg&qPd@`MgR|fiXo3bf2B^<fkh~HF
z5(N?k5(N?k5(N?k5(REhfph1g82g}&7>LiYskO){iG|UfPOF7r1UxhuM!%Oih(uW2
zH$A%!f7^D1A5N}s|CTu2%_bcecCU!J%k6aqF7#d at cN+nZZY-mg=Z<jTx56Nh3_?+&
zFmO=IH*6#dONa9Y?@0J`vi4Hf;bcSdN-X*<b45w^auu`ERqP9Wi&&co`!PCNkVQsE
z6?6)*DkX^$r86-}!jL$nMEI&-pJ`t2G_zEAdb^bJ5~D1;bXgq(kX-q2q{GCqa75^x
zS1ggTVS9dnQS6KUneZ%S2N5)7TbMNRj0d>_ufu5;?HujGsScf~z}?3uq^@CDa}&ZB
zl<Et=njEU(uq~*8%2S6*u^M9Y6orY&7AZ?bEEtFrky`4s2fiVvQ=LqXnn4+MJo6D*
zW(*WyA>_mm!gh9;-9qiCBUE2rmQE#$n5MW!*+pnZ*XQx^sB7_=meJJpMQ&L0PHR)e
zMPt3mmFMQm;@m>6I;l+D+tk^^X)$xQb at So0Se^~H<5*&*^>k0ppLpY>s4_I0nn4$Y
zFDt@|B%TmHK0UhCjk739v2<doG(R^}o31RfbnIWh^W^8F9a}q}IK>8Cb&VQ;kd$)6
zF-DkFOr7MhWrWx;xqIDi3e|03tPI5eSiKVn1;k_|H at sVh5Oj|+$gFkCp`45A_>sZC
z_dBM^eSa81L5DZt^KWn_h8hh*1O)$i&%HA?j=7MJ#&{2#$nYQX@;nq?J+lL!`h;WE
PK!gP7+;cZs4r~7c$v(c4

diff --git a/src/android/camera_capabilities.cpp b/src/android/camera_capabilities.cpp
index 64bd8dde..ef0d10d0 100644
--- a/src/android/camera_capabilities.cpp
+++ b/src/android/camera_capabilities.cpp
@@ -374,14 +374,20 @@ void CameraCapabilities::computeHwLevel(
 	camera_metadata_enum_android_info_supported_hardware_level
 		hwLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_FULL;
 
-	if (!caps.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR))
+	if (!caps.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR)) {
+		LOG(HAL, Info) << noFull << "missing manual sensor";
 		hwLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
+	}
 
-	if (!caps.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING))
+	if (!caps.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MANUAL_POST_PROCESSING)) {
+		LOG(HAL, Info) << noFull << "missing manual post processing";
 		hwLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
+	}
 
-	if (!caps.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE))
+	if (!caps.count(ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BURST_CAPTURE)) {
+		LOG(HAL, Info) << noFull << "missing burst capture";
 		hwLevel = ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED;
+	}
 
 	found = staticMetadata_->getEntry(ANDROID_SYNC_MAX_LATENCY, &entry);
 	if (!found || *entry.data.i32 != 0) {
diff --git a/src/android/camera_hal_manager.cpp b/src/android/camera_hal_manager.cpp
index 7512cc4e..b229e2d5 100644
--- a/src/android/camera_hal_manager.cpp
+++ b/src/android/camera_hal_manager.cpp
@@ -140,7 +140,8 @@ void CameraHalManager::cameraAdded(std::shared_ptr<Camera> cam)
 	 */
 	if (!isCameraExternal && !halConfig_.exists()) {
 		LOG(HAL, Error)
-			<< "HAL configuration file is mandatory for internal cameras";
+			<< "HAL configuration file is mandatory for internal cameras."
+			<< " Camera " << cam->id() << "failed to load";
 		return;
 	}
 
diff --git a/src/libcamera/.v4l2_subdevice.cpp.swp b/src/libcamera/.v4l2_subdevice.cpp.swp
new file mode 100644
index 0000000000000000000000000000000000000000..f4985643e69f6e8d105e41e293e919c72eb82f99
GIT binary patch
literal 40960
zcmeI53wR_~b>|!Wh!q<fLYz(5UArt`MjESoBza~smdC;xjU>y~jK+G5XFM}BrB+EQ
z-0E(+x<@0+lg9 at RgjYzGBsh-4Ys11WY`(C>Bwu(K+iQqJ0wl0x!!D5EEI1gj4VXX(
z?C+d=tGcSX<<ZbX at +C;$_gAZL-8%Q)bI*O8$Gw{CJv6 at G*`4dp at bk<}<~8RZExh)k
z at 166m=bV=*Rm-&{Nk7ex=F3(Jr^%MtzU<BW?sm<-eed|##Q1^P!`q8~$#WOIa<JVy
zS at WtTw@A`l!Cm&M?)IQsh<!V;qu8Gh>T~nn3BTaw3YE&~irjp@$$?D{2nXu5h3xKU
zWUlJ(>y at w1?YzQy_D{^ppPN6M9N6T*CI>b-u*rc<4s3E at lLMO^*yO;E2nTAF3o<`X
zTc2**8)^hkv){wd^X&I-`*|q!{CxX;#(oM-`3c|eFkdrw*w4STpW*X!?e|yO&%^dX
z`25FgdeMIVZR+_2HvNSCJYX9XzJHEQU$CDKq at LU4&5unEY;s_e1DhP!<iI8eHaW1#
zflUr<a$u7Kn;h8Wz`scjxbvCJ<+SWqL{Y~7AL{=fyCjqOD0l~W8~Ay!25tj4f*Zik
zg6Dx}gA91|;!NgK;6vbE at Y~=NxE&k=N5M7VXTVQ`$DWbN+z);O{5tqmumWxYhrld&
z0T=|&1)bohz@^|Pz}GIKEN~Y%3C6%M=mh73uV0wS+y_1gJ^=n0{4O{QZUkfC9Pox8
z&t$UTK8zGMgYRNYxEl<D&tZ7 at 1@L_E5JrwNxEQ<(gUA8!Jq#D`1UG>vF*4i*t^<!?
zU-&g}4R{#d3V&Z48Y9-1q>eRb|H!`aq5R(2>HO&anf#Hy-hAKTzTO^Z&5_ at oVM1q*
zbI?EO6-Ud}Ww$n7S||?;43~@LdUd2!D9`()#UrzaoKw!Jo=h{*Lq}$J=lc)uR;s&%
zYM9a%+1Vq9Qe?xFcF0n-BT2GRN;_n!T8eCx(hga}$-ewf%iaEnyPDP(Y2{{$bR(@D
z(uSi+(y_F5NE at yuNypOKB8|B989pP*owMd^I~0+K7(w%`9eP7kV|#b=1J$dLgf&Ng
zcP3I#PaYcU3}i!{k=)mxpBNGP{X3waOg>u$>}_4Z-jTCVK;L1hc(VGE)(+{tV^fCn
zG19TLc1XkEUAuP4#B8Qek-k`3o1}N{+9{K>?a at A&pCR5zJxk<Gf2PT|*PZaUQO{^~
zNu;(@`xv2E?Gvf(khff>Tj4qDZH)7h)-LItrdtmV?Yn+F-MOh}XSJvptE7dAqT1_j
z$nDs%Lxr_ftJ2TfY*mt6vQ_D4XHZn3TncJVP at 5kZSavIW>VBzqRe!$L;~d&C(LWtV
zn>O}YgU&*<=i2X9oNJx6jI(V!aOUcP!{*Bi<jb+Ss_!j0Lk?7(+LBvy+#o0ye7EKW
z>(Qnf)q0`k)XJK}(TG_kcEYVD%gt=x#`gM}Ovh=qfmA5IE93>!;KC9Vx0Q&qC8=Ht
z{Kb+t at 6dQ>&aVXry{gi^CSz-~4l^2UKUQ(8?sBR$XJ)nHIpqbL?09x>s!cL4NDZ6=
z@{4Ty+4tIJ#<IjK<m{z(PQ|M_71{pA7%h8X*$eySlH<;m>ovnY?G*FGbjwpWNZBfN
z3My{Fqj{N$$+7&tk>QD<sgeBf(9Fo#<kXQaVF$j at M#d;+SzfW?U?o8EI*}kbLkGvT
z)(d{ob5bGAOB7GHKG!c5iuHNV>5Ry3r)Nxbw8})jJojR+P|GcKZX~k}m_A)*%OxS&
zpt`3~g*i9yw%2QZF~}_quAie=UX<r8GZ5&#?A5BPO&Ln{liP(ESrgx#E<he@!?TRB
ztf^><M!n=Sh?6e{tHE}^T&NXO$+ap9QYsC(@Z9BiyQ<!zcQT&fmzUj=Ux_Cz6iSAA
zqq(g*E#1#>*a}JN2|?{n)(rkgWXLKKGhD8$R{h1Ln$tDh?ezEdUESl1mCK8W(Ritl
z6Up7a&6z&9?{Id4`1n%bWyj~eQq5oRz3PB7F?Mhw+n?*pmaEw!lMthSdq(vCucEuY
z1)Wy({{^d?egb{|{osAz?H~Yqz%Fn(xC~qjE&>;V9|M1nPXAu;YVZp1a_~~H19X9h
z(b at k9+ylzsRxkm65<G^!{#Ed9 at J8?&@M>@f%z$aI1w0RYAD#W5z<0rWz`Mcgz%PM2
zz%5`acoz5;di|e(kAT;KJHQ&a4IBouU<UMq%fX}Q|9=iX1U>-X5B at uNC-`q*0o(wt
z2i at Rua2fapwt{=X+raC<NpJ%g2hRlOfq%q?@E!0Tum(<o6)+5X!T0HdzX6{Fp8y{R
z9|9i)9{|!vZw8w`n;h8Wz$OQNG&pd|VNq+f&tmn;oXT`my;{9masvN0FSsU?=^!ag
zTa)c^N5`H$PUnEr>F_CQe6?Dxc4c|3J9;`>a_3k@*>!uRx*R;Kd4{0FUb5oOo0s_m
za%=~6_t)c$2&L{!hri%-LC)FZ^g3I%IP&Ke*E-pe at dJm3CK4$JCTC`jbjuD=tJ%@v
zIL<T`U(?b?C_A_8p3JZK^R=a(WZIIaEB`62v^F;9Emw-{QS)<d;nuD+8Nbv_hP04O
z4^`;sm}AFtt8l?KfyM~$P-%42)OBcl-}vNketLHAzL7)ukpr{)^P^Kk`$zKA<F{Z9
z+9LIkT2m?B48P at 8mi)pJL}cR|zC1cPwSQ<PKQufuerQCBjB<;@L}vL&qzm7#749ce
z{nEU5QYt8)`ow5Vv29d-0Y${iO96T5&xnz{rXs=i(dkO4JR#NIYpyYrue{Q9ljuWm
zgo0E-Ji(s3T-`Gb=_$9g=nWb%xhAtli{yt6O%Rq=b)!R}TsFU((5VInq^<|uc_AJo
zs|OS4u!gX!j(IkP-R}I`7x#v6YaMfydaz^!beWC2O1QE_1?C5lKhY5L!;||&{6dmO
z{K9V=6Tc{T*!7V>MNg6f*eqs}F)yt#QWn0q5h-&vBxZ3*8q@*847Zk$rev1Z0yRt(
zn+2*nE>N9YJDn?;{Azw}HJ=@n>9(tz6w;#-nLAOMl9r2s0hGOiRd2yRNq#jf#K~Ht
z%B@}=<?JPOZ%?9vgI%i8jcBQ+4;gAQnV0ItVx?AP)XBtjMLb)kW51jtHZM8bVvpdv
ze#;IndNuQW at 9F_*iD?%l=qP1~@)NWA*oJMf*)oYr4h$?*%gctG5;HGqCHCn#WLt?I
z(=Vo>d1{|(Y^d)Yvuzx5O5RFw)hRFs*RZ at KN|k{a)C&bK2zo+pIGo1zsw;lrS$)u0
zT#ovs<F at CVnI+E}Jxp74-4xX^mQ{Ha%V}%_&I+_y0U=;t^#dlpMO13i=aq&VGe;TQ
z*09#yaiuBF34h)zQ)_!Xn|U;-xg~5U!a(Pk8xbzqI+~J=#Ur$sSmsDW8kB at JPQk6X
zbAHjU`3dvd6xIaaJ7KDRx>puTNj47*KsD&<Hg#ysugi>>VqWJc^Cz-p*dii;Sb9Zz
zp`)Y4!yI)$pt|tYHr~iBFuQbZb+&dRgeucIGSt414?MS8Sh7MY^n0)v)(UI@{Qkm}
zm>{}Ym-PiJsamYm&LnDX^A6M-l%x08*uNa@&0c-{%B+02*@fe4J5F^vY>!0$zmkn)
z89%k?|F5*0%Fm$Biw)p at a3A;psDnQ6Q{Y+PT=2ip>;DIMD|j6^1g-}oU>~>|{4Cf7
z`oXioC(!rr26uutfY*a#;91~)^n20$UkOHm`13CS=Ysd6&%YhK4g4H91!lnr*bXiS
zmw_*%$A1Qh&i^am#o!n?0z~H at 0#|}dz~kudkAc4fUjTm#J`3Ikj(`in$I#tB3SI&3
z0HW8Ag72fV|2_B;xEFj7{3dugcnNU9i at -Rz3j90pZS?nl0RI#G0T7+u2m8P-a24nW
z{~nwN9wElyPr*argW&z(k3b#tgYDq+*l+$4d>s4^_$_b?I1EO?2)G<PPF%vn;BUa^
z!S90=Fb8J9G<XikfJc#sKL&S#SAmy<mw}gpDyRUFnMJUnA2YaOdl<Xr2zN2EZBOmn
zW#cZ(t8Cmm(_0fHogaBJT&@@Aol+V5`ux1vkBJG{PBNiM-szMVnm6xeg<-Dps?5T<
zz+--&mt9PUwUfJb)PnFi^MI{)&LnlMX%)?8J#b`u-qa9T!(=lW$d0|X+9ku;4AbT<
zq2|-sCbk!p?VlDSvxhV-xjR%I4KUs4D`vIlmF~t~%+9JtA4>B;**ji3;THXQ*=}1^
ziN7dK>ds%zU^oG?JK#HWW=^U~TVPeDV^l5gLC73gX%p+&z(ANIm2A10Y!C%>H!qh(
zA2$s?0$HPidZkj94s-1CW$D<J(Us)}DmhuVWYcL>I=5I%Nk!nerFj-8W?d^e4a#$?
zwy1DHE0-+!*lH at gk;SSvtNTYPBq@|QhkZ4nPudzH$5JWl8aT7MiDSdIOjoSNg4HWx
zS4BC=4q6TGS|{*|xoXaQr6<i(RV|S(^H9G<&sL-KTDcOXin3*L7rg}(p at fEwV3ASB
zp|o3u<3=^@06kOcgc^nFt=f6bt+I7X4tJ=h1va5^>rk~?8Z~XDw@&A$M<zy4JSPu`
z&gvC)kjB}=i*e at Bq!@pqhatDjGk6p|S&iNh9!1IMr-sr((OnEkrkj+qZRoX*`NO6P
z2SbHd%GiJ!Ez7++4CCrA at 4{DcgYg#>W!SGtFLg{s{N5(*?am0}QX`UnnGOjw4a=US
zc5ABNgFvhMGu+zt#<s5x)0ONG7jew7OH=EMnbn)Nv$gVk+1ZCKQSx|2s})vc#z=-t
zaXPo_91uRVTucv6Jb=fwTXldon9>kB#^)SGRVqc_ZgJHmsXJ=hMY<796~vq)b)0wX
z3?VfY5zEhv&E&T^+SxkB8`Pe9nqdBDREm9fqF#K9O&HURk5)}#z7rD49R4=7Pj74g
z70wbeA2fLL!<;3?)}1B(HH}{Q^>1PHCdV$TjOuvo?xLX>2}Nq8{Y#G9Mm<I4jg8u|
zGat37DOKm8P_^F5wj~TDnYTL{qipJi$L=kr;+nD1`mJgodwIpLEhV=(TJ2^<*}U4U
zD(jpgn|B&7rW-z3&dkodVOGcXQ^nK~Q{mU$CN!`1LYieP%i2*YLtOTxl4R}enk*Lg
zk;uGm-)OZNxM_A|>d5fWL3RS7`{!j#t$)~svO^fpuW*a$l#BCh<!&YR0;NBvk5=3O
zji6R7&({kq1AfUqc24Zf5ejJPVV1hUS+28fWtkzqri>*;rgI at b13#GO4P$gU)80++
zD5on|(g+{cU&BZ`BnBwOddnU0OBmZV4U-kh7^?;b$`!BFHJP8<ck>i&7yZ8*1?~}1
z;?V!)Z~6IMbbE>M{~G%G>%j}a|3g224cGxbgFb#6xEwry&h3MX!F$oEUkJ_v{}tVN
z5{Pg7P9X90UqA<b1;~O=q2HbY&j){o9=iyh2JS*v-3dO19_oX0z}@JXz2JUg=nny@
z at 0YZu8~oK21V6oZY;20?dWp0ocx_ at b9+KDU;RZs=hHhRbP`8<0EPSoi!?RdeGT1Ox
zm_9tag{|K*3foY;;reWx8XMb7pY1z1ygw1CJ)M5gR+Gl2_KvkICH<hiQua=*Q%dSV
zTcubjZ{}F~L0hF*_76=A-Q2QYq6cl2V%Z-NlOSCQy`D}#Xs;B*{uZUA9<)`8Wq)%i
z=?86<BK^|bA)3+_U14~VZj{m<U09r=8>X~HSD2cl8>O^ER}TAd^dfP3A(nP}(ob<l
zi!(A!q#J4Nkd}izY0|N at c1X*?o;2xLT05jIU*)VzbW$Xi))r~Q*CgpiT05jIUlXKb
zY3-1<d`*y!rL{wP2)UHu5<jyPCAC8sB6^_lD%@inhT?Z;BdJZoQsLN9A6wszoFO9X
zI{P*iFgbzQuN9WxdR9^!(cjx%jTzu+(js&wtsT-TU at 6kEw020VfTc*s(%K<?WFPa=
zJ~={~IDnH(ZmR%zkR~1_wM7^XqzOk!?GTnuOA&4)wL at 6CEJe7H)DB at Y`<p3Resf+~
z*2lj7wusVbh6OWS(<qd*wn)?LCen?xc1TN4rAf!q+954{l_niaI|I_9|6hs<{flxo
z9sNJNzwfQ+{-fX#^nQuw-wyr)y}u5A8hio0|7D;TWI+#j4)_^xDR=@~!0&-~f}>yn
z>;gMMA2=6$7#qO@;3PNzZUo=MUhp08ZSYO-5%3CdEw~!&20Or|;PcoM{xA4XU<7;v
zo5F{|1E3DJ0I at N=3>*ft;3DuoYz$RU1`hZnwuWB<*MhHLYxo^732p>8fKhNc_($vy
z-vUp9C&0(SyTCiZ+rfVZw}TmQ6SxRG0AGc-zaac=^@AyBXh9BR%y|-Bh4-ZgdmK&x
z{IPYMl1u8{#wlHMu``LGNX~Or9dkTMj+KeQjxaEJksQWpRN$nJW}dI&b*Va-h1IQ4
zCt1!<;lXh0#af(}nhwRx7^iRDt^P9qp&{qoyyS^bsaBJkN>z+c)6{p_U8N0FCT90s
zhn$|=GKaC`SX;sYHL9Lu0&}F5({ctY86ac=kA$#RO1-wy?v2nCkM&bivkeM^2DB;b
zRxyhIOVFIQzPBB at zMZ+Na($u8nj>lWzm~<0S{CQggwL6#&~P|kF5sl5kFDEI-FMm}
zwnjM6$~BG-idU~vElXgSglzG}t4bE}MtQXrj}&2NBY2AVF~alI87-}`L1hc|qQ*kI
z%hHvY1POVDbk2eO4sl*sDv=RHt_WeG2MbldqGiVgLg>{A!>txqg^Cq5TVV}Kl4M>*
zynVM at dZ}C$V=8vfO4Y+VrV`}1Ldf){Fy0bC<QM$Kx|mF9vq)QQh4+X(2nU6Ud+Krv
z1<0yMmL;E1t5w}nU?T)VzR2sw46a0oRx?MV)Q{)JJov_YFT+r2jf?Qd;s#9pFu_xO
zx&q!wNLtv<CIn6EnRCpD(WYsBswTDLq+-=Ij$7L2Fes~LICC_Rxf{krfe!0SiAskR
zGCsocI}gg+<8p>f<MF7i6*VF5aO$%nvyJV?PD6jcgj7n+^bcom)C=%BinNG%JH_~H
z7+_>$j!vR?t?1iUb_JfN!l)Gq&Cd-}^r(*XZf!^8hFIVNlS08bi1o~@?Ish8VMT+=
zTb}9=2nfkG6<GF=+*N6a%^7xb!HgV<l<9G9EtOY at q+miss5*^Egd-mIOC*u;z={ac
zIU4=goZS?`3lc)&*Bs{TusCW1x5OnIl#3jgl)w!#5t9<0S)FOjo~hQvMOOy<(rVxr
z+#>v?->6Z^%r6ucn3h;}6N*`6exo2emXwgGq|O?C#gqTFqx{w?t6bwp^K^+oPQsB=
zC@)u-qe^nnHYSUKM9ECA5)rzbEtj&xOTIbREc^~+ILon#*t at o}Fr&6qE!P*9gaKi5
zU^qcjb<PQhGexTsaAdJu6>2lG05%3lC}gI`S_?s(ZMGejG1eU>91o|)tc at Bn<ywNm
z6AizT8XU866)o1L#B3jiJj_&CtZ}`FNHwBR?cg!>h9c)n0~tF#&Vow>X(FOG3<;VF
z-F8rO*P~?`(jcf+PCM;}LwDQiz`&9lOq=YX3oq?pY}o+1p%DZuJw+4d>HOkqt0qV-
zctZlU=yY<2(j!}rxbshCa471Ius7B%OgJk|4iA&yzspZe+Hc8jUXOk2x8$_E^Mff`
zJxQZeyj#aJXAT?-*-+-DL(graOJd^9nPOHLBP4$85Ia6jJgR0cL9UYRwDK8``-wQb
z>X_5v&PtWw7G`@9?Io|spX(oiZ&b|)c<S7hp0>hQn!cdwhJzzxD0rCRjV(U>eg-;7
z6V0LPrw_HbH7A~Wdh*;&VU0SRA3LV8MZ-n6>M!7j)*BHBm}EVWeFGDK197`(1nL1!
zx6^o-j4mr}RpmCGxPcn2 at 7GcXMw)mmu|4AAw`d~XNNkI^x+~JeV~K4Mw{9iu2den%
z1!$qGPZHZAuIv?4R-AY&u|49#-X`LW#I}eld(*^YiDy7u^#85srC+!Df6?lwZ$bBe
z6Zma#2uQsDN3a3h0j>l8gbhIM at B1?NL-1zsCLrhfhroXXU%?I_c7i_#zXx6mmcSy2
z+YQ84 at EG_S_%e7im<C<obJzsl1U%q^OM%!3z6(A9?g4KCZv;i~BCsD^0nP#6#4hjz
zcpTgh#8$8f`amyuK6ozZ1ebx&Vl#L>7z5wKRv>5Z-v=t77i7T`*bKf3-U40)ei^(F
z41+BAK6ZqUfwzK_;5c|bcpiB4920kclFvG*fg!LHbONz0{1tczd>A|k-T;=s9&kQ5
z4}6FI`UmhWAbs})*x--eFp>%#Hd~<VU_<LBYNS>kj+F2&v#A+fuH{T#8;Xt&mK}@~
zVO~n-%gLUbbt5c6c33tjxmE5cTse_Hidxonv{8wi4ar?ECi#qlkxhx|a|VRhG)E+b
zF*eRxJj$k3xRKuCC{f2@%{BH|4?9FjmZLcnXL!3kH>(F7^|Y<r135i1lOLWQhLIZn
zB&w^P)Du;<tNSP)$FqY<fOB|T>?M+fwd6-9^3#*EQ^O;2=zx__wj>bJC{@|4$zINc
zz!t(Y(1GY+=(do~$y&&Z63-SBhOl!Q;v#!_iIZ>ijR=VFsX4EPY^SqxM9SkBhi&}m
z_{hY*{DH{>a#Xk}tB4diL&}l(waOcX!-u(J0 at x~lC~Ar9QRH{jMwmkl_?@5;Mr?~(
zS`evku}d?A8|;Ei6rk<Mk677YzoD^Si1w%|&n at D!TPQ5fHdE$Viqm!rwK^v$tkkeQ
zwJj0_kh^`@W1<oVVsf;V>~>bvh&f+2`+nlBjXGcT2!B&uA)$z&e2W@|*5`{}AK7el
z8*4VjlELnWJBKiqo$yRq922TK=wwD+nAYy%Dx84<!tG2Br!)GqQ+NJaZ4LQ09M=(I
zn?z02uG)%Xyx0UGja{__WVD&K#VlJ;m6&sl|C5Fq`KFr0bs|v-V#g&#tJM0039s9t
z7|X_LVdL5Prj(4qbeed{$TDExz`B5zADV)UN*QuYN554BqB|Be*3-QFqq|ff*CETr
zJVWnjRJwFrdrQTbT=?6xR5T_(De7Nr%4v+|_=$6Ae#?9E&f=8Ab*Vqp0Zz+$T22}9
zVq;_Sbi+HARZeD0ugNU1;o-{!XM^2SLFAETL*|UcgvlHw+m<sM%rf3XqikZQX9l<&
zIE>#L80}k<$w=hEr at n?7JzS1KnTYV7(DP)?^`fMQYIrB>rRLHb<}g`#C++4z_mDl#
z4%x!!k<ZzZvEiD*5e`Q=;n~=$-RxFNl)^iw967Endo_-9#@j^Y#W#^1G^ai(CjOM_
z$o at rgNOZYji(E3urH?s}^W1v&vBR7Xl}zb8dg$A{rY(>i(P@~KV!ATUu6TN`TP{W@
zS0uu|v9;1_TL;3mcK<XyIWajkeQ;=agsTfjhh`^c;6oVMzG66IV%g2MOAr5xm8eBw
z&OFO7SLo?_<(?>WN|Z|<7NrMW4P~FxlU%ISJ{Qt>>fsW<kLV88O=<0*-8pA?$t&Ed
z%ey{Tw}%o at W52pByVyLecpTN_6YeEM-8#Kw1Xy<yhRxE}nv$^6U>=AqQ4b`zrY6S0
zA|r)WQf-ONJi^AVgxJNn^KQ+xeI9f-Dr_5sX}jQ6#O6=ovF&qCNh=Yt7pCgI<l+Ie
z^)ZC7qS8X;UsxDtg^g7_Bhmf#wh#Io8@^lIGb~(Hx9Ff2H61S40|SXcOa(c1pw>a%
z9_ta;h2@&F#Rz10S%>KV{{hAEndp?_{}2Cv-h=4-cZ2;v?)keAd>p<1qu at 2*Rp2GS
z1M@)62MmI3pc{M}{r|7PL*P%qyTKd5OTbaEAKU=OK^G8P!K2__ at E-7H@M3Tb907;H
zb|CluiH+b(;EUk at fWHR+8+;0g?cfC10=|f?;9+nlxB(1<>wuh1cp8xV{_h2H*8jJ_
zouCH9hA;@ke(-eg7uW?J1TO<8Kme-XCU6i)?7=YD3*?N$#o$8lK5Ph8&;{iG2Yeda
z!7qdBz&EfHJP7UwcY)so%ivZp3-$rAC%gb$1TFygVn4VO{5qHf7l3oYeb^0F!7R85
zTnv63$p1K$c!cYK{2v18<4eF({h+aMRS{~73~!@l%9Rw%ZIQ}Z;(M3OW#N3nzH+>O
zSWe&L?~=_w^N0i*$SB3pT(qz1Wh4!khnapt4}s)0C75h;9&&0)_*J=|SFdAb){~r4
z1%|c8L<DBEk<4sUSYrNR7hNsSq0O#3-bs8BIcErGCEhK_cni?2VGOTVdEys1&}wQb
zRFqOym+KS$av_{zq%?d~_%MuzDsZ+=tE<Wx+NzBWzwX_tjZ!j>v-QQb-QLR8#^;xJ
zt5pIddb7Q~eZ5<8dde9f?urVGDz#8%USDAfRkz_ny=2bsO3A8B;art=2g^RY`><YJ
zUT)D4${I(rW-&GMPFBhRwO%I5!)I2uN(Q|nne+k?!$n{DXRD)pjeN1vsiL;n)9li%
zwvQbx+S%$apX~3uI at Kz}z~wUB#u>QG#-v&=(hTvWO8bPYWu&w%x)M36m{dk9WLur^
zfpd+r$tdfLY5k0 at Ug$q1)HTkN&%1;J+(uzEN5t4jh0e65Tu~CuoU0-y7s`Z1j-14i
z$T`{=hxGayEmOSYaVe$v!~raG9gJO^uQ1;lcRs9T%%mJ2VOtXFIu}r5*(l;=lA(ow
zMBc?@pIPU<ahs7(vPuObxiL$hb(f|_pz7fCK~`?_4ew9D&@*m^Rx~oiV<(H7iL!95
z*W9wS;?~&ll*FQ71T$QQP+?=kSPrn!FE)sYQ7H%J90E4#>MLftKs<Go7eXR^_Km0|
z(Uw9+aI9`D;-2j)BM$J*2z0n>KHzb*kvTygt8R<m6$vp3CeC4)8Kla{BbPihV at A|u
z{wn$feEQlSmcw}I*!SS(U6e>HeImLu>pAtV;;J<x&#)D#mx67Y$*k>@hH at HE2Lp}3
z-$&`z0V-E=BYZ^5$kfDGmCZqPjS{&D$?>Ylv`&mdX(lNcm}SZ<jW7fo^<c#%sCWgg
z0%lq>*H&qzEWhb$+sc-QM at 1?Pcax&m%9M<!U*f~EgY+(=u&Y|jF at fYI*$W~q!fwv^
zV7SC~?dDEJy#iv?L?6*?*|nMX*E=;TyJ2W;=rV|@$=R9l17m2~Rk;EZ>qaeSsI$sd
ziNb@&geTSV>_%&P9XywL<!ggoQOjg+$nKw-CmJWOhmF^!+Z-FQ3fdPP)+S>Qge#Uu
za%qIL?+X08K|UAv<ae__lvAFmSp<GfnTmATPiLDgpeJo!OwBYu*wqczvL`DtqhEH|
znBe3R3LON9bkblLHnye~XJac2D{PI0BHTl9Bbg3iv%|+yrgW2J<OT%OXtM#S&`apa
zHSu^0wI7NZAuQ3f#E9w{Srhycb>^B1TXPxD;onMAYHo+*G^3!=MpL4lW|GWlX|{_U
z(Y7~}t~>C;yMXMv&ybfYd4VYCI?&=HT2y0OWAtbl at XhxQ*-@^ldt+3SYHn^b)Ylu@
zO_PJIgdOcrVZ^j at y^Ikeau!Fr>7g^4)}+B~rS;B})Qz((*pOy73~4bnMy)q@%pRDW
zKFDS8YwH~Ycd!WbI=A00+OYhcwTI*(6P*s<IP=moSxW~;D8FZAD#JQAWjO!OG?o4H
zOcOtl(J^G~Q%w?6;h at spM{HN7%NjeFaIkVk3|AiO`G3^W%r4Oj(f{wT%Hcie`(<zw
zH~>Wd{{njb=fG#dUxT~B0+<7$_jiG3fpfsqfy4)VRdjps2)GM~-oFRz2Iqrw!6(t{
z<=+1qcp;bqli&c5vjtazZ9wk-|1^62pMiIPUj)a&5pW5326z&^{+r-_(eJ at qz$vf-
zjsv*|a1!hX6X1H#3!X&J|2p_D;4s(*wt`Qi$G;K`fG5%6p8$`8uYiZZtAX5SAb0+~
z6wHI41dqYg_k!O5F9OHFQE)Smd;Tr~au(r1^!oe2hk)Gew+gNYqW at n4o&g?5$A1jm
z1Kt26o}deS=N$S3$UO-k1%C?O1KthfZohW{x!dm+a0pxm9-*JV2>uQ{48%roANWIX
z5BLM{``}l>Aut7Y1CfuN!2Gn_b?C(sO{&Y8Zz#g`Zjy^C9M|mKqlG_O+X_YWTQNg4
z-8A=eiQN#&6qgRJWjY3wlCgMq8671%Xtu%!*x#~jg*SHQ?c?rDg3`c1;%k at D=2Vjy
zQFpwv&5(_FfR?lrTfn2+Qj^QIxgXVa;*{!vD6ZzD#tGT)l&E6VcII-uYQ;>9IhGh<
zguPQdoF(KgHqKwkDldz+FYAR_pNS3ci%jWGm%6WFHg_T5nP7x&-H3N95n0U4BNHEx
z7te+ivRw%z9?7ETE>m*sCBJlQ>sRD~dBNQLmL1fEFW!!$T7<99kIPe0jBE#}{e8<(
zpK}gU@#D^bV;dv4h3UnAUEAbDjop{T)Nfm=ElETv_AtGvo-*7PJL|NX$D#|5Q(NdE
zS at Wg)Y}m5=DYJ3dp!B|OC<we|=3?Ep+O9>L+yD(#zijEMXcvmuQ+O5Andr;Ws7aPB
zhIQ95cTb82t9;{X8?#TgyUmo0Hdo%1l^7BO1C~ifQbWEpj_lBFm=hZ3P3+xk>baho
zIue?|b<8v!yNNmRV}nW-!>1x^E}TCd<tAUB^_r{7Y=RYP_CHzK!bAcaPSI}dJoK(n
z6PMB5Xrqa^)tl>5%rb!<t$1brXBb`6IDKKFAR18w%Cp$TmC6#SBS*W^qH8J at Bua8i
ztDzx4?<|zr+gb6k)?%H|$raD8n*7L!IB86fI8}<C*p1YRB#-SpjEzTb*OYhp#IA&9
zf+3||61tI at DKci{oLNp7$OzHv3-N78{bjxk!x79>iaE(zD`W!9IS0yWsgW|Q1rNUw
zo=>^ci22(OWYJLjnKP8+g2X!Mj4jtCQX#eKB`4j`(junHaM1D(q&V(C<)nV8!!yP%
zd86J8<s?pUDR;tC3wksL52GFfkpnwn6XS<(p88CX6fT0E5Fl7DqaCZ7+`P?@E-7zN
zLS?q;#4{8fa}blp0!QgO8Tz&@c9<J3#byfT24e?PTdh!vn_s0O$6Ad1^wPv!slH1-
zWzzNu60|;6F at mus*$cGo^VsUMkc+~(#N%sKPE2tqFJ|Z^U9c>BW+AqISd_tJHsghD
zP}P;vmb;*r*y^&9WswV=Z3rdHm$L=2!cNKmd)U*Z3j-!?`=CzDfGIZ7C1#-EV~e%`
zaSJYmR^W#vg1v$SWoRP=X`#8B4b4<OslNzBf~4dz#5K2>!p8MxW9IuB_ELr~mMx5u
z_Mjm%jM-ozEM}b97N9K<q{P6|DyMrl)}8Tx%@=M#>>4I^D}IE#y8bGg<^Kt+WA9^Z
z$4@`FC$Rsifr$PLr}(X`{kof3S00?T4GBafWQfCBM*ipH?tIFQW>_&W5N~37&6l%c
z(HyN at w~d$1X(;qUqVYcqr7=22`D8il5qCsyczDR9F<Zs at a4N3UotCOdWNbhig6S>{
zg2uLyNhIteIw!UTvXUC;f1NPm9($UcjYhRCKltvb#W;#_;7s;N at dn#12r at 5zFg9ZG
zs03C7ToJhOMap!_9 at kTRb&j=}Nwi|m%sDJF^Wr9;r!>6ITGq*i$B}>rWRj_p3QL_E
z?hfOGWKqO#=FOX<j`kR(4PPikmzR?(8l9|9He18rZ>Re%Y9fWm9fXl#RlEt-gF~at
W$#MR$r^2aO^U3kT68cjq^Zx<5#nCGO

literal 0
HcmV?d00001

-- 
2.34.1



More information about the libcamera-devel mailing list